feat(FE-177): Integrate API sales order and fixing sales order initial state

This commit is contained in:
randy-ar
2025-11-17 15:59:31 +07:00
parent d3c4706d87
commit a9bdb6c36e
9 changed files with 277 additions and 308 deletions
@@ -3,39 +3,38 @@
import Button from '@/components/Button';
import Table from '@/components/Table';
import { SalesOrderProductFormValues } from '@/components/pages/marketing/form/repeater/sales-order/SalesOrderProduct.schema';
import { cn, formatCurrency, formatNumber } from '@/lib/helper';
import {
cn,
formatCurrency,
formatNumber,
formatVechicleNumber,
} from '@/lib/helper';
import { Icon } from '@iconify/react';
import { useMemo, useState } from 'react';
import * as TanStack from '@tanstack/react-table';
import CheckboxInput from '@/components/input/CheckboxInput';
// Hapus import Modal, useModal, dan MarketingProductForm
// Tentukan Tipe Props baru yang diterima dari SalesForm
type SalesOrderProductTableProps = {
data: SalesOrderProductFormValues[];
onDelete: (product_warehouse_id: number, kandang_id: number) => void;
onBulkDelete: (selectedIds: number[]) => void;
onAddProductClick: () => void; // Prop baru untuk memanggil modal di parent
rowSelection: Record<string, boolean>;
setRowSelection: React.Dispatch<
React.SetStateAction<Record<string, boolean>>
>;
selectedRowIds: number[];
onDelete: (id: number) => void;
onBulkDelete: () => void;
onAddProductClick: () => void;
};
const SalesOrderProductTable = ({
data,
rowSelection,
setRowSelection,
selectedRowIds,
onDelete,
onBulkDelete,
onAddProductClick,
}: SalesOrderProductTableProps) => {
const [rowSelection, setRowSelection] = useState<Record<string, boolean>>({});
const selectedRowIds = Object.keys(rowSelection).map((item) =>
parseInt(item)
);
const handleBulkDeleteClick = () => {
onBulkDelete(selectedRowIds);
setRowSelection({});
};
const columns = useMemo(
() => [
{
@@ -67,6 +66,11 @@ const SalesOrderProductTable = ({
</div>
),
},
{
accessorFn: (row: SalesOrderProductFormValues) =>
formatVechicleNumber(row.vehicle_number as string),
header: 'No. Polisi',
},
{
accessorFn: (row: SalesOrderProductFormValues) => row.kandang?.label,
header: 'Kandang',
@@ -110,22 +114,10 @@ const SalesOrderProductTable = ({
<Button
color='error'
className='p-1'
disabled={
!props.row.original.product_warehouse_id ||
!props.row.original.kandang_id
}
onClick={() => {
// PANGGIL CALLBACK PARENT (onDelete)
if (
props.row.original.product_warehouse_id &&
props.row.original.kandang_id
) {
onDelete(
props.row.original.product_warehouse_id,
props.row.original.kandang_id
);
}
onDelete(props.row.original.id as number);
}}
type='button'
>
<Icon icon='mdi:trash' width={16} height={16} />
</Button>
@@ -180,7 +172,7 @@ const SalesOrderProductTable = ({
variant='outline'
color='error'
className='justify-start w-fit py-1 text-sm'
onClick={handleBulkDeleteClick}
onClick={onBulkDelete}
>
<Icon icon='mdi:trash' width={16} height={16} />
Hapus
@@ -191,8 +183,6 @@ const SalesOrderProductTable = ({
</Button>
)}
</div>
{/* Modal dan Form dihapus dari sini */}
</>
);
};