feat: add config download functionality

This commit is contained in:
sokol
2026-02-18 21:46:23 +03:00
parent 325699d036
commit c4221c9bea
7 changed files with 122 additions and 107 deletions

View File

@@ -1,9 +1,9 @@
import { Env } from "../models/Env";
import { ConfigReader } from "../models/ConfigReader";
import { Config } from "../models/Config";
import { ConfigBuilder } from "../builders/ConfigBuilder";
export function FileChooser(props: { onSelected: (x: Config) => void }) {
export function FileChooser(props: { onSelected: (x: Config) => void, config?: Config }) {
async function handleFile(x: React.ChangeEvent<HTMLInputElement>) {
let file = x.target.files![0];
@@ -23,11 +23,42 @@ export function FileChooser(props: { onSelected: (x: Config) => void }) {
props.onSelected(cfg);
}
function handleDownload() {
if (!props.config) {
alert("No configuration loaded");
return;
}
const xmlContent = ConfigBuilder.buildFullXml(props.config);
const filename = ConfigBuilder.generateFilename();
// Create blob and download
const blob = new Blob([xmlContent], { type: "text/xml" });
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
}
return (
<>
<div className="col-2">
<button className="btn btn-primary" onClick={handleNew} >Create new</button>
</div>
<div className="col-auto">
<button
className="btn btn-success"
onClick={handleDownload}
disabled={!props.config}
title="Download full config template"
>
Download
</button>
</div>
<div className="col-1">or</div>
<div className="col">