when resolving note path attempt to find one going through hoisted note

This commit is contained in:
zadam 2021-03-03 21:49:57 +01:00
parent f8c310eb8f
commit 73514a63d8
8 changed files with 634 additions and 191 deletions

793
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -54,7 +54,7 @@
"jsdom": "^16.4.0", "jsdom": "^16.4.0",
"mime-types": "2.1.29", "mime-types": "2.1.29",
"multer": "1.4.2", "multer": "1.4.2",
"node-abi": "2.19.3", "node-abi": "2.20.0",
"open": "7.4.2", "open": "7.4.2",
"portscanner": "2.2.0", "portscanner": "2.2.0",
"rand-token": "1.0.1", "rand-token": "1.0.1",
@ -78,8 +78,8 @@
}, },
"devDependencies": { "devDependencies": {
"cross-env": "7.0.3", "cross-env": "7.0.3",
"electron": "9.4.3", "electron": "9.4.4",
"electron-builder": "22.9.1", "electron-builder": "22.10.5",
"electron-packager": "15.2.0", "electron-packager": "15.2.0",
"electron-rebuild": "2.3.5", "electron-rebuild": "2.3.5",
"esm": "3.2.25", "esm": "3.2.25",
@ -87,7 +87,7 @@
"jsdoc": "3.6.6", "jsdoc": "3.6.6",
"lorem-ipsum": "2.0.3", "lorem-ipsum": "2.0.3",
"rcedit": "3.0.0", "rcedit": "3.0.0",
"webpack": "5.24.2", "webpack": "5.24.3",
"webpack-cli": "4.5.0" "webpack-cli": "4.5.0"
}, },
"optionalDependencies": { "optionalDependencies": {

View File

@ -542,7 +542,7 @@ class NoteShort {
}); });
} }
hasAncestor(ancestorNote, visitedNoteIds) { hasAncestor(ancestorNote, visitedNoteIds = null) {
if (this.noteId === ancestorNote.noteId) { if (this.noteId === ancestorNote.noteId) {
return true; return true;
} }

View File

@ -79,7 +79,7 @@ class TabContext extends Component {
return inputNotePath; return inputNotePath;
} }
const resolvedNotePath = await treeService.resolveNotePath(inputNotePath); const resolvedNotePath = await treeService.resolveNotePath(inputNotePath, this.hoistedNoteId);
if (!resolvedNotePath) { if (!resolvedNotePath) {
logError(`Cannot resolve note path ${inputNotePath}`); logError(`Cannot resolve note path ${inputNotePath}`);

View File

@ -205,7 +205,7 @@ export default class TabManager extends Component {
let hoistedNoteId = 'root'; let hoistedNoteId = 'root';
if (tabContext) { if (tabContext) {
const resolvedNotePath = await treeService.resolveNotePath(notePath); const resolvedNotePath = await treeService.resolveNotePath(notePath, tabContext.hoistedNoteId);
if (resolvedNotePath.includes(tabContext.hoistedNoteId)) { if (resolvedNotePath.includes(tabContext.hoistedNoteId)) {
hoistedNoteId = tabContext.hoistedNoteId; hoistedNoteId = tabContext.hoistedNoteId;

View File

@ -8,8 +8,8 @@ import appContext from "./app_context.js";
/** /**
* @return {string|null} * @return {string|null}
*/ */
async function resolveNotePath(notePath) { async function resolveNotePath(notePath, hoistedNoteId = 'root') {
const runPath = await resolveNotePathToSegments(notePath); const runPath = await resolveNotePathToSegments(notePath, hoistedNoteId);
return runPath ? runPath.join("/") : null; return runPath ? runPath.join("/") : null;
} }
@ -21,7 +21,7 @@ async function resolveNotePath(notePath) {
* *
* @return {string[]} * @return {string[]}
*/ */
async function resolveNotePathToSegments(notePath, logErrors = true) { async function resolveNotePathToSegments(notePath, hoistedNoteId = 'root', logErrors = true) {
utils.assertArguments(notePath); utils.assertArguments(notePath);
// we might get notePath with the tabId suffix, remove it if present // we might get notePath with the tabId suffix, remove it if present
@ -75,7 +75,11 @@ async function resolveNotePathToSegments(notePath, logErrors = true) {
console.log(utils.now(), `Did not find parent ${parentNoteId} (${parent ? parent.title : 'n/a'}) for child ${childNoteId} (${child.title}), available parents: ${parents.map(p => `${p.noteId} (${p.title})`)}`); console.log(utils.now(), `Did not find parent ${parentNoteId} (${parent ? parent.title : 'n/a'}) for child ${childNoteId} (${child.title}), available parents: ${parents.map(p => `${p.noteId} (${p.title})`)}`);
} }
const someNotePath = getSomeNotePath(parents[0]); const hoistedNote = await treeCache.getNote(hoistedNoteId);
const chosenParent = parents.find(parent => parent.hasAncestor(hoistedNote))
|| parents[0]; // if no parent is in hoisted subtree then it just doesn't matter and pick any
const someNotePath = getSomeNotePath(chosenParent);
if (someNotePath) { // in case it's root the path may be empty if (someNotePath) { // in case it's root the path may be empty
const pathToRoot = someNotePath.split("/").reverse(); const pathToRoot = someNotePath.split("/").reverse();

View File

@ -807,7 +807,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
/** @let {FancytreeNode} */ /** @let {FancytreeNode} */
let parentNode = this.getNodesByNoteId('root')[0]; let parentNode = this.getNodesByNoteId('root')[0];
const resolvedNotePathSegments = (await treeService.resolveNotePathToSegments(notePath, logErrors)) const resolvedNotePathSegments = (await treeService.resolveNotePathToSegments(notePath, this.hoistedNoteId, logErrors))
.slice(1); .slice(1);
if (!resolvedNotePathSegments) { if (!resolvedNotePathSegments) {

View File

@ -22,6 +22,10 @@ export default class TabAwareWidget extends BasicWidget {
return this.tabContext && this.tabContext.notePath; return this.tabContext && this.tabContext.notePath;
} }
get hoistedNoteId() {
return this.tabContext && this.tabContext.hoistedNoteId;
}
isEnabled() { isEnabled() {
return !!this.note; return !!this.note;
} }