-
diff --git a/apps/ui/src/lib/locales/en.json b/apps/ui/src/lib/locales/en.json
index df84a976b..b913c0658 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"
},
@@ -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.",
@@ -306,7 +306,7 @@
"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 627885385..9b77a7e8b 100644
--- a/apps/ui/src/lib/store.ts
+++ b/apps/ui/src/lib/store.ts
@@ -17,6 +17,11 @@ 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,
@@ -74,4 +79,30 @@ export const setLocation = (resource: any) => {
} else {
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 4df7f920b..b785d10c3 100644
--- a/apps/ui/src/routes/__layout.svelte
+++ b/apps/ui/src/routes/__layout.svelte
@@ -86,6 +86,7 @@
import PageLoader from '$lib/components/PageLoader.svelte';
import { errorNotification } from '$lib/common';
import { appSession } from '$lib/store';
+ import Toasts from '$lib/components/Toasts.svelte';
if (userId) $appSession.userId = userId;
if (teamId) $appSession.teamId = teamId;
@@ -110,7 +111,8 @@
{/if}
-
+
+
{#if $navigating}