removed dependency on note tree widget from app context

This commit is contained in:
zadam 2020-02-07 20:56:49 +01:00
parent 62e1284790
commit 6d912c4897
9 changed files with 32 additions and 54 deletions

View File

@ -36,6 +36,7 @@ window.glob.isDesktop = utils.isDesktop;
window.glob.isMobile = utils.isMobile; window.glob.isMobile = utils.isMobile;
// required for CKEditor image upload plugin // required for CKEditor image upload plugin
// FIXME
window.glob.getActiveNode = () => appContext.getMainNoteTree().getActiveNode(); window.glob.getActiveNode = () => appContext.getMainNoteTree().getActiveNode();
window.glob.getHeaders = server.getHeaders; window.glob.getHeaders = server.getHeaders;
window.glob.showAddLinkDialog = () => import('./dialogs/add_link.js').then(d => d.showDialog()); window.glob.showAddLinkDialog = () => import('./dialogs/add_link.js').then(d => d.showDialog());

View File

@ -36,6 +36,7 @@ export async function showDialog(nodes) {
} }
async function moveNotesTo(notePath) { async function moveNotesTo(notePath) {
// FIXME
const targetNode = await appContext.getMainNoteTree().getNodeFromPath(notePath); const targetNode = await appContext.getMainNoteTree().getNodeFromPath(notePath);
await treeChangesService.moveToParentNote(movedNodes, targetNode); await treeChangesService.moveToParentNote(movedNodes, targetNode);

View File

@ -90,6 +90,7 @@ async function showTree() {
} }
$detail.on("click", ".note-menu-button", async e => { $detail.on("click", ".note-menu-button", async e => {
// FIXME
const node = appContext.getMainNoteTree().getActiveNode(); const node = appContext.getMainNoteTree().getActiveNode();
const branch = treeCache.getBranch(node.data.branchId); const branch = treeCache.getBranch(node.data.branchId);
const note = await treeCache.getNote(node.data.noteId); const note = await treeCache.getNote(node.data.noteId);

View File

@ -1,4 +1,3 @@
import NoteTreeWidget from "../widgets/note_tree.js";
import TabContext from "./tab_context.js"; import TabContext from "./tab_context.js";
import server from "./server.js"; import server from "./server.js";
import treeCache from "./tree_cache.js"; import treeCache from "./tree_cache.js";
@ -10,6 +9,7 @@ import utils from "./utils.js";
import treeService from "./tree.js"; import treeService from "./tree.js";
import ZoomService from "./zoom.js"; import ZoomService from "./zoom.js";
import Layout from "../widgets/layout.js"; import Layout from "../widgets/layout.js";
import SpacedUpdate from "./spaced_update.js";
class AppContext { class AppContext {
constructor(layout) { constructor(layout) {
@ -17,8 +17,17 @@ class AppContext {
this.components = []; this.components = [];
/** @type {TabContext[]} */ /** @type {TabContext[]} */
this.tabContexts = []; this.tabContexts = [];
this.tabsChangedTaskId = null;
this.activeTabId = null; this.activeTabId = null;
this.tabsUpdate = new SpacedUpdate(async () => {
const openTabs = this.tabContexts
.map(tc => tc.getTabState())
.filter(t => !!t);
await server.put('options', {
openTabs: JSON.stringify(openTabs)
});
});
} }
async start() { async start() {
@ -88,18 +97,16 @@ class AppContext {
filteredTabs[0].active = true; filteredTabs[0].active = true;
} }
for (const tab of filteredTabs) { this.tabsUpdate.allowUpdateWithoutChange(() => {
const tabContext = this.openEmptyTab(); for (const tab of filteredTabs) {
tabContext.setNote(tab.notePath); const tabContext = this.openEmptyTab();
tabContext.setNote(tab.notePath);
if (tab.active) { if (tab.active) {
this.activateTab(tabContext.tabId); this.activateTab(tabContext.tabId);
}
} }
} });
// previous opening triggered task to save tab changes but these are bogus changes (this is init)
// so we'll cancel it
this.clearOpenTabsTask();
} }
showWidgets() { showWidgets() {
@ -201,13 +208,6 @@ class AppContext {
await tabContext.setNote(notePath); await tabContext.setNote(notePath);
} }
/**
* @return {NoteTreeWidget}
*/
getMainNoteTree() {
return this.noteTreeWidget;
}
getTab(newTab, state) { getTab(newTab, state) {
if (!this.getActiveTabContext() || newTab) { if (!this.getActiveTabContext() || newTab) {
// if it's a new tab explicitly by user then it's in background // if it's a new tab explicitly by user then it's in background
@ -266,35 +266,8 @@ class AppContext {
this.saveOpenTabs(); this.saveOpenTabs();
} }
async saveOpenTabs() {
const openTabs = [];
for (const tabContext of this.tabContexts) {
const tabState = tabContext.getTabState();
if (tabState) {
openTabs.push(tabState);
}
}
await server.put('options', {
openTabs: JSON.stringify(openTabs)
});
}
clearOpenTabsTask() {
if (this.tabsChangedTaskId) {
clearTimeout(this.tabsChangedTaskId);
}
}
openTabsChangedListener() { openTabsChangedListener() {
// we don't want to send too many requests with tab changes so we always schedule task to do this in 1 seconds, this.tabsUpdate.scheduleUpdate();
// but if there's any change in between, we cancel the old one and schedule new one
// so effectively we kind of wait until user stopped e.g. quickly switching tabs
this.clearOpenTabsTask();
this.tabsChangedTaskId = setTimeout(() => this.saveOpenTabs(), 1000);
} }
activateTab(tabId) { activateTab(tabId) {

View File

@ -34,7 +34,7 @@ export default class DialogEventComponent extends Component {
} }
async cloneNotesToListener() { async cloneNotesToListener() {
// probably should not happen here // FIXME
const selectedOrActiveNodes = this.appContext.getMainNoteTree().getSelectedOrActiveNodes(); const selectedOrActiveNodes = this.appContext.getMainNoteTree().getSelectedOrActiveNodes();
const noteIds = selectedOrActiveNodes.map(node => node.data.noteId); const noteIds = selectedOrActiveNodes.map(node => node.data.noteId);
@ -44,6 +44,7 @@ export default class DialogEventComponent extends Component {
} }
async moveNotesToListener() { async moveNotesToListener() {
// FIXME
const selectedOrActiveNodes = this.appContext.getMainNoteTree().getSelectedOrActiveNodes(); const selectedOrActiveNodes = this.appContext.getMainNoteTree().getSelectedOrActiveNodes();
const d = await import("../dialogs/move_to.js"); const d = await import("../dialogs/move_to.js");
@ -51,6 +52,7 @@ export default class DialogEventComponent extends Component {
} }
async editBranchPrefixListener() { async editBranchPrefixListener() {
// FIXME
const node = this.appContext.getMainNoteTree().getActiveNode(); const node = this.appContext.getMainNoteTree().getActiveNode();
const editBranchPrefixDialog = await import("../dialogs/branch_prefix.js"); const editBranchPrefixDialog = await import("../dialogs/branch_prefix.js");

View File

@ -78,17 +78,17 @@ export default class Entrypoints extends Component {
} }
toggleNoteHoistingListener() { toggleNoteHoistingListener() {
const node = appContext.getMainNoteTree().getActiveNode(); const note = appContext.getActiveTabNote();
hoistedNoteService.getHoistedNoteId().then(async hoistedNoteId => { hoistedNoteService.getHoistedNoteId().then(async hoistedNoteId => {
if (node.data.noteId === hoistedNoteId) { if (note.noteId === hoistedNoteId) {
hoistedNoteService.unhoist(); hoistedNoteService.unhoist();
} }
else { else {
const note = await treeCache.getNote(node.data.noteId); const note = await treeCache.getNote(note.noteId);
if (note.type !== 'search') { if (note.type !== 'search') {
hoistedNoteService.setHoistedNoteId(node.data.noteId); hoistedNoteService.setHoistedNoteId(note.noteId);
} }
} }
}); });

View File

@ -17,6 +17,7 @@ const helpText = `
</p>`; </p>`;
async function refreshSearch() { async function refreshSearch() {
// FIXME
const activeNode = appContext.getMainNoteTree().getActiveNode(); const activeNode = appContext.getMainNoteTree().getActiveNode();
activeNode.load(true); activeNode.load(true);

View File

@ -35,8 +35,6 @@ export default class NoteTreeWidget extends TabAwareWidget {
window.glob.cutIntoNote = () => this.cutIntoNoteListener(); window.glob.cutIntoNote = () => this.cutIntoNoteListener();
this.appContext.noteTreeWidget = this;
this.tree = null; this.tree = null;
} }

View File

@ -107,6 +107,7 @@ export default class SearchBoxWidget extends BasicWidget {
return; return;
} }
// FIXME
let activeNode = appContext.getMainNoteTree().getActiveNode(); let activeNode = appContext.getMainNoteTree().getActiveNode();
const parentNote = await treeCache.getNote(activeNode.data.noteId); const parentNote = await treeCache.getNote(activeNode.data.noteId);