diff --git a/packages/mui-base/src/Select/Positioner/SelectPositioner.tsx b/packages/mui-base/src/Select/Positioner/SelectPositioner.tsx index 6fe1175dee..28d33043f9 100644 --- a/packages/mui-base/src/Select/Positioner/SelectPositioner.tsx +++ b/packages/mui-base/src/Select/Positioner/SelectPositioner.tsx @@ -17,6 +17,8 @@ import { useId } from '../../utils/useId'; import { useLatestRef } from '../../utils/useLatestRef'; import { mergeReactProps } from '../../utils/mergeReactProps'; import { CompositeList } from '../../Composite/List/CompositeList'; +import { useField } from '../../Field/useField'; +import { useFieldControlValidation } from '../../Field/Control/useFieldControlValidation'; /** * Renders the element that positions the Select popup. @@ -78,7 +80,10 @@ const SelectPositioner = React.forwardRef(function SelectPositioner( touchModality, } = useSelectRootContext(); - const { setControlId, validityData, setValidityData, setDirty } = useFieldRootContext(); + const { setControlId, validityData, setDirty } = useFieldRootContext(); + const { commitValidation } = useFieldControlValidation(); + + const triggerRef = useLatestRef(triggerElement); const id = useId(idProp); @@ -89,6 +94,13 @@ const SelectPositioner = React.forwardRef(function SelectPositioner( }; }, [id, setControlId]); + useField({ + id, + commitValidation, + value, + controlRef: triggerRef, + }); + const [optionTextOffset, setOptionTextOffset] = React.useState(null); const [selectedIndexOnMount, setSelectedIndexOnMount] = React.useState(selectedIndex); @@ -104,12 +116,6 @@ const SelectPositioner = React.forwardRef(function SelectPositioner( } }, [open, selectedIndexRef]); - useEnhancedEffect(() => { - if (validityData.initialValue === null && value !== validityData.initialValue) { - setValidityData((prev) => ({ ...prev, initialValue: value })); - } - }, [value, setValidityData, validityData.initialValue]); - const positioner = useSelectPositioner({ anchor: anchor || triggerElement, floatingRootContext, diff --git a/packages/mui-base/src/Select/Positioner/useSelectPositioner.tsx b/packages/mui-base/src/Select/Positioner/useSelectPositioner.tsx index 1b9212c28b..7a22bcec5e 100644 --- a/packages/mui-base/src/Select/Positioner/useSelectPositioner.tsx +++ b/packages/mui-base/src/Select/Positioner/useSelectPositioner.tsx @@ -103,10 +103,6 @@ export function useSelectPositioner( export namespace useSelectPositioner { export interface SharedParameters { - /** - * If `true`, the Select is open. - */ - open?: boolean; /** * The anchor element to which the Select popup will be placed at. */ @@ -181,6 +177,10 @@ export namespace useSelectPositioner { } export interface Parameters extends SharedParameters { + /** + * If `true`, the Select is open. + */ + open?: boolean; /** * If `true`, the Select is mounted. * @default true