import React, { useMemo, useState, type JSX } from 'react'; import { useTranslation } from 'next-i18next'; import dynamic from 'next/dynamic'; import { Modal, ModalBody, ModalHeader, } from 'reactstrap'; import { useDisableLinkSharing, useIsGuestUser, useIsReadOnlyUser, useIsSharedUser, } from '~/stores-universal/context'; import { usePageAccessoriesModal, PageAccessoriesModalContents } from '~/stores/modal'; import { useIsDeviceLargerThanLg } from '~/stores/ui'; import { CustomNavDropdown, CustomNavTab } from '../CustomNavigation/CustomNav'; import CustomTabContent from '../CustomNavigation/CustomTabContent'; import ExpandOrContractButton from '../ExpandOrContractButton'; import { useAutoOpenModalByQueryParam } from './hooks'; import styles from './PageAccessoriesModal.module.scss'; const PageAttachment = dynamic(() => import('./PageAttachment'), { ssr: false }); const PageHistory = dynamic(() => import('./PageHistory').then(mod => mod.PageHistory), { ssr: false }); const ShareLink = dynamic(() => import('./ShareLink').then(mod => mod.ShareLink), { ssr: false }); export const PageAccessoriesModal = (): JSX.Element => { const { t } = useTranslation(); const [isWindowExpanded, setIsWindowExpanded] = useState(false); const { data: isSharedUser } = useIsSharedUser(); const { data: isGuestUser } = useIsGuestUser(); const { data: isReadOnlyUser } = useIsReadOnlyUser(); const { data: isLinkSharingDisabled } = useDisableLinkSharing(); const { data: isDeviceLargerThanLg } = useIsDeviceLargerThanLg(); const { data: status, close, selectContents } = usePageAccessoriesModal(); useAutoOpenModalByQueryParam(); const navTabMapping = useMemo(() => { return { [PageAccessoriesModalContents.PageHistory]: { Icon: () => history, Content: () => { return ; }, i18n: t('History'), isLinkEnabled: () => !isGuestUser && !isSharedUser, }, [PageAccessoriesModalContents.Attachment]: { Icon: () => attachment, Content: () => { return ; }, i18n: t('attachment_data'), }, [PageAccessoriesModalContents.ShareLink]: { Icon: () => share, Content: () => { return ; }, i18n: t('share_links.share_link_management'), isLinkEnabled: () => !isGuestUser && !isReadOnlyUser && !isSharedUser && !isLinkSharingDisabled, }, }; }, [t, close, isGuestUser, isReadOnlyUser, isSharedUser, isLinkSharingDisabled]); const buttons = useMemo(() => ( setIsWindowExpanded(true)} contractWindow={() => setIsWindowExpanded(false)} /> ), [close, isWindowExpanded]); if (status == null || status.activatedContents == null) { return <>; } const { isOpened } = status; return ( {isDeviceLargerThanLg && ( )} {!isDeviceLargerThanLg && ( )} ); };