diff --git a/components/doc/passthrough/usepassthroughdoc.js b/components/doc/passthrough/usepassthroughdoc.js index 989e03c5f8..555efc9c91 100644 --- a/components/doc/passthrough/usepassthroughdoc.js +++ b/components/doc/passthrough/usepassthroughdoc.js @@ -114,6 +114,10 @@ const CustomTailwind = usePassThrough( The mergeSections defines whether the sections from the main configuration gets added and the mergeProps controls whether to override or merge the defined props. Defaults are true for mergeSections and false for mergeProps.
++ Some CSS libraries, such as Tailwind, require that class names be merged in a non-conflicting manner. In order to support them a classNameMergeFunction may be passed as part of the ptOptions object to manually + define how class names will be merged. +
+
Voilà 💙, you now have 90+ awesome React UI components styled with Tailwind that will work in harmony with the rest of your application. Time to customize it to bring in your own style with Tailwind.
> diff --git a/components/lib/accordion/Accordion.js b/components/lib/accordion/Accordion.js index 6572df2596..9f5eec7ab8 100644 --- a/components/lib/accordion/Accordion.js +++ b/components/lib/accordion/Accordion.js @@ -2,15 +2,16 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; import { ChevronRightIcon } from '../icons/chevronright'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames } from '../utils/Utils'; import { AccordionBase, AccordionTabBase } from './AccordionBase'; export const AccordionTab = () => {}; export const Accordion = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = AccordionBase.getProps(inProps, context); const [idState, setIdState] = React.useState(props.id); diff --git a/components/lib/autocomplete/AutoComplete.js b/components/lib/autocomplete/AutoComplete.js index 0a1cdaef12..a5d41e56b8 100644 --- a/components/lib/autocomplete/AutoComplete.js +++ b/components/lib/autocomplete/AutoComplete.js @@ -2,19 +2,20 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, localeOption } from '../api/Api'; import { Button } from '../button/Button'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; import { SpinnerIcon } from '../icons/spinner'; import { TimesCircleIcon } from '../icons/timescircle'; import { InputText } from '../inputtext/InputText'; import { OverlayService } from '../overlayservice/OverlayService'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames } from '../utils/Utils'; import { AutoCompleteBase } from './AutoCompleteBase'; import { AutoCompletePanel } from './AutoCompletePanel'; export const AutoComplete = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = AutoCompleteBase.getProps(inProps, context); const [idState, setIdState] = React.useState(props.id); diff --git a/components/lib/autocomplete/AutoCompletePanel.js b/components/lib/autocomplete/AutoCompletePanel.js index d7b9170895..3f96d6f383 100644 --- a/components/lib/autocomplete/AutoCompletePanel.js +++ b/components/lib/autocomplete/AutoCompletePanel.js @@ -1,13 +1,15 @@ import * as React from 'react'; import { localeOption, PrimeReactContext } from '../api/Api'; import { CSSTransition } from '../csstransition/CSSTransition'; +import { useMergeProps } from '../hooks/Hooks'; import { Portal } from '../portal/Portal'; import { Ripple } from '../ripple/Ripple'; -import { classNames, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, ObjectUtils } from '../utils/Utils'; import { VirtualScroller } from '../virtualscroller/VirtualScroller'; export const AutoCompletePanel = React.memo( React.forwardRef((props, ref) => { + const mergeProps = useMergeProps(); const { ptm, cx } = props; const context = React.useContext(PrimeReactContext); diff --git a/components/lib/avatar/Avatar.js b/components/lib/avatar/Avatar.js index 10703d22dd..8b5c3b63b5 100644 --- a/components/lib/avatar/Avatar.js +++ b/components/lib/avatar/Avatar.js @@ -1,10 +1,12 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { useMergeProps } from '../hooks/Hooks'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { AvatarBase } from './AvatarBase'; export const Avatar = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = AvatarBase.getProps(inProps, context); diff --git a/components/lib/avatargroup/AvatarGroup.js b/components/lib/avatargroup/AvatarGroup.js index a714d0de05..995b30072e 100644 --- a/components/lib/avatargroup/AvatarGroup.js +++ b/components/lib/avatargroup/AvatarGroup.js @@ -1,10 +1,12 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { classNames, mergeProps } from '../utils/Utils'; +import { useMergeProps } from '../hooks/Hooks'; +import { classNames } from '../utils/Utils'; import { AvatarGroupBase } from './AvatarGroupBase'; export const AvatarGroup = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = AvatarGroupBase.getProps(inProps, context); diff --git a/components/lib/badge/Badge.js b/components/lib/badge/Badge.js index 27cfa02f50..736a91f7bd 100644 --- a/components/lib/badge/Badge.js +++ b/components/lib/badge/Badge.js @@ -1,11 +1,13 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { classNames, mergeProps } from '../utils/Utils'; +import { useMergeProps } from '../hooks/Hooks'; +import { classNames } from '../utils/Utils'; import { BadgeBase } from './BadgeBase'; export const Badge = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = BadgeBase.getProps(inProps, context); diff --git a/components/lib/blockui/BlockUI.js b/components/lib/blockui/BlockUI.js index 589157e4f8..3017dc1c07 100644 --- a/components/lib/blockui/BlockUI.js +++ b/components/lib/blockui/BlockUI.js @@ -1,12 +1,13 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { Portal } from '../portal/Portal'; -import { DomHandler, ObjectUtils, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, ObjectUtils, ZIndexUtils, classNames } from '../utils/Utils'; import { BlockUIBase } from './BlockUIBase'; export const BlockUI = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = BlockUIBase.getProps(inProps, context); diff --git a/components/lib/breadcrumb/BreadCrumb.js b/components/lib/breadcrumb/BreadCrumb.js index cb36a70e4c..d13e5b8b42 100644 --- a/components/lib/breadcrumb/BreadCrumb.js +++ b/components/lib/breadcrumb/BreadCrumb.js @@ -1,13 +1,14 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { ChevronRightIcon } from '../icons/chevronright'; -import { IconUtils, mergeProps, ObjectUtils, UniqueComponentId } from '../utils/Utils'; +import { IconUtils, ObjectUtils, UniqueComponentId } from '../utils/Utils'; import { BreadCrumbBase } from './BreadCrumbBase'; export const BreadCrumb = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = BreadCrumbBase.getProps(inProps, context); const [idState, setIdState] = React.useState(props.id); diff --git a/components/lib/button/Button.js b/components/lib/button/Button.js index 79147c129d..0c34e43e69 100644 --- a/components/lib/button/Button.js +++ b/components/lib/button/Button.js @@ -2,14 +2,16 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { Badge } from '../badge/Badge'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; import { SpinnerIcon } from '../icons/spinner'; import { Ripple } from '../ripple/Ripple'; import { Tooltip } from '../tooltip/Tooltip'; -import { IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { ButtonBase } from './ButtonBase'; export const Button = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ButtonBase.getProps(inProps, context); const disabled = props.disabled || props.loading; diff --git a/components/lib/calendar/Calendar.js b/components/lib/calendar/Calendar.js index 148fe65aa0..d06e23d557 100644 --- a/components/lib/calendar/Calendar.js +++ b/components/lib/calendar/Calendar.js @@ -2,7 +2,7 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, localeOption, localeOptions } from '../api/Api'; import { Button } from '../button/Button'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useOverlayListener, usePrevious, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useOverlayListener, usePrevious, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { CalendarIcon } from '../icons/calendar'; import { ChevronDownIcon } from '../icons/chevrondown'; import { ChevronLeftIcon } from '../icons/chevronleft'; @@ -11,12 +11,13 @@ import { ChevronUpIcon } from '../icons/chevronup'; import { InputText } from '../inputtext/InputText'; import { OverlayService } from '../overlayservice/OverlayService'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mask, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mask } from '../utils/Utils'; import { CalendarBase } from './CalendarBase'; import { CalendarPanel } from './CalendarPanel'; export const Calendar = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = CalendarBase.getProps(inProps, context); const [focusedState, setFocusedState] = React.useState(false); diff --git a/components/lib/calendar/CalendarPanel.js b/components/lib/calendar/CalendarPanel.js index ff3759a6ae..f969242a44 100644 --- a/components/lib/calendar/CalendarPanel.js +++ b/components/lib/calendar/CalendarPanel.js @@ -1,10 +1,11 @@ import * as React from 'react'; import { CSSTransition } from '../csstransition/CSSTransition'; +import { useMergeProps } from '../hooks/Hooks'; import { Portal } from '../portal/Portal'; -import { mergeProps } from '../utils/Utils'; export const CalendarPanel = React.forwardRef((props, ref) => { const cx = props.cx; + const mergeProps = useMergeProps(); const createElement = () => { const panelProps = mergeProps( diff --git a/components/lib/card/Card.js b/components/lib/card/Card.js index 38a869f7dd..5762d3da0e 100644 --- a/components/lib/card/Card.js +++ b/components/lib/card/Card.js @@ -1,10 +1,12 @@ import * as React from 'react'; -import { ObjectUtils, mergeProps } from '../utils/Utils'; -import { CardBase } from './CardBase'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; +import { ObjectUtils } from '../utils/Utils'; +import { CardBase } from './CardBase'; export const Card = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = CardBase.getProps(inProps, context); diff --git a/components/lib/carousel/Carousel.js b/components/lib/carousel/Carousel.js index e128a777a6..76ab5de297 100644 --- a/components/lib/carousel/Carousel.js +++ b/components/lib/carousel/Carousel.js @@ -1,16 +1,17 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, localeOption } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, usePrevious, useResizeListener, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, usePrevious, useResizeListener, useUpdateEffect } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; import { ChevronLeftIcon } from '../icons/chevronleft'; import { ChevronRightIcon } from '../icons/chevronright'; import { ChevronUpIcon } from '../icons/chevronup'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames } from '../utils/Utils'; import { CarouselBase } from './CarouselBase'; const CarouselItem = React.memo((props) => { + const mergeProps = useMergeProps(); const { ptm, cx } = props; const key = props.className && props.className === 'p-carousel-item-cloned' ? 'itemCloned' : 'item'; const content = props.template(props.item); diff --git a/components/lib/cascadeselect/CascadeSelect.js b/components/lib/cascadeselect/CascadeSelect.js index 21af0ceca2..911af5f8db 100644 --- a/components/lib/cascadeselect/CascadeSelect.js +++ b/components/lib/cascadeselect/CascadeSelect.js @@ -2,17 +2,18 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useGlobalOnEscapeKey, useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useGlobalOnEscapeKey, useMergeProps, useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; import { SpinnerIcon } from '../icons/spinner'; import { OverlayService } from '../overlayservice/OverlayService'; import { Portal } from '../portal/Portal'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils } from '../utils/Utils'; import { CascadeSelectBase } from './CascadeSelectBase'; import { CascadeSelectSub } from './CascadeSelectSub'; export const CascadeSelect = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = CascadeSelectBase.getProps(inProps, context); const [focusedState, setFocusedState] = React.useState(false); diff --git a/components/lib/cascadeselect/CascadeSelectSub.js b/components/lib/cascadeselect/CascadeSelectSub.js index 7dc45c32b6..0772b5aec0 100644 --- a/components/lib/cascadeselect/CascadeSelectSub.js +++ b/components/lib/cascadeselect/CascadeSelectSub.js @@ -1,10 +1,11 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; -import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useUpdateEffect } from '../hooks/Hooks'; import { AngleRightIcon } from '../icons/angleright'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; export const CascadeSelectSub = React.memo((props) => { + const mergeProps = useMergeProps(); const [activeOptionState, setActiveOptionState] = React.useState(null); const elementRef = React.useRef(null); const context = React.useContext(PrimeReactContext); diff --git a/components/lib/chart/Chart.js b/components/lib/chart/Chart.js index b7c088291e..63cc531674 100644 --- a/components/lib/chart/Chart.js +++ b/components/lib/chart/Chart.js @@ -1,9 +1,8 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; -import { useUnmountEffect } from '../hooks/Hooks'; -import { mergeProps } from '../utils/Utils'; -import { ChartBase } from './ChartBase'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps, useUnmountEffect } from '../hooks/Hooks'; +import { ChartBase } from './ChartBase'; // GitHub #3059 wrapper if loaded by script tag const ChartJS = (function () { @@ -16,6 +15,7 @@ const ChartJS = (function () { const PrimeReactChart = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ChartBase.getProps(inProps, context); diff --git a/components/lib/checkbox/Checkbox.js b/components/lib/checkbox/Checkbox.js index dfee79bf72..bf0461f092 100644 --- a/components/lib/checkbox/Checkbox.js +++ b/components/lib/checkbox/Checkbox.js @@ -1,14 +1,15 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useUpdateEffect } from '../hooks/Hooks'; import { CheckIcon } from '../icons/check'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { CheckboxBase } from './CheckboxBase'; export const Checkbox = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = CheckboxBase.getProps(inProps, context); const [focusedState, setFocusedState] = React.useState(false); diff --git a/components/lib/chip/Chip.js b/components/lib/chip/Chip.js index 29fb9af7a1..6a0f347438 100644 --- a/components/lib/chip/Chip.js +++ b/components/lib/chip/Chip.js @@ -1,12 +1,14 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; import { TimesCircleIcon } from '../icons/timescircle'; -import { classNames, IconUtils, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, IconUtils, ObjectUtils } from '../utils/Utils'; import { ChipBase } from './ChipBase'; export const Chip = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ChipBase.getProps(inProps, context); const elementRef = React.useRef(null); diff --git a/components/lib/chips/Chips.js b/components/lib/chips/Chips.js index 5b8c8fd2bc..2fe2e19f91 100644 --- a/components/lib/chips/Chips.js +++ b/components/lib/chips/Chips.js @@ -1,15 +1,16 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { TimesCircleIcon } from '../icons/timescircle'; import { KeyFilter } from '../keyfilter/KeyFilter'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { ChipsBase } from './ChipsBase'; export const Chips = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ChipsBase.getProps(inProps, context); const [focusedState, setFocusedState] = React.useState(false); diff --git a/components/lib/colorpicker/ColorPicker.js b/components/lib/colorpicker/ColorPicker.js index 7b55225377..4d4635a64b 100644 --- a/components/lib/colorpicker/ColorPicker.js +++ b/components/lib/colorpicker/ColorPicker.js @@ -1,15 +1,16 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useEventListener, useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useEventListener, useMergeProps, useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { OverlayService } from '../overlayservice/OverlayService'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, ObjectUtils, ZIndexUtils, mergeProps } from '../utils/Utils'; +import { DomHandler, ObjectUtils, ZIndexUtils } from '../utils/Utils'; import { ColorPickerBase } from './ColorPickerBase'; import { ColorPickerPanel } from './ColorPickerPanel'; export const ColorPicker = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ColorPickerBase.getProps(inProps, context); const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); diff --git a/components/lib/componentbase/ComponentBase.js b/components/lib/componentbase/ComponentBase.js index aeb24e2ed6..f76533d689 100644 --- a/components/lib/componentbase/ComponentBase.js +++ b/components/lib/componentbase/ComponentBase.js @@ -1,7 +1,6 @@ import PrimeReact from '../api/Api'; import { useMountEffect, useStyle, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; -import { mergeProps } from '../utils/MergeProps'; -import { ObjectUtils, classNames } from '../utils/Utils'; +import { ObjectUtils, _mergeProps, classNames } from '../utils/Utils'; const baseStyle = ` .p-hidden-accessible { @@ -540,7 +539,7 @@ export const ComponentBase = { return mergeSections || (!mergeSections && self) ? useMergeProps - ? mergeProps(globalPT, self, Object.keys(datasetProps).length ? datasetProps : {}) + ? _mergeProps([globalPT, self, Object.keys(datasetProps).length ? datasetProps : {}], { classNameMergeFunction: ComponentBase.context.ptOptions?.classNameMergeFunction }) : { ...globalPT, ...self, ...(Object.keys(datasetProps).length ? datasetProps : {}) } : { ...self, ...(Object.keys(datasetProps).length ? datasetProps : {}) }; }; @@ -563,7 +562,7 @@ export const ComponentBase = { const self = getOptionValue(css && css.inlineStyles, key, { props, state, ...params }); const base = getOptionValue(inlineStyles, key, { props, state, ...params }); - return mergeProps(base, self); + return _mergeProps([base, self], { classNameMergeFunction: ComponentBase.context.ptOptions?.classNameMergeFunction }); } return undefined; @@ -613,7 +612,7 @@ const _usePT = (pt, callback, key, params) => { const fn = (value) => callback(value, key, params); if (pt?.hasOwnProperty('_usept')) { - const { mergeSections = true, mergeProps: useMergeProps = false } = pt['_usept'] || ComponentBase.context.ptOptions || {}; + const { mergeSections = true, mergeProps: useMergeProps = false, classNameMergeFunction } = pt['_usept'] || ComponentBase.context.ptOptions || {}; const originalValue = fn(pt.originalValue); const value = fn(pt.value); @@ -621,7 +620,7 @@ const _usePT = (pt, callback, key, params) => { else if (ObjectUtils.isString(value)) return value; else if (ObjectUtils.isString(originalValue)) return originalValue; - return mergeSections || (!mergeSections && value) ? (useMergeProps ? mergeProps(originalValue, value) : { ...originalValue, ...value }) : value; + return mergeSections || (!mergeSections && value) ? (useMergeProps ? _mergeProps([originalValue, value], { classNameMergeFunction }) : { ...originalValue, ...value }) : value; } return fn(pt); diff --git a/components/lib/confirmdialog/ConfirmDialog.js b/components/lib/confirmdialog/ConfirmDialog.js index 101a64ae0e..82e94bcd37 100644 --- a/components/lib/confirmdialog/ConfirmDialog.js +++ b/components/lib/confirmdialog/ConfirmDialog.js @@ -2,10 +2,10 @@ import * as React from 'react'; import { PrimeReactContext, localeOption } from '../api/Api'; import { Button } from '../button/Button'; import { Dialog } from '../dialog/Dialog'; -import { useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { OverlayService } from '../overlayservice/OverlayService'; import { Portal } from '../portal/Portal'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { ConfirmDialogBase } from './ConfirmDialogBase'; export const confirmDialog = (props = {}) => { @@ -25,6 +25,7 @@ export const confirmDialog = (props = {}) => { export const ConfirmDialog = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ConfirmDialogBase.getProps(inProps, context); diff --git a/components/lib/confirmpopup/ConfirmPopup.js b/components/lib/confirmpopup/ConfirmPopup.js index 76c0ea8a9f..1405a59b92 100644 --- a/components/lib/confirmpopup/ConfirmPopup.js +++ b/components/lib/confirmpopup/ConfirmPopup.js @@ -3,10 +3,10 @@ import PrimeReact, { PrimeReactContext, localeOption } from '../api/Api'; import { Button } from '../button/Button'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useGlobalOnEscapeKey, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useGlobalOnEscapeKey, useMergeProps, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { OverlayService } from '../overlayservice/OverlayService'; import { Portal } from '../portal/Portal'; -import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames } from '../utils/Utils'; import { ConfirmPopupBase } from './ConfirmPopupBase'; export const confirmPopup = (props = {}) => { @@ -26,6 +26,7 @@ export const confirmPopup = (props = {}) => { export const ConfirmPopup = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ConfirmPopupBase.getProps(inProps, context); diff --git a/components/lib/contextmenu/ContextMenu.js b/components/lib/contextmenu/ContextMenu.js index bfdb3fe9f0..878abd7250 100644 --- a/components/lib/contextmenu/ContextMenu.js +++ b/components/lib/contextmenu/ContextMenu.js @@ -2,14 +2,15 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { useEventListener, useMatchMedia, useMountEffect, useResizeListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useEventListener, useMatchMedia, useMergeProps, useMountEffect, useResizeListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { Portal } from '../portal/Portal'; -import { DomHandler, UniqueComponentId, ZIndexUtils, classNames, mergeProps, ObjectUtils } from '../utils/Utils'; +import { DomHandler, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames } from '../utils/Utils'; import { ContextMenuBase } from './ContextMenuBase'; import { ContextMenuSub } from './ContextMenuSub'; export const ContextMenu = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ContextMenuBase.getProps(inProps, context); diff --git a/components/lib/contextmenu/ContextMenuSub.js b/components/lib/contextmenu/ContextMenuSub.js index 900517ae80..858450f87b 100644 --- a/components/lib/contextmenu/ContextMenuSub.js +++ b/components/lib/contextmenu/ContextMenuSub.js @@ -1,12 +1,13 @@ import * as React from 'react'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useUpdateEffect } from '../hooks/Hooks'; import { AngleRightIcon } from '../icons/angleright'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, mergeProps, ObjectUtils } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils } from '../utils/Utils'; export const ContextMenuSub = React.memo( React.forwardRef((props, ref) => { + const mergeProps = useMergeProps(); const submenuRef = React.useRef(null); const active = props.root || !props.resetMenu; const { ptm, cx } = props; diff --git a/components/lib/datascroller/DataScroller.js b/components/lib/datascroller/DataScroller.js index f306ec81f3..c77791ace0 100644 --- a/components/lib/datascroller/DataScroller.js +++ b/components/lib/datascroller/DataScroller.js @@ -1,12 +1,13 @@ import * as React from 'react'; import { PrimeReactContext, localeOption } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; -import { ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { useMergeProps, useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { ObjectUtils, classNames } from '../utils/Utils'; import { DataScrollerBase } from './DataScrollerBase'; export const DataScroller = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = DataScrollerBase.getProps(inProps, context); diff --git a/components/lib/datatable/BodyCell.js b/components/lib/datatable/BodyCell.js index 196027c7cb..f7a1e33ee8 100644 --- a/components/lib/datatable/BodyCell.js +++ b/components/lib/datatable/BodyCell.js @@ -1,7 +1,7 @@ import * as React from 'react'; import { ariaLabel } from '../api/Api'; import { ColumnBase } from '../column/ColumnBase'; -import { useEventListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useEventListener, useMergeProps, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { BarsIcon } from '../icons/bars'; import { CheckIcon } from '../icons/check'; import { ChevronDownIcon } from '../icons/chevrondown'; @@ -10,11 +10,12 @@ import { PencilIcon } from '../icons/pencil'; import { TimesIcon } from '../icons/times'; import { OverlayService } from '../overlayservice/OverlayService'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { RowCheckbox } from './RowCheckbox'; import { RowRadioButton } from './RowRadioButton'; export const BodyCell = React.memo((props) => { + const mergeProps = useMergeProps(); const [editingState, setEditingState] = React.useState(props.editing); const [editingRowDataState, setEditingRowDataState] = React.useState(props.rowData); const [styleObjectState, setStyleObjectState] = React.useState({}); diff --git a/components/lib/datatable/BodyRow.js b/components/lib/datatable/BodyRow.js index 4d79c835fd..207164643b 100644 --- a/components/lib/datatable/BodyRow.js +++ b/components/lib/datatable/BodyRow.js @@ -1,9 +1,11 @@ import * as React from 'react'; import { ColumnBase } from '../column/ColumnBase'; -import { classNames, DomHandler, mergeProps, ObjectUtils } from '../utils/Utils'; +import { useMergeProps } from '../hooks/Hooks'; +import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; import { BodyCell } from './BodyCell'; export const BodyRow = React.memo((props) => { + const mergeProps = useMergeProps(); const [editingState, setEditingState] = React.useState(false); const editing = props.onRowEditChange ? props.editing : editingState; const { ptm, cx } = props.ptCallbacks; diff --git a/components/lib/datatable/ColumnFilter.js b/components/lib/datatable/ColumnFilter.js index e3399c8d6e..50e3e27a21 100644 --- a/components/lib/datatable/ColumnFilter.js +++ b/components/lib/datatable/ColumnFilter.js @@ -4,7 +4,7 @@ import { Button } from '../button/Button'; import { ColumnBase } from '../column/ColumnBase'; import { CSSTransition } from '../csstransition/CSSTransition'; import { Dropdown } from '../dropdown/Dropdown'; -import { useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { FilterIcon } from '../icons/filter'; import { FilterSlashIcon } from '../icons/filterslash'; import { PlusIcon } from '../icons/plus'; @@ -13,7 +13,7 @@ import { InputText } from '../inputtext/InputText'; import { OverlayService } from '../overlayservice/OverlayService'; import { Portal } from '../portal/Portal'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils } from '../utils/Utils'; export const ColumnFilter = React.memo((props) => { const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); @@ -21,6 +21,7 @@ export const ColumnFilter = React.memo((props) => { const iconRef = React.useRef(null); const selfClick = React.useRef(false); const overlayEventListener = React.useRef(null); + const mergeProps = useMergeProps(); const getColumnProp = (name) => ColumnBase.getCProp(props.column, name); const getColumnProps = () => ColumnBase.getCProps(props.column); const context = React.useContext(PrimeReactContext); diff --git a/components/lib/datatable/DataTable.js b/components/lib/datatable/DataTable.js index f1dd60809b..2213e44620 100644 --- a/components/lib/datatable/DataTable.js +++ b/components/lib/datatable/DataTable.js @@ -2,12 +2,12 @@ import * as React from 'react'; import PrimeReact, { FilterMatchMode, FilterOperator, FilterService, PrimeReactContext } from '../api/Api'; import { ColumnBase } from '../column/ColumnBase'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useEventListener, useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useEventListener, useMergeProps, useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { ArrowDownIcon } from '../icons/arrowdown'; import { ArrowUpIcon } from '../icons/arrowup'; import { SpinnerIcon } from '../icons/spinner'; import { Paginator } from '../paginator/Paginator'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames } from '../utils/Utils'; import { VirtualScroller } from '../virtualscroller/VirtualScroller'; import { DataTableBase } from './DataTableBase'; import { TableBody } from './TableBody'; @@ -16,6 +16,7 @@ import { TableHeader } from './TableHeader'; export const DataTable = React.forwardRef((inProps, ref) => { const context = React.useContext(PrimeReactContext); + const mergeProps = useMergeProps(); const props = DataTableBase.getProps(inProps, context); const [firstState, setFirstState] = React.useState(props.first); const [rowsState, setRowsState] = React.useState(props.rows); diff --git a/components/lib/datatable/FooterCell.js b/components/lib/datatable/FooterCell.js index 7960ca1223..ada6c85516 100644 --- a/components/lib/datatable/FooterCell.js +++ b/components/lib/datatable/FooterCell.js @@ -1,10 +1,12 @@ import * as React from 'react'; import { ColumnBase } from '../column/ColumnBase'; -import { classNames, DomHandler, mergeProps, ObjectUtils } from '../utils/Utils'; +import { useMergeProps } from '../hooks/Hooks'; +import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; export const FooterCell = React.memo((props) => { const [styleObjectState, setStyleObjectState] = React.useState({}); const elementRef = React.useRef(null); + const mergeProps = useMergeProps(); const getColumnProps = () => ColumnBase.getCProps(props.column); const { ptm, ptmo, cx } = props.ptCallbacks; diff --git a/components/lib/datatable/HeaderCell.js b/components/lib/datatable/HeaderCell.js index 8e313c88b2..84bd622cc9 100644 --- a/components/lib/datatable/HeaderCell.js +++ b/components/lib/datatable/HeaderCell.js @@ -1,11 +1,11 @@ import * as React from 'react'; import { ColumnBase } from '../column/ColumnBase'; -import { usePrevious } from '../hooks/Hooks'; +import { useMergeProps, usePrevious } from '../hooks/Hooks'; import { SortAltIcon } from '../icons/sortalt'; import { SortAmountDownIcon } from '../icons/sortamountdown'; import { SortAmountUpAltIcon } from '../icons/sortamountupalt'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { ColumnFilter } from './ColumnFilter'; import { HeaderCheckbox } from './HeaderCheckbox'; @@ -13,6 +13,7 @@ export const HeaderCell = React.memo((props) => { const [styleObjectState, setStyleObjectState] = React.useState({}); const elementRef = React.useRef(null); const prevColumn = usePrevious(props.column); + const mergeProps = useMergeProps(); const { metaData: parentMetaData, ptCallbacks, index } = props; const { ptm, ptmo, cx } = props.ptCallbacks; diff --git a/components/lib/datatable/HeaderCheckbox.js b/components/lib/datatable/HeaderCheckbox.js index ce7f92ebb1..4c8d37019e 100644 --- a/components/lib/datatable/HeaderCheckbox.js +++ b/components/lib/datatable/HeaderCheckbox.js @@ -1,10 +1,12 @@ import * as React from 'react'; -import { IconUtils, mergeProps } from '../utils/Utils'; -import { CheckIcon } from '../icons/check'; import { ColumnBase } from '../column/ColumnBase'; +import { useMergeProps } from '../hooks/Hooks'; +import { CheckIcon } from '../icons/check'; +import { IconUtils } from '../utils/Utils'; export const HeaderCheckbox = React.memo((props) => { const [focusedState, setFocusedState] = React.useState(false); + const mergeProps = useMergeProps(); const getColumnProps = () => ColumnBase.getCProps(props.column); const { ptm, ptmo, cx } = props.ptCallbacks; diff --git a/components/lib/datatable/RowCheckbox.js b/components/lib/datatable/RowCheckbox.js index 323d4b3802..b177566fc2 100644 --- a/components/lib/datatable/RowCheckbox.js +++ b/components/lib/datatable/RowCheckbox.js @@ -1,10 +1,12 @@ import * as React from 'react'; import { ColumnBase } from '../column/ColumnBase'; +import { useMergeProps } from '../hooks/Hooks'; import { CheckIcon } from '../icons/check'; -import { IconUtils, mergeProps } from '../utils/Utils'; +import { IconUtils } from '../utils/Utils'; export const RowCheckbox = React.memo((props) => { const [focusedState, setFocusedState] = React.useState(false); + const mergeProps = useMergeProps(); const getColumnProps = () => ColumnBase.getCProps(props.column); const { ptm, ptmo, cx } = props.ptCallbacks; diff --git a/components/lib/datatable/RowRadioButton.js b/components/lib/datatable/RowRadioButton.js index 539e1e12e4..b69987eee9 100644 --- a/components/lib/datatable/RowRadioButton.js +++ b/components/lib/datatable/RowRadioButton.js @@ -1,10 +1,12 @@ import * as React from 'react'; import { ColumnBase } from '../column/ColumnBase'; -import { DomHandler, mergeProps } from '../utils/Utils'; +import { useMergeProps } from '../hooks/Hooks'; +import { DomHandler } from '../utils/Utils'; export const RowRadioButton = React.memo((props) => { const [focusedState, setFocusedState] = React.useState(false); const inputRef = React.useRef(null); + const mergeProps = useMergeProps(); const getColumnProps = () => ColumnBase.getCProps(props.column); const { ptm, ptmo, cx } = props.ptCallbacks; diff --git a/components/lib/datatable/RowTogglerButton.js b/components/lib/datatable/RowTogglerButton.js index c6fb851a0a..d6a07f0268 100644 --- a/components/lib/datatable/RowTogglerButton.js +++ b/components/lib/datatable/RowTogglerButton.js @@ -1,12 +1,14 @@ import * as React from 'react'; import { ariaLabel } from '../api/Api'; -import { Ripple } from '../ripple/Ripple'; -import { IconUtils, mergeProps } from '../utils/Utils'; +import { ColumnBase } from '../column/ColumnBase'; +import { useMergeProps } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; import { ChevronRightIcon } from '../icons/chevronright'; -import { ColumnBase } from '../column/ColumnBase'; +import { Ripple } from '../ripple/Ripple'; +import { IconUtils } from '../utils/Utils'; export const RowTogglerButton = React.memo((props) => { + const mergeProps = useMergeProps(); const { ptm, ptmo, cx } = props.ptCallbacks; const onClick = (event) => { diff --git a/components/lib/datatable/TableBody.js b/components/lib/datatable/TableBody.js index 0a43916d7a..17ec880027 100644 --- a/components/lib/datatable/TableBody.js +++ b/components/lib/datatable/TableBody.js @@ -1,13 +1,14 @@ import * as React from 'react'; import { localeOption } from '../api/Api'; import { ColumnBase } from '../column/ColumnBase'; -import { useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; -import { DomHandler, ObjectUtils, mergeProps } from '../utils/Utils'; +import { useMergeProps, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { DomHandler, ObjectUtils } from '../utils/Utils'; import { BodyRow } from './BodyRow'; import { RowTogglerButton } from './RowTogglerButton'; export const TableBody = React.memo( React.forwardRef((props, ref) => { + const mergeProps = useMergeProps(); const { ptm, ptmo, cx, isUnsyled } = props.ptCallbacks; const [rowGroupHeaderStyleObjectState, setRowGroupHeaderStyleObjectState] = React.useState({}); const getColumnProps = (column) => ColumnBase.getCProps(column); diff --git a/components/lib/datatable/TableFooter.js b/components/lib/datatable/TableFooter.js index a40a077027..a5602eca80 100644 --- a/components/lib/datatable/TableFooter.js +++ b/components/lib/datatable/TableFooter.js @@ -1,12 +1,13 @@ import * as React from 'react'; import { ColumnBase } from '../column/ColumnBase'; import { ColumnGroupBase } from '../columngroup/ColumnGroupBase'; +import { useMergeProps } from '../hooks/Hooks'; import { RowBase } from '../row/RowBase'; import { FooterCell } from './FooterCell'; -import { mergeProps } from '../utils/Utils'; export const TableFooter = React.memo((props) => { const { ptm, ptmo, cx } = props.ptCallbacks; + const mergeProps = useMergeProps(); const getRowProps = (row) => ColumnGroupBase.getCProps(row); const getColumnGroupProps = () => { diff --git a/components/lib/datatable/TableHeader.js b/components/lib/datatable/TableHeader.js index dfa6d5cc3f..570f797b0b 100644 --- a/components/lib/datatable/TableHeader.js +++ b/components/lib/datatable/TableHeader.js @@ -1,9 +1,9 @@ import * as React from 'react'; import { ColumnBase } from '../column/ColumnBase'; import { ColumnGroupBase } from '../columngroup/ColumnGroupBase'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { RowBase } from '../row/RowBase'; -import { classNames, mergeProps } from '../utils/Utils'; +import { classNames } from '../utils/Utils'; import { ColumnFilter } from './ColumnFilter'; import { HeaderCell } from './HeaderCell'; import { HeaderCheckbox } from './HeaderCheckbox'; @@ -11,6 +11,7 @@ import { HeaderCheckbox } from './HeaderCheckbox'; export const TableHeader = React.memo((props) => { const [sortableDisabledFieldsState, setSortableDisabledFieldsState] = React.useState([]); const [allSortableDisabledState, setAllSortableDisabledState] = React.useState(false); + const mergeProps = useMergeProps(); const isSingleSort = props.sortMode === 'single'; const isMultipleSort = props.sortMode === 'multiple'; const isAllSortableDisabled = isSingleSort && allSortableDisabledState; diff --git a/components/lib/dataview/DataView.js b/components/lib/dataview/DataView.js index d378d70a27..7529868a1c 100644 --- a/components/lib/dataview/DataView.js +++ b/components/lib/dataview/DataView.js @@ -1,15 +1,17 @@ import * as React from 'react'; import PrimeReact, { localeOption, PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; import { BarsIcon } from '../icons/bars'; import { SpinnerIcon } from '../icons/spinner'; import { ThLargeIcon } from '../icons/thlarge'; import { Paginator } from '../paginator/Paginator'; import { Ripple } from '../ripple/Ripple'; -import { classNames, IconUtils, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, IconUtils, ObjectUtils } from '../utils/Utils'; import { DataViewBase, DataViewLayoutOptionsBase } from './DataViewBase'; export const DataViewLayoutOptions = React.memo((inProps) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = DataViewLayoutOptionsBase.getProps(inProps, context); const { ptm, cx } = DataViewLayoutOptionsBase.setMetaData({ diff --git a/components/lib/deferredcontent/DeferredContent.js b/components/lib/deferredcontent/DeferredContent.js index bcb6d8d1b9..d0227770f7 100644 --- a/components/lib/deferredcontent/DeferredContent.js +++ b/components/lib/deferredcontent/DeferredContent.js @@ -1,10 +1,10 @@ import * as React from 'react'; -import { useEventListener, useMountEffect } from '../hooks/Hooks'; -import { DeferredContentBase } from './DeferredContentBase'; -import { mergeProps } from '../utils/Utils'; import { PrimeReactContext } from '../api/Api'; +import { useEventListener, useMergeProps, useMountEffect } from '../hooks/Hooks'; +import { DeferredContentBase } from './DeferredContentBase'; export const DeferredContent = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = DeferredContentBase.getProps(inProps, context); diff --git a/components/lib/dialog/Dialog.js b/components/lib/dialog/Dialog.js index 9b49ad603a..d5a7f27611 100644 --- a/components/lib/dialog/Dialog.js +++ b/components/lib/dialog/Dialog.js @@ -2,16 +2,17 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, localeOption } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useEventListener, useGlobalOnEscapeKey, useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useEventListener, useGlobalOnEscapeKey, useMergeProps, useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { TimesIcon } from '../icons/times'; import { WindowMaximizeIcon } from '../icons/windowmaximize'; import { WindowMinimizeIcon } from '../icons/windowminimize'; import { Portal } from '../portal/Portal'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils } from '../utils/Utils'; import { DialogBase } from './DialogBase'; export const Dialog = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = DialogBase.getProps(inProps, context); diff --git a/components/lib/divider/Divider.js b/components/lib/divider/Divider.js index 6f23eef283..bcf5ef6049 100644 --- a/components/lib/divider/Divider.js +++ b/components/lib/divider/Divider.js @@ -1,10 +1,11 @@ import * as React from 'react'; -import { mergeProps } from '../utils/Utils'; -import { DividerBase } from './DividerBase'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; +import { DividerBase } from './DividerBase'; export const Divider = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = DividerBase.getProps(inProps, context); diff --git a/components/lib/dock/Dock.js b/components/lib/dock/Dock.js index 282f60274e..9abf680f42 100644 --- a/components/lib/dock/Dock.js +++ b/components/lib/dock/Dock.js @@ -1,9 +1,9 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { Ripple } from '../ripple/Ripple'; -import { classNames, IconUtils, mergeProps, ObjectUtils, UniqueComponentId, DomHandler } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames } from '../utils/Utils'; import { DockBase } from './DockBase'; export const Dock = React.memo( @@ -11,6 +11,7 @@ export const Dock = React.memo( const [currentIndexState, setCurrentIndexState] = React.useState(-3); const [focused, setFocused] = React.useState(false); const [focusedOptionIndex, setFocusedOptionIndex] = React.useState(-1); + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = DockBase.getProps(inProps, context); const [idState, setIdState] = React.useState(props.id); diff --git a/components/lib/dropdown/Dropdown.js b/components/lib/dropdown/Dropdown.js index bb42a54dcb..7726b11e4a 100644 --- a/components/lib/dropdown/Dropdown.js +++ b/components/lib/dropdown/Dropdown.js @@ -1,18 +1,19 @@ import * as React from 'react'; import PrimeReact, { FilterService, PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; import { SpinnerIcon } from '../icons/spinner'; import { TimesIcon } from '../icons/times'; import { OverlayService } from '../overlayservice/OverlayService'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames } from '../utils/Utils'; import { DropdownBase } from './DropdownBase'; import { DropdownPanel } from './DropdownPanel'; export const Dropdown = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = DropdownBase.getProps(inProps, context); const [filterState, setFilterState] = React.useState(''); diff --git a/components/lib/dropdown/DropdownItem.js b/components/lib/dropdown/DropdownItem.js index 3379bb42ff..3411df8cb6 100644 --- a/components/lib/dropdown/DropdownItem.js +++ b/components/lib/dropdown/DropdownItem.js @@ -1,8 +1,10 @@ import * as React from 'react'; +import { useMergeProps } from '../hooks/Hooks'; import { Ripple } from '../ripple/Ripple'; -import { classNames, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, ObjectUtils } from '../utils/Utils'; export const DropdownItem = React.memo((props) => { + const mergeProps = useMergeProps(); const { ptm, cx, selected, disabled, option, label } = props; const getPTOptions = (key) => { diff --git a/components/lib/dropdown/DropdownPanel.js b/components/lib/dropdown/DropdownPanel.js index 7e0f9da89a..32baf68614 100644 --- a/components/lib/dropdown/DropdownPanel.js +++ b/components/lib/dropdown/DropdownPanel.js @@ -1,15 +1,17 @@ import * as React from 'react'; import { localeOption, PrimeReactContext } from '../api/Api'; import { CSSTransition } from '../csstransition/CSSTransition'; +import { useMergeProps } from '../hooks/Hooks'; import { SearchIcon } from '../icons/search'; import { TimesIcon } from '../icons/times'; import { Portal } from '../portal/Portal'; -import { classNames, DomHandler, IconUtils, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, DomHandler, IconUtils, ObjectUtils } from '../utils/Utils'; import { VirtualScroller } from '../virtualscroller/VirtualScroller'; import { DropdownItem } from './DropdownItem'; export const DropdownPanel = React.memo( React.forwardRef((props, ref) => { + const mergeProps = useMergeProps(); const { ptm, cx, sx } = props; const context = React.useContext(PrimeReactContext); const virtualScrollerRef = React.useRef(null); diff --git a/components/lib/editor/Editor.js b/components/lib/editor/Editor.js index bbb70db7f2..a4f70e836e 100644 --- a/components/lib/editor/Editor.js +++ b/components/lib/editor/Editor.js @@ -1,10 +1,9 @@ import * as React from 'react'; -import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; -import { DomHandler, mergeProps } from '../utils/Utils'; -import { EditorBase } from './EditorBase'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { classNames } from '../utils/Utils'; +import { useMergeProps, useMountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { DomHandler, classNames } from '../utils/Utils'; +import { EditorBase } from './EditorBase'; const QuillJS = (function () { try { @@ -16,6 +15,7 @@ const QuillJS = (function () { export const Editor = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = EditorBase.getProps(inProps, context); const { ptm, cx, isUnstyled } = EditorBase.setMetaData({ diff --git a/components/lib/fieldset/Fieldset.js b/components/lib/fieldset/Fieldset.js index 42b7c8e4bd..1215b8fac1 100644 --- a/components/lib/fieldset/Fieldset.js +++ b/components/lib/fieldset/Fieldset.js @@ -2,14 +2,15 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { MinusIcon } from '../icons/minus'; import { PlusIcon } from '../icons/plus'; import { Ripple } from '../ripple/Ripple'; -import { IconUtils, UniqueComponentId, classNames, mergeProps } from '../utils/Utils'; +import { IconUtils, UniqueComponentId, classNames } from '../utils/Utils'; import { FieldsetBase } from './FieldsetBase'; export const Fieldset = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = FieldsetBase.getProps(inProps, context); const [idState, setIdState] = React.useState(props.id); diff --git a/components/lib/fileupload/FileUpload.js b/components/lib/fileupload/FileUpload.js index 69c484cf85..b4cbcccd32 100644 --- a/components/lib/fileupload/FileUpload.js +++ b/components/lib/fileupload/FileUpload.js @@ -3,17 +3,19 @@ import { localeOption, PrimeReactContext } from '../api/Api'; import { Badge } from '../badge/Badge'; import { Button } from '../button/Button'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; import { PlusIcon } from '../icons/plus'; import { TimesIcon } from '../icons/times'; import { UploadIcon } from '../icons/upload'; import { Messages } from '../messages/Messages'; import { ProgressBar } from '../progressbar/ProgressBar'; import { Ripple } from '../ripple/Ripple'; -import { classNames, DomHandler, IconUtils, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, DomHandler, IconUtils, ObjectUtils } from '../utils/Utils'; import { FileUploadBase } from './FileUploadBase'; export const FileUpload = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = FileUploadBase.getProps(inProps, context); const [uploadedFilesState, setUploadedFilesState] = React.useState([]); diff --git a/components/lib/galleria/Galleria.js b/components/lib/galleria/Galleria.js index ec06370172..1a0a50abc5 100644 --- a/components/lib/galleria/Galleria.js +++ b/components/lib/galleria/Galleria.js @@ -2,17 +2,18 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, localeOption } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { useInterval, useUnmountEffect } from '../hooks/Hooks'; +import { useInterval, useMergeProps, useUnmountEffect } from '../hooks/Hooks'; import { TimesIcon } from '../icons/times'; import { Portal } from '../portal/Portal'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames } from '../utils/Utils'; import { GalleriaBase } from './GalleriaBase'; import { GalleriaItem } from './GalleriaItem'; import { GalleriaThumbnails } from './GalleriaThumbnails'; export const Galleria = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = GalleriaBase.getProps(inProps, context); diff --git a/components/lib/galleria/GalleriaItem.js b/components/lib/galleria/GalleriaItem.js index 5889625b6d..fae40c0b93 100644 --- a/components/lib/galleria/GalleriaItem.js +++ b/components/lib/galleria/GalleriaItem.js @@ -1,13 +1,14 @@ import * as React from 'react'; import { localeOption } from '../api/Api'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { ChevronLeftIcon } from '../icons/chevronleft'; import { ChevronRightIcon } from '../icons/chevronright'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, classNames } from '../utils/Utils'; export const GalleriaItem = React.memo( React.forwardRef((props, ref) => { + const mergeProps = useMergeProps(); const indicatorContent = React.useRef(null); const { ptm, cx } = props; diff --git a/components/lib/galleria/GalleriaThumbnails.js b/components/lib/galleria/GalleriaThumbnails.js index 68b13f1d7a..be1a009543 100644 --- a/components/lib/galleria/GalleriaThumbnails.js +++ b/components/lib/galleria/GalleriaThumbnails.js @@ -1,14 +1,15 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, localeOption } from '../api/Api'; -import { useMountEffect, usePrevious, useResizeListener, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, usePrevious, useResizeListener, useUpdateEffect } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; import { ChevronLeftIcon } from '../icons/chevronleft'; import { ChevronRightIcon } from '../icons/chevronright'; import { ChevronUpIcon } from '../icons/chevronup'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, classNames } from '../utils/Utils'; const GalleriaThumbnailItem = React.memo((props) => { + const mergeProps = useMergeProps(); const { ptm, cx } = props; const getPTOptions = (key, options) => { diff --git a/components/lib/hooks/Hooks.js b/components/lib/hooks/Hooks.js index d4ee76fa8e..5458bfc113 100644 --- a/components/lib/hooks/Hooks.js +++ b/components/lib/hooks/Hooks.js @@ -8,6 +8,7 @@ import { ESC_KEY_HANDLING_PRIORITIES, useGlobalOnEscapeKey } from './useGlobalOn import { useIntersectionObserver } from './useIntersectionObserver'; import { useInterval } from './useInterval'; import { useMatchMedia } from './useMatchMedia'; +import { useMergeProps } from './useMergeProps'; import { useMountEffect } from './useMountEffect'; import { useMouse } from './useMouse'; import { useMove } from './useMove'; @@ -34,6 +35,7 @@ export { useInterval, useLocalStorage, useMatchMedia, + useMergeProps, useMountEffect, useMouse, useMove, diff --git a/components/lib/hooks/hooks.d.ts b/components/lib/hooks/hooks.d.ts index ec3228ccbf..d973390b68 100644 --- a/components/lib/hooks/hooks.d.ts +++ b/components/lib/hooks/hooks.d.ts @@ -301,3 +301,7 @@ export declare function useGlobalOnEscapeKey(props: { callback: (event: Keyboard * @param {boolean} [isVisible] */ export declare function useDisplayOrder(group: string, isVisible?: boolean): number | undefined; +/** + * Custom hook to return a function for merging properties. + */ +export declare function useMergeProps(): (args: object[], options?: any) => object | undefined; diff --git a/components/lib/hooks/useMergeProps.js b/components/lib/hooks/useMergeProps.js new file mode 100644 index 0000000000..59865247f5 --- /dev/null +++ b/components/lib/hooks/useMergeProps.js @@ -0,0 +1,18 @@ +import { useContext } from 'react'; +import { PrimeReactContext } from '../api/Api'; +import { _mergeProps } from '../utils/Utils'; + +/** + * Hook to merge properties including custom merge function for things like Tailwind merge. + */ +export const useMergeProps = () => { + const context = useContext(PrimeReactContext); + + return (...props) => { + const options = { + ...(context?.ptOptions?.classNameMergeFunction && { classNameMergeFunction: context.classNameMergeFunction }) + }; + + return _mergeProps(props, options); + }; +}; diff --git a/components/lib/image/Image.js b/components/lib/image/Image.js index 45236ee0c9..df70c0e8cc 100644 --- a/components/lib/image/Image.js +++ b/components/lib/image/Image.js @@ -2,7 +2,7 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, localeOption } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { ESC_KEY_HANDLING_PRIORITIES, useGlobalOnEscapeKey, useUnmountEffect } from '../hooks/Hooks'; +import { ESC_KEY_HANDLING_PRIORITIES, useGlobalOnEscapeKey, useMergeProps, useUnmountEffect } from '../hooks/Hooks'; import { DownloadIcon } from '../icons/download'; import { EyeIcon } from '../icons/eye'; import { RefreshIcon } from '../icons/refresh'; @@ -11,11 +11,12 @@ import { SearchPlusIcon } from '../icons/searchplus'; import { TimesIcon } from '../icons/times'; import { UndoIcon } from '../icons/undo'; import { Portal } from '../portal/Portal'; -import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames } from '../utils/Utils'; import { ImageBase } from './ImageBase'; export const Image = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ImageBase.getProps(inProps, context); diff --git a/components/lib/inplace/Inplace.js b/components/lib/inplace/Inplace.js index 27739e3b2e..9bc041b290 100644 --- a/components/lib/inplace/Inplace.js +++ b/components/lib/inplace/Inplace.js @@ -2,15 +2,16 @@ import * as React from 'react'; import { localeOption, PrimeReactContext } from '../api/Api'; import { Button } from '../button/Button'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useUpdateEffect } from '../hooks/Hooks'; import { TimesIcon } from '../icons/times'; -import { classNames, IconUtils, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, IconUtils, ObjectUtils } from '../utils/Utils'; import { InplaceBase } from './InplaceBase'; export const InplaceDisplay = (props) => props.children; export const InplaceContent = (props) => props.children; export const Inplace = React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = InplaceBase.getProps(inProps, context); diff --git a/components/lib/inputnumber/InputNumber.js b/components/lib/inputnumber/InputNumber.js index 683e940286..cdbe60c02f 100644 --- a/components/lib/inputnumber/InputNumber.js +++ b/components/lib/inputnumber/InputNumber.js @@ -1,17 +1,18 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useUpdateEffect } from '../hooks/Hooks'; import { AngleDownIcon } from '../icons/angledown'; import { AngleUpIcon } from '../icons/angleup'; import { InputText } from '../inputtext/InputText'; import { Ripple } from '../ripple/Ripple'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { InputNumberBase } from './InputNumberBase'; export const InputNumber = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = InputNumberBase.getProps(inProps, context); const [focusedState, setFocusedState] = React.useState(false); diff --git a/components/lib/inputswitch/InputSwitch.js b/components/lib/inputswitch/InputSwitch.js index 9aa8849354..45ad2de977 100644 --- a/components/lib/inputswitch/InputSwitch.js +++ b/components/lib/inputswitch/InputSwitch.js @@ -1,13 +1,14 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { Tooltip } from '../tooltip/Tooltip'; -import { classNames, DomHandler, mergeProps, ObjectUtils } from '../utils/Utils'; +import { DomHandler, ObjectUtils, classNames } from '../utils/Utils'; import { InputSwitchBase } from './InputSwitchBase'; export const InputSwitch = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = InputSwitchBase.getProps(inProps, context); const [focusedState, setFocusedState] = React.useState(false); diff --git a/components/lib/inputtext/InputText.js b/components/lib/inputtext/InputText.js index 2456ca7dd3..ab704e504d 100644 --- a/components/lib/inputtext/InputText.js +++ b/components/lib/inputtext/InputText.js @@ -1,13 +1,15 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; import { KeyFilter } from '../keyfilter/KeyFilter'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, ObjectUtils, classNames } from '../utils/Utils'; import { InputTextBase } from './InputTextBase'; export const InputText = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = InputTextBase.getProps(inProps, context); diff --git a/components/lib/inputtextarea/InputTextarea.js b/components/lib/inputtextarea/InputTextarea.js index ae45442177..445041031a 100644 --- a/components/lib/inputtextarea/InputTextarea.js +++ b/components/lib/inputtextarea/InputTextarea.js @@ -1,13 +1,15 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; import { KeyFilter } from '../keyfilter/KeyFilter'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, mergeProps, ObjectUtils } from '../utils/Utils'; +import { DomHandler, ObjectUtils } from '../utils/Utils'; import { InputTextareaBase } from './InputTextareaBase'; export const InputTextarea = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = InputTextareaBase.getProps(inProps, context); diff --git a/components/lib/knob/Knob.js b/components/lib/knob/Knob.js index 25b35cbc45..294d05315c 100644 --- a/components/lib/knob/Knob.js +++ b/components/lib/knob/Knob.js @@ -1,9 +1,8 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; -import { useEventListener } from '../hooks/Hooks'; -import { mergeProps } from '../utils/Utils'; -import { KnobBase } from './KnobBase'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useEventListener, useMergeProps } from '../hooks/Hooks'; +import { KnobBase } from './KnobBase'; const radius = 40; const midX = 50; @@ -13,6 +12,7 @@ const maxRadians = -Math.PI / 3; export const Knob = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = KnobBase.getProps(inProps, context); diff --git a/components/lib/listbox/ListBox.js b/components/lib/listbox/ListBox.js index 4e658c9d1e..07f8d56966 100644 --- a/components/lib/listbox/ListBox.js +++ b/components/lib/listbox/ListBox.js @@ -1,9 +1,9 @@ import * as React from 'react'; import { FilterService, PrimeReactContext, localeOption } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, ObjectUtils, mergeProps } from '../utils/Utils'; +import { DomHandler, ObjectUtils } from '../utils/Utils'; import { VirtualScroller } from '../virtualscroller/VirtualScroller'; import { ListBoxBase } from './ListBoxBase'; import { ListBoxHeader } from './ListBoxHeader'; @@ -11,6 +11,7 @@ import { ListBoxItem } from './ListBoxItem'; export const ListBox = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = ListBoxBase.getProps(inProps, context); diff --git a/components/lib/listbox/ListBoxHeader.js b/components/lib/listbox/ListBoxHeader.js index e36b8e7b90..76063bcd1e 100644 --- a/components/lib/listbox/ListBoxHeader.js +++ b/components/lib/listbox/ListBoxHeader.js @@ -1,9 +1,11 @@ import * as React from 'react'; +import { useMergeProps } from '../hooks/Hooks'; import { SearchIcon } from '../icons/search'; import { InputText } from '../inputtext/InputText'; -import { IconUtils, ObjectUtils, mergeProps } from '../utils/Utils'; +import { IconUtils, ObjectUtils } from '../utils/Utils'; export const ListBoxHeader = React.memo((props) => { + const mergeProps = useMergeProps(); const { ptCallbacks: { ptm, cx } } = props; diff --git a/components/lib/listbox/ListBoxItem.js b/components/lib/listbox/ListBoxItem.js index b5fdabb0cc..80f580246f 100644 --- a/components/lib/listbox/ListBoxItem.js +++ b/components/lib/listbox/ListBoxItem.js @@ -1,9 +1,11 @@ import * as React from 'react'; +import { useMergeProps } from '../hooks/Hooks'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, mergeProps, ObjectUtils } from '../utils/Utils'; +import { DomHandler, ObjectUtils } from '../utils/Utils'; export const ListBoxItem = React.memo((props) => { const [focusedState, setFocusedState] = React.useState(false); + const mergeProps = useMergeProps(); const { ptCallbacks: { ptm, cx } } = props; diff --git a/components/lib/megamenu/MegaMenu.js b/components/lib/megamenu/MegaMenu.js index df2015d575..5a4186e1eb 100644 --- a/components/lib/megamenu/MegaMenu.js +++ b/components/lib/megamenu/MegaMenu.js @@ -1,16 +1,17 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, ariaLabel } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useEventListener, useMatchMedia, useMountEffect, useResizeListener, useUpdateEffect } from '../hooks/Hooks'; +import { useEventListener, useMatchMedia, useMergeProps, useMountEffect, useResizeListener, useUpdateEffect } from '../hooks/Hooks'; import { AngleDownIcon } from '../icons/angledown'; import { AngleRightIcon } from '../icons/angleright'; import { BarsIcon } from '../icons/bars'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames } from '../utils/Utils'; import { MegaMenuBase } from './MegaMenuBase'; export const MegaMenu = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MegaMenuBase.getProps(inProps, context); diff --git a/components/lib/mention/Mention.js b/components/lib/mention/Mention.js index 460634ca39..0fdc4045aa 100644 --- a/components/lib/mention/Mention.js +++ b/components/lib/mention/Mention.js @@ -2,16 +2,17 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { InputTextarea } from '../inputtextarea/InputTextarea'; import { OverlayService } from '../overlayservice/OverlayService'; import { Portal } from '../portal/Portal'; import { Ripple } from '../ripple/Ripple'; -import { DomHandler, ObjectUtils, ZIndexUtils, mergeProps } from '../utils/Utils'; +import { DomHandler, ObjectUtils, ZIndexUtils } from '../utils/Utils'; import { MentionBase } from './MentionBase'; export const Mention = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MentionBase.getProps(inProps, context); diff --git a/components/lib/menu/Menu.js b/components/lib/menu/Menu.js index ec217e110e..caa6613277 100644 --- a/components/lib/menu/Menu.js +++ b/components/lib/menu/Menu.js @@ -2,14 +2,15 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useGlobalOnEscapeKey, useMountEffect, useOverlayListener, useUnmountEffect } from '../hooks/Hooks'; +import { ESC_KEY_HANDLING_PRIORITIES, useDisplayOrder, useGlobalOnEscapeKey, useMergeProps, useMountEffect, useOverlayListener, useUnmountEffect } from '../hooks/Hooks'; import { OverlayService } from '../overlayservice/OverlayService'; import { Portal } from '../portal/Portal'; -import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames } from '../utils/Utils'; import { MenuBase } from './MenuBase'; export const Menu = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MenuBase.getProps(inProps, context); const [idState, setIdState] = React.useState(props.id); diff --git a/components/lib/menubar/Menubar.js b/components/lib/menubar/Menubar.js index 781ec79086..0eea77f06f 100644 --- a/components/lib/menubar/Menubar.js +++ b/components/lib/menubar/Menubar.js @@ -1,14 +1,15 @@ import * as React from 'react'; import PrimeReact, { PrimeReactContext, ariaLabel } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useEventListener, useResizeListener, useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useEventListener, useMergeProps, useMountEffect, useResizeListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { BarsIcon } from '../icons/bars'; -import { IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mergeProps, DomHandler } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames } from '../utils/Utils'; import { MenubarBase } from './MenubarBase'; import { MenubarSub } from './MenubarSub'; export const Menubar = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MenubarBase.getProps(inProps, context); diff --git a/components/lib/menubar/MenubarSub.js b/components/lib/menubar/MenubarSub.js index d20d814b83..2be4bef0b9 100644 --- a/components/lib/menubar/MenubarSub.js +++ b/components/lib/menubar/MenubarSub.js @@ -1,11 +1,13 @@ import * as React from 'react'; +import { useMergeProps } from '../hooks/Hooks'; import { AngleDownIcon } from '../icons/angledown'; import { AngleRightIcon } from '../icons/angleright'; import { Ripple } from '../ripple/Ripple'; -import { IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { IconUtils, ObjectUtils, classNames } from '../utils/Utils'; export const MenubarSub = React.memo( React.forwardRef((props, ref) => { + const mergeProps = useMergeProps(); const { ptm, cx } = props; const getPTOptions = (processedItem, key, index) => { diff --git a/components/lib/message/Message.js b/components/lib/message/Message.js index bbdcb8af9f..4eb220bef1 100644 --- a/components/lib/message/Message.js +++ b/components/lib/message/Message.js @@ -1,15 +1,17 @@ import * as React from 'react'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; +import { useMergeProps } from '../hooks/Hooks'; import { CheckIcon } from '../icons/check'; import { ExclamationTriangleIcon } from '../icons/exclamationtriangle'; import { InfoCircleIcon } from '../icons/infocircle'; import { TimesCircleIcon } from '../icons/timescircle'; -import { IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { IconUtils, ObjectUtils, classNames } from '../utils/Utils'; import { MessageBase } from './MessageBase'; export const Message = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MessageBase.getProps(inProps, context); diff --git a/components/lib/messages/Messages.js b/components/lib/messages/Messages.js index 7cc046c078..05b26c61af 100644 --- a/components/lib/messages/Messages.js +++ b/components/lib/messages/Messages.js @@ -3,7 +3,8 @@ import { TransitionGroup } from 'react-transition-group'; import { PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; import { CSSTransition } from '../csstransition/CSSTransition'; -import { ObjectUtils, mergeProps } from '../utils/Utils'; +import { useMergeProps } from '../hooks/Hooks'; +import { ObjectUtils } from '../utils/Utils'; import { MessagesBase } from './MessagesBase'; import { UIMessage } from './UIMessage'; @@ -11,6 +12,7 @@ let messageIdx = 0; export const Messages = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MessagesBase.getProps(inProps, context); const [messagesState, setMessagesState] = React.useState([]); diff --git a/components/lib/multiselect/MultiSelect.js b/components/lib/multiselect/MultiSelect.js index 491557ffd0..a4ad7751ff 100644 --- a/components/lib/multiselect/MultiSelect.js +++ b/components/lib/multiselect/MultiSelect.js @@ -1,19 +1,20 @@ import * as React from 'react'; import PrimeReact, { FilterService, PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect, useOverlayListener, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { ChevronDownIcon } from '../icons/chevrondown'; +import { SpinnerIcon } from '../icons/spinner'; import { TimesIcon } from '../icons/times'; import { TimesCircleIcon } from '../icons/timescircle'; import { OverlayService } from '../overlayservice/OverlayService'; import { Tooltip } from '../tooltip/Tooltip'; -import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; +import { DomHandler, IconUtils, ObjectUtils, ZIndexUtils, classNames } from '../utils/Utils'; import { MultiSelectBase } from './MultiSelectBase'; import { MultiSelectPanel } from './MultiSelectPanel'; -import { SpinnerIcon } from '../icons/spinner'; export const MultiSelect = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MultiSelectBase.getProps(inProps, context); diff --git a/components/lib/multiselect/MultiSelectHeader.js b/components/lib/multiselect/MultiSelectHeader.js index 9145c7738f..efa45499e6 100644 --- a/components/lib/multiselect/MultiSelectHeader.js +++ b/components/lib/multiselect/MultiSelectHeader.js @@ -1,14 +1,16 @@ import * as React from 'react'; import { localeOption } from '../api/Api'; import { Checkbox } from '../checkbox/Checkbox'; +import { useMergeProps } from '../hooks/Hooks'; import { CheckIcon } from '../icons/check'; import { SearchIcon } from '../icons/search'; import { TimesIcon } from '../icons/times'; import { InputText } from '../inputtext/InputText'; import { Ripple } from '../ripple/Ripple'; -import { IconUtils, ObjectUtils, UniqueComponentId, mergeProps } from '../utils/Utils'; +import { IconUtils, ObjectUtils, UniqueComponentId } from '../utils/Utils'; export const MultiSelectHeader = React.memo((props) => { + const mergeProps = useMergeProps(); const { ptm, cx, isUnstyled } = props; const filterOptions = { filter: (e) => onFilter(e), diff --git a/components/lib/multiselect/MultiSelectItem.js b/components/lib/multiselect/MultiSelectItem.js index 1ee1abe6f2..8d9464e66c 100644 --- a/components/lib/multiselect/MultiSelectItem.js +++ b/components/lib/multiselect/MultiSelectItem.js @@ -1,10 +1,12 @@ import * as React from 'react'; +import { useMergeProps } from '../hooks/Hooks'; import { CheckIcon } from '../icons/check'; import { Ripple } from '../ripple/Ripple'; -import { IconUtils, ObjectUtils, classNames, mergeProps } from '../utils/Utils'; +import { IconUtils, ObjectUtils, classNames } from '../utils/Utils'; export const MultiSelectItem = React.memo((props) => { const [focusedState, setFocusedState] = React.useState(false); + const mergeProps = useMergeProps(); const { ptm, cx } = props; const getPTOptions = (key) => { diff --git a/components/lib/multiselect/MultiSelectPanel.js b/components/lib/multiselect/MultiSelectPanel.js index 36275b17fa..7c475a01e3 100644 --- a/components/lib/multiselect/MultiSelectPanel.js +++ b/components/lib/multiselect/MultiSelectPanel.js @@ -1,8 +1,9 @@ import * as React from 'react'; import { localeOption, PrimeReactContext } from '../api/Api'; import { CSSTransition } from '../csstransition/CSSTransition'; +import { useMergeProps } from '../hooks/Hooks'; import { Portal } from '../portal/Portal'; -import { classNames, DomHandler, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; import { VirtualScroller } from '../virtualscroller/VirtualScroller'; import { MultiSelectHeader } from './MultiSelectHeader'; import { MultiSelectItem } from './MultiSelectItem'; @@ -11,6 +12,7 @@ export const MultiSelectPanel = React.memo( React.forwardRef((props, ref) => { const virtualScrollerRef = React.useRef(null); const filterInputRef = React.useRef(null); + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const { ptm, cx, sx, isUnstyled } = props; diff --git a/components/lib/multistatecheckbox/MultiStateCheckbox.js b/components/lib/multistatecheckbox/MultiStateCheckbox.js index 37b107e258..431760db11 100644 --- a/components/lib/multistatecheckbox/MultiStateCheckbox.js +++ b/components/lib/multistatecheckbox/MultiStateCheckbox.js @@ -1,13 +1,14 @@ import * as React from 'react'; import { ariaLabel, PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect } from '../hooks/Hooks'; +import { useMergeProps, useMountEffect } from '../hooks/Hooks'; import { Tooltip } from '../tooltip/Tooltip'; -import { classNames, DomHandler, IconUtils, mergeProps, ObjectUtils } from '../utils/Utils'; +import { classNames, DomHandler, IconUtils, ObjectUtils } from '../utils/Utils'; import { MultiStateCheckboxBase } from './MultiStateCheckboxBase'; export const MultiStateCheckbox = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = MultiStateCheckboxBase.getProps(inProps, context); diff --git a/components/lib/orderlist/OrderList.js b/components/lib/orderlist/OrderList.js index 523338b927..a1a397d784 100644 --- a/components/lib/orderlist/OrderList.js +++ b/components/lib/orderlist/OrderList.js @@ -1,14 +1,15 @@ import * as React from 'react'; import PrimeReact, { FilterService, PrimeReactContext } from '../api/Api'; import { useHandleStyle } from '../componentbase/ComponentBase'; -import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; -import { DomHandler, ObjectUtils, UniqueComponentId, classNames, mergeProps } from '../utils/Utils'; +import { useMergeProps, useMountEffect, useUpdateEffect } from '../hooks/Hooks'; +import { DomHandler, ObjectUtils, UniqueComponentId, classNames } from '../utils/Utils'; import { OrderListBase } from './OrderListBase'; import { OrderListControls } from './OrderListControls'; import { OrderListSubList } from './OrderListSubList'; export const OrderList = React.memo( React.forwardRef((inProps, ref) => { + const mergeProps = useMergeProps(); const context = React.useContext(PrimeReactContext); const props = OrderListBase.getProps(inProps, context); diff --git a/components/lib/orderlist/OrderListControls.js b/components/lib/orderlist/OrderListControls.js index 5e6ce4ce1f..d1c6edbdfd 100644 --- a/components/lib/orderlist/OrderListControls.js +++ b/components/lib/orderlist/OrderListControls.js @@ -1,13 +1,15 @@ import * as React from 'react'; import { ariaLabel } from '../api/Api'; import { Button } from '../button/Button'; +import { useMergeProps } from '../hooks/Hooks'; import { AngleDoubleDownIcon } from '../icons/angledoubledown'; import { AngleDoubleUpIcon } from '../icons/angledoubleup'; import { AngleDownIcon } from '../icons/angledown'; import { AngleUpIcon } from '../icons/angleup'; -import { ObjectUtils, mergeProps } from '../utils/Utils'; +import { ObjectUtils } from '../utils/Utils'; export const OrderListControls = React.memo((props) => { + const mergeProps = useMergeProps(); const moveUpIcon = props.moveUpIcon ||