refactor(FE-170,174): simplify daily recording form by removing unused flock period logic

This commit is contained in:
rstubryan
2025-10-31 13:08:55 +07:00
parent 59b0eeea2b
commit 2d30514d64
@@ -37,7 +37,6 @@ import { LocationApi } from '@/services/api/master-data';
import { ProductWarehouseApi } from '@/services/api/inventory'; import { ProductWarehouseApi } from '@/services/api/inventory';
import { isResponseSuccess } from '@/lib/api-helper'; import { isResponseSuccess } from '@/lib/api-helper';
import { import {
PeriodFlock,
ProjectFlockKandangLookup, ProjectFlockKandangLookup,
} from '@/types/api/production/project-flock'; } from '@/types/api/production/project-flock';
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
@@ -153,72 +152,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
RecordingApi.getAllFetcher RecordingApi.getAllFetcher
); );
const flockPeriodsUrls = useMemo(() => {
if (!isResponseSuccess(projectFlocks)) return [];
return (
projectFlocks?.data.map(
(pf) => `${ProjectFlockApi.basePath}/flocks/${pf.flock.id}/periods`
) || []
);
}, [projectFlocks]);
const { data: flockPeriodsData } = useSWR<BaseApiResponse<PeriodFlock>[]>(
flockPeriodsUrls.length > 0 ? flockPeriodsUrls : null,
(urls: string[]) =>
Promise.all(urls.map((url) => fetch(url).then((res) => res.json()))),
{
revalidateOnFocus: false,
dedupingInterval: 60000,
}
);
const recordedProjectFlockIds = useMemo(() => {
if (!isResponseSuccess(existingRecordings)) return new Set<number>();
const todayRecordings = existingRecordings?.data || [];
const recordedIds = new Set<number>();
todayRecordings.forEach((recording) => {
const recordingDate = recording.record_datetime?.split('T')[0];
const isRecordedToday = recordingDate === today;
let isCorrectPeriod = false;
if (
isRecordedToday &&
flockPeriodsData &&
isResponseSuccess(projectFlocks)
) {
const flockIndex = projectFlocks.data.findIndex(
(pf) => pf.id === recording.project_flock_kandangs_id
);
if (
flockIndex !== undefined &&
flockIndex >= 0 &&
flockPeriodsData[flockIndex]
) {
const flockPeriod = flockPeriodsData[flockIndex];
const currentProjectFlock = projectFlocks.data[flockIndex];
if (
currentProjectFlock &&
isResponseSuccess(flockPeriod) &&
flockPeriod.data?.next_period
) {
const expectedDay = flockPeriod.data.next_period - 1;
isCorrectPeriod = recording.day === expectedDay;
}
}
}
if (isRecordedToday && (isCorrectPeriod || !flockPeriodsData)) {
recordedIds.add(recording.project_flock_kandangs_id);
}
});
return recordedIds;
}, [existingRecordings, today, flockPeriodsData, projectFlocks]);
const { data: stockProducts, isLoading: isLoadingStockProducts } = useSWR( const { data: stockProducts, isLoading: isLoadingStockProducts } = useSWR(
stockProductsUrl, stockProductsUrl,
ProductWarehouseApi.getAllFetcher ProductWarehouseApi.getAllFetcher
@@ -592,11 +526,11 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
); );
const getProjectFlockBadgeAdornment = useCallback(() => { const getProjectFlockBadgeAdornment = useCallback(() => {
if (!isResponseSuccess(projectFlocks) || !projectFlockKandangLookup) if (!projectFlockKandangLookup)
return null; return null;
const isAlreadyRecorded = recordedProjectFlockKandangIds.has( const isAlreadyRecorded = recordedProjectFlockKandangIds.has(
projectFlockKandangLookup.id projectFlockKandangLookup.project_flock_kandang_id
); );
let color: 'neutral' | 'success' | 'warning' | 'error' = 'neutral'; let color: 'neutral' | 'success' | 'warning' | 'error' = 'neutral';
@@ -619,7 +553,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
</Badge> </Badge>
); );
}, [ }, [
projectFlocks,
recordedProjectFlockKandangIds, recordedProjectFlockKandangIds,
projectFlockKandangLookup, projectFlockKandangLookup,
]); ]);
@@ -1124,6 +1057,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
{(type as 'add' | 'edit' | 'detail') === 'detail' ? null : ( {(type as 'add' | 'edit' | 'detail') === 'detail' ? null : (
<> <>
<SelectInput <SelectInput
key={`location-select-${selectedLocation?.value || 'default'}`}
required required
label='Lokasi' label='Lokasi'
value={selectedLocation} value={selectedLocation}
@@ -1137,6 +1071,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
/> />
<SelectInput <SelectInput
key={`project-flock-select-${selectedProjectFlock?.value || 'default'}`}
required required
label='Project Flock' label='Project Flock'
value={selectedProjectFlock} value={selectedProjectFlock}
@@ -1155,6 +1090,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
/> />
<SelectInput <SelectInput
key={`kandang-select-${projectFlockKandangLookup?.project_flock_kandang_id || 'default'}`}
required required
label='Kandang' label='Kandang'
value={selectedKandang} value={selectedKandang}