feat: new collections (#4530)

Co-authored-by: Peng Xiao <pengxiao@outlook.com>
This commit is contained in:
3720
2023-10-27 17:06:59 +08:00
committed by GitHub
parent 9fc0152cb1
commit ef8024c657
133 changed files with 8382 additions and 3743 deletions

View File

@@ -14,7 +14,9 @@ export type LiteralValue =
| number
| string
| boolean
| { [K: string]: LiteralValue }
| {
[K: string]: LiteralValue;
}
| Array<LiteralValue>;
export const refSchema: z.ZodType<Ref, z.ZodTypeDef> = z.object({
@@ -48,15 +50,31 @@ export type Filter = z.input<typeof filterSchema>;
export const collectionSchema = z.object({
id: z.string(),
workspaceId: z.string(),
name: z.string(),
pinned: z.boolean().optional(),
mode: z.union([z.literal('page'), z.literal('rule')]),
filterList: z.array(filterSchema),
allowList: z.array(z.string()).optional(),
excludeList: z.array(z.string()).optional(),
allowList: z.array(z.string()),
// page id list
pages: z.array(z.string()),
});
export const deletedCollectionSchema = z.object({
userId: z.string().optional(),
userName: z.string(),
collection: collectionSchema,
});
export type DeprecatedCollection = {
id: string;
name: string;
workspaceId: string;
filterList: z.infer<typeof filterSchema>[];
allowList?: string[];
};
export type Collection = z.input<typeof collectionSchema>;
export type DeleteCollectionInfo = {
userId: string;
userName: string;
} | null;
export type DeletedCollection = z.input<typeof deletedCollectionSchema>;
export const tagSchema = z.object({
id: z.string(),

View File

@@ -8,10 +8,9 @@ import type {
import type { PropsWithChildren, ReactNode } from 'react';
import type { DataSourceAdapter } from 'y-provider';
import type { Collection } from './filter.js';
export enum WorkspaceSubPath {
ALL = 'all',
Collection = 'collection',
SETTING = 'setting',
TRASH = 'trash',
SHARED = 'shared',
@@ -137,6 +136,7 @@ type UIBaseProps<_Flavour extends keyof WorkspaceRegistry> = {
export type WorkspaceHeaderProps<Flavour extends keyof WorkspaceRegistry> =
UIBaseProps<Flavour> & {
rightSlot?: ReactNode;
currentEntry:
| {
subPath: WorkspaceSubPath;
@@ -167,20 +167,12 @@ type PageDetailProps<Flavour extends keyof WorkspaceRegistry> =
onLoadEditor: (page: Page, editor: EditorContainer) => () => void;
};
type PageListProps<_Flavour extends keyof WorkspaceRegistry> = {
blockSuiteWorkspace: BlockSuiteWorkspace;
onOpenPage: (pageId: string, newTab?: boolean) => void;
collection: Collection;
};
interface FC<P> {
(props: P): ReactNode;
}
export interface WorkspaceUISchema<Flavour extends keyof WorkspaceRegistry> {
Header: FC<WorkspaceHeaderProps<Flavour>>;
PageDetail: FC<PageDetailProps<Flavour>>;
PageList: FC<PageListProps<Flavour>>;
NewSettingsDetail: FC<NewSettingProps<Flavour>>;
Provider: FC<PropsWithChildren>;
LoginCard?: FC<object>;