summaryrefslogtreecommitdiff
path: root/src/modules/result/components/Table.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/result/components/Table.tsx')
-rw-r--r--src/modules/result/components/Table.tsx52
1 files changed, 35 insertions, 17 deletions
diff --git a/src/modules/result/components/Table.tsx b/src/modules/result/components/Table.tsx
index a6a9f30..7478e1b 100644
--- a/src/modules/result/components/Table.tsx
+++ b/src/modules/result/components/Table.tsx
@@ -1,7 +1,7 @@
"use client";
import { useResultStore } from "@/common/stores/useResultStore";
import { StockOpnameRes } from "@/common/types/stockOpname";
-import { Button, Pagination, Skeleton, Spacer, Spinner } from "@nextui-org/react"
+import { Button, Dropdown, DropdownItem, DropdownMenu, DropdownTrigger, Pagination, Skeleton, Spacer, Spinner } from "@nextui-org/react"
import { keepPreviousData, useQuery } from "@tanstack/react-query";
import styles from "./table.module.css"
import clsxm from "@/common/libs/clsxm";
@@ -11,6 +11,9 @@ import getClientCredential from "@/common/libs/getClientCredential";
import { SHOWING_SELECTIONS } from "@/common/constants/result";
import { useEffect, useState } from "react";
import moment from "moment";
+import { MoreVerticalIcon } from "lucide-react";
+import toast from "@/common/libs/toast";
+import { Product } from "prisma/generated/client";
const Table = () => {
const credential = getClientCredential()
@@ -37,7 +40,10 @@ const Table = () => {
searchParams.set('page', page.toString());
return await fetch(`/api/stock-opname?${searchParams}`)
- .then(res => res.json())
+ .then(res => {
+ window.scrollTo({ top: 0, 'behavior': 'smooth' })
+ return res.json()
+ })
},
placeholderData: keepPreviousData
})
@@ -63,21 +69,17 @@ const Table = () => {
setExportLoad(false)
}
- let debounceTimeout: NodeJS.Timeout | null = null;
-
- const paginationOnChange = (page: number) => {
- updateFilter('page', page)
-
- if (debounceTimeout) clearTimeout(debounceTimeout)
-
- debounceTimeout = setTimeout(() => {
- window.scrollTo({ top: 0, 'behavior': 'smooth' });
- debounceTimeout = null
- }, 1000);
+ const toggleDifferent = async (id: number) => {
+ const response = await fetch(`/api/product/${id}/toggle-different`, { method: 'POST' })
+ const product: Product = await response.json()
+ toast(`Berhasil mengubah status barang ${product.itemCode} ${product.name} menjadi ${product.isDifferent ? 'selisih' : 'aman'}`, { duration: 10000 })
+ stockOpnames.refetch()
}
const isLoading = stockOpnames.isLoading || stockOpnames.isRefetching
+ const COL_LENGTH = 9
+
return (
<>
<div className="flex">
@@ -97,6 +99,7 @@ const Table = () => {
<th className={styles.th}>TIM VERIFIKASI</th>
<th className={styles.th}>ON-HAND QTY</th>
<th className={styles.th}>GUDANG SELISIH</th>
+ <th className={styles.th}></th>
</thead>
<tbody className={styles.tbody}>
{!isLoading && stockOpnames.data?.result.map((stockOpname: StockOpnameRes['result']) => (
@@ -137,6 +140,22 @@ const Table = () => {
<td className={styles.td}>
{credential?.team == 'VERIFICATION' ? stockOpname.differenceQty : '-'}
</td>
+ <td>
+ {credential?.team == 'VERIFICATION' && (
+ <Dropdown>
+ <DropdownTrigger>
+ <Button variant="light" className="p-1 min-w-fit">
+ <MoreVerticalIcon size={16} />
+ </Button>
+ </DropdownTrigger>
+ <DropdownMenu>
+ <DropdownItem key="toggleDifferent" onPress={() => toggleDifferent(stockOpname.id)}>
+ Tandai {stockOpname.isDifferent ? 'aman' : 'selisih'}
+ </DropdownItem>
+ </DropdownMenu>
+ </Dropdown>
+ )}
+ </td>
</tr>
<DetailRow productId={stockOpname.id} />
@@ -145,13 +164,13 @@ const Table = () => {
{!isLoading && stockOpnames.data?.result.length === 0 && (
<tr>
- <td colSpan={8} className="text-center text-neutral-600 py-4">Belum ada data untuk ditampilkan</td>
+ <td colSpan={COL_LENGTH} className="text-center text-neutral-600 py-4">Belum ada data untuk ditampilkan</td>
</tr>
)}
{isLoading && (
<tr>
- <td colSpan={8}>
+ <td colSpan={COL_LENGTH}>
<div className="flex flex-col gap-y-2.5">
{Array.from({ length: 10 }, (_, i) => (
<Skeleton className="h-16" key={i} />
@@ -165,10 +184,9 @@ const Table = () => {
<Spacer y={4} />
<Pagination
- isCompact
page={stockOpnames.data?.page || 1}
total={stockOpnames.data?.totalPage || 1}
- onChange={paginationOnChange}
+ onChange={(page) => updateFilter('page', page)}
/>
</div>
</>