From 5fb34ddb118a1bbd9b18224ef5608dcdcff1a10e Mon Sep 17 00:00:00 2001 From: "Paul.Li" Date: Thu, 30 Jan 2025 16:35:44 -0700 Subject: [PATCH] fix: the stepper header status in jsonforms --- .../src/lib/Controls/FormStepper/FormStepperControl.tsx | 6 ++++-- .../src/lib/Controls/FormStepper/context/StepperContext.tsx | 6 ++++-- .../src/lib/Controls/FormStepper/context/reducer.ts | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libs/jsonforms-components/src/lib/Controls/FormStepper/FormStepperControl.tsx b/libs/jsonforms-components/src/lib/Controls/FormStepper/FormStepperControl.tsx index 440f6f6ad..297de1d6f 100644 --- a/libs/jsonforms-components/src/lib/Controls/FormStepper/FormStepperControl.tsx +++ b/libs/jsonforms-components/src/lib/Controls/FormStepper/FormStepperControl.tsx @@ -58,6 +58,7 @@ export const FormStepperView = (props: CategorizationStepperLayoutRendererProps) const submitForm = submitFormFunction && submitFormFunction(); const optionProps = (uischema.options as FormStepperOptionProps) || {}; const [isOpen, setIsOpen] = useState(false); + const [isSelected, setIsSelected] = useState(false); const handleSubmit = () => { if (submitForm) { @@ -75,12 +76,12 @@ export const FormStepperView = (props: CategorizationStepperLayoutRendererProps)
- {/* Need to force a refresh here, GoAFormStepper cant change dynamically unless completely re-rendered */} - { + setIsSelected(true); goToPage(step - 1); }} > @@ -133,6 +134,7 @@ export const FormStepperView = (props: CategorizationStepperLayoutRendererProps) if (element) { element.scrollIntoView(); } + goToPage(activeId - 1, activeId); }} testId="prev-button" diff --git a/libs/jsonforms-components/src/lib/Controls/FormStepper/context/StepperContext.tsx b/libs/jsonforms-components/src/lib/Controls/FormStepper/context/StepperContext.tsx index 881e2f44c..50629f15a 100644 --- a/libs/jsonforms-components/src/lib/Controls/FormStepper/context/StepperContext.tsx +++ b/libs/jsonforms-components/src/lib/Controls/FormStepper/context/StepperContext.tsx @@ -51,6 +51,7 @@ const createStepperContextInitData = ( }); const activeId = props?.activeId || 0; + console.log(activeId); return { categories: categories, @@ -82,7 +83,8 @@ export const JsonFormsStepperContextProvider = ({ return stepperState; }, selectIsDisabled: () => { - return !stepperState.categories[stepperState.activeId]?.isEnabled; + const category = stepperState.categories?.[stepperState.activeId]; + return category === undefined ? false : !category?.isEnabled; }, selectIsActive: (id: number) => { return id === stepperState.activeId; @@ -96,7 +98,7 @@ export const JsonFormsStepperContextProvider = ({ goToPage: (id: number, updateCategoryId?: number) => { ajv.validate(schema, ctx.core?.data || {}); - if (updateCategoryId !== undefined) { + if (updateCategoryId !== undefined && updateCategoryId < stepperState.categories.length) { stepperDispatch({ type: 'update/category', payload: { errors: ctx?.core?.errors, id: updateCategoryId, ajv }, diff --git a/libs/jsonforms-components/src/lib/Controls/FormStepper/context/reducer.ts b/libs/jsonforms-components/src/lib/Controls/FormStepper/context/reducer.ts index 65560ec33..4d3acc7a6 100644 --- a/libs/jsonforms-components/src/lib/Controls/FormStepper/context/reducer.ts +++ b/libs/jsonforms-components/src/lib/Controls/FormStepper/context/reducer.ts @@ -58,7 +58,7 @@ export const stepperReducer = (state: StepperContextDataType, action: StepperAct if (id > lastId) { state.isOnReview = true; state.hasNextButton = false; - state.hasPrevButton = false; + state.hasPrevButton = true; return { ...state }; } else { state.categories[id].isVisited = true; @@ -77,6 +77,8 @@ export const stepperReducer = (state: StepperContextDataType, action: StepperAct const errorsInCategory = getErrorsInScopes(errors, state.categories[id].scopes || []); state.categories[id].isCompleted = incompletePaths?.length === 0; state.categories[id].isValid = errorsInCategory.length === 0; + state.categories[id].isVisited = true; + return { ...state }; } case 'validate/form': {