From a1e8f582badfb4432dfa10d6fa66e7d7b73f5219 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Wed, 31 Dec 2025 11:17:26 +0700 Subject: [PATCH] refactor(FE-316,317,438): Move Uniformity feature under production namespace --- .../{ => production}/uniformity/add/page.tsx | 2 +- .../uniformity/detail/page.tsx | 2 +- .../{ => production}/uniformity/layout.tsx | 2 +- src/app/{ => production}/uniformity/page.tsx | 2 +- .../uniformity/UniformityChart.tsx | 8 ++-- .../uniformity/UniformityPageWrapper.tsx | 8 ++-- .../uniformity/UniformityTable.tsx | 44 ++++++++----------- .../uniformity/chart/UniformityBarChart.tsx | 0 .../uniformity/chart/UniformityGaugeChart.tsx | 0 .../uniformity/chart/UniformityStat.tsx | 2 +- .../uniformity/detail/UniformityDetail.tsx | 14 +++--- .../detail/UniformityDetailsPreview.tsx | 8 ++-- .../export/UniformityExportExcel.tsx | 2 +- .../uniformity/export/UniformityExportPDF.tsx | 2 +- .../uniformity/export/UniformityTemplate.tsx | 0 .../uniformity/form/UniformityForm.schema.ts | 2 +- .../uniformity/form/UniformityForm.tsx | 16 ++++--- .../uniformity/form/UniformityPreviewForm.tsx | 2 +- .../uniformity/form/UniformityResultForm.tsx | 8 ++-- .../skeleton/UniformityBarChartSkeleton.tsx | 0 .../skeleton/UniformityGaugeChartSkeleton.tsx | 0 .../skeleton/UniformityTableSkeleton.tsx | 0 .../uniformity/uniformity-utils.ts | 0 src/config/constant.ts | 11 +++-- src/config/route-permission.ts | 8 ++-- src/services/api/uniformity.ts | 2 +- .../uniformity.d.ts | 0 src/types/stores.d.ts | 2 +- 28 files changed, 71 insertions(+), 76 deletions(-) rename src/app/{ => production}/uniformity/add/page.tsx (54%) rename src/app/{ => production}/uniformity/detail/page.tsx (93%) rename src/app/{ => production}/uniformity/layout.tsx (65%) rename src/app/{ => production}/uniformity/page.tsx (50%) rename src/components/pages/{ => production}/uniformity/UniformityChart.tsx (86%) rename src/components/pages/{ => production}/uniformity/UniformityPageWrapper.tsx (86%) rename src/components/pages/{ => production}/uniformity/UniformityTable.tsx (96%) rename src/components/pages/{ => production}/uniformity/chart/UniformityBarChart.tsx (100%) rename src/components/pages/{ => production}/uniformity/chart/UniformityGaugeChart.tsx (100%) rename src/components/pages/{ => production}/uniformity/chart/UniformityStat.tsx (98%) rename src/components/pages/{ => production}/uniformity/detail/UniformityDetail.tsx (93%) rename src/components/pages/{ => production}/uniformity/detail/UniformityDetailsPreview.tsx (97%) rename src/components/pages/{ => production}/uniformity/export/UniformityExportExcel.tsx (97%) rename src/components/pages/{ => production}/uniformity/export/UniformityExportPDF.tsx (99%) rename src/components/pages/{ => production}/uniformity/export/UniformityTemplate.tsx (100%) rename src/components/pages/{ => production}/uniformity/form/UniformityForm.schema.ts (97%) rename src/components/pages/{ => production}/uniformity/form/UniformityForm.tsx (97%) rename src/components/pages/{ => production}/uniformity/form/UniformityPreviewForm.tsx (98%) rename src/components/pages/{ => production}/uniformity/form/UniformityResultForm.tsx (97%) rename src/components/pages/{ => production}/uniformity/skeleton/UniformityBarChartSkeleton.tsx (100%) rename src/components/pages/{ => production}/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx (100%) rename src/components/pages/{ => production}/uniformity/skeleton/UniformityTableSkeleton.tsx (100%) rename src/components/pages/{ => production}/uniformity/uniformity-utils.ts (100%) rename src/types/api/{uniformity => production}/uniformity.d.ts (100%) diff --git a/src/app/uniformity/add/page.tsx b/src/app/production/uniformity/add/page.tsx similarity index 54% rename from src/app/uniformity/add/page.tsx rename to src/app/production/uniformity/add/page.tsx index 7c12cc72..136aab5d 100644 --- a/src/app/uniformity/add/page.tsx +++ b/src/app/production/uniformity/add/page.tsx @@ -1,4 +1,4 @@ -import UniformityForm from '@/components/pages/uniformity/form/UniformityForm'; +import UniformityForm from '@/components/pages/production/uniformity/form/UniformityForm'; const AddUniformity = () => { return ; diff --git a/src/app/uniformity/detail/page.tsx b/src/app/production/uniformity/detail/page.tsx similarity index 93% rename from src/app/uniformity/detail/page.tsx rename to src/app/production/uniformity/detail/page.tsx index e66d0a40..bf1458ef 100644 --- a/src/app/uniformity/detail/page.tsx +++ b/src/app/production/uniformity/detail/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import UniformityDetail from '@/components/pages/uniformity/detail/UniformityDetail'; +import UniformityDetail from '@/components/pages/production/uniformity/detail/UniformityDetail'; import { isResponseError, isResponseSuccess } from '@/lib/api-helper'; import { UniformityApi } from '@/services/api/uniformity'; import { useRouter, useSearchParams } from 'next/navigation'; diff --git a/src/app/uniformity/layout.tsx b/src/app/production/uniformity/layout.tsx similarity index 65% rename from src/app/uniformity/layout.tsx rename to src/app/production/uniformity/layout.tsx index dd239577..511aa0a1 100644 --- a/src/app/uniformity/layout.tsx +++ b/src/app/production/uniformity/layout.tsx @@ -1,5 +1,5 @@ import { ReactNode } from 'react'; -import UniformityPageWrapper from '@/components/pages/uniformity/UniformityPageWrapper'; +import UniformityPageWrapper from '@/components/pages/production/uniformity/UniformityPageWrapper'; export default function UniformityLayout({ children, diff --git a/src/app/uniformity/page.tsx b/src/app/production/uniformity/page.tsx similarity index 50% rename from src/app/uniformity/page.tsx rename to src/app/production/uniformity/page.tsx index 24a31482..841a7507 100644 --- a/src/app/uniformity/page.tsx +++ b/src/app/production/uniformity/page.tsx @@ -1,4 +1,4 @@ -import UniformityTable from '@/components/pages/uniformity/UniformityTable'; +import UniformityTable from '@/components/pages/production/uniformity/UniformityTable'; const Uniformity = () => { return ; diff --git a/src/components/pages/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx similarity index 86% rename from src/components/pages/uniformity/UniformityChart.tsx rename to src/components/pages/production/uniformity/UniformityChart.tsx index 12587202..1b58b16c 100644 --- a/src/components/pages/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -1,9 +1,9 @@ import React from 'react'; import Card from '@/components/Card'; -import UniformityBarChart from '@/components/pages/uniformity/chart/UniformityBarChart'; -import UniformityGaugeChart from '@/components/pages/uniformity/chart/UniformityGaugeChart'; -import UniformityBarChartSkeleton from '@/components/pages/uniformity/skeleton/UniformityBarChartSkeleton'; -import UniformityGaugeChartSkeleton from '@/components/pages/uniformity/skeleton/UniformityGaugeChartSkeleton'; +import UniformityBarChart from '@/components/pages/production/uniformity/chart/UniformityBarChart'; +import UniformityGaugeChart from '@/components/pages/production/uniformity/chart/UniformityGaugeChart'; +import UniformityBarChartSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton'; +import UniformityGaugeChartSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton'; interface BarChartData { name: string; diff --git a/src/components/pages/uniformity/UniformityPageWrapper.tsx b/src/components/pages/production/uniformity/UniformityPageWrapper.tsx similarity index 86% rename from src/components/pages/uniformity/UniformityPageWrapper.tsx rename to src/components/pages/production/uniformity/UniformityPageWrapper.tsx index cbdc656b..bbc82665 100644 --- a/src/components/pages/uniformity/UniformityPageWrapper.tsx +++ b/src/components/pages/production/uniformity/UniformityPageWrapper.tsx @@ -3,7 +3,7 @@ import { usePathname, useRouter } from 'next/navigation'; import Drawer from '@/components/Drawer'; import React, { ReactNode } from 'react'; -import UniformityTable from '@/components/pages/uniformity/UniformityTable'; +import UniformityTable from '@/components/pages/production/uniformity/UniformityTable'; import { useUiStore } from '@/stores/ui/ui.store'; export default function UniformityPageWrapper({ @@ -27,7 +27,7 @@ export default function UniformityPageWrapper({ const handleBackdropClick = () => { const unsub = useUiStore.getState().subscribeIsValid((isValid) => { if (isValid) { - router.push('/uniformity'); + router.push('/production/uniformity'); unsub?.(); setExpandedDrawerOpen(false); } else { @@ -42,7 +42,7 @@ export default function UniformityPageWrapper({ <>
!isOpen && router.push('/uniformity')} + refresh={() => !isOpen && router.push('/production/uniformity')} />
@@ -50,7 +50,7 @@ export default function UniformityPageWrapper({ open={isOpen} setOpen={(v) => { if (!v) { - router.push('/uniformity'); + router.push('/production/uniformity'); setExpandedDrawerOpen(false); } }} diff --git a/src/components/pages/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx similarity index 96% rename from src/components/pages/uniformity/UniformityTable.tsx rename to src/components/pages/production/uniformity/UniformityTable.tsx index be9fa1b0..cf981732 100644 --- a/src/components/pages/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -7,10 +7,10 @@ import { Icon } from '@iconify/react'; import { ColumnDef, SortingState } from '@tanstack/react-table'; import { cn, formatDate } from '@/lib/helper'; import Button from '@/components/Button'; -import UniformityChart from '@/components/pages/uniformity/UniformityChart'; +import UniformityChart from '@/components/pages/production/uniformity/UniformityChart'; import { useTableFilter } from '@/services/hooks/useTableFilter'; import { UniformityApi } from '@/services/api/uniformity'; -import { type Uniformity } from '@/types/api/uniformity/uniformity'; +import { type Uniformity } from '@/types/api/production/uniformity'; import { isResponseSuccess } from '@/lib/api-helper'; import { type BaseApiResponse } from '@/types/api/api-general'; import Table from '@/components/Table'; @@ -20,7 +20,7 @@ import { useModal } from '@/components/Modal'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; import toast from 'react-hot-toast'; import Card from '@/components/Card'; -import UniformityTableSkeleton from '@/components/pages/uniformity/skeleton/UniformityTableSkeleton'; +import UniformityTableSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityTableSkeleton'; import RequirePermission from '@/components/helper/RequirePermission'; import { useUniformityStore } from '@/stores/uniformity/uniformity.store'; import FloatingActionsButton from '@/components/FloatingActionsButton'; @@ -38,20 +38,20 @@ import { getStatusColor, getStatusIndicatorColor, getStatusText, -} from '@/components/pages/uniformity/uniformity-utils'; -import { generateUniformityPDF } from '@/components/pages/uniformity/export/UniformityExportPDF'; -import { generateUniformityExcel } from '@/components/pages/uniformity/export/UniformityExportExcel'; +} from '@/components/pages/production/uniformity/uniformity-utils'; +import { generateUniformityPDF } from '@/components/pages/production/uniformity/export/UniformityExportPDF'; +import { generateUniformityExcel } from '@/components/pages/production/uniformity/export/UniformityExportExcel'; import Dropdown from '@/components/Dropdown'; import Menu from '@/components/menu/Menu'; import MenuItem from '@/components/menu/MenuItem'; const isUniformityLocked = (uniformity: Uniformity): boolean => { - return ( - uniformity.status === 'Disetujui' || - uniformity.status === 'Ditolak' || - uniformity.status === 'APPROVED' || - uniformity.status === 'REJECTED' - ); + // Uniformity data is never locked - checkbox is always enabled + return false; +}; + +const canApproveRejectUniformity = (uniformity: Uniformity): boolean => { + return uniformity.status === 'CREATED' || uniformity.status === 'Pengajuan'; }; interface UniformityPreviewData { @@ -430,7 +430,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => { singleRejectModal.openModal(); } - router.replace('/uniformity', { scroll: false }); + router.replace('/production/uniformity', { scroll: false }); } } } @@ -671,7 +671,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => { const uniformity = uniformities.data.find( (r) => r.id === parseInt(rowId) ); - if (uniformity && !isUniformityLocked(uniformity)) { + if (uniformity) { newSelection[rowId] = true; } } @@ -692,10 +692,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => { id: 'select', header: ({ table }) => { const allRows = table.getRowModel().rows; - const selectableRows = allRows.filter((row) => { - const uniformity = row.original; - return !isUniformityLocked(uniformity); - }); + const selectableRows = allRows; const hasNoSelectableRows = selectableRows.length === 0; @@ -730,17 +727,14 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => { ); }, cell: ({ row }) => { - const uniformity = row.original; - const isDisabled = isUniformityLocked(uniformity); - return ( -
+
); @@ -805,7 +799,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => {
- @@ -1196,7 +1190,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => { hidden: selectedRowIds.length !== 1, onClick() { router.push( - `/uniformity/detail?uniformityId=${selectedRowIds[0]}` + `/production/uniformity/detail?uniformityId=${selectedRowIds[0]}` ); setRowSelection({}); }, diff --git a/src/components/pages/uniformity/chart/UniformityBarChart.tsx b/src/components/pages/production/uniformity/chart/UniformityBarChart.tsx similarity index 100% rename from src/components/pages/uniformity/chart/UniformityBarChart.tsx rename to src/components/pages/production/uniformity/chart/UniformityBarChart.tsx diff --git a/src/components/pages/uniformity/chart/UniformityGaugeChart.tsx b/src/components/pages/production/uniformity/chart/UniformityGaugeChart.tsx similarity index 100% rename from src/components/pages/uniformity/chart/UniformityGaugeChart.tsx rename to src/components/pages/production/uniformity/chart/UniformityGaugeChart.tsx diff --git a/src/components/pages/uniformity/chart/UniformityStat.tsx b/src/components/pages/production/uniformity/chart/UniformityStat.tsx similarity index 98% rename from src/components/pages/uniformity/chart/UniformityStat.tsx rename to src/components/pages/production/uniformity/chart/UniformityStat.tsx index e7603e16..ea8a5c0e 100644 --- a/src/components/pages/uniformity/chart/UniformityStat.tsx +++ b/src/components/pages/production/uniformity/chart/UniformityStat.tsx @@ -1,4 +1,4 @@ -import Badge from '@/components/Badge'; +import Badge from '../../../../Badge'; import Card from '@/components/Card'; import { Icon } from '@iconify/react'; import { formatNumber } from '@/lib/helper'; diff --git a/src/components/pages/uniformity/detail/UniformityDetail.tsx b/src/components/pages/production/uniformity/detail/UniformityDetail.tsx similarity index 93% rename from src/components/pages/uniformity/detail/UniformityDetail.tsx rename to src/components/pages/production/uniformity/detail/UniformityDetail.tsx index fa1f6a5b..0cc39d9a 100644 --- a/src/components/pages/uniformity/detail/UniformityDetail.tsx +++ b/src/components/pages/production/uniformity/detail/UniformityDetail.tsx @@ -10,16 +10,16 @@ import Table from '@/components/Table'; import Badge from '@/components/Badge'; import Tooltip from '@/components/Tooltip'; import RequirePermission from '@/components/helper/RequirePermission'; -import { UniformityDetail as UniformityDetailType } from '@/types/api/uniformity/uniformity'; +import { UniformityDetail as UniformityDetailType } from '@/types/api/production/uniformity'; import { formatDate } from '@/lib/helper'; import { useUiStore } from '@/stores/ui/ui.store'; -import UniformityDetailsPreview from '@/components/pages/uniformity/detail/UniformityDetailsPreview'; +import UniformityDetailsPreview from '@/components/pages/production/uniformity/detail/UniformityDetailsPreview'; import { getStatusColor, getStatusIndicatorColor, getStatusText, -} from '@/components/pages/uniformity/uniformity-utils'; -import { DetailOptionType } from '@/types/api/uniformity/uniformity'; +} from '@/components/pages/production/uniformity/uniformity-utils'; +import { DetailOptionType } from '@/types/api/production/uniformity'; interface UniformityDetailProps { initialValues: UniformityDetailType; @@ -35,11 +35,11 @@ const UniformityDetail: React.FC = ({ ); const handleApprove = () => { - router.push(`/uniformity?action=approve&id=${initialValues.id}`); + router.push(`/production/uniformity?action=approve&id=${initialValues.id}`); }; const handleReject = () => { - router.push(`/uniformity?action=reject&id=${initialValues.id}`); + router.push(`/production/uniformity?action=reject&id=${initialValues.id}`); }; const handleViewUniformityDetails = () => { @@ -175,7 +175,7 @@ const UniformityDetail: React.FC = ({
{/* Header */} { const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen); diff --git a/src/components/pages/uniformity/form/UniformityResultForm.tsx b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx similarity index 97% rename from src/components/pages/uniformity/form/UniformityResultForm.tsx rename to src/components/pages/production/uniformity/form/UniformityResultForm.tsx index 446e0a91..df144c64 100644 --- a/src/components/pages/uniformity/form/UniformityResultForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx @@ -20,12 +20,12 @@ import { getWeightStatusColor, getWeightStatusIndicatorColor, getWeightStatusText, -} from '@/components/pages/uniformity/uniformity-utils'; -import { DetailOptionType } from '@/types/api/uniformity/uniformity'; +} from '@/components/pages/production/uniformity/uniformity-utils'; +import { DetailOptionType } from '@/types/api/production/uniformity'; import { BodyWeightData, UniformityDetailItem, -} from '@/types/api/uniformity/uniformity'; +} from '@/types/api/production/uniformity'; const UniformityResultForm = () => { const router = useRouter(); @@ -82,7 +82,7 @@ const UniformityResultForm = () => { setIsNextStep(false); setUniformityStep('preview'); setVerifyUniformityResult(null); - router.push('/uniformity'); + router.push('/production/uniformity'); } finally { setIsSubmitting(false); } diff --git a/src/components/pages/uniformity/skeleton/UniformityBarChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx similarity index 100% rename from src/components/pages/uniformity/skeleton/UniformityBarChartSkeleton.tsx rename to src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx diff --git a/src/components/pages/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx similarity index 100% rename from src/components/pages/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx rename to src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx diff --git a/src/components/pages/uniformity/skeleton/UniformityTableSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx similarity index 100% rename from src/components/pages/uniformity/skeleton/UniformityTableSkeleton.tsx rename to src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx diff --git a/src/components/pages/uniformity/uniformity-utils.ts b/src/components/pages/production/uniformity/uniformity-utils.ts similarity index 100% rename from src/components/pages/uniformity/uniformity-utils.ts rename to src/components/pages/production/uniformity/uniformity-utils.ts diff --git a/src/config/constant.ts b/src/config/constant.ts index f177b394..839bcd83 100644 --- a/src/config/constant.ts +++ b/src/config/constant.ts @@ -29,6 +29,11 @@ export const MAIN_DRAWER_LINKS: SidebarMenuItem[] = [ text: 'Transfer to Laying', link: '/production/transfer-to-laying', }, + { + text: 'Uniformity', + link: '/production/uniformity', + permission: ['lti.production.uniformity.list'], + }, ], }, { @@ -42,12 +47,6 @@ export const MAIN_DRAWER_LINKS: SidebarMenuItem[] = [ link: '/marketing', icon: 'heroicons-outline:currency-dollar', }, - { - text: 'Uniformity', - link: '/uniformity', - icon: 'heroicons-outline:scale', - permission: ['lti.production.uniformity.list'], - }, { text: 'Keuangan', link: '/finance', diff --git a/src/config/route-permission.ts b/src/config/route-permission.ts index 47013aba..0a17175d 100644 --- a/src/config/route-permission.ts +++ b/src/config/route-permission.ts @@ -46,10 +46,10 @@ export const ROUTE_PERMISSIONS: Record = { ], // Production - Uniformity - '/uniformity/': ['lti.production.uniformity.list'], - '/uniformity/add/': ['lti.production.uniformity.create'], - '/uniformity/detail/': ['lti.production.uniformity.detail'], - '/uniformity/detail/edit/': ['lti.production.uniformity.update'], + '/production/uniformity/': ['lti.production.uniformity.list'], + '/production/uniformity/add/': ['lti.production.uniformity.create'], + '/production/uniformity/detail/': ['lti.production.uniformity.detail'], + '/production/uniformity/detail/edit/': ['lti.production.uniformity.update'], // Purchase '/purchase/': ['lti.purchase.list'], diff --git a/src/services/api/uniformity.ts b/src/services/api/uniformity.ts index 2ee1ee15..7ed8098e 100644 --- a/src/services/api/uniformity.ts +++ b/src/services/api/uniformity.ts @@ -6,7 +6,7 @@ import { VerifyUniformityPayload, VerifyUniformityResponse, CreateUniformityPayload, -} from '@/types/api/uniformity/uniformity'; +} from '@/types/api/production/uniformity'; export class UniformityApiService extends BaseApiService< Uniformity, diff --git a/src/types/api/uniformity/uniformity.d.ts b/src/types/api/production/uniformity.d.ts similarity index 100% rename from src/types/api/uniformity/uniformity.d.ts rename to src/types/api/production/uniformity.d.ts diff --git a/src/types/stores.d.ts b/src/types/stores.d.ts index 96a3c48b..48873805 100644 --- a/src/types/stores.d.ts +++ b/src/types/stores.d.ts @@ -3,7 +3,7 @@ import type { UniformityFormData, UniformityDetail, VerifyUniformityResponse, -} from '@/types/api/uniformity/uniformity'; +} from '@/types/api/production/uniformity'; type MainUiSlice = { mainDrawerOpen: boolean;