102 lines
4.4 KiB
JavaScript
102 lines
4.4 KiB
JavaScript
import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from "./useLayoutEffect.mjs";
|
|
import {useValueEffect as $1dbecbe27a04f9af$export$14d238f342723f25} from "./useValueEffect.mjs";
|
|
import {useState as $eKkEp$useState, useRef as $eKkEp$useRef, useEffect as $eKkEp$useEffect, useCallback as $eKkEp$useCallback} from "react";
|
|
import {useSSRSafeId as $eKkEp$useSSRSafeId} from "@react-aria/ssr";
|
|
|
|
/*
|
|
* Copyright 2020 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.
|
|
*/
|
|
|
|
|
|
|
|
// copied from SSRProvider.tsx to reduce exports, if needed again, consider sharing
|
|
let $bdb11010cef70236$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);
|
|
let $bdb11010cef70236$export$d41a04c74483c6ef = new Map();
|
|
// This allows us to clean up the idsUpdaterMap when the id is no longer used.
|
|
// Map is a strong reference, so unused ids wouldn't be cleaned up otherwise.
|
|
// This can happen in suspended components where mount/unmount is not called.
|
|
let $bdb11010cef70236$var$registry;
|
|
if (typeof FinalizationRegistry !== 'undefined') $bdb11010cef70236$var$registry = new FinalizationRegistry((heldValue)=>{
|
|
$bdb11010cef70236$export$d41a04c74483c6ef.delete(heldValue);
|
|
});
|
|
function $bdb11010cef70236$export$f680877a34711e37(defaultId) {
|
|
let [value, setValue] = (0, $eKkEp$useState)(defaultId);
|
|
let nextId = (0, $eKkEp$useRef)(null);
|
|
let res = (0, $eKkEp$useSSRSafeId)(value);
|
|
let cleanupRef = (0, $eKkEp$useRef)(null);
|
|
if ($bdb11010cef70236$var$registry) $bdb11010cef70236$var$registry.register(cleanupRef, res);
|
|
if ($bdb11010cef70236$var$canUseDOM) {
|
|
const cacheIdRef = $bdb11010cef70236$export$d41a04c74483c6ef.get(res);
|
|
if (cacheIdRef && !cacheIdRef.includes(nextId)) cacheIdRef.push(nextId);
|
|
else $bdb11010cef70236$export$d41a04c74483c6ef.set(res, [
|
|
nextId
|
|
]);
|
|
}
|
|
(0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
|
|
let r = res;
|
|
return ()=>{
|
|
// In Suspense, the cleanup function may be not called
|
|
// when it is though, also remove it from the finalization registry.
|
|
if ($bdb11010cef70236$var$registry) $bdb11010cef70236$var$registry.unregister(cleanupRef);
|
|
$bdb11010cef70236$export$d41a04c74483c6ef.delete(r);
|
|
};
|
|
}, [
|
|
res
|
|
]);
|
|
// This cannot cause an infinite loop because the ref is always cleaned up.
|
|
// eslint-disable-next-line
|
|
(0, $eKkEp$useEffect)(()=>{
|
|
let newId = nextId.current;
|
|
if (newId) setValue(newId);
|
|
return ()=>{
|
|
if (newId) nextId.current = null;
|
|
};
|
|
});
|
|
return res;
|
|
}
|
|
function $bdb11010cef70236$export$cd8c9cb68f842629(idA, idB) {
|
|
if (idA === idB) return idA;
|
|
let setIdsA = $bdb11010cef70236$export$d41a04c74483c6ef.get(idA);
|
|
if (setIdsA) {
|
|
setIdsA.forEach((ref)=>ref.current = idB);
|
|
return idB;
|
|
}
|
|
let setIdsB = $bdb11010cef70236$export$d41a04c74483c6ef.get(idB);
|
|
if (setIdsB) {
|
|
setIdsB.forEach((ref)=>ref.current = idA);
|
|
return idA;
|
|
}
|
|
return idB;
|
|
}
|
|
function $bdb11010cef70236$export$b4cc09c592e8fdb8(depArray = []) {
|
|
let id = $bdb11010cef70236$export$f680877a34711e37();
|
|
let [resolvedId, setResolvedId] = (0, $1dbecbe27a04f9af$export$14d238f342723f25)(id);
|
|
let updateId = (0, $eKkEp$useCallback)(()=>{
|
|
setResolvedId(function*() {
|
|
yield id;
|
|
yield document.getElementById(id) ? id : undefined;
|
|
});
|
|
}, [
|
|
id,
|
|
setResolvedId
|
|
]);
|
|
(0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(updateId, [
|
|
id,
|
|
updateId,
|
|
...depArray
|
|
]);
|
|
return resolvedId;
|
|
}
|
|
|
|
|
|
export {$bdb11010cef70236$export$d41a04c74483c6ef as idsUpdaterMap, $bdb11010cef70236$export$f680877a34711e37 as useId, $bdb11010cef70236$export$cd8c9cb68f842629 as mergeIds, $bdb11010cef70236$export$b4cc09c592e8fdb8 as useSlotId};
|
|
//# sourceMappingURL=useId.module.js.map
|