Skip to content

Commit 1a2658b

Browse files
committed
updated filter
1 parent a5ddf73 commit 1a2658b

1 file changed

Lines changed: 35 additions & 6 deletions

File tree

apps/roam/src/components/canvas/Clipboard.tsx

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@ import { openBlockInSidebar, createBlock } from "roamjs-components/writes";
5656
import getPageTitleByPageUid from "roamjs-components/queries/getPageTitleByPageUid";
5757
import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle";
5858
import findDiscourseNode from "~/utils/findDiscourseNode";
59-
import getDiscourseNodes, {
60-
excludeDefaultNodes,
61-
} from "~/utils/getDiscourseNodes";
6259
import calcCanvasNodeSizeAndImg from "~/utils/calcCanvasNodeSizeAndImg";
6360
import { useExtensionAPI } from "roamjs-components/components/ExtensionApiContext";
6461
import { getDiscourseNodeColors } from "~/utils/getDiscourseNodeColors";
@@ -432,13 +429,15 @@ const ClipboardPageSection = ({
432429
searchQuery,
433430
sortDirection,
434431
selectedNodeType,
432+
onNodeTypesChange,
435433
}: {
436434
page: ClipboardPage;
437435
onRemove: (uid: string) => void;
438436
showNodesOnCanvas: boolean;
439437
searchQuery: string;
440438
sortDirection: "asc" | "desc";
441439
selectedNodeType: string;
440+
onNodeTypesChange: (pageUid: string, types: string[]) => void;
442441
}) => {
443442
const [isOpen, setIsOpen] = useState(true);
444443
const [discourseNodes, setDiscourseNodes] = useState<
@@ -591,6 +590,14 @@ const ClipboardPageSection = ({
591590
],
592591
);
593592

593+
useEffect(() => {
594+
const candidateNodes = showNodesOnCanvas
595+
? groupedNodes
596+
: groupedNodes.filter((n) => n.shapes.length === 0);
597+
const types = [...new Set(candidateNodes.map((n) => n.type))];
598+
onNodeTypesChange(page.uid, types);
599+
}, [groupedNodes, page.uid, onNodeTypesChange, showNodesOnCanvas]);
600+
594601
useEffect(() => {
595602
setOpenSections((prev) => {
596603
const next: Record<string, boolean> = {};
@@ -1132,11 +1139,32 @@ export const ClipboardPanel = () => {
11321139
const [isSearchExpanded, setIsSearchExpanded] = useState(false);
11331140
const [sortDirection, setSortDirection] = useState<"asc" | "desc">("asc");
11341141
const [selectedNodeType, setSelectedNodeType] = useState("All");
1142+
const [nodeTypesByPage, setNodeTypesByPage] = useState<
1143+
Record<string, string[]>
1144+
>({});
1145+
1146+
const handleNodeTypesChange = useCallback(
1147+
(pageUid: string, types: string[]) => {
1148+
setNodeTypesByPage((prev) => ({ ...prev, [pageUid]: types }));
1149+
},
1150+
[],
1151+
);
11351152

11361153
const availableNodeTypes = useMemo(() => {
1137-
const types = getDiscourseNodes().filter(excludeDefaultNodes);
1138-
return ["All", ...types.map((t) => t.text)];
1139-
}, []);
1154+
const pageUids = new Set(pages.map((p) => p.uid));
1155+
const allTypes = new Set(
1156+
Object.entries(nodeTypesByPage)
1157+
.filter(([uid]) => pageUids.has(uid))
1158+
.flatMap(([, types]) => types),
1159+
);
1160+
return ["All", ...Array.from(allTypes).sort()];
1161+
}, [nodeTypesByPage, pages]);
1162+
1163+
useEffect(() => {
1164+
if (selectedNodeType !== "All" && !availableNodeTypes.includes(selectedNodeType)) {
1165+
setSelectedNodeType("All");
1166+
}
1167+
}, [availableNodeTypes, selectedNodeType]);
11401168

11411169
const hasActiveFilters = !!searchQuery || selectedNodeType !== "All";
11421170

@@ -1330,6 +1358,7 @@ export const ClipboardPanel = () => {
13301358
searchQuery={searchQuery}
13311359
sortDirection={sortDirection}
13321360
selectedNodeType={selectedNodeType}
1361+
onNodeTypesChange={handleNodeTypesChange}
13331362
/>
13341363
))}
13351364
</div>

0 commit comments

Comments
 (0)