ConceptPortal-public/rsconcept/frontend/src/pages/LibraryPage/index.tsx

52 lines
1.6 KiB
TypeScript
Raw Normal View History

2023-08-01 20:14:03 +03:00
import { useLayoutEffect, useState } from 'react';
import { useLocation } from 'react-router-dom';
2023-07-25 20:27:29 +03:00
2023-07-15 17:46:19 +03:00
import BackendError from '../../components/BackendError'
import { Loader } from '../../components/Common/Loader'
import { useAuth } from '../../context/AuthContext';
2023-08-01 20:14:03 +03:00
import { useLibrary } from '../../context/LibraryContext';
import { useNavSearch } from '../../context/NavSearchContext';
2023-08-25 22:51:20 +03:00
import { ILibraryFilter, ILibraryItem } from '../../utils/models';
2023-07-28 00:03:37 +03:00
import ViewLibrary from './ViewLibrary';
2023-07-15 17:46:19 +03:00
2023-07-28 00:03:37 +03:00
function LibraryPage() {
const search = useLocation().search;
const { query, resetQuery: cleanQuery } = useNavSearch();
const { user } = useAuth();
2023-08-01 20:14:03 +03:00
const library = useLibrary();
const [ filterParams, setFilterParams ] = useState<ILibraryFilter>({});
2023-08-25 22:51:20 +03:00
const [ items, setItems ] = useState<ILibraryItem[]>([]);
2023-08-01 20:14:03 +03:00
useLayoutEffect(() => {
const filterType = new URLSearchParams(search).get('filter');
if (filterType === 'common') {
cleanQuery();
2023-08-01 20:14:03 +03:00
setFilterParams({
is_common: true
});
} else if (filterType === 'personal' && user) {
cleanQuery();
2023-08-01 20:14:03 +03:00
setFilterParams({
ownedBy: user.id!
});
}
2023-08-01 20:14:03 +03:00
}, [user, search, cleanQuery]);
useLayoutEffect(() => {
const filter = filterParams;
filterParams.queryMeta = query ? query: undefined;
setItems(library.filter(filter));
}, [query, library, filterParams]);
2023-07-25 20:27:29 +03:00
2023-07-15 17:46:19 +03:00
return (
2023-07-20 17:11:03 +03:00
<div className='w-full'>
2023-08-01 20:14:03 +03:00
{ library.loading && <Loader /> }
{ library.error && <BackendError error={library.error} />}
2023-08-25 22:51:20 +03:00
{ !library.loading && library.items && <ViewLibrary items={items} /> }
2023-07-15 17:46:19 +03:00
</div>
);
}
2023-07-28 00:03:37 +03:00
export default LibraryPage;