create.config.ts 5.44 KB
import { useRuleChainI18n } from '../../../hook/useRuleChainI18n';
import {
  JavascriptEditorWithTestModal,
  ScriptEditorValueType,
} from '../../../src/components/JavaScriptFilterModal';
import { DefaultNodeConfig } from '../../../types/node';
import { findDictItemByCode } from '/@/api/system/dict';
import { FormSchema, useComponentRegister } from '/@/components/Form';

const { tLabel, tPlaceholder } = useRuleChainI18n('action', 'createAlarm');

useComponentRegister('JavascriptEditorWithTestModal', JavascriptEditorWithTestModal);

export interface FormFieldsValue {
  [CreateAlarmFieldsEnum.ALARM_DETAILS_BUILD_JS]: ScriptEditorValueType;
}

export interface NodeConfigValue extends DefaultNodeConfig {
  alarmDetailsBuildJs: string;
  alarmDetailsBuildTbel: string;
  scriptLang: string;
}

export enum CreateAlarmFieldsEnum {
  ALARM_DETAILS_BUILD_JS = 'alarmDetailsBuildJs',
  USE_MESSAGE_ALARM_DATA = 'useMessageAlarmData',
  OVERWRITE_ALARM_DETAILS = 'overwriteAlarmDetails',
  ALARM_TYPE = 'alarmType',
  SEVERITY = 'severity',
  PROPAGATE = 'propagate',
  RELATION_TYPES = 'relationTypes',
  PROPAGATE_TO_OWNER = 'propagateToOwner',
  PROPAGATE_TO_TENANT = 'propagateToTenant',
  DYNAMIC_SEVERITY = 'dynamicSeverity',
}

export const formSchemas: FormSchema[] = [
  {
    field: CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA,
    component: 'Checkbox',
    label: '',
    renderComponentContent: () => ({
      default: () => tLabel(CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA),
    }),
  },
  {
    field: CreateAlarmFieldsEnum.OVERWRITE_ALARM_DETAILS,
    component: 'Checkbox',
    label: '',
    show: ({ model }) => model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    renderComponentContent: () => ({
      default: () => tLabel(CreateAlarmFieldsEnum.OVERWRITE_ALARM_DETAILS),
    }),
  },
  {
    field: CreateAlarmFieldsEnum.ALARM_DETAILS_BUILD_JS,
    component: 'JavascriptEditorWithTestModal',
    label: tLabel(CreateAlarmFieldsEnum.ALARM_DETAILS_BUILD_JS),
    valueField: 'value',
    changeEvent: 'update:value',
    show: ({ model }) =>
      !(
        !model[CreateAlarmFieldsEnum.OVERWRITE_ALARM_DETAILS] &&
        model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA]
      ),
    componentProps: {
      javaScriptEditorProps: {
        functionName: 'Details',
        scriptType: 'json',
        paramsName: ['msg', 'metadata', 'msgType'],
      },
      buttonName: tLabel('scriptButtonName'),
    },
  },
  {
    field: CreateAlarmFieldsEnum.ALARM_TYPE,
    component: 'Input',
    label: tLabel(CreateAlarmFieldsEnum.ALARM_TYPE),
    helpMessage: [
      'Hint: use ${metadataKey} for value from metadata, $[messageKey] for value from message body',
    ],
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    componentProps: {
      placeholder: tPlaceholder(CreateAlarmFieldsEnum.ALARM_TYPE),
    },
  },
  {
    field: CreateAlarmFieldsEnum.DYNAMIC_SEVERITY,
    component: 'Checkbox',
    label: '',
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    renderComponentContent: () => ({
      default: () => tLabel(CreateAlarmFieldsEnum.DYNAMIC_SEVERITY),
    }),
  },
  {
    field: CreateAlarmFieldsEnum.SEVERITY,
    component: 'Input',
    label: tLabel(CreateAlarmFieldsEnum.SEVERITY),
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    helpMessage: [
      'Hint: use ${metadataKey} for value from metadata, $[messageKey] for value from message body. Alarm severity should be system (CRITICAL, MAJOR etc.)',
    ],
    ifShow: ({ model }) => model[CreateAlarmFieldsEnum.DYNAMIC_SEVERITY],
    componentProps: {
      placeholder: tPlaceholder(CreateAlarmFieldsEnum.SEVERITY),
    },
  },
  {
    field: CreateAlarmFieldsEnum.SEVERITY,
    component: 'ApiSelect',
    label: tLabel(CreateAlarmFieldsEnum.SEVERITY),
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    ifShow: ({ model }) => !model[CreateAlarmFieldsEnum.DYNAMIC_SEVERITY],
    componentProps: {
      api: findDictItemByCode,
      params: {
        dictCode: 'severity_type',
      },
      labelField: 'itemText',
      valueField: 'itemValue',
      placeholder: tPlaceholder(CreateAlarmFieldsEnum.SEVERITY),
    },
  },
  {
    field: CreateAlarmFieldsEnum.PROPAGATE,
    component: 'Checkbox',
    label: '',
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    renderComponentContent: () => ({
      default: () => tLabel(CreateAlarmFieldsEnum.PROPAGATE),
    }),
  },
  {
    field: CreateAlarmFieldsEnum.RELATION_TYPES,
    component: 'Select',
    label: tLabel(CreateAlarmFieldsEnum.RELATION_TYPES),
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    ifShow: ({ model }) => model[CreateAlarmFieldsEnum.PROPAGATE],
    componentProps: {
      open: false,
      mode: 'tags',
      placeholder: tPlaceholder(CreateAlarmFieldsEnum.RELATION_TYPES),
    },
  },
  {
    field: CreateAlarmFieldsEnum.PROPAGATE_TO_TENANT,
    component: 'Checkbox',
    label: '',
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    renderComponentContent: () => ({
      default: () => tLabel(CreateAlarmFieldsEnum.PROPAGATE_TO_TENANT),
    }),
  },
  {
    field: CreateAlarmFieldsEnum.PROPAGATE_TO_OWNER,
    component: 'Checkbox',
    label: '',
    show: ({ model }) => !model[CreateAlarmFieldsEnum.USE_MESSAGE_ALARM_DATA],
    renderComponentContent: () => ({
      default: () => tLabel(CreateAlarmFieldsEnum.PROPAGATE_TO_OWNER),
    }),
  },
];