fannypack-v5
Version:
An accessible, composable, and friendly React UI Kit
46 lines (38 loc) • 1.22 kB
JavaScript
import { createContext, useRef, useMemo, createElement, useContext, useState } from 'react';
var defaultPrefix = 'id-';
var generateId = function generateId(prefix) {
if (prefix === void 0) {
prefix = defaultPrefix;
}
return process.env.NODE_ENV === 'test' ? '' : "" + prefix + Math.random().toString(32).substr(2, 6);
};
var Context = createContext(generateId);
function IdProvider(_ref) {
var children = _ref.children,
_ref$prefix = _ref.prefix,
prefix = _ref$prefix === void 0 ? '' : _ref$prefix;
var count = useRef(0);
var genId = useMemo(function () {
return function (localPrefix) {
if (localPrefix === void 0) {
localPrefix = defaultPrefix;
}
return "" + prefix + localPrefix + (process.env.NODE_ENV === 'test' ? '' : ++count.current);
};
}, [prefix]);
return /*#__PURE__*/createElement(Context.Provider, {
value: genId
}, children);
}
function useUniqueId(prefix) {
if (prefix === void 0) {
prefix = defaultPrefix;
}
var genId = useContext(Context);
var _React$useState = useState(function () {
return genId(prefix);
}),
id = _React$useState[0];
return id;
}
export { IdProvider, generateId, useUniqueId };