import React, { useState } from 'react'; import { UserPicture } from '@growi/ui'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import PageContainer from '~/client/services/PageContainer'; import { useCurrentUpdatedAt, useShareLinkId } from '~/stores/context'; import { usePageDeleteModal, usePutBackPageModal } from '~/stores/modal'; import { useSWRxPageInfo } from '~/stores/page'; import EmptyTrashModal from '../EmptyTrashModal'; import { withUnstatedContainers } from '../UnstatedUtils'; const onDeletedHandler = (pathOrPathsToDelete, isRecursively, isCompletely) => { if (typeof pathOrPathsToDelete !== 'string') { return; } window.location.href = '/'; }; const TrashPageAlert = (props) => { const { t } = useTranslation(); const { pageContainer } = props; const { pageId, revisionId, path, isDeleted, lastUpdateUsername, deletedUserName, deletedAt, } = pageContainer.state; const { data: shareLinkId } = useShareLinkId(); /* * TODO: Do not use useSWRxPageInfo on this component * Ideal: use useSWRxPageInfo on TrashPage after applying Next.js * Reference: https://github.com/weseek/growi/pull/5359#discussion_r808381329 */ const { data: pageInfo } = useSWRxPageInfo(pageId ?? null, shareLinkId); const { data: updatedAt } = useCurrentUpdatedAt(); const [isEmptyTrashModalShown, setIsEmptyTrashModalShown] = useState(false); const { open: openDeleteModal } = usePageDeleteModal(); const { open: openPutBackPageModal } = usePutBackPageModal(); function openEmptyTrashModalHandler() { setIsEmptyTrashModalShown(true); } function closeEmptyTrashModalHandler() { setIsEmptyTrashModalShown(false); } function openPutbackPageModalHandler() { const putBackedHandler = (path) => { window.location.reload(); }; openPutBackPageModal({ pageId, path }, { onPutBacked: putBackedHandler }); } function openPageDeleteModalHandler() { const pageToDelete = { data: { _id: pageId, revision: revisionId, path, }, meta: pageInfo, }; openDeleteModal([pageToDelete], { onDeleted: onDeletedHandler }); } function renderEmptyButton() { return ( ); } function renderTrashPageManagementButtons() { return ( <> ); } function renderModals() { return ( <> ); } return ( <>
This page is in the trash . {isDeleted && ( <>
Deleted by {deletedUserName || lastUpdateUsername} at {deletedAt || updatedAt} )}
{ pageContainer.isAbleToShowEmptyTrashButton && renderEmptyButton()} { pageContainer.isAbleToShowTrashPageManagementButtons && renderTrashPageManagementButtons()}
{renderModals()} ); }; TrashPageAlert.propTypes = { pageContainer: PropTypes.instanceOf(PageContainer).isRequired, }; /** * Wrapper component for using unstated */ const TrashPageAlertWrapper = withUnstatedContainers(TrashPageAlert, [PageContainer]); export default TrashPageAlertWrapper;