DocSpace-client/packages/components/utils/useId.js
2022-11-07 13:38:26 +05:00

29 lines
621 B
JavaScript

import React from "react";
let ID = 0;
const genId = () => ID++;
let serverHandoffComplete = false;
const usePassiveLayoutEffect =
React[
typeof document !== "undefined" && document.createElement !== void 0
? "useLayoutEffect"
: "useEffect"
];
const useId = (fallbackId, prefix = "prefix") => {
const [id, setId] = React.useState(serverHandoffComplete ? genId : void 0);
usePassiveLayoutEffect(() => {
if (id === void 0) {
setId(ID++);
}
serverHandoffComplete = true;
}, []);
return fallbackId ? fallbackId : id === void 0 ? id : prefix + id;
};
export default useId;