@grantpearceuk/hooks 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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;
|