feat(core): template-doc settings for user-worksapce scope (#9566)

This commit is contained in:
CatsJuice
2025-01-14 02:10:34 +00:00
parent 10196f6785
commit 57b89b5ad4
11 changed files with 237 additions and 46 deletions

View File

@@ -1,12 +1,22 @@
import { Entity } from '@toeverything/infra';
export type TemplateDocSettings = {
templateId?: string;
journalTemplateId?: string;
};
import type { TemplateDocSettingStore } from '../store/setting';
export class TemplateDocSetting extends Entity {
constructor() {
constructor(private readonly store: TemplateDocSettingStore) {
super();
}
loading$ = this.store.watchIsLoading();
setting$ = this.store.watchSetting();
pageTemplateDocId$ = this.store.watchSettingKey('pageTemplateId');
journalTemplateDocId$ = this.store.watchSettingKey('journalTemplateId');
updatePageTemplateDocId(id?: string) {
this.store.updateSetting('pageTemplateId', id);
}
updateJournalTemplateDocId(id?: string) {
this.store.updateSetting('journalTemplateId', id);
}
}

View File

@@ -7,6 +7,7 @@ import { TemplateDocList } from './entities/list';
import { TemplateDocSetting } from './entities/setting';
import { TemplateDocService } from './services/template-doc';
import { TemplateDocListStore } from './store/list';
import { TemplateDocSettingStore } from './store/setting';
export { TemplateDocService };
export * from './view/template-list-menu';
@@ -17,5 +18,6 @@ export const configureTemplateDocModule = (framework: Framework) => {
.service(TemplateDocService)
.store(TemplateDocListStore, [WorkspaceDBService])
.entity(TemplateDocList, [TemplateDocListStore, DocsService])
.entity(TemplateDocSetting);
.store(TemplateDocSettingStore, [WorkspaceDBService])
.entity(TemplateDocSetting, [TemplateDocSettingStore]);
};

View File

@@ -0,0 +1,47 @@
import { LiveData, Store } from '@toeverything/infra';
import type { WorkspaceDBService } from '../../db';
import type { TemplateDocSettings } from '../type';
export class TemplateDocSettingStore extends Store {
private readonly key = 'templateDoc';
constructor(private readonly dbService: WorkspaceDBService) {
super();
}
watchIsLoading() {
return this.dbService.userdataDB$
.map(db => LiveData.from(db.settings.isLoading$, false))
.flat();
}
watchSetting() {
return this.dbService.userdataDB$
.map(db => LiveData.from(db.settings.find$({ key: this.key }), []))
.flat()
.map(raw => raw?.[0]?.value as TemplateDocSettings);
}
watchSettingKey<T extends keyof TemplateDocSettings>(key: T) {
return this.dbService.userdataDB$
.map(db => LiveData.from(db.settings.find$({ key: this.key }), []))
.flat()
.map(raw => {
const value = raw?.[0]?.value as TemplateDocSettings;
if (!value) return undefined;
return value[key];
});
}
updateSetting<T extends keyof TemplateDocSettings>(
key: T,
value: TemplateDocSettings[T]
) {
const db = this.dbService.userdataDB$.value;
const prev = db.settings.find({ key: this.key })[0]?.value ?? {};
db.settings.update(this.key, {
value: { ...prev, [key]: value },
});
}
}

View File

@@ -0,0 +1,4 @@
export type TemplateDocSettings = {
pageTemplateId?: string;
journalTemplateId?: string;
};