mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-19 22:09:37 +00:00
## Summary Makes it easier and more obvious for users to navigate between steps ## Changes - **What**: - add back/next navigation to builder footer alongside exit button - extract shared step logic into useBuilderSteps composable ## Screenshots (if applicable) <img width="428" height="102" alt="image" src="https://github.com/user-attachments/assets/91b33e8f-53ae-4895-a2eb-fb1316b2b367" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9378-feat-Replace-BuilderExitButton-with-new-BuilderFooterToolbar-3196d73d3650819392efc171cf277326) by [Unito](https://www.unito.io)
72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
import type { Ref } from 'vue'
|
|
|
|
import { computed } from 'vue'
|
|
|
|
import { useAppMode } from '@/composables/useAppMode'
|
|
|
|
import { useAppSetDefaultView } from './useAppSetDefaultView'
|
|
|
|
const BUILDER_STEPS = [
|
|
'builder:select',
|
|
'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:select'
|
|
})
|
|
|
|
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
|
|
})
|
|
|
|
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,
|
|
navigateToStep,
|
|
goBack,
|
|
goNext
|
|
}
|
|
}
|