diff --git a/src/components/pages/marketing/MarketingTable.tsx b/src/components/pages/marketing/MarketingTable.tsx
index 0247fc75..36d54381 100644
--- a/src/components/pages/marketing/MarketingTable.tsx
+++ b/src/components/pages/marketing/MarketingTable.tsx
@@ -2,7 +2,10 @@
import Button from '@/components/Button';
import CheckboxInput from '@/components/input/CheckboxInput';
-import SelectInput, { OptionType } from '@/components/input/SelectInput';
+import SelectInput, {
+ OptionType,
+ useSelect,
+} from '@/components/input/SelectInput';
import Modal, { useModal } from '@/components/Modal';
import ConfirmationModal from '@/components/modal/ConfirmationModal';
import ConfirmationModalWithNotes from '@/components/modal/ConfirmationModalWithNotes';
@@ -28,6 +31,8 @@ import toast from 'react-hot-toast';
import useSWR from 'swr';
import RequirePermission from '@/components/helper/RequirePermission';
import { useAuth } from '@/services/hooks/useAuth';
+import { CustomerApi, ProductApi } from '@/services/api/master-data';
+import { MARKETING_APPROVAL_LINE } from '@/config/approval-line';
const RowsOptionsMenu = ({
type = 'dropdown',
@@ -52,7 +57,7 @@ const RowsOptionsMenu = ({
)}
>
- {/*
+
Detail
- */}
-
+
{props.row.original.latest_approval.step_number != 1 && (
<>
- {/*
Deliver
- */}
-
+
>
)}
{props.row.original.latest_approval.step_number != 3 && (
<>
- {/*
+
Edit
- */}
-
+
>
)}
- {/*
+
Delete
- */}
-
+
);
@@ -175,8 +133,6 @@ const RowsOptionsMenu = ({
const MarketingTable = () => {
const [search, setSearch] = useState('');
- const [page, setPage] = useState(1);
- const [pageSize, setPageSize] = useState(10);
const [approveAction, setApproveAction] = useState<'APPROVED' | 'REJECTED'>(
'APPROVED'
@@ -186,18 +142,64 @@ const MarketingTable = () => {
const { permissionCheck } = useAuth();
const router = useRouter();
-
- const {
- data: marketing,
- isLoading: isLoadingMarketing,
- mutate: refreshMarketing,
- } = useSWR(MarketingApi.basePath, MarketingApi.getAllFetcher);
-
const deleteModal = useModal();
const confirmationModal = useModal();
const productsModal = useModal();
const deliveryModal = useModal();
+ const {
+ state: tableFilterState,
+ updateFilter,
+ setPage,
+ setPageSize,
+ toQueryString: getTableFilterToQueryString,
+ } = useTableFilter({
+ initial: {
+ search: '',
+ product_ids: '',
+ status: '',
+ customer_id: '',
+ page: 1,
+ limit: 10,
+ },
+ paramMap: {
+ page: 'page',
+ pageSize: 'limit',
+ product_ids: 'product_ids',
+ status: 'status',
+ customer_id: 'customer_id',
+ },
+ });
+ // ===== FETCH DATA =====
+ const {
+ data: marketing,
+ isLoading: isLoadingMarketing,
+ mutate: refreshMarketing,
+ } = useSWR(
+ `${MarketingApi.basePath}${getTableFilterToQueryString()}`,
+ MarketingApi.getAllFetcher
+ );
+
+ // ===== OPTIONS =====
+ const {
+ options: productsOptions,
+ isLoadingOptions: isLoadingProductsOptions,
+ } = useSelect(ProductApi.basePath, 'id', 'name', '', {
+ limit: 'limit',
+ });
+
+ const {
+ options: customersOptions,
+ isLoadingOptions: isLoadingCustomersOptions,
+ } = useSelect(CustomerApi.basePath, 'id', 'name', '', {
+ limit: 'limit',
+ });
+ const statusOptions = MARKETING_APPROVAL_LINE.map((item) => ({
+ value: item.step_number,
+ label: item.step_name,
+ }));
+
+ // ===== HANDLER =====
const searchChangeHandler = useCallback(
(e: React.ChangeEvent) => {
setSearch(e.target.value);
@@ -209,7 +211,8 @@ const MarketingTable = () => {
(val: OptionType | OptionType[] | null) => {
const newVal = val as OptionType;
setPageSize(newVal.value as number);
- setPage(1);
+ updateFilter('page', 1);
+ updateFilter('limit', newVal.value as number);
},
[]
);
@@ -314,20 +317,6 @@ const MarketingTable = () => {
);
};
- const {
- state: tableFilterState,
- updateFilter,
- toQueryString: getTableFilterToQueryString,
- } = useTableFilter({
- initial: {
- search: '',
- },
- paramMap: {
- page: 'page',
- pageSize: 'limit',
- },
- });
-
const getRowCanSelect = (row: Row): boolean => {
const approval = row.original.latest_approval;
return approval?.step_number === 1 && approval?.action !== 'REJECTED';
@@ -353,7 +342,7 @@ const MarketingTable = () => {
}}
/>
- {/*
+
- */}
-
+
- {/*
+
- */}
-
+
{
label='Product'
isClearable
placeholder='Pilih product'
- options={[]}
+ options={productsOptions}
+ isLoading={isLoadingProductsOptions}
+ value={
+ tableFilterState.product_ids
+ ?.split(',')
+ .map((id) =>
+ productsOptions.find(
+ (option) => option.value === Number(id)
+ )
+ )
+ .filter(
+ (option): option is { value: number; label: string } =>
+ option !== undefined
+ ) ?? null
+ }
+ onChange={(value: OptionType | OptionType[] | null) =>
+ updateFilter(
+ 'product_ids',
+ (value as OptionType[])
+ ?.map((item: OptionType) => item.value.toString())
+ .join(',') || ''
+ )
+ }
isMulti
/>
{/* select status */}
@@ -414,14 +407,43 @@ const MarketingTable = () => {
label='Status'
isClearable
placeholder='Pilih status'
- options={[]}
+ options={statusOptions}
+ value={
+ tableFilterState.status
+ ? statusOptions.find(
+ (option) =>
+ option.value === Number(tableFilterState.status)
+ )
+ : null
+ }
+ onChange={(value: OptionType | OptionType[] | null) =>
+ updateFilter(
+ 'status',
+ (value as OptionType)?.value.toString() || ''
+ )
+ }
/>
{/* select customer */}
+ option.value === Number(tableFilterState.customer_id)
+ )
+ : null
+ }
+ onChange={(value: OptionType | OptionType[] | null) =>
+ updateFilter(
+ 'customer_id',
+ (value as OptionType)?.value.toString() || ''
+ )
+ }
/>
@@ -587,8 +609,8 @@ const MarketingTable = () => {
},
},
]}
- pageSize={pageSize}
- page={page}
+ pageSize={tableFilterState.pageSize}
+ page={tableFilterState.page}
onPageChange={setPage}
className={{
tableWrapperClassName: 'overflow-x-auto min-h-full!',
diff --git a/src/config/route-permission.ts b/src/config/route-permission.ts
index 7c7ab0ac..101dbb6d 100644
--- a/src/config/route-permission.ts
+++ b/src/config/route-permission.ts
@@ -3,7 +3,6 @@ export const ROUTE_PERMISSIONS: Record = {
// Dashboard
'/dashboard/': ['lti.dashboard.list'],
- '/dashboard': ['lti.dashboard.list'],
// Production
// Production - Project Flock
@@ -58,27 +57,14 @@ export const ROUTE_PERMISSIONS: Record = {
'/purchase/detail/edit/': ['lti.purchase.update'],
// Marketing
- '/marketing/': ['lti.dashboard.list', 'lti.marketing.delivery_order.list'],
- '/marketing/add/delivery-orders/': [
- 'lti.dashboard.list',
- 'lti.marketing.delivery_order.create',
- ],
- '/marketing/add/sales-orders/': [
- 'lti.dashboard.list',
- 'lti.marketing.sales_order.create',
- ],
- '/marketing/detail/': [
- 'lti.dashboard.list',
- 'lti.marketing.delivery_order.detail',
- ],
+ '/marketing/': ['lti.marketing.delivery_order.list'],
+ '/marketing/add/delivery-orders/': ['lti.marketing.delivery_order.create'],
+ '/marketing/add/sales-orders/': ['lti.marketing.sales_order.create'],
+ '/marketing/detail/': ['lti.marketing.delivery_order.detail'],
'/marketing/detail/delivery-orders/edit/': [
- 'lti.dashboard.list',
'lti.marketing.delivery_order.update',
],
- '/marketing/detail/sales-orders/edit/': [
- 'lti.dashboard.list',
- 'lti.marketing.sales_order.update',
- ],
+ '/marketing/detail/sales-orders/edit/': ['lti.marketing.sales_order.update'],
// Expense
'/expense/': ['lti.expense.list'],
@@ -89,19 +75,12 @@ export const ROUTE_PERMISSIONS: Record = {
'/expense/realization/edit/': ['lti.expense.update.realization'],
// Finance
- '/finance/': ['lti.dashboard.list', 'lti.finance.transaction.list'],
- '/finance/detail/': ['lti.dashboard.list', 'lti.finance.transaction.detail'],
- '/finance/add/': ['lti.dashboard.list', 'lti.finance.payments.create'],
- '/finance/detail/edit/': [
- 'lti.dashboard.list',
- 'lti.finance.payments.update',
- ],
- '/finance/add/initial-balance/': [
- 'lti.dashboard.list',
- 'lti.finance.initial_balances.create',
- ],
+ '/finance/': ['lti.finance.transaction.list'],
+ '/finance/detail/': ['lti.finance.transaction.detail'],
+ '/finance/add/': ['lti.finance.payments.create'],
+ '/finance/detail/edit/': ['lti.finance.payments.update'],
+ '/finance/add/initial-balance/': ['lti.finance.initial_balances.create'],
'/finance/detail/edit/initial-balance/': [
- 'lti.dashboard.list',
'lti.finance.initial_balances.update',
],
'/finance/add/injection/': ['lti.finance.injections.create'],
@@ -203,20 +182,14 @@ export const ROUTE_PERMISSIONS: Record = {
'/master-data/flock/detail/': ['lti.master.flocks.detail'],
'/master-data/flock/detail/edit/': ['lti.master.flocks.update'],
- '/master-data/production-standard/': [
- 'lti.dashboard.list',
- 'lti.master.production_standards.list',
- ],
+ '/master-data/production-standard/': ['lti.master.production_standards.list'],
'/master-data/production-standard/add/': [
- 'lti.dashboard.list',
'lti.master.production_standards.create',
],
'/master-data/production-standard/detail/': [
- 'lti.dashboard.list',
'lti.master.production_standards.detail',
],
'/master-data/production-standard/detail/edit/': [
- 'lti.dashboard.list',
'lti.master.production_standards.update',
],
};