From c7227d2f506209acd63f64a78bd4a177592fe15a Mon Sep 17 00:00:00 2001 From: Pierre Donias Date: Thu, 27 Oct 2022 17:13:13 +0200 Subject: [PATCH] feat(lite): settings page (#6418) --- @xen-orchestra/lite/CHANGELOG.md | 1 + @xen-orchestra/lite/package.json | 6 +- @xen-orchestra/lite/src/assets/base.css | 14 ++ .../lite/src/components/AccountButton.vue | 6 +- .../lite/src/components/AppHeader.vue | 39 +----- .../lite/src/components/ui/UiKeyValueList.vue | 14 ++ .../lite/src/components/ui/UiKeyValueRow.vue | 37 ++++++ @xen-orchestra/lite/src/i18n.ts | 18 +++ @xen-orchestra/lite/src/locales/en.json | 9 ++ @xen-orchestra/lite/src/locales/fr.json | 9 ++ @xen-orchestra/lite/src/router/index.ts | 6 + .../lite/src/views/pool/PoolDashboardView.vue | 7 +- .../lite/src/views/pool/PoolRootView.vue | 8 +- .../lite/src/views/settings/SettingsView.vue | 124 ++++++++++++++++++ @xen-orchestra/lite/vite.config.ts | 4 + 15 files changed, 248 insertions(+), 54 deletions(-) create mode 100644 @xen-orchestra/lite/src/components/ui/UiKeyValueList.vue create mode 100644 @xen-orchestra/lite/src/components/ui/UiKeyValueRow.vue create mode 100644 @xen-orchestra/lite/src/views/settings/SettingsView.vue diff --git a/@xen-orchestra/lite/CHANGELOG.md b/@xen-orchestra/lite/CHANGELOG.md index 55c1ae3af..a1c17383c 100644 --- a/@xen-orchestra/lite/CHANGELOG.md +++ b/@xen-orchestra/lite/CHANGELOG.md @@ -3,6 +3,7 @@ ## **0.2.0** - Invalidate sessionId token after logout (PR [#6480](https://github.com/vatesfr/xen-orchestra/pull/6480)) +- Settings page (PR [#6418](https://github.com/vatesfr/xen-orchestra/pull/6418)) ## **0.1.0** diff --git a/@xen-orchestra/lite/package.json b/@xen-orchestra/lite/package.json index 62326203c..f76f260b5 100644 --- a/@xen-orchestra/lite/package.json +++ b/@xen-orchestra/lite/package.json @@ -1,11 +1,11 @@ { "name": "@xen-orchestra/lite", - "version": "0.0.0", + "version": "0.1.0", "scripts": { - "dev": "vite", + "dev": "GIT_HEAD=$(git rev-parse HEAD) vite", "build": "run-p type-check build-only", "preview": "vite preview --port 4173", - "build-only": "vite build", + "build-only": "GIT_HEAD=$(git rev-parse HEAD) vite build", "deploy": "./scripts/deploy.sh", "type-check": "vue-tsc --noEmit", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" diff --git a/@xen-orchestra/lite/src/assets/base.css b/@xen-orchestra/lite/src/assets/base.css index f409e7379..5f44c68f9 100644 --- a/@xen-orchestra/lite/src/assets/base.css +++ b/@xen-orchestra/lite/src/assets/base.css @@ -11,3 +11,17 @@ body { -moz-osx-font-smoothing: grayscale; color: var(--color-blue-scale-100); } + +a { + color: var(--color-extra-blue-base); +} + +code { + font-family: monospace; +} + +.card-view { + padding: 1.2rem; + display: flex; + gap: 2rem; +} diff --git a/@xen-orchestra/lite/src/components/AccountButton.vue b/@xen-orchestra/lite/src/components/AccountButton.vue index 53966feb7..8c6dd97ce 100644 --- a/@xen-orchestra/lite/src/components/AccountButton.vue +++ b/@xen-orchestra/lite/src/components/AccountButton.vue @@ -6,7 +6,9 @@ - {{ $t("settings") }} + {{ + $t("settings") + }} {{ $t("send-us-feedback") }} @@ -50,6 +52,8 @@ const openFeedbackUrl = () => { "noopener" ); }; + +const openSettings = () => router.push({ name: "settings" }); diff --git a/@xen-orchestra/lite/src/components/ui/UiKeyValueRow.vue b/@xen-orchestra/lite/src/components/ui/UiKeyValueRow.vue new file mode 100644 index 000000000..1b4e4ae9c --- /dev/null +++ b/@xen-orchestra/lite/src/components/ui/UiKeyValueRow.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/@xen-orchestra/lite/src/i18n.ts b/@xen-orchestra/lite/src/i18n.ts index 451f24f4b..e99dbb359 100644 --- a/@xen-orchestra/lite/src/i18n.ts +++ b/@xen-orchestra/lite/src/i18n.ts @@ -2,6 +2,24 @@ import { createI18n } from "vue-i18n"; import en from "@/locales/en.json"; import fr from "@/locales/fr.json"; +interface Locales { + [key: string]: { + code: string; + name: string; + }; +} + +export const locales: Locales = { + en: { + code: "en", + name: "English", + }, + fr: { + code: "fr", + name: "Français", + }, +}; + export default createI18n<[typeof en], "en" | "fr">({ locale: localStorage.getItem("lang") ?? "en", fallbackLocale: "en", diff --git a/@xen-orchestra/lite/src/locales/en.json b/@xen-orchestra/lite/src/locales/en.json index 2b7734d72..d95c259b9 100644 --- a/@xen-orchestra/lite/src/locales/en.json +++ b/@xen-orchestra/lite/src/locales/en.json @@ -4,26 +4,34 @@ "add-or": "+OR", "add-sort": "Add sort", "alarms": "Alarms", + "appearance": "Appearance", "ascending": "ascending", "available-properties-for-advanced-filter": "Available properties for advanced filter:", "backup": "Backup", "cancel": "Cancel", "change-power-state": "Change power state", + "community": "Community", + "community-name": "{name} community", "copy": "Copy", "cpu-usage":"CPU usage", + "dark-mode": "Dark mode", "dashboard": "Dashboard", "delete": "Delete", "descending": "descending", + "display": "Display", "edit-config": "Edit config", "export": "Export", "export-table-to": "Export table to {type}", "export-vms": "Export VMs", "hosts": "Hosts", + "language": "Language", "loading-hosts": "Loading hosts…", "log-out": "Log out", "login": "Login", "migrate": "Migrate", "network": "Network", + "news": "News", + "news-name": "{name} news", "or": "Or", "password": "Password", "property": "Property", @@ -41,5 +49,6 @@ "top-#": "Top {n}", "total-free": "Total free", "total-used": "Total used", + "version": "Version", "vms": "VMs" } diff --git a/@xen-orchestra/lite/src/locales/fr.json b/@xen-orchestra/lite/src/locales/fr.json index 4f4869ec1..78a3a3856 100644 --- a/@xen-orchestra/lite/src/locales/fr.json +++ b/@xen-orchestra/lite/src/locales/fr.json @@ -4,26 +4,34 @@ "add-or": "+OU", "add-sort": "Ajouter un tri", "alarms": "Alarmes", + "appearance": "Apparence", "ascending": "ascendant", "available-properties-for-advanced-filter": "Propriétés disponibles pour le filtrage avancé :", "backup": "Sauvegarde", "cancel": "Annuler", "change-power-state": "Changer l'état d'alimentation", + "community": "Communauté", + "community-name": "Communauté {name}", "copy": "Copier", "cpu-usage":"Utilisation CPU", + "dark-mode": "Mode sombre", "dashboard": "Tableau de bord", "delete": "Supprimer", "descending": "descendant", + "display": "Affichage", "edit-config": "Modifier config", "export": "Exporter", "export-table-to": "Exporter le tableau en {type}", "export-vms": "Exporter les VMs", "hosts": "Hôtes", + "language": "Langue", "loading-hosts": "Chargement des hôtes…", "log-out": "Se déconnecter", "login": "Connexion", "migrate": "Migrer", "network": "Réseau", + "news": "Actualités", + "news-name": "Actualités {name}", "or": "Ou", "password": "Mot de passe", "property": "Propriété", @@ -41,5 +49,6 @@ "top-#": "Top {n}", "total-free": "Total libre", "total-used": "Total utilisé", + "version": "Version", "vms": "VMs" } diff --git a/@xen-orchestra/lite/src/router/index.ts b/@xen-orchestra/lite/src/router/index.ts index 5ab0bccf8..e8937c26d 100644 --- a/@xen-orchestra/lite/src/router/index.ts +++ b/@xen-orchestra/lite/src/router/index.ts @@ -3,6 +3,7 @@ import pool from "@/router/pool"; import HomeView from "@/views/HomeView.vue"; import HostDashboardView from "@/views/host/HostDashboardView.vue"; import HostRootView from "@/views/host/HostRootView.vue"; +import SettingsView from "@/views/settings/SettingsView.vue"; import VmConsoleView from "@/views/vm/VmConsoleView.vue"; import VmRootView from "@/views/vm/VmRootView.vue"; @@ -14,6 +15,11 @@ const router = createRouter({ name: "home", component: HomeView, }, + { + path: "/settings", + name: "settings", + component: SettingsView, + }, pool, { path: "/host/:uuid", diff --git a/@xen-orchestra/lite/src/views/pool/PoolDashboardView.vue b/@xen-orchestra/lite/src/views/pool/PoolDashboardView.vue index fd43d0551..150dbb32a 100644 --- a/@xen-orchestra/lite/src/views/pool/PoolDashboardView.vue +++ b/@xen-orchestra/lite/src/views/pool/PoolDashboardView.vue @@ -1,5 +1,5 @@