diff --git a/packages/sanity/src/core/store/bundles/reducer.ts b/packages/sanity/src/core/store/bundles/reducer.ts index 11236b16db87..c82b00455136 100644 --- a/packages/sanity/src/core/store/bundles/reducer.ts +++ b/packages/sanity/src/core/store/bundles/reducer.ts @@ -94,7 +94,7 @@ export function bundlesReducer( // only capture the deleted bundle if deleted by another user const nextDeletedBundles = - !!isDeletedByCurrentUser && localDeletedBundle + !isDeletedByCurrentUser && localDeletedBundle ? { ...state.deletedBundles, [localDeletedBundle.slug]: localDeletedBundle, diff --git a/packages/sanity/src/structure/panes/document/documentPanel/DocumentPanel.tsx b/packages/sanity/src/structure/panes/document/documentPanel/DocumentPanel.tsx index 1d6b9f93c438..eece6a48f2c4 100644 --- a/packages/sanity/src/structure/panes/document/documentPanel/DocumentPanel.tsx +++ b/packages/sanity/src/structure/panes/document/documentPanel/DocumentPanel.tsx @@ -9,11 +9,11 @@ import {DocumentInspectorPanel} from '../documentInspector' import {InspectDialog} from '../inspectDialog' import {useDocumentPane} from '../useDocumentPane' import { + DeletedDocumentBanners, DeprecatedDocumentTypeBanner, PermissionCheckBanner, ReferenceChangedBanner, } from './banners' -import {DeletedBundleBanner} from './banners/DeletedBundleBanner' import {FormView} from './documentViews' interface DocumentPanelProps { @@ -137,7 +137,7 @@ export const DocumentPanel = function DocumentPanel(props: DocumentPanelProps) { /> - + ) }, [activeView.type, isPermissionsLoading, permissions?.granted, ready, requiredPermission]) diff --git a/packages/sanity/src/structure/panes/document/documentPanel/banners/DeletedBundleBanner.tsx b/packages/sanity/src/structure/panes/document/documentPanel/banners/DeletedBundleBanner.tsx deleted file mode 100644 index f6feca482070..000000000000 --- a/packages/sanity/src/structure/panes/document/documentPanel/banners/DeletedBundleBanner.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import {ReadOnlyIcon} from '@sanity/icons' -import {Text} from '@sanity/ui' -import {useEffect, useState} from 'react' -import {LATEST, Translate, usePerspective, useTranslation} from 'sanity' - -import {useBundles} from '../../../../../core/store' -import {Banner} from './Banner' -import {DeletedDocumentBanner} from './DeletedDocumentBanner' - -export const DeletedBundleBanner = () => { - const {currentGlobalBundle} = usePerspective() - const {data: bundles, deletedBundles} = useBundles() - const {t} = useTranslation() - const {slug: currentGlobalBundleSlug} = currentGlobalBundle - const [checkedOutBundleSlug, setCheckedOutBundleSlug] = useState( - currentGlobalBundleSlug, - ) - - /** - * refactor so that DeletedDocumentBanner is entry point - * and then check if it was actually a deleted bundle in there - */ - - useEffect(() => { - if (currentGlobalBundleSlug !== LATEST.slug) { - setCheckedOutBundleSlug(currentGlobalBundleSlug) - } - }, [currentGlobalBundleSlug, setCheckedOutBundleSlug]) - - if (!checkedOutBundleSlug || !Object.keys(deletedBundles).length || !bundles?.length) - return - - const hasCheckedOutBundleBeenDeleted = Boolean(deletedBundles[checkedOutBundleSlug]) - if (!hasCheckedOutBundleBeenDeleted) return - - const {title: deletedBundleTitle} = deletedBundles[checkedOutBundleSlug] - - return ( - - - - } - data-testid="deleted-bundle-banner" - icon={ReadOnlyIcon} - /> - ) -} diff --git a/packages/sanity/src/structure/panes/document/documentPanel/banners/DeletedDocumentBanner.tsx b/packages/sanity/src/structure/panes/document/documentPanel/banners/DeletedDocumentBanner.tsx index 7686b604ca2e..f4e3284b5410 100644 --- a/packages/sanity/src/structure/panes/document/documentPanel/banners/DeletedDocumentBanner.tsx +++ b/packages/sanity/src/structure/panes/document/documentPanel/banners/DeletedDocumentBanner.tsx @@ -1,15 +1,54 @@ import {ReadOnlyIcon} from '@sanity/icons' import {Text} from '@sanity/ui' -import {useCallback} from 'react' -import {useDocumentOperation, useTimelineSelector, useTranslation} from 'sanity' +import {useCallback, useEffect, useState} from 'react' +import { + type BundleDocument, + LATEST, + Translate, + useBundles, + useDocumentOperation, + usePerspective, + useTimelineSelector, + useTranslation, +} from 'sanity' import {useRouter} from 'sanity/router' import {structureLocaleNamespace} from '../../../../i18n' import {useDocumentPane} from '../../useDocumentPane' import {Banner} from './Banner' -export function DeletedDocumentBanner() { - const {documentId, documentType, isDeleted, isDeleting, timelineStore} = useDocumentPane() +const useIsLocaleBundleDeleted = () => { + const {currentGlobalBundle} = usePerspective() + const {data: bundles, deletedBundles} = useBundles() + const {slug: currentGlobalBundleSlug} = currentGlobalBundle + const [checkedOutBundleSlug, setCheckedOutBundleSlug] = useState( + currentGlobalBundleSlug, + ) + + useEffect(() => { + if (currentGlobalBundleSlug !== LATEST.slug) { + setCheckedOutBundleSlug(currentGlobalBundleSlug) + } + }, [currentGlobalBundleSlug, setCheckedOutBundleSlug]) + + if (!checkedOutBundleSlug || !Object.keys(deletedBundles).length || !bundles?.length) { + return null + } + return deletedBundles[checkedOutBundleSlug] +} + +export function DeletedDocumentBanners() { + const {isDeleted, isDeleting} = useDocumentPane() + const deletedCheckedOutBundle = useIsLocaleBundleDeleted() + + if (deletedCheckedOutBundle) + return + + if (isDeleted && !isDeleting) return +} + +function DeletedDocumentBanner() { + const {documentId, documentType, timelineStore} = useDocumentPane() const {restore} = useDocumentOperation(documentId, documentType) const {navigateIntent} = useRouter() const lastNonDeletedRevId = useTimelineSelector( @@ -25,10 +64,6 @@ export function DeletedDocumentBanner() { const {t} = useTranslation(structureLocaleNamespace) - if (!isDeleted || isDeleting) { - return null - } - return ( ) } + +const DeletedBundleBanner = ({deletedBundle}: {deletedBundle: BundleDocument}) => { + const {t} = useTranslation() + + const {title: deletedBundleTitle} = deletedBundle + + return ( + + + + } + data-testid="deleted-bundle-banner" + icon={ReadOnlyIcon} + /> + ) +}