Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
property-group-interfaces.ts 9.33 KiB
// eslint-disable-next-line max-classes-per-file
import { Measurement } from 'common/models/elements/element';

export interface PositionProperties {
  [index: string]: unknown;
  xPosition: number;
  yPosition: number;
  gridColumn: number | null;
  gridColumnRange: number;
  gridRow: number | null;
  gridRowRange: number;
  marginLeft: Measurement;
  marginRight: Measurement;
  marginTop: Measurement;
  marginBottom: Measurement;
  zIndex: number;
}

export interface DimensionProperties {
  [index: string]: number | boolean | null;
  width: number;
  height: number;
  isWidthFixed: boolean;
  isHeightFixed: boolean;
  minWidth: number | null;
  maxWidth: number | null;
  minHeight: number | null;
  maxHeight: number | null;
}

export type Stylings = Partial<FontStyles & BorderStyles & OtherStyles>;
export type BasicStyles = FontStyles & { backgroundColor: string };

export interface FontStyles {
  [index: string]: unknown;
  fontColor: string;
  font: string;
  fontSize: number;
  bold: boolean;
  italic: boolean;
  underline: boolean;
}

export interface BorderStyles {
  [index: string]: unknown;
  borderWidth: number;
  borderColor: string;
  borderStyle: 'solid' | 'dotted' | 'dashed' | 'double' | 'groove' | 'ridge' | 'inset' | 'outset';
  borderRadius: number;
}

export interface OtherStyles {
  [index: string]: unknown;
  backgroundColor?: string;
  lineHeight?: number;
  itemBackgroundColor?: string;
  lineColoring?: boolean;
  lineColoringColor?: string;
  firstLineColoring?: boolean;
  firstLineColoringColor?: string;
  selectionColor?: string;
  helperRowColor?: string;
}

export interface PlayerProperties {
  [index: string]: unknown;
  autostart: boolean;
  autostartDelay: number;
  loop: boolean;
  startControl: boolean;
  pauseControl: boolean;
  progressBar: boolean;
  interactiveProgressbar: boolean;
  volumeControl: boolean;
  defaultVolume: number;
  minVolume: number;
  muteControl: boolean;
  interactiveMuteControl: boolean;
  hintLabel: string;
  hintLabelDelay: number;
  activeAfterID: string;
  minRuns: number;
  maxRuns: number | null;
  showRestRuns: boolean;
  showRestTime: boolean;
  playbackTime: number;
}

export abstract class PropertyGroupValidators {
  static isValidDimensionProps(blueprint?: DimensionProperties): boolean {
    if (!blueprint) return false;
    return blueprint.width !== undefined &&
      blueprint.height !== undefined &&
      blueprint.isWidthFixed !== undefined &&
      blueprint.isHeightFixed !== undefined &&
      blueprint.minWidth !== undefined &&
      blueprint.maxWidth !== undefined &&
      blueprint.minHeight !== undefined &&
      blueprint.maxHeight !== undefined;
  }

  static isValidPosition(blueprint: PositionProperties): boolean {
    if (!blueprint) return false;
    return blueprint.xPosition !== undefined &&
      blueprint.yPosition !== undefined &&
      blueprint.gridColumn !== undefined &&
      blueprint.gridColumnRange !== undefined &&
      blueprint.gridRow !== undefined &&
      blueprint.gridRowRange !== undefined &&
      blueprint.marginLeft !== undefined &&
      blueprint.marginRight !== undefined &&
      blueprint.marginTop !== undefined &&
      blueprint.marginBottom !== undefined &&
      blueprint.zIndex !== undefined;
  }

  static isValidBasicStyles(blueprint: BasicStyles): boolean {
    if (!blueprint) return false;
    return blueprint.backgroundColor !== undefined &&
      PropertyGroupValidators.isValidFontStyles(blueprint);
  }

  static isValidFontStyles(blueprint: FontStyles): boolean {
    if (!blueprint) return false;
    return blueprint.fontColor !== undefined &&
      blueprint.font !== undefined &&
      blueprint.fontSize !== undefined &&
      blueprint.bold !== undefined &&
      blueprint.italic !== undefined &&
      blueprint.underline !== undefined;
  }

  static isValidBorderStyles(blueprint: BorderStyles): boolean {
    if (!blueprint) return false;
    return blueprint.borderWidth !== undefined &&
      blueprint.borderColor !== undefined &&
      blueprint.borderStyle !== undefined &&
      blueprint.borderRadius !== undefined;
  }
}

