Basic widget toggling

This commit is contained in:
Austin Mroz
2025-09-04 13:13:18 -05:00
parent 1cca658351
commit 9b18125d16
3 changed files with 41 additions and 19 deletions

View File

@@ -47,13 +47,14 @@ const widgetTree = computed(() => {
items.value = null items.value = null
return return
} }
node.widgets ??= []
const intn = interiorNodes.map((n) => const intn = interiorNodes.map((n) =>
n.widgets?.map((w) => [n.id, n.title, w.name]) ?? []).flat(1) n.widgets?.map((w) => [n, w, node]) ?? []).flat(1)
//items.value = intn //items.value = intn
//TODO: filter enabled/disabled items while keeping order //TODO: filter enabled/disabled items while keeping order
console.log(intn) console.log(intn)
return buildTree(intn, (item: [unknown, unknown]) => return buildTree(intn, (item: [unknown, unknown]) =>
[`${item[1]}: ${item[2]}`] [`${item[0].title}: ${item[1].name}`]
) )
}) })
@@ -70,19 +71,10 @@ const renderedRoot = computed<TreeExplorerNode<ComfyNodeDefImpl>>(() => {
data: node.data, data: node.data,
label: node.label, label: node.label,
getIcon() { getIcon() {
if (this.leaf) { return 'pi pi-minus'
return 'pi pi-circle-fill'
}
}, },
children, children,
draggable: node.leaf, draggable: true,
handleClick(e: MouseEvent) {
if (this.leaf) {
//FIXME Implement
} else {
toggleNodeOnEvent(e, this)
}
}
} }
} }
console.log(widgetTree.value) console.log(widgetTree.value)

View File

@@ -4,19 +4,30 @@
<template #actions> <template #actions>
<Button <Button
size="small" size="small"
:icon="'pi pi-bookmark-fill'"
text text
severity="secondary" severity="secondary"
@click.stop="onClick" @click.stop="onClick"
/> >
<i-lucide:eye-off v-if="isShown"/>
<i-lucide:eye v-else/>
</Button>
</template> </template>
</TreeExplorerTreeNode> </TreeExplorerTreeNode>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from 'vue'
import Button from 'primevue/button' import Button from 'primevue/button'
function hasWidget() {
const node = props.node.data[2]
const name = props.node.data[1].name
return node.widgets.some((w) => w.name === name)
}
let isShown = ref(false)
import TreeExplorerTreeNode from '@/components/common/TreeExplorerTreeNode.vue' import TreeExplorerTreeNode from '@/components/common/TreeExplorerTreeNode.vue'
import { RenderedTreeExplorerNode } from '@/types/treeExplorerTypes' import { RenderedTreeExplorerNode } from '@/types/treeExplorerTypes'
@@ -24,7 +35,26 @@ const props = defineProps<{
node: RenderedTreeExplorerNode<ComfyNodeDefImpl> node: RenderedTreeExplorerNode<ComfyNodeDefImpl>
}>() }>()
onMounted(() => {
isShown.value = hasWidget()
})
function onClick(e) { function onClick(e) {
const nodeId = props.node.data[0].id
const widgetName = props.node.data[1].name
const node = props.node.data[2]
console.log(isShown.value)
if (!isShown.value) {
node.addProxyWidget(`${nodeId}`, widgetName)
isShown.value = true
} else {
//FIXME: widget name collisions
const index = node.widgets.findIndex((w) => w.name === widgetName)
if (index < 0) throw new Error("Can't disable missing widget")
node.widgets.splice(index, 1)
isShown.value = false
}
} }
</script> </script>

View File

@@ -7,13 +7,13 @@ import type { SidebarTabExtension } from '@/types/extensionTypes'
export const useSubgraphNodeTab = (): SidebarTabExtension => { export const useSubgraphNodeTab = (): SidebarTabExtension => {
return { return {
id: 'sgn', id: 'sgn',
icon: 'pi pi-history', icon: 'pi pi-chart-bar',
iconBadge: () => { iconBadge: () => {
return null return null
}, },
title: 'sideToolbar.queue', title: 'subgraph widgets',
tooltip: 'sideToolbar.queue', tooltip: 'Change displayed subgraph widgets',
label: 'sideToolbar.labels.queue', label: 'subgraph widgets',
component: markRaw(SubgraphNode), component: markRaw(SubgraphNode),
type: 'vue' type: 'vue'
} }