UNPKG

ibag

Version:

A visual, fast, and customizable front-end scaffolding.

54 lines (45 loc) 1.34 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); exports.__esModule = true; exports.useId = useId; var React = _interopRequireWildcard(require("react")); // Copied from https://github.com/carbon-design-system/carbon // License: Apache-2.0 // Copyright IBM Corp. 2016, 2018 // Entrypoint: packages/react/src/internal/useId.js function setupGetInstanceId() { let instanceId = 0; return function getInstanceId() { return ++instanceId; }; } const getId = setupGetInstanceId(); const useIsomorphicLayoutEffect = canUseDOM() ? React.useLayoutEffect : React.useEffect; function canUseDOM() { return !!(typeof window !== `undefined` && window.document && window.document.createElement); } let serverHandoffCompleted = false; /** * Generate a unique ID with an optional prefix prepended to it * @param {string} [prefix] * @returns {string} */ function useId(prefix = `id`) { const [id, setId] = React.useState(() => { if (serverHandoffCompleted) { return `${prefix}-${getId()}`; } return null; }); useIsomorphicLayoutEffect(() => { if (id === null) { setId(`${prefix}-${getId()}`); } }, [getId]); React.useEffect(() => { if (serverHandoffCompleted === false) { serverHandoffCompleted = true; } }, []); return id; }