This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
outline/app/stores/UiStore.js
Tom Moor 8cbcb77486 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

* 👕
2018-12-04 22:24:30 -08:00

99 lines
2.1 KiB
JavaScript

// @flow
import { observable, action } from 'mobx';
import Document from 'models/Document';
import Collection from 'models/Collection';
import type { Toast } from '../types';
class UiStore {
@observable activeModalName: ?string;
@observable activeModalProps: ?Object;
@observable activeDocumentId: ?string;
@observable activeCollectionId: ?string;
@observable progressBarVisible: boolean = false;
@observable editMode: boolean = false;
@observable mobileSidebarVisible: boolean = false;
@observable toasts: Toast[] = [];
@action
setActiveModal = (name: string, props: ?Object): void => {
this.activeModalName = name;
this.activeModalProps = props;
};
@action
clearActiveModal = (): void => {
this.activeModalName = undefined;
this.activeModalProps = undefined;
};
@action
setActiveDocument = (document: Document): void => {
this.activeDocumentId = document.id;
if (document.publishedAt) {
this.activeCollectionId = document.collectionId;
}
};
@action
setActiveCollection = (collection: Collection): void => {
this.activeCollectionId = collection.id;
};
@action
clearActiveCollection = (): void => {
this.activeCollectionId = undefined;
};
@action
clearActiveDocument = (): void => {
this.activeDocumentId = undefined;
this.activeCollectionId = undefined;
};
@action
enableEditMode() {
this.editMode = true;
}
@action
disableEditMode() {
this.editMode = false;
}
@action
enableProgressBar() {
this.progressBarVisible = true;
}
@action
disableProgressBar() {
this.progressBarVisible = false;
}
@action
toggleMobileSidebar() {
this.mobileSidebarVisible = !this.mobileSidebarVisible;
}
@action
hideMobileSidebar() {
this.mobileSidebarVisible = false;
}
@action
showToast = (
message: string,
type?: 'warning' | 'error' | 'info' | 'success' = 'success'
): void => {
this.toasts.push({ message, type });
};
@action
removeToast = (index: number): void => {
this.toasts.splice(index, 1);
};
}
export default UiStore;