選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

110 行
2.8 KiB

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