export abstract class PropertyGroupGenerators {
  static generatePositionProps(defaults: Partial<PositionProperties> = {}): PositionProperties {
    return {
      xPosition: defaults.xPosition !== undefined ? defaults.xPosition : 0,
      yPosition: defaults.yPosition !== undefined ? defaults.yPosition : 0,
      gridColumn: defaults.gridColumn !== undefined ? defaults.gridColumn : null,
      gridColumnRange: defaults.gridColumnRange !== undefined ? defaults.gridColumnRange : 1,
      gridRow: defaults.gridRow !== undefined ? defaults.gridRow : null,
      gridRowRange: defaults.gridRowRange !== undefined ? defaults.gridRowRange : 1,
      marginLeft: defaults.marginLeft !== undefined ? defaults.marginLeft : { value: 0, unit: 'px' },
      marginRight: defaults.marginRight !== undefined ? defaults.marginRight : { value: 0, unit: 'px' },
      marginTop: defaults.marginTop !== undefined ? defaults.marginTop : { value: 0, unit: 'px' },
      marginBottom: defaults.marginBottom !== undefined ? defaults.marginBottom : { value: 0, unit: 'px' },
      zIndex: defaults.zIndex !== undefined ? defaults.zIndex : 0
    };
  }

  static generateDimensionProps(defaults: Partial<DimensionProperties> = {}): DimensionProperties {
    return {
      width: defaults.width !== undefined ? defaults.width : 180,
      height: defaults.height !== undefined ? defaults.height : 60,
      isWidthFixed: defaults.isWidthFixed !== undefined ? defaults.isWidthFixed : false,
      isHeightFixed: defaults.isHeightFixed !== undefined ? defaults.isHeightFixed : false,
      minWidth: defaults.minWidth !== undefined ? defaults.minWidth : null,
      maxWidth: defaults.maxWidth !== undefined ? defaults.maxWidth : null,
      minHeight: defaults.minHeight !== undefined ? defaults.minHeight : null,
      maxHeight: defaults.maxHeight !== undefined ? defaults.maxHeight : null
    };
  }

  static generateBasicStyleProps(defaults: Partial<BasicStyles> = {}): BasicStyles {
    return {
      backgroundColor: defaults.backgroundColor !== undefined ? defaults.backgroundColor : 'transparent',
      ...PropertyGroupGenerators.generateFontStylingProps(defaults)
    };
  }

  static generateFontStylingProps(defaults: Partial<FontStyles> = {}): FontStyles {
    return {
      fontColor: defaults.fontColor !== undefined ? defaults.fontColor as string : '#000000',
      font: defaults?.font !== undefined ? defaults.font as string : 'NunitoSans',
      fontSize: defaults?.fontSize !== undefined ? defaults.fontSize as number : 20,
      bold: defaults?.bold !== undefined ? defaults.bold as boolean : false,
      italic: defaults?.italic !== undefined ? defaults.italic as boolean : false,
      underline: defaults?.underline !== undefined ? defaults.underline as boolean : false
    };
  }

  static generateBorderStylingProps(defaults: Partial<Stylings> = {}): BorderStyles {
    return {
      borderWidth: defaults.borderWidth !== undefined ? defaults.borderWidth : 0,
      borderColor: defaults.borderColor !== undefined ? defaults.borderColor : 'black',
      borderStyle: defaults.borderStyle !== undefined ? defaults.borderStyle : 'solid',
      borderRadius: defaults.borderRadius !== undefined ? defaults.borderRadius : 0
    };
  }

  static generatePlayerProps(properties: Partial<PlayerProperties> = {}): PlayerProperties {
    return {
      autostart: properties.autostart !== undefined ? properties.autostart as boolean : false,
      autostartDelay: properties.autostartDelay !== undefined ? properties.autostartDelay as number : 0,
      loop: properties.loop !== undefined ? properties.loop as boolean : false,
      startControl: properties.startControl !== undefined ? properties.startControl as boolean : true,
      pauseControl: properties.pauseControl !== undefined ? properties.pauseControl as boolean : false,
      progressBar: properties.progressBar !== undefined ? properties.progressBar as boolean : true,
      interactiveProgressbar: properties.interactiveProgressbar !== undefined ?
        properties.interactiveProgressbar as boolean :
        false,
      volumeControl: properties.volumeControl !== undefined ? properties.volumeControl as boolean : true,
      defaultVolume: properties.defaultVolume !== undefined ? properties.defaultVolume as number : 0.8,
      minVolume: properties.minVolume !== undefined ? properties.minVolume as number : 0,
      muteControl: properties.muteControl !== undefined ? properties.muteControl as boolean : true,
      interactiveMuteControl: properties.interactiveMuteControl !== undefined ?
        properties.interactiveMuteControl as boolean :
        false,
      hintLabel: properties.hintLabel !== undefined ? properties.hintLabel as string : '',
      hintLabelDelay: properties.hintLabelDelay !== undefined ? properties.hintLabelDelay as number : 0,
      activeAfterID: properties.activeAfterID !== undefined ? properties.activeAfterID as string : '',
      minRuns: properties.minRuns !== undefined ? properties.minRuns as number : 1,
      maxRuns: properties.maxRuns !== undefined ? properties.maxRuns as number | null : null,
      showRestRuns: properties.showRestRuns !== undefined ? properties.showRestRuns as boolean : false,
      showRestTime: properties.showRestTime !== undefined ? properties.showRestTime as boolean : true,
      playbackTime: properties.playbackTime !== undefined ? properties.playbackTime as number : 0
    };
  }
}