mirror of
https://github.com/zadam/trilium.git
synced 2025-10-20 23:29:02 +02:00
feat(map): add mapIncludeRelation
and mapExcludeRelation
to include only or exclude specific relation types
This commit is contained in:
parent
06b507fdc5
commit
9d99da14e1
@ -324,7 +324,13 @@ export default class NoteMapWidget extends NoteContextAwareWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mapRootNoteId = this.getMapRootNoteId();
|
const mapRootNoteId = this.getMapRootNoteId();
|
||||||
const data = await this.loadNotesAndRelations(mapRootNoteId);
|
|
||||||
|
const labelValues = (name: string) => this.note?.getLabels(name).map(l => l.value) ?? [];
|
||||||
|
|
||||||
|
const excludeRelations = labelValues("mapExcludeRelation");
|
||||||
|
const includeRelations = labelValues("mapIncludeRelation");
|
||||||
|
|
||||||
|
const data = await this.loadNotesAndRelations(mapRootNoteId, excludeRelations, includeRelations);
|
||||||
|
|
||||||
const nodeLinkRatio = data.nodes.length / data.links.length;
|
const nodeLinkRatio = data.nodes.length / data.links.length;
|
||||||
const magnifiedRatio = Math.pow(nodeLinkRatio, 1.5);
|
const magnifiedRatio = Math.pow(nodeLinkRatio, 1.5);
|
||||||
@ -473,8 +479,10 @@ export default class NoteMapWidget extends NoteContextAwareWidget {
|
|||||||
ctx.restore();
|
ctx.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadNotesAndRelations(mapRootNoteId: string): Promise<NotesAndRelationsData> {
|
async loadNotesAndRelations(mapRootNoteId: string, excludeRelations: string[], includeRelations: string[]): Promise<NotesAndRelationsData> {
|
||||||
const resp = await server.post<PostNotesMapResponse>(`note-map/${mapRootNoteId}/${this.mapType}`);
|
const resp = await server.post<PostNotesMapResponse>(`note-map/${mapRootNoteId}/${this.mapType}`, {
|
||||||
|
excludeRelations, includeRelations
|
||||||
|
});
|
||||||
|
|
||||||
this.calculateNodeSizes(resp);
|
this.calculateNodeSizes(resp);
|
||||||
|
|
||||||
|
@ -110,6 +110,11 @@ function getLinkMap(req: Request) {
|
|||||||
const ignoreExcludeFromNoteMap = mapRootNote.isLabelTruthy("excludeFromNoteMap");
|
const ignoreExcludeFromNoteMap = mapRootNote.isLabelTruthy("excludeFromNoteMap");
|
||||||
let unfilteredNotes;
|
let unfilteredNotes;
|
||||||
|
|
||||||
|
const toSet = (data: unknown) => new Set<string>(data instanceof Array ? data : []);
|
||||||
|
|
||||||
|
const excludeRelations = toSet(req.body.excludeRelations);
|
||||||
|
const includeRelations = toSet(req.body.includeRelations);
|
||||||
|
|
||||||
if (mapRootNote.type === "search") {
|
if (mapRootNote.type === "search") {
|
||||||
// for search notes, we want to consider the direct search results only without the descendants
|
// for search notes, we want to consider the direct search results only without the descendants
|
||||||
unfilteredNotes = mapRootNote.getSearchResultNotes();
|
unfilteredNotes = mapRootNote.getSearchResultNotes();
|
||||||
@ -152,6 +157,10 @@ function getLinkMap(req: Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return !parentNote.getChildNotes().find((childNote) => childNote.noteId === rel.value);
|
return !parentNote.getChildNotes().find((childNote) => childNote.noteId === rel.value);
|
||||||
|
} else if (includeRelations.size != 0 && !includeRelations.has(rel.name)) {
|
||||||
|
return false;
|
||||||
|
} else if (excludeRelations.has(rel.name)) {
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user