chore: rename editor model to note controller
This commit is contained in:
84
app/assets/javascripts/ui_models/note_controller_group.ts
Normal file
84
app/assets/javascripts/ui_models/note_controller_group.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import { removeFromArray, UuidString } from '@standardnotes/snjs';
|
||||
import { NoteController } from './note_controller';
|
||||
import { WebApplication } from './application';
|
||||
|
||||
type NoteControllerGroupChangeCallback = () => void;
|
||||
|
||||
export class NoteControllerGroup {
|
||||
public noteControllers: NoteController[] = [];
|
||||
private application: WebApplication;
|
||||
changeObservers: NoteControllerGroupChangeCallback[] = [];
|
||||
|
||||
constructor(application: WebApplication) {
|
||||
this.application = application;
|
||||
}
|
||||
|
||||
public deinit() {
|
||||
(this.application as unknown) = undefined;
|
||||
for (const controller of this.noteControllers) {
|
||||
this.deleteController(controller);
|
||||
}
|
||||
}
|
||||
|
||||
async createNoteController(
|
||||
noteUuid?: string,
|
||||
noteTitle?: string,
|
||||
noteTag?: UuidString
|
||||
) {
|
||||
const controller = new NoteController(
|
||||
this.application,
|
||||
noteUuid,
|
||||
noteTitle,
|
||||
noteTag
|
||||
);
|
||||
await controller.initialize();
|
||||
this.noteControllers.push(controller);
|
||||
this.notifyObservers();
|
||||
}
|
||||
|
||||
deleteController(controller: NoteController) {
|
||||
controller.deinit();
|
||||
removeFromArray(this.noteControllers, controller);
|
||||
}
|
||||
|
||||
closeController(controller: NoteController) {
|
||||
this.deleteController(controller);
|
||||
this.notifyObservers();
|
||||
}
|
||||
|
||||
closeActiveController() {
|
||||
const activeController = this.activeNoteController;
|
||||
if (activeController) {
|
||||
this.deleteController(activeController);
|
||||
}
|
||||
}
|
||||
|
||||
closeAllControllers() {
|
||||
for (const controller of this.noteControllers) {
|
||||
this.deleteController(controller);
|
||||
}
|
||||
}
|
||||
|
||||
get activeNoteController() {
|
||||
return this.noteControllers[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies observer when the active controller has changed.
|
||||
*/
|
||||
public addChangeObserver(callback: NoteControllerGroupChangeCallback) {
|
||||
this.changeObservers.push(callback);
|
||||
if (this.activeNoteController) {
|
||||
callback();
|
||||
}
|
||||
return () => {
|
||||
removeFromArray(this.changeObservers, callback);
|
||||
};
|
||||
}
|
||||
|
||||
private notifyObservers() {
|
||||
for (const observer of this.changeObservers) {
|
||||
observer();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user