UNPKG

1.48 kBJavaScriptView Raw
1import * as React from 'react';
2import { useContext, useState } from 'react';
3import { counter, getId, getPrefix, source } from './context';
4var generateUID = function (context) {
5 var quartz = context || counter;
6 var prefix = getPrefix(quartz);
7 var id = getId(quartz);
8 var uid = prefix + id;
9 var gen = function (item) { return uid + quartz.uid(item); };
10 return { uid: uid, gen: gen };
11};
12var useUIDState = function () {
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 var context = useContext(source);
19 var uid = useState(function () { return generateUID(context); })[0];
20 return uid;
21};
22/**
23 * returns and unique id. SSR friendly
24 * returns {String}
25 * @see {@link UIDConsumer}
26 * @see https://github.com/thearnica/react-uid#hooks-168
27 * @example
28 * const id = useUID();
29 * id == 1; // for example
30 */
31export var useUID = function () {
32 var uid = useUIDState().uid;
33 return uid;
34};
35/**
36 * returns an uid generator
37 * @see {@link UIDConsumer}
38 * @see https://github.com/thearnica/react-uid#hooks-168
39 * @example
40 * const uid = useUIDSeed();
41 * return (
42 * <>
43 * <label for={seed('email')}>Email: </label>
44 * <input id={seed('email')} name="email" />
45 * {data.map(item => <div key={seed(item)}>...</div>
46 * </>
47 * )
48 */
49export var useUIDSeed = function () {
50 var gen = useUIDState().gen;
51 return gen;
52};