2024-08-16 01:23:55 +07:00
|
|
|
import Page from "@/context/page-context";
|
|
|
|
import { useBuckets } from "./hooks";
|
2024-08-16 23:10:19 +07:00
|
|
|
import { Input } from "react-daisyui";
|
2024-08-16 01:23:55 +07:00
|
|
|
import BucketCard from "./components/bucket-card";
|
2024-08-16 23:10:19 +07:00
|
|
|
import CreateBucketDialog from "./components/create-bucket-dialog";
|
2024-08-17 00:51:57 +07:00
|
|
|
import { useMemo, useState } from "react";
|
2024-08-16 01:23:55 +07:00
|
|
|
|
|
|
|
const BucketsPage = () => {
|
|
|
|
const { data } = useBuckets();
|
2024-08-17 00:51:57 +07:00
|
|
|
const [search, setSearch] = useState("");
|
|
|
|
|
|
|
|
const items = useMemo(() => {
|
|
|
|
if (!search?.length) {
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
|
|
|
const q = search.toLowerCase();
|
|
|
|
return data?.filter(
|
|
|
|
(bucket) =>
|
|
|
|
bucket.id.includes(q) ||
|
|
|
|
bucket.globalAliases.find((alias) => alias.includes(q))
|
|
|
|
);
|
|
|
|
}, [data, search]);
|
2024-08-16 01:23:55 +07:00
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="container">
|
|
|
|
<Page title="Buckets" />
|
|
|
|
|
|
|
|
<div>
|
2024-08-17 00:21:23 +07:00
|
|
|
<div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-2">
|
2024-08-17 00:51:57 +07:00
|
|
|
<Input
|
|
|
|
placeholder="Search..."
|
|
|
|
value={search}
|
|
|
|
onChange={(e) => setSearch(e.target.value)}
|
|
|
|
/>
|
2024-08-16 01:23:55 +07:00
|
|
|
<div className="flex-1" />
|
2024-08-16 23:10:19 +07:00
|
|
|
<CreateBucketDialog />
|
2024-08-16 01:23:55 +07:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4 md:gap-8 items-stretch mt-4 md:mt-8">
|
2024-08-17 00:51:57 +07:00
|
|
|
{items?.map((bucket) => (
|
2024-08-16 01:23:55 +07:00
|
|
|
<BucketCard key={bucket.id} data={bucket} />
|
|
|
|
))}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default BucketsPage;
|