@mui/base
Version:
A library of headless ('unstyled') React UI components and low-level hooks.
30 lines • 1.35 kB
JavaScript
import * as React from 'react';
import useMessageBus from '../utils/useMessageBus';
var SELECTION_CHANGE_TOPIC = 'select:change-selection';
var HIGHLIGHT_CHANGE_TOPIC = 'select:change-highlight';
/**
* @ignore - internal hook.
*
* This hook is used to notify any interested components about changes in the Select's selection and highlight.
*/
export default function useSelectChangeNotifiers() {
var messageBus = useMessageBus();
var notifySelectionChanged = React.useCallback(function (newSelectedItems) {
messageBus.publish(SELECTION_CHANGE_TOPIC, newSelectedItems);
}, [messageBus]);
var notifyHighlightChanged = React.useCallback(function (newHighlightedItem) {
messageBus.publish(HIGHLIGHT_CHANGE_TOPIC, newHighlightedItem);
}, [messageBus]);
var registerSelectionChangeHandler = React.useCallback(function (handler) {
return messageBus.subscribe(SELECTION_CHANGE_TOPIC, handler);
}, [messageBus]);
var registerHighlightChangeHandler = React.useCallback(function (handler) {
return messageBus.subscribe(HIGHLIGHT_CHANGE_TOPIC, handler);
}, [messageBus]);
return {
notifySelectionChanged: notifySelectionChanged,
notifyHighlightChanged: notifyHighlightChanged,
registerSelectionChangeHandler: registerSelectionChangeHandler,
registerHighlightChangeHandler: registerHighlightChangeHandler
};
}