From 09a27b6c2586987d15c3704b63047682bf6974fe Mon Sep 17 00:00:00 2001 From: JimmFly <447268514@qq.com> Date: Mon, 25 Mar 2024 08:31:38 +0000 Subject: [PATCH] feat(core): add remove from collection to collection page list (#6265) close AFF-246 --- .../page-list/docs/virtualized-page-list.tsx | 19 ++++++++++++++++--- .../components/page-list/operation-cell.tsx | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx index 3e8249c58d..9d7b96572d 100644 --- a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx +++ b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx @@ -2,6 +2,7 @@ import { toast } from '@affine/component'; import { useBlockSuiteMetaHelper } from '@affine/core/hooks/affine/use-block-suite-meta-helper'; import { useTrashModalHelper } from '@affine/core/hooks/affine/use-trash-modal-helper'; import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta'; +import { CollectionService } from '@affine/core/modules/collection'; import type { Tag } from '@affine/core/modules/tag'; import { Workbench } from '@affine/core/modules/workbench'; import type { Collection, Filter } from '@affine/env/filter'; @@ -36,9 +37,17 @@ const usePageOperationsRenderer = () => { ); const t = useAFFiNEI18N(); const workbench = useService(Workbench); + const collectionService = useService(CollectionService); + const removeFromAllowList = useCallback( + (id: string) => { + collectionService.deletePagesFromCollections([id]); + toast(t['com.affine.collection.removePage.success']()); + }, + [collectionService, t] + ); const pageOperationsRenderer = useCallback( - (page: DocMeta) => { + (page: DocMeta, isInAllowList?: boolean) => { const onDisablePublicSharing = () => { toast('Successfully disabled', { portal: document.body, @@ -49,6 +58,7 @@ const usePageOperationsRenderer = () => { workbench.openPage(page.id, { at: 'tail' })} @@ -71,6 +81,7 @@ const usePageOperationsRenderer = () => { : t['com.affine.toastMessage.addedFavorites']() ); }} + onRemoveFromAllowList={() => removeFromAllowList(page.id)} /> ); }, @@ -81,6 +92,7 @@ const usePageOperationsRenderer = () => { setTrashModal, toggleFavorite, t, + removeFromAllowList, ] ); @@ -134,9 +146,10 @@ export const VirtualizedPageList = ({ const pageOperationRenderer = useCallback( (item: ListItem) => { const page = item as DocMeta; - return pageOperations(page); + const isInAllowList = collection?.allowList?.includes(page.id); + return pageOperations(page, isInAllowList); }, - [pageOperations] + [collection, pageOperations] ); const pageHeaderRenderer = useCallback(() => { diff --git a/packages/frontend/core/src/components/page-list/operation-cell.tsx b/packages/frontend/core/src/components/page-list/operation-cell.tsx index daa3c7e9f0..88028f8a46 100644 --- a/packages/frontend/core/src/components/page-list/operation-cell.tsx +++ b/packages/frontend/core/src/components/page-list/operation-cell.tsx @@ -17,6 +17,7 @@ import { FavoritedIcon, FavoriteIcon, FilterIcon, + FilterMinusIcon, MoreVerticalIcon, OpenInNewIcon, ResetIcon, @@ -39,26 +40,31 @@ export interface PageOperationCellProps { favorite: boolean; isPublic: boolean; link: string; + isInAllowList?: boolean; onToggleFavoritePage: () => void; onRemoveToTrash: () => void; onDuplicate: () => void; onDisablePublicSharing: () => void; onOpenInSplitView: () => void; + onRemoveFromAllowList?: () => void; } export const PageOperationCell = ({ favorite, isPublic, + isInAllowList, link, onToggleFavoritePage, onRemoveToTrash, onDuplicate, onDisablePublicSharing, onOpenInSplitView, + onRemoveFromAllowList, }: PageOperationCellProps) => { const t = useAFFiNEI18N(); const { appSettings } = useAppSettingHelper(); const [openDisableShared, setOpenDisableShared] = useState(false); + const OperationMenu = ( <> {isPublic && ( @@ -69,6 +75,18 @@ export const PageOperationCell = ({ }} /> )} + {isInAllowList && ( + + + + } + > + {t['Remove special filter']()} + + )}