@udixio/ui-react 2.9.21 → 2.9.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/index.cjs +3 -3
- package/dist/index.js +755 -750
- package/dist/lib/components/TextField.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lib/components/TextField.tsx +52 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TextField.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,yRA0BvB,UAAU,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TextField.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,yRA0BvB,UAAU,CAAC,kBAAkB,CAAC,4CAkYhC,CAAC"}
|
package/package.json
CHANGED
|
@@ -134,10 +134,14 @@ export const TextField = ({
|
|
|
134
134
|
return null;
|
|
135
135
|
}, [value]);
|
|
136
136
|
|
|
137
|
-
const
|
|
137
|
+
const handleDatePickerToggle = () => {
|
|
138
138
|
if (disabled) return;
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
if (showDatePicker) {
|
|
140
|
+
setShowDatePicker(false);
|
|
141
|
+
} else {
|
|
142
|
+
setTempDate(initialDateValue);
|
|
143
|
+
setShowDatePicker(true);
|
|
144
|
+
}
|
|
141
145
|
};
|
|
142
146
|
|
|
143
147
|
useEffect(() => {
|
|
@@ -148,6 +152,49 @@ export const TextField = ({
|
|
|
148
152
|
}
|
|
149
153
|
}, [showDatePicker]);
|
|
150
154
|
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
if (!showDatePicker) return;
|
|
157
|
+
|
|
158
|
+
const isInside = (target: Node | null) => {
|
|
159
|
+
if (!target) return false;
|
|
160
|
+
return (
|
|
161
|
+
textFieldRef.current?.contains(target) ||
|
|
162
|
+
datePickerRef.current?.contains(target)
|
|
163
|
+
);
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const handlePointerDown = (e: PointerEvent) => {
|
|
167
|
+
const target = e.target as Node;
|
|
168
|
+
const inDatePicker = datePickerRef.current?.contains(target);
|
|
169
|
+
const inCalendarTrigger = calendarTriggerRef.current?.contains(target);
|
|
170
|
+
if (!inDatePicker && !inCalendarTrigger) {
|
|
171
|
+
setShowDatePicker(false);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const handleFocusIn = (e: FocusEvent) => {
|
|
176
|
+
if (!isInside(e.target as Node)) {
|
|
177
|
+
setShowDatePicker(false);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const handleKeyDown = (e: KeyboardEvent) => {
|
|
182
|
+
if (e.key === 'Escape') {
|
|
183
|
+
setShowDatePicker(false);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
document.addEventListener('pointerdown', handlePointerDown);
|
|
188
|
+
document.addEventListener('focusin', handleFocusIn);
|
|
189
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
190
|
+
|
|
191
|
+
return () => {
|
|
192
|
+
document.removeEventListener('pointerdown', handlePointerDown);
|
|
193
|
+
document.removeEventListener('focusin', handleFocusIn);
|
|
194
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
195
|
+
};
|
|
196
|
+
}, [showDatePicker]);
|
|
197
|
+
|
|
151
198
|
const handleDateConfirm = () => {
|
|
152
199
|
const newValue = tempDate ? tempDate.toLocaleDateString('en-CA') : '';
|
|
153
200
|
|
|
@@ -294,7 +341,6 @@ export const TextField = ({
|
|
|
294
341
|
autoComplete={autoComplete}
|
|
295
342
|
aria-invalid={!!errorText?.length}
|
|
296
343
|
aria-describedby={hasSupportingText ? helperTextId : undefined}
|
|
297
|
-
autoFocus={autoFocus}
|
|
298
344
|
{...textComponentProps}
|
|
299
345
|
/>
|
|
300
346
|
</div>
|
|
@@ -308,7 +354,7 @@ export const TextField = ({
|
|
|
308
354
|
ref={isDateInput ? calendarTriggerRef : undefined}
|
|
309
355
|
onClick={(event) => {
|
|
310
356
|
event.stopPropagation();
|
|
311
|
-
if (isDateInput)
|
|
357
|
+
if (isDateInput) handleDatePickerToggle();
|
|
312
358
|
}}
|
|
313
359
|
className={classNames(
|
|
314
360
|
styles.trailingIcon,
|
|
@@ -359,18 +405,7 @@ export const TextField = ({
|
|
|
359
405
|
|
|
360
406
|
{isDateInput && showDatePicker && (
|
|
361
407
|
<>
|
|
362
|
-
<AnchorPositioner
|
|
363
|
-
onBlur={(e) => {
|
|
364
|
-
if (
|
|
365
|
-
datePickerRef.current &&
|
|
366
|
-
!datePickerRef.current?.contains(e.relatedTarget)
|
|
367
|
-
) {
|
|
368
|
-
setShowDatePicker(false);
|
|
369
|
-
}
|
|
370
|
-
}}
|
|
371
|
-
anchorRef={textFieldRef}
|
|
372
|
-
position="bottom"
|
|
373
|
-
>
|
|
408
|
+
<AnchorPositioner anchorRef={textFieldRef} position="bottom">
|
|
374
409
|
<div
|
|
375
410
|
ref={datePickerRef}
|
|
376
411
|
className="z-50 shadow-xl rounded-[28px] bg-surface-container-high overflow-hidden"
|