From 6e82ebef1af79bc71c238b4ee74b2f68e25708f0 Mon Sep 17 00:00:00 2001 From: LemonNeko Date: Tue, 10 Mar 2026 16:09:25 +0800 Subject: [PATCH] refactor(stage-ui): steps of onboarding dialog (#1224) --- .../scenarios/dialogs/onboarding/index.ts | 1 + .../dialogs/onboarding/onboarding-dialog.vue | 10 +- .../dialogs/onboarding/onboarding.vue | 263 ++++++++++++------ .../onboarding/step-model-selection.vue | 13 +- .../step-provider-configuration.vue | 57 ++-- .../onboarding/step-provider-selection.vue | 37 ++- .../dialogs/onboarding/step-welcome.vue | 19 +- .../scenarios/dialogs/onboarding/types.ts | 24 ++ .../scenarios/dialogs/onboarding/utils.ts | 15 - 9 files changed, 297 insertions(+), 142 deletions(-) create mode 100644 packages/stage-ui/src/components/scenarios/dialogs/onboarding/types.ts delete mode 100644 packages/stage-ui/src/components/scenarios/dialogs/onboarding/utils.ts diff --git a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/index.ts b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/index.ts index 2d24fbf21..75871d6db 100644 --- a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/index.ts +++ b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/index.ts @@ -1,2 +1,3 @@ export { default as OnboardingDialog } from './onboarding-dialog.vue' export { default as OnboardingScreen } from './onboarding.vue' +export type { OnboardingStep } from './types' diff --git a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/onboarding-dialog.vue b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/onboarding-dialog.vue index ed763a4a4..78b752524 100644 --- a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/onboarding-dialog.vue +++ b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/onboarding-dialog.vue @@ -1,4 +1,6 @@ diff --git a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-model-selection.vue b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-model-selection.vue index e437a1ae5..7a101cc52 100644 --- a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-model-selection.vue +++ b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-model-selection.vue @@ -1,17 +1,20 @@ diff --git a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-welcome.vue b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-welcome.vue index dcc7b8cc4..040567867 100644 --- a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-welcome.vue +++ b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/step-welcome.vue @@ -1,14 +1,17 @@ diff --git a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/types.ts b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/types.ts new file mode 100644 index 000000000..2c3135fb9 --- /dev/null +++ b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/types.ts @@ -0,0 +1,24 @@ +import type { Component } from 'vue' + +export type OnboardingStepGuard = () => Promise +export type OnboardingStepPrevHandler = () => Promise | void + +export interface ProviderConfigData { + apiKey: string + baseUrl: string + accountId: string +} + +export type OnboardingStepNextHandler = (configData?: ProviderConfigData) => Promise | void + +export interface OnboardingStep { + id: string + component: Component<{ + configData?: ProviderConfigData + onNext: OnboardingStepNextHandler + onPrevious?: OnboardingStepPrevHandler + }> + props?: () => Record + beforeNext?: OnboardingStepGuard + beforePrev?: OnboardingStepGuard +} diff --git a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/utils.ts b/packages/stage-ui/src/components/scenarios/dialogs/onboarding/utils.ts deleted file mode 100644 index 046e4b141..000000000 --- a/packages/stage-ui/src/components/scenarios/dialogs/onboarding/utils.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { InjectionKey, Ref } from 'vue' - -import type { ProviderMetadata } from '../../../../stores/providers' - -export interface OnboardingContext { - selectedProviderId: Ref - selectedProvider: Ref - popularProviders: Ref - selectProvider: (provider: ProviderMetadata) => void - handleNextStep: (configData?: { apiKey: string, baseUrl: string, accountId: string }) => Promise - handlePreviousStep: () => void - handleSave: () => void -} - -export const OnboardingContextKey: InjectionKey = Symbol('onboarding-context')