Skip to content

Commit c513fae

Browse files
committed
Rework stepper
1 parent 823050c commit c513fae

File tree

4 files changed

+27
-27
lines changed

4 files changed

+27
-27
lines changed

src/Stepper.tsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,11 @@ import type { Equals } from "tsafe";
66
import { fr } from "./lib";
77
import { cx } from "./lib/tools/cx";
88
import { createComponentI18nApi } from "./lib/i18n";
9-
10-
// We make users import dsfr.css, so we don't need to import the scoped CSS
11-
// but in the future if we have a complete component coverage it
12-
// we could stop requiring users to import the hole CSS and only import on a
13-
// per component basis.
149
import "./dsfr/component/stepper/stepper.css";
1510

1611
export type StepperProps = {
1712
className?: string;
18-
step: number;
13+
currentStep: number;
1914
stepCount: number;
2015
title: ReactNode;
2116
nextTitle?: ReactNode;
@@ -25,7 +20,15 @@ export type StepperProps = {
2520
/** @see <https://react-dsfr-components.etalab.studio/?path=/docs/components-stepper> */
2621
export const Stepper = memo(
2722
forwardRef<HTMLDivElement, StepperProps>((props, ref) => {
28-
const { className, step, stepCount, title, nextTitle, classes = {}, ...rest } = props;
23+
const {
24+
className,
25+
currentStep,
26+
stepCount,
27+
title,
28+
nextTitle,
29+
classes = {},
30+
...rest
31+
} = props;
2932

3033
assert<Equals<keyof typeof rest, never>>();
3134

@@ -35,13 +38,13 @@ export const Stepper = memo(
3538
<div className={cx(fr.cx("fr-stepper"), classes.root, className)} ref={ref}>
3639
<h2 className={cx(fr.cx("fr-stepper__title"), classes.title)}>
3740
<span className={cx(fr.cx("fr-stepper__state"), classes.state)}>
38-
{t("progress", { step, stepCount })}
41+
{t("progress", { currentStep, stepCount })}
3942
</span>
4043
{title}
4144
</h2>
4245
<div
4346
className={cx(fr.cx("fr-stepper__steps"), classes.steps)}
44-
data-fr-current-step={step}
47+
data-fr-current-step={currentStep}
4548
data-fr-steps={stepCount}
4649
></div>
4750
{nextTitle !== undefined && (
@@ -60,8 +63,8 @@ const { useTranslation, addStepperTranslations } = createComponentI18nApi({
6063
"componentName": symToStr({ Stepper }),
6164
"frMessages": {
6265
/* spell-checker: disable */
63-
"progress": (p: { step: number; stepCount: number }) =>
64-
`Étape ${p.step} sur ${p.stepCount}`,
66+
"progress": (p: { currentStep: number; stepCount: number }) =>
67+
`Étape ${p.currentStep} sur ${p.stepCount}`,
6568
"next step": `Étape suivante :`
6669
/* spell-checker: enable */
6770
}
@@ -70,7 +73,7 @@ const { useTranslation, addStepperTranslations } = createComponentI18nApi({
7073
addStepperTranslations({
7174
"lang": "en",
7275
"messages": {
73-
"progress": ({ step, stepCount }) => `Step ${step} over ${stepCount}`,
76+
"progress": ({ currentStep, stepCount }) => `Step ${currentStep} over ${stepCount}`,
7477
"next step": "Next step: "
7578
}
7679
});

src/lib/i18n.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export function createComponentI18nApi<
9696
useTranslation: () => { t: FrMessagesToTranslationFunction<FrMessages> };
9797
} & Record<
9898
`add${ComponentName}Translations`,
99-
(params: { lang: string; messages: FrMessages }) => void
99+
(params: { lang: string; messages: Partial<FrMessages> }) => void
100100
> {
101101
const { componentName, frMessages } = params;
102102

@@ -129,10 +129,7 @@ export function createComponentI18nApi<
129129
return { t };
130130
}
131131

132-
function addTranslations(params: {
133-
lang: string;
134-
messages: Partial<Record<keyof FrMessages, string>>;
135-
}) {
132+
function addTranslations(params: { lang: string; messages: Partial<FrMessages> }) {
136133
const { lang, messages } = params;
137134

138135
Object.entries(messages)

stories/Stepper.stories.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,20 @@ const { meta, getStory } = getStoryFactory({
77
"wrappedComponent": { Stepper },
88
"description": `
99
- [See DSFR documentation](https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/indicateur-d-etape)
10-
- [See source code](https://github.com/codegouvfr/react-dsfr/blob/main/src/Stepper.tsx)`,
11-
"disabledProps": ["lang"]
10+
- [See source code](https://github.com/codegouvfr/react-dsfr/blob/main/src/Stepper.tsx)`
1211
});
1312

1413
export default meta;
1514

1615
export const Default = getStory({
17-
steps: 3,
18-
currentStep: 1,
19-
title: "Titre de l’étape en cours",
20-
nextTitle: "Titre de la prochaine étape"
16+
"stepCount": 3,
17+
"currentStep": 1,
18+
"title": "Titre de l’étape en cours",
19+
"nextTitle": "Titre de la prochaine étape"
2120
});
2221

2322
export const StepperWithoutNext = getStory({
24-
steps: 4,
25-
currentStep: 4,
26-
title: "Titre de la dernière étape en cours"
23+
"stepCount": 4,
24+
"currentStep": 4,
25+
"title": "Titre de la dernière étape en cours"
2726
});

test/types/i18n.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ const { useTranslation, addSomeDsfrComponentTranslations } = createComponentI18n
88
/* spell-checker: disable */
99

1010
"do something": ({ what }: { what: string }) => `Faire ${what}`,
11-
"the good": "le bien"
11+
"the good": "le bien",
12+
"bar": "bar"
1213
/* spell-checker: enable */
1314
}
1415
});

0 commit comments

Comments
 (0)