36 lines
779 B
JavaScript
36 lines
779 B
JavaScript
import { useCallback, useEffect, useState } from 'react';
|
|
|
|
export const useSelection = (items = []) => {
|
|
const [selected, setSelected] = useState([]);
|
|
|
|
useEffect(() => {
|
|
setSelected([]);
|
|
}, [items]);
|
|
|
|
const handleSelectAll = useCallback(() => {
|
|
setSelected([...items]);
|
|
}, [items]);
|
|
|
|
const handleSelectOne = useCallback((item) => {
|
|
setSelected((prevState) => [...prevState, item]);
|
|
}, []);
|
|
|
|
const handleDeselectAll = useCallback(() => {
|
|
setSelected([]);
|
|
}, []);
|
|
|
|
const handleDeselectOne = useCallback((item) => {
|
|
setSelected((prevState) => {
|
|
return prevState.filter((_item) => _item !== item);
|
|
});
|
|
}, []);
|
|
|
|
return {
|
|
handleDeselectAll,
|
|
handleDeselectOne,
|
|
handleSelectAll,
|
|
handleSelectOne,
|
|
selected
|
|
};
|
|
};
|