create.config.ts 4.75 KB
import { SMSServiceProviderEnum, SMSServiceProviderNameEnum } from '../../../enum/form';
import { useRuleChainI18n } from '../../../hook/useRuleChainI18n';
import { FormSchema } from '/@/components/Form';

const { tLabel, tPlaceholder } = useRuleChainI18n('external', 'sendSms');

export enum SendSMSFieldsEnum {
  NUMBERS_TO_TEMPLATE = 'numbersToTemplate',
  SMS_MESSAGE_TEMPLATE = 'smsMessageTemplate',
  USE_SYSTEM_SMS_SETTINGS = 'useSystemSmsSettings',
  SMS_PROVIDER_CONFIGURATION = 'smsProviderConfiguration',

  ACCESS_KEY_ID = 'accessKeyId',
  SECRET_ACCESS_KEY = 'secretAccessKey',
  REGION = 'region',
  TYPE = 'type',
  NUMBER_FROM = 'numberFrom',
  ACCOUNT_SID = 'accountSid',
  ACCOUNT_TOKEN = 'accountToken',
}

export const formSchemas: FormSchema[] = [
  {
    field: SendSMSFieldsEnum.NUMBERS_TO_TEMPLATE,
    label: tLabel(SendSMSFieldsEnum.NUMBERS_TO_TEMPLATE),
    component: 'Input',
    required: true,
    helpMessage:
      'Comma separated Phone Numbers, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.NUMBERS_TO_TEMPLATE),
    },
  },
  {
    field: SendSMSFieldsEnum.SMS_MESSAGE_TEMPLATE,
    label: tLabel(SendSMSFieldsEnum.SMS_MESSAGE_TEMPLATE),
    component: 'InputTextArea',
    required: true,
    helpMessage:
      'Hint: use ${metadataKey} for value from metadata, $[messageKey] for value from message body',
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.SMS_MESSAGE_TEMPLATE),
    },
  },
  {
    field: SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS,
    label: '',
    component: 'Checkbox',
    renderComponentContent: () => ({
      default: () => tLabel(SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS),
    }),
  },
  {
    field: SendSMSFieldsEnum.TYPE,
    label: tLabel(SendSMSFieldsEnum.TYPE),
    component: 'Select',
    required: true,
    ifShow: ({ model }) => !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS],
    componentProps: {
      options: Object.keys(SMSServiceProviderEnum).map((value) => ({
        label: SMSServiceProviderNameEnum[value],
        value,
      })),
      getPopupContainer: () => document.body,
      placeholder: tPlaceholder(SendSMSFieldsEnum.TYPE, 'choose'),
    },
  },
  {
    field: SendSMSFieldsEnum.NUMBER_FROM,
    label: tLabel(SendSMSFieldsEnum.NUMBER_FROM),
    component: 'Input',
    required: true,
    helpMessage: `Phone Number in E.164 format/Phone Number's SID/Messaging Service SID, ex. +19995550123/PNXXX/MGXXX`,
    ifShow: ({ model }) =>
      !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS] &&
      model[SendSMSFieldsEnum.TYPE] === SMSServiceProviderEnum.TWILIO,
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.NUMBER_FROM),
    },
  },
  {
    field: SendSMSFieldsEnum.ACCOUNT_SID,
    label: tLabel(SendSMSFieldsEnum.ACCOUNT_SID),
    component: 'Input',
    required: true,
    ifShow: ({ model }) =>
      !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS] &&
      model[SendSMSFieldsEnum.TYPE] === SMSServiceProviderEnum.TWILIO,
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.ACCOUNT_SID, 'choose'),
    },
  },
  {
    field: SendSMSFieldsEnum.ACCOUNT_TOKEN,
    label: tLabel(SendSMSFieldsEnum.ACCOUNT_TOKEN),
    component: 'Input',
    required: true,
    ifShow: ({ model }) =>
      !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS] &&
      model[SendSMSFieldsEnum.TYPE] === SMSServiceProviderEnum.TWILIO,
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.ACCOUNT_TOKEN, 'choose'),
    },
  },
  {
    field: SendSMSFieldsEnum.ACCESS_KEY_ID,
    label: tLabel(SendSMSFieldsEnum.ACCESS_KEY_ID),
    component: 'Input',
    required: true,
    ifShow: ({ model }) =>
      !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS] &&
      model[SendSMSFieldsEnum.TYPE] === SMSServiceProviderEnum.AWS_SNS,
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.ACCESS_KEY_ID, 'choose'),
    },
  },
  {
    field: SendSMSFieldsEnum.SECRET_ACCESS_KEY,
    label: tLabel(SendSMSFieldsEnum.SECRET_ACCESS_KEY),
    component: 'InputPassword',
    required: true,
    ifShow: ({ model }) =>
      !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS] &&
      model[SendSMSFieldsEnum.TYPE] === SMSServiceProviderEnum.AWS_SNS,
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.SECRET_ACCESS_KEY, 'choose'),
    },
  },
  {
    field: SendSMSFieldsEnum.REGION,
    label: tLabel(SendSMSFieldsEnum.REGION),
    component: 'InputPassword',
    required: true,
    ifShow: ({ model }) =>
      !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS] &&
      model[SendSMSFieldsEnum.TYPE] === SMSServiceProviderEnum.AWS_SNS,
    componentProps: {
      placeholder: tPlaceholder(SendSMSFieldsEnum.REGION, 'choose'),
    },
  },
];