add configuration for row hover highlight

This commit is contained in:
jeffvli
2026-02-09 02:04:23 -08:00
parent 332fc5f9f9
commit 7bb54f9fa0
3 changed files with 32 additions and 2 deletions
@@ -164,6 +164,28 @@
opacity: 0.5; opacity: 0.5;
} }
.track-row.track-row-hover-highlight-enabled {
position: relative;
}
.track-row.track-row-hover-highlight-enabled .track-cell {
position: relative;
z-index: 2;
}
.track-row.track-row-hover-highlight-enabled:hover::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
pointer-events: none;
content: '';
background-color: var(--theme-colors-surface);
opacity: 0.7;
}
.skeleton-image { .skeleton-image {
width: 100%; width: 100%;
aspect-ratio: 1; aspect-ratio: 1;
@@ -55,6 +55,7 @@ interface RowData {
columnWidthPercents: number[]; columnWidthPercents: number[];
controls?: ItemControls; controls?: ItemControls;
data: unknown[]; data: unknown[];
enableRowHoverHighlight: boolean;
getItem?: (index: number) => unknown; getItem?: (index: number) => unknown;
internalState: ItemListStateActions; internalState: ItemListStateActions;
isMutatingFavorite: boolean; isMutatingFavorite: boolean;
@@ -67,6 +68,7 @@ interface TrackRowProps {
columns: ItemTableListColumnConfig[]; columns: ItemTableListColumnConfig[];
columnWidthPercents: number[]; columnWidthPercents: number[];
controls?: ItemControls; controls?: ItemControls;
enableRowHoverHighlight: boolean;
internalState: ItemListStateActions; internalState: ItemListStateActions;
isMutatingFavorite: boolean; isMutatingFavorite: boolean;
onFavoriteClick: (song: Song) => void; onFavoriteClick: (song: Song) => void;
@@ -83,6 +85,7 @@ const TrackRow = memo(
columns, columns,
columnWidthPercents, columnWidthPercents,
controls, controls,
enableRowHoverHighlight,
internalState, internalState,
isMutatingFavorite, isMutatingFavorite,
onFavoriteClick, onFavoriteClick,
@@ -186,6 +189,7 @@ const TrackRow = memo(
<div <div
className={clsx(styles.trackRow, { className={clsx(styles.trackRow, {
[styles.trackRowDragging]: isDragging, [styles.trackRowDragging]: isDragging,
[styles.trackRowHoverHighlightEnabled]: enableRowHoverHighlight,
[styles.trackRowSelected]: isSelected, [styles.trackRowSelected]: isSelected,
[styles.trackRowSizeCompact]: size === 'compact', [styles.trackRowSizeCompact]: size === 'compact',
[styles.trackRowSizeDefault]: size === 'default', [styles.trackRowSizeDefault]: size === 'default',
@@ -261,6 +265,7 @@ const RowContent = memo(
columnWidthPercents, columnWidthPercents,
controls, controls,
data, data,
enableRowHoverHighlight,
getItem, getItem,
index, index,
internalState, internalState,
@@ -387,6 +392,7 @@ const RowContent = memo(
columns={trackColumns} columns={trackColumns}
columnWidthPercents={columnWidthPercents} columnWidthPercents={columnWidthPercents}
controls={controls} controls={controls}
enableRowHoverHighlight={enableRowHoverHighlight}
internalState={internalState} internalState={internalState}
isMutatingFavorite={isMutatingFavorite} isMutatingFavorite={isMutatingFavorite}
key={song.id} key={song.id}
@@ -405,6 +411,7 @@ const RowContent = memo(
prev.index === next.index && prev.index === next.index &&
prev.data === next.data && prev.data === next.data &&
prev.columnWidthPercents === next.columnWidthPercents && prev.columnWidthPercents === next.columnWidthPercents &&
prev.enableRowHoverHighlight === next.enableRowHoverHighlight &&
prev.getItem === next.getItem && prev.getItem === next.getItem &&
prev.internalState === next.internalState && prev.internalState === next.internalState &&
prev.isMutatingFavorite === next.isMutatingFavorite && prev.isMutatingFavorite === next.isMutatingFavorite &&
@@ -500,6 +507,7 @@ export const ItemDetailList = ({
}); });
}, [tableConfig?.columns]); }, [tableConfig?.columns]);
const trackTableSize = tableConfig?.size ?? 'default'; const trackTableSize = tableConfig?.size ?? 'default';
const enableRowHoverHighlight = tableConfig?.enableRowHoverHighlight ?? true;
const columnWidthPercents = useMemo(() => { const columnWidthPercents = useMemo(() => {
const total = trackColumns.reduce((sum, c) => sum + c.width, 0); const total = trackColumns.reduce((sum, c) => sum + c.width, 0);
@@ -538,6 +546,7 @@ export const ItemDetailList = ({
columnWidthPercents, columnWidthPercents,
controls, controls,
data: dataSource, data: dataSource,
enableRowHoverHighlight,
getItem, getItem,
internalState, internalState,
isMutatingFavorite, isMutatingFavorite,
@@ -550,6 +559,7 @@ export const ItemDetailList = ({
columnWidthPercents, columnWidthPercents,
controls, controls,
dataSource, dataSource,
enableRowHoverHighlight,
getItem, getItem,
internalState, internalState,
isMutatingFavorite, isMutatingFavorite,
@@ -102,8 +102,6 @@ export const AlbumListHeaderFilters = ({ toggleGenreTarget }: { toggleGenreTarge
optionsConfig: { optionsConfig: {
autoFitColumns: { hidden: true }, autoFitColumns: { hidden: true },
enableHeader: { hidden: true }, enableHeader: { hidden: true },
itemsPerPage: { hidden: true },
pagination: { hidden: true },
}, },
tableColumnsData: SONG_TABLE_COLUMNS, tableColumnsData: SONG_TABLE_COLUMNS,
}} }}