diff --git a/src/app/expense/page.tsx b/src/app/expense/page.tsx index d6b00286..0bd5d406 100644 --- a/src/app/expense/page.tsx +++ b/src/app/expense/page.tsx @@ -2,7 +2,7 @@ import ExpensesTable from '@/components/pages/expense/ExpensesTable'; const Expense = () => { return ( -
+
); diff --git a/src/app/inventory/movement/page.tsx b/src/app/inventory/movement/page.tsx index a2c25612..10717059 100644 --- a/src/app/inventory/movement/page.tsx +++ b/src/app/inventory/movement/page.tsx @@ -2,7 +2,7 @@ import MovementTable from '@/components/pages/inventory/movement/MovementTable'; const Movement = () => { return ( -
+
); diff --git a/src/app/production/recording/page.tsx b/src/app/production/recording/page.tsx index f31ac19a..471ef648 100644 --- a/src/app/production/recording/page.tsx +++ b/src/app/production/recording/page.tsx @@ -2,7 +2,7 @@ import RecordingTable from '@/components/pages/production/recording/RecordingTab const Recording = () => { return ( -
+
); diff --git a/src/app/purchase/page.tsx b/src/app/purchase/page.tsx index dc25a99d..ea2bb95b 100644 --- a/src/app/purchase/page.tsx +++ b/src/app/purchase/page.tsx @@ -2,7 +2,7 @@ import PurchaseTable from '@/components/pages/purchase/PurchaseTable'; const Purchase = () => { return ( -
+
); diff --git a/src/components/pages/inventory/movement/form/MovementForm.schema.ts b/src/components/pages/inventory/movement/form/MovementForm.schema.ts index 1a29fa94..693c80a7 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.schema.ts +++ b/src/components/pages/inventory/movement/form/MovementForm.schema.ts @@ -37,7 +37,7 @@ type MovementFormSchemaType = { value: number; label: string; } | null; - supplier_id: number; + supplier_id?: number | null; products: { product?: { value: number; @@ -69,7 +69,7 @@ export type DeliverySchema = { value: number; label: string; } | null; - supplier_id: number; + supplier_id?: number | null; products: { product?: { value: number; @@ -151,9 +151,10 @@ const DeliveryObjectSchema: Yup.ObjectSchema = Yup.object({ label: Yup.string().required(), }).nullable(), supplier_id: Yup.number() - .required('Supplier wajib diisi!') + .optional() + .nullable() .min(1, 'Supplier wajib diisi!') - .typeError('Supplier wajib diisi!'), + .typeError('Supplier harus berupa angka!'), products: Yup.array() .of(DeliveryProductObjectSchema) .min(1, 'Minimal harus ada 1 produk!') diff --git a/src/components/pages/inventory/movement/form/MovementForm.tsx b/src/components/pages/inventory/movement/form/MovementForm.tsx index d4d175e2..ff3edbfc 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.tsx +++ b/src/components/pages/inventory/movement/form/MovementForm.tsx @@ -1494,7 +1494,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { {formik.values.products?.map((product, idx) => ( - + {type !== 'detail' && ( { * - - Supplier - - * - - + Supplier Plat Nomor { {formik.values.deliveries?.map((delivery, idx) => ( - + {type !== 'detail' && ( { diff --git a/src/components/pages/master-data/product-category/ProductCategoryTable.tsx b/src/components/pages/master-data/product-category/ProductCategoryTable.tsx index e25dfd56..11199c73 100644 --- a/src/components/pages/master-data/product-category/ProductCategoryTable.tsx +++ b/src/components/pages/master-data/product-category/ProductCategoryTable.tsx @@ -1,6 +1,6 @@ 'use client'; -import { ChangeEventHandler, useEffect, useState } from 'react'; +import { ChangeEventHandler, useEffect, useRef, useState } from 'react'; import useSWR from 'swr'; import { CellContext, ColumnDef, SortingState } from '@tanstack/react-table'; import toast from 'react-hot-toast'; @@ -22,6 +22,7 @@ import { ProductCategoryApi } from '@/services/api/master-data'; import { cn } from '@/lib/helper'; import { isResponseError, isResponseSuccess } from '@/lib/api-helper'; import { useTableFilter } from '@/services/hooks/useTableFilter'; +import { useUiStore } from '@/stores/ui/ui.store'; import { ROWS_OPTIONS } from '@/config/constant'; const RowOptionsMenu = ({ @@ -80,6 +81,9 @@ const RowOptionsMenu = ({ }; const ProductCategoryTable = () => { + const { searchValue, setSearchValue, resetSearchValue } = useUiStore(); + const previousPathRef = useRef(null); + const { state: tableFilterState, updateFilter, @@ -87,7 +91,7 @@ const ProductCategoryTable = () => { setPageSize, toQueryString: getTableFilterQueryString, } = useTableFilter({ - initial: { search: '', nameSort: '' }, + initial: { search: searchValue, nameSort: '' }, paramMap: { page: 'page', pageSize: 'limit', nameSort: 'sort_name' }, }); @@ -188,6 +192,7 @@ const ProductCategoryTable = () => { }; const searchChangeHandler: ChangeEventHandler = (e) => { + setSearchValue(e.target.value); updateFilter('search', e.target.value); }; @@ -196,6 +201,28 @@ const ProductCategoryTable = () => { setPageSize(newVal.value as number); }; + useEffect(() => { + // Store current path on mount + previousPathRef.current = window.location.pathname; + + return () => { + const currentPath = window.location.pathname; + + // if both paths are within /master-data/product-category module + const isCurrentPathProductCategory = currentPath.includes( + '/master-data/product-category' + ); + const isPreviousPathProductCategory = previousPathRef.current?.includes( + '/master-data/product-category' + ); + + // reset if we outside product category module entirely + if (isPreviousPathProductCategory && !isCurrentPathProductCategory) { + resetSearchValue(); + } + }; + }, [resetSearchValue]); + useEffect(() => { const isNameSorted = sorting.find((sortItem) => sortItem.id === 'name'); if (!isNameSorted) { diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx index 4603832c..83076391 100644 --- a/src/components/pages/production/recording/form/RecordingForm.tsx +++ b/src/components/pages/production/recording/form/RecordingForm.tsx @@ -1395,8 +1395,8 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { if (hasSameDayRecording) { toast.error( - `Recording untuk hari ${nextDayRecording.next_day} sudah ada. - Tidak bisa membuat recording duplikat, mohon perbarui recording yang sudah ada terlebih dahulu.` + `Recording untuk hari ke-${nextDayRecording.next_day} sudah ada datanya. + Tidak bisa membuat recording di hari yang sama dengan project flock yang sama, mohon perbarui recording yang sudah ada terlebih dahulu.` ); return; } diff --git a/src/components/pages/purchase/PurchaseTable.tsx b/src/components/pages/purchase/PurchaseTable.tsx index 81f45cc9..9af19b42 100644 --- a/src/components/pages/purchase/PurchaseTable.tsx +++ b/src/components/pages/purchase/PurchaseTable.tsx @@ -16,6 +16,7 @@ import RowDropdownOptions from '@/components/table/RowDropdownOptions'; import RowCollapseOptions from '@/components/table/RowCollapseOptions'; import RowOptionsMenuWrapper from '@/components/table/RowOptionsMenuWrapper'; import RequirePermission from '@/components/helper/RequirePermission'; +import Badge from '@/components/Badge'; import { cn, formatDate } from '@/lib/helper'; import { isResponseSuccess } from '@/lib/api-helper'; @@ -153,6 +154,57 @@ const PurchaseTable = () => { return `${diffDays} hari`; }, }, + { + header: 'Status Approval', + cell: (props) => { + const approval = props.row.original.latest_approval; + if (!approval) return '-'; + + const isRejected = approval.action === 'REJECTED'; + + let statusColor: + | 'warning' + | 'success' + | 'neutral' + | 'error' + | 'primary' + | 'info' = 'neutral'; + + switch (approval.step_number) { + case 1: + statusColor = 'neutral'; + break; + case 2: + statusColor = 'primary'; + break; + case 3: + statusColor = 'info'; + break; + case 4: + statusColor = 'warning'; + break; + case 5: + statusColor = 'success'; + break; + } + + if (isRejected) { + statusColor = 'error'; + } + + return ( + + {isRejected ? 'Ditolak' : approval.step_name} + + ); + }, + }, { header: 'Aksi', cell: (props) => { diff --git a/src/components/pages/purchase/order/PurchaseOrderDetail.tsx b/src/components/pages/purchase/order/PurchaseOrderDetail.tsx index 47dbc8f0..1f8dd3c9 100644 --- a/src/components/pages/purchase/order/PurchaseOrderDetail.tsx +++ b/src/components/pages/purchase/order/PurchaseOrderDetail.tsx @@ -605,7 +605,7 @@ const PurchaseOrderDetail = ({ return (
{/* Approval and Action Buttons */} -
+