summaryrefslogtreecommitdiff
path: root/extension/react-app/src/hooks/useArrayState.ts
blob: d379e720746f217b0b4d77a6af02541c29a2c144 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { useState } from "react";

function useArrayState<T>(initialValue: T[]) {
  const [value, setValue] = useState(initialValue);

  function add(item: any) {
    setValue((prev) => [...prev, item]);
  }

  function remove(index: number) {
    setValue((prev) => prev.filter((_, i) => i !== index));
  }

  function edit(editFn: (prev: T[]) => T[]) {
    setValue((prev) => editFn(prev));
  }

  function replace(atIndex: number, withItem: T) {
    setValue((prev) => {
      let updated = [...prev];
      updated[atIndex] = withItem;
      return updated;
    });
  }

  return { value, add, remove, edit, replace };
}

export default useArrayState;