diff --git a/apps/client/src/widgets/collections/board/card.tsx b/apps/client/src/widgets/collections/board/card.tsx index 165eccc75..ffd3d0b67 100644 --- a/apps/client/src/widgets/collections/board/card.tsx +++ b/apps/client/src/widgets/collections/board/card.tsx @@ -26,6 +26,7 @@ export default function Card({ const isEditing = branch.branchId === branchIdToEdit; const colorClass = note.getColorClass() || ''; const editorRef = useRef(null); + const isArchived = note.isArchived; const [ title, setTitle ] = useState(note.title); const handleDragStart = useCallback((e: DragEvent) => { @@ -61,7 +62,7 @@ export default function Card({ return (
; -export async function getBoardData(parentNote: FNote, groupByColumn: string, persistedData: BoardViewData) { +export async function getBoardData(parentNote: FNote, groupByColumn: string, persistedData: BoardViewData, includeArchived: boolean) { const byColumn: ColumnMap = new Map(); // First, scan all notes to find what columns actually exist - await recursiveGroupBy(parentNote.getChildBranches(), byColumn, groupByColumn); + await recursiveGroupBy(parentNote.getChildBranches(), byColumn, groupByColumn, includeArchived); // Get all columns that exist in the notes const columnsFromNotes = [...byColumn.keys()]; @@ -61,13 +61,13 @@ export async function getBoardData(parentNote: FNote, groupByColumn: string, per }; } -async function recursiveGroupBy(branches: FBranch[], byColumn: ColumnMap, groupByColumn: string) { +async function recursiveGroupBy(branches: FBranch[], byColumn: ColumnMap, groupByColumn: string, includeArchived: boolean) { for (const branch of branches) { const note = await branch.getNote(); - if (!note || note.isArchived) continue; + if (!note || (!includeArchived && note.isArchived)) continue; if (note.hasChildren()) { - await recursiveGroupBy(note.getChildBranches(), byColumn, groupByColumn); + await recursiveGroupBy(note.getChildBranches(), byColumn, groupByColumn, includeArchived); } const group = note.getLabelValue(groupByColumn); diff --git a/apps/client/src/widgets/collections/board/index.css b/apps/client/src/widgets/collections/board/index.css index 054ab82a7..fa259ccb4 100644 --- a/apps/client/src/widgets/collections/board/index.css +++ b/apps/client/src/widgets/collections/board/index.css @@ -132,6 +132,10 @@ transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.15s ease, margin-top 0.2s ease; } +.board-view-container .board-note.archived { + opacity: 0.5; +} + .board-view-container .board-note .icon { margin-right: 0.25em; display: inline; diff --git a/apps/client/src/widgets/collections/board/index.tsx b/apps/client/src/widgets/collections/board/index.tsx index 2dc71b647..765ffb1f8 100644 --- a/apps/client/src/widgets/collections/board/index.tsx +++ b/apps/client/src/widgets/collections/board/index.tsx @@ -2,7 +2,7 @@ import { Dispatch, StateUpdater, useCallback, useEffect, useMemo, useRef, useSta import { ViewModeProps } from "../interface"; import "./index.css"; import { ColumnMap, getBoardData } from "./data"; -import { useNoteLabelWithDefault, useTriliumEvent } from "../../react/hooks"; +import { useNoteLabelBoolean, useNoteLabelWithDefault, useTriliumEvent } from "../../react/hooks"; import Icon from "../../react/Icon"; import { t } from "../../../services/i18n"; import Api from "./api"; @@ -41,6 +41,7 @@ export const BoardViewContext = createContext({}); export default function BoardView({ note: parentNote, noteIds, viewConfig, saveConfig }: ViewModeProps) { const [ statusAttribute ] = useNoteLabelWithDefault(parentNote, "board:groupBy", "status"); + const [ includeArchived ] = useNoteLabelBoolean(parentNote, "includeArchived"); const [ byColumn, setByColumn ] = useState(); const [ columns, setColumns ] = useState(); const [ draggedCard, setDraggedCard ] = useState<{ noteId: string, branchId: string, fromColumn: string, index: number } | null>(null); @@ -72,7 +73,7 @@ export default function BoardView({ note: parentNote, noteIds, viewConfig, saveC ]); function refresh() { - getBoardData(parentNote, statusAttribute, viewConfig ?? {}).then(({ byColumn, newPersistedData }) => { + getBoardData(parentNote, statusAttribute, viewConfig ?? {}, includeArchived).then(({ byColumn, newPersistedData }) => { setByColumn(byColumn); if (newPersistedData) {