import { Stack, Text } from '@mantine/core'; import { useCommonHooks, useQueryAPI } from 'hooks'; import { useEffect, useState } from 'react'; import { textClasses } from 'styles'; import type { Bookmark, BookmarkGroup } from 'types'; import BookmarkGroups from './BookmarkGroups'; function Bookmarks({ contentType }: { contentType: string[] }) { const { data: bookmarkData, isFetched: bookmarksIsFetched } = useQueryAPI({ endpoint: 'api/bookmarks', }); const { data: groupData, isFetched: groupsIsFetched } = useQueryAPI({ endpoint: 'api/bookmarkCategories', }); const { bookmarkSort, bookmarkDensity, bookmarkScale, theme, textShadowStyle } = useCommonHooks(); const [bookmarks, setBookmarks] = useState([]); const [groups, setGroups] = useState([]); useEffect(() => { if (bookmarkData && bookmarksIsFetched) { setBookmarks(bookmarkData); } }, [bookmarksIsFetched, bookmarkData]); useEffect(() => { if (groupData && groupsIsFetched) { const groupList = groupData?.map((category: BookmarkGroup) => { return category; }); setGroups( groupList .sort((a: BookmarkGroup, b: BookmarkGroup) => { switch (bookmarkSort) { case 'A>Z': return a.categoryName.toLocaleLowerCase() > b.categoryName.toLocaleLowerCase() ? 1 : -1; case 'Z>A': return a.categoryName.toLocaleLowerCase() < b.categoryName.toLocaleLowerCase() ? 1 : -1; case 'Newest': if (a.id && b.id) { return a.id < b.id ? 1 : -1; } return -1; case 'Oldest': if (a.id && b.id) { return a.id > b.id ? 1 : -1; } return -1; case 'Custom': return a.categoryIndex > b.categoryIndex ? 1 : -1; default: return 0; } }) ?.filter( (category: BookmarkGroup) => contentType.includes(category.filterName) || contentType.includes('All'), ), ); } }, [groupData, groupsIsFetched, bookmarkSort, contentType]); return ( <> {groupsIsFetched && bookmarksIsFetched && groups?.length > 0 && contentType.length > 0 && ( Bookmarks {groups .filter((category: BookmarkGroup) => category.enabled === 1) .map((category: BookmarkGroup) => { return ( bookmark.category === category.categoryName, )} bookmarkScale={bookmarkScale} /> ); })} )} ); } export default Bookmarks;