Create.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { makeStyles, Theme } from '@material-ui/core';
  2. import { FC, useMemo, useState } from 'react';
  3. import { useTranslation } from 'react-i18next';
  4. import DialogTemplate from '../../components/customDialog/DialogTemplate';
  5. import CustomInput from '../../components/customInput/CustomInput';
  6. import { ITextfieldConfig } from '../../components/customInput/Types';
  7. import { useFormValidation } from '../../hooks/Form';
  8. import { formatForm } from '../../utils/Form';
  9. import { PartitionCreateProps } from './Types';
  10. const useStyles = makeStyles((theme: Theme) => ({
  11. input: {
  12. margin: theme.spacing(3, 0, 0.5),
  13. },
  14. }));
  15. const CreatePartition: FC<PartitionCreateProps> = ({
  16. handleCreate,
  17. handleClose,
  18. }) => {
  19. const { t } = useTranslation('partition');
  20. const { t: btnTrans } = useTranslation('btn');
  21. const { t: warningTrans } = useTranslation('warning');
  22. const [form, setForm] = useState<{ name: string }>({
  23. name: '',
  24. });
  25. const checkedForm = useMemo(() => {
  26. const { name } = form;
  27. return formatForm({ name });
  28. }, [form]);
  29. const { validation, checkIsValid, disabled } = useFormValidation(checkedForm);
  30. const classes = useStyles();
  31. const handleInputChange = (value: string) => {
  32. setForm({ name: value });
  33. };
  34. const nameInputConfig: ITextfieldConfig = {
  35. label: t('name'),
  36. variant: 'filled',
  37. key: 'name',
  38. fullWidth: true,
  39. onChange: handleInputChange,
  40. className: classes.input,
  41. validations: [
  42. {
  43. rule: 'require',
  44. errorText: warningTrans('required', { name: t('name') }),
  45. },
  46. {
  47. rule: 'partitionName',
  48. errorText: t('nameWarning'),
  49. },
  50. ],
  51. };
  52. const handleCreatePartition = () => {
  53. handleCreate(form.name);
  54. };
  55. return (
  56. <DialogTemplate
  57. title={t('createTitle')}
  58. handleCancel={handleClose}
  59. confirmLabel={btnTrans('create')}
  60. handleConfirm={handleCreatePartition}
  61. confirmDisabled={disabled}
  62. >
  63. <form>
  64. <CustomInput
  65. type="text"
  66. textConfig={nameInputConfig}
  67. checkValid={checkIsValid}
  68. validInfo={validation}
  69. />
  70. </form>
  71. </DialogTemplate>
  72. );
  73. };
  74. export default CreatePartition;