enzostvs's picture
enzostvs HF Staff
Upload 172 files
9cd6ddb verified
import { useState } from "react";
import { useQuery } from "react-query";
import { useMount, useUpdateEffect } from "react-use";
import { Icons } from "components/svg/icons";
import { IconItem } from "types/editor";
export const useSearch = (searchValue: string, tags: string[]) => {
const { data, refetch } = useQuery("icons", () => {
const res = new Set();
Icons.map((icon: IconItem) => {
if (tags?.length === 0 && !searchValue) return res.add(icon);
if (tags?.length === 0 && searchValue) {
if (
searchValue !== "" &&
icon.tags.join("").includes(searchValue.toLowerCase())
) {
res.add(icon);
}
}
if (tags?.length > 0 && !searchValue) {
if (icon?.category && tags.includes(icon.category as string)) {
res.add(icon);
}
}
if (tags?.length > 0 && searchValue) {
if (
icon?.category &&
tags.includes(icon.category as string) &&
icon.tags.join("").includes(searchValue.toLowerCase())
) {
res.add(icon);
}
}
});
return Array.from(res).flat();
});
useUpdateEffect(() => {
refetch();
}, [searchValue, tags]);
return data;
};
export const useSingleSearch = (searchValue: string) => {
const { data, refetch } = useQuery("icons", () => {
const res = new Set();
Icons.map((icon: IconItem) => {
if (
searchValue !== "" &&
icon.tags.join("").includes(searchValue.toLowerCase())
) {
res.add(icon);
} else if (!searchValue) {
res.add(icon);
}
});
return Array.from(res).flat();
});
useUpdateEffect(() => {
refetch();
}, [searchValue]);
return data;
};
export const useResults = (perPage = 84) => {
const { data } = useQuery("icons", (datas: any) => datas);
const [page, setPage] = useState(1);
const [resultsPerPage] = useState(perPage);
const indexOfLastResult = page * resultsPerPage;
const indexOfFirstResult = indexOfLastResult - resultsPerPage;
const currentResults = Array.isArray(data)
? data?.slice(indexOfFirstResult, indexOfLastResult)
: [];
const maxPage = Math.ceil(data?.length / resultsPerPage);
const totalItems = data?.length;
useUpdateEffect(() => {
setPage(1);
}, [data]);
return {
results: currentResults,
page,
setPage,
maxPage,
totalItems,
};
};