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.
 
 

103 rivejä
3.0 KiB

  1. // import { fetchStaffEdit } from "@/app/api/staff";
  2. import { useRouter, useSearchParams } from "next/navigation";
  3. import { useCallback, useEffect, useState } from "react";
  4. import CustomInputForm from "../CustomInputForm";
  5. import { SubmitErrorHandler, SubmitHandler } from "react-hook-form";
  6. import { CreateStaffInputs, saveStaff, testing } from "@/app/api/staff/actions";
  7. import { Typography } from "@mui/material";
  8. import { useTranslation } from "react-i18next";
  9. import dayjs from "dayjs";
  10. interface Options {
  11. id: any;
  12. label: string;
  13. [key: string]: any;
  14. }
  15. interface Field {
  16. // subtitle: string;
  17. id: string;
  18. label: string;
  19. type: string;
  20. value?: any;
  21. required?: boolean;
  22. options?: any[] | null;
  23. readOnly?: boolean;
  24. }
  25. interface formProps {
  26. Title?: string[];
  27. fieldLists: Field[][];
  28. }
  29. const EditStaffForm: React.FC<formProps> = ({ Title, fieldLists }) => {
  30. const router = useRouter();
  31. const { t } = useTranslation();
  32. const searchParams = useSearchParams();
  33. const idString = searchParams.get("id")
  34. const [serverError, setServerError] = useState("");
  35. // make new inputs
  36. const onSubmit = useCallback<SubmitHandler<CreateStaffInputs>>(
  37. async (data) => {
  38. try {
  39. let formatJoinDate = data.joinDate
  40. let formatDepartDate = data.departDate
  41. if (data.joinDate && /^\d{2}\/\d{2}\/\d{4}$/.test(data.joinDate)) {
  42. const formattedDate = dayjs(data.joinDate, 'MM/DD/YYYY').format('YYYY-MM-DD');
  43. formatJoinDate = formattedDate;
  44. }
  45. if (data.departDate && data.departDate.length > 0 && /^\d{2}\/\d{2}\/\d{4}$/.test(data.departDate)) {
  46. const formattedDate = dayjs(data.departDate, 'MM/DD/YYYY').format('YYYY-MM-DD');
  47. formatDepartDate = formattedDate;
  48. }
  49. if (idString) {
  50. const temp = {
  51. id: parseInt(idString),
  52. ...data,
  53. emergContactPhone: data.emergContactPhone.toString(),
  54. phone1: data.phone1.toString(),
  55. phone2: data.phone1.toString(),
  56. joinDate: formatJoinDate,
  57. departDate: formatDepartDate,
  58. }
  59. console.log(temp)
  60. setServerError("");
  61. await saveStaff(temp);
  62. router.replace("/settings/staff");
  63. }
  64. } catch (e) {
  65. setServerError(t("An error has occurred. Please try again later."));
  66. }
  67. },
  68. [router, t]
  69. );
  70. const onSubmitError = useCallback<SubmitErrorHandler<CreateStaffInputs>>(
  71. (errors) => {
  72. console.log(errors);
  73. },
  74. []
  75. );
  76. const handleCancel = () => {
  77. router.back();
  78. };
  79. return (
  80. <>
  81. {serverError && (
  82. <Typography variant="body2" color="error" alignSelf="flex-end">
  83. {serverError}
  84. </Typography>
  85. )}
  86. <CustomInputForm
  87. Title={Title}
  88. fieldLists={fieldLists}
  89. isActive={true}
  90. onSubmit={onSubmit}
  91. onSubmitError={onSubmitError}
  92. onCancel={handleCancel}
  93. />
  94. </>
  95. );
  96. };
  97. export default EditStaffForm;