FPSMS-frontend
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

99 lines
2.7 KiB

  1. import { createPickOrder, SavePickOrderRequest } from "@/app/api/pickOrder/actions";
  2. import { Box, Button, Modal, ModalProps, Stack } from "@mui/material";
  3. import dayjs from "dayjs";
  4. import arraySupport from "dayjs/plugin/arraySupport";
  5. import { useCallback } from "react";
  6. import { FormProvider, SubmitHandler, useForm } from "react-hook-form";
  7. import { useTranslation } from "react-i18next";
  8. import CreateForm from "./CreateForm";
  9. import { ItemCombo } from "@/app/api/settings/item/actions";
  10. import { Check } from "@mui/icons-material";
  11. dayjs.extend(arraySupport);
  12. const style = {
  13. position: "absolute",
  14. top: "50%",
  15. left: "50%",
  16. transform: "translate(-50%, -50%)",
  17. overflow: "scroll",
  18. bgcolor: "background.paper",
  19. pt: 5,
  20. px: 5,
  21. pb: 10,
  22. display: "block",
  23. width: { xs: "100%", sm: "100%", md: "100%" },
  24. };
  25. interface Props extends Omit<ModalProps, "children"> {
  26. items: ItemCombo[]
  27. }
  28. const CreatePickOrderModal: React.FC<Props> = ({
  29. open,
  30. onClose,
  31. items
  32. }) => {
  33. const { t } = useTranslation("pickOrder");
  34. const formProps = useForm<SavePickOrderRequest>();
  35. const errors = formProps.formState.errors;
  36. const closeHandler = useCallback<NonNullable<ModalProps["onClose"]>>(
  37. (...args) => {
  38. onClose?.(...args);
  39. // reset();
  40. },
  41. [onClose]
  42. );
  43. const onSubmit = useCallback<SubmitHandler<SavePickOrderRequest>>(
  44. async (data, event) => {
  45. console.log(data)
  46. try {
  47. const res = await createPickOrder(data)
  48. if (res.id) {
  49. closeHandler({}, "backdropClick");
  50. }
  51. } catch (error) {
  52. console.log(error)
  53. throw error
  54. }
  55. // formProps.reset()
  56. },
  57. [closeHandler]
  58. );
  59. return (
  60. <>
  61. <FormProvider {...formProps}>
  62. <Modal open={open} onClose={closeHandler}>
  63. <Box
  64. sx={style}
  65. component="form"
  66. onSubmit={formProps.handleSubmit(onSubmit)}
  67. >
  68. <CreateForm
  69. items={items}
  70. />
  71. <Stack direction="row" justifyContent="flex-end" gap={1}>
  72. <Button
  73. name="submit"
  74. variant="contained"
  75. startIcon={<Check />}
  76. type="submit"
  77. >
  78. {t("submit")}
  79. </Button>
  80. <Button
  81. name="reset"
  82. variant="contained"
  83. startIcon={<Check />}
  84. onClick={() => formProps.reset()}
  85. >
  86. {t("reset")}
  87. </Button>
  88. </Stack>
  89. </Box>
  90. </Modal>
  91. </FormProvider>
  92. </>
  93. );
  94. };
  95. export default CreatePickOrderModal;