50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { moveFile } from '~/lib/api/warrens';
|
|
import type { DirectoryEntry } from '~/shared/types';
|
|
|
|
export function getParentPath(path: string): string {
|
|
const sliceEnd = Math.max(1, path.lastIndexOf('/'));
|
|
return path.slice(0, sliceEnd);
|
|
}
|
|
|
|
export function onDirectoryEntryDrop(
|
|
entry: DirectoryEntry,
|
|
isParent: boolean = false
|
|
): (e: DragEvent) => void {
|
|
return async (e: DragEvent) => {
|
|
const warrenStore = useWarrenStore();
|
|
|
|
if (e.dataTransfer == null || warrenStore.current == null) {
|
|
return;
|
|
}
|
|
|
|
if (entry.fileType !== 'directory') {
|
|
return;
|
|
}
|
|
|
|
const fileName = e.dataTransfer.getData('application/warren');
|
|
|
|
if (entry.name === fileName) {
|
|
return;
|
|
}
|
|
|
|
let targetPath: string;
|
|
|
|
if (isParent) {
|
|
targetPath = getParentPath(warrenStore.current.path);
|
|
} else {
|
|
targetPath = warrenStore.current.path;
|
|
if (!targetPath.endsWith('/')) {
|
|
targetPath += '/';
|
|
}
|
|
targetPath += entry.name;
|
|
}
|
|
|
|
await moveFile(
|
|
warrenStore.current.warrenId,
|
|
warrenStore.current.path,
|
|
fileName,
|
|
targetPath
|
|
);
|
|
};
|
|
}
|