Skip to content

Commit 8b0919c

Browse files
authored
fix: inputComponents now get stable callbacks (#819)
1 parent 2c00ac1 commit 8b0919c

File tree

24 files changed

+65
-52
lines changed

24 files changed

+65
-52
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [unreleased]
99

10+
## [0.41.1] - 2024-05-13
11+
12+
### Fixes
13+
14+
- Custom `inputComponents` (in sign in/up form fields) now get reference-stable callbacks.
15+
1016
## [0.41.0] - 2024-05-09
1117

1218
### Breaking changes

examples/for-tests/src/App.js

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useState } from "react";
1+
import { useEffect, useRef, useState } from "react";
22
import "./App.css";
33

44
import AppWithoutRouter from "./AppWithoutRouter";
@@ -289,21 +289,31 @@ const incorrectFormFields = [
289289
},
290290
];
291291

292+
const DropdownInputComponent = ({ value, name, onChange }) => {
293+
const onChangeRef = useRef(onChange);
294+
295+
if (onChangeRef.current !== onChange) {
296+
throw new Error("callbacks passed to inputComponents should be reference stable");
297+
}
298+
299+
return (
300+
<select value={value} name={name} onChange={(e) => onChange(e.target.value)}>
301+
<option value="" disabled hidden>
302+
Select an option
303+
</option>
304+
<option value="option 1">Option 1</option>
305+
<option value="option 2">Option 2</option>
306+
<option value="option 3">Option 3</option>
307+
</select>
308+
);
309+
};
310+
292311
const customFields = [
293312
{
294313
id: "select-dropdown",
295314
label: "Select Dropdown",
296315
nonOptionalErrorMsg: "Select dropdown is not an optional",
297-
inputComponent: ({ value, name, onChange }) => (
298-
<select value={value} name={name} onChange={(e) => onChange(e.target.value)}>
299-
<option value="" disabled hidden>
300-
Select an option
301-
</option>
302-
<option value="option 1">Option 1</option>
303-
<option value="option 2">Option 2</option>
304-
<option value="option 3">Option 3</option>
305-
</select>
306-
),
316+
inputComponent: DropdownInputComponent,
307317
optional: true,
308318
},
309319
{

lib/build/components/assets/blockedIcon.d.ts

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/components/assets/otpEmailIcon.d.ts

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/components/assets/otpSMSIcon.d.ts

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/components/assets/totpIcon.d.ts

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/emailpassword-shared9.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/genericComponentOverrideContext.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/recipe/emailpassword/components/library/formRow.d.ts

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/recipe/multitenancy/components/themes/dynamicLoginMethodsSpinner/index.d.ts

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)