Skip to content
Snippets Groups Projects
heading.tsx 2.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • import {Component, Element, h, Host, Prop} from '@stencil/core';
    import {HeadingSectionVariants, HeadingVarians} from '../../utils/utils';
    
    Markus Kaarto's avatar
    Markus Kaarto committed
    
    @Component({
      tag: 'hy-heading',
    
      styleUrls: {default: 'heading.scss', wide: 'heading-fw.scss'},
    
      shadow: false,
    
    Markus Kaarto's avatar
    Markus Kaarto committed
    })
    export class Heading {
    
      /**
       * @type {*}
       */
      @Prop() heading: HeadingVarians = HeadingVarians.default as any;
    
    katja's avatar
    katja committed
      @Prop() isSearch: boolean = false;
    
      /**
       * @type {*}
       */
      @Prop() section: HeadingSectionVariants = HeadingSectionVariants.default as any;
    
    Markus Kaarto's avatar
    Markus Kaarto committed
      @Prop() negative: boolean = false;
    
      @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';
          }
        }
      }
    
    Markus Kaarto's avatar
    Markus Kaarto committed
      render() {
        const headingInVariants = this.heading in HeadingVarians;
    
        const isHeadingH2 = this.heading == HeadingVarians.h2;
        const classAttributes = [
          'hy-heading',
          this.negative ? 'negative' : '',
    
    katja's avatar
    katja committed
          this.isSearch ? 'hy-heading__search' : '',
    
    katja's avatar
    katja committed
          this.isSearch ? `hy-heading__search__${this.headerstyle}` : '',
    
          `hy-heading__${this.section}`,
          `hy-heading__${this.headerstyle}`,
          `hy-heading__${this.section}__${this.headerstyle}`,
        ];
    
    Tuukka Turu's avatar
    Tuukka Turu committed
        const sectionClassAttributes = [`hy-heading__${this.section}--divider`].join(' ');
    
        const containerSectionClass = [
          'hy-heading__container',
          `hy-heading__container__${this.section}`,
          `hy-heading__container__${this.headerstyle}`,
        ].join(' ');
    
    
    Markus Kaarto's avatar
    Markus Kaarto committed
        return (
    
    Markus Kaarto's avatar
    Markus Kaarto committed
          <Host>
            {headingInVariants ? (
    
              [
                <div class={containerSectionClass}>
                  {isHeadingH2 && (
                    <div>
                      <hy-box pt="1.25, 1.25, 1.5, 2.5" />
                    </div>
                  )}
                  <this.heading class={classAttributes.join(' ')}>
                    <slot />
                  </this.heading>
    
                  <span class={sectionClassAttributes}></span>
                </div>,
              ]
    
    Markus Kaarto's avatar
    Markus Kaarto committed
            ) : (
    
              <div class={containerSectionClass}>
    
    Markus Kaarto's avatar
    Markus Kaarto committed
                <HeadingVarians.default class={classAttributes.join(' ')}>
    
                  <span>
                    <slot />
                  </span>
    
    Markus Kaarto's avatar
    Markus Kaarto committed
                </HeadingVarians.default>
    
    Markus Kaarto's avatar
    Markus Kaarto committed
                <span class={sectionClassAttributes}></span>
              </div>
            )}
          </Host>
    
    Markus Kaarto's avatar
    Markus Kaarto committed
        );
      }
    }