useId.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  2. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  3. import * as React from 'react';
  4. function 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. }
  9. var uuid = 0;
  10. /** @private Note only worked in develop env. Not work in production. */
  11. export function resetUuid() {
  12. if (process.env.NODE_ENV !== 'production') {
  13. uuid = 0;
  14. }
  15. }
  16. var useOriginId = getUseId();
  17. export default useOriginId ?
  18. // Use React `useId`
  19. function useId(id) {
  20. var reactId = useOriginId();
  21. // Developer passed id is single source of truth
  22. if (id) {
  23. return id;
  24. }
  25. // Test env always return mock id
  26. if (process.env.NODE_ENV === 'test') {
  27. return 'test-id';
  28. }
  29. return reactId;
  30. } :
  31. // Use compatible of `useId`
  32. function useCompatId(id) {
  33. // Inner id for accessibility usage. Only work in client side
  34. var _React$useState = React.useState('ssr-id'),
  35. _React$useState2 = _slicedToArray(_React$useState, 2),
  36. innerId = _React$useState2[0],
  37. setInnerId = _React$useState2[1];
  38. React.useEffect(function () {
  39. var nextId = uuid;
  40. uuid += 1;
  41. setInnerId("rc_unique_".concat(nextId));
  42. }, []);
  43. // Developer passed id is single source of truth
  44. if (id) {
  45. return id;
  46. }
  47. // Test env always return mock id
  48. if (process.env.NODE_ENV === 'test') {
  49. return 'test-id';
  50. }
  51. // Return react native id or inner id
  52. return innerId;
  53. };