diff --git a/apps/ui/src/lib/locales/en.json b/apps/ui/src/lib/locales/en.json
index cab9ecc80..809d38851 100644
--- a/apps/ui/src/lib/locales/en.json
+++ b/apps/ui/src/lib/locales/en.json
@@ -88,7 +88,7 @@
"removing": "Removing...",
"remove_domain": "Remove domain",
"public_port_range": "Public Port Range",
- "public_port_range_explainer": "Ports used to expose databases/services/internal services. Add them to your firewall (if applicable).
You can specify a range of ports, eg: 9000-9100",
+ "public_port_range_explainer": "Ports used to expose databases/services/internal services. Add them to your firewall (if applicable).
You can specify a range of ports, eg: 9000-9100",
"no_actions_available": "No actions available",
"admin_api_key": "Admin API key"
},
@@ -144,8 +144,8 @@
},
"preview": {
"need_during_buildtime": "Need during buildtime?",
- "setup_secret_app_first": "You can add secrets to PR/MR deployments. Please add secrets to the application first. Useful for creating staging environments.",
- "values_overwriting_app_secrets": "These values overwrite application secrets in PR/MR deployments. Useful for creating staging environments.",
+ "setup_secret_app_first": "You can add secrets to PR/MR deployments. Please add secrets to the application first. Useful for creating staging environments.",
+ "values_overwriting_app_secrets": "These values overwrite application secrets in PR/MR deployments. Useful for creating staging environments.",
"redeploy": "Redeploy",
"no_previews_available": "No previews available"
},
@@ -167,15 +167,15 @@
"permission_denied_stop_application": "You do not have permission to stop the application.",
"rebuild_application": "Rebuild application",
"permission_denied_rebuild_application": "You do not have permission to rebuild application.",
- "build_and_start_application": "Build and start application",
- "permission_denied_build_and_start_application": "You do not have permission to Build and start application.",
+ "build_and_start_application": "Deploy",
+ "permission_denied_build_and_start_application": "You do not have permission to deploy application.",
"configurations": "Configurations",
"secret": "Secrets",
"persistent_storage": "Persistent Storage",
"previews": "Previews",
"logs": "Application Logs",
"build_logs": "Build Logs",
- "delete_application": "Delete application",
+ "delete_application": "Delete",
"permission_denied_delete_application": "You do not have permission to delete this application",
"domain_already_in_use": "Domain {{domain}} is already used.",
"dns_not_set_error": "DNS not set correctly or propogated for {{domain}}.
Please check your DNS settings.",
@@ -194,14 +194,14 @@
"application": "Application",
"url_fqdn": "URL (FQDN)",
"domain_fqdn": "Domain (FQDN)",
- "https_explainer": "If you specify https, the application will be accessible only over https. SSL certificate will be generated for you. If you specify www, the application will be redirected (302) from non-www and vice versa.
To modify the domain, you must first stop the application.
You must set your DNS to point to the server IP in advance.",
+ "https_explainer": "If you specify https, the application will be accessible only over https. SSL certificate will be generated for you. If you specify www, the application will be redirected (302) from non-www and vice versa.
To modify the domain, you must first stop the application.
You must set your DNS to point to the server IP in advance.",
"ssl_www_and_non_www": "Generate SSL for www and non-www?",
- "ssl_explainer": "It will generate certificates for both www and non-www. You need to have both DNS entries set in advance.
Useful if you expect to have visitors on both.",
+ "ssl_explainer": "It will generate certificates for both www and non-www. You need to have both DNS entries set in advance.
Useful if you expect to have visitors on both.",
"install_command": "Install Command",
"build_command": "Build Command",
"start_command": "Start Command",
- "directory_to_use_explainer": "Directory to use as the base for all commands. Could be useful with monorepos.",
- "publish_directory_explainer": "Directory containing all the assets for deployment. For example: dist,_site or public.",
+ "directory_to_use_explainer": "Directory to use as the base for all commands. Could be useful with monorepos.",
+ "publish_directory_explainer": "Directory containing all the assets for deployment. For example: dist,_site or public.",
"features": "Features",
"enable_automatic_deployment": "Enable Automatic Deployment",
"enable_auto_deploy_webhooks": "Enable automatic deployment through webhooks.",
@@ -227,17 +227,17 @@
"select_database_type": "Select a Database type",
"select_database_version": "Select a Database version",
"confirm_stop": "Are you sure you would like to stop {{name}}?",
- "stop_database": "Stop database",
+ "stop_database": "Stop",
"permission_denied_stop_database": "You do not have permission to stop the database.",
- "start_database": "Start database",
+ "start_database": "Start",
"permission_denied_start_database": "You do not have permission to start the database.",
- "delete_database": "Delete Database",
+ "delete_database": "Delete",
"permission_denied_delete_database": "You do not have permission to delete a Database",
"no_databases_found": "No databases found",
- "logs": "Database Logs"
+ "logs": "Logs"
},
"destination": {
- "delete_destination": "Delete Destination",
+ "delete_destination": "Delete",
"permission_denied_delete_destination": "You do not have permission to delete this destination",
"add_to_coolify": "Add to Coolify",
"coolify_proxy_stopped": "Coolify Proxy stopped!",
@@ -250,7 +250,7 @@
"no_destination_found": "No destination found",
"new_error_network_already_exists": "Network {{network}} already configured for another team!",
"new": {
- "saving_and_configuring_proxy": "Saving and configuring proxy...",
+ "saving_and_configuring_proxy": "Saving...",
"install_proxy": "This will install a proxy on the destination to allow you to access your applications and services without any manual configuration (recommended for Docker).
Databases will have their own proxy.",
"add_new_destination": "Add New Destination",
"predefined_destinations": "Predefined destinations"
@@ -267,7 +267,7 @@
"official_providers": "Official providers"
},
"no_git_sources_found": "No git sources found",
- "delete_git_source": "Delete Git Source",
+ "delete_git_source": "Delete",
"permission_denied": "You do not have permission to delete a Git Source",
"create_new_app": "Create new {{name}} App",
"change_app_settings": "Change {{name}} App Settings",
@@ -293,20 +293,20 @@
"generate_www_non_www_ssl": "It will generate certificates for both www and non-www. You need to have both DNS entries set in advance.
Service needs to be restarted."
},
"service": {
- "stop_service": "Stop Service",
+ "stop_service": "Stop",
"permission_denied_stop_service": "You do not have permission to stop the service.",
- "start_service": "Start Service",
+ "start_service": "Start",
"permission_denied_start_service": "You do not have permission to start the service.",
- "delete_service": "Delete Service",
+ "delete_service": "Delete",
"permission_denied_delete_service": "You do not have permission to delete a service.",
"no_service": "No services found",
- "logs": "Service Logs"
+ "logs": "Logs"
},
"setting": {
"change_language": "Change Language",
"permission_denied": "You do not have permission to do this. \\nAsk an admin to modify your permissions.",
"domain_removed": "Domain removed",
- "ssl_explainer": "If you specify https, Coolify will be accessible only over https. SSL certificate will be generated for you. If you specify www, Coolify will be redirected (302) from non-www and vice versa.
WARNING: If you change an already set domain, it will brake webhooks and other integrations! You need to manually update them.",
+ "ssl_explainer": "If you specify https, Coolify will be accessible only over https. SSL certificate will be generated for you. If you specify www, Coolify will be redirected (302) from non-www and vice versa.
WARNING: If you change an already set domain, it will brake webhooks and other integrations! You need to manually update them.",
"must_remove_domain_before_changing": "Must remove the domain before you can change this setting.",
"registration_allowed": "Registration allowed?",
"registration_allowed_explainer": "Allow further registrations to the application. It's turned off after the first registration.",
@@ -314,7 +314,7 @@
"credential_stat_explainer": "Credentials for stats page.",
"auto_update_enabled": "Auto update enabled?",
"auto_update_enabled_explainer": "Enable automatic updates for Coolify. It will be done automatically behind the scenes, if there is no build process running.",
- "generate_www_non_www_ssl": "It will generate certificates for both www and non-www. You need to have both DNS entries set in advance.",
+ "generate_www_non_www_ssl": "It will generate certificates for both www and non-www. You need to have both DNS entries set in advance.",
"is_dns_check_enabled": "DNS check enabled?",
"is_dns_check_enabled_explainer": "You can disable DNS check before creating SSL certificates.
Turning it off is useful when Coolify is behind a reverse proxy or tunnel."
},
diff --git a/apps/ui/src/lib/locales/fr.json b/apps/ui/src/lib/locales/fr.json
index 242ac6fce..418f72526 100644
--- a/apps/ui/src/lib/locales/fr.json
+++ b/apps/ui/src/lib/locales/fr.json
@@ -50,7 +50,7 @@
"delete_application": "Supprimer l'application",
"deployment_queued": "Déploiement en file d'attente.",
"destination": "Destination",
- "directory_to_use_explainer": "Répertoire à utiliser comme base pour toutes les commandes. Pourrait être utile avec monorepos.",
+ "directory_to_use_explainer": "Répertoire à utiliser comme base pour toutes les commandes. Pourrait être utile avec monorepos.",
"dns_not_set_error": "DNS non défini ou propagé pour {{domain}}.
Veuillez vérifier vos paramètres DNS.",
"dns_not_set_partial_error": "DNS non défini",
"domain_already_in_use": "Le domaine {{domain}} est déjà utilisé.",
@@ -65,7 +65,7 @@
"features": "Caractéristiques",
"git_repository": "Dépôt Git",
"git_source": "Source Git",
- "https_explainer": "Si vous spécifiez https, l'application sera accessible uniquement via https. \nUn certificat SSL sera généré pour vous. Si vous spécifiez www, l'application sera redirigée (302) à partir de non-www et vice versa \n.
Pour modifier le domaine, vous devez d'abord arrêter l'application.
Vous devez configurer, en avance, votre DNS pour pointer vers l'IP du serveur.",
+ "https_explainer": "Si vous spécifiez https, l'application sera accessible uniquement via https. \nUn certificat SSL sera généré pour vous. Si vous spécifiez www, l'application sera redirigée (302) à partir de non-www et vice versa \n.
Pour modifier le domaine, vous devez d'abord arrêter l'application.
Vous devez configurer, en avance, votre DNS pour pointer vers l'IP du serveur.",
"install_command": "Commande d'installation",
"logs": "Journaux des applications",
"no_applications_found": "Aucune application trouvée",
@@ -78,11 +78,11 @@
"need_during_buildtime": "Besoin pendant la build ?",
"no_previews_available": "Aucun aperçu disponible",
"redeploy": "Redéployer",
- "setup_secret_app_first": "Vous pouvez ajouter des secrets aux déploiements PR/MR. \nVeuillez d'abord ajouter des secrets à l'application. \n Utile pour créer des environnements de mise en scène.",
- "values_overwriting_app_secrets": "Ces valeurs remplacent les secrets d'application dans les déploiements PR/MR. \nUtile pour créer des environnements de mise en scène."
+ "setup_secret_app_first": "Vous pouvez ajouter des secrets aux déploiements PR/MR. \nVeuillez d'abord ajouter des secrets à l'application. \n Utile pour créer des environnements de mise en scène.",
+ "values_overwriting_app_secrets": "Ces valeurs remplacent les secrets d'application dans les déploiements PR/MR. \nUtile pour créer des environnements de mise en scène."
},
"previews": "Aperçus",
- "publish_directory_explainer": "Répertoire contenant tous les actifs à déployer. \n Par exemple : dist,_site ou public.",
+ "publish_directory_explainer": "Répertoire contenant tous les actifs à déployer. \n Par exemple : dist,_site ou public.",
"rebuild_application": "Re-build l'application",
"secret": "secrets",
"secrets": {
@@ -91,7 +91,7 @@
"use_isbuildsecret": "Utiliser isBuildSecret"
},
"settings_saved": "Paramètres sauvegardés.",
- "ssl_explainer": "Il générera des certificats pour www et non-www. \n Vous devez avoir les deux entrées DNS définies à l'avance.
Utile si vous prévoyez d'avoir des visiteurs sur les deux.",
+ "ssl_explainer": "Il générera des certificats pour www et non-www. \n Vous devez avoir les deux entrées DNS définies à l'avance.
Utile si vous prévoyez d'avoir des visiteurs sur les deux.",
"ssl_www_and_non_www": "Générer SSL pour www et non-www ?",
"start_command": "Démarrer la commande",
"stop_application": "Arrêter l'application",
@@ -181,7 +181,7 @@
"path": "Chemin",
"port": "Port",
"public_port_range": "Gamme de ports publics",
- "public_port_range_explainer": "Ports utilisés pour exposer les bases de données/services/services internes. Ajoutez-les à votre pare-feu (le cas échéant).
Vous pouvez spécifier une plage de ports, par exemple : 9000-9100",
+ "public_port_range_explainer": "Ports utilisés pour exposer les bases de données/services/services internes. Ajoutez-les à votre pare-feu (le cas échéant).
Vous pouvez spécifier une plage de ports, par exemple : 9000-9100",
"publish_directory": "Publier le répertoire",
"remove": "Retirer",
"remove_domain": "Supprimer le domaine",
@@ -266,7 +266,7 @@
"permission_denied": "Vous n'avez pas la permission de faire cela. \n\\nDemandez à un administrateur de modifier vos autorisations.",
"registration_allowed": "Inscription autorisée ?",
"registration_allowed_explainer": "Autoriser d'autres inscriptions à l'application. \n Il est désactivé après la première inscription.",
- "ssl_explainer": "Si vous spécifiez https, Coolify sera accessible uniquement via https. \nUn certificat SSL sera généré pour vous. Si vous spécifiez www, Coolify sera redirigé (302) à partir de non-www et vice versa."
+ "ssl_explainer": "Si vous spécifiez https, Coolify sera accessible uniquement via https. \nUn certificat SSL sera généré pour vous. Si vous spécifiez www, Coolify sera redirigé (302) à partir de non-www et vice versa."
},
"source": {
"application_id": "ID d'application",
diff --git a/apps/ui/src/lib/store.ts b/apps/ui/src/lib/store.ts
index 245e8d6eb..f1c5d05bf 100644
--- a/apps/ui/src/lib/store.ts
+++ b/apps/ui/src/lib/store.ts
@@ -1,6 +1,8 @@
-import { writable, readable, type Writable, type Readable } from 'svelte/store';
+import { writable, readable, type Writable } from 'svelte/store';
interface AppSession {
+ ipv4: string | null,
+ ipv6: string | null,
version: string | null,
userId: string | null,
teamId: string | null,
@@ -15,8 +17,15 @@ interface AppSession {
gitlab: string | null,
}
}
+interface AddToast {
+ type?: "info" | "success" | "error",
+ message: string,
+ timeout?: number | undefined
+ }
export const loginEmail: Writable = writable()
export const appSession: Writable = writable({
+ ipv4: null,
+ ipv6: null,
version: null,
userId: null,
teamId: null,
@@ -31,7 +40,6 @@ export const appSession: Writable = writable({
gitlab: null
}
});
-export const isTraefikUsed: Writable = writable(false);
export const disabledButton: Writable = writable(false);
export const status: Writable = writable({
application: {
@@ -41,14 +49,16 @@ export const status: Writable = writable({
initialLoading: true
},
service: {
- initialLoading: true,
+ isRunning: false,
+ isExited: false,
loading: false,
- isRunning: false
+ initialLoading: true
},
database: {
- initialLoading: true,
+ isRunning: false,
+ isExited: false,
loading: false,
- isRunning: false
+ initialLoading: true
}
});
@@ -60,14 +70,41 @@ export const features = readable({
export const location: Writable = writable(null)
export const setLocation = (resource: any) => {
- console.log(GITPOD_WORKSPACE_URL)
if (GITPOD_WORKSPACE_URL && resource.exposePort) {
const { href } = new URL(GITPOD_WORKSPACE_URL);
const newURL = href
.replace('https://', `https://${resource.exposePort}-`)
.replace(/\/$/, '');
- location.set(newURL)
- } else {
- location.set(resource.fqdn)
+ return location.set(newURL)
+ } else if (CODESANDBOX_HOST){
+ const newURL = `https://${CODESANDBOX_HOST.replace(/\$PORT/,resource.exposePort)}`
+ return location.set(newURL)
}
+ return location.set(resource.fqdn)
+}
+
+export const toasts: any = writable([])
+
+export const dismissToast = (id: number) => {
+ toasts.update((all: any) => all.filter((t: any) => t.id !== id))
+}
+
+export const addToast = (toast: AddToast) => {
+ // Create a unique ID so we can easily find/remove it
+ // if it is dismissible/has a timeout.
+ const id = Math.floor(Math.random() * 10000)
+
+ // Setup some sensible defaults for a toast.
+ const defaults = {
+ id,
+ type: 'info',
+ timeout: 2000,
+ }
+
+ // Push the toast to the top of the list of toasts
+ const t = { ...defaults, ...toast }
+ toasts.update((all: any) => [t, ...all])
+
+ // If toast is dismissible, dismiss it after "timeout" amount of time.
+ if (t.timeout) setTimeout(() => dismissToast(id), t.timeout)
}
\ No newline at end of file
diff --git a/apps/ui/src/routes/__layout.svelte b/apps/ui/src/routes/__layout.svelte
index a6932eae0..e808f555a 100644
--- a/apps/ui/src/routes/__layout.svelte
+++ b/apps/ui/src/routes/__layout.svelte
@@ -65,11 +65,12 @@
-