* 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 * 👕
51 lines
1.0 KiB
JavaScript
51 lines
1.0 KiB
JavaScript
// @flow
|
|
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 };
|
|
};
|
|
}
|