import React, { useCallback, useEffect, useState, } from 'react'; import { useTranslation } from 'next-i18next'; import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer'; import { apiv3Delete } from '~/client/util/apiv3-client'; import { toastSuccess, toastError } from '~/client/util/toastr'; import PaginationWrapper from '../../PaginationWrapper'; import ShareLinkList from '../../ShareLink/ShareLinkList'; import { withUnstatedContainers } from '../../UnstatedUtils'; import DeleteAllShareLinksModal from './DeleteAllShareLinksModal'; type PagerProps = { activePage: number, pagingHandler: (page: number) => Promise, totalLinks: number, limit: number, } type ShareLinkSettingProps = { adminGeneralSecurityContainer: AdminGeneralSecurityContainer, } const Pager = (props: PagerProps) => { const { activePage, pagingHandler, totalLinks, limit, } = props; return ( ); }; const ShareLinkSetting = (props: ShareLinkSettingProps) => { const { t } = useTranslation('admin'); const { adminGeneralSecurityContainer } = props; const { shareLinks, shareLinksActivePage, totalshareLinks, shareLinksPagingLimit, disableLinkSharing, setupStrategies, } = adminGeneralSecurityContainer.state; const [isDeleteConfirmModalShown, setIsDeleteConfirmModalShown] = useState(); const getShareLinkList = useCallback(async(page: number) => { try { await adminGeneralSecurityContainer.retrieveShareLinksByPagingNum(page); } catch (err) { toastError(err); } }, [adminGeneralSecurityContainer]); // for Next routing useEffect(() => { getShareLinkList(1); }, [getShareLinkList]); const deleteAllLinksButtonHandler = useCallback(async() => { try { const res = await apiv3Delete('/share-links/all'); const { deletedCount } = res.data; toastSuccess(t('toaster.remove_share_link', { count: deletedCount, ns: 'commons' })); } catch (err) { toastError(err); } getShareLinkList(1); }, [getShareLinkList, t]); const deleteLinkById = useCallback(async(shareLinkId: string) => { try { const res = await apiv3Delete(`/share-links/${shareLinkId}`); const { deletedShareLink } = res.data; toastSuccess(t('toaster.remove_share_link_success', { shareLinkId: deletedShareLink._id, ns: 'commons' })); } catch (err) { toastError(err); } getShareLinkList(shareLinksActivePage); }, [shareLinksActivePage, getShareLinkList, t]); const switchDisableLinkSharing = useCallback(async() => { try { await adminGeneralSecurityContainer.switchDisableLinkSharing(); toastSuccess(t('toaster.switch_disable_link_sharing_success')); } catch (err) { toastError(err); } }, [adminGeneralSecurityContainer, t]); return ( <>

{t('security_settings.share_link_management')}

{t('security_settings.share_link_rights')}

switchDisableLinkSharing()} />
{!setupStrategies.includes('local') && disableLinkSharing && (
{t('security_settings.setup_is_not_yet_complete')}
)}

{t('security_settings.all_share_links')}

{(shareLinks.length !== 0) ? ( <> ) : (

{t('security_settings.No_share_links')}

) } setIsDeleteConfirmModalShown(false)} onClickDeleteButton={deleteAllLinksButtonHandler} /> ); }; /** * Wrapper component for using unstated */ const ShareLinkSettingWrapper = withUnstatedContainers(ShareLinkSetting, [AdminGeneralSecurityContainer]); export default ShareLinkSettingWrapper;