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

50 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-08-23 18:11:42 +03:00
import { useCallback, useLayoutEffect, useState } from 'react';
2023-09-05 00:23:53 +03:00
import { useLocation } from 'react-router-dom';
2023-08-23 18:11:42 +03:00
2023-09-05 00:23:53 +03:00
import { useConceptNavigation } from '../../context/NagivationContext';
2023-08-24 14:23:17 +03:00
import { useConceptTheme } from '../../context/ThemeContext';
2023-08-23 18:11:42 +03:00
import { HelpTopic } from '../../utils/models';
import TopicsList from './TopicsList';
import ViewTopic from './ViewTopic';
function ManualsPage() {
2023-09-05 00:23:53 +03:00
const { navigateTo } = useConceptNavigation();
2023-08-23 18:11:42 +03:00
const search = useLocation().search;
2023-08-24 14:23:17 +03:00
const { mainHeight } = useConceptTheme();
2023-08-23 18:11:42 +03:00
const [activeTopic, setActiveTopic] = useState<HelpTopic>(HelpTopic.MAIN);
2023-09-05 00:23:53 +03:00
const navigateTopic = useCallback(
2023-08-23 18:11:42 +03:00
(newTopic: HelpTopic) => {
2023-09-05 00:23:53 +03:00
navigateTo(`/manuals?topic=${newTopic}`);
}, [navigateTo]);
2023-08-23 18:11:42 +03:00
function onSelectTopic(newTopic: HelpTopic) {
2023-09-05 00:23:53 +03:00
navigateTopic(newTopic);
2023-08-23 18:11:42 +03:00
}
useLayoutEffect(() => {
const topic = new URLSearchParams(search).get('topic') as HelpTopic;
if (!Object.values(HelpTopic).includes(topic)) {
2023-09-05 00:23:53 +03:00
navigateTopic(HelpTopic.MAIN);
2023-08-23 18:11:42 +03:00
return;
} else {
setActiveTopic(topic);
}
2023-09-05 00:23:53 +03:00
}, [search, setActiveTopic, navigateTopic]);
2023-08-23 18:11:42 +03:00
return (
2023-08-24 14:23:17 +03:00
<div className='flex w-full gap-2 justify-stretch' style={{minHeight: mainHeight}}>
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;