Fix/library manga selection type error (#566)
* Prevent TypeError when deselecting items from a specific key This was noticed when changing the categories of a manga to a category without any selected mangas, in this case, when trying to deselect a manga after changing the categories, a TypeError was thrown which resulted in a white screen * Remove duplicates from the list of all selected ids * Update state via setter * Clear selection after disabling the library selection mode * Remove console log
This commit is contained in:
@@ -19,6 +19,7 @@ export type SelectableCollectionReturnType<Id extends number | string, Key exten
|
||||
handleSelectAll: (selectAll: boolean, itemIds: Id[], key?: Key) => void;
|
||||
setSelectionForKey: (key: Key, itemIds: Id[]) => void;
|
||||
getSelectionForKey: (key: Key) => Id[];
|
||||
clearSelection: () => void;
|
||||
};
|
||||
|
||||
export const useSelectableCollection = <Id extends number | string, Key extends string = 'default'>(
|
||||
@@ -35,7 +36,7 @@ export const useSelectableCollection = <Id extends number | string, Key extends
|
||||
): SelectableCollectionReturnType<Id, Key> => {
|
||||
const [keyToSelectedItemIds, setKeyToSelectedItemIds] = useState<Record<string, Id[]>>(initialState);
|
||||
|
||||
const selectedItemIds = Object.values(keyToSelectedItemIds).flat();
|
||||
const selectedItemIds = [...new Set(Object.values(keyToSelectedItemIds).flat())];
|
||||
const areAllItemsSelected = selectedItemIds.length === totalCount;
|
||||
const areNoItemsSelected = !selectedItemIds.length;
|
||||
|
||||
@@ -48,7 +49,7 @@ export const useSelectableCollection = <Id extends number | string, Key extends
|
||||
if (deselect) {
|
||||
setKeyToSelectedItemIds((prevState) => ({
|
||||
...prevState,
|
||||
[key]: prevState[key].filter((selectedItemId) => selectedItemId !== id),
|
||||
[key]: prevState[key]?.filter((selectedItemId) => selectedItemId !== id) ?? [],
|
||||
}));
|
||||
return;
|
||||
}
|
||||
@@ -79,11 +80,18 @@ export const useSelectableCollection = <Id extends number | string, Key extends
|
||||
};
|
||||
|
||||
const setSelectionForKey = (key: Key, itemIds: Id[]) => {
|
||||
keyToSelectedItemIds[key] = itemIds;
|
||||
setKeyToSelectedItemIds((prevState) => ({
|
||||
...prevState,
|
||||
[key]: [...itemIds],
|
||||
}));
|
||||
};
|
||||
|
||||
const getSelectionForKey = (key: Key) => keyToSelectedItemIds[key];
|
||||
|
||||
const clearSelection = () => {
|
||||
setKeyToSelectedItemIds({});
|
||||
};
|
||||
|
||||
return {
|
||||
selectedItemIds,
|
||||
keySelectedItemIds,
|
||||
@@ -95,5 +103,6 @@ export const useSelectableCollection = <Id extends number | string, Key extends
|
||||
areNoItemsForKeySelected,
|
||||
setSelectionForKey,
|
||||
getSelectionForKey,
|
||||
clearSelection,
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user