- document folder - full-text search - blob storage - basic edgeless support Co-authored-by: tzhangchi <terry.zhangchi@outlook.com> Co-authored-by: QiShaoXuan <qishaoxuan777@gmail.com> Co-authored-by: DiamondThree <diamond.shx@gmail.com> Co-authored-by: MingLiang Wang <mingliangwang0o0@gmail.com> Co-authored-by: JimmFly <yangjinfei001@gmail.com> Co-authored-by: Yifeng Wang <doodlewind@toeverything.info> Co-authored-by: Himself65 <himself65@outlook.com> Co-authored-by: lawvs <18554747+lawvs@users.noreply.github.com> Co-authored-by: Qi <474021214@qq.com>
146 lines
4.3 KiB
TypeScript
146 lines
4.3 KiB
TypeScript
import { PageMeta } from '@/providers/app-state-provider';
|
|
import {
|
|
FavouritedIcon,
|
|
FavouritesIcon,
|
|
PaperIcon,
|
|
EdgelessIcon,
|
|
} from '@blocksuite/icons';
|
|
import {
|
|
StyledTableContainer,
|
|
StyledTableRow,
|
|
StyledTitleLink,
|
|
StyledTitleWrapper,
|
|
} from './styles';
|
|
import { Table, TableBody, TableCell, TableHead, TableRow } from '@/ui/table';
|
|
import { OperationCell, TrashOperationCell } from './operation-cell';
|
|
import Empty from './empty';
|
|
import { Content } from '@/ui/layout';
|
|
import React from 'react';
|
|
import DateCell from '@/components/page-list/date-cell';
|
|
import { IconButton } from '@/ui/button';
|
|
import { Tooltip } from '@/ui/tooltip';
|
|
import { useRouter } from 'next/router';
|
|
import { useAppState } from '@/providers/app-state-provider/context';
|
|
import { toast } from '@/ui/toast';
|
|
import { usePageHelper } from '@/hooks/use-page-helper';
|
|
import { useTheme } from '@/providers/themeProvider';
|
|
|
|
const FavoriteTag = ({
|
|
pageMeta: { favorite, id },
|
|
}: {
|
|
pageMeta: PageMeta;
|
|
}) => {
|
|
const { toggleFavoritePage } = usePageHelper();
|
|
const { theme } = useTheme();
|
|
return (
|
|
<Tooltip
|
|
content={favorite ? 'Favourited' : 'Favourite'}
|
|
placement="top-start"
|
|
>
|
|
<IconButton
|
|
darker={true}
|
|
iconSize={[20, 20]}
|
|
onClick={e => {
|
|
e.stopPropagation();
|
|
toggleFavoritePage(id);
|
|
toast(!favorite ? 'Removed to Favourites' : 'Added to Favourites');
|
|
}}
|
|
style={{
|
|
color: favorite ? theme.colors.primaryColor : theme.colors.iconColor,
|
|
}}
|
|
className="favorite-button"
|
|
>
|
|
{favorite ? (
|
|
<FavouritedIcon data-testid="favourited-icon" />
|
|
) : (
|
|
<FavouritesIcon />
|
|
)}
|
|
</IconButton>
|
|
</Tooltip>
|
|
);
|
|
};
|
|
|
|
export const PageList = ({
|
|
pageList,
|
|
showFavoriteTag = false,
|
|
isTrash = false,
|
|
}: {
|
|
pageList: PageMeta[];
|
|
showFavoriteTag?: boolean;
|
|
isTrash?: boolean;
|
|
}) => {
|
|
const router = useRouter();
|
|
const { currentWorkspaceId } = useAppState();
|
|
if (pageList.length === 0) {
|
|
return <Empty />;
|
|
}
|
|
|
|
return (
|
|
<StyledTableContainer>
|
|
<Table>
|
|
<TableHead>
|
|
<TableRow>
|
|
<TableCell proportion={0.5}>Title</TableCell>
|
|
<TableCell proportion={0.2}>Created</TableCell>
|
|
<TableCell proportion={0.2}>
|
|
{isTrash ? 'Moved to Trash' : 'Updated'}
|
|
</TableCell>
|
|
<TableCell proportion={0.1}></TableCell>
|
|
</TableRow>
|
|
</TableHead>
|
|
<TableBody>
|
|
{pageList.map((pageMeta, index) => {
|
|
return (
|
|
<StyledTableRow
|
|
key={`${pageMeta.id}-${index}`}
|
|
onClick={() => {
|
|
router.push(
|
|
`/workspace/${currentWorkspaceId}/${pageMeta.id}`
|
|
);
|
|
}}
|
|
>
|
|
<TableCell>
|
|
<StyledTitleWrapper>
|
|
<StyledTitleLink>
|
|
{pageMeta.mode === 'edgeless' ? (
|
|
<EdgelessIcon />
|
|
) : (
|
|
<PaperIcon />
|
|
)}
|
|
<Content ellipsis={true} color="inherit">
|
|
{pageMeta.title || 'Untitled'}
|
|
</Content>
|
|
</StyledTitleLink>
|
|
{showFavoriteTag && <FavoriteTag pageMeta={pageMeta} />}
|
|
</StyledTitleWrapper>
|
|
</TableCell>
|
|
<DateCell pageMeta={pageMeta} dateKey="createDate" />
|
|
<DateCell
|
|
pageMeta={pageMeta}
|
|
dateKey={isTrash ? 'trashDate' : 'updatedDate'}
|
|
backupKey={isTrash ? 'trashDate' : 'createDate'}
|
|
/>
|
|
<TableCell
|
|
style={{ padding: 0 }}
|
|
data-testid={`more-actions-${pageMeta.id}`}
|
|
onClick={e => {
|
|
e.stopPropagation();
|
|
}}
|
|
>
|
|
{isTrash ? (
|
|
<TrashOperationCell pageMeta={pageMeta} />
|
|
) : (
|
|
<OperationCell pageMeta={pageMeta} />
|
|
)}
|
|
</TableCell>
|
|
</StyledTableRow>
|
|
);
|
|
})}
|
|
</TableBody>
|
|
</Table>
|
|
</StyledTableContainer>
|
|
);
|
|
};
|
|
|
|
export default PageList;
|