Merge branch 'master' of https://github.com/toeverything/AFFiNE into feature/page-tree-code-style

This commit is contained in:
biqing.hu
2022-08-06 18:30:55 +08:00
145 changed files with 3653 additions and 1836 deletions

View File

@@ -13,7 +13,7 @@ const groupTemplateMap = {
grid: gridTemplate,
} as GroupTemplateMap;
const defaultTemplateList = [
const defaultTemplateList: Array<TemplateMeta> = [
{
name: 'New From Quick Start',
groupKeys: ['todolist'],
@@ -22,10 +22,10 @@ const defaultTemplateList = [
{ name: 'New From Blog', groupKeys: ['blog'] },
{ name: ' New Todolist', groupKeys: ['todolist'] },
{ name: ' New Empty Page', groupKeys: ['empty'] },
] as const;
];
const TemplateFactory = {
defaultTemplateList: defaultTemplateList,
defaultTemplateList,
generatePageTemplateByGroupKeys(props: TemplateMeta): Template {
const newTitle = props.name || 'Get Started with AFFiNE';
const keys: GroupTemplateKeys[] = props.groupKeys || [];

View File

@@ -3,43 +3,44 @@ import { ServiceBaseClass } from '../base';
import { ObserveCallback, ReturnUnobserve } from '../database';
import { PageTree } from './page-tree';
import { PageConfigItem } from './types';
import type { QueryIndexMetadata } from '@toeverything/datasource/jwt';
/** Operate the user configuration at the workspace level */
export class UserConfig extends ServiceBaseClass {
private async fetch_recent_pages(
private async _fetchRecentPages(
workspace: string
): Promise<Record<string, Array<PageConfigItem>>> {
const workspace_db_block = await this.getWorkspaceDbBlock(workspace);
const recent_work_pages =
workspace_db_block.getDecoration<
const workspaceDbBlock = await this.getWorkspaceDbBlock(workspace);
const recentWorkPages =
workspaceDbBlock.getDecoration<
Record<string, Array<PageConfigItem>>
>(RECENT_PAGES) || {};
return recent_work_pages;
return recentWorkPages;
}
private async save_recent_pages(
private async _saveRecentPages(
workspace: string,
recentPages: Record<string, Array<PageConfigItem>>
) {
const workspace_db_block = await this.getWorkspaceDbBlock(workspace);
workspace_db_block.setDecoration(RECENT_PAGES, recentPages);
const workspaceDbBlock = await this.getWorkspaceDbBlock(workspace);
workspaceDbBlock.setDecoration(RECENT_PAGES, recentPages);
}
async getUserInitialPage(
workspace: string,
userId: string
): Promise<string> {
const recent_pages = await this.getRecentPages(workspace, userId);
if (recent_pages.length > 0) {
return recent_pages[0].id;
const recentPages = await this.getRecentPages(workspace, userId);
if (recentPages.length > 0) {
return recentPages[0].id;
}
const db = await this.database.getDatabase(workspace);
const new_page = await db.get('page');
const newPage = await db.get('page');
await this.get_dependency(PageTree).addPage(workspace, new_page.id);
await this.addRecentPage(workspace, userId, new_page.id);
return new_page.id;
await this.get_dependency(PageTree).addPage(workspace, newPage.id);
await this.addRecentPage(workspace, userId, newPage.id);
return newPage.id;
}
async getRecentPages(
@@ -47,13 +48,10 @@ export class UserConfig extends ServiceBaseClass {
userId: string,
topNumber = 5
): Promise<PageConfigItem[]> {
const recent_work_pages = await this.fetch_recent_pages(workspace);
const recent_pages = (recent_work_pages[userId] || []).slice(
0,
topNumber
);
const recentWorkPages = await this._fetchRecentPages(workspace);
const recentPages = (recentWorkPages[userId] || []).slice(0, topNumber);
const db = await this.database.getDatabase(workspace);
for (const item of recent_pages) {
for (const item of recentPages) {
const page = await db.get(item.id as 'page');
item.title =
page
@@ -61,39 +59,39 @@ export class UserConfig extends ServiceBaseClass {
?.value?.map(v => v.text)
.join('') || 'Untitled';
}
return recent_pages;
return recentPages;
}
async addRecentPage(workspace: string, userId: string, pageId: string) {
const recent_work_pages = await this.fetch_recent_pages(workspace);
let recent_pages = recent_work_pages[userId] || [];
recent_pages = recent_pages.filter(item => item.id !== pageId);
recent_pages.unshift({
const recentWorkPages = await this._fetchRecentPages(workspace);
let recentPages = recentWorkPages[userId] || [];
recentPages = recentPages.filter(item => item.id !== pageId);
recentPages.unshift({
id: pageId,
lastOpenTime: Date.now(),
});
recent_work_pages[userId] = recent_pages;
await this.save_recent_pages(workspace, recent_work_pages);
recentWorkPages[userId] = recentPages;
await this._saveRecentPages(workspace, recentWorkPages);
}
async removePage(workspace: string, pageId: string) {
const recent_work_pages = await this.fetch_recent_pages(workspace);
for (const key in recent_work_pages) {
recent_work_pages[key] = recent_work_pages[key].filter(
const recentWorkPages = await this._fetchRecentPages(workspace);
for (const key in recentWorkPages) {
recentWorkPages[key] = recentWorkPages[key].filter(
item => item.id !== pageId
);
}
await this.save_recent_pages(workspace, recent_work_pages);
await this._saveRecentPages(workspace, recentWorkPages);
}
async observe(
{ workspace }: { workspace: string },
callback: ObserveCallback
): Promise<ReturnUnobserve> {
const workspace_db_block = await this.getWorkspaceDbBlock(workspace);
const workspaceDbBlock = await this.getWorkspaceDbBlock(workspace);
const unobserveWorkspace = await this._observe(
workspace,
workspace_db_block.id,
workspaceDbBlock.id,
(states, block) => {
callback(states, block);
}
@@ -105,24 +103,40 @@ export class UserConfig extends ServiceBaseClass {
}
async unobserve({ workspace }: { workspace: string }) {
const workspace_db_block = await this.getWorkspaceDbBlock(workspace);
await this._unobserve(workspace, workspace_db_block.id);
const workspaceDbBlock = await this.getWorkspaceDbBlock(workspace);
await this._unobserve(workspace, workspaceDbBlock.id);
}
async getWorkspaceName(workspace: string): Promise<string> {
const workspace_db_block = await this.getWorkspaceDbBlock(workspace);
const workspaceDbBlock = await this.getWorkspaceDbBlock(workspace);
const workspaceName =
workspace_db_block.getDecoration<string>(WORKSPACE_CONFIG) || '';
workspaceDbBlock.getDecoration<string>(WORKSPACE_CONFIG) || '';
return workspaceName;
}
async getWorkspaceId(workspace: string): Promise<string> {
const workspace_db_block = await this.getWorkspaceDbBlock(workspace);
return workspace_db_block.id;
const workspaceDbBlock = await this.getWorkspaceDbBlock(workspace);
return workspaceDbBlock.id;
}
async setWorkspaceName(workspace: string, workspaceName: string) {
const workspace_db_block = await this.getWorkspaceDbBlock(workspace);
workspace_db_block.setDecoration(WORKSPACE_CONFIG, workspaceName);
const workspaceDbBlock = await this.getWorkspaceDbBlock(workspace);
workspaceDbBlock.setDecoration(WORKSPACE_CONFIG, workspaceName);
}
async getRecentEditedPages(workspace: string) {
const db = await this.database.getDatabase(workspace);
const recentEditedPages =
(await db.queryBlocks({
$sort: 'lastUpdated',
$desc: false /* sort rule: true(default)(ASC), or false(DESC) */,
$limit: 4,
flavor: 'page',
} as QueryIndexMetadata)) || [];
return recentEditedPages.map(item => {
item['title'] = item.content || 'Untitled';
return item;
});
}
}