UNPKG

@react-aria/utils

Version:
59 lines (53 loc) 2.11 kB
var $eMoU1$react = require("react"); function $parcel$export(e, n, v, s) { Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); } $parcel$export(module.exports, "useObjectRef", () => $475b35fe72ba49b3$export$4338b53315abf666); /* * Copyright 2021 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ function $475b35fe72ba49b3$export$4338b53315abf666(ref) { const objRef = (0, $eMoU1$react.useRef)(null); const cleanupRef = (0, $eMoU1$react.useRef)(undefined); const refEffect = (0, $eMoU1$react.useCallback)((instance)=>{ if (typeof ref === 'function') { const refCallback = ref; const refCleanup = refCallback(instance); return ()=>{ if (typeof refCleanup === 'function') refCleanup(); else refCallback(null); }; } else if (ref) { ref.current = instance; return ()=>{ ref.current = null; }; } }, [ ref ]); return (0, $eMoU1$react.useMemo)(()=>({ get current () { return objRef.current; }, set current (value){ objRef.current = value; if (cleanupRef.current) { cleanupRef.current(); cleanupRef.current = undefined; } if (value != null) cleanupRef.current = refEffect(value); } }), [ refEffect ]); } //# sourceMappingURL=useObjectRef.main.js.map