config.ts 5.58 KB
import {
  AzureIotHubFieldsEnum,
  AzureIotHubFieldsNameEnum,
} from '../../../../enum/formField/external';
import { FormSchema } from '/@/components/Form';

export enum CredentialsTypeEnum {
  PEM = 'cert.PEM',
  SHARED_ACCESS_SIGNATURE = 'sas',
}

export enum CredentialsTypeNameEnum {
  PEM = 'PEM',
  SHARED_ACCESS_SIGNATURE = 'Shared Access Signature',
}

export interface FileItemType {
  uid: string;
  name: string;
  data?: any;
}

export const getFileData = async (file: FileItemType) => {
  return new Promise((resolve) => {
    const fileReader = new FileReader();
    fileReader.readAsText(file as unknown as File);
    fileReader.onload = () => {
      if (fileReader.DONE === fileReader.readyState) {
        resolve({
          uid: file.uid,
          name: file.name,
          data: fileReader.result,
        });
      }
    };
  });
};

export const credentialsTypeOptions = [
  {
    label: CredentialsTypeNameEnum.SHARED_ACCESS_SIGNATURE,
    value: CredentialsTypeEnum.SHARED_ACCESS_SIGNATURE,
  },
  { label: CredentialsTypeNameEnum.PEM, value: CredentialsTypeEnum.PEM },
];

export const formSchemas = (
  setType: (
    value: CredentialsTypeEnum,
    option: { label: CredentialsTypeNameEnum; value: CredentialsTypeEnum }
  ) => void
): FormSchema[] => {
  return [
    {
      field: AzureIotHubFieldsEnum.TYPE,
      label: AzureIotHubFieldsNameEnum.TYPE,
      component: 'Select',
      required: true,
      defaultValue: CredentialsTypeEnum.SHARED_ACCESS_SIGNATURE,
      componentProps: ({ formActionType }) => {
        const { setFieldsValue } = formActionType;
        return {
          options: credentialsTypeOptions,
          placeholder: `请选择${AzureIotHubFieldsNameEnum.TYPE}`,
          getPopupContainer: () => document.body,
          onChange(
            value: CredentialsTypeEnum,
            option: { label: CredentialsTypeNameEnum; value: CredentialsTypeEnum }
          ) {
            setType(value, option);
            setFieldsValue({
              [AzureIotHubFieldsEnum.CA_CERT]: [],
              [AzureIotHubFieldsEnum.CA_CERT_FILE_NAME]: null,
              [AzureIotHubFieldsEnum.CERT]: [],
              [AzureIotHubFieldsEnum.CERT_FILE_NAME]: null,
              [AzureIotHubFieldsEnum.PRIVATE_KEY]: [],
              [AzureIotHubFieldsEnum.PRIVATE_KEY_FILE_NAME]: null,
              [AzureIotHubFieldsEnum.PASSWORD]: null,
              [AzureIotHubFieldsEnum.SAS_KEY]: null,
            });
          },
        };
      },
    },
    {
      field: AzureIotHubFieldsEnum.SAS_KEY,
      label: AzureIotHubFieldsNameEnum.SAS_KEY,
      required: true,
      component: 'Input',
      ifShow: ({ model }) =>
        model[AzureIotHubFieldsEnum.TYPE] === CredentialsTypeEnum.SHARED_ACCESS_SIGNATURE,
      componentProps: {
        placeholder: `请输入${AzureIotHubFieldsNameEnum.SAS_KEY}`,
      },
    },
    {
      field: AzureIotHubFieldsEnum.CA_CERT_FILE_NAME,
      label: AzureIotHubFieldsNameEnum.CA_CERT_FILE_NAME,
      component: 'InputPassword',
      show: false,
    },
    {
      field: AzureIotHubFieldsEnum.CA_CERT,
      label: AzureIotHubFieldsNameEnum.CA_CERT,
      component: 'ApiUpload',
      valueField: 'fileList',
      changeEvent: 'update:fileList',
      componentProps: ({ formActionType }) => {
        const { setFieldsValue } = formActionType;
        return {
          overFileLimitHiddenUploadEntry: true,
          api: getFileData,
          'onUpdate:fileList'(file: FileItemType[]) {
            setFieldsValue({ [AzureIotHubFieldsEnum.CA_CERT_FILE_NAME]: file?.[0]?.name });
          },
        };
      },
    },
    {
      field: AzureIotHubFieldsEnum.CERT_FILE_NAME,
      label: AzureIotHubFieldsNameEnum.CERT_FILE_NAME,
      component: 'InputPassword',
      show: false,
    },
    {
      field: AzureIotHubFieldsEnum.CERT,
      label: AzureIotHubFieldsNameEnum.CERT,
      component: 'ApiUpload',
      valueField: 'fileList',
      changeEvent: 'update:fileList',
      required: true,
      ifShow: ({ model }) => model[AzureIotHubFieldsEnum.TYPE] === CredentialsTypeEnum.PEM,
      componentProps: ({ formActionType }) => {
        const { setFieldsValue } = formActionType;
        return {
          overFileLimitHiddenUploadEntry: true,
          api: getFileData,
          'onUpdate:fileList'(file: FileItemType[]) {
            setFieldsValue({ [AzureIotHubFieldsEnum.CERT_FILE_NAME]: file?.[0]?.name });
          },
        };
      },
    },
    {
      field: AzureIotHubFieldsEnum.PRIVATE_KEY_FILE_NAME,
      label: AzureIotHubFieldsNameEnum.PRIVATE_KEY_FILE_NAME,
      component: 'InputPassword',
      show: false,
    },
    {
      field: AzureIotHubFieldsEnum.PRIVATE_KEY,
      label: AzureIotHubFieldsNameEnum.PRIVATE_KEY,
      component: 'ApiUpload',
      valueField: 'fileList',
      changeEvent: 'update:fileList',
      required: true,
      ifShow: ({ model }) => model[AzureIotHubFieldsEnum.TYPE] === CredentialsTypeEnum.PEM,
      componentProps: ({ formActionType }) => {
        const { setFieldsValue } = formActionType;
        return {
          overFileLimitHiddenUploadEntry: true,
          api: getFileData,
          'onUpdate:fileList'(file: FileItemType[]) {
            setFieldsValue({ [AzureIotHubFieldsEnum.PRIVATE_KEY_FILE_NAME]: file?.[0]?.name });
          },
        };
      },
    },
    {
      field: AzureIotHubFieldsEnum.PASSWORD,
      label: AzureIotHubFieldsNameEnum.PASSWORD,
      component: 'InputPassword',
      ifShow: ({ model }) => model[AzureIotHubFieldsEnum.TYPE] === CredentialsTypeEnum.PEM,
      componentProps: {
        placeholder: `请输入${AzureIotHubFieldsNameEnum.PASSWORD}`,
      },
    },
  ];
};