Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
41 lines
1.1 KiB
Plaintext
41 lines
1.1 KiB
Plaintext
// src/use-multiselect-list-state.ts
|
|
import { useListState } from "@react-stately/list";
|
|
import { useMemo } from "react";
|
|
function useMultiSelectListState(props) {
|
|
const {
|
|
collection,
|
|
disabledKeys,
|
|
selectionManager,
|
|
selectionManager: { setSelectedKeys, selectedKeys, selectionMode }
|
|
} = useListState(props);
|
|
const missingKeys = useMemo(() => {
|
|
if (!props.isLoading && selectedKeys.size !== 0) {
|
|
return Array.from(selectedKeys).filter(Boolean).filter((key) => !collection.getItem(key));
|
|
}
|
|
return [];
|
|
}, [selectedKeys, collection]);
|
|
const selectedItems = selectedKeys.size !== 0 ? Array.from(selectedKeys).map((key) => {
|
|
return collection.getItem(key);
|
|
}).filter(Boolean) : null;
|
|
if (missingKeys.length) {
|
|
console.warn(
|
|
`Select: Keys "${missingKeys.join(
|
|
", "
|
|
)}" passed to "selectedKeys" are not present in the collection.`
|
|
);
|
|
}
|
|
return {
|
|
collection,
|
|
disabledKeys,
|
|
selectionManager,
|
|
selectionMode,
|
|
selectedKeys,
|
|
setSelectedKeys: setSelectedKeys.bind(selectionManager),
|
|
selectedItems
|
|
};
|
|
}
|
|
|
|
export {
|
|
useMultiSelectListState
|
|
};
|