@grantpearceuk/hooks 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +403 -0
- package/lib/cjs/global.d.d.ts +7 -0
- package/lib/cjs/global.d.js +2 -0
- package/lib/cjs/index.d.ts +32 -0
- package/lib/cjs/index.js +69 -0
- package/lib/cjs/useArray/index.d.ts +2 -0
- package/lib/cjs/useArray/index.js +43 -0
- package/lib/cjs/useAsync/index.d.ts +2 -0
- package/lib/cjs/useAsync/index.js +29 -0
- package/lib/cjs/useClickOutside/index.d.ts +5 -0
- package/lib/cjs/useClickOutside/index.js +14 -0
- package/lib/cjs/useCookie/index.d.ts +2 -0
- package/lib/cjs/useCookie/index.js +26 -0
- package/lib/cjs/useCopyToClipboard/index.d.ts +2 -0
- package/lib/cjs/useCopyToClipboard/index.js +20 -0
- package/lib/cjs/useDarkMode/index.d.ts +4 -0
- package/lib/cjs/useDarkMode/index.js +18 -0
- package/lib/cjs/useDebounce/index.d.ts +2 -0
- package/lib/cjs/useDebounce/index.js +22 -0
- package/lib/cjs/useDebugInformation/index.d.ts +8 -0
- package/lib/cjs/useDebugInformation/index.js +44 -0
- package/lib/cjs/useDeepCompareEffect/index.d.ts +2 -0
- package/lib/cjs/useDeepCompareEffect/index.js +16 -0
- package/lib/cjs/useEffectOnce/index.d.ts +1 -0
- package/lib/cjs/useEffectOnce/index.js +7 -0
- package/lib/cjs/useEventListener/index.d.ts +2 -0
- package/lib/cjs/useEventListener/index.js +18 -0
- package/lib/cjs/useFetch/index.d.ts +2 -0
- package/lib/cjs/useFetch/index.js +82 -0
- package/lib/cjs/useGenerateHtmlId/index.d.ts +3 -0
- package/lib/cjs/useGenerateHtmlId/index.js +9 -0
- package/lib/cjs/useGeolocation/index.d.ts +2 -0
- package/lib/cjs/useGeolocation/index.js +26 -0
- package/lib/cjs/useHover/index.d.ts +2 -0
- package/lib/cjs/useHover/index.js +17 -0
- package/lib/cjs/useLongPress/index.d.ts +4 -0
- package/lib/cjs/useLongPress/index.js +19 -0
- package/lib/cjs/useMediaQuery/index.d.ts +1 -0
- package/lib/cjs/useMediaQuery/index.js +22 -0
- package/lib/cjs/useOnScreen/index.d.ts +2 -0
- package/lib/cjs/useOnScreen/index.js +23 -0
- package/lib/cjs/useOnlineStatus/index.d.ts +1 -0
- package/lib/cjs/useOnlineStatus/index.js +14 -0
- package/lib/cjs/usePagination/index.d.ts +9 -0
- package/lib/cjs/usePagination/index.js +22 -0
- package/lib/cjs/usePrevious/index.d.ts +2 -0
- package/lib/cjs/usePrevious/index.js +13 -0
- package/lib/cjs/useRenderCount/index.d.ts +1 -0
- package/lib/cjs/useRenderCount/index.js +11 -0
- package/lib/cjs/useScript/index.d.ts +2 -0
- package/lib/cjs/useScript/index.js +19 -0
- package/lib/cjs/useSize/index.d.ts +3 -0
- package/lib/cjs/useSize/index.js +18 -0
- package/lib/cjs/useStateWithHistory/index.d.ts +4 -0
- package/lib/cjs/useStateWithHistory/index.js +53 -0
- package/lib/cjs/useStateWithValidation/index.d.ts +2 -0
- package/lib/cjs/useStateWithValidation/index.js +14 -0
- package/lib/cjs/useStorage/index.d.ts +5 -0
- package/lib/cjs/useStorage/index.js +33 -0
- package/lib/cjs/useTimeout/index.d.ts +2 -0
- package/lib/cjs/useTimeout/index.js +26 -0
- package/lib/cjs/useToggle/index.d.ts +2 -0
- package/lib/cjs/useToggle/index.js +12 -0
- package/lib/cjs/useUpdateEffect/index.d.ts +2 -0
- package/lib/cjs/useUpdateEffect/index.js +14 -0
- package/lib/cjs/useWindowSize/index.d.ts +2 -0
- package/lib/cjs/useWindowSize/index.js +18 -0
- package/lib/esm/global.d.d.ts +7 -0
- package/lib/esm/global.d.js +1 -0
- package/lib/esm/index.d.ts +32 -0
- package/lib/esm/index.js +32 -0
- package/lib/esm/useArray/index.d.ts +2 -0
- package/lib/esm/useArray/index.js +40 -0
- package/lib/esm/useAsync/index.d.ts +2 -0
- package/lib/esm/useAsync/index.js +26 -0
- package/lib/esm/useClickOutside/index.d.ts +5 -0
- package/lib/esm/useClickOutside/index.js +8 -0
- package/lib/esm/useCookie/index.d.ts +2 -0
- package/lib/esm/useCookie/index.js +20 -0
- package/lib/esm/useCopyToClipboard/index.d.ts +2 -0
- package/lib/esm/useCopyToClipboard/index.js +14 -0
- package/lib/esm/useDarkMode/index.d.ts +4 -0
- package/lib/esm/useDarkMode/index.js +12 -0
- package/lib/esm/useDebounce/index.d.ts +2 -0
- package/lib/esm/useDebounce/index.js +16 -0
- package/lib/esm/useDebugInformation/index.d.ts +8 -0
- package/lib/esm/useDebugInformation/index.js +38 -0
- package/lib/esm/useDeepCompareEffect/index.d.ts +2 -0
- package/lib/esm/useDeepCompareEffect/index.js +10 -0
- package/lib/esm/useEffectOnce/index.d.ts +1 -0
- package/lib/esm/useEffectOnce/index.js +4 -0
- package/lib/esm/useEventListener/index.d.ts +2 -0
- package/lib/esm/useEventListener/index.js +15 -0
- package/lib/esm/useFetch/index.d.ts +2 -0
- package/lib/esm/useFetch/index.js +76 -0
- package/lib/esm/useGenerateHtmlId/index.d.ts +3 -0
- package/lib/esm/useGenerateHtmlId/index.js +7 -0
- package/lib/esm/useGeolocation/index.d.ts +2 -0
- package/lib/esm/useGeolocation/index.js +23 -0
- package/lib/esm/useHover/index.d.ts +2 -0
- package/lib/esm/useHover/index.js +11 -0
- package/lib/esm/useLongPress/index.d.ts +4 -0
- package/lib/esm/useLongPress/index.js +13 -0
- package/lib/esm/useMediaQuery/index.d.ts +1 -0
- package/lib/esm/useMediaQuery/index.js +16 -0
- package/lib/esm/useOnScreen/index.d.ts +2 -0
- package/lib/esm/useOnScreen/index.js +20 -0
- package/lib/esm/useOnlineStatus/index.d.ts +1 -0
- package/lib/esm/useOnlineStatus/index.js +8 -0
- package/lib/esm/usePagination/index.d.ts +9 -0
- package/lib/esm/usePagination/index.js +19 -0
- package/lib/esm/usePrevious/index.d.ts +2 -0
- package/lib/esm/usePrevious/index.js +10 -0
- package/lib/esm/useRenderCount/index.d.ts +1 -0
- package/lib/esm/useRenderCount/index.js +8 -0
- package/lib/esm/useScript/index.d.ts +2 -0
- package/lib/esm/useScript/index.js +13 -0
- package/lib/esm/useSize/index.d.ts +3 -0
- package/lib/esm/useSize/index.js +15 -0
- package/lib/esm/useStateWithHistory/index.d.ts +4 -0
- package/lib/esm/useStateWithHistory/index.js +50 -0
- package/lib/esm/useStateWithValidation/index.d.ts +2 -0
- package/lib/esm/useStateWithValidation/index.js +11 -0
- package/lib/esm/useStorage/index.d.ts +5 -0
- package/lib/esm/useStorage/index.js +28 -0
- package/lib/esm/useTimeout/index.d.ts +2 -0
- package/lib/esm/useTimeout/index.js +23 -0
- package/lib/esm/useToggle/index.d.ts +2 -0
- package/lib/esm/useToggle/index.js +9 -0
- package/lib/esm/useUpdateEffect/index.d.ts +2 -0
- package/lib/esm/useUpdateEffect/index.js +11 -0
- package/lib/esm/useWindowSize/index.d.ts +2 -0
- package/lib/esm/useWindowSize/index.js +12 -0
- package/package.json +49 -0
package/README.md
ADDED
@@ -0,0 +1,403 @@
|
|
1
|
+
# Custom React Hooks
|
2
|
+
|
3
|
+
View hooks in action (Examples)
|
4
|
+
|
5
|
+
## useToggle
|
6
|
+
|
7
|
+
Easily toggle between a boolean
|
8
|
+
|
9
|
+
```tsx
|
10
|
+
|
11
|
+
const [value, toggleValue] = useToggle(false)
|
12
|
+
|
13
|
+
<Button onClick={() => toggleValue()}>
|
14
|
+
Toggle
|
15
|
+
</Button>
|
16
|
+
<Button onClick={() => toggleValue(true)}>
|
17
|
+
Make True
|
18
|
+
</Button>
|
19
|
+
<Button onClick={() => toggleValue(false)}>
|
20
|
+
Make False
|
21
|
+
</Button>
|
22
|
+
|
23
|
+
```
|
24
|
+
|
25
|
+
---
|
26
|
+
|
27
|
+
## useTimeout
|
28
|
+
|
29
|
+
Run a timeout without re-rendering issues. Useful for use in other hooks
|
30
|
+
|
31
|
+
```tsx
|
32
|
+
|
33
|
+
const [count, setCount] = useState(10)
|
34
|
+
const { clear, reset } = useTimeout(() => setCount(0), 1000)
|
35
|
+
|
36
|
+
<Button onClick={() => setCount((c) => c + 1)}>
|
37
|
+
Increment
|
38
|
+
</Button>
|
39
|
+
<Button onClick={clear}>
|
40
|
+
Clear Timeout
|
41
|
+
</Button>
|
42
|
+
<Button onClick={reset}>
|
43
|
+
Reset Timeout
|
44
|
+
</Button>
|
45
|
+
|
46
|
+
```
|
47
|
+
|
48
|
+
---
|
49
|
+
|
50
|
+
## useDebounce
|
51
|
+
|
52
|
+
Run something after a certain delay. Does not run on the first time
|
53
|
+
|
54
|
+
```tsx
|
55
|
+
|
56
|
+
const [count, setCount] = useState(10)
|
57
|
+
useDebounce(() => alert(count), 1000, [count])
|
58
|
+
|
59
|
+
<Button onClick={() => setCount((c) => c + 1)}>
|
60
|
+
Increment
|
61
|
+
</Button>
|
62
|
+
```
|
63
|
+
|
64
|
+
---
|
65
|
+
|
66
|
+
## useUpdateEffect
|
67
|
+
|
68
|
+
Only run when something changes. Does not run on the first time
|
69
|
+
|
70
|
+
```tsx
|
71
|
+
|
72
|
+
const [count, setCount] = useState(10)
|
73
|
+
useUpdateEffect(() => alert(count), [count])
|
74
|
+
|
75
|
+
<Button onClick={() => setCount((c) => c + 1)}>
|
76
|
+
Increment
|
77
|
+
</Button>
|
78
|
+
|
79
|
+
```
|
80
|
+
|
81
|
+
---
|
82
|
+
|
83
|
+
## useArray
|
84
|
+
|
85
|
+
Easily use arrays.
|
86
|
+
|
87
|
+
```tsx
|
88
|
+
|
89
|
+
const { array, set, push, remove, filter, update, clear } = useArray([1, 2, 3, 4, 5, 6])
|
90
|
+
|
91
|
+
<Button onClick={() => push(7)}>
|
92
|
+
Add 7
|
93
|
+
</Button>
|
94
|
+
<Button onClick={() => update(1, 9)}>
|
95
|
+
Change 2nd To 9
|
96
|
+
</Button>
|
97
|
+
<Button onClick={() => remove(1)}>
|
98
|
+
Remove 2nd
|
99
|
+
</Button>
|
100
|
+
<Button onClick={() => filter((n) => n < 3)}>
|
101
|
+
Keep below 4
|
102
|
+
</Button>
|
103
|
+
<Button onClick={() => set([1, 2])}>
|
104
|
+
Set To 1, 2
|
105
|
+
</Button>
|
106
|
+
<Button onClick={clear}>
|
107
|
+
Clear
|
108
|
+
</Button>
|
109
|
+
|
110
|
+
```
|
111
|
+
|
112
|
+
---
|
113
|
+
|
114
|
+
## usePrevious
|
115
|
+
|
116
|
+
Store previous value of a state
|
117
|
+
|
118
|
+
```tsx
|
119
|
+
|
120
|
+
const [count, setCount] = useState(0)
|
121
|
+
const [name, setName] = useState("Grant")
|
122
|
+
const previousCount = usePrevious(count)
|
123
|
+
|
124
|
+
<Button onClick={() => setCount((currentCount) => currentCount + 1)}>
|
125
|
+
Increment
|
126
|
+
</Button>
|
127
|
+
<Button onClick={() => setName("John")}>
|
128
|
+
Change Name
|
129
|
+
</Button>
|
130
|
+
|
131
|
+
```
|
132
|
+
|
133
|
+
---
|
134
|
+
|
135
|
+
## useStateWithHistory
|
136
|
+
|
137
|
+
Stores the history of a state
|
138
|
+
|
139
|
+
```tsx
|
140
|
+
|
141
|
+
const [count, setCount, { history, pointer, back, forward, go }] = useStateWithHistory(1)
|
142
|
+
const [name, setName] = useState("Grant")
|
143
|
+
|
144
|
+
<Button onClick={() => setCount((currentCount) => currentCount * 2)}>
|
145
|
+
Double
|
146
|
+
</Button>
|
147
|
+
<Button onClick={() => setCount((currentCount) => currentCount + 1)}>
|
148
|
+
Increment
|
149
|
+
</Button>
|
150
|
+
<Button onClick={back}>
|
151
|
+
Back
|
152
|
+
</Button>
|
153
|
+
<Button onClick={forward}>
|
154
|
+
Forward
|
155
|
+
</Button>
|
156
|
+
<Button onClick={() => go(2)}>
|
157
|
+
Go To Index 2
|
158
|
+
</Button>
|
159
|
+
<Button onClick={() => setName("John")}>
|
160
|
+
Change Name
|
161
|
+
</Button>
|
162
|
+
|
163
|
+
|
164
|
+
```
|
165
|
+
|
166
|
+
---
|
167
|
+
|
168
|
+
## useStorage
|
169
|
+
|
170
|
+
Easily use Local or Session Storage
|
171
|
+
|
172
|
+
```tsx
|
173
|
+
|
174
|
+
const [name, setName, removeName] = useSessionStorage("name", "Grant")
|
175
|
+
const [age, setAge, removeAge] = useLocalStorage("age", 26)
|
176
|
+
|
177
|
+
<Button onClick={() => setName("John")}>
|
178
|
+
Set Name
|
179
|
+
</Button>
|
180
|
+
<Button onClick={() => setAge(40)}>
|
181
|
+
Set Age
|
182
|
+
</Button>
|
183
|
+
<Button onClick={removeName}>
|
184
|
+
Remove Name
|
185
|
+
</Button>
|
186
|
+
<Button onClick={removeAge}>
|
187
|
+
Remove Age
|
188
|
+
</Button>
|
189
|
+
|
190
|
+
```
|
191
|
+
|
192
|
+
---
|
193
|
+
|
194
|
+
## useAsync
|
195
|
+
|
196
|
+
Easily call an asynchronous function
|
197
|
+
|
198
|
+
```tsx
|
199
|
+
|
200
|
+
const { loading, error, value } = useAsync(() => {
|
201
|
+
return new Promise((resolve, reject) => {
|
202
|
+
const success = true
|
203
|
+
setTimeout(() => {
|
204
|
+
success ? resolve("Hi") : reject("Error")
|
205
|
+
}, 1000)
|
206
|
+
})
|
207
|
+
})
|
208
|
+
|
209
|
+
```
|
210
|
+
|
211
|
+
---
|
212
|
+
|
213
|
+
## useFetch
|
214
|
+
|
215
|
+
Easily call and handle a fetch request
|
216
|
+
|
217
|
+
```tsx
|
218
|
+
|
219
|
+
const [id, setId] = useState(1)
|
220
|
+
const { loading, error, value } = useFetch(`https://jsonplaceholder.typicode.com/todos/${id}`, {}, [id])
|
221
|
+
|
222
|
+
Error: {JSON.stringify(error, null, 2)}
|
223
|
+
Results: {JSON.stringify(value, null, 2)}
|
224
|
+
|
225
|
+
<Button onClick={() => setId((currentId) => currentId + 1)}>
|
226
|
+
Increment ID
|
227
|
+
<Button>
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
```
|
232
|
+
|
233
|
+
---
|
234
|
+
|
235
|
+
## useClickOutside
|
236
|
+
|
237
|
+
Run a function when a click is outside the element
|
238
|
+
|
239
|
+
```tsx
|
240
|
+
|
241
|
+
const [open, setOpen] = useState(false)
|
242
|
+
const modalRef = useRef()
|
243
|
+
|
244
|
+
useClickOutside(modalRef, () => {
|
245
|
+
if (open) setOpen(false)
|
246
|
+
})
|
247
|
+
<div ref={modalRef} />
|
248
|
+
|
249
|
+
```
|
250
|
+
|
251
|
+
---
|
252
|
+
|
253
|
+
## useCookie
|
254
|
+
|
255
|
+
Easily use cookies
|
256
|
+
|
257
|
+
```tsx
|
258
|
+
|
259
|
+
const [value, update, remove] = useCookie("name", "John")
|
260
|
+
|
261
|
+
```
|
262
|
+
|
263
|
+
---
|
264
|
+
|
265
|
+
## useCopyToClipboard
|
266
|
+
|
267
|
+
Copy to the clipboard
|
268
|
+
|
269
|
+
```tsx
|
270
|
+
|
271
|
+
const [copyToClipboard, { success }] = useCopyToClipboard()
|
272
|
+
|
273
|
+
```
|
274
|
+
|
275
|
+
---
|
276
|
+
|
277
|
+
## useDarkMode
|
278
|
+
|
279
|
+
Find if the Dark mode is set. Sets in local storage
|
280
|
+
|
281
|
+
```tsx
|
282
|
+
|
283
|
+
const [darkMode, setDarkMode] = useDarkMode()
|
284
|
+
|
285
|
+
```
|
286
|
+
|
287
|
+
---
|
288
|
+
|
289
|
+
## useDeepCompareEffect
|
290
|
+
|
291
|
+
Compare values within an object
|
292
|
+
|
293
|
+
---
|
294
|
+
|
295
|
+
## useEffectOnce
|
296
|
+
|
297
|
+
Only run once
|
298
|
+
|
299
|
+
```tsx
|
300
|
+
|
301
|
+
useEffectOnce(() => alert("Use Effect Once"))
|
302
|
+
|
303
|
+
```
|
304
|
+
|
305
|
+
---
|
306
|
+
|
307
|
+
## useEventListener
|
308
|
+
|
309
|
+
Listen for events
|
310
|
+
|
311
|
+
```tsx
|
312
|
+
|
313
|
+
const [key, setKey] = useState("")
|
314
|
+
useEventListener("keydown", (e: KeyboardEvent) => {
|
315
|
+
setKey(e.key)
|
316
|
+
})
|
317
|
+
|
318
|
+
```
|
319
|
+
|
320
|
+
---
|
321
|
+
|
322
|
+
## useGeolocation
|
323
|
+
|
324
|
+
Get the Geolocation Data
|
325
|
+
|
326
|
+
```tsx
|
327
|
+
|
328
|
+
const { loading, error, data: { latitude, longitude } } = useGeolocation()
|
329
|
+
|
330
|
+
```
|
331
|
+
|
332
|
+
---
|
333
|
+
|
334
|
+
## useMediaQuery
|
335
|
+
|
336
|
+
Check what media query is valid
|
337
|
+
|
338
|
+
```tsx
|
339
|
+
|
340
|
+
const isLarge = useMediaQuery("(min-width: 200px)")
|
341
|
+
|
342
|
+
```
|
343
|
+
---
|
344
|
+
|
345
|
+
## useOnScreen
|
346
|
+
|
347
|
+
Check if an element if on the screen
|
348
|
+
|
349
|
+
```tsx
|
350
|
+
|
351
|
+
const secondRef = useRef()
|
352
|
+
const visible = useOnScreen(secondRef, "-100px")
|
353
|
+
|
354
|
+
<div ref={secondRef} />
|
355
|
+
|
356
|
+
```
|
357
|
+
|
358
|
+
---
|
359
|
+
|
360
|
+
## useScript
|
361
|
+
|
362
|
+
Easily load a script asynchronous
|
363
|
+
|
364
|
+
```tsx
|
365
|
+
|
366
|
+
const { loading, error } = useScript("https://code.jquery.com/jquery-3.6.0.min.js")
|
367
|
+
|
368
|
+
```
|
369
|
+
|
370
|
+
---
|
371
|
+
|
372
|
+
## useSize
|
373
|
+
|
374
|
+
Find the size dynamically
|
375
|
+
|
376
|
+
---
|
377
|
+
|
378
|
+
## useStateWithValidation
|
379
|
+
|
380
|
+
Easily validate a state
|
381
|
+
|
382
|
+
```tsx
|
383
|
+
|
384
|
+
const ref = useRef()
|
385
|
+
const size = useSize(ref)
|
386
|
+
|
387
|
+
<textarea ref={ref}></textarea>
|
388
|
+
|
389
|
+
```
|
390
|
+
|
391
|
+
---
|
392
|
+
|
393
|
+
## useWindowSize
|
394
|
+
|
395
|
+
Check the size of the window
|
396
|
+
|
397
|
+
```tsx
|
398
|
+
|
399
|
+
const { width, height } = useWindowSize()
|
400
|
+
|
401
|
+
```
|
402
|
+
|
403
|
+
---
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import useArray from "./useArray";
|
2
|
+
import useAsync from "./useAsync";
|
3
|
+
import useClickOutside from "./useClickOutside";
|
4
|
+
import useCookie from "./useCookie";
|
5
|
+
import useCopyToClipboard from "./useCopyToClipboard";
|
6
|
+
import useDarkMode from "./useDarkMode";
|
7
|
+
import useDebounce from "./useDebounce";
|
8
|
+
import useDebugInformation from "./useDebugInformation";
|
9
|
+
import useDeepCompareEffect from "./useDeepCompareEffect";
|
10
|
+
import useEffectOnce from "./useEffectOnce";
|
11
|
+
import useEventListener from "./useEventListener";
|
12
|
+
import useFetch from "./useFetch";
|
13
|
+
import useGenerateHtmlId from "./useGenerateHtmlId";
|
14
|
+
import useGeolocation from "./useGeolocation";
|
15
|
+
import useHover from "./useHover";
|
16
|
+
import useLongPress from "./useLongPress";
|
17
|
+
import useMediaQuery from "./useMediaQuery";
|
18
|
+
import useOnlineStatus from "./useOnlineStatus";
|
19
|
+
import useOnScreen from "./useOnScreen";
|
20
|
+
import usePagination from "./usePagination";
|
21
|
+
import usePrevious from "./usePrevious";
|
22
|
+
import useRenderCount from "./useRenderCount";
|
23
|
+
import useScript from "./useScript";
|
24
|
+
import useSize from "./useSize";
|
25
|
+
import useStateWithHistory from "./useStateWithHistory";
|
26
|
+
import useStateWithValidation from "./useStateWithValidation";
|
27
|
+
import { useLocalStorage, useSessionStorage } from "./useStorage";
|
28
|
+
import useTimeout from "./useTimeout";
|
29
|
+
import useToggle from "./useToggle";
|
30
|
+
import useUpdateEffect from "./useUpdateEffect";
|
31
|
+
import useWindowSize from "./useWindowSize";
|
32
|
+
export { useArray, useAsync, useClickOutside, useCookie, useCopyToClipboard, useDarkMode, useDebounce, useDebugInformation, useDeepCompareEffect, useEffectOnce, useEventListener, useFetch, useGenerateHtmlId, useGeolocation, useHover, useLongPress, useMediaQuery, useOnlineStatus, useOnScreen, usePagination, usePrevious, useRenderCount, useScript, useSize, useStateWithHistory, useStateWithValidation, useLocalStorage, useSessionStorage, useTimeout, useToggle, useUpdateEffect, useWindowSize, };
|
package/lib/cjs/index.js
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.useWindowSize = exports.useUpdateEffect = exports.useToggle = exports.useTimeout = exports.useSessionStorage = exports.useLocalStorage = exports.useStateWithValidation = exports.useStateWithHistory = exports.useSize = exports.useScript = exports.useRenderCount = exports.usePrevious = exports.usePagination = exports.useOnScreen = exports.useOnlineStatus = exports.useMediaQuery = exports.useLongPress = exports.useHover = exports.useGeolocation = exports.useGenerateHtmlId = exports.useFetch = exports.useEventListener = exports.useEffectOnce = exports.useDeepCompareEffect = exports.useDebugInformation = exports.useDebounce = exports.useDarkMode = exports.useCopyToClipboard = exports.useCookie = exports.useClickOutside = exports.useAsync = exports.useArray = void 0;
|
7
|
+
var useArray_1 = __importDefault(require("./useArray"));
|
8
|
+
exports.useArray = useArray_1.default;
|
9
|
+
var useAsync_1 = __importDefault(require("./useAsync"));
|
10
|
+
exports.useAsync = useAsync_1.default;
|
11
|
+
var useClickOutside_1 = __importDefault(require("./useClickOutside"));
|
12
|
+
exports.useClickOutside = useClickOutside_1.default;
|
13
|
+
var useCookie_1 = __importDefault(require("./useCookie"));
|
14
|
+
exports.useCookie = useCookie_1.default;
|
15
|
+
var useCopyToClipboard_1 = __importDefault(require("./useCopyToClipboard"));
|
16
|
+
exports.useCopyToClipboard = useCopyToClipboard_1.default;
|
17
|
+
var useDarkMode_1 = __importDefault(require("./useDarkMode"));
|
18
|
+
exports.useDarkMode = useDarkMode_1.default;
|
19
|
+
var useDebounce_1 = __importDefault(require("./useDebounce"));
|
20
|
+
exports.useDebounce = useDebounce_1.default;
|
21
|
+
var useDebugInformation_1 = __importDefault(require("./useDebugInformation"));
|
22
|
+
exports.useDebugInformation = useDebugInformation_1.default;
|
23
|
+
var useDeepCompareEffect_1 = __importDefault(require("./useDeepCompareEffect"));
|
24
|
+
exports.useDeepCompareEffect = useDeepCompareEffect_1.default;
|
25
|
+
var useEffectOnce_1 = __importDefault(require("./useEffectOnce"));
|
26
|
+
exports.useEffectOnce = useEffectOnce_1.default;
|
27
|
+
var useEventListener_1 = __importDefault(require("./useEventListener"));
|
28
|
+
exports.useEventListener = useEventListener_1.default;
|
29
|
+
var useFetch_1 = __importDefault(require("./useFetch"));
|
30
|
+
exports.useFetch = useFetch_1.default;
|
31
|
+
var useGenerateHtmlId_1 = __importDefault(require("./useGenerateHtmlId"));
|
32
|
+
exports.useGenerateHtmlId = useGenerateHtmlId_1.default;
|
33
|
+
var useGeolocation_1 = __importDefault(require("./useGeolocation"));
|
34
|
+
exports.useGeolocation = useGeolocation_1.default;
|
35
|
+
var useHover_1 = __importDefault(require("./useHover"));
|
36
|
+
exports.useHover = useHover_1.default;
|
37
|
+
var useLongPress_1 = __importDefault(require("./useLongPress"));
|
38
|
+
exports.useLongPress = useLongPress_1.default;
|
39
|
+
var useMediaQuery_1 = __importDefault(require("./useMediaQuery"));
|
40
|
+
exports.useMediaQuery = useMediaQuery_1.default;
|
41
|
+
var useOnlineStatus_1 = __importDefault(require("./useOnlineStatus"));
|
42
|
+
exports.useOnlineStatus = useOnlineStatus_1.default;
|
43
|
+
var useOnScreen_1 = __importDefault(require("./useOnScreen"));
|
44
|
+
exports.useOnScreen = useOnScreen_1.default;
|
45
|
+
var usePagination_1 = __importDefault(require("./usePagination"));
|
46
|
+
exports.usePagination = usePagination_1.default;
|
47
|
+
var usePrevious_1 = __importDefault(require("./usePrevious"));
|
48
|
+
exports.usePrevious = usePrevious_1.default;
|
49
|
+
var useRenderCount_1 = __importDefault(require("./useRenderCount"));
|
50
|
+
exports.useRenderCount = useRenderCount_1.default;
|
51
|
+
var useScript_1 = __importDefault(require("./useScript"));
|
52
|
+
exports.useScript = useScript_1.default;
|
53
|
+
var useSize_1 = __importDefault(require("./useSize"));
|
54
|
+
exports.useSize = useSize_1.default;
|
55
|
+
var useStateWithHistory_1 = __importDefault(require("./useStateWithHistory"));
|
56
|
+
exports.useStateWithHistory = useStateWithHistory_1.default;
|
57
|
+
var useStateWithValidation_1 = __importDefault(require("./useStateWithValidation"));
|
58
|
+
exports.useStateWithValidation = useStateWithValidation_1.default;
|
59
|
+
var useStorage_1 = require("./useStorage");
|
60
|
+
Object.defineProperty(exports, "useLocalStorage", { enumerable: true, get: function () { return useStorage_1.useLocalStorage; } });
|
61
|
+
Object.defineProperty(exports, "useSessionStorage", { enumerable: true, get: function () { return useStorage_1.useSessionStorage; } });
|
62
|
+
var useTimeout_1 = __importDefault(require("./useTimeout"));
|
63
|
+
exports.useTimeout = useTimeout_1.default;
|
64
|
+
var useToggle_1 = __importDefault(require("./useToggle"));
|
65
|
+
exports.useToggle = useToggle_1.default;
|
66
|
+
var useUpdateEffect_1 = __importDefault(require("./useUpdateEffect"));
|
67
|
+
exports.useUpdateEffect = useUpdateEffect_1.default;
|
68
|
+
var useWindowSize_1 = __importDefault(require("./useWindowSize"));
|
69
|
+
exports.useWindowSize = useWindowSize_1.default;
|
@@ -0,0 +1,43 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
3
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
4
|
+
if (ar || !(i in from)) {
|
5
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
6
|
+
ar[i] = from[i];
|
7
|
+
}
|
8
|
+
}
|
9
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
var react_1 = require("react");
|
13
|
+
function useArray(defaultValue) {
|
14
|
+
var _a = (0, react_1.useState)(defaultValue), array = _a[0], setArray = _a[1];
|
15
|
+
var push = function (element) {
|
16
|
+
setArray(function (a) { return __spreadArray(__spreadArray([], a, true), [element], false); });
|
17
|
+
};
|
18
|
+
var filter = function (callback) {
|
19
|
+
setArray(function (a) { return a.filter(callback); });
|
20
|
+
};
|
21
|
+
var update = function (index, newElement) {
|
22
|
+
setArray(function (a) { return __spreadArray(__spreadArray(__spreadArray([], a.slice(0, index), true), [newElement], false), a.slice(index + 1), true); });
|
23
|
+
};
|
24
|
+
var remove = function (index) {
|
25
|
+
if (index > -1) {
|
26
|
+
array.splice(index, 1);
|
27
|
+
setArray(array);
|
28
|
+
}
|
29
|
+
};
|
30
|
+
var clear = function () {
|
31
|
+
setArray([]);
|
32
|
+
};
|
33
|
+
return {
|
34
|
+
array: array,
|
35
|
+
set: setArray,
|
36
|
+
push: push,
|
37
|
+
filter: filter,
|
38
|
+
update: update,
|
39
|
+
remove: remove,
|
40
|
+
clear: clear,
|
41
|
+
};
|
42
|
+
}
|
43
|
+
exports.default = useArray;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
var react_1 = require("react");
|
4
|
+
function useAsync(callback, dependencies) {
|
5
|
+
if (dependencies === void 0) { dependencies = []; }
|
6
|
+
var _a = (0, react_1.useState)(true), loading = _a[0], setLoading = _a[1];
|
7
|
+
var _b = (0, react_1.useState)(), error = _b[0], setError = _b[1];
|
8
|
+
var _c = (0, react_1.useState)(), value = _c[0], setValue = _c[1];
|
9
|
+
var callbackMemoized = (0, react_1.useCallback)(function () {
|
10
|
+
setLoading(true);
|
11
|
+
setError(undefined);
|
12
|
+
setValue(undefined);
|
13
|
+
callback()
|
14
|
+
.then(function (response) {
|
15
|
+
setValue(response);
|
16
|
+
})
|
17
|
+
.catch(setError)
|
18
|
+
.finally(function () { return setLoading(false); });
|
19
|
+
}, dependencies);
|
20
|
+
(0, react_1.useEffect)(function () {
|
21
|
+
callbackMemoized();
|
22
|
+
}, [callbackMemoized]);
|
23
|
+
return {
|
24
|
+
loading: loading,
|
25
|
+
error: error,
|
26
|
+
value: value,
|
27
|
+
};
|
28
|
+
}
|
29
|
+
exports.default = useAsync;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
var useEventListener_1 = __importDefault(require("../useEventListener"));
|
7
|
+
function useClickOutside(ref, cb) {
|
8
|
+
(0, useEventListener_1.default)("click", function (e) {
|
9
|
+
if (ref.current == null || (typeof ref.current !== "undefined" && ref.current.contains(e.target)))
|
10
|
+
return;
|
11
|
+
cb(e);
|
12
|
+
}, document);
|
13
|
+
}
|
14
|
+
exports.default = useClickOutside;
|
@@ -0,0 +1,26 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
var react_1 = require("react");
|
7
|
+
var js_cookie_1 = __importDefault(require("js-cookie"));
|
8
|
+
function useCookie(name, defaultValue) {
|
9
|
+
var _a = (0, react_1.useState)(function () {
|
10
|
+
var cookie = js_cookie_1.default.get(name);
|
11
|
+
if (cookie)
|
12
|
+
return cookie;
|
13
|
+
js_cookie_1.default.set(name, defaultValue);
|
14
|
+
return defaultValue;
|
15
|
+
}), value = _a[0], setValue = _a[1];
|
16
|
+
var updateCookie = (0, react_1.useCallback)(function (newValue, options) {
|
17
|
+
js_cookie_1.default.set(name, newValue, options);
|
18
|
+
setValue(newValue);
|
19
|
+
}, [name]);
|
20
|
+
var deleteCookie = (0, react_1.useCallback)(function () {
|
21
|
+
js_cookie_1.default.remove(name);
|
22
|
+
setValue("");
|
23
|
+
}, [name]);
|
24
|
+
return [value, updateCookie, deleteCookie];
|
25
|
+
}
|
26
|
+
exports.default = useCookie;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
var react_1 = require("react");
|
7
|
+
var copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
|
8
|
+
function useCopyToClipboard() {
|
9
|
+
var _a = (0, react_1.useState)(), value = _a[0], setValue = _a[1];
|
10
|
+
var _b = (0, react_1.useState)(), success = _b[0], setSuccess = _b[1];
|
11
|
+
var copyToClipboard = function (text, options) {
|
12
|
+
if (options === void 0) { options = {}; }
|
13
|
+
var result = (0, copy_to_clipboard_1.default)(text, options);
|
14
|
+
if (result)
|
15
|
+
setValue(text);
|
16
|
+
setSuccess(result);
|
17
|
+
};
|
18
|
+
return [copyToClipboard, { value: value, success: success }];
|
19
|
+
}
|
20
|
+
exports.default = useCopyToClipboard;
|