| @@ -69,6 +69,12 @@ const CompanyDetails: React.FC<Props> = ({ | |||||
| required: "Company code required!", | required: "Company code required!", | ||||
| })} | })} | ||||
| error={Boolean(errors.companyCode)} | error={Boolean(errors.companyCode)} | ||||
| helperText={ | |||||
| Boolean(errors.companyCode) && | |||||
| (errors.companyCode?.message | |||||
| ? t(errors.companyCode.message) | |||||
| : t("Please input correct company code")) | |||||
| } | |||||
| /> | /> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={6}> | <Grid item xs={6}> | ||||
| @@ -83,7 +89,7 @@ const CompanyDetails: React.FC<Props> = ({ | |||||
| </Grid> | </Grid> | ||||
| <Grid item xs={6}> | <Grid item xs={6}> | ||||
| <TextField | <TextField | ||||
| label={t("Company brNo")} | |||||
| label={t("Company BR NO.")} | |||||
| fullWidth | fullWidth | ||||
| {...register("brNo", { | {...register("brNo", { | ||||
| required: "Please enter a brNo", | required: "Please enter a brNo", | ||||
| @@ -24,16 +24,20 @@ import { convertTimeArrayToString } from "@/app/utils/formatUtil"; | |||||
| interface Props { | interface Props { | ||||
| isEdit: Boolean; | isEdit: Boolean; | ||||
| company?: EditCompanyInputs; | company?: EditCompanyInputs; | ||||
| companyCodes: string[]; | |||||
| } | } | ||||
| const CreateCompany: React.FC<Props> = ({ | const CreateCompany: React.FC<Props> = ({ | ||||
| isEdit, | isEdit, | ||||
| company, | company, | ||||
| companyCodes, | |||||
| }) => { | }) => { | ||||
| const [serverError, setServerError] = useState(""); | const [serverError, setServerError] = useState(""); | ||||
| const { t } = useTranslation(); | const { t } = useTranslation(); | ||||
| const router = useRouter(); | const router = useRouter(); | ||||
| console.log(companyCodes) | |||||
| const handleCancel = () => { | const handleCancel = () => { | ||||
| router.back(); | router.back(); | ||||
| }; | }; | ||||
| @@ -41,11 +45,20 @@ const CreateCompany: React.FC<Props> = ({ | |||||
| const onSubmit = useCallback<SubmitHandler<CreateCompanyInputs>>( | const onSubmit = useCallback<SubmitHandler<CreateCompanyInputs>>( | ||||
| async (data) => { | async (data) => { | ||||
| try { | try { | ||||
| let haveError = false | |||||
| if (companyCodes.includes(data.companyCode)) { | |||||
| haveError = true | |||||
| formProps.setError("companyCode", { message: t("Duplicated Code."), type: "required" }) | |||||
| } | |||||
| console.log(data); | console.log(data); | ||||
| if (haveError) { | |||||
| return | |||||
| } | |||||
| console.log("passed") | |||||
| setServerError(""); | setServerError(""); | ||||
| // console.log(JSON.stringify(data)); | // console.log(JSON.stringify(data)); | ||||
| await saveCompany(data) | |||||
| router.replace("/settings/company"); | |||||
| // await saveCompany(data) | |||||
| // router.replace("/settings/company"); | |||||
| } catch (e) { | } catch (e) { | ||||
| setServerError(t("An error has occurred. Please try again later.")); | setServerError(t("An error has occurred. Please try again later.")); | ||||
| } | } | ||||
| @@ -1,4 +1,4 @@ | |||||
| import { fetchCompanyDetails } from "@/app/api/companys"; | |||||
| import { fetchCompanyDetails, fetchCompanys } from "@/app/api/companys"; | |||||
| import CreateCompany from "./CreateCompany"; | import CreateCompany from "./CreateCompany"; | ||||
| type CreateCompanyProps = {isEdit: false} | type CreateCompanyProps = {isEdit: false} | ||||
| @@ -16,9 +16,10 @@ const CreateCompanyWrapper: React.FC<Props> = async (props) => { | |||||
| const companyDetails = props.isEdit | const companyDetails = props.isEdit | ||||
| ? await fetchCompanyDetails(props.companyId!) | ? await fetchCompanyDetails(props.companyId!) | ||||
| : undefined; | : undefined; | ||||
| const [ company ] = await Promise.all([fetchCompanys()]) | |||||
| console.log(company) | |||||
| return ( | return ( | ||||
| <CreateCompany isEdit company={companyDetails} | |||||
| <CreateCompany companyCodes={company.map(c => c.companyCode)} isEdit company={companyDetails} | |||||
| /> | /> | ||||
| ) | ) | ||||
| } | } | ||||
| @@ -27,17 +27,20 @@ import { DepartmentResult } from "@/app/api/departments"; | |||||
| interface Props { | interface Props { | ||||
| isEdit: Boolean; | isEdit: Boolean; | ||||
| department?: CreateDepartmentInputs; | department?: CreateDepartmentInputs; | ||||
| depCodes: string[] | |||||
| } | } | ||||
| const CreateDepartment: React.FC<Props> = ({ | const CreateDepartment: React.FC<Props> = ({ | ||||
| isEdit, | isEdit, | ||||
| department, | department, | ||||
| depCodes, | |||||
| }) => { | }) => { | ||||
| const [serverError, setServerError] = useState(""); | const [serverError, setServerError] = useState(""); | ||||
| const { t } = useTranslation(); | const { t } = useTranslation(); | ||||
| const router = useRouter(); | const router = useRouter(); | ||||
| console.log(department) | console.log(department) | ||||
| console.log(depCodes) | |||||
| const handleCancel = () => { | const handleCancel = () => { | ||||
| router.back(); | router.back(); | ||||
| @@ -47,6 +50,15 @@ const CreateDepartment: React.FC<Props> = ({ | |||||
| async (data) => { | async (data) => { | ||||
| try { | try { | ||||
| console.log(data); | console.log(data); | ||||
| let haveError = false | |||||
| if (depCodes.includes(data.code)) { | |||||
| formProps.setError("code", { message: t("Duplicated code."), type: "required" }) | |||||
| haveError = true | |||||
| } | |||||
| if (haveError) { | |||||
| return | |||||
| } | |||||
| console.log("passed") | |||||
| setServerError(""); | setServerError(""); | ||||
| // console.log(JSON.stringify(data)); | // console.log(JSON.stringify(data)); | ||||
| await saveDepartment(data) | await saveDepartment(data) | ||||
| @@ -1,7 +1,7 @@ | |||||
| import { fetchAllTasks, fetchTaskTemplates } from "@/app/api/tasks"; | import { fetchAllTasks, fetchTaskTemplates } from "@/app/api/tasks"; | ||||
| import CreateDepartment from "./CreateDepartment"; | import CreateDepartment from "./CreateDepartment"; | ||||
| import { fetchTeamLeads } from "@/app/api/staff"; | import { fetchTeamLeads } from "@/app/api/staff"; | ||||
| import { DepartmentResult, fetchDepartmentDetails } from "@/app/api/departments"; | |||||
| import { DepartmentResult, fetchDepartmentDetails, fetchDepartments } from "@/app/api/departments"; | |||||
| type CreateDepartmentProps = { isEdit: false }; | type CreateDepartmentProps = { isEdit: false }; | ||||
| interface EditDepartmentProps { | interface EditDepartmentProps { | ||||
| @@ -17,8 +17,10 @@ const CreateDepartmentWrapper: React.FC<Props> = async (props) => { | |||||
| ? await fetchDepartmentDetails(props.departmentId!) | ? await fetchDepartmentDetails(props.departmentId!) | ||||
| : undefined; | : undefined; | ||||
| const [ department ] = await Promise.all([fetchDepartments()]) | |||||
| return ( | return ( | ||||
| <CreateDepartment isEdit department={departmentInfo} | |||||
| <CreateDepartment depCodes={department.map(d => d.code)} isEdit department={departmentInfo} | |||||
| /> | /> | ||||
| ); | ); | ||||
| }; | }; | ||||
| @@ -43,6 +43,12 @@ const DepartmentDetails: React.FC = ({ | |||||
| required: "Department code required!", | required: "Department code required!", | ||||
| })} | })} | ||||
| error={Boolean(errors.code)} | error={Boolean(errors.code)} | ||||
| helperText={ | |||||
| Boolean(errors.code) && | |||||
| (errors.code?.message | |||||
| ? t(errors.code.message) | |||||
| : t("Please input correct department code")) | |||||
| } | |||||
| /> | /> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={6}> | <Grid item xs={6}> | ||||