1 | import * as React from 'react';
|
2 | import { useContext, useState } from 'react';
|
3 | import { counter, getId, getPrefix, source } from './context';
|
4 | const generateUID = (context) => {
|
5 | const quartz = context || counter;
|
6 | const prefix = getPrefix(quartz);
|
7 | const id = getId(quartz);
|
8 | const uid = prefix + id;
|
9 | const gen = (item) => uid + quartz.uid(item);
|
10 | return { uid, gen };
|
11 | };
|
12 | const useUIDState = () => {
|
13 | if (process.env.NODE_ENV !== 'production') {
|
14 | if (!('useContext' in React)) {
|
15 | throw new Error('Hooks API requires React 16.8+');
|
16 | }
|
17 | }
|
18 | const context = useContext(source);
|
19 | const [uid] = useState(() => generateUID(context));
|
20 | return uid;
|
21 | };
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | export const useUID = () => {
|
32 | const { uid } = useUIDState();
|
33 | return uid;
|
34 | };
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 | export const useUIDSeed = () => {
|
50 | const { gen } = useUIDState();
|
51 | return gen;
|
52 | };
|