;
acceptedFiles?: string;
}): React.ReactElement {
const confirm = useConfirm();
const alert = useAlert();
const snackbar = useSnackbar();
const loadingMessage = useLoadingMessage();
const accounts = useAccounts();
const doImport = async () => {
try {
const fileEl = document.createElement("input");
fileEl.type = "file";
if (p.acceptedFiles) fileEl.accept = p.acceptedFiles;
fileEl.click();
// Wait for a file to be chosen
await new Promise((res) => {
fileEl.addEventListener("change", () => {
res(null);
});
});
if (fileEl.files?.length === 0) return;
if (
!(await confirm(
<>
Do you really want to perform import from {p.label}?
{p.importWarning && (
{p.importWarning}
)}
>,
`Import from ${p.label}`,
"Perform import"
))
)
return;
loadingMessage.show("Performing import...");
await p.onImport!(fileEl.files![0]);
snackbar("The import was successuflly executed!");
accounts.reload();
} catch (e) {
console.error("Failed to perform import!", e);
alert(`Failed to perform import! ${e}`);
} finally {
loadingMessage.hide();
}
};
return (
{p.description}
{" "}
}
variant="outlined"
color="info"
fullWidth
>
Export
}
variant="outlined"
color="warning"
fullWidth
disabled={!p.onImport}
onClick={doImport}
>
Import
);
}