Skip to content

Commit

Permalink
chore: reafctoring
Browse files Browse the repository at this point in the history
  • Loading branch information
macci001 committed Dec 12, 2024
1 parent 5fffcdd commit db5d31c
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 56 deletions.
16 changes: 5 additions & 11 deletions packages/components/date-input/src/use-date-input.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import type {DateInputGroupProps} from "./date-input-group";
import {useLocale} from "@react-aria/i18n";
import {createCalendar, CalendarDate, DateFormatter} from "@internationalized/date";
import {mergeProps} from "@react-aria/utils";
import {PropGetter, useProviderContext} from "@nextui-org/system";
import {PropGetter, useLabelPlacement, useProviderContext} from "@nextui-org/system";
import {HTMLNextUIProps, mapPropsVariants} from "@nextui-org/system";
import {useDOMRef} from "@nextui-org/react-utils";
import {useDateField as useAriaDateField} from "@react-aria/datepicker";
Expand Down Expand Up @@ -191,16 +191,10 @@ export function useDateInput<T extends DateValue>(originalProps: UseDateInputPro

const isInvalid = isInvalidProp || ariaIsInvalid;

const labelPlacement = useMemo<DateInputVariantProps["labelPlacement"]>(() => {
const labelPlacement =
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";

if (labelPlacement === "inside" && !label) {
return "outside";
}

return labelPlacement;
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
const labelPlacement = useLabelPlacement({
labelPlacement: originalProps.labelPlacement,
label,
});

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

Expand Down
16 changes: 5 additions & 11 deletions packages/components/date-input/src/use-time-input.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type {DateInputGroupProps} from "./date-input-group";

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

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

const labelPlacement = useMemo<DateInputVariantProps["labelPlacement"]>(() => {
const labelPlacement =
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";

if (labelPlacement === "inside" && !label) {
return "outside";
}

return labelPlacement;
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
const labelPlacement = useLabelPlacement({
labelPlacement: originalProps.labelPlacement,
label,
});

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

Expand Down
23 changes: 11 additions & 12 deletions packages/components/date-picker/src/use-date-picker-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,13 @@ import type {ValueBase} from "@react-types/shared";

import {dataAttr} from "@nextui-org/shared-utils";
import {dateInput, DatePickerVariantProps} from "@nextui-org/theme";
import {useCallback, useMemo} from "react";
import {HTMLNextUIProps, mapPropsVariants, useProviderContext} from "@nextui-org/system";
import {useCallback} from "react";
import {
HTMLNextUIProps,
mapPropsVariants,
useLabelPlacement,
useProviderContext,
} from "@nextui-org/system";
import {mergeProps} from "@react-aria/utils";
import {useDOMRef} from "@nextui-org/react-utils";
import {useLocalizedStringFormatter} from "@react-aria/i18n";
Expand Down Expand Up @@ -234,16 +239,10 @@ export function useDatePickerBase<T extends DateValue>(originalProps: UseDatePic
"data-invalid": dataAttr(originalProps?.isInvalid),
} as DateInputProps;

const labelPlacement = useMemo<TimeInputProps["labelPlacement"]>(() => {
const labelPlacement =
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";

if (labelPlacement === "inside" && !label) {
return "outside";
}

return labelPlacement;
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
const labelPlacement = useLabelPlacement({
labelPlacement: originalProps.labelPlacement,
label,
});

const timeInputProps = {
...userTimeInputProps,
Expand Down
17 changes: 5 additions & 12 deletions packages/components/date-picker/src/use-date-range-picker.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type {DateValue} from "@internationalized/date";
import type {DateInputVariantProps} from "@nextui-org/theme";
import type {TimeInputProps} from "@nextui-org/date-input";
import type {ButtonProps} from "@nextui-org/button";
import type {RangeCalendarProps} from "@nextui-org/calendar";
Expand All @@ -14,7 +13,7 @@ import type {DateInputGroupProps} from "@nextui-org/date-input";
import type {DateRangePickerSlots, SlotsToClasses} from "@nextui-org/theme";
import type {DateInputProps} from "@nextui-org/date-input";

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

const showTimeField = !!timeGranularity;

const labelPlacement = useMemo<DateInputVariantProps["labelPlacement"]>(() => {
const labelPlacement =
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";

if (labelPlacement === "inside" && !label) {
return "outside";
}

return labelPlacement;
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
const labelPlacement = useLabelPlacement({
labelPlacement: originalProps.labelPlacement,
label,
});

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

Expand Down
15 changes: 5 additions & 10 deletions packages/components/select/src/use-select.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
mapPropsVariants,
PropGetter,
SharedSelection,
useLabelPlacement,
useProviderContext,
} from "@nextui-org/system";
import {select} from "@nextui-org/theme";
Expand Down Expand Up @@ -343,16 +344,10 @@ export function useSelect<T extends object>(originalProps: UseSelectProps<T>) {
const {focusProps, isFocused, isFocusVisible} = useFocusRing();
const {isHovered, hoverProps} = useHover({isDisabled: originalProps.isDisabled});

const labelPlacement = useMemo<SelectVariantProps["labelPlacement"]>(() => {
const labelPlacement =
originalProps.labelPlacement ?? globalContext?.labelPlacement ?? "inside";

if (labelPlacement === "inside" && !label) {
return "outside";
}

return labelPlacement;
}, [originalProps.labelPlacement, globalContext?.labelPlacement, label]);
const labelPlacement = useLabelPlacement({
labelPlacement: originalProps.labelPlacement,
label,
});

const hasPlaceholder = !!placeholder;
const shouldLabelBeOutside =
Expand Down
1 change: 1 addition & 0 deletions packages/core/system/src/hooks/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {useLabelPlacement} from "./use-label-placement";
21 changes: 21 additions & 0 deletions packages/core/system/src/hooks/use-label-placement.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import {useMemo} from "react";

import {useProviderContext} from "../provider-context";

export function useLabelPlacement(props: {
labelPlacement?: "inside" | "outside" | "outside-left";
label?: React.ReactNode;
}) {
const globalContext = useProviderContext();
const globalLabelPlacement = globalContext?.labelPlacement;

return useMemo(() => {
const labelPlacement = props.labelPlacement ?? globalLabelPlacement ?? "inside";

if (labelPlacement === "inside" && !props.label) {
return "outside";
}

return labelPlacement;
}, [props.labelPlacement, globalLabelPlacement, props.label]);
}
2 changes: 2 additions & 0 deletions packages/core/system/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,5 @@ export type {ProviderContextProps} from "./provider-context";

export {NextUIProvider} from "./provider";
export {ProviderContext, useProviderContext} from "./provider-context";

export {useLabelPlacement} from "./hooks";

0 comments on commit db5d31c

Please sign in to comment.