import React, { useEffect, useMemo, useState } from 'react'; import { Modal, ModalBody, ModalHeader, } from 'reactstrap'; import { useTranslation } from 'react-i18next'; import { useIsGuestUser, useIsSharedUser } from '~/stores/context'; import { usePageAccessoriesModal, PageAccessoriesModalContents } from '~/stores/modal'; import AppContainer from '~/client/services/AppContainer'; import HistoryIcon from './Icons/HistoryIcon'; import AttachmentIcon from './Icons/AttachmentIcon'; import ShareLinkIcon from './Icons/ShareLinkIcon'; import { withUnstatedContainers } from './UnstatedUtils'; import PageAttachment from './PageAttachment'; import PageHistory from './PageHistory'; import ShareLink from './ShareLink/ShareLink'; import { CustomNavTab } from './CustomNavigation/CustomNav'; import ExpandOrContractButton from './ExpandOrContractButton'; import CustomTabContent from './CustomNavigation/CustomTabContent'; type Props = { appContainer: AppContainer, isLinkSharingDisabled: boolean, } const PageAccessoriesModal = (props: Props): JSX.Element => { const { appContainer, } = props; const isLinkSharingDisabled = appContainer.config.disableLinkSharing; const { t } = useTranslation(); const [activeTab, setActiveTab] = useState(PageAccessoriesModalContents.PageHistory); const [isWindowExpanded, setIsWindowExpanded] = useState(false); const { data: isSharedUser } = useIsSharedUser(); const { data: isGuestUser } = useIsGuestUser(); const { data: status, mutate, close } = usePageAccessoriesModal(); // add event handler when opened useEffect(() => { if (status == null || status.onOpened != null) { return; } mutate({ ...status, onOpened: (activatedContents) => { setActiveTab(activatedContents); }, }, false); }, [mutate, status]); const navTabMapping = useMemo(() => { return { [PageAccessoriesModalContents.PageHistory]: { Icon: HistoryIcon, Content: () => , i18n: t('History'), index: 0, isLinkEnabled: () => !isGuestUser && !isSharedUser, }, [PageAccessoriesModalContents.Attachment]: { Icon: AttachmentIcon, Content: () => , i18n: t('attachment_data'), index: 1, }, [PageAccessoriesModalContents.ShareLink]: { Icon: ShareLinkIcon, Content: () => , i18n: t('share_links.share_link_management'), index: 2, isLinkEnabled: () => !isGuestUser && !isSharedUser && !isLinkSharingDisabled, }, }; }, [t, isGuestUser, isSharedUser, isLinkSharingDisabled]); const buttons = useMemo(() => (
setIsWindowExpanded(true)} contractWindow={() => setIsWindowExpanded(false)} />
), [close, isWindowExpanded]); if (status == null) { return <>; } const { isOpened } = status; return ( { setActiveTab(v); }} hideBorderBottom /> ); }; /** * Wrapper component for using unstated */ const PageAccessoriesModalWrapper = withUnstatedContainers(PageAccessoriesModal, [AppContainer]); export default PageAccessoriesModalWrapper;