mirror of
https://github.com/DrizzleTime/Foxel.git
synced 2026-07-14 08:52:05 +08:00
36 lines
935 B
TypeScript
36 lines
935 B
TypeScript
import { useState, useCallback } from 'react';
|
|
import type { VfsEntry } from '../../../api/client';
|
|
|
|
export function useFileSelection() {
|
|
const [selectedEntries, setSelectedEntries] = useState<string[]>([]);
|
|
|
|
const handleSelect = useCallback((entry: VfsEntry, additive: boolean = false) => {
|
|
const name = entry.name;
|
|
if (additive) {
|
|
// Toggle selection
|
|
setSelectedEntries(prev => {
|
|
const exists = prev.includes(name);
|
|
return exists ? prev.filter(n => n !== name) : [...prev, name];
|
|
});
|
|
} else {
|
|
// Replace selection
|
|
setSelectedEntries([name]);
|
|
}
|
|
}, []);
|
|
|
|
const handleSelectRange = useCallback((names: string[]) => {
|
|
setSelectedEntries(names);
|
|
}, []);
|
|
|
|
const clearSelection = useCallback(() => {
|
|
setSelectedEntries([]);
|
|
}, []);
|
|
|
|
return {
|
|
selectedEntries,
|
|
setSelectedEntries,
|
|
handleSelect,
|
|
handleSelectRange,
|
|
clearSelection,
|
|
};
|
|
} |