fix(collections/list): archived notes always shown in sub-children (closes #8127)

This commit is contained in:
Elian Doran 2025-12-24 13:28:26 +02:00
parent 3207f37ac3
commit 4ac3634b04
No known key found for this signature in database
2 changed files with 23 additions and 14 deletions

View File

@ -8,7 +8,7 @@ import content_renderer from "../../../services/content_renderer";
import { t } from "../../../services/i18n";
import link from "../../../services/link";
import tree from "../../../services/tree";
import { useImperativeSearchHighlighlighting, useNoteLabel } from "../../react/hooks";
import { useImperativeSearchHighlighlighting, useNoteLabel, useNoteLabelBoolean } from "../../react/hooks";
import Icon from "../../react/Icon";
import NoteLink from "../../react/NoteLink";
import { ViewModeProps } from "../interface";
@ -19,6 +19,7 @@ export function ListView({ note, noteIds: unfilteredNoteIds, highlightedTokens }
const expandDepth = useExpansionDepth(note);
const noteIds = useFilteredNoteIds(note, unfilteredNoteIds);
const { pageNotes, ...pagination } = usePagination(note, noteIds);
const [ includeArchived ] = useNoteLabelBoolean(note, "includeArchived");
return (
<div class="note-list list-view">
@ -27,7 +28,11 @@ export function ListView({ note, noteIds: unfilteredNoteIds, highlightedTokens }
<div class="note-list-container use-tn-links">
{pageNotes?.map(childNote => (
<ListNoteCard note={childNote} parentNote={note} expandDepth={expandDepth} highlightedTokens={highlightedTokens} currentLevel={1} />
<ListNoteCard
key={childNote.noteId}
note={childNote} parentNote={note}
expandDepth={expandDepth} highlightedTokens={highlightedTokens}
currentLevel={1} includeArchived={includeArchived} />
))}
</div>
@ -58,12 +63,13 @@ export function GridView({ note, noteIds: unfilteredNoteIds, highlightedTokens }
);
}
function ListNoteCard({ note, parentNote, highlightedTokens, currentLevel, expandDepth }: {
function ListNoteCard({ note, parentNote, highlightedTokens, currentLevel, expandDepth, includeArchived }: {
note: FNote,
parentNote: FNote,
currentLevel: number,
expandDepth: number,
highlightedTokens: string[] | null | undefined
highlightedTokens: string[] | null | undefined;
includeArchived: boolean;
}) {
const [ isExpanded, setExpanded ] = useState(currentLevel <= expandDepth);
@ -90,7 +96,7 @@ function ListNoteCard({ note, parentNote, highlightedTokens, currentLevel, expan
{isExpanded && <>
<NoteContent note={note} highlightedTokens={highlightedTokens} noChildrenList />
<NoteChildren note={note} parentNote={parentNote} highlightedTokens={highlightedTokens} currentLevel={currentLevel} expandDepth={expandDepth} />
<NoteChildren note={note} parentNote={parentNote} highlightedTokens={highlightedTokens} currentLevel={currentLevel} expandDepth={expandDepth} includeArchived={includeArchived} />
</>}
</div>
);
@ -169,24 +175,26 @@ function NoteContent({ note, trim, noChildrenList, highlightedTokens }: { note:
return <div ref={contentRef} className="note-book-content" />;
}
function NoteChildren({ note, parentNote, highlightedTokens, currentLevel, expandDepth }: {
function NoteChildren({ note, parentNote, highlightedTokens, currentLevel, expandDepth, includeArchived }: {
note: FNote,
parentNote: FNote,
currentLevel: number,
expandDepth: number,
highlightedTokens: string[] | null | undefined
includeArchived: boolean;
}) {
const [ childNotes, setChildNotes ] = useState<FNote[]>();
useEffect(() => {
filterChildNotes(note).then(setChildNotes);
}, [ note ]);
filterChildNotes(note, includeArchived).then(setChildNotes);
}, [ note, includeArchived ]);
return childNotes?.map(childNote => <ListNoteCard
note={childNote}
parentNote={parentNote}
highlightedTokens={highlightedTokens}
currentLevel={currentLevel + 1} expandDepth={expandDepth}
includeArchived={includeArchived}
/>);
}
@ -194,9 +202,9 @@ function getNotePath(parentNote: FNote, childNote: FNote) {
if (parentNote.type === "search") {
// for search note parent, we want to display a non-search path
return childNote.noteId;
}
}
return `${parentNote.noteId}/${childNote.noteId}`;
}
function useExpansionDepth(note: FNote) {
@ -208,7 +216,7 @@ function useExpansionDepth(note: FNote) {
return 1;
} else if (expandDepth === "all") {
return Number.MAX_SAFE_INTEGER;
}
}
return parseInt(expandDepth, 10);
}

View File

@ -1,4 +1,5 @@
import { useMemo } from "preact/hooks";
import FNote from "../../../entities/fnote";
/**
@ -12,9 +13,9 @@ export function useFilteredNoteIds(note: FNote, noteIds: string[]) {
}, [ note, noteIds ]);
}
export async function filterChildNotes(note: FNote) {
export async function filterChildNotes(note: FNote, includeArchived = true) {
const imageLinks = note.getRelations("imageLink");
const imageLinkNoteIds = new Set(imageLinks.map(rel => rel.value));
const childNotes = await note.getChildNotes();
return childNotes.filter((childNote) => !imageLinkNoteIds.has(childNote.noteId));
return childNotes.filter((childNote) => !imageLinkNoteIds.has(childNote.noteId) && (includeArchived || !childNote.isArchived));
}