MCPcopy Index your code
hub / github.com/adobe/react-spectrum / useDatePicker

Function useDatePicker

packages/react-aria/src/datepicker/useDatePicker.ts:76–223  ·  view source on GitHub ↗
(
  props: AriaDatePickerProps<T>,
  state: DatePickerState,
  ref: RefObject<Element | null>
)

Source from the content-addressed store, hash-verified

74 * value.
75 */
76export function useDatePicker<T extends DateValue>(
77 props: AriaDatePickerProps<T>,
78 state: DatePickerState,
79 ref: RefObject<Element | null>
80): DatePickerAria {
81 let buttonId = useId();
82 let dialogId = useId();
83 let fieldId = useId();
84 let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/datepicker');
85
86 let {isInvalid, validationErrors, validationDetails} = state.displayValidation;
87 let {labelProps, fieldProps, descriptionProps, errorMessageProps} = useField({
88 ...props,
89 labelElementType: 'span',
90 isInvalid,
91 errorMessage: props.errorMessage || validationErrors
92 });
93
94 let groupProps = useDatePickerGroup(state, ref);
95
96 let labelledBy = fieldProps['aria-labelledby'] || fieldProps.id;
97
98 let {locale} = useLocale();
99 let date = state.formatValue(locale, {month: 'long'});
100 let description = date ? stringFormatter.format('selectedDateDescription', {date}) : '';
101 let descProps = useDescription(description);
102 let ariaDescribedBy =
103 [descProps['aria-describedby'], fieldProps['aria-describedby']].filter(Boolean).join(' ') ||
104 undefined;
105 let domProps = filterDOMProps(props);
106 let focusManager = useMemo(() => createFocusManager(ref), [ref]);
107
108 let isFocused = useRef(false);
109 let {focusWithinProps} = useFocusWithin({
110 ...props,
111 isDisabled: state.isOpen,
112 onBlurWithin: e => {
113 // Ignore when focus moves into the popover.
114 let dialog = document.getElementById(dialogId);
115 if (!nodeContains(dialog, e.relatedTarget)) {
116 isFocused.current = false;
117 props.onBlur?.(e);
118 props.onFocusChange?.(false);
119 }
120 },
121 onFocusWithin: e => {
122 if (!isFocused.current) {
123 isFocused.current = true;
124 props.onFocus?.(e);
125 props.onFocusChange?.(true);
126 }
127 }
128 });
129
130 return {
131 groupProps: mergeProps(domProps, groupProps, fieldProps, descProps, focusWithinProps, {
132 role: 'group' as const,
133 'aria-disabled': props.isDisabled || null,

Callers 2

DatePicker.tsxFile · 0.90
DatePicker.tsxFile · 0.90

Calls 15

useIdFunction · 0.90
useFieldFunction · 0.90
useDatePickerGroupFunction · 0.90
useLocaleFunction · 0.90
useDescriptionFunction · 0.90
filterDOMPropsFunction · 0.90
createFocusManagerFunction · 0.90
useFocusWithinFunction · 0.90
nodeContainsFunction · 0.90
mergePropsFunction · 0.90
onBlurMethod · 0.80

Tested by

no test coverage detected