From 0dfccab395226c8dda99e0a681db1475f48eff10 Mon Sep 17 00:00:00 2001 From: Jessie Wei Date: Wed, 27 Sep 2023 11:30:47 +1000 Subject: [PATCH] fix(FormRenderer): Include values in the Wizard onNavigating event (#980) --- .../components/Wizard/index.stories.tsx | 4 ++-- .../FormRenderer/components/Wizard/index.tsx | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/ui/src/components/FormRenderer/components/Wizard/index.stories.tsx b/packages/ui/src/components/FormRenderer/components/Wizard/index.stories.tsx index 796a865b..b6844fb7 100644 --- a/packages/ui/src/components/FormRenderer/components/Wizard/index.stories.tsx +++ b/packages/ui/src/components/FormRenderer/components/Wizard/index.stories.tsx @@ -15,9 +15,9 @@ ******************************************************************************************************************** */ import { ComponentMeta } from '@storybook/react'; import Box from '@cloudscape-design/components/box'; -import { WizardProps as WizardComponentProps } from '@cloudscape-design/components/wizard'; import { NonCancelableCustomEvent } from '@cloudscape-design/components/internal/events'; import FormRenderer, { componentTypes, validatorTypes } from '../..'; +import { NavigatingEventDetail } from '.'; import { Template, DEFAULT_ARGS } from '../../index.stories'; export default { @@ -169,7 +169,7 @@ NavigatingEvent.args = { fields: [ { ...Default.args.schema!.fields[0], - onNavigating: (event: NonCancelableCustomEvent) => { + onNavigating: (event: NonCancelableCustomEvent) => { return new Promise((resolve) => { window.setTimeout(() => { if (event.detail.requestedStepIndex >= 2) { diff --git a/packages/ui/src/components/FormRenderer/components/Wizard/index.tsx b/packages/ui/src/components/FormRenderer/components/Wizard/index.tsx index 3a8351fe..fd5ad531 100644 --- a/packages/ui/src/components/FormRenderer/components/Wizard/index.tsx +++ b/packages/ui/src/components/FormRenderer/components/Wizard/index.tsx @@ -21,6 +21,8 @@ import { Field } from '../../types'; import WizardSteps from './components/WizardSteps'; import { useFormRendererContext } from '../../formRendererContext'; +export type NavigatingEventDetail = WizardComponentProps.NavigateDetail & { values: Record }; + export interface NavigatingEventResponse { continued: boolean; errorText?: string; @@ -33,9 +35,7 @@ export interface WizardProps { activeStepIndex: WizardComponentProps['activeStepIndex']; isReadOnly?: boolean; isDisabled?: boolean; - onNavigating?: ( - event: NonCancelableCustomEvent - ) => Promise; + onNavigating?: (event: NonCancelableCustomEvent) => Promise; isLoadingNextStep?: WizardComponentProps['isLoadingNextStep']; } @@ -108,7 +108,13 @@ const Wizard: FC = ({ async (event: NonCancelableCustomEvent) => { if (onNavigating) { setIsLoadingNextStep(true); - const response = await onNavigating(event); + const response = await onNavigating({ + ...event, + detail: { + ...event.detail, + values: formOptions.getState().values, + }, + }); setIsLoadingNextStep(false); return response; } @@ -118,7 +124,7 @@ const Wizard: FC = ({ errorText: undefined, }; }, - [onNavigating] + [onNavigating, formOptions] ); const processNavigate = useCallback(