diff --git a/packages/frontend/core/src/components/page-list/components/list-header-cell.css.ts b/packages/frontend/core/src/components/page-list/components/list-header-cell.css.ts index 6e70bc27e95f..d0cb77bf9ee3 100644 --- a/packages/frontend/core/src/components/page-list/components/list-header-cell.css.ts +++ b/packages/frontend/core/src/components/page-list/components/list-header-cell.css.ts @@ -16,7 +16,6 @@ export const headerCell = style({ borderRight: `1px solid ${cssVar('hoverColorFilled')}`, }, }, - display: 'flex', alignItems: 'center', columnGap: '4px', position: 'relative', diff --git a/packages/frontend/core/src/components/page-list/components/list-header-cell.tsx b/packages/frontend/core/src/components/page-list/components/list-header-cell.tsx index 1fbde3409f4d..5edde593ecdd 100644 --- a/packages/frontend/core/src/components/page-list/components/list-header-cell.tsx +++ b/packages/frontend/core/src/components/page-list/components/list-header-cell.tsx @@ -22,6 +22,7 @@ export const ListHeaderCell = ({ alignment, flex, style, + hidden, hideInSmallContainer, children, }: HeaderCellProps) => { @@ -39,6 +40,7 @@ export const ListHeaderCell = ({ className={styles.headerCell} data-sortable={sortable ? true : undefined} data-sorting={sorting ? true : undefined} + hidden={hidden} style={style} role="columnheader" hideInSmallContainer={hideInSmallContainer} diff --git a/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx b/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx index a366630d8185..7e106142fcb4 100644 --- a/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx +++ b/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx @@ -6,6 +6,7 @@ import { type PropsWithChildren, useCallback, useMemo } from 'react'; import { WorkbenchLink } from '../../../modules/workbench/view/workbench-link'; import type { DraggableTitleCellData, PageListItemProps } from '../types'; +import { usePageDisplayProperties } from '../use-page-display-properties'; import { ColWrapper, formatDate, stopPropagation } from '../utils'; import * as styles from './page-list-item.css'; import { PageTags } from './page-tags'; @@ -14,6 +15,7 @@ const ListTitleCell = ({ title, preview, }: Pick) => { + const [displayProperties] = usePageDisplayProperties(); return (
{title}
- {preview ? ( + {preview && displayProperties['bodyNotes'] ? (
{ + const [displayProperties] = usePageDisplayProperties(); const pageTitleElement = useMemo(() => { return (
@@ -182,14 +185,29 @@ export const PageListItem = (props: PageListItemProps) => {
- + - + - + {props.operations ? ( 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 685ac32bde0e..7b25559dd5e1 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 @@ -15,7 +15,7 @@ import { useCallback, useMemo, useRef, useState } from 'react'; import { usePageHelper } from '../../blocksuite/block-suite-page-list/utils'; import { ListFloatingToolbar } from '../components/list-floating-toolbar'; import { usePageItemGroupDefinitions } from '../group-definitions'; -import { pageHeaderColsDef } from '../header-col-def'; +import { usePageHeaderColsDef } from '../header-col-def'; import { PageOperationCell } from '../operation-cell'; import { PageListItemRenderer } from '../page-group'; import { ListTableHeader } from '../page-header'; @@ -110,6 +110,7 @@ export const VirtualizedPageList = ({ const pageMetas = useBlockSuiteDocMeta(currentWorkspace.docCollection); const pageOperations = usePageOperationsRenderer(); const { isPreferredEdgeless } = usePageHelper(currentWorkspace.docCollection); + const pageHeaderColsDef = usePageHeaderColsDef(); const filteredPageMetas = useFilteredPageMetas(currentWorkspace, pageMetas, { filters, @@ -141,7 +142,7 @@ export const VirtualizedPageList = ({ const pageHeaderRenderer = useCallback(() => { return ; - }, []); + }, [pageHeaderColsDef]); const pageItemRenderer = useCallback((item: ListItem) => { return ; diff --git a/packages/frontend/core/src/components/page-list/header-col-def.tsx b/packages/frontend/core/src/components/page-list/header-col-def.tsx index 60268b834ff3..bf9abe11461c 100644 --- a/packages/frontend/core/src/components/page-list/header-col-def.tsx +++ b/packages/frontend/core/src/components/page-list/header-col-def.tsx @@ -1,45 +1,55 @@ import { Trans } from '@affine/i18n'; +import { useMemo } from 'react'; import { ListHeaderTitleCell } from './page-header'; import type { HeaderColDef } from './types'; - -export const pageHeaderColsDef: HeaderColDef[] = [ - { - key: 'title', - content: , - flex: 6, - alignment: 'start', - sortable: true, - }, - { - key: 'tags', - content: , - flex: 3, - alignment: 'end', - }, - { - key: 'createDate', - content: , - flex: 1, - sortable: true, - alignment: 'end', - hideInSmallContainer: true, - }, - { - key: 'updatedDate', - content: , - flex: 1, - sortable: true, - alignment: 'end', - hideInSmallContainer: true, - }, - { - key: 'actions', - content: '', - flex: 1, - alignment: 'end', - }, -]; +import { usePageDisplayProperties } from './use-page-display-properties'; +export const usePageHeaderColsDef = (): HeaderColDef[] => { + const [displayProperties] = usePageDisplayProperties(); + return useMemo( + () => [ + { + key: 'title', + content: , + flex: 6, + alignment: 'start', + sortable: true, + }, + { + key: 'tags', + content: , + flex: 3, + alignment: 'end', + hidden: !displayProperties['tags'], + }, + { + key: 'createDate', + content: , + flex: 1, + sortable: true, + alignment: 'end', + hideInSmallContainer: true, + hidden: !displayProperties['createDate'], + }, + { + key: 'updatedDate', + content: , + flex: 1, + sortable: true, + alignment: 'end', + hideInSmallContainer: true, + hidden: !displayProperties['updatedDate'], + }, + { + key: 'actions', + content: '', + flex: 1, + alignment: 'end', + }, + ], + [displayProperties] + ); +}; export const collectionHeaderColsDef: HeaderColDef[] = [ { diff --git a/packages/frontend/core/src/components/page-list/index.tsx b/packages/frontend/core/src/components/page-list/index.tsx index bd88f0f301f4..d9b83f3615ab 100644 --- a/packages/frontend/core/src/components/page-list/index.tsx +++ b/packages/frontend/core/src/components/page-list/index.tsx @@ -17,6 +17,7 @@ export * from './tags'; export * from './types'; export * from './use-collection-manager'; export * from './use-filtered-page-metas'; +export * from './use-page-display-properties'; export * from './utils'; export * from './view'; export * from './virtualized-list'; diff --git a/packages/frontend/core/src/components/page-list/list.css.ts b/packages/frontend/core/src/components/page-list/list.css.ts index 776bb23220f9..6b0af3dc6265 100644 --- a/packages/frontend/core/src/components/page-list/list.css.ts +++ b/packages/frontend/core/src/components/page-list/list.css.ts @@ -37,6 +37,10 @@ export const hideInSmallContainer = style({ }, }, }); + +export const hidden = style({ + display: 'none', +}); export const favoriteCell = style({ display: 'flex', alignItems: 'center', diff --git a/packages/frontend/core/src/components/page-list/list.tsx b/packages/frontend/core/src/components/page-list/list.tsx index 059f8bfe4af0..7fa7d24c94bd 100644 --- a/packages/frontend/core/src/components/page-list/list.tsx +++ b/packages/frontend/core/src/components/page-list/list.tsx @@ -11,7 +11,7 @@ import { useRef, } from 'react'; -import { pageHeaderColsDef } from './header-col-def'; +import { usePageHeaderColsDef } from './header-col-def'; import * as styles from './list.css'; import { ItemGroup } from './page-group'; import { ListTableHeader } from './page-header'; @@ -135,7 +135,7 @@ ListInnerWrapper.displayName = 'ListInnerWrapper'; const ListInner = (props: ListProps) => { const groups = useAtomValue(groupsAtom); - + const pageHeaderColsDef = usePageHeaderColsDef(); const hideHeader = props.hideHeader; return (
diff --git a/packages/frontend/core/src/components/page-list/page-header.tsx b/packages/frontend/core/src/components/page-list/page-header.tsx index 7822500d58fb..eb207839b45b 100644 --- a/packages/frontend/core/src/components/page-list/page-header.tsx +++ b/packages/frontend/core/src/components/page-list/page-header.tsx @@ -112,6 +112,7 @@ export const ListTableHeader = ({ data-selection-active={selectionState.selectionActive} > {headerCols.map(col => { + const isTagHidden = col.key === 'tags' && col.hidden; return (
- - - - + {propertyOptions.map(option => ( + + ))}
); - }, [group, handleSelect, t]); + }, [group, handleSelect, properties, propertyOptions, t]); return (
{ useBlockSuiteMetaHelper(docCollection); const { isPreferredEdgeless } = usePageHelper(docCollection); const t = useAFFiNEI18N(); + const pageHeaderColsDef = usePageHeaderColsDef(); const pageOperationsRenderer = useCallback( (item: ListItem) => { @@ -93,7 +94,7 @@ export const TrashPage = () => { }, []); const pageHeaderRenderer = useCallback(() => { return ; - }, []); + }, [pageHeaderColsDef]); return ( <> diff --git a/tests/storybook/src/stories/page-list.stories.tsx b/tests/storybook/src/stories/page-list.stories.tsx index 61259f6e6431..2e60ccb2b15b 100644 --- a/tests/storybook/src/stories/page-list.stories.tsx +++ b/tests/storybook/src/stories/page-list.stories.tsx @@ -224,7 +224,7 @@ export const PageListStory: StoryFn> = ( }; PageListStory.args = { - groupBy: 'createDate', + groupBy: false, }; PageListStory.argTypes = {