on f34e8d0 help sign in
bridge/src/lib/useArray.js
36 lines 764 B history raw
1import { useCallback, useState } from 'react';
3/**
4 * Manages an immutable array of items.
5 */
6export default function useArray(initialItems = [], itemBuilder) {
7 const [items, _setItems] = useState(initialItems);
9 const append = () => _setItems(items => [...items, itemBuilder()]);
11 const removeAt = i =>
12 _setItems(items => {
13 const newItems = [...items.slice(0, i), ...items.slice(i + 1)];
14 console.log(items.length, newItems.length);
15 return newItems;
16 });
18 const updateAt = (i, update = {}) =>
19 _setItems(items => [
20 ...items.slice(0, i),
21 {
22 ...items[i],
23 ...update,
24 },
25 ...items.slice(i + 1),
26 ]);
28 return [
29 items,
30 {
31 append,
32 removeAt,
33 updateAt,
34 },
35 ];