mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
refactor(FE-238-86): change useApprovalSteps params, and minimize fetching data
This commit is contained in:
@@ -8,9 +8,8 @@ import {
|
|||||||
BaseApiResponse,
|
BaseApiResponse,
|
||||||
BaseApproval,
|
BaseApproval,
|
||||||
BaseGroupedApproval,
|
BaseGroupedApproval,
|
||||||
ModuleWithApproval,
|
|
||||||
} from '@/types/api/api-general';
|
} from '@/types/api/api-general';
|
||||||
import { AppConfigData, ApprovalLine } from '@/types/config/constant';
|
import { ApprovalLine } from '@/types/config/constant';
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
import { httpClientFetcher } from '@/services/http/client';
|
import { httpClientFetcher } from '@/services/http/client';
|
||||||
import { isResponseSuccess } from '@/lib/api-helper';
|
import { isResponseSuccess } from '@/lib/api-helper';
|
||||||
@@ -238,13 +237,15 @@ const isGroupedApprovalData = (
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const useApprovalSteps = <T extends ModuleWithApproval>({
|
const useApprovalSteps = ({
|
||||||
moduleUrl,
|
latestApproval,
|
||||||
|
approvalLines,
|
||||||
moduleName,
|
moduleName,
|
||||||
moduleId,
|
moduleId,
|
||||||
params,
|
params,
|
||||||
}: {
|
}: {
|
||||||
moduleUrl: string;
|
latestApproval: BaseApproval | undefined;
|
||||||
|
approvalLines: ApprovalLine;
|
||||||
moduleName: string;
|
moduleName: string;
|
||||||
moduleId: string;
|
moduleId: string;
|
||||||
params?: {
|
params?: {
|
||||||
@@ -254,26 +255,20 @@ const useApprovalSteps = <T extends ModuleWithApproval>({
|
|||||||
group_step_number?: boolean;
|
group_step_number?: boolean;
|
||||||
};
|
};
|
||||||
}) => {
|
}) => {
|
||||||
|
// Membuat URL Parameters
|
||||||
const paramString = new URLSearchParams({
|
const paramString = new URLSearchParams({
|
||||||
page: params?.page?.toString() || '',
|
page: params?.page?.toString() || '',
|
||||||
limit: params?.limit?.toString() || '',
|
limit: params?.limit?.toString() || '',
|
||||||
search: params?.search || '',
|
search: params?.search || '',
|
||||||
}).toString();
|
}).toString();
|
||||||
const SWR_KEY_CONSTANTS = '/constants';
|
|
||||||
|
// fetching data approvals
|
||||||
const SWR_KEY_APPROVALS =
|
const SWR_KEY_APPROVALS =
|
||||||
moduleName && moduleId
|
moduleName && moduleId
|
||||||
? `/approvals?module_name=${moduleName}&module_id=${moduleId}${
|
? `/approvals?module_name=${moduleName}&module_id=${moduleId}${
|
||||||
params ? `&${paramString}` : ''
|
params ? `&${paramString}` : ''
|
||||||
}`
|
}`
|
||||||
: null;
|
: null;
|
||||||
const SWR_KEY_CURRENT_DATA = moduleUrl;
|
|
||||||
|
|
||||||
const { data: constData, isLoading: constIsLoading } = useSWR(
|
|
||||||
SWR_KEY_CONSTANTS,
|
|
||||||
async (url) => {
|
|
||||||
return await httpClientFetcher<AppConfigData>(url);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: approvalData,
|
data: approvalData,
|
||||||
@@ -285,30 +280,12 @@ const useApprovalSteps = <T extends ModuleWithApproval>({
|
|||||||
>(url);
|
>(url);
|
||||||
});
|
});
|
||||||
|
|
||||||
const {
|
|
||||||
data: currentData,
|
|
||||||
isLoading: currentIsLoading,
|
|
||||||
mutate: mutateCurrentData,
|
|
||||||
} = useSWR(SWR_KEY_CURRENT_DATA, async (url) => {
|
|
||||||
return await httpClientFetcher<BaseApiResponse<T>>(url);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Fungsi Refresh
|
// Fungsi Refresh
|
||||||
const refresh = useCallback(async () => {
|
const refresh = useCallback(async () => {
|
||||||
await Promise.all([mutateApprovals(), mutateCurrentData()]);
|
await mutateApprovals();
|
||||||
}, [mutateApprovals, mutateCurrentData]);
|
}, [mutateApprovals]);
|
||||||
|
|
||||||
const { approvalLine, groupedApprovals, latestApproval } = useMemo(() => {
|
|
||||||
const line = constData
|
|
||||||
? (constData.approval_workflows.find((approval) => {
|
|
||||||
return approval.key === moduleName;
|
|
||||||
})?.steps ?? [])
|
|
||||||
: [];
|
|
||||||
|
|
||||||
const latest = isResponseSuccess(currentData)
|
|
||||||
? currentData.data?.approval
|
|
||||||
: undefined;
|
|
||||||
|
|
||||||
|
const { groupedApprovals } = useMemo(() => {
|
||||||
const rawData = isResponseSuccess(approvalData)
|
const rawData = isResponseSuccess(approvalData)
|
||||||
? approvalData.data
|
? approvalData.data
|
||||||
: undefined;
|
: undefined;
|
||||||
@@ -326,30 +303,30 @@ const useApprovalSteps = <T extends ModuleWithApproval>({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
approvalLine: line,
|
|
||||||
groupedApprovals: processedGroupedApprovals,
|
groupedApprovals: processedGroupedApprovals,
|
||||||
latestApproval: latest,
|
|
||||||
};
|
};
|
||||||
}, [constData, approvalData, currentData, moduleName]);
|
}, [approvalData]);
|
||||||
|
|
||||||
const isLoading = constIsLoading || approvalIsLoading || currentIsLoading;
|
const isLoading = approvalIsLoading;
|
||||||
|
|
||||||
|
// Formatting Akhir
|
||||||
const approvals = useMemo(() => {
|
const approvals = useMemo(() => {
|
||||||
if (isLoading || !approvalLine.length || !latestApproval) {
|
if (isLoading || !approvalLines.length || !latestApproval) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return formatGroupedApprovalsToApprovalSteps(
|
return formatGroupedApprovalsToApprovalSteps(
|
||||||
approvalLine,
|
approvalLines,
|
||||||
groupedApprovals,
|
groupedApprovals,
|
||||||
latestApproval as BaseApproval
|
latestApproval
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn('Gagal memformat approval steps:', error);
|
console.warn('Gagal memformat approval steps:', error);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}, [isLoading, approvalLine, groupedApprovals, latestApproval]);
|
}, [isLoading, approvalLines, groupedApprovals, latestApproval]);
|
||||||
|
|
||||||
|
// Raw Data Approvals
|
||||||
const rawDataApprovals = useMemo(() => {
|
const rawDataApprovals = useMemo(() => {
|
||||||
const rawData = isResponseSuccess(approvalData)
|
const rawData = isResponseSuccess(approvalData)
|
||||||
? approvalData.data
|
? approvalData.data
|
||||||
@@ -381,7 +358,6 @@ const useApprovalSteps = <T extends ModuleWithApproval>({
|
|||||||
return {
|
return {
|
||||||
approvals,
|
approvals,
|
||||||
isLoading,
|
isLoading,
|
||||||
rawData: isResponseSuccess(currentData) ? currentData.data : undefined,
|
|
||||||
rawDataApprovals: rawDataApprovals,
|
rawDataApprovals: rawDataApprovals,
|
||||||
refresh,
|
refresh,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { useState } from 'react';
|
|||||||
import ApprovalSteps, {
|
import ApprovalSteps, {
|
||||||
useApprovalSteps,
|
useApprovalSteps,
|
||||||
} from '@/components/pages/ApprovalSteps';
|
} from '@/components/pages/ApprovalSteps';
|
||||||
|
import { PROJECT_FLOCK_KANDANG_APPROVAL_LINE } from '@/config/approval-line';
|
||||||
const ChickinFormKandang = ({
|
const ChickinFormKandang = ({
|
||||||
formType = 'add',
|
formType = 'add',
|
||||||
initialValues,
|
initialValues,
|
||||||
@@ -29,7 +30,8 @@ const ChickinFormKandang = ({
|
|||||||
isLoading: approvalsLoading,
|
isLoading: approvalsLoading,
|
||||||
refresh: refreshApprovals,
|
refresh: refreshApprovals,
|
||||||
} = useApprovalSteps({
|
} = useApprovalSteps({
|
||||||
moduleUrl: `/production/project-flock-kandangs/${initialValues?.id}`,
|
latestApproval: initialValues?.approval,
|
||||||
|
approvalLines: PROJECT_FLOCK_KANDANG_APPROVAL_LINE,
|
||||||
moduleName: 'PROJECT_FLOCK_KANDANGS',
|
moduleName: 'PROJECT_FLOCK_KANDANGS',
|
||||||
moduleId: initialValues?.id.toString() ?? '',
|
moduleId: initialValues?.id.toString() ?? '',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import ProjectFlockKandangTable from './ProjectFlockKandangTable';
|
|||||||
import ApprovalSteps, {
|
import ApprovalSteps, {
|
||||||
useApprovalSteps,
|
useApprovalSteps,
|
||||||
} from '@/components/pages/ApprovalSteps';
|
} from '@/components/pages/ApprovalSteps';
|
||||||
|
import { PROJECT_FLOCK_APPROVAL_LINE } from '@/config/approval-line';
|
||||||
|
|
||||||
interface ProjectFlockFormProps {
|
interface ProjectFlockFormProps {
|
||||||
formType?: 'add' | 'edit' | 'detail';
|
formType?: 'add' | 'edit' | 'detail';
|
||||||
@@ -150,11 +151,11 @@ const ProjectFlockForm = ({
|
|||||||
const {
|
const {
|
||||||
approvals,
|
approvals,
|
||||||
isLoading: approvalsLoading,
|
isLoading: approvalsLoading,
|
||||||
rawData: rawApprovals,
|
|
||||||
rawDataApprovals: rawDataApprovals,
|
rawDataApprovals: rawDataApprovals,
|
||||||
refresh: refreshApprovals,
|
refresh: refreshApprovals,
|
||||||
} = useApprovalSteps({
|
} = useApprovalSteps({
|
||||||
moduleUrl: `/production/project-flocks/${initialValues?.id}`,
|
latestApproval: initialValues?.approval,
|
||||||
|
approvalLines: PROJECT_FLOCK_APPROVAL_LINE,
|
||||||
moduleName: 'PROJECT_FLOCKS',
|
moduleName: 'PROJECT_FLOCKS',
|
||||||
moduleId: initialValues?.id.toString() ?? '',
|
moduleId: initialValues?.id.toString() ?? '',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -10,3 +10,14 @@ export const PROJECT_FLOCK_APPROVAL_LINE: ApprovalLine = [
|
|||||||
step_name: 'Aktif',
|
step_name: 'Aktif',
|
||||||
},
|
},
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
|
export const PROJECT_FLOCK_KANDANG_APPROVAL_LINE: ApprovalLine = [
|
||||||
|
{
|
||||||
|
step_number: 1,
|
||||||
|
step_name: 'Pengajuan',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
step_number: 2,
|
||||||
|
step_name: 'Disetujui',
|
||||||
|
},
|
||||||
|
] as const;
|
||||||
|
|||||||
@@ -231,49 +231,3 @@ export const RECORDING_FLAG_OPTIONS = [
|
|||||||
{ label: 'Ayam Culling', value: 'Ayam Culling' },
|
{ label: 'Ayam Culling', value: 'Ayam Culling' },
|
||||||
{ label: 'Ayam Mati', value: 'Ayam Mati' },
|
{ label: 'Ayam Mati', value: 'Ayam Mati' },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const APPROVAL_WORKFLOWS = [
|
|
||||||
{
|
|
||||||
key: 'PROJECT_FLOCKS',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
step_number: 1,
|
|
||||||
step_name: 'Pengajuan',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
step_number: 2,
|
|
||||||
step_name: 'Aktif',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'PROJECT_FLOCK_KANDANGS',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
step_number: 1,
|
|
||||||
step_name: 'Pengajuan',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
step_number: 2,
|
|
||||||
step_name: 'Disetujui',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'RECORDINGS',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
step_number: 1,
|
|
||||||
step_name: 'Grading-Telur',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
step_number: 2,
|
|
||||||
step_name: 'Pengajuan',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
step_number: 3,
|
|
||||||
step_name: 'Disetujui',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|||||||
Vendored
-4
@@ -113,10 +113,6 @@ export type BaseGroupedApproval = {
|
|||||||
approvals: BaseApproval[];
|
approvals: BaseApproval[];
|
||||||
};
|
};
|
||||||
|
|
||||||
interface ModuleWithApproval {
|
|
||||||
approval?: BaseApproval;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type Approvals = BaseApiResponse<BaseApproval>;
|
export type Approvals = BaseApiResponse<BaseApproval>;
|
||||||
|
|
||||||
export type GroupedApprovals = BaseApiResponse<BaseGroupedApproval[]>;
|
export type GroupedApprovals = BaseApiResponse<BaseGroupedApproval[]>;
|
||||||
|
|||||||
Vendored
-14
@@ -2,17 +2,3 @@ export type ApprovalLine = {
|
|||||||
step_number: number;
|
step_number: number;
|
||||||
step_name: string;
|
step_name: string;
|
||||||
}[];
|
}[];
|
||||||
|
|
||||||
export interface ApprovalWorkflow {
|
|
||||||
key: string;
|
|
||||||
steps: ApprovalLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AppConfigData {
|
|
||||||
approval_workflows: ApprovalWorkflow[];
|
|
||||||
flags: string[];
|
|
||||||
warehouse_types: string[];
|
|
||||||
stock_log: string;
|
|
||||||
supplier_categories: string[];
|
|
||||||
customer_supplier_types: string[];
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user