2024-12-05 15:45:53 +03:00
|
|
|
import React, { Suspense } from 'react';
|
|
|
|
|
2025-02-10 01:32:16 +03:00
|
|
|
import { PlacesType, Tooltip } from '@/components/Container';
|
|
|
|
import { TextURL } from '@/components/Control';
|
2025-01-28 23:23:03 +03:00
|
|
|
import { IconHelp } from '@/components/Icons';
|
2025-02-10 01:32:16 +03:00
|
|
|
import { Loader } from '@/components/Loader';
|
2025-01-28 23:23:03 +03:00
|
|
|
import { CProps } from '@/components/props';
|
2025-02-10 01:32:16 +03:00
|
|
|
import { HelpTopic } from '@/features/help/models/helpTopic';
|
2025-01-14 21:57:32 +03:00
|
|
|
import { usePreferencesStore } from '@/stores/preferences';
|
2024-06-07 20:17:03 +03:00
|
|
|
|
2025-02-10 01:32:16 +03:00
|
|
|
const TopicPage = React.lazy(() => import('@/features/help/pages/ManualsPage/TopicPage'));
|
2024-06-07 20:17:03 +03:00
|
|
|
|
|
|
|
interface BadgeHelpProps extends CProps.Styling {
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Topic to display in a tooltip. */
|
2024-06-07 20:17:03 +03:00
|
|
|
topic: HelpTopic;
|
2024-11-21 15:09:31 +03:00
|
|
|
|
|
|
|
/** Offset from the cursor to the tooltip. */
|
2024-06-07 20:17:03 +03:00
|
|
|
offset?: number;
|
2024-11-21 15:09:31 +03:00
|
|
|
|
|
|
|
/** Classname for padding. */
|
2024-06-07 20:17:03 +03:00
|
|
|
padding?: string;
|
2024-11-21 15:09:31 +03:00
|
|
|
|
|
|
|
/** Place of the tooltip in relation to the cursor. */
|
2024-06-07 20:17:03 +03:00
|
|
|
place?: PlacesType;
|
|
|
|
}
|
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/**
|
|
|
|
* Display help icon with a manual page tooltip.
|
|
|
|
*/
|
2024-10-29 12:05:23 +03:00
|
|
|
function BadgeHelp({ topic, padding = 'p-1', ...restProps }: BadgeHelpProps) {
|
2025-01-14 21:57:32 +03:00
|
|
|
const showHelp = usePreferencesStore(state => state.showHelp);
|
2024-06-07 20:17:03 +03:00
|
|
|
|
|
|
|
if (!showHelp) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return (
|
2024-10-29 12:05:23 +03:00
|
|
|
<div tabIndex={-1} id={`help-${topic}`} className={padding}>
|
2024-06-07 20:17:03 +03:00
|
|
|
<IconHelp size='1.25rem' className='icon-primary' />
|
|
|
|
<Tooltip clickable anchorSelect={`#help-${topic}`} layer='z-modalTooltip' {...restProps}>
|
2024-12-05 15:45:53 +03:00
|
|
|
<Suspense fallback={<Loader />}>
|
|
|
|
<div className='relative' onClick={event => event.stopPropagation()}>
|
|
|
|
<div className='absolute right-0 text-sm top-[0.4rem] clr-input'>
|
|
|
|
<TextURL text='Справка...' href={`/manuals?topic=${topic}`} />
|
|
|
|
</div>
|
2024-06-07 20:17:03 +03:00
|
|
|
</div>
|
2024-12-05 15:45:53 +03:00
|
|
|
<TopicPage topic={topic} />
|
|
|
|
</Suspense>
|
2024-06-07 20:17:03 +03:00
|
|
|
</Tooltip>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default BadgeHelp;
|