{
if (!isFileDrag(event)) return;
event.preventDefault();
setDragActive(canInstall);
}}
onDragOver={(event) => {
if (!isFileDrag(event)) return;
// Taken even without permission, so the browser doesn't open the folder instead.
event.preventDefault();
event.dataTransfer.dropEffect = canInstall ? "copy" : "none";
setDragActive(canInstall);
}}
onDragLeave={(event) => {
if (!isFileDrag(event)) return;
if (
event.relatedTarget instanceof Node &&
event.currentTarget.contains(event.relatedTarget)
) {
return;
}
setDragActive(false);
}}
onDrop={(event) => {
if (!isFileDrag(event)) return;
event.preventDefault();
setDragActive(false);
if (!canInstall) return;
void installer
.installFolders(droppedFolders(event.dataTransfer))
.then((installed) => installed && setAdding(false));
}}
>
{runs ? (
{
installer.clearProblems();
setAdding(true);
}}
/>
}
>
{installer.problems.length > 0 ? (
) : null}
) : (
)}
{runs ? (
) : null}