Skip to content

Commit 80da27a

Browse files
committed
feat: Add search functionality to node sidebar menu for filtering node types and categories
1 parent 36a0559 commit 80da27a

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

libs/app-canvas/src/app/components/node-sidebar-menu.tsx

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,13 +279,62 @@ export class NodeSidebarMenuComponent extends Component<
279279
class={`overflow-visible flex flex-col gap-2 relative pt-2 pb-2`}
280280
getElement={(element: HTMLElement) => {
281281
taskbar = element;
282+
renderElement(
283+
<div
284+
class={`sticky w-full top-0 max-w-[150px] flex flex-col pb-2 bg-slate-700 `}
285+
>
286+
<input
287+
type="text"
288+
input={(event: InputEvent) => {
289+
const value = (event.target as HTMLInputElement).value;
290+
if (taskbar) {
291+
taskbar
292+
.querySelectorAll('.taskbar__node-type')
293+
.forEach((node) => {
294+
if (node) {
295+
const title = node.getAttribute?.('title');
296+
if (title) {
297+
if (title.toLowerCase().includes(value)) {
298+
node.classList.remove('hidden');
299+
} else {
300+
node.classList.add('hidden');
301+
}
302+
}
303+
}
304+
});
305+
306+
taskbar
307+
.querySelectorAll('.taskbar__category')
308+
.forEach((node) => {
309+
if (node && taskbar) {
310+
const category = (node as HTMLElement).innerText;
311+
if (
312+
taskbar.querySelectorAll(
313+
`[data-category="${category}"]:not(.hidden)`
314+
).length > 0
315+
) {
316+
node.classList.remove('hidden');
317+
} else {
318+
node.classList.add('hidden');
319+
}
320+
}
321+
});
322+
}
323+
}}
324+
placeholder="Search"
325+
/>
326+
</div>,
327+
taskbar
328+
);
282329
sortedCategories.forEach((categoryName) => {
283330
const category = categorizedNodeTasks.get(categoryName);
284331
if (categoryName === 'deprecated') {
285332
return;
286333
}
287334
renderElement(
288-
<h2 class={`text-white py-2`}>{categoryName}</h2>,
335+
<h2 class={`text-white py-2 taskbar__category`}>
336+
{categoryName}
337+
</h2>,
289338
taskbar
290339
);
291340

@@ -296,7 +345,7 @@ export class NodeSidebarMenuComponent extends Component<
296345

297346
renderElement(
298347
<div
299-
class={`cursor-pointer
348+
class={`taskbar__node-type cursor-pointer
300349
bg-slate-500
301350
text-white
302351
rounded
@@ -307,6 +356,7 @@ export class NodeSidebarMenuComponent extends Component<
307356
this.startDragNode(event, taskbar, nodeTask.nodeType);
308357
}}
309358
title={label}
359+
data-category={categoryName}
310360
>
311361
{label}
312362
</div>,

0 commit comments

Comments
 (0)