diff --git a/src/components/stepindicator/StepIndicator/StepIndicator.stories.tsx b/src/components/stepindicator/StepIndicator/StepIndicator.stories.tsx index 15a7a991b6..4367e284c2 100644 --- a/src/components/stepindicator/StepIndicator/StepIndicator.stories.tsx +++ b/src/components/stepindicator/StepIndicator/StepIndicator.stories.tsx @@ -18,10 +18,32 @@ Updates users on their progress through a multi-step process. }, }, }, + argTypes: { + stepText: { + control: 'text', + }, + ofText: { + control: 'text', + }, + }, + args: { + stepText: 'Step', + ofText: 'of', + }, +} + +type StorybookArguments = { + stepText: string + ofText: string } -export const defaultStepIndicator = (): React.ReactElement => ( - +export const defaultStepIndicator = ( + args: StorybookArguments +): React.ReactElement => ( + @@ -30,8 +52,12 @@ export const defaultStepIndicator = (): React.ReactElement => ( ) -export const noLabels = (): React.ReactElement => ( - +export const noLabels = (args: StorybookArguments): React.ReactElement => ( + @@ -40,8 +66,12 @@ export const noLabels = (): React.ReactElement => ( ) -export const centered = (): React.ReactElement => ( - +export const centered = (args: StorybookArguments): React.ReactElement => ( + @@ -50,8 +80,12 @@ export const centered = (): React.ReactElement => ( ) -export const counters = (): React.ReactElement => ( - +export const counters = (args: StorybookArguments): React.ReactElement => ( + @@ -60,8 +94,12 @@ export const counters = (): React.ReactElement => ( ) -export const smallCounters = (): React.ReactElement => ( - +export const smallCounters = (args: StorybookArguments): React.ReactElement => ( + @@ -70,8 +108,13 @@ export const smallCounters = (): React.ReactElement => ( ) -export const differentHeadingLevel = (): React.ReactElement => ( - +export const differentHeadingLevel = ( + args: StorybookArguments +): React.ReactElement => ( + diff --git a/src/components/stepindicator/StepIndicator/StepIndicator.test.tsx b/src/components/stepindicator/StepIndicator/StepIndicator.test.tsx index dddfc15305..afaae661d9 100644 --- a/src/components/stepindicator/StepIndicator/StepIndicator.test.tsx +++ b/src/components/stepindicator/StepIndicator/StepIndicator.test.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { render } from '@testing-library/react' +import { render, within } from '@testing-library/react' import { StepIndicatorStep } from '../StepIndicatorStep/StepIndicatorStep' import { StepIndicator } from '../StepIndicator/StepIndicator' import { HeadingLevel } from '../../../types/headingLevel' @@ -14,7 +14,7 @@ describe('StepIndicator component', () => { }) it('renders without errors', () => { - const { getByRole, queryByText, queryAllByText, queryByTestId } = render( + const { getByRole, queryByText, queryAllByText, getByTestId } = render( @@ -22,7 +22,7 @@ describe('StepIndicator component', () => { ) - const stepIndicator = queryByTestId('step-indicator') + const stepIndicator = getByTestId('step-indicator') expect(stepIndicator).toBeInTheDocument() expect(stepIndicator).toHaveClass('usa-step-indicator') @@ -30,6 +30,11 @@ describe('StepIndicator component', () => { expect(queryAllByText(step2)).toHaveLength(2) expect(queryByText(step3)).toBeInTheDocument() expect(getByRole('list')).toHaveClass('usa-step-indicator__segments') + const stepSrOnly = within(stepIndicator).queryByText('Step') + expect(stepSrOnly).toHaveClass('usa-sr-only') + const totalSteps = queryByText(`of 3`) + expect(totalSteps).toBeInTheDocument() + expect(totalSteps).toHaveClass('usa-step-indicator__total-steps') }) it('renders properly with no labels', () => { @@ -163,4 +168,32 @@ describe('StepIndicator component', () => { 'usa-step-indicator__heading my-custom-className' ) }) + + it("renders properly with translatable 'of' string", () => { + const ofText = 'de' + const { queryByText } = render( + + + + + + ) + const totalSteps = queryByText(`${ofText} 3`) + expect(totalSteps).toBeInTheDocument() + expect(totalSteps).toHaveClass('usa-step-indicator__total-steps') + }) + + it("renders properly with translatable 'step' string", () => { + const stepText = 'Paso' + const { getByTestId } = render( + + + + + + ) + const stepIndicator = getByTestId('step-indicator') + const stepSrOnly = within(stepIndicator).queryByText(stepText) + expect(stepSrOnly).toHaveClass('usa-sr-only') + }) }) diff --git a/src/components/stepindicator/StepIndicator/StepIndicator.tsx b/src/components/stepindicator/StepIndicator/StepIndicator.tsx index 0d05459b9f..9dd839083b 100644 --- a/src/components/stepindicator/StepIndicator/StepIndicator.tsx +++ b/src/components/stepindicator/StepIndicator/StepIndicator.tsx @@ -16,6 +16,8 @@ type StepIndicatorProps = { HTMLHeadingElement > headingLevel: HeadingLevel + stepText?: string + ofText?: string } export const StepIndicator = ( props: StepIndicatorProps @@ -30,6 +32,8 @@ export const StepIndicator = ( listProps, headingProps, headingLevel, + stepText = 'Step', + ofText = 'of', } = props const Heading = headingLevel @@ -84,12 +88,14 @@ export const StepIndicator = (
- Step + + {stepText} + {currentStepNumber}   - {`of ${totalNumberOfSteps}`} + {`${ofText} ${totalNumberOfSteps}`}