mirror of
https://github.com/frappe/books.git
synced 2024-12-23 03:19:01 +00:00
incr: set crud observable, set update listeners
This commit is contained in:
parent
25dacea269
commit
9ebe35fe93
@ -9,9 +9,10 @@ import { DocValue, DocValueMap } from './types';
|
|||||||
|
|
||||||
export class DocHandler {
|
export class DocHandler {
|
||||||
fyo: Fyo;
|
fyo: Fyo;
|
||||||
|
models: ModelMap = {};
|
||||||
singles: SinglesMap = {};
|
singles: SinglesMap = {};
|
||||||
docs: Observable<DocMap> = new Observable();
|
docs: Observable<DocMap> = new Observable();
|
||||||
models: ModelMap = {};
|
observer: Observable<never> = new Observable();
|
||||||
|
|
||||||
constructor(fyo: Fyo) {
|
constructor(fyo: Fyo) {
|
||||||
this.fyo = fyo;
|
this.fyo = fyo;
|
||||||
@ -21,6 +22,7 @@ export class DocHandler {
|
|||||||
this.models = {};
|
this.models = {};
|
||||||
this.singles = {};
|
this.singles = {};
|
||||||
this.docs = new Observable();
|
this.docs = new Observable();
|
||||||
|
this.observer = new Observable();
|
||||||
}
|
}
|
||||||
|
|
||||||
purgeCache() {
|
purgeCache() {
|
||||||
|
@ -263,7 +263,7 @@ export class Doc extends Observable<DocValue | Doc[]> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const targetField = this.fieldMap[fieldname] as TargetField;
|
const targetField = this.fieldMap[fieldname] as TargetField;
|
||||||
const schema = this.fyo.db.schemaMap[targetField.target] as Schema;
|
const schema = this.fyo.schemaMap[targetField.target] as Schema;
|
||||||
const childDoc = new Doc(schema, data as DocValueMap, this.fyo);
|
const childDoc = new Doc(schema, data as DocValueMap, this.fyo);
|
||||||
return childDoc;
|
return childDoc;
|
||||||
}
|
}
|
||||||
@ -390,6 +390,7 @@ export class Doc extends Observable<DocValue | Doc[]> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._notInserted = false;
|
this._notInserted = false;
|
||||||
|
this.fyo.doc.observer.trigger(`load:${this.schemaName}`, this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadLinks() {
|
async loadLinks() {
|
||||||
@ -627,6 +628,7 @@ export class Doc extends Observable<DocValue | Doc[]> {
|
|||||||
}
|
}
|
||||||
this._notInserted = false;
|
this._notInserted = false;
|
||||||
await this.trigger('afterSync');
|
await this.trigger('afterSync');
|
||||||
|
this.fyo.doc.observer.trigger(`sync:${this.schemaName}`, this.name);
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,6 +638,7 @@ export class Doc extends Observable<DocValue | Doc[]> {
|
|||||||
await this.trigger('afterDelete');
|
await this.trigger('afterDelete');
|
||||||
|
|
||||||
this.fyo.telemetry.log(Verb.Deleted, this.schemaName);
|
this.fyo.telemetry.log(Verb.Deleted, this.schemaName);
|
||||||
|
this.fyo.doc.observer.trigger(`delete:${this.schemaName}`, this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
async _submitOrRevert(isSubmit: boolean) {
|
async _submitOrRevert(isSubmit: boolean) {
|
||||||
@ -652,10 +655,12 @@ export class Doc extends Observable<DocValue | Doc[]> {
|
|||||||
async submit() {
|
async submit() {
|
||||||
this.cancelled = false;
|
this.cancelled = false;
|
||||||
await this._submitOrRevert(true);
|
await this._submitOrRevert(true);
|
||||||
|
this.fyo.doc.observer.trigger(`submit:${this.schemaName}`, this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
async revert() {
|
async revert() {
|
||||||
await this._submitOrRevert(false);
|
await this._submitOrRevert(false);
|
||||||
|
this.fyo.doc.observer.trigger(`revert:${this.schemaName}`, this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
async rename(newName: string) {
|
async rename(newName: string) {
|
||||||
@ -663,6 +668,7 @@ export class Doc extends Observable<DocValue | Doc[]> {
|
|||||||
await this.fyo.db.rename(this.schemaName, this.name!, newName);
|
await this.fyo.db.rename(this.schemaName, this.name!, newName);
|
||||||
this.name = newName;
|
this.name = newName;
|
||||||
await this.trigger('afterRename');
|
await this.trigger('afterRename');
|
||||||
|
this.fyo.doc.observer.trigger(`rename:${this.schemaName}`, this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
async trigger(event: string, params?: unknown) {
|
async trigger(event: string, params?: unknown) {
|
||||||
|
@ -170,7 +170,12 @@ export default class Observable<T> {
|
|||||||
|
|
||||||
_addListener(type: EventType, event: string, listener: Function) {
|
_addListener(type: EventType, event: string, listener: Function) {
|
||||||
this._initLiseners(type, event);
|
this._initLiseners(type, event);
|
||||||
this[type].get(event)!.push(listener);
|
const list = this[type].get(event)!;
|
||||||
|
if (list.includes(listener)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
list.push(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
_initLiseners(type: EventType, event: string) {
|
_initLiseners(type: EventType, event: string) {
|
||||||
|
@ -107,14 +107,23 @@ export default {
|
|||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
await this.updateData();
|
await this.updateData();
|
||||||
/*
|
this.setUpdateListeners();
|
||||||
TODO: need to set callback incase that schema has data changes
|
|
||||||
fyo.db.on(`change:${this.schemaName}`, () => {
|
|
||||||
this.updateData();
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
setUpdateListeners() {
|
||||||
|
const listener = () => {
|
||||||
|
this.updateData();
|
||||||
|
};
|
||||||
|
|
||||||
|
if (fyo.schemaMap[this.schemaName].isSubmittable) {
|
||||||
|
fyo.doc.observer.on(`submit:${this.schemaName}`, listener);
|
||||||
|
fyo.doc.observer.on(`revert:${this.schemaName}`, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
fyo.doc.observer.on(`sync:${this.schemaName}`, listener);
|
||||||
|
fyo.doc.observer.on(`delete:${this.schemaName}`, listener);
|
||||||
|
fyo.doc.observer.on(`rename:${this.schemaName}`, listener);
|
||||||
|
},
|
||||||
openForm(doc) {
|
openForm(doc) {
|
||||||
if (this.listConfig.formRoute) {
|
if (this.listConfig.formRoute) {
|
||||||
routeTo(this.listConfig.formRoute(doc.name));
|
routeTo(this.listConfig.formRoute(doc.name));
|
||||||
|
Loading…
Reference in New Issue
Block a user