diff --git a/src/components/common/TreeExplorer.vue b/src/components/common/TreeExplorer.vue index 1db78e4a6..710fa07f7 100644 --- a/src/components/common/TreeExplorer.vue +++ b/src/components/common/TreeExplorer.vue @@ -70,7 +70,7 @@ const renderedRoots = computed(() => { }) const getTreeNodeIcon = (node: TreeExplorerNode) => { if (node.getIcon) { - const icon = node.getIcon(node) + const icon = node.getIcon() if (icon) { return icon } @@ -95,7 +95,7 @@ const fillNodeInfo = (node: TreeExplorerNode): RenderedTreeExplorerNode => { children, type: node.leaf ? 'node' : 'folder', totalLeaves, - badgeText: node.getBadgeText ? node.getBadgeText(node) : null + badgeText: node.getBadgeText ? node.getBadgeText() : null } } const onNodeContentClick = async ( @@ -106,7 +106,7 @@ const onNodeContentClick = async ( selectionKeys.value = {} } if (node.handleClick) { - await node.handleClick(node, e) + await node.handleClick(e) } emit('nodeClick', node, e) } @@ -128,7 +128,7 @@ const renameCommand = (node: RenderedTreeExplorerNode) => { renameEditingNode.value = node } const deleteCommand = async (node: RenderedTreeExplorerNode) => { - await node.handleDelete?.(node) + await node.handleDelete?.() emit('nodeDelete', node) } const menuItems = computed(() => diff --git a/src/components/common/TreeExplorerTreeNode.vue b/src/components/common/TreeExplorerTreeNode.vue index e9aab7df5..bbb86e413 100644 --- a/src/components/common/TreeExplorerTreeNode.vue +++ b/src/components/common/TreeExplorerTreeNode.vue @@ -83,7 +83,7 @@ const isEditing = computed( const errorHandling = useErrorHandling() const handleRename = errorHandling.wrapWithErrorHandlingAsync( async (newName: string) => { - await props.node.handleRename(props.node, newName) + await props.node.handleRename(newName) }, props.node.handleError, () => { @@ -110,7 +110,7 @@ if (props.node.draggable) { ? ({ nativeSetDragImage }) => { setCustomNativeDragPreview({ render: ({ container }) => { - return props.node.renderDragPreview(props.node, container) + return props.node.renderDragPreview(container) }, nativeSetDragImage }) @@ -124,7 +124,7 @@ if (props.node.droppable) { onDrop: async (event) => { const dndData = event.source.data as TreeExplorerDragAndDropData if (dndData.type === 'tree-explorer-node') { - await props.node.handleDrop?.(props.node, dndData) + await props.node.handleDrop?.(dndData) canDrop.value = false emit('itemDropped', props.node, dndData.data) } diff --git a/src/components/sidebar/tabs/ModelLibrarySidebarTab.vue b/src/components/sidebar/tabs/ModelLibrarySidebarTab.vue index 448431d02..ef33f8156 100644 --- a/src/components/sidebar/tabs/ModelLibrarySidebarTab.vue +++ b/src/components/sidebar/tabs/ModelLibrarySidebarTab.vue @@ -64,10 +64,7 @@ import { } from '@/stores/modelStore' import { useModelToNodeStore } from '@/stores/modelToNodeStore' import { useSettingStore } from '@/stores/settingStore' -import type { - RenderedTreeExplorerNode, - TreeExplorerNode -} from '@/types/treeExplorerTypes' +import type { TreeExplorerNode } from '@/types/treeExplorerTypes' import { isElectron } from '@/utils/envUtil' import { buildTree } from '@/utils/treeUtil' @@ -126,7 +123,7 @@ const renderedRoot = computed>(() => { : node.label, leaf: node.leaf, data: node.data, - getIcon: () => { + getIcon() { if (model) { return model.image ? 'pi pi-image' : 'pi pi-file' } @@ -137,7 +134,7 @@ const renderedRoot = computed>(() => { } return 'pi pi-folder' }, - getBadgeText: () => { + getBadgeText() { // Return null to apply default badge text // Return empty string to hide badge if (!folder) { @@ -147,11 +144,8 @@ const renderedRoot = computed>(() => { }, children, draggable: node.leaf, - handleClick: ( - node: RenderedTreeExplorerNode, - e: MouseEvent - ) => { - if (node.leaf) { + handleClick(e: MouseEvent) { + if (this.leaf) { const provider = modelToNodeStore.getNodeProvider(model.directory) if (provider) { const node = useLitegraphService().addNodeOnGraph(provider.nodeDef) diff --git a/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue b/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue index 8c0c3e1bb..c182ae4f4 100644 --- a/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue +++ b/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue @@ -84,10 +84,7 @@ import { buildNodeDefTree, useNodeDefStore } from '@/stores/nodeDefStore' -import type { - RenderedTreeExplorerNode, - TreeExplorerNode -} from '@/types/treeExplorerTypes' +import type { TreeExplorerNode } from '@/types/treeExplorerTypes' import { sortedTree } from '@/utils/treeUtil' import NodeBookmarkTreeExplorer from './nodeLibrary/NodeBookmarkTreeExplorer.vue' @@ -119,28 +116,25 @@ const renderedRoot = computed>(() => { label: node.leaf ? node.data.display_name : node.label, leaf: node.leaf, data: node.data, - getIcon: (node: TreeExplorerNode) => { - if (node.leaf) { + getIcon() { + if (this.leaf) { return 'pi pi-circle-fill' } }, children, draggable: node.leaf, - renderDragPreview: (node, container) => { + renderDragPreview(container) { const vnode = h(NodePreview, { nodeDef: node.data }) render(vnode, container) return () => { render(null, container) } }, - handleClick: ( - node: RenderedTreeExplorerNode, - e: MouseEvent - ) => { - if (node.leaf) { - useLitegraphService().addNodeOnGraph(node.data) + handleClick(e: MouseEvent) { + if (this.leaf) { + useLitegraphService().addNodeOnGraph(this.data) } else { - toggleNodeOnEvent(e, node) + toggleNodeOnEvent(e, this) } } } diff --git a/src/components/sidebar/tabs/WorkflowsSidebarTab.vue b/src/components/sidebar/tabs/WorkflowsSidebarTab.vue index f9aa32344..999660f3d 100644 --- a/src/components/sidebar/tabs/WorkflowsSidebarTab.vue +++ b/src/components/sidebar/tabs/WorkflowsSidebarTab.vue @@ -245,24 +245,18 @@ const renderTreeNode = ( const workflow: ComfyWorkflow = node.data - const handleClick = ( - node: TreeExplorerNode, - e: MouseEvent - ) => { - if (node.leaf) { + function handleClick(this: TreeExplorerNode, e: MouseEvent) { + if (this.leaf) { workflowService.openWorkflow(workflow) } else { - toggleNodeOnEvent(e, node) + toggleNodeOnEvent(e, this) } } const actions = node.leaf ? { handleClick, - handleRename: async ( - node: TreeExplorerNode, - newName: string - ) => { + async handleRename(newName: string) { const newPath = type === WorkflowTreeType.Browse ? workflow.directory + '/' + appendJsonExt(newName) @@ -272,10 +266,10 @@ const renderTreeNode = ( }, handleDelete: workflow.isTemporary ? undefined - : async () => { + : async function () { await workflowService.deleteWorkflow(workflow) }, - contextMenuItems: (node: TreeExplorerNode) => { + contextMenuItems() { return [ { label: t('g.insert'), diff --git a/src/components/sidebar/tabs/nodeLibrary/NodeBookmarkTreeExplorer.vue b/src/components/sidebar/tabs/nodeLibrary/NodeBookmarkTreeExplorer.vue index df59aebca..ea797e1d9 100644 --- a/src/components/sidebar/tabs/nodeLibrary/NodeBookmarkTreeExplorer.vue +++ b/src/components/sidebar/tabs/nodeLibrary/NodeBookmarkTreeExplorer.vue @@ -139,8 +139,8 @@ const renderedBookmarkedRoot = computed>( label: node.leaf ? node.data.display_name : node.label, leaf: node.leaf, data: node.data, - getIcon: (node: TreeExplorerNode) => { - if (node.leaf) { + getIcon() { + if (this.leaf) { return 'pi pi-circle-fill' } const customization = @@ -152,10 +152,7 @@ const renderedBookmarkedRoot = computed>( children: sortedChildren, draggable: node.leaf, droppable: !node.leaf, - handleDrop: ( - node: TreeExplorerNode, - data: TreeExplorerDragAndDropData - ) => { + handleDrop(data: TreeExplorerDragAndDropData) { const nodeDefToAdd = data.data.data // Remove bookmark if the source is the top level bookmarked node. if (nodeBookmarkStore.isBookmarked(nodeDefToAdd)) { @@ -165,12 +162,9 @@ const renderedBookmarkedRoot = computed>( const nodePath = folderNodeDef.category + '/' + nodeDefToAdd.name nodeBookmarkStore.addBookmark(nodePath) }, - handleClick: ( - node: RenderedTreeExplorerNode, - e: MouseEvent - ) => { - if (node.leaf) { - useLitegraphService().addNodeOnGraph(node.data) + handleClick(e: MouseEvent) { + if (this.leaf) { + useLitegraphService().addNodeOnGraph(this.data) } else { toggleNodeOnEvent(e, node) } @@ -179,9 +173,13 @@ const renderedBookmarkedRoot = computed>( ...(node.leaf ? {} : { - handleRename, - handleDelete: (node: TreeExplorerNode) => { - nodeBookmarkStore.deleteBookmarkFolder(node.data) + handleRename(newName: string) { + if (this.data && this.data.isDummyFolder) { + nodeBookmarkStore.renameBookmarkFolder(this.data, newName) + } + }, + handleDelete() { + nodeBookmarkStore.deleteBookmarkFolder(this.data) } }) } @@ -212,12 +210,6 @@ defineExpose({ addNewBookmarkFolder }) -const handleRename = (node: TreeNode, newName: string) => { - if (node.data && node.data.isDummyFolder) { - nodeBookmarkStore.renameBookmarkFolder(node.data, newName) - } -} - const showCustomizationDialog = ref(false) const initialIcon = ref(nodeBookmarkStore.defaultBookmarkIcon) const initialColor = ref(nodeBookmarkStore.defaultBookmarkColor) diff --git a/src/types/treeExplorerTypes.ts b/src/types/treeExplorerTypes.ts index 08a0e3383..ee7a7b504 100644 --- a/src/types/treeExplorerTypes.ts +++ b/src/types/treeExplorerTypes.ts @@ -8,42 +8,42 @@ export interface TreeExplorerNode { children?: TreeExplorerNode[] icon?: string /** Function to override what icon to use for the node */ - getIcon?: (node: TreeExplorerNode) => string + getIcon?: (this: TreeExplorerNode) => string /** Function to override what text to use for the leaf-count badge on a folder node */ - getBadgeText?: (node: TreeExplorerNode) => string + getBadgeText?: (this: TreeExplorerNode) => string /** Function to handle renaming the node */ handleRename?: ( - node: TreeExplorerNode, + this: TreeExplorerNode, newName: string ) => void | Promise /** Function to handle deleting the node */ - handleDelete?: (node: TreeExplorerNode) => void | Promise + handleDelete?: (this: TreeExplorerNode) => void | Promise /** Function to handle adding a child node */ handleAddChild?: ( - node: TreeExplorerNode, + this: TreeExplorerNode, child: TreeExplorerNode ) => void | Promise /** Whether the node is draggable */ draggable?: boolean /** Function to render a drag preview */ renderDragPreview?: ( - node: TreeExplorerNode, + this: TreeExplorerNode, container: HTMLElement ) => void | (() => void) /** Whether the node is droppable */ droppable?: boolean /** Function to handle dropping a node */ handleDrop?: ( - node: TreeExplorerNode, + this: TreeExplorerNode, data: TreeExplorerDragAndDropData ) => void | Promise /** Function to handle clicking a node */ handleClick?: ( - node: TreeExplorerNode, + this: TreeExplorerNode, event: MouseEvent ) => void | Promise /** Function to handle errors */ - handleError?: (error: Error) => void + handleError?: (this: TreeExplorerNode, error: Error) => void /** Extra context menu items */ contextMenuItems?: | MenuItem[]