Skip to content

Commit 1f74809

Browse files
committed
Fix lint warnings
1 parent f6b7c72 commit 1f74809

File tree

4 files changed

+25
-9
lines changed

4 files changed

+25
-9
lines changed

packages/@react-stately/form/src/useFormValidationState.ts

+13-3
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,20 @@ export interface FormValidationState {
6363
}
6464

6565
export function useFormValidationState<T>(props: FormValidationProps<T>): FormValidationState {
66+
const privateProp = props[privateValidationStateProp];
67+
68+
let privateState = useMemo(() => {
69+
if (!privateProp) {
70+
return null;
71+
}
72+
73+
let {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation} = privateProp as FormValidationState;
74+
return {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation};
75+
}, [privateProp]);
76+
6677
// Private prop for parent components to pass state to children.
67-
if (props[privateValidationStateProp]) {
68-
let {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation} = props[privateValidationStateProp] as FormValidationState;
69-
return useMemo(() => ({realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation}), [realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation]);
78+
if (privateState) {
79+
return privateState;
7080
}
7181

7282
// eslint-disable-next-line react-hooks/rules-of-hooks

packages/@react-stately/list/src/useSingleSelectListState.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import {CollectionStateBase, Key, Node, Selection, SingleSelection} from '@react-types/shared';
1414
import {ListState, useListState} from './useListState';
1515
import {useControlledState} from '@react-stately/utils';
16-
import {useMemo, useCallback} from 'react';
16+
import {useCallback, useMemo} from 'react';
1717

1818
export interface SingleSelectListProps<T> extends CollectionStateBase<T>, Omit<SingleSelection, 'disallowEmptySelection'> {
1919
/** Filter function to generate a filtered list of nodes. */

packages/@react-stately/select/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"url": "https://github.com/adobe/react-spectrum"
2323
},
2424
"dependencies": {
25+
"@react-aria/utils": "^3.28.1",
2526
"@react-stately/form": "^3.1.2",
2627
"@react-stately/list": "^3.12.0",
2728
"@react-stately/overlays": "^3.6.14",

packages/@react-stately/select/src/useSelectState.ts

+10-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {FormValidationState, useFormValidationState} from '@react-stately/form';
1515
import {OverlayTriggerState, useOverlayTriggerState} from '@react-stately/overlays';
1616
import {SelectProps} from '@react-types/select';
1717
import {SingleSelectListState, useSingleSelectListState} from '@react-stately/list';
18-
import {useState, useMemo, useEffect, useCallback, useRef} from 'react';
18+
import {useCallback, useLayoutEffect, useMemo, useRef, useState} from 'react';
1919

2020
export interface SelectStateOptions<T> extends Omit<SelectProps<T>, 'children'>, CollectionStateBase<T> {}
2121

@@ -45,25 +45,30 @@ export function useSelectState<T extends object>(props: SelectStateOptions<T>):
4545
let triggerState = useOverlayTriggerState(props);
4646
let [focusStrategy, setFocusStrategy] = useState<FocusStrategy | null>(null);
4747

48+
// This is necessary to circumvent a circular dependency below
4849
let validationStateRef = useRef<FormValidationState>(null);
4950

51+
let onSelectionChange = props.onSelectionChange;
5052
let listState = useSingleSelectListState({
5153
...props,
5254
onSelectionChange: useCallback(key => {
53-
if (props.onSelectionChange != null) {
54-
props.onSelectionChange(key);
55+
if (onSelectionChange != null) {
56+
onSelectionChange(key);
5557
}
5658

5759
triggerState.close();
5860
validationStateRef.current!.commitValidation();
59-
}, [props.onSelectionChange, triggerState])
61+
}, [onSelectionChange, triggerState])
6062
});
6163

6264
let validationState = useFormValidationState({
6365
...props,
6466
value: listState.selectedKey
6567
});
66-
validationStateRef.current = validationState;
68+
useLayoutEffect(() => {
69+
validationStateRef.current = validationState;
70+
}, [validationState]);
71+
6772

6873
let [isFocused, setFocused] = useState(false);
6974

0 commit comments

Comments
 (0)