perf(frontend): instant checkbox feedback via local optimistic selection in virtualized list
This commit is contained in:
parent
517af140cf
commit
54b22d5cc5
@ -61,12 +61,18 @@ const SongItem = memo<{
|
||||
}>(({ song, isSelected, isHighlighted, onSelect, onToggleSelection, showCheckbox, onPlaySong, showDropIndicatorTop, onDragStart, onRowDragOver, onRowDrop, onRowDragStartCapture }) => {
|
||||
// Memoize the formatted duration to prevent recalculation
|
||||
const formattedDuration = useMemo(() => formatDuration(song.totalTime || ''), [song.totalTime]);
|
||||
// Local optimistic selection for instant visual feedback
|
||||
const [localChecked, setLocalChecked] = useState<boolean>(isSelected);
|
||||
useEffect(() => {
|
||||
setLocalChecked(isSelected);
|
||||
}, [isSelected]);
|
||||
const handleClick = useCallback(() => {
|
||||
onSelect(song);
|
||||
}, [onSelect, song]);
|
||||
|
||||
const handleCheckboxClick = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
e.stopPropagation();
|
||||
setLocalChecked(e.target.checked);
|
||||
onToggleSelection(song.id);
|
||||
}, [onToggleSelection, song.id]);
|
||||
|
||||
@ -103,7 +109,7 @@ const SongItem = memo<{
|
||||
)}
|
||||
{showCheckbox && (
|
||||
<Checkbox
|
||||
isChecked={isSelected}
|
||||
isChecked={localChecked}
|
||||
onChange={handleCheckboxClick}
|
||||
mr={3}
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user