mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 04:20:12 +02:00
fix selection state on ItemGridList when single select mode
This commit is contained in:
@@ -56,6 +56,7 @@ export interface ItemCardProps {
|
|||||||
data: Album | AlbumArtist | Artist | Playlist | Song | undefined;
|
data: Album | AlbumArtist | Artist | Playlist | Song | undefined;
|
||||||
enableDrag?: boolean;
|
enableDrag?: boolean;
|
||||||
enableExpansion?: boolean;
|
enableExpansion?: boolean;
|
||||||
|
enableMultiSelect?: boolean;
|
||||||
enableNavigation?: boolean;
|
enableNavigation?: boolean;
|
||||||
imageAsLink?: boolean;
|
imageAsLink?: boolean;
|
||||||
internalState?: ItemListStateActions;
|
internalState?: ItemListStateActions;
|
||||||
@@ -71,6 +72,7 @@ export const ItemCard = ({
|
|||||||
data,
|
data,
|
||||||
enableDrag,
|
enableDrag,
|
||||||
enableExpansion,
|
enableExpansion,
|
||||||
|
enableMultiSelect,
|
||||||
enableNavigation = true,
|
enableNavigation = true,
|
||||||
imageAsLink,
|
imageAsLink,
|
||||||
internalState,
|
internalState,
|
||||||
@@ -92,6 +94,7 @@ export const ItemCard = ({
|
|||||||
data={data}
|
data={data}
|
||||||
enableDrag={enableDrag}
|
enableDrag={enableDrag}
|
||||||
enableExpansion={enableExpansion}
|
enableExpansion={enableExpansion}
|
||||||
|
enableMultiSelect={enableMultiSelect}
|
||||||
enableNavigation={enableNavigation}
|
enableNavigation={enableNavigation}
|
||||||
imageAsLink={imageAsLink}
|
imageAsLink={imageAsLink}
|
||||||
imageUrl={imageUrl}
|
imageUrl={imageUrl}
|
||||||
@@ -110,6 +113,7 @@ export const ItemCard = ({
|
|||||||
data={data}
|
data={data}
|
||||||
enableDrag={enableDrag}
|
enableDrag={enableDrag}
|
||||||
enableExpansion={enableExpansion}
|
enableExpansion={enableExpansion}
|
||||||
|
enableMultiSelect={enableMultiSelect}
|
||||||
enableNavigation={enableNavigation}
|
enableNavigation={enableNavigation}
|
||||||
imageAsLink={imageAsLink}
|
imageAsLink={imageAsLink}
|
||||||
imageUrl={imageUrl}
|
imageUrl={imageUrl}
|
||||||
@@ -159,6 +163,7 @@ const CompactItemCard = ({
|
|||||||
data,
|
data,
|
||||||
enableDrag,
|
enableDrag,
|
||||||
enableExpansion,
|
enableExpansion,
|
||||||
|
enableMultiSelect,
|
||||||
enableNavigation,
|
enableNavigation,
|
||||||
imageAsLink,
|
imageAsLink,
|
||||||
internalState,
|
internalState,
|
||||||
@@ -180,29 +185,29 @@ const CompactItemCard = ({
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const draggedItems = getDraggedItems(data, internalState);
|
const draggedItems = getDraggedItems(data, internalState, enableMultiSelect !== false);
|
||||||
return draggedItems.map((item) => item.id);
|
return draggedItems.map((item) => item.id);
|
||||||
}, [data, internalState]);
|
}, [data, internalState, enableMultiSelect]);
|
||||||
|
|
||||||
const getItem = useCallback(() => {
|
const getItem = useCallback(() => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const draggedItems = getDraggedItems(data, internalState);
|
const draggedItems = getDraggedItems(data, internalState, enableMultiSelect !== false);
|
||||||
return draggedItems;
|
return draggedItems;
|
||||||
}, [data, internalState]);
|
}, [data, internalState, enableMultiSelect]);
|
||||||
|
|
||||||
const onDragStart = useCallback(() => {
|
const onDragStart = useCallback(() => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const draggedItems = getDraggedItems(data, internalState);
|
const draggedItems = getDraggedItems(data, internalState, enableMultiSelect !== false);
|
||||||
if (internalState) {
|
if (internalState) {
|
||||||
internalState.setDragging(draggedItems);
|
internalState.setDragging(draggedItems);
|
||||||
}
|
}
|
||||||
}, [data, internalState]);
|
}, [data, internalState, enableMultiSelect]);
|
||||||
|
|
||||||
const onDrop = useCallback(() => {
|
const onDrop = useCallback(() => {
|
||||||
if (internalState) {
|
if (internalState) {
|
||||||
@@ -667,6 +672,7 @@ const PosterItemCard = ({
|
|||||||
data,
|
data,
|
||||||
enableDrag,
|
enableDrag,
|
||||||
enableExpansion,
|
enableExpansion,
|
||||||
|
enableMultiSelect,
|
||||||
enableNavigation,
|
enableNavigation,
|
||||||
imageAsLink,
|
imageAsLink,
|
||||||
internalState,
|
internalState,
|
||||||
@@ -688,29 +694,29 @@ const PosterItemCard = ({
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const draggedItems = getDraggedItems(data, internalState);
|
const draggedItems = getDraggedItems(data, internalState, enableMultiSelect !== false);
|
||||||
return draggedItems.map((item) => item.id);
|
return draggedItems.map((item) => item.id);
|
||||||
}, [data, internalState]);
|
}, [data, internalState, enableMultiSelect]);
|
||||||
|
|
||||||
const getItem = useCallback(() => {
|
const getItem = useCallback(() => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const draggedItems = getDraggedItems(data, internalState);
|
const draggedItems = getDraggedItems(data, internalState, enableMultiSelect !== false);
|
||||||
return draggedItems;
|
return draggedItems;
|
||||||
}, [data, internalState]);
|
}, [data, internalState, enableMultiSelect]);
|
||||||
|
|
||||||
const onDragStart = useCallback(() => {
|
const onDragStart = useCallback(() => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const draggedItems = getDraggedItems(data, internalState);
|
const draggedItems = getDraggedItems(data, internalState, enableMultiSelect !== false);
|
||||||
if (internalState) {
|
if (internalState) {
|
||||||
internalState.setDragging(draggedItems);
|
internalState.setDragging(draggedItems);
|
||||||
}
|
}
|
||||||
}, [data, internalState]);
|
}, [data, internalState, enableMultiSelect]);
|
||||||
|
|
||||||
const onDrop = useCallback(() => {
|
const onDrop = useCallback(() => {
|
||||||
if (internalState) {
|
if (internalState) {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { LibraryItem, QueueSong, Song } from '/@/shared/types/domain-types';
|
|||||||
import { Play, TableColumn } from '/@/shared/types/types';
|
import { Play, TableColumn } from '/@/shared/types/types';
|
||||||
|
|
||||||
interface UseDefaultItemListControlsArgs {
|
interface UseDefaultItemListControlsArgs {
|
||||||
|
enableMultiSelect?: boolean;
|
||||||
onColumnReordered?: (
|
onColumnReordered?: (
|
||||||
columnIdFrom: TableColumn,
|
columnIdFrom: TableColumn,
|
||||||
columnIdTo: TableColumn,
|
columnIdTo: TableColumn,
|
||||||
@@ -42,7 +43,7 @@ export const useDefaultItemListControls = (args?: UseDefaultItemListControlsArgs
|
|||||||
navigateRef.current = navigate;
|
navigateRef.current = navigate;
|
||||||
}, [navigate]);
|
}, [navigate]);
|
||||||
|
|
||||||
const { onColumnReordered, onColumnResized, overrides } = args || {};
|
const { enableMultiSelect = true, onColumnReordered, onColumnResized, overrides } = args || {};
|
||||||
|
|
||||||
const controls: ItemControls = useMemo(() => {
|
const controls: ItemControls = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
@@ -333,6 +334,13 @@ export const useDefaultItemListControls = (args?: UseDefaultItemListControlsArgs
|
|||||||
|
|
||||||
if (!rowId) return;
|
if (!rowId) return;
|
||||||
|
|
||||||
|
if (!enableMultiSelect) {
|
||||||
|
return ContextMenuController.call({
|
||||||
|
cmd: { items: [item] as any[], type: actualItemType as any },
|
||||||
|
event,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// If none selected, select this item
|
// If none selected, select this item
|
||||||
if (internalState.getSelected().length === 0) {
|
if (internalState.getSelected().length === 0) {
|
||||||
internalState.setSelected([item]);
|
internalState.setSelected([item]);
|
||||||
@@ -407,7 +415,15 @@ export const useDefaultItemListControls = (args?: UseDefaultItemListControlsArgs
|
|||||||
|
|
||||||
...overrides,
|
...overrides,
|
||||||
};
|
};
|
||||||
}, [overrides, onColumnReordered, onColumnResized, player, setFavorite, setRating]);
|
}, [
|
||||||
|
enableMultiSelect,
|
||||||
|
overrides,
|
||||||
|
onColumnReordered,
|
||||||
|
onColumnResized,
|
||||||
|
player,
|
||||||
|
setFavorite,
|
||||||
|
setRating,
|
||||||
|
]);
|
||||||
|
|
||||||
return controls;
|
return controls;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -511,7 +511,10 @@ const BaseItemGridList = ({
|
|||||||
});
|
});
|
||||||
}, [containerWidth, resolvedItemCount, throttledSetTableMeta, containerRef]);
|
}, [containerWidth, resolvedItemCount, throttledSetTableMeta, containerRef]);
|
||||||
|
|
||||||
const controls = useDefaultItemListControls({ overrides: overrideControls });
|
const controls = useDefaultItemListControls({
|
||||||
|
enableMultiSelect,
|
||||||
|
overrides: overrideControls,
|
||||||
|
});
|
||||||
|
|
||||||
const scrollToIndex = useCallback(
|
const scrollToIndex = useCallback(
|
||||||
(
|
(
|
||||||
@@ -875,6 +878,7 @@ const ListComponent = memo((props: ListChildComponentProps<GridItemProps>) => {
|
|||||||
data={item}
|
data={item}
|
||||||
enableDrag={enableDrag}
|
enableDrag={enableDrag}
|
||||||
enableExpansion={props.data.enableExpansion}
|
enableExpansion={props.data.enableExpansion}
|
||||||
|
enableMultiSelect={enableMultiSelect}
|
||||||
imageAsLink={!enableMultiSelect}
|
imageAsLink={!enableMultiSelect}
|
||||||
internalState={props.data.internalState}
|
internalState={props.data.internalState}
|
||||||
itemType={itemType}
|
itemType={itemType}
|
||||||
|
|||||||
Reference in New Issue
Block a user