Base model refactor (#810)
* Big upgrades * WIP: Stash * Stash, 30 flow errors left * Downgrade mobx * WIP * When I understand the difference between class and instance methods * 💚 * Fixes: File import Model saving edge cases pinning and starring docs Collection editing Upgrade mobx devtools * Notification settings saving works * Disabled settings * Document mailer * Working notifications * Colletion created notification Ensure not notified for own actions * Tidy up * Document updated event only for document creation Add indexes Notification setting on user creation * Commentary * Fixed: Notification setting on signup * Fix document move / duplicate stale data Add BaseModel.refresh method * Fixes: Title in sidebar not updated after editing document * 💚 * Improve / restore error handling Better handle offline errors * 👕
This commit is contained in:
@@ -1,3 +1,50 @@
|
||||
// @flow
|
||||
import BaseStore from 'stores/BaseStore';
|
||||
export default BaseStore;
|
||||
import { set, observable } from 'mobx';
|
||||
|
||||
export default class BaseModel {
|
||||
@observable id: string;
|
||||
@observable isSaving: boolean;
|
||||
store: *;
|
||||
|
||||
constructor(fields: Object, store: *) {
|
||||
set(this, fields);
|
||||
this.store = store;
|
||||
}
|
||||
|
||||
save = async params => {
|
||||
this.isSaving = true;
|
||||
|
||||
try {
|
||||
// ensure that the id is passed if the document has one
|
||||
if (params) params = { ...params, id: this.id };
|
||||
await this.store.save(params || this.toJS());
|
||||
|
||||
// if saving is successful set the new values on the model itself
|
||||
if (params) set(this, params);
|
||||
return this;
|
||||
} finally {
|
||||
this.isSaving = false;
|
||||
}
|
||||
};
|
||||
|
||||
fetch = (options: *) => {
|
||||
return this.store.fetch(this.id, options);
|
||||
};
|
||||
|
||||
refresh = () => {
|
||||
return this.fetch({ force: true });
|
||||
};
|
||||
|
||||
delete = async () => {
|
||||
this.isSaving = true;
|
||||
try {
|
||||
return await this.store.delete(this);
|
||||
} finally {
|
||||
this.isSaving = false;
|
||||
}
|
||||
};
|
||||
|
||||
toJS = () => {
|
||||
return { ...this };
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user