feat: select multiple notes in list

This commit is contained in:
Baptiste Grob
2021-04-06 18:09:40 +02:00
parent 9599f30ad4
commit 0f53361689
11 changed files with 354 additions and 273 deletions

View File

@@ -19,6 +19,7 @@ import { ActionsMenuState } from './actions_menu_state';
import { NoAccountWarningState } from './no_account_warning_state';
import { SyncState } from './sync_state';
import { SearchOptionsState } from './search_options_state';
import { NotesState } from './notes_state';
export enum AppStateEvent {
TagChanged,
@@ -62,7 +63,8 @@ export class AppState {
readonly actionsMenu = new ActionsMenuState();
readonly noAccountWarning: NoAccountWarningState;
readonly sync = new SyncState();
readonly searchOptions;
readonly searchOptions: SearchOptionsState;
readonly notes: NotesState;
isSessionsModalVisible = false;
private appEventObserverRemovers: (() => void)[] = [];
@@ -77,6 +79,12 @@ export class AppState {
this.$timeout = $timeout;
this.$rootScope = $rootScope;
this.application = application;
this.notes = new NotesState(
this.application,
async () => {
await this.notifyEvent(AppStateEvent.ActiveEditorChanged);
}
);
this.noAccountWarning = new NoAccountWarningState(
application,
this.appEventObserverRemovers
@@ -175,28 +183,6 @@ export class AppState {
}
}
async openEditor(noteUuid: string): Promise<void> {
if (this.getActiveEditor()?.note?.uuid === noteUuid) {
return;
}
const note = this.application.findItem(noteUuid) as SNNote;
if (!note) {
console.warn('Tried accessing a non-existant note of UUID ' + noteUuid);
return;
}
if (await this.application.authorizeNoteAccess(note)) {
const activeEditor = this.getActiveEditor();
if (!activeEditor) {
this.application.editorGroup.createEditor(noteUuid);
} else {
activeEditor.setNote(note);
}
await this.notifyEvent(AppStateEvent.ActiveEditorChanged);
}
}
getActiveEditor() {
return this.application.editorGroup.editors[0];
}

View File

@@ -0,0 +1,66 @@
import { KeyboardModifier } from "@/services/ioService";
import { UuidString, SNNote } from "@standardnotes/snjs";
import { makeObservable, observable, action } from "mobx";
import { WebApplication } from "../application";
import { Editor } from "../editor";
export class NotesState {
selectedNotes: Record<UuidString, SNNote> = {};
constructor(
private application: WebApplication,
private onActiveEditorChanged: () => Promise<void>
) {
makeObservable(this, {
selectedNotes: observable,
selectNote: action,
});
}
get activeEditor(): Editor | undefined {
return this.application.editorGroup.editors[0];
}
async selectNote(note: SNNote): Promise<void> {
if (
this.io.activeModifiers.has(KeyboardModifier.Meta) ||
this.io.activeModifiers.has(KeyboardModifier.Ctrl)
) {
this.selectedNotes[note.uuid] = note;
} else {
this.selectedNotes = {
[note.uuid]: note,
};
}
await this.openEditor(note.uuid);
}
async openEditor(noteUuid: string): Promise<void> {
if (this.activeEditor?.note?.uuid === noteUuid) {
return;
}
const note = this.application.findItem(noteUuid) as SNNote | undefined;
if (!note) {
console.warn('Tried accessing a non-existant note of UUID ' + noteUuid);
return;
}
if (await this.application.authorizeNoteAccess(note)) {
if (!this.activeEditor) {
this.application.editorGroup.createEditor(noteUuid);
} else {
this.activeEditor.setNote(note);
}
await this.onActiveEditorChanged();
if (note.waitingForKey) {
this.application.presentKeyRecoveryWizard();
}
}
}
private get io() {
return this.application.io;
}
}