feat(core): template-doc settings for user-worksapce scope (#9566)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
};
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
}
|
||||
}
|
||||
4
packages/frontend/core/src/modules/template-doc/type.ts
Normal file
4
packages/frontend/core/src/modules/template-doc/type.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export type TemplateDocSettings = {
|
||||
pageTemplateId?: string;
|
||||
journalTemplateId?: string;
|
||||
};
|
||||
Reference in New Issue
Block a user