feat: project detail UX improvements
- Tag picker: replace raw text input with EntityPicker modal showing registry tags (auto-detected by image hostname) and local images. Fix URL encoding bug where encodeURIComponent encoded slashes in image paths, causing 502 on registry tag API. - Stage editing: inline edit form for name, tag pattern, max instances, CPU/memory limits, auto-deploy and proxy toggles. - Stage delete: use ConfirmDialog modal instead of window.confirm(). Immediately remove stage from local state after deletion. - Project-level env: add/edit/delete project env vars (stored in project.env JSON field). Move stage selector inline with Stage Overrides heading so it's clear project env is independent. - Access list UX: rename "None (public)" to "Global default", clarify help text. - Add missing i18n keys for all new UI (en + ru).
This commit is contained in:
@@ -33,7 +33,14 @@
|
||||
"loadFailed": "Failed to load dashboard",
|
||||
"staleContainers": "Stale Containers",
|
||||
"unusedImagesWarning": "Unused Docker images are taking up disk space",
|
||||
"unusedImages": "unused images"
|
||||
"unusedImages": "unused images",
|
||||
"staticSites": "Static Sites",
|
||||
"totalSites": "Total Sites",
|
||||
"deployedSites": "deployed",
|
||||
"failedSites": "failed",
|
||||
"noSites": "No static sites yet.",
|
||||
"addFirstSite": "Deploy your first site",
|
||||
"viewAllSites": "View all sites"
|
||||
},
|
||||
"projects": {
|
||||
"title": "Projects",
|
||||
@@ -80,6 +87,11 @@
|
||||
"loadingTags": "Loading tags...",
|
||||
"chooseTag": "Choose a tag...",
|
||||
"enterTag": "Enter image tag (e.g., dev-abc123)",
|
||||
"registryTag": "Registry",
|
||||
"localTag": "Local",
|
||||
"alsoLocal": "Also available locally",
|
||||
"searchTags": "Search tags...",
|
||||
"deployTag": "Tag",
|
||||
"deploy": "Deploy",
|
||||
"deploying": "Deploying...",
|
||||
"recentDeploys": "Recent Deploys",
|
||||
@@ -107,7 +119,7 @@
|
||||
"autoDeployLabel": "Auto Deploy",
|
||||
"enableProxy": "Enable Proxy",
|
||||
"accessListId": "NPM Access List ID",
|
||||
"accessListIdHelp": "Per-project override. 0 = use global default from NPM settings.",
|
||||
"accessListIdHelp": "Override the global access list for this project. Clear to inherit from NPM settings.",
|
||||
"localImages": "Local Docker Images",
|
||||
"imageTag": "Tag",
|
||||
"imageId": "Image ID",
|
||||
@@ -124,6 +136,8 @@
|
||||
"deleteStage": "Delete stage",
|
||||
"deleteStageConfirm": "Delete stage \"{name}\"?",
|
||||
"stageCreated": "Stage \"{name}\" created",
|
||||
"stageUpdated": "Stage updated",
|
||||
"stageUpdateFailed": "Failed to update stage",
|
||||
"stageDeleted": "Stage \"{name}\" deleted",
|
||||
"projectUpdated": "Project updated",
|
||||
"updateFailed": "Failed to update project",
|
||||
@@ -135,6 +149,7 @@
|
||||
"description": "Manage per-stage environment variable overrides. Stage-level values override project-level defaults.",
|
||||
"stage": "Stage",
|
||||
"projectDefaults": "Project-Level Defaults",
|
||||
"noProjectEnv": "No project-level environment variables defined yet.",
|
||||
"stageOverrides": "Stage Overrides",
|
||||
"key": "Key",
|
||||
"value": "Value",
|
||||
@@ -160,7 +175,9 @@
|
||||
"updateFailed": "Failed to update env var",
|
||||
"deleteFailed": "Failed to delete env var",
|
||||
"loadEnvFailed": "Failed to load env vars",
|
||||
"leaveEmptyToKeep": "Leave empty to keep current"
|
||||
"leaveEmptyToKeep": "Leave empty to keep current",
|
||||
"deleteTitle": "Delete Environment Variable",
|
||||
"deleteMessage": "Are you sure you want to delete this environment variable? This action cannot be undone."
|
||||
},
|
||||
"volumeEditor": {
|
||||
"title": "Volume Mounts",
|
||||
@@ -405,7 +422,7 @@
|
||||
"remoteModeWarning": "Requires Server IP in General settings. Ports are auto-mapped to random host ports.",
|
||||
"accessList": "Default Access List",
|
||||
"accessListHelp": "NPM access list for HTTP authentication on proxy hosts. Can be overridden per project.",
|
||||
"noAccessList": "None (public)",
|
||||
"noAccessList": "Global default",
|
||||
"selectAccessList": "Select an access list",
|
||||
"noAccessLists": "No access lists found in NPM",
|
||||
"accessListLoadFailed": "Failed to load access lists"
|
||||
@@ -560,6 +577,8 @@
|
||||
"openSite": "Open Site",
|
||||
"confirmDelete": "Delete Site",
|
||||
"confirmDeleteMsg": "This will permanently delete the site and remove its container",
|
||||
"confirmDeleteSecret": "Delete Secret",
|
||||
"confirmDeleteSecretMsg": "Are you sure you want to delete secret",
|
||||
"siteInfo": "Site Information",
|
||||
"folder": "Folder",
|
||||
"syncTrigger": "Sync Trigger",
|
||||
@@ -609,13 +628,26 @@
|
||||
"provider": "Git Provider",
|
||||
"detectedProvider": "Auto-detected",
|
||||
"browseRepos": "Browse repositories",
|
||||
"selectRepo": "Select a repository"
|
||||
"selectRepo": "Select a repository",
|
||||
"storage": "Persistent Storage",
|
||||
"enableStorage": "Enable persistent storage",
|
||||
"storageHelp": "Mounts a Docker volume at /app/data for your Deno backend to read and write files that persist across deployments.",
|
||||
"storageLimitMB": "Storage Limit (MB)",
|
||||
"storageLimitHelp": "Maximum storage size in megabytes. 0 = unlimited.",
|
||||
"storageVolume": "Volume",
|
||||
"dataPath": "Data Path",
|
||||
"storageMountPath": "Mount Path",
|
||||
"storageLimit": "Limit",
|
||||
"storageUsed": "Used",
|
||||
"storageOfLimit": "of limit used",
|
||||
"unlimited": "Unlimited"
|
||||
},
|
||||
"common": {
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"change": "Change",
|
||||
"save": "Save",
|
||||
"retry": "Retry",
|
||||
"loading": "Loading...",
|
||||
|
||||
Reference in New Issue
Block a user