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

47 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-08-23 18:11:42 +03:00
import { useCallback, useLayoutEffect, useState } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { HelpTopic } from '../../utils/models';
import TopicsList from './TopicsList';
import ViewTopic from './ViewTopic';
function ManualsPage() {
const navigate = useNavigate();
const search = useLocation().search;
const [activeTopic, setActiveTopic] = useState<HelpTopic>(HelpTopic.MAIN);
const navigateTo = useCallback(
(newTopic: HelpTopic) => {
navigate(`/manuals?topic=${newTopic}`);
}, [navigate]);
function onSelectTopic(newTopic: HelpTopic) {
navigateTo(newTopic);
}
useLayoutEffect(() => {
const topic = new URLSearchParams(search).get('topic') as HelpTopic;
if (!Object.values(HelpTopic).includes(topic)) {
navigateTo(HelpTopic.MAIN);
return;
} else {
setActiveTopic(topic);
}
}, [search, setActiveTopic, navigateTo]);
return (
2023-08-23 18:50:49 +03:00
<div className='flex w-full gap-2 justify-stretch'>
2023-08-23 18:11:42 +03:00
<TopicsList
activeTopic={activeTopic}
onChangeTopic={topic => onSelectTopic(topic)}
/>
2023-08-23 18:50:49 +03:00
<ViewTopic
topic={activeTopic}
/>
2023-08-23 18:11:42 +03:00
</div>
);
}
export default ManualsPage;