@@ -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}> | ||||