Skip to content
Snippets Groups Projects
hy-video.tsx 4.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tuukka Turu's avatar
    Tuukka Turu committed
    import {Component, Prop, h, Element} from '@stencil/core';
    import {HeadingVarians} from '../../utils/utils';
    
    @Component({
      tag: 'hy-video',
      styleUrl: 'hy-video.scss',
      shadow: false,
    })
    export class HyVideo {
      @Element() el: HTMLElement;
    
      /** Video title */
      @Prop() videoTitle: string;
      /** Video description */
      @Prop() videoDescription: string;
      /** Context label */
      @Prop() contextLabel: string;
      /** Should context label be visible */
      @Prop() contextLabelVisible: boolean = false;
      /** Preview image url */
      @Prop() previewImageUrl: string;
      /** Url to video, used with preview image */
      @Prop() linkToVideo: string;
      /** Label for play button if preview image is provided */
      @Prop() playButtonLabel: string;
      /** Should play button be visible */
      @Prop() playButtonVisible: boolean = false;
      /** Views count number */
      @Prop() views: string;
      /** Label for views number */
      @Prop() viewsLabel: string;
      /** Duration number */
      @Prop() duration: string;
      /** Label for duration number */
      @Prop() durationLabel: string;
      /** Date added date as string */
      @Prop() dateAdded: string;
      /** Label for date added */
      @Prop() dateAddedLabel: string;
      /** Use horizontal layout where metadata is on side */
      @Prop() horizontal: boolean = false;
    
    
      @Prop() headerstyle: string = 'default';
    
      componentDidLoad() {
        let hyMainDiv = this.el.closest('.hy-main');
        if (hyMainDiv) {
          if (!hyMainDiv.classList.contains('with-sidebar')) {
            this.headerstyle = 'large';
          }
        }
      }
    
    Tuukka Turu's avatar
    Tuukka Turu committed
    
      renderPreviewWithLink = () => {
        return this.linkToVideo ? (
          <a title={this.videoTitle} href={this.linkToVideo} class="hy-video__link-to-video">
            <img class="hy-video__preview-image" src={this.previewImageUrl} alt={this.videoTitle} />
          </a>
        ) : (
          <img class="hy-video__preview-image" src={this.previewImageUrl} alt={this.videoTitle} />
        );
      };
    
      renderPlayButton = () => {
        return (
          <span class="hy-video__play">
            <button type="button">
              <hy-icon icon={'hy-icon-video'} class={'hy-video__play-icon'} size={20} />
              <span class="hy-video__button-label">{this.playButtonLabel}</span>
            </button>
          </span>
        );
      };
    
      render() {
        const classAttributes = [
          'hy-video',
          this.horizontal ? 'hy-video--horizontal' : '',
    
          `hy-video__${this.headerstyle}`,
    
    Tuukka Turu's avatar
    Tuukka Turu committed
        ].join(' ');
    
    
    Tuukka Turu's avatar
    Tuukka Turu committed
          <div class={classAttributes}>
            <div class="hy-video__video-container">
              {this.previewImageUrl ? (
                <div>
                  {this.renderPreviewWithLink()}
                  <slot name="video"></slot>
                </div>
              ) : (
                <slot name="video"></slot>
              )}
              {this.playButtonVisible && this.renderPlayButton()}
              {this.contextLabelVisible && <span class="hy-video__label">{this.contextLabel}</span>}
            </div>
            <div class="hy-video__meta">
              {this.videoTitle && (
                <hy-heading class="hy-video__meta__title" heading={HeadingVarians.h2}>
                  {this.videoTitle}
                </hy-heading>
              )}
              {(this.duration || this.views || this.dateAdded) && (
                <div class="hy-video__meta__details">
                  {this.duration && (
                    <div class="hy-video__meta__details--item">
                      <span class="hy-video__meta__label">{this.durationLabel}</span>
                      <span class="hy-video__meta__content">{this.duration}</span>
                    </div>
                  )}
                  {this.views && (
                    <div class="hy-video__meta__details--item">
                      <span class="hy-video__meta__label">{this.viewsLabel}</span>
                      <span class="hy-video__meta__content">{this.views}</span>
                    </div>
                  )}
                  {this.dateAdded && (
                    <div class="hy-video__meta__details--item">
                      <span class="hy-video__meta__label">{this.dateAddedLabel}</span>
                      <span class="hy-video__meta__content">{this.dateAdded}</span>
                    </div>
                  )}
                </div>
              )}
    
              {this.videoDescription && <div class="hy-video__meta__description">{this.videoDescription}</div>}
    
    Tuukka Turu's avatar
    Tuukka Turu committed
            </div>
    
          </div>,
          <hy-box mb="1.75, 1.75, 2, 2.5" />,
        ];
    
    Tuukka Turu's avatar
    Tuukka Turu committed
      }
    }