Add family roles to member management
This commit is contained in:
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "الاسم المعروض",
|
||||
"memberPasswordLabel": "كلمة المرور",
|
||||
"colorLabel": "اللون",
|
||||
"familyRoleLabel": "دور العائلة",
|
||||
"familyRoleDad": "الأب",
|
||||
"familyRoleMom": "الأم",
|
||||
"familyRoleParent": "ولي الأمر",
|
||||
"familyRoleChild": "طفل",
|
||||
"familyRoleGrandparent": "جد/جدة",
|
||||
"familyRoleRelative": "قريب",
|
||||
"familyRoleOther": "فرد من العائلة",
|
||||
"systemAdminLabel": "مسؤول النظام",
|
||||
"systemAdminHint": "يمكن لمسؤولي النظام إدارة الإعدادات والتكاملات ورموز API وحسابات العائلة.",
|
||||
"systemAdminBadge": "مسؤول النظام",
|
||||
"roleLabel": "الدور",
|
||||
"roleMember": "عضو",
|
||||
"roleAdmin": "مسؤول",
|
||||
|
||||
@@ -630,6 +630,17 @@
|
||||
"displayNameLabel": "Anzeigename",
|
||||
"memberPasswordLabel": "Passwort",
|
||||
"colorLabel": "Farbe",
|
||||
"familyRoleLabel": "Familienrolle",
|
||||
"familyRoleDad": "Vater",
|
||||
"familyRoleMom": "Mutter",
|
||||
"familyRoleParent": "Elternteil",
|
||||
"familyRoleChild": "Kind",
|
||||
"familyRoleGrandparent": "Großelternteil",
|
||||
"familyRoleRelative": "Verwandte/r",
|
||||
"familyRoleOther": "Familienmitglied",
|
||||
"systemAdminLabel": "Systemadministrator",
|
||||
"systemAdminHint": "Systemadministratoren können App-Einstellungen, Integrationen, API-Tokens und Familienkonten verwalten.",
|
||||
"systemAdminBadge": "Systemadministrator",
|
||||
"roleLabel": "Rolle",
|
||||
"roleMember": "Mitglied",
|
||||
"roleAdmin": "Admin",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Εμφανιζόμενο όνομα",
|
||||
"memberPasswordLabel": "Κωδικός",
|
||||
"colorLabel": "Χρώμα",
|
||||
"familyRoleLabel": "Ρόλος στην οικογένεια",
|
||||
"familyRoleDad": "Μπαμπάς",
|
||||
"familyRoleMom": "Μαμά",
|
||||
"familyRoleParent": "Γονέας",
|
||||
"familyRoleChild": "Παιδί",
|
||||
"familyRoleGrandparent": "Παππούς/Γιαγιά",
|
||||
"familyRoleRelative": "Συγγενής",
|
||||
"familyRoleOther": "Μέλος οικογένειας",
|
||||
"systemAdminLabel": "Διαχειριστής συστήματος",
|
||||
"systemAdminHint": "Οι διαχειριστές συστήματος μπορούν να διαχειρίζονται ρυθμίσεις, ενσωματώσεις, API tokens και λογαριασμούς οικογένειας.",
|
||||
"systemAdminBadge": "Διαχειριστής συστήματος",
|
||||
"roleLabel": "Ρόλος",
|
||||
"roleMember": "Μέλος",
|
||||
"roleAdmin": "Διαχειριστής",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Display name",
|
||||
"memberPasswordLabel": "Password",
|
||||
"colorLabel": "Color",
|
||||
"familyRoleLabel": "Family role",
|
||||
"familyRoleDad": "Dad",
|
||||
"familyRoleMom": "Mom",
|
||||
"familyRoleParent": "Parent",
|
||||
"familyRoleChild": "Child",
|
||||
"familyRoleGrandparent": "Grandparent",
|
||||
"familyRoleRelative": "Relative",
|
||||
"familyRoleOther": "Family member",
|
||||
"systemAdminLabel": "System admin",
|
||||
"systemAdminHint": "System admins can manage application settings, integrations, API tokens and family accounts.",
|
||||
"systemAdminBadge": "System admin",
|
||||
"roleLabel": "Role",
|
||||
"roleMember": "Member",
|
||||
"roleAdmin": "Admin",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Nombre para mostrar",
|
||||
"memberPasswordLabel": "Contraseña",
|
||||
"colorLabel": "Color",
|
||||
"familyRoleLabel": "Rol familiar",
|
||||
"familyRoleDad": "Papá",
|
||||
"familyRoleMom": "Mamá",
|
||||
"familyRoleParent": "Progenitor",
|
||||
"familyRoleChild": "Hijo/a",
|
||||
"familyRoleGrandparent": "Abuelo/a",
|
||||
"familyRoleRelative": "Familiar",
|
||||
"familyRoleOther": "Miembro de la familia",
|
||||
"systemAdminLabel": "Administrador del sistema",
|
||||
"systemAdminHint": "Los administradores del sistema pueden gestionar ajustes, integraciones, tokens de API y cuentas familiares.",
|
||||
"systemAdminBadge": "Admin del sistema",
|
||||
"roleLabel": "Rol",
|
||||
"roleMember": "Miembro",
|
||||
"roleAdmin": "Administrador",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Nom affiché",
|
||||
"memberPasswordLabel": "Mot de passe",
|
||||
"colorLabel": "Couleur",
|
||||
"familyRoleLabel": "Rôle familial",
|
||||
"familyRoleDad": "Papa",
|
||||
"familyRoleMom": "Maman",
|
||||
"familyRoleParent": "Parent",
|
||||
"familyRoleChild": "Enfant",
|
||||
"familyRoleGrandparent": "Grand-parent",
|
||||
"familyRoleRelative": "Proche",
|
||||
"familyRoleOther": "Membre de la famille",
|
||||
"systemAdminLabel": "Administrateur système",
|
||||
"systemAdminHint": "Les administrateurs système peuvent gérer les paramètres, intégrations, jetons API et comptes familiaux.",
|
||||
"systemAdminBadge": "Admin système",
|
||||
"roleLabel": "Rôle",
|
||||
"roleMember": "Membre",
|
||||
"roleAdmin": "Admin",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "प्रदर्शन नाम",
|
||||
"memberPasswordLabel": "पासवर्ड",
|
||||
"colorLabel": "रंग",
|
||||
"familyRoleLabel": "परिवार भूमिका",
|
||||
"familyRoleDad": "पिता",
|
||||
"familyRoleMom": "माँ",
|
||||
"familyRoleParent": "अभिभावक",
|
||||
"familyRoleChild": "बच्चा",
|
||||
"familyRoleGrandparent": "दादा-दादी/नाना-नानी",
|
||||
"familyRoleRelative": "रिश्तेदार",
|
||||
"familyRoleOther": "परिवार सदस्य",
|
||||
"systemAdminLabel": "सिस्टम एडमिन",
|
||||
"systemAdminHint": "सिस्टम एडमिन सेटिंग्स, इंटीग्रेशन, API टोकन और परिवार खातों को प्रबंधित कर सकते हैं।",
|
||||
"systemAdminBadge": "सिस्टम एडमिन",
|
||||
"roleLabel": "भूमिका",
|
||||
"roleMember": "सदस्य",
|
||||
"roleAdmin": "एडमिन",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Nome visualizzato",
|
||||
"memberPasswordLabel": "Password",
|
||||
"colorLabel": "Colore",
|
||||
"familyRoleLabel": "Ruolo familiare",
|
||||
"familyRoleDad": "Papà",
|
||||
"familyRoleMom": "Mamma",
|
||||
"familyRoleParent": "Genitore",
|
||||
"familyRoleChild": "Figlio/a",
|
||||
"familyRoleGrandparent": "Nonno/a",
|
||||
"familyRoleRelative": "Parente",
|
||||
"familyRoleOther": "Membro della famiglia",
|
||||
"systemAdminLabel": "Amministratore di sistema",
|
||||
"systemAdminHint": "Gli amministratori di sistema possono gestire impostazioni, integrazioni, token API e account familiari.",
|
||||
"systemAdminBadge": "Admin sistema",
|
||||
"roleLabel": "Ruolo",
|
||||
"roleMember": "Membro",
|
||||
"roleAdmin": "Admin",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "表示名",
|
||||
"memberPasswordLabel": "パスワード",
|
||||
"colorLabel": "色",
|
||||
"familyRoleLabel": "家族内の役割",
|
||||
"familyRoleDad": "父",
|
||||
"familyRoleMom": "母",
|
||||
"familyRoleParent": "保護者",
|
||||
"familyRoleChild": "子ども",
|
||||
"familyRoleGrandparent": "祖父母",
|
||||
"familyRoleRelative": "親族",
|
||||
"familyRoleOther": "家族メンバー",
|
||||
"systemAdminLabel": "システム管理者",
|
||||
"systemAdminHint": "システム管理者は設定、連携、APIトークン、家族アカウントを管理できます。",
|
||||
"systemAdminBadge": "システム管理者",
|
||||
"roleLabel": "役割",
|
||||
"roleMember": "メンバー",
|
||||
"roleAdmin": "管理者",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Nome de exibição",
|
||||
"memberPasswordLabel": "Senha",
|
||||
"colorLabel": "Cor",
|
||||
"familyRoleLabel": "Papel na família",
|
||||
"familyRoleDad": "Pai",
|
||||
"familyRoleMom": "Mãe",
|
||||
"familyRoleParent": "Responsável",
|
||||
"familyRoleChild": "Filho(a)",
|
||||
"familyRoleGrandparent": "Avô/Avó",
|
||||
"familyRoleRelative": "Parente",
|
||||
"familyRoleOther": "Membro da família",
|
||||
"systemAdminLabel": "Administrador do sistema",
|
||||
"systemAdminHint": "Administradores do sistema podem gerenciar configurações, integrações, tokens de API e contas da família.",
|
||||
"systemAdminBadge": "Admin do sistema",
|
||||
"roleLabel": "Função",
|
||||
"roleMember": "Membro",
|
||||
"roleAdmin": "Admin",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Отображаемое имя",
|
||||
"memberPasswordLabel": "Пароль",
|
||||
"colorLabel": "Цвет",
|
||||
"familyRoleLabel": "Роль в семье",
|
||||
"familyRoleDad": "Папа",
|
||||
"familyRoleMom": "Мама",
|
||||
"familyRoleParent": "Родитель",
|
||||
"familyRoleChild": "Ребёнок",
|
||||
"familyRoleGrandparent": "Дедушка/бабушка",
|
||||
"familyRoleRelative": "Родственник",
|
||||
"familyRoleOther": "Член семьи",
|
||||
"systemAdminLabel": "Системный администратор",
|
||||
"systemAdminHint": "Системные администраторы могут управлять настройками, интеграциями, API-токенами и семейными аккаунтами.",
|
||||
"systemAdminBadge": "Системный администратор",
|
||||
"roleLabel": "Роль",
|
||||
"roleMember": "Участник",
|
||||
"roleAdmin": "Администратор",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Visningsnamn",
|
||||
"memberPasswordLabel": "Lösenord",
|
||||
"colorLabel": "Färg",
|
||||
"familyRoleLabel": "Familjeroll",
|
||||
"familyRoleDad": "Pappa",
|
||||
"familyRoleMom": "Mamma",
|
||||
"familyRoleParent": "Förälder",
|
||||
"familyRoleChild": "Barn",
|
||||
"familyRoleGrandparent": "Far-/morförälder",
|
||||
"familyRoleRelative": "Släkting",
|
||||
"familyRoleOther": "Familjemedlem",
|
||||
"systemAdminLabel": "Systemadministratör",
|
||||
"systemAdminHint": "Systemadministratörer kan hantera inställningar, integrationer, API-token och familjekonton.",
|
||||
"systemAdminBadge": "Systemadmin",
|
||||
"roleLabel": "Roll",
|
||||
"roleMember": "Medlem",
|
||||
"roleAdmin": "Admin",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Görünen ad",
|
||||
"memberPasswordLabel": "Şifre",
|
||||
"colorLabel": "Renk",
|
||||
"familyRoleLabel": "Aile rolü",
|
||||
"familyRoleDad": "Baba",
|
||||
"familyRoleMom": "Anne",
|
||||
"familyRoleParent": "Ebeveyn",
|
||||
"familyRoleChild": "Çocuk",
|
||||
"familyRoleGrandparent": "Büyükanne/Büyükbaba",
|
||||
"familyRoleRelative": "Akraba",
|
||||
"familyRoleOther": "Aile üyesi",
|
||||
"systemAdminLabel": "Sistem yöneticisi",
|
||||
"systemAdminHint": "Sistem yöneticileri ayarları, entegrasyonları, API tokenlarını ve aile hesaplarını yönetebilir.",
|
||||
"systemAdminBadge": "Sistem yöneticisi",
|
||||
"roleLabel": "Rol",
|
||||
"roleMember": "Üye",
|
||||
"roleAdmin": "Yönetici",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "Відображуване ім'я",
|
||||
"memberPasswordLabel": "Пароль",
|
||||
"colorLabel": "Колір",
|
||||
"familyRoleLabel": "Роль у родині",
|
||||
"familyRoleDad": "Тато",
|
||||
"familyRoleMom": "Мама",
|
||||
"familyRoleParent": "Батько/мати",
|
||||
"familyRoleChild": "Дитина",
|
||||
"familyRoleGrandparent": "Дідусь/бабуся",
|
||||
"familyRoleRelative": "Родич",
|
||||
"familyRoleOther": "Член родини",
|
||||
"systemAdminLabel": "Системний адміністратор",
|
||||
"systemAdminHint": "Системні адміністратори можуть керувати налаштуваннями, інтеграціями, API-токенами та сімейними акаунтами.",
|
||||
"systemAdminBadge": "Системний адміністратор",
|
||||
"roleLabel": "Роль",
|
||||
"roleMember": "Учасник",
|
||||
"roleAdmin": "Адміністратор",
|
||||
|
||||
@@ -624,6 +624,17 @@
|
||||
"displayNameLabel": "显示名称",
|
||||
"memberPasswordLabel": "密码",
|
||||
"colorLabel": "颜色",
|
||||
"familyRoleLabel": "家庭角色",
|
||||
"familyRoleDad": "爸爸",
|
||||
"familyRoleMom": "妈妈",
|
||||
"familyRoleParent": "父母",
|
||||
"familyRoleChild": "孩子",
|
||||
"familyRoleGrandparent": "祖父母",
|
||||
"familyRoleRelative": "亲属",
|
||||
"familyRoleOther": "家庭成员",
|
||||
"systemAdminLabel": "系统管理员",
|
||||
"systemAdminHint": "系统管理员可以管理应用设置、集成、API 令牌和家庭账户。",
|
||||
"systemAdminBadge": "系统管理员",
|
||||
"roleLabel": "角色",
|
||||
"roleMember": "成员",
|
||||
"roleAdmin": "管理员",
|
||||
|
||||
@@ -14,6 +14,7 @@ const SUPPORTED_CURRENCIES = ['AED', 'AUD', 'BRL', 'CAD', 'CHF', 'CNY', 'CZK', '
|
||||
const SETTINGS_TAB_KEY = 'oikos:settings:tab';
|
||||
const APP_NAME_STORAGE_KEY = 'oikos-app-name';
|
||||
const DEFAULT_APP_NAME = 'Oikos';
|
||||
const FAMILY_ROLES = ['dad', 'mom', 'parent', 'child', 'grandparent', 'relative', 'other'];
|
||||
|
||||
const CATEGORY_I18N = {
|
||||
'Obst & Gemüse': 'shopping.catFruitVeg',
|
||||
@@ -44,6 +45,16 @@ function buildCurrencyOptions(selected) {
|
||||
.join('');
|
||||
}
|
||||
|
||||
function familyRoleLabel(role) {
|
||||
return t(`settings.familyRole${String(role || 'other').replace(/(^|_)([a-z])/g, (_, __, c) => c.toUpperCase())}`);
|
||||
}
|
||||
|
||||
function buildFamilyRoleOptions(selected = 'other') {
|
||||
return FAMILY_ROLES.map((role) => `
|
||||
<option value="${role}"${role === selected ? ' selected' : ''}>${familyRoleLabel(role)}</option>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {HTMLElement} container
|
||||
* @param {{ user: object }} context
|
||||
@@ -476,12 +487,16 @@ export async function render(container, { user }) {
|
||||
<input class="form-input form-input--color" type="color" id="new-avatar-color" value="#007AFF" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="new-role">${t('settings.roleLabel')}</label>
|
||||
<select class="form-input" id="new-role">
|
||||
<option value="member">${t('settings.roleMember')}</option>
|
||||
<option value="admin">${t('settings.roleAdmin')}</option>
|
||||
<label class="form-label" for="new-family-role">${t('settings.familyRoleLabel')}</label>
|
||||
<select class="form-input" id="new-family-role">
|
||||
${buildFamilyRoleOptions()}
|
||||
</select>
|
||||
</div>
|
||||
<label class="toggle-row">
|
||||
<input type="checkbox" id="new-system-admin" />
|
||||
<span>${t('settings.systemAdminLabel')}</span>
|
||||
</label>
|
||||
<p class="form-hint">${t('settings.systemAdminHint')}</p>
|
||||
<div id="member-error" class="form-error" hidden></div>
|
||||
<div class="settings-form-actions">
|
||||
<button type="submit" class="btn btn--primary">${t('settings.createMember')}</button>
|
||||
@@ -773,7 +788,8 @@ function bindEvents(container, user, categories, icsSubscriptions, apiTokens) {
|
||||
display_name: container.querySelector('#new-display-name').value.trim(),
|
||||
password: container.querySelector('#new-member-password').value,
|
||||
avatar_color: container.querySelector('#new-avatar-color').value,
|
||||
role: container.querySelector('#new-role').value,
|
||||
family_role: container.querySelector('#new-family-role').value,
|
||||
system_admin: container.querySelector('#new-system-admin')?.checked === true,
|
||||
};
|
||||
|
||||
const btn = addMemberForm.querySelector('[type=submit]');
|
||||
@@ -1103,12 +1119,14 @@ function bindCategoryEvents(container) {
|
||||
}
|
||||
|
||||
function memberHtml(u) {
|
||||
const familyRole = familyRoleLabel(u.family_role);
|
||||
const systemRole = u.role === 'admin' ? ` · ${esc(t('settings.systemAdminBadge'))}` : '';
|
||||
return `
|
||||
<li class="settings-member" data-id="${u.id}">
|
||||
<div class="settings-avatar settings-avatar--sm" style="background:${esc(u.avatar_color)}">${initials(u.display_name)}</div>
|
||||
<div class="settings-member__info">
|
||||
<span class="settings-member__name">${esc(u.display_name)}</span>
|
||||
<span class="settings-member__meta">@${esc(u.username)} · ${u.role === 'admin' ? t('settings.roleAdmin') : t('settings.roleMember')}</span>
|
||||
<span class="settings-member__meta">@${esc(u.username)} · ${esc(familyRole)}${systemRole}</span>
|
||||
</div>
|
||||
<button class="btn btn--icon btn--danger-outline" data-delete-user="${u.id}" data-name="${esc(u.display_name)}" aria-label="${esc(u.display_name)} ${t('settings.deleteMemberLabel')}" title="${t('settings.deleteMemberLabel')}">
|
||||
<i data-lucide="trash-2" aria-hidden="true"></i>
|
||||
|
||||
Reference in New Issue
Block a user