Compare commits

..

2 Commits

Author SHA1 Message Date
sokol
7e1f7dd24c feat: prevent downloading empty config 2026-02-20 10:19:27 +03:00
sokol
1b3f3b3110 feat: disable Download button when no config is loaded 2026-02-20 10:16:28 +03:00
3 changed files with 33 additions and 4 deletions

View File

@@ -60,6 +60,8 @@ export function FileChooser({ onSelected, config }: FileChooserProps) {
URL.revokeObjectURL(url); URL.revokeObjectURL(url);
} }
const hasConfig = !!config && !config.isEmpty();
return ( return (
<div className="bg-white rounded-xl shadow-md p-4 border border-slate-200"> <div className="bg-white rounded-xl shadow-md p-4 border border-slate-200">
<div className="flex items-center gap-4 flex-wrap"> <div className="flex items-center gap-4 flex-wrap">
@@ -89,8 +91,8 @@ export function FileChooser({ onSelected, config }: FileChooserProps) {
onClick={handleDownload} onClick={handleDownload}
icon={Download} icon={Download}
size="sm" size="sm"
disabled={!config} disabled={!hasConfig}
title="Download full config template" title={hasConfig ? 'Download full config template' : 'Load or create a config first'}
> >
Download Download
</Button> </Button>

View File

@@ -171,4 +171,22 @@ export class Config {
cloned.template = this.template; cloned.template = this.template;
return cloned; return cloned;
} }
/**
* Checks if config is empty (no environments or only DEFAULT with no params and empty template)
*/
public isEmpty(): boolean {
if (this.envs.length === 0) {
return true;
}
// Check if only DEFAULT exists with no params
if (this.envs.length === 1 && this.envs[0].name === 'DEFAULT') {
const hasParams = this.envs[0].params.length > 0;
const hasTemplate = this.template.content.trim() && this.template.content !== '{}';
return !hasParams && !hasTemplate;
}
return false;
}
} }

View File

@@ -1,4 +1,13 @@
{ {
"status": "passed", "status": "failed",
"failedTests": [] "failedTests": [
"2a84b67ca6571daf27b7-7e9801b0b833c50af541",
"2a84b67ca6571daf27b7-17ce5649ea02e0d09692",
"2a84b67ca6571daf27b7-46f1d47e52a9de8bb54e",
"2a84b67ca6571daf27b7-5ac3b387f0f8104531f1",
"2a84b67ca6571daf27b7-61b44892e9e54397b980",
"2a84b67ca6571daf27b7-e38411b679b6dd8a5f2c",
"2a84b67ca6571daf27b7-ca92b197b6f7ecc9f092",
"2a84b67ca6571daf27b7-0c2a356d8582be760d5f"
]
} }