Skip to content

Commit 45ed477

Browse files
committed
updated filter
1 parent 27923b7 commit 45ed477

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> = {};
@@ -1133,11 +1140,32 @@ export const ClipboardPanel = () => {
11331140
const [isSearchExpanded, setIsSearchExpanded] = useState(false);
11341141
const [sortDirection, setSortDirection] = useState<"asc" | "desc">("asc");
11351142
const [selectedNodeType, setSelectedNodeType] = useState("All");
1143+
const [nodeTypesByPage, setNodeTypesByPage] = useState<
1144+
Record<string, string[]>
1145+
>({});
1146+
1147+
const handleNodeTypesChange = useCallback(
1148+
(pageUid: string, types: string[]) => {
1149+
setNodeTypesByPage((prev) => ({ ...prev, [pageUid]: types }));
1150+
},
1151+
[],
1152+
);
11361153

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

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

@@ -1331,6 +1359,7 @@ export const ClipboardPanel = () => {
13311359
searchQuery={searchQuery}
13321360
sortDirection={sortDirection}
13331361
selectedNodeType={selectedNodeType}
1362+
onNodeTypesChange={handleNodeTypesChange}
13341363
/>
13351364
))}
13361365
</div>

0 commit comments

Comments
 (0)