From d22f3c10340069090506a5841b0774badcbc2a61 Mon Sep 17 00:00:00 2001 From: Rafael Foster Date: Tue, 28 Apr 2026 20:31:53 -0300 Subject: [PATCH] Separate API token settings tab --- public/locales/ar.json | 1 + public/locales/de.json | 1 + public/locales/el.json | 1 + public/locales/en.json | 1 + public/locales/es.json | 1 + public/locales/fr.json | 1 + public/locales/hi.json | 1 + public/locales/it.json | 1 + public/locales/ja.json | 1 + public/locales/pt.json | 1 + public/locales/ru.json | 1 + public/locales/sv.json | 1 + public/locales/tr.json | 1 + public/locales/uk.json | 1 + public/locales/zh.json | 1 + public/pages/settings.js | 68 +++++++++++++++++++++------------------- public/sw.js | 8 ++--- 17 files changed, 55 insertions(+), 36 deletions(-) diff --git a/public/locales/ar.json b/public/locales/ar.json index e0d8e75..bb882e4 100644 --- a/public/locales/ar.json +++ b/public/locales/ar.json @@ -551,6 +551,7 @@ "tabShopping": "التسوق", "tabCalendar": "التقويم", "tabFamily": "إدارة العائلة", + "tabApiTokens": "رموز API", "tabAccount": "الحساب", "tabsAriaLabel": "أقسام الإعدادات", "sectionDesign": "التصميم", diff --git a/public/locales/de.json b/public/locales/de.json index f8f294e..0bc4ce8 100644 --- a/public/locales/de.json +++ b/public/locales/de.json @@ -576,6 +576,7 @@ "tabShopping": "Einkauf", "tabCalendar": "Kalender", "tabFamily": "Familienverwaltung", + "tabApiTokens": "API-Tokens", "tabAccount": "Konto", "tabsAriaLabel": "Einstellungsbereiche", "sectionDesign": "Design", diff --git a/public/locales/el.json b/public/locales/el.json index fac1d08..d5c4591 100644 --- a/public/locales/el.json +++ b/public/locales/el.json @@ -551,6 +551,7 @@ "tabShopping": "Αγορές", "tabCalendar": "Ημερολόγιο", "tabFamily": "Διαχείριση οικογένειας", + "tabApiTokens": "API Tokens", "tabAccount": "Λογαριασμός", "tabsAriaLabel": "Τμήματα ρυθμίσεων", "sectionDesign": "Εμφάνιση", diff --git a/public/locales/en.json b/public/locales/en.json index 9ce1361..1c11a2d 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -551,6 +551,7 @@ "tabShopping": "Shopping", "tabCalendar": "Calendar", "tabFamily": "Family Management", + "tabApiTokens": "API Tokens", "tabAccount": "Account", "tabsAriaLabel": "Settings sections", "sectionDesign": "Appearance", diff --git a/public/locales/es.json b/public/locales/es.json index 9db0c30..f538132 100644 --- a/public/locales/es.json +++ b/public/locales/es.json @@ -551,6 +551,7 @@ "tabShopping": "Compras", "tabCalendar": "Calendario", "tabFamily": "Gestión familiar", + "tabApiTokens": "API Tokens", "tabAccount": "Cuenta", "tabsAriaLabel": "Secciones de configuración", "sectionDesign": "Diseño", diff --git a/public/locales/fr.json b/public/locales/fr.json index ed7b64b..be7ab85 100644 --- a/public/locales/fr.json +++ b/public/locales/fr.json @@ -551,6 +551,7 @@ "tabShopping": "Courses", "tabCalendar": "Calendrier", "tabFamily": "Gestion familiale", + "tabApiTokens": "API Tokens", "tabAccount": "Compte", "tabsAriaLabel": "Sections des paramètres", "sectionDesign": "Apparence", diff --git a/public/locales/hi.json b/public/locales/hi.json index 739a38d..7edb6a1 100644 --- a/public/locales/hi.json +++ b/public/locales/hi.json @@ -551,6 +551,7 @@ "tabShopping": "खरीदारी", "tabCalendar": "कैलेंडर", "tabFamily": "परिवार प्रबंधन", + "tabApiTokens": "API टोकन", "tabAccount": "खाता", "tabsAriaLabel": "सेटिंग्स अनुभाग", "sectionDesign": "डिज़ाइन", diff --git a/public/locales/it.json b/public/locales/it.json index 72b6d99..0876fb5 100644 --- a/public/locales/it.json +++ b/public/locales/it.json @@ -551,6 +551,7 @@ "tabShopping": "Spesa", "tabCalendar": "Calendario", "tabFamily": "Gestione famiglia", + "tabApiTokens": "API Tokens", "tabAccount": "Account", "tabsAriaLabel": "Sezioni impostazioni", "sectionDesign": "Aspetto", diff --git a/public/locales/ja.json b/public/locales/ja.json index d010baf..6fbf989 100644 --- a/public/locales/ja.json +++ b/public/locales/ja.json @@ -551,6 +551,7 @@ "tabShopping": "買い物", "tabCalendar": "カレンダー", "tabFamily": "家族管理", + "tabApiTokens": "APIトークン", "tabAccount": "アカウント", "tabsAriaLabel": "設定カテゴリー", "sectionDesign": "デザイン", diff --git a/public/locales/pt.json b/public/locales/pt.json index 02cf202..9d9d507 100644 --- a/public/locales/pt.json +++ b/public/locales/pt.json @@ -551,6 +551,7 @@ "tabShopping": "Compras", "tabCalendar": "Calendário", "tabFamily": "Gestão da família", + "tabApiTokens": "API Tokens", "tabAccount": "Conta", "tabsAriaLabel": "Seções de configurações", "sectionDesign": "Design", diff --git a/public/locales/ru.json b/public/locales/ru.json index 13f4328..8450c53 100644 --- a/public/locales/ru.json +++ b/public/locales/ru.json @@ -551,6 +551,7 @@ "tabShopping": "Покупки", "tabCalendar": "Календарь", "tabFamily": "Управление семьей", + "tabApiTokens": "API-токены", "tabAccount": "Аккаунт", "tabsAriaLabel": "Разделы настроек", "sectionDesign": "Внешний вид", diff --git a/public/locales/sv.json b/public/locales/sv.json index eb817d0..d0d03ae 100644 --- a/public/locales/sv.json +++ b/public/locales/sv.json @@ -551,6 +551,7 @@ "tabShopping": "Inköp", "tabCalendar": "Kalender", "tabFamily": "Familjehantering", + "tabApiTokens": "API Tokens", "tabAccount": "Konto", "tabsAriaLabel": "Inställningsavsnitt", "sectionDesign": "Utseende", diff --git a/public/locales/tr.json b/public/locales/tr.json index 684a8f6..da24351 100644 --- a/public/locales/tr.json +++ b/public/locales/tr.json @@ -551,6 +551,7 @@ "tabShopping": "Alışveriş", "tabCalendar": "Takvim", "tabFamily": "Aile Yönetimi", + "tabApiTokens": "API Tokenları", "tabAccount": "Hesap", "tabsAriaLabel": "Ayar bölümleri", "sectionDesign": "Görünüm", diff --git a/public/locales/uk.json b/public/locales/uk.json index 6ac10ea..89e77ab 100644 --- a/public/locales/uk.json +++ b/public/locales/uk.json @@ -551,6 +551,7 @@ "tabShopping": "Покупки", "tabCalendar": "Календар", "tabFamily": "Керування родиною", + "tabApiTokens": "API-токени", "tabAccount": "Обліковий запис", "tabsAriaLabel": "Розділи налаштувань", "sectionDesign": "Зовнішній вигляд", diff --git a/public/locales/zh.json b/public/locales/zh.json index 48bc68d..de18910 100644 --- a/public/locales/zh.json +++ b/public/locales/zh.json @@ -551,6 +551,7 @@ "tabShopping": "购物", "tabCalendar": "日历", "tabFamily": "家庭管理", + "tabApiTokens": "API 令牌", "tabAccount": "账户", "tabsAriaLabel": "设置类别", "sectionDesign": "外观", diff --git a/public/pages/settings.js b/public/pages/settings.js index 33f391c..e3fcb02 100644 --- a/public/pages/settings.js +++ b/public/pages/settings.js @@ -220,7 +220,7 @@ export async function render(container, { user }) { const allowedTabs = [ 'general', 'meals', 'budget', 'shopping', 'calendar', - ...(user?.role === 'admin' ? ['family'] : []), + ...(user?.role === 'admin' ? ['family', 'api-tokens'] : []), 'account', ]; const storedTab = sessionStorage.getItem(SETTINGS_TAB_KEY) ?? 'general'; @@ -248,6 +248,7 @@ export async function render(container, { user }) { ${user?.role === 'admin' ? `` : ''} + ${user?.role === 'admin' ? `` : ''} @@ -573,6 +574,40 @@ export async function render(container, { user }) { ` : ''} + ${user?.role === 'admin' ? ` + +
+
+

${t('settings.apiTokensTitle')}

+
+

${t('settings.apiTokensCardTitle')}

+

${t('settings.apiTokensHint')}

+
    + ${apiTokens.map(apiTokenHtml).join('')} +
+
+
+ + +
+
+ + +

${t('settings.apiTokenExpiresHint')}

+
+ + + +
+
+
+
+ ` : ''} +
@@ -628,37 +663,6 @@ export async function render(container, { user }) {
- ${user?.role === 'admin' ? ` -
-

${t('settings.apiTokensTitle')}

-
-

${t('settings.apiTokensCardTitle')}

-

${t('settings.apiTokensHint')}

-
    - ${apiTokens.map(apiTokenHtml).join('')} -
-
-
- - -
-
- - -

${t('settings.apiTokenExpiresHint')}

-
- - - -
-
-
- ` : ''} -
diff --git a/public/sw.js b/public/sw.js index fcf72ab..714e38b 100644 --- a/public/sw.js +++ b/public/sw.js @@ -13,10 +13,10 @@ * → bypassCacheUntil (in-memory + Cache API für SW-Restart-Robustheit) */ -const SHELL_CACHE = 'oikos-shell-v61'; -const PAGES_CACHE = 'oikos-pages-v56'; -const LOCALES_CACHE = 'oikos-locales-v7'; -const ASSETS_CACHE = 'oikos-assets-v56'; +const SHELL_CACHE = 'oikos-shell-v62'; +const PAGES_CACHE = 'oikos-pages-v57'; +const LOCALES_CACHE = 'oikos-locales-v8'; +const ASSETS_CACHE = 'oikos-assets-v57'; const BYPASS_CACHE = 'oikos-bypass-flag'; const ALL_CACHES = [SHELL_CACHE, PAGES_CACHE, LOCALES_CACHE, ASSETS_CACHE];