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.tsx32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/modules/result/components/Table.tsx b/src/modules/result/components/Table.tsx
index a184ad7..a6a9f30 100644
--- a/src/modules/result/components/Table.tsx
+++ b/src/modules/result/components/Table.tsx
@@ -2,7 +2,7 @@
import { useResultStore } from "@/common/stores/useResultStore";
import { StockOpnameRes } from "@/common/types/stockOpname";
import { Button, Pagination, Skeleton, Spacer, Spinner } from "@nextui-org/react"
-import { useQuery } from "@tanstack/react-query";
+import { keepPreviousData, useQuery } from "@tanstack/react-query";
import styles from "./table.module.css"
import clsxm from "@/common/libs/clsxm";
import DetailRow from "./DetailRow";
@@ -39,6 +39,7 @@ const Table = () => {
return await fetch(`/api/stock-opname?${searchParams}`)
.then(res => res.json())
},
+ placeholderData: keepPreviousData
})
const { filter } = useResultStore()
@@ -62,6 +63,21 @@ 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 isLoading = stockOpnames.isLoading || stockOpnames.isRefetching
+
return (
<>
<div className="flex">
@@ -83,7 +99,7 @@ const Table = () => {
<th className={styles.th}>GUDANG SELISIH</th>
</thead>
<tbody className={styles.tbody}>
- {stockOpnames.data?.result.map((stockOpname: StockOpnameRes['result']) => (
+ {!isLoading && stockOpnames.data?.result.map((stockOpname: StockOpnameRes['result']) => (
<>
<tr key={stockOpname.id} className={clsxm("border-t border-neutral-200", {
"text-danger-600": stockOpname.isDifferent,
@@ -127,18 +143,18 @@ const Table = () => {
</>
))}
- {stockOpnames.data?.result.length === 0 && (
+ {!isLoading && stockOpnames.data?.result.length === 0 && (
<tr>
<td colSpan={8} className="text-center text-neutral-600 py-4">Belum ada data untuk ditampilkan</td>
</tr>
)}
- {stockOpnames.isLoading && (
+ {isLoading && (
<tr>
<td colSpan={8}>
- <div className="flex flex-col gap-y-2">
- {Array.from({ length: 6 }, (_, i) => (
- <Skeleton className="h-8" key={i} />
+ <div className="flex flex-col gap-y-2.5">
+ {Array.from({ length: 10 }, (_, i) => (
+ <Skeleton className="h-16" key={i} />
))}
</div>
</td>
@@ -152,7 +168,7 @@ const Table = () => {
isCompact
page={stockOpnames.data?.page || 1}
total={stockOpnames.data?.totalPage || 1}
- onChange={(page) => updateFilter('page', page)}
+ onChange={paginationOnChange}
/>
</div>
</>