Improve help pages

This commit is contained in:
IRBorisov 2024-06-04 16:06:48 +03:00
parent 10d1da917d
commit d4d1c81bdc
9 changed files with 87 additions and 19 deletions

View File

@ -37,6 +37,11 @@ export type FontStyle = 'controls' | 'main' | 'math' | 'math2';
export enum HelpTopic { export enum HelpTopic {
MAIN = 'main', MAIN = 'main',
DOCS = 'documentation',
RULES = 'rules',
PRIVACY = 'privacy',
API = 'api',
INTERFACE = 'user-interface', INTERFACE = 'user-interface',
UI_LIBRARY = 'ui-library', UI_LIBRARY = 'ui-library',
UI_RS_MENU = 'ui-rsform-menu', UI_RS_MENU = 'ui-rsform-menu',
@ -62,10 +67,9 @@ export enum HelpTopic {
RSL_TEMPLATES = 'rslang-templates', RSL_TEMPLATES = 'rslang-templates',
TERM_CONTROL = 'terminology-control', TERM_CONTROL = 'terminology-control',
ACCESS = 'access',
VERSIONS = 'versions', VERSIONS = 'versions',
EXTEOR = 'exteor', EXTEOR = 'exteor'
API = 'api',
PRIVACY = 'privacy'
} }
/** /**
@ -74,6 +78,11 @@ export enum HelpTopic {
export const topicParent: Map<HelpTopic, HelpTopic> = new Map([ export const topicParent: Map<HelpTopic, HelpTopic> = new Map([
[HelpTopic.MAIN, HelpTopic.MAIN], [HelpTopic.MAIN, HelpTopic.MAIN],
[HelpTopic.DOCS, HelpTopic.DOCS],
[HelpTopic.RULES, HelpTopic.DOCS],
[HelpTopic.API, HelpTopic.DOCS],
[HelpTopic.PRIVACY, HelpTopic.DOCS],
[HelpTopic.INTERFACE, HelpTopic.INTERFACE], [HelpTopic.INTERFACE, HelpTopic.INTERFACE],
[HelpTopic.UI_LIBRARY, HelpTopic.INTERFACE], [HelpTopic.UI_LIBRARY, HelpTopic.INTERFACE],
[HelpTopic.UI_RS_MENU, HelpTopic.INTERFACE], [HelpTopic.UI_RS_MENU, HelpTopic.INTERFACE],
@ -99,16 +108,15 @@ export const topicParent: Map<HelpTopic, HelpTopic> = new Map([
[HelpTopic.RSL_TEMPLATES, HelpTopic.RSLANG], [HelpTopic.RSL_TEMPLATES, HelpTopic.RSLANG],
[HelpTopic.TERM_CONTROL, HelpTopic.TERM_CONTROL], [HelpTopic.TERM_CONTROL, HelpTopic.TERM_CONTROL],
[HelpTopic.ACCESS, HelpTopic.ACCESS],
[HelpTopic.VERSIONS, HelpTopic.VERSIONS], [HelpTopic.VERSIONS, HelpTopic.VERSIONS],
[HelpTopic.EXTEOR, HelpTopic.EXTEOR], [HelpTopic.EXTEOR, HelpTopic.EXTEOR]
[HelpTopic.API, HelpTopic.API],
[HelpTopic.PRIVACY, HelpTopic.PRIVACY]
]); ]);
/** /**
* Topics that can be folded. * Topics that can be folded.
*/ */
export const foldableTopics = [HelpTopic.INTERFACE, HelpTopic.RSLANG, HelpTopic.CONCEPTUAL]; export const foldableTopics = [HelpTopic.INTERFACE, HelpTopic.RSLANG, HelpTopic.CONCEPTUAL, HelpTopic.DOCS];
/** /**
* Represents {@link IConstituenta} matching mode. * Represents {@link IConstituenta} matching mode.

View File

@ -1,5 +1,6 @@
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import HelpAccess from './items/HelpAccess';
import HelpAPI from './items/HelpAPI'; import HelpAPI from './items/HelpAPI';
import HelpConcept from './items/HelpConcept'; import HelpConcept from './items/HelpConcept';
import HelpConceptRelations from './items/HelpConceptRelations'; import HelpConceptRelations from './items/HelpConceptRelations';
@ -9,6 +10,7 @@ import HelpCstAttributes from './items/HelpCstAttributes';
import HelpCstClass from './items/HelpCstClass'; import HelpCstClass from './items/HelpCstClass';
import HelpCstEditor from './items/HelpCstEditor'; import HelpCstEditor from './items/HelpCstEditor';
import HelpCstStatus from './items/HelpCstStatus'; import HelpCstStatus from './items/HelpCstStatus';
import HelpDocs from './items/HelpDocs';
import HelpExteor from './items/HelpExteor'; import HelpExteor from './items/HelpExteor';
import HelpFormulaTree from './items/HelpFormulaTree'; import HelpFormulaTree from './items/HelpFormulaTree';
import HelpInterface from './items/HelpInterface'; import HelpInterface from './items/HelpInterface';
@ -24,6 +26,7 @@ import HelpRSLangInterpret from './items/HelpRSLangInterpret';
import HelpRSLangOperations from './items/HelpRSLangOperations'; import HelpRSLangOperations from './items/HelpRSLangOperations';
import HelpRSLangTemplates from './items/HelpRSLangTemplates'; import HelpRSLangTemplates from './items/HelpRSLangTemplates';
import HelpRSLangTypes from './items/HelpRSLangTypes'; import HelpRSLangTypes from './items/HelpRSLangTypes';
import HelpRules from './items/HelpRules';
import HelpTermGraph from './items/HelpTermGraph'; import HelpTermGraph from './items/HelpTermGraph';
import HelpTerminologyControl from './items/HelpTerminologyControl'; import HelpTerminologyControl from './items/HelpTerminologyControl';
import HelpVersions from './items/HelpVersions'; import HelpVersions from './items/HelpVersions';
@ -35,6 +38,11 @@ interface TopicPageProps {
function TopicPage({ topic }: TopicPageProps) { function TopicPage({ topic }: TopicPageProps) {
if (topic === HelpTopic.MAIN) return <HelpPortal />; if (topic === HelpTopic.MAIN) return <HelpPortal />;
if (topic === HelpTopic.DOCS) return <HelpDocs />;
if (topic === HelpTopic.RULES) return <HelpRules />;
if (topic === HelpTopic.PRIVACY) return <HelpPrivacy />;
if (topic === HelpTopic.API) return <HelpAPI />;
if (topic === HelpTopic.INTERFACE) return <HelpInterface />; if (topic === HelpTopic.INTERFACE) return <HelpInterface />;
if (topic === HelpTopic.UI_LIBRARY) return <HelpLibrary />; if (topic === HelpTopic.UI_LIBRARY) return <HelpLibrary />;
if (topic === HelpTopic.UI_RS_MENU) return <HelpRSFormMenu />; if (topic === HelpTopic.UI_RS_MENU) return <HelpRSFormMenu />;
@ -60,10 +68,9 @@ function TopicPage({ topic }: TopicPageProps) {
if (topic === HelpTopic.RSL_TEMPLATES) return <HelpRSLangTemplates />; if (topic === HelpTopic.RSL_TEMPLATES) return <HelpRSLangTemplates />;
if (topic === HelpTopic.TERM_CONTROL) return <HelpTerminologyControl />; if (topic === HelpTopic.TERM_CONTROL) return <HelpTerminologyControl />;
if (topic === HelpTopic.ACCESS) return <HelpAccess />;
if (topic === HelpTopic.VERSIONS) return <HelpVersions />; if (topic === HelpTopic.VERSIONS) return <HelpVersions />;
if (topic === HelpTopic.EXTEOR) return <HelpExteor />; if (topic === HelpTopic.EXTEOR) return <HelpExteor />;
if (topic === HelpTopic.API) return <HelpAPI />;
if (topic === HelpTopic.PRIVACY) return <HelpPrivacy />;
return null; return null;
} }

View File

@ -0,0 +1,10 @@
function HelpAccess() {
return (
<div>
<h1>Организация доступов к схемам</h1>
<p>TBD.</p>
</div>
);
}
export default HelpAccess;

View File

@ -0,0 +1,16 @@
import { HelpTopic } from '@/models/miscellaneous';
import Subtopics from '../Subtopics';
function HelpDocs() {
return (
<div>
<h1>Документы</h1>
<p>TBD.</p>
<Subtopics headTopic={HelpTopic.DOCS} />
</div>
);
}
export default HelpDocs;

View File

@ -39,14 +39,14 @@ function HelpPortal() {
<h2>Разделы Справки</h2> <h2>Разделы Справки</h2>
{[ {[
HelpTopic.DOCS,
HelpTopic.INTERFACE, HelpTopic.INTERFACE,
HelpTopic.CONCEPTUAL, HelpTopic.CONCEPTUAL,
HelpTopic.RSLANG, HelpTopic.RSLANG,
HelpTopic.TERM_CONTROL, HelpTopic.TERM_CONTROL,
HelpTopic.ACCESS,
HelpTopic.VERSIONS, HelpTopic.VERSIONS,
HelpTopic.EXTEOR, HelpTopic.EXTEOR
HelpTopic.API,
HelpTopic.PRIVACY
].map(topic => ( ].map(topic => (
<TopicItem key={`${prefixes.topic_item}${topic}`} topic={topic} /> <TopicItem key={`${prefixes.topic_item}${topic}`} topic={topic} />
))} ))}

View File

@ -0,0 +1,10 @@
function HelpRules() {
return (
<div>
<h1>Правила Портала</h1>
<p>TBD.</p>
</div>
);
}
export default HelpRules;

View File

@ -61,7 +61,7 @@ function AccessToolbar({ visible, toggleVisible, readOnly, toggleReadOnly }: Acc
disabled={accessLevel === UserLevel.READER || controller.isProcessing} disabled={accessLevel === UserLevel.READER || controller.isProcessing}
/> />
<BadgeHelp topic={HelpTopic.VERSIONS} className='max-w-[30rem]' offset={4} /> <BadgeHelp topic={HelpTopic.ACCESS} className='max-w-[30rem]' offset={4} />
</div> </div>
</Overlay> </Overlay>
); );

View File

@ -21,6 +21,7 @@ import AnimateFade from '@/components/wrap/AnimateFade';
import ExpectedAnonymous from '@/components/wrap/ExpectedAnonymous'; import ExpectedAnonymous from '@/components/wrap/ExpectedAnonymous';
import { useAuth } from '@/context/AuthContext'; import { useAuth } from '@/context/AuthContext';
import { useConceptNavigation } from '@/context/NavigationContext'; import { useConceptNavigation } from '@/context/NavigationContext';
import { HelpTopic } from '@/models/miscellaneous';
import { IUserSignupData } from '@/models/user'; import { IUserSignupData } from '@/models/user';
import { globals, patterns } from '@/utils/constants'; import { globals, patterns } from '@/utils/constants';
@ -54,8 +55,12 @@ function RegisterPage() {
const [lastName, setLastName] = useState(''); const [lastName, setLastName] = useState('');
const [acceptPrivacy, setAcceptPrivacy] = useState(false); const [acceptPrivacy, setAcceptPrivacy] = useState(false);
const [acceptRules, setAcceptRules] = useState(false);
const isValid = useMemo(() => acceptPrivacy && !!email && !!username, [acceptPrivacy, email, username]); const isValid = useMemo(
() => acceptPrivacy && acceptRules && !!email && !!username,
[acceptPrivacy, acceptRules, email, username]
);
useEffect(() => { useEffect(() => {
setError(undefined); setError(undefined);
@ -180,7 +185,11 @@ function RegisterPage() {
<div className='flex gap-1 text-sm'> <div className='flex gap-1 text-sm'>
<Checkbox id='accept_terms' label='Принимаю условия' value={acceptPrivacy} setValue={setAcceptPrivacy} /> <Checkbox id='accept_terms' label='Принимаю условия' value={acceptPrivacy} setValue={setAcceptPrivacy} />
<TextURL text='обработки персональных данных...' href={'/manuals?topic=privacy'} /> <TextURL text='обработки персональных данных...' href={urls.help_topic(HelpTopic.PRIVACY)} />
</div>
<div className='flex gap-1 text-sm'>
<Checkbox id='accept_rules' label='Принимаю ' value={acceptRules} setValue={setAcceptRules} />
<TextURL text='правила поведения на Портале...' href={urls.help_topic(HelpTopic.RULES)} />
</div> </div>
<div className='flex justify-around my-3'> <div className='flex justify-around my-3'>

View File

@ -352,6 +352,11 @@ export function labelHelpTopic(topic: HelpTopic): string {
switch (topic) { switch (topic) {
case HelpTopic.MAIN: return 'Портал'; case HelpTopic.MAIN: return 'Портал';
case HelpTopic.DOCS: return 'Документы';
case HelpTopic.RULES: return 'Правила';
case HelpTopic.PRIVACY: return 'Обработка данных';
case HelpTopic.API: return 'REST API';
case HelpTopic.INTERFACE: return 'Интерфейс'; case HelpTopic.INTERFACE: return 'Интерфейс';
case HelpTopic.UI_LIBRARY: return 'Библиотека'; case HelpTopic.UI_LIBRARY: return 'Библиотека';
case HelpTopic.UI_RS_MENU: return 'Меню схемы'; case HelpTopic.UI_RS_MENU: return 'Меню схемы';
@ -377,10 +382,9 @@ export function labelHelpTopic(topic: HelpTopic): string {
case HelpTopic.RSL_TEMPLATES: return 'Шаблоны выражений'; case HelpTopic.RSL_TEMPLATES: return 'Шаблоны выражений';
case HelpTopic.TERM_CONTROL: return 'Терминологизация'; case HelpTopic.TERM_CONTROL: return 'Терминологизация';
case HelpTopic.ACCESS: return 'Доступы';
case HelpTopic.VERSIONS: return 'Версионирование'; case HelpTopic.VERSIONS: return 'Версионирование';
case HelpTopic.EXTEOR: return 'Экстеор'; case HelpTopic.EXTEOR: return 'Экстеор';
case HelpTopic.API: return 'REST API';
case HelpTopic.PRIVACY: return 'Конфиденциальность';
} }
} }
@ -392,6 +396,11 @@ export function describeHelpTopic(topic: HelpTopic): string {
switch (topic) { switch (topic) {
case HelpTopic.MAIN: return 'общая справка по порталу'; case HelpTopic.MAIN: return 'общая справка по порталу';
case HelpTopic.DOCS: return 'нормативные и технические документы';
case HelpTopic.RULES: return 'правила пользования Порталом';
case HelpTopic.PRIVACY: return 'политика обработки персональных данных';
case HelpTopic.API: return 'интерфейс для разработчиков';
case HelpTopic.INTERFACE: return 'описание интерфейса пользователя'; case HelpTopic.INTERFACE: return 'описание интерфейса пользователя';
case HelpTopic.UI_LIBRARY: return 'интерфейс Библиотеки схем'; case HelpTopic.UI_LIBRARY: return 'интерфейс Библиотеки схем';
case HelpTopic.UI_RS_MENU: return 'меню редактирования схемы'; case HelpTopic.UI_RS_MENU: return 'меню редактирования схемы';
@ -417,10 +426,9 @@ export function describeHelpTopic(topic: HelpTopic): string {
case HelpTopic.RSL_TEMPLATES: return 'работа с шаблонными выражениями'; case HelpTopic.RSL_TEMPLATES: return 'работа с шаблонными выражениями';
case HelpTopic.TERM_CONTROL: return 'справка по контролю терминов и текстовым отсылкам'; case HelpTopic.TERM_CONTROL: return 'справка по контролю терминов и текстовым отсылкам';
case HelpTopic.ACCESS: return 'организация доступов к схемам';
case HelpTopic.VERSIONS: return 'справка по управлению версиями схем'; case HelpTopic.VERSIONS: return 'справка по управлению версиями схем';
case HelpTopic.EXTEOR: return 'справка по программе для экспликации "Экстеор" для Windows'; case HelpTopic.EXTEOR: return 'справка по программе для экспликации "Экстеор" для Windows';
case HelpTopic.API: return 'интерфейс для разработчиков';
case HelpTopic.PRIVACY: return 'политика обработки персональных данных';
} }
} }