diff --git a/src/components/pages/uniformity/detail/UniformityDetail.tsx b/src/components/pages/uniformity/detail/UniformityDetail.tsx index 72e7bd9e..8cfaa8d4 100644 --- a/src/components/pages/uniformity/detail/UniformityDetail.tsx +++ b/src/components/pages/uniformity/detail/UniformityDetail.tsx @@ -49,6 +49,7 @@ const UniformityDetail: React.FC = ({ uniformity_details={initialValues.uniformity_details} sampling={initialValues.sampling} result={initialValues.result} + uniformityId={initialValues.id} /> ); diff --git a/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx b/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx index d69d6633..e7f7067b 100644 --- a/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx +++ b/src/components/pages/uniformity/detail/UniformityDetailsPreview.tsx @@ -1,6 +1,6 @@ 'use client'; -import React, { useMemo } from 'react'; +import React, { useMemo, useState } from 'react'; import { Icon } from '@iconify/react'; import { ColumnDef } from '@tanstack/react-table'; import DrawerHeader from '@/components/helper/drawer/DrawerHeader'; @@ -21,26 +21,51 @@ import { getWeightStatusText, } from '@/components/pages/uniformity/uniformity-utils'; import { BodyWeightData } from '@/types/api/uniformity/uniformity'; +import Button from '@/components/Button'; +import { UniformityApi } from '@/services/api/uniformity'; +import useSWR from 'swr'; +import { isResponseSuccess } from '@/lib/api-helper'; interface UniformityDetailsPreviewProps { info_umum: UniformityInfoUmum; - uniformity_details: UniformityDetailItem[]; sampling: UniformitySampling; result: UniformityResult; + uniformity_details?: UniformityDetailItem[]; + uniformityId: number; } const UniformityDetailsPreview = ({ info_umum, - uniformity_details, + uniformity_details: initialUniformityDetails, sampling, result, + uniformityId, }: UniformityDetailsPreviewProps) => { const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen); + const [shouldFetchDetails, setShouldFetchDetails] = useState(false); + + const { data: uniformityDetailResponse, isLoading } = useSWR( + shouldFetchDetails + ? `uniformity-detail-${uniformityId}-with-details` + : null, + () => UniformityApi.getUniformityDetail(uniformityId, true) + ); + + const uniformity_details = useMemo(() => { + if (shouldFetchDetails && isResponseSuccess(uniformityDetailResponse)) { + return uniformityDetailResponse.data.uniformity_details; + } + return initialUniformityDetails; + }, [shouldFetchDetails, uniformityDetailResponse, initialUniformityDetails]); const handleClose = () => { setExpandedDrawerOpen(false); }; + const fetchWeightData = () => { + setShouldFetchDetails(true); + }; + const samplingTableData: DetailOptionType[] = useMemo(() => { if (!sampling) return []; @@ -219,7 +244,6 @@ const UniformityDetailsPreview = ({ }} /> - {/* Result */}

Result

@@ -234,15 +258,32 @@ const UniformityDetailsPreview = ({ />
- {/* Body Weight Details */} + {/* Body Weight Details Button */}
- - data={tableData} - columns={columnsUniformity} - pageSize={15} - className={{ containerClassName: 'mb-5' }} - /> +
+ {/*{!uniformity_details || uniformity_details.length === 0 ? ( + <> + ) : null}*/} + + {/* Body Weight Details */} + {uniformity_details && uniformity_details.length > 0 && ( +
+ + data={tableData} + columns={columnsUniformity} + pageSize={15} + className={{ containerClassName: 'mb-5' }} + /> +
+ )} ) : (
diff --git a/src/services/api/uniformity.ts b/src/services/api/uniformity.ts index 892192b6..73d979ca 100644 --- a/src/services/api/uniformity.ts +++ b/src/services/api/uniformity.ts @@ -22,10 +22,17 @@ export class UniformityApiService extends BaseApiService< } async getUniformityDetail( - id: number + id: number, + with_details = false ): Promise | undefined> { return await this.customRequest>( - `/${id}` + `/${id}`, + { + method: 'GET', + params: { + with_details: with_details, + }, + } ); } diff --git a/src/types/api/uniformity/uniformity.d.ts b/src/types/api/uniformity/uniformity.d.ts index cde4415d..3af424ef 100644 --- a/src/types/api/uniformity/uniformity.d.ts +++ b/src/types/api/uniformity/uniformity.d.ts @@ -62,7 +62,7 @@ export type UniformityDetail = BaseMetadata & { info_umum: UniformityInfoUmum; sampling: UniformitySampling; result: UniformityResult; - uniformity_details: UniformityDetailItem[]; + uniformity_details?: UniformityDetailItem[]; latest_approval?: BaseApproval; };