Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 

136 wiersze
4.2 KiB

  1. "use client";
  2. import Check from "@mui/icons-material/Check";
  3. import Close from "@mui/icons-material/Close";
  4. import Button from "@mui/material/Button";
  5. import Stack from "@mui/material/Stack";
  6. import { CreateCompanyInputs, EditCompanyInputs, saveCompany } from "@/app/api/companys/actions";
  7. import { useRouter } from "next/navigation";
  8. import React, { useCallback, useDebugValue, useEffect, useState } from "react";
  9. import { useTranslation } from "react-i18next";
  10. import {
  11. FieldErrors,
  12. FormProvider,
  13. SubmitErrorHandler,
  14. SubmitHandler,
  15. useForm,
  16. } from "react-hook-form";
  17. import CompanyDetails from "./CompanyDetails";
  18. import { LocalizationProvider } from '@mui/x-date-pickers';
  19. import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'
  20. import dayjs from "dayjs";
  21. import { convertTimeArrayToString } from "@/app/utils/formatUtil";
  22. interface Props {
  23. isEdit: Boolean;
  24. company?: EditCompanyInputs;
  25. companyCodes: string[];
  26. }
  27. const CreateCompany: React.FC<Props> = ({
  28. isEdit,
  29. company,
  30. companyCodes,
  31. }) => {
  32. const [serverError, setServerError] = useState("");
  33. const { t } = useTranslation();
  34. const router = useRouter();
  35. console.log(companyCodes)
  36. const handleCancel = () => {
  37. router.back();
  38. };
  39. const onSubmit = useCallback<SubmitHandler<CreateCompanyInputs>>(
  40. async (data) => {
  41. try {
  42. let haveError = false
  43. if (companyCodes.includes(data.companyCode)) {
  44. haveError = true
  45. formProps.setError("companyCode", { message: t("Duplicated Code."), type: "required" })
  46. }
  47. console.log(data);
  48. if (haveError) {
  49. return
  50. }
  51. console.log("passed")
  52. setServerError("");
  53. // console.log(JSON.stringify(data));
  54. // await saveCompany(data)
  55. // router.replace("/settings/company");
  56. } catch (e) {
  57. setServerError(t("An error has occurred. Please try again later."));
  58. }
  59. },
  60. [router, t],
  61. );
  62. const onSubmitError = useCallback<SubmitErrorHandler<CreateCompanyInputs>>(
  63. (errors) => {
  64. console.log(errors)
  65. },
  66. [],
  67. );
  68. const formProps = useForm<CreateCompanyInputs>({
  69. defaultValues: {
  70. id: company?.id,
  71. companyCode: company?.companyCode,
  72. companyName: company?.name,
  73. brNo: company?.brNo,
  74. contactName: company?.contactName,
  75. phone: company?.phone,
  76. otHourTo: "",
  77. otHourFrom: "",
  78. normalHourTo: "",
  79. normalHourFrom: "",
  80. currency: company?.currency,
  81. address: company?.address,
  82. district: company?.district,
  83. email: company?.email,
  84. },
  85. });
  86. const errors = formProps.formState.errors;
  87. return(
  88. <FormProvider {...formProps}>
  89. <Stack
  90. spacing={2}
  91. component="form"
  92. onSubmit={formProps.handleSubmit(onSubmit, onSubmitError)}
  93. >
  94. {
  95. <LocalizationProvider dateAdapter={AdapterDayjs}>
  96. <CompanyDetails
  97. content={
  98. {
  99. normalHourFrom: company?.normalHourFrom as number[],
  100. normalHourTo: company?.normalHourTo as number[],
  101. otHourFrom: company?.otHourFrom as number[],
  102. otHourTo: company?.otHourTo as number[]
  103. }
  104. }
  105. />
  106. </LocalizationProvider>
  107. }
  108. <Stack direction="row" justifyContent="flex-end" gap={1}>
  109. <Button
  110. variant="outlined"
  111. startIcon={<Close />}
  112. onClick={handleCancel}
  113. >
  114. {t("Cancel")}
  115. </Button>
  116. <Button variant="contained" startIcon={<Check />} type="submit">
  117. {t("Confirm")}
  118. </Button>
  119. </Stack>
  120. </Stack>
  121. </FormProvider>
  122. )
  123. }
  124. export default CreateCompany;