mirror of https://github.com/portainer/portainer
21 lines
576 B
TypeScript
21 lines
576 B
TypeScript
|
import { useState } from 'react';
|
||
|
|
||
|
export function useListSelection<T>(
|
||
|
initialValue: Array<T> = [],
|
||
|
compareFn: (a: T, b: T) => boolean = (a, b) => a === b
|
||
|
) {
|
||
|
const [selectedItems, setSelectedItems] = useState<Array<T>>(initialValue);
|
||
|
|
||
|
function handleChangeSelect(currentItem: T, selected: boolean) {
|
||
|
if (selected) {
|
||
|
setSelectedItems((items) => [...items, currentItem]);
|
||
|
} else {
|
||
|
setSelectedItems((items) =>
|
||
|
items.filter((item) => !compareFn(item, currentItem))
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return [selectedItems, handleChangeSelect] as const;
|
||
|
}
|