useOpen.js 1.1 KB

12345678910111213141516171819202122232425262728
  1. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  2. import useDelayState from "./useDelayState";
  3. /**
  4. * Control the open state.
  5. * Will not close if activeElement is on the popup.
  6. */
  7. export default function useOpen(open, defaultOpen) {
  8. var disabledList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
  9. var onOpenChange = arguments.length > 3 ? arguments[3] : undefined;
  10. var mergedOpen = disabledList.every(function (disabled) {
  11. return disabled;
  12. }) ? false : open;
  13. // Delay for handle the open state, in case fast shift from `open` -> `close` -> `open`
  14. // const [rafOpen, setRafOpen] = useLockState(open, defaultOpen || false, onOpenChange);
  15. var _useDelayState = useDelayState(mergedOpen, defaultOpen || false, onOpenChange),
  16. _useDelayState2 = _slicedToArray(_useDelayState, 2),
  17. rafOpen = _useDelayState2[0],
  18. setRafOpen = _useDelayState2[1];
  19. function setOpen(next) {
  20. var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  21. if (!config.inherit || rafOpen) {
  22. setRafOpen(next, config.force);
  23. }
  24. }
  25. return [rafOpen, setOpen];
  26. }