1
Fork 0
mirror of https://github.com/pds-nest/nest.git synced 2024-11-30 00:14:19 +00:00
pds-2021-g2-nest/nest_frontend/hooks/useArrayState.js

47 lines
1.3 KiB
JavaScript
Raw Normal View History

import { useCallback, useState } from "react"
2021-04-29 14:58:31 +00:00
/**
2021-05-22 02:35:37 +00:00
* An hook similar to {@link useState} which stores an array instead of a single value.
2021-04-29 14:58:31 +00:00
*
* @param def - The starting value of the hook.
* @returns {{spliceValue, removeValue, setValue, appendValue, value}}
*/
export default function useArrayState(def) {
const [value, setValue] = useState(def ?? [])
const appendValue = useCallback(
newSingle => {
2021-05-22 02:35:37 +00:00
console.debug("Adding ", newSingle, " to ArrayState")
setValue(
2021-05-11 14:37:15 +00:00
oldArray => [...oldArray, newSingle],
)
},
2021-05-11 14:37:15 +00:00
[],
)
2021-04-29 03:03:34 +00:00
const spliceValue = useCallback(
position => {
2021-05-22 02:35:37 +00:00
console.debug("Splicing ", position, " from ArrayState")
setValue(
oldArray => {
oldArray.splice(position, 1)
2021-05-11 21:44:14 +00:00
return [...oldArray]
2021-05-11 14:37:15 +00:00
},
)
2021-04-29 03:03:34 +00:00
},
2021-05-11 14:37:15 +00:00
[],
2021-04-29 03:03:34 +00:00
)
const removeValue = useCallback(
remValue => {
2021-04-29 14:17:22 +00:00
console.debug("Removing ", remValue, " from ArrayState")
2021-04-29 03:03:34 +00:00
setValue(
2021-05-11 14:37:15 +00:00
oldArray => oldArray.filter(item => JSON.stringify(item) !== JSON.stringify(remValue)),
2021-04-29 03:03:34 +00:00
)
},
2021-05-11 14:37:15 +00:00
[],
)
2021-05-11 14:37:15 +00:00
return { value, setValue, appendValue, spliceValue, removeValue }
}