private fieldValidator()

in web/frontend/src/app/pages/streams/components/modals/modal-send-message/modal-send-message.component.ts [490:547]


  private fieldValidator(field: FieldModel) {
    if (field.type === 'json') {
      return (control) => (!field.required || control.value ? null : {required: true});
    }

    if (field.type === 'dropdown') {
      return [
        field.required ? Validators.required : null,
        (control) => {
          return field.values.includes(control.value) ? null : {wrongValue: true};
        },
      ].filter(Boolean);
    }

    if (field.type === 'binary') {
      return [
        field.required ? Validators.required : null,
        (control) => {
          if (!control.value) {
            return;
          }

          const isString = typeof control.value === 'string';
          const string = isString ? control.value : control.value.join(',');
          let array = isString ? control.value.split(',') : control.value;
          array = array.map((v) => Number(v)).filter((v) => !isNaN(v));

          return array.join(',') === string ? null : {wrongValue: true};
        },
      ].filter(Boolean);
    }

    if (field.type === 'btn-timepicker') {
      return [
        field.required ? Validators.required : null,
        (control) => {
          if (!control.value) {
            return null;
          }

          if (typeof control.value === 'string') {
            return /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/.test(
              control.value,
            )
              ? null
              : {notFormat: true};
          }

          if (control.value?.getTime && control.value?.getTime() !== undefined) {
            return null;
          }

          return {notDate: true};
        },
      ].filter(Boolean);
    }
    return field.required ? Validators.required : null;
  }