refactor(FE-238-239-240): implement approval workflow chickin & project flock, membuat custom hook useApprovals, dan handling error format approvals

This commit is contained in:
randy-ar
2025-11-12 15:24:44 +07:00
parent 5dccaf40cb
commit b2f4317c08
13 changed files with 258 additions and 200 deletions
@@ -16,8 +16,12 @@ export default function AddChickinKandang() {
data: projectFlockKandang,
isLoading: isLoading,
mutate: refreshProjectFlockKandang,
} = useSWR(projectFlockKandangId, (id: number) =>
ProjectFlockKandangApi.getSingle(id)
} = useSWR(
`get-single-project-flock-kandang/${projectFlockKandangId}`,
async () =>
ProjectFlockKandangApi.getSingle(
parseInt(projectFlockKandangId as string)
)
);
if (!projectFlockKandangId) {
@@ -2,11 +2,8 @@
import ProjectFlockForm from '@/components/pages/production/project-flock/form/ProjectFlockForm';
import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
import { FlockApi } from '@/services/api/master-data';
import { ProjectFlockApi } from '@/services/api/production/project-flock';
import { ProjectFlock } from '@/types/api/production/project-flock';
import { useRouter, useSearchParams } from 'next/navigation';
import { useState } from 'react';
import useSWR from 'swr';
const ProjectFlockDetail = () => {
@@ -15,22 +12,12 @@ const ProjectFlockDetail = () => {
const projectFlockId = searchParams.get('projectFlockId');
const [projectName, setProjectName] = useState();
const {
data: projectFlock,
isLoading: isLoadingProjectFlock,
mutate: refreshProjectFlock,
} = useSWR(projectFlockId, (id: number) => ProjectFlockApi.getSingle(id));
const {
data: approvalLines,
isLoading: isLoadingApprovalLines,
mutate: refreshApprovalLines,
} = useSWR('approvals', (id: number) =>
ProjectFlockApi.getApprovalLines((projectFlockId ?? 0) as number)
);
if (!projectFlockId) {
router.back();
@@ -51,15 +38,13 @@ const ProjectFlockDetail = () => {
return (
<div className='w-full p-4 flex flex-col justify-center'>
{isLoadingProjectFlock ||
(isLoadingApprovalLines && (
<span className='loading loading-spinner loading-xl' />
))}
{isResponseSuccess(projectFlock) && isResponseSuccess(approvalLines) && (
{isLoadingProjectFlock && (
<span className='loading loading-spinner loading-xl' />
)}
{isResponseSuccess(projectFlock) && (
<ProjectFlockForm
formType='detail'
initialValues={projectFlock.data}
initialApprovals={approvalLines.data}
refreshProjectFlocks={refreshProjectFlock}
/>
)}