Skip to content
Snippets Groups Projects
hy-footer-base.tsx 3.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tuukka Turu's avatar
    Tuukka Turu committed
    export interface FooterBaseLinks {
      label: string;
      url: string;
      isActive?: boolean;
      mainlink?: boolean;
      items: Array<FooterBaseLinks>;
    }
    
    export interface FooterBaseSome {
      label: string;
      url: string;
      type: string;
    }
    
    import {Component, ComponentInterface, Watch, Host, Prop, h} from '@stencil/core';
    
    import {FooterLinkItemColor, SiteLogoSize, ColorVariant, FooterVariant} from '../../../utils/utils';
    
    Tuukka Turu's avatar
    Tuukka Turu committed
    
    @Component({
      tag: 'hy-footer-base',
      styleUrl: 'hy-footer-base.scss',
      shadow: false,
    })
    export class HyFooterBase implements ComponentInterface {
      /**
       * Link item color
       */
      @Prop() color: FooterLinkItemColor = FooterLinkItemColor.white;
      /**
       * Logo url
       */
      @Prop() logoUrl?: string;
      /**
       * Logo label
       */
      @Prop() logoLabel?: string;
      /**
       * Logo size
       */
      @Prop() size: SiteLogoSize = SiteLogoSize.big;
      /**
       * Label for some links
       */
      @Prop() someLabel?: string;
      /**
       * Copyright text
       */
      @Prop() copyrightText: string;
    
      private _dataFooterBaseLinks: FooterBaseLinks[];
      private _dataFooterBaseSome: FooterBaseSome[];
      /**
       * Footer links to be displayed
       */
      @Prop() dataFooterBaseLinks: FooterBaseLinks[] | string;
      /**
       * Footer some links
       */
      @Prop() dataFooterBaseSome: FooterBaseSome[] | string;
    
      @Watch('dataFooterBaseLinks') dataFooterBaseLinksWatcher(data: FooterBaseLinks[] | string) {
        this._dataFooterBaseLinks = typeof data === 'string' ? JSON.parse(data) : data;
      }
    
      @Watch('dataFooterBaseSome') dataFooterBaseSomeWatcher(data: FooterBaseSome[] | string) {
        this._dataFooterBaseSome = typeof data === 'string' ? JSON.parse(data) : data;
      }
      componentWillLoad() {
        this.dataFooterBaseLinksWatcher(this.dataFooterBaseLinks);
        this.dataFooterBaseSomeWatcher(this.dataFooterBaseSome);
      }
    
      render() {
        const logoColor = ColorVariant.white;
        const classAttributes = ['hy-footer-base--content-container'].join(' ');
        const links = this._dataFooterBaseLinks as Array<FooterBaseLinks>;
        const some = this._dataFooterBaseSome as Array<FooterBaseSome>;
    
        return (
          <Host class={classAttributes}>
            <div class="hy-footer-base">
              <div class="hy-footer-base__left">
                <div class="hy-footer-base__logo">
    
                  <hy-site-logo
                    type={FooterVariant.footer}
                    size={56}
                    color={logoColor}
                    url={this.logoUrl}
                    label={this.logoLabel}
                  />
    
    Tuukka Turu's avatar
    Tuukka Turu committed
                </div>
                <div class="hy-footer-base__content">
                  <slot name="content"></slot>
                </div>
                <div class="hy-footer-base__some">
                  <span class="hy-footer-base__some__label">{this.someLabel}</span>
                  <div class="hy-footer-base__some__items">
                    {some &&
                      some.map((s) => {
                        return (
    
                          <a
                            aria-label={s.label}
                            href={s.url}
                            class={`hy-footer-base__some__item`}
                            title={s.label}
                            target="_blank"
                          >
    
    Tuukka Turu's avatar
    Tuukka Turu committed
                            <hy-icon icon={`hy-icon-some-${s.type}`} size={36} />
                          </a>
                        );
                      })}
                  </div>
                </div>
              </div>
              <div class="hy-footer-base__right">
                {links &&
                  links.map((link) => {
                    return (
                      <hy-footer-link-item
                        label={link.label}
                        url={link.url}
                        color={FooterLinkItemColor.white}
                      ></hy-footer-link-item>
                    );
                  })}
                {this.copyrightText && <span class="hy-footer-base__copy">{this.copyrightText}</span>}
              </div>
            </div>
          </Host>
        );
      }
    }