summaryrefslogtreecommitdiff
path: root/extension/react-app/src/hooks/useArrayState.ts
diff options
context:
space:
mode:
Diffstat (limited to 'extension/react-app/src/hooks/useArrayState.ts')
-rw-r--r--extension/react-app/src/hooks/useArrayState.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/extension/react-app/src/hooks/useArrayState.ts b/extension/react-app/src/hooks/useArrayState.ts
new file mode 100644
index 00000000..d379e720
--- /dev/null
+++ b/extension/react-app/src/hooks/useArrayState.ts
@@ -0,0 +1,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;