Skip to content

Commit 289ae23

Browse files
committed
feat: inventory page implemented
1 parent a967798 commit 289ae23

File tree

9 files changed

+538
-2
lines changed

9 files changed

+538
-2
lines changed

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"dependencies": {
2121
"@emailjs/browser": "^3.11.0",
2222
"@headlessui/react": "^2.1.2",
23+
"@hookform/resolvers": "^3.9.0",
2324
"@hookstate/core": "^4.0.1",
2425
"@tanstack/react-query": "^5.22.2",
2526
"@tanstack/react-query-devtools": "^5.24.0",
@@ -36,7 +37,7 @@
3637
"react-dom": "^18.2.0",
3738
"react-fast-marquee": "^1.6.2",
3839
"react-helmet-async": "^2.0.5",
39-
"react-hook-form": "^7.48.2",
40+
"react-hook-form": "^7.52.1",
4041
"react-hot-toast": "^2.4.1",
4142
"react-icons": "^5.2.1",
4243
"react-lazy-load-image-component": "^1.6.0",
@@ -48,7 +49,8 @@
4849
"tailwind-merge": "^2.3.0",
4950
"tailwind-scrollbar-hide": "^1.1.7",
5051
"tailwindcss-animate": "^1.0.7",
51-
"yet-another-react-lightbox": "^3.15.6"
52+
"yet-another-react-lightbox": "^3.15.6",
53+
"yup": "^1.4.0"
5254
},
5355
"devDependencies": {
5456
"@playwright/test": "^1.44.1",
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function InventoryCardComponent({
2+
title = "All Orders",
3+
number = 500,
4+
categories
5+
}) {
6+
7+
return (
8+
<div className="flex mt-5 ">
9+
<div className="flex w-full p-[12px] ">
10+
<div className="flex w-full border-r-[1px] border-[#CBCDCC] pr-[12px]">
11+
<div className="grid w-full justify-start font-[600]">
12+
<span className=" text-[16px] text-[#475467]">{title}</span>
13+
<span className="text-[36px] -mt-1 text-[#4C4D4D]">{number}</span>
14+
{categories && (
15+
<div className=" mt-5 pr-4 pl-4 pt-2 pb-2 bg-[#F2F4F7] rounded-full">
16+
<p className=" text-[#344054]">{categories} Categories</p>
17+
</div>
18+
)}
19+
20+
21+
</div>
22+
23+
</div>
24+
</div>
25+
</div>
26+
);
27+
}
28+
29+
export default InventoryCardComponent;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const columns = [
2+
{
3+
accessorKey: "id",
4+
header: "Item ID",
5+
},
6+
{
7+
accessorKey: "name",
8+
header: "Name",
9+
},
10+
{
11+
accessorKey: "items-sold",
12+
header: "Items Sold",
13+
},
14+
{
15+
accessorKey: "items-remaining",
16+
header: "Items Remaining",
17+
},
18+
19+
{
20+
id: "actions",
21+
enableHiding: false,
22+
cell: () => (
23+
<div>
24+
<button type="button" className="text-primary text-sm font-semibold">
25+
View
26+
</button>
27+
</div>
28+
),
29+
},
30+
];
31+
32+
export default columns;
33+
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import {
2+
flexRender,
3+
getCoreRowModel,
4+
useReactTable,
5+
} from "@tanstack/react-table";
6+
7+
import PropTypes from "prop-types";
8+
import {
9+
Table,
10+
TableBody,
11+
TableCell,
12+
TableHead,
13+
TableHeader,
14+
TableRow,
15+
} from "../../../ui/table";
16+
17+
function InventoryPreviewTable({ columns, data }) {
18+
const table = useReactTable({
19+
data,
20+
columns,
21+
getCoreRowModel: getCoreRowModel(),
22+
});
23+
24+
return (
25+
<Table className="text-gray-500">
26+
<TableHeader className="bg-grey-light uppercase">
27+
{table.getHeaderGroups().map((headerGroup) => (
28+
<TableRow key={headerGroup.id}>
29+
{headerGroup.headers.map((header) => (
30+
<TableHead key={header.id}>
31+
{header.isPlaceholder
32+
? null
33+
: flexRender(
34+
header.column.columnDef.header,
35+
header.getContext()
36+
)}
37+
</TableHead>
38+
))}
39+
</TableRow>
40+
))}
41+
</TableHeader>
42+
<TableBody>
43+
{table.getRowModel().rows?.length ? (
44+
table.getRowModel().rows.map((row) => (
45+
<TableRow
46+
key={row.id}
47+
data-state={row.getIsSelected() && "selected"}
48+
>
49+
{row.getVisibleCells().map((cell) => (
50+
<TableCell key={cell.id}>
51+
{flexRender(cell.column.columnDef.cell, cell.getContext())}
52+
</TableCell>
53+
))}
54+
</TableRow>
55+
))
56+
) : (
57+
<TableRow>
58+
<TableCell colSpan={columns.length} className="h-24 text-center">
59+
No results.
60+
</TableCell>
61+
</TableRow>
62+
)}
63+
</TableBody>
64+
</Table>
65+
);
66+
}
67+
68+
export default InventoryPreviewTable;
69+
70+
InventoryPreviewTable.propTypes = {
71+
columns: PropTypes.arrayOf(
72+
PropTypes.shape({
73+
accessorKey: PropTypes.string,
74+
cell: PropTypes.func,
75+
header: PropTypes.func,
76+
id: PropTypes.string,
77+
})
78+
).isRequired,
79+
// eslint-disable-next-line react/forbid-prop-types
80+
data: PropTypes.arrayOf(PropTypes.object).isRequired,
81+
};
82+

0 commit comments

Comments
 (0)