Skip to content
Snippets Groups Projects
hy-introduction.tsx 3.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tuukka Turu's avatar
    Tuukka Turu committed
    import {Component, Element, Host, h, Prop} from '@stencil/core';
    
    import {IntroductionBgColors, HeadingVarians, HeadingSectionVariants} from '../../utils/utils';
    
    @Component({
      tag: 'hy-introduction',
      styleUrl: 'hy-introduction.scss',
      shadow: false,
    })
    export class HyIntroduction {
      @Prop() variant: IntroductionBgColors = null;
      @Prop() reversed: boolean = false;
      @Prop() textTitle?: string;
      @Prop() textDescription: string = null;
      @Prop() url?: string;
      @Prop() scLabel?: string;
      @Prop() urlTitle?: string;
      @Prop() imageUrl?: string;
    
      @Prop() isExternal: boolean = false;
    
    Tuukka Turu's avatar
    Tuukka Turu committed
      @Prop() headerstyle: string = 'common';
      @Element() el: HTMLElement;
    
      componentDidLoad() {
        let hyMainDiv = this.el.closest('.hy-main');
        if (hyMainDiv) {
          if (!hyMainDiv.classList.contains('with-sidebar')) {
            this.headerstyle = 'large';
          }
        }
      }
    
    
      render() {
        const classAttributes = [
          'hy-introduction',
    
          `hy-introduction__${this.headerstyle}`,
    
    Tuukka Turu's avatar
    Tuukka Turu committed
          this.headerstyle,
    
          this.reversed && this.variant == null ? 'hy-introduction--reversed' : '',
          this.variant
            ? `hy-introduction--with-bg hy-introduction--with-bg__${this.variant}`
            : 'hy-introduction--without-bg',
        ].join(' ');
    
    
        const classTitle = ['hy-introduction__title', `hy-introduction__title__${this.headerstyle}`].join(' ');
        const classDescription = ['hy-introduction__description', `hy-introduction__description__${this.headerstyle}`].join(
          ' '
        );
    
    
        const contentWrapperClasses = [
          'hy-introduction__content',
          this.reversed && this.variant == null ? 'hy-introduction__content--reversed' : '',
          this.imageUrl ? 'hy-introduction__content--with-image' : 'hy-introduction__content--without-image',
        ].join(' ');
    
    
        const target = this.isExternal ? '_blank' : '_self';
    
    
        return (
          <Host>
    
            <hy-box pt="1.25, 1.25, 1.5, 2.5" />
    
            <div class={classAttributes}>
              <hy-main-content-wrapper>
                <div class="hy-introduction__outer-content">
                  <div class={contentWrapperClasses}>
                    <hy-heading
    
                      class={classTitle}
    
                      heading={HeadingVarians.h2}
                      section={HeadingSectionVariants.introduction}
                    >
                      {this.textTitle}
                    </hy-heading>
    
                    <p class={classDescription}>{this.textDescription}</p>
    
                    {this.url && (
                      <div class="hy-introduction__link__container">
    
                        <a class="hy-introduction__link" href={this.url} aria-label={this.scLabel} target={target}>
    
                          {this.urlTitle}
                          <span class="hy-introduction__link__icon">
                            <hy-icon icon={'hy-icon-arrow-right'} size={24} />
                          </span>
                        </a>
                      </div>
                    )}
                  </div>
                  {this.imageUrl && (
                    <div class="hy-introduction__image">
    
                      <hy-image image-url={this.imageUrl} aspectRatioWidth={7} aspectRatioHeight={5} />
    
                    </div>
                  )}
                </div>
              </hy-main-content-wrapper>
            </div>
    
            <hy-box mb="1.75, 1.75, 2, 2.5" />