summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/app/(mobile-screen)/page.tsx8
-rw-r--r--src/common/styles/fonts.ts2
-rw-r--r--src/modules/profile-card/components/Dropdown.tsx5
-rw-r--r--src/modules/profile-card/index.tsx2
-rw-r--r--src/modules/profile-card/profile-card.module.css4
-rw-r--r--src/modules/result/components/Table.tsx32
6 files changed, 36 insertions, 17 deletions
diff --git a/src/app/(mobile-screen)/page.tsx b/src/app/(mobile-screen)/page.tsx
index 08b9dc9..4dca647 100644
--- a/src/app/(mobile-screen)/page.tsx
+++ b/src/app/(mobile-screen)/page.tsx
@@ -6,10 +6,12 @@ import { Spacer } from "@nextui-org/react";
export default function HomePage() {
return (
<Authenticated>
- <main className="px-4 pt-10">
- <StockOpname />
- <Spacer y={6} />
+ <main>
<ProfileCard />
+ <Spacer y={5} />
+ <div className="px-4">
+ <StockOpname />
+ </div>
</main>
</Authenticated>
)
diff --git a/src/common/styles/fonts.ts b/src/common/styles/fonts.ts
index bf78bf7..a88a7d3 100644
--- a/src/common/styles/fonts.ts
+++ b/src/common/styles/fonts.ts
@@ -2,7 +2,7 @@ import { Inter } from "next/font/google";
export const inter = Inter({
subsets: ["latin"],
- display: "fallback",
+ preload: true,
weight: ["400", "500", "600", "700"],
variable: "--font-inter",
});
diff --git a/src/modules/profile-card/components/Dropdown.tsx b/src/modules/profile-card/components/Dropdown.tsx
index f6f58c9..6e86c59 100644
--- a/src/modules/profile-card/components/Dropdown.tsx
+++ b/src/modules/profile-card/components/Dropdown.tsx
@@ -2,14 +2,11 @@
import { DropdownItem, DropdownMenu, DropdownTrigger, Dropdown as UIDropdown } from "@nextui-org/react"
import { MoreVerticalIcon } from "lucide-react"
import { deleteCookie } from "cookies-next"
-import { useRouter } from "next/navigation";
const Dropdown = () => {
- const router = useRouter()
-
const logout = () => {
deleteCookie('credential')
- router.push('/login')
+ window.location.href = '/login'
}
return (
diff --git a/src/modules/profile-card/index.tsx b/src/modules/profile-card/index.tsx
index 881561d..f353f16 100644
--- a/src/modules/profile-card/index.tsx
+++ b/src/modules/profile-card/index.tsx
@@ -8,7 +8,7 @@ const ProfileCard = () => {
const credential = getServerCredential()
return credential && (
- <Card shadow='sm'>
+ <Card shadow='none' radius='none' className={styles.card}>
<CardBody className={styles.cardBody}>
<Avatar icon={<AvatarIcon />} size='sm' isBordered color='primary' classNames={{ icon: 'text-white' }} />
<div>
diff --git a/src/modules/profile-card/profile-card.module.css b/src/modules/profile-card/profile-card.module.css
index b0b05ef..b7d00fe 100644
--- a/src/modules/profile-card/profile-card.module.css
+++ b/src/modules/profile-card/profile-card.module.css
@@ -1,3 +1,7 @@
+.card {
+ @apply border-b border-neutral-300;
+}
+
.cardBody {
@apply flex flex-row items-center gap-x-4;
}
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>
</>