mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
When building an app, selecting inputs and selecting outputs are now 2 separate steps. This prevents confusion where clicking on the widget of an output node will select that widget instead of the entire output. <img width="1673" height="773" alt="image" src="https://github.com/user-attachments/assets/e5994479-6fcf-4572-b58b-bf8cecfb7d55" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9362-Split-selection-into-an-inputs-and-outputs-step-3196d73d36508187b4a1e51c73f1c54c) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action <action@github.com>
80 lines
1.9 KiB
TypeScript
80 lines
1.9 KiB
TypeScript
import type { Ref } from 'vue'
|
|
|
|
import { computed } from 'vue'
|
|
|
|
import { useAppMode } from '@/composables/useAppMode'
|
|
|
|
import { useAppSetDefaultView } from './useAppSetDefaultView'
|
|
|
|
const BUILDER_STEPS = [
|
|
'builder:inputs',
|
|
'builder:outputs',
|
|
'builder:arrange',
|
|
'setDefaultView'
|
|
] as const
|
|
|
|
export type BuilderStepId = (typeof BUILDER_STEPS)[number]
|
|
|
|
const ARRANGE_INDEX = BUILDER_STEPS.indexOf('builder:arrange')
|
|
|
|
export function useBuilderSteps(options?: { hasOutputs?: Ref<boolean> }) {
|
|
const { mode, isBuilderMode, setMode } = useAppMode()
|
|
const { settingView, showDialog } = useAppSetDefaultView()
|
|
|
|
const activeStep = computed<BuilderStepId>(() => {
|
|
if (settingView.value) return 'setDefaultView'
|
|
if (isBuilderMode.value) {
|
|
return mode.value as BuilderStepId
|
|
}
|
|
return 'builder:inputs'
|
|
})
|
|
|
|
const activeStepIndex = computed(() =>
|
|
BUILDER_STEPS.indexOf(activeStep.value)
|
|
)
|
|
|
|
const isFirstStep = computed(() => activeStepIndex.value === 0)
|
|
|
|
const isLastStep = computed(() => {
|
|
if (!options?.hasOutputs?.value)
|
|
return activeStepIndex.value >= ARRANGE_INDEX
|
|
return activeStepIndex.value >= BUILDER_STEPS.length - 1
|
|
})
|
|
|
|
const isSelectStep = computed(
|
|
() =>
|
|
activeStep.value === 'builder:inputs' ||
|
|
activeStep.value === 'builder:outputs'
|
|
)
|
|
|
|
function navigateToStep(stepId: BuilderStepId) {
|
|
if (stepId === 'setDefaultView') {
|
|
setMode('builder:arrange')
|
|
showDialog()
|
|
} else {
|
|
setMode(stepId)
|
|
}
|
|
}
|
|
|
|
function goBack() {
|
|
if (isFirstStep.value) return
|
|
navigateToStep(BUILDER_STEPS[activeStepIndex.value - 1])
|
|
}
|
|
|
|
function goNext() {
|
|
if (isLastStep.value) return
|
|
navigateToStep(BUILDER_STEPS[activeStepIndex.value + 1])
|
|
}
|
|
|
|
return {
|
|
activeStep,
|
|
activeStepIndex,
|
|
isFirstStep,
|
|
isLastStep,
|
|
isSelectStep,
|
|
navigateToStep,
|
|
goBack,
|
|
goNext
|
|
}
|
|
}
|