Skip to content

Commit db5d31c

Browse files
committed
chore: reafctoring
1 parent 5fffcdd commit db5d31c

File tree

8 files changed

+55
-56
lines changed

8 files changed

+55
-56
lines changed

packages/components/date-input/src/use-date-input.ts

+5-11
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type {DateInputGroupProps} from "./date-input-group";
1010
import {useLocale} from "@react-aria/i18n";
1111
import {createCalendar, CalendarDate, DateFormatter} from "@internationalized/date";
1212
import {mergeProps} from "@react-aria/utils";
13-
import {PropGetter, useProviderContext} from "@nextui-org/system";
13+
import {PropGetter, useLabelPlacement, useProviderContext} from "@nextui-org/system";
1414
import {HTMLNextUIProps, mapPropsVariants} from "@nextui-org/system";
1515
import {useDOMRef} from "@nextui-org/react-utils";
1616
import {useDateField as useAriaDateField} from "@react-aria/datepicker";
@@ -191,16 +191,10 @@ export function useDateInput<T extends DateValue>(originalProps: UseDateInputPro
191191

192192
const isInvalid = isInvalidProp || ariaIsInvalid;
193193

194-
const labelPlacement = useMemo<DateInputVariantProps["labelPlacement"]>(() => {
195-
const labelPlacement =
196-
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";
197-
198-
if (labelPlacement === "inside" && !label) {
199-
return "outside";
200-
}
201-
202-
return labelPlacement;
203-
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
194+
const labelPlacement = useLabelPlacement({
195+
labelPlacement: originalProps.labelPlacement,
196+
label,
197+
});
204198

205199
const shouldLabelBeOutside = labelPlacement === "outside" || labelPlacement === "outside-left";
206200

packages/components/date-input/src/use-time-input.ts

+5-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {DateInputGroupProps} from "./date-input-group";
66

77
import {useLocale} from "@react-aria/i18n";
88
import {mergeProps} from "@react-aria/utils";
9-
import {PropGetter, useProviderContext} from "@nextui-org/system";
9+
import {PropGetter, useLabelPlacement, useProviderContext} from "@nextui-org/system";
1010
import {HTMLNextUIProps, mapPropsVariants} from "@nextui-org/system";
1111
import {useDOMRef} from "@nextui-org/react-utils";
1212
import {useTimeField as useAriaTimeField} from "@react-aria/datepicker";
@@ -133,16 +133,10 @@ export function useTimeInput<T extends TimeValue>(originalProps: UseTimeInputPro
133133

134134
const baseStyles = clsx(classNames?.base, className);
135135

136-
const labelPlacement = useMemo<DateInputVariantProps["labelPlacement"]>(() => {
137-
const labelPlacement =
138-
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";
139-
140-
if (labelPlacement === "inside" && !label) {
141-
return "outside";
142-
}
143-
144-
return labelPlacement;
145-
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
136+
const labelPlacement = useLabelPlacement({
137+
labelPlacement: originalProps.labelPlacement,
138+
label,
139+
});
146140

147141
const shouldLabelBeOutside = labelPlacement === "outside" || labelPlacement === "outside-left";
148142

packages/components/date-picker/src/use-date-picker-base.ts

+11-12
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ import type {ValueBase} from "@react-types/shared";
99

1010
import {dataAttr} from "@nextui-org/shared-utils";
1111
import {dateInput, DatePickerVariantProps} from "@nextui-org/theme";
12-
import {useCallback, useMemo} from "react";
13-
import {HTMLNextUIProps, mapPropsVariants, useProviderContext} from "@nextui-org/system";
12+
import {useCallback} from "react";
13+
import {
14+
HTMLNextUIProps,
15+
mapPropsVariants,
16+
useLabelPlacement,
17+
useProviderContext,
18+
} from "@nextui-org/system";
1419
import {mergeProps} from "@react-aria/utils";
1520
import {useDOMRef} from "@nextui-org/react-utils";
1621
import {useLocalizedStringFormatter} from "@react-aria/i18n";
@@ -234,16 +239,10 @@ export function useDatePickerBase<T extends DateValue>(originalProps: UseDatePic
234239
"data-invalid": dataAttr(originalProps?.isInvalid),
235240
} as DateInputProps;
236241

237-
const labelPlacement = useMemo<TimeInputProps["labelPlacement"]>(() => {
238-
const labelPlacement =
239-
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";
240-
241-
if (labelPlacement === "inside" && !label) {
242-
return "outside";
243-
}
244-
245-
return labelPlacement;
246-
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
242+
const labelPlacement = useLabelPlacement({
243+
labelPlacement: originalProps.labelPlacement,
244+
label,
245+
});
247246

248247
const timeInputProps = {
249248
...userTimeInputProps,

packages/components/date-picker/src/use-date-range-picker.ts

+5-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type {DateValue} from "@internationalized/date";
2-
import type {DateInputVariantProps} from "@nextui-org/theme";
32
import type {TimeInputProps} from "@nextui-org/date-input";
43
import type {ButtonProps} from "@nextui-org/button";
54
import type {RangeCalendarProps} from "@nextui-org/calendar";
@@ -14,7 +13,7 @@ import type {DateInputGroupProps} from "@nextui-org/date-input";
1413
import type {DateRangePickerSlots, SlotsToClasses} from "@nextui-org/theme";
1514
import type {DateInputProps} from "@nextui-org/date-input";
1615

17-
import {useProviderContext} from "@nextui-org/system";
16+
import {useLabelPlacement, useProviderContext} from "@nextui-org/system";
1817
import {useMemo, useRef} from "react";
1918
import {useDateRangePickerState} from "@react-stately/datepicker";
2019
import {useDateRangePicker as useAriaDateRangePicker} from "@react-aria/datepicker";
@@ -144,16 +143,10 @@ export function useDateRangePicker<T extends DateValue>({
144143

145144
const showTimeField = !!timeGranularity;
146145

147-
const labelPlacement = useMemo<DateInputVariantProps["labelPlacement"]>(() => {
148-
const labelPlacement =
149-
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";
150-
151-
if (labelPlacement === "inside" && !label) {
152-
return "outside";
153-
}
154-
155-
return labelPlacement;
156-
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
146+
const labelPlacement = useLabelPlacement({
147+
labelPlacement: originalProps.labelPlacement,
148+
label,
149+
});
157150

158151
const shouldLabelBeOutside = labelPlacement === "outside" || labelPlacement === "outside-left";
159152

packages/components/select/src/use-select.ts

+5-10
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
mapPropsVariants,
88
PropGetter,
99
SharedSelection,
10+
useLabelPlacement,
1011
useProviderContext,
1112
} from "@nextui-org/system";
1213
import {select} from "@nextui-org/theme";
@@ -343,16 +344,10 @@ export function useSelect<T extends object>(originalProps: UseSelectProps<T>) {
343344
const {focusProps, isFocused, isFocusVisible} = useFocusRing();
344345
const {isHovered, hoverProps} = useHover({isDisabled: originalProps.isDisabled});
345346

346-
const labelPlacement = useMemo<SelectVariantProps["labelPlacement"]>(() => {
347-
const labelPlacement =
348-
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";
349-
350-
if (labelPlacement === "inside" && !label) {
351-
return "outside";
352-
}
353-
354-
return labelPlacement;
355-
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
347+
const labelPlacement = useLabelPlacement({
348+
labelPlacement: originalProps.labelPlacement,
349+
label,
350+
});
356351

357352
const hasPlaceholder = !!placeholder;
358353
const shouldLabelBeOutside =
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export {useLabelPlacement} from "./use-label-placement";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import {useMemo} from "react";
2+
3+
import {useProviderContext} from "../provider-context";
4+
5+
export function useLabelPlacement(props: {
6+
labelPlacement?: "inside" | "outside" | "outside-left";
7+
label?: React.ReactNode;
8+
}) {
9+
const globalContext = useProviderContext();
10+
const globalLabelPlacement = globalContext?.labelPlacement;
11+
12+
return useMemo(() => {
13+
const labelPlacement = props.labelPlacement ?? globalLabelPlacement ?? "inside";
14+
15+
if (labelPlacement === "inside" && !props.label) {
16+
return "outside";
17+
}
18+
19+
return labelPlacement;
20+
}, [props.labelPlacement, globalLabelPlacement, props.label]);
21+
}

packages/core/system/src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,5 @@ export type {ProviderContextProps} from "./provider-context";
3333

3434
export {NextUIProvider} from "./provider";
3535
export {ProviderContext, useProviderContext} from "./provider-context";
36+
37+
export {useLabelPlacement} from "./hooks";

0 commit comments

Comments
 (0)