NamH d55a83888b
refactor: replacing mobx with jotai (#160)
* refactor: replacing mobx with jotai

Signed-off-by: James <james@jan.ai>
Co-authored-by: James <james@jan.ai>
Co-authored-by: Louis <louis@jan.ai>
2023-09-13 21:33:53 -07:00

53 lines
1.6 KiB
TypeScript

"use client";
import React, { useEffect, useState } from "react";
import ShortcutItem from "../ShortcutItem";
import { GetProductsDocument, GetProductsQuery } from "@/graphql";
import ExpandableHeader from "../ExpandableHeader";
import { useQuery } from "@apollo/client";
import { useAtomValue } from "jotai";
import { searchAtom } from "@/_helpers/JotaiWrapper";
import { Product, toProduct } from "@/_models/Product";
const ShortcutList: React.FC = () => {
const searchText = useAtomValue(searchAtom);
const { data } = useQuery<GetProductsQuery>(GetProductsDocument);
const [expand, setExpand] = useState<boolean>(true);
const [featuredProducts, setFeaturedProducts] = useState<Product[]>([]);
useEffect(() => {
if (data?.products) {
const products: Product[] = data.products.map((p) => toProduct(p));
setFeaturedProducts(
[...(products || [])]
.sort(() => 0.5 - Math.random())
.slice(0, 3)
.filter(
(e) =>
searchText === "" ||
e.name.toLowerCase().includes(searchText.toLowerCase())
) || []
);
}
}, [data?.products, searchText]);
return (
<div className="flex flex-col mt-6 gap-2">
<ExpandableHeader
title="START A NEW CHAT"
expanded={expand}
onClick={() => setExpand(!expand)}
/>
{expand ? (
<div className="flex flex-row mx-1 items-center rounded-lg hover:bg-hover-light">
{featuredProducts.map((product) => (
<ShortcutItem key={product.slug} product={product} />
))}
</div>
) : null}
</div>
);
};
export default ShortcutList;