Skip to content
Snippets Groups Projects
process.tsx 1.64 KiB
Newer Older
export interface ProcessFlowBoxValue {
  heading: string;
  description: string;
  step: string;
}

import {Component, ComponentInterface, Watch, Prop, h} from '@stencil/core';
import {ProcessFlowBoxVariants} from '../../utils/utils';

@Component({
  tag: 'hy-process',
  styleUrl: 'process.scss',
})
export class Process implements ComponentInterface {
  @Prop() variant: ProcessFlowBoxVariants = ProcessFlowBoxVariants.default;
  @Prop() numberTerm: string;

  private _dataItems: ProcessFlowBoxValue[];
  @Prop() dataItems: ProcessFlowBoxValue[] | string;

  @Watch('dataItems')
  arrayDataWatcher(newValue: ProcessFlowBoxValue[] | string) {
    if (typeof newValue === 'string') {
      this._dataItems = JSON.parse(newValue);
      this._dataItems = newValue;
    }
  }
  componentWillLoad() {
    this.arrayDataWatcher(this.dataItems);
  }

  render() {
    const itemsPerRow = this.variant == 'small' ? 4 : 3;
    const classAttributes = [this.variant, 'hy-process'].join(' ');
    const classItem = 'box';
    var stepState;

    return (
      <div class={classAttributes}>
        {this._dataItems.map((x, index) => {
          index % itemsPerRow == 0 ? (stepState = 'first') : (stepState = 'default');
          return (
            <hy-process-flow-box
              class={classItem}
              variant={this.variant}
              box-number={index + 1}
              box-title={x.heading}
              box-description={x.description}
              intermediate-step-title={x.step}
              step-state={stepState}
              number-term={this.numberTerm}