UNPKG

1.57 kBJavaScriptView Raw
1import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3import * as React from 'react';
4function getUseId() {
5 // We need fully clone React function here to avoid webpack warning React 17 do not export `useId`
6 var fullClone = _objectSpread({}, React);
7 return fullClone.useId;
8}
9var uuid = 0;
10
11/** @private Note only worked in develop env. Not work in production. */
12export function resetUuid() {
13 if (process.env.NODE_ENV !== 'production') {
14 uuid = 0;
15 }
16}
17var useOriginId = getUseId();
18export default useOriginId ?
19// Use React `useId`
20function useId(id) {
21 var reactId = useOriginId();
22
23 // Developer passed id is single source of truth
24 if (id) {
25 return id;
26 }
27
28 // Test env always return mock id
29 if (process.env.NODE_ENV === 'test') {
30 return 'test-id';
31 }
32 return reactId;
33} :
34// Use compatible of `useId`
35function useCompatId(id) {
36 // Inner id for accessibility usage. Only work in client side
37 var _React$useState = React.useState('ssr-id'),
38 _React$useState2 = _slicedToArray(_React$useState, 2),
39 innerId = _React$useState2[0],
40 setInnerId = _React$useState2[1];
41 React.useEffect(function () {
42 var nextId = uuid;
43 uuid += 1;
44 setInnerId("rc_unique_".concat(nextId));
45 }, []);
46
47 // Developer passed id is single source of truth
48 if (id) {
49 return id;
50 }
51
52 // Test env always return mock id
53 if (process.env.NODE_ENV === 'test') {
54 return 'test-id';
55 }
56
57 // Return react native id or inner id
58 return innerId;
59};
\No newline at end of file