mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
feat(users): per-user library assignment + themed confirm modal (#222)
Adds Navidrome library assignment to the User Management settings
panel: GET /api/library + PUT /api/user/{id}/library wired through
new Rust commands. UserForm gets a checkbox picker (hidden for
admins, who auto-receive all libraries server-side) with inline
validation. User rows compacted to a single clickable line with
hover highlight; native confirm() replaced by a portal-based
ConfirmModal (theme-aware, ESC/Enter, vertically centered).
Co-authored-by: Psychotoxical <dev@psysonic.app>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
GitHub
parent
6d3c50264a
commit
459c9f688d
@@ -483,6 +483,12 @@ export const deTranslation = {
|
||||
userMgmtPassword: 'Passwort',
|
||||
userMgmtPasswordEditHint: 'Neues Passwort eingeben, um es zu ändern.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtLibraries: 'Bibliotheken',
|
||||
userMgmtLibrariesAdminHint: 'Admin-Benutzer haben automatisch Zugriff auf alle Bibliotheken.',
|
||||
userMgmtLibrariesEmpty: 'Keine Bibliotheken auf diesem Server vorhanden.',
|
||||
userMgmtLibrariesValidation: 'Mindestens eine Bibliothek auswählen.',
|
||||
userMgmtLibrariesUpdateError: 'Benutzer gespeichert, aber Bibliothekszuweisung fehlgeschlagen',
|
||||
userMgmtNoLibraries: 'Keine Bibliotheken zugewiesen',
|
||||
userMgmtSave: 'Speichern',
|
||||
userMgmtCancel: 'Abbrechen',
|
||||
userMgmtDelete: 'Löschen',
|
||||
|
||||
@@ -485,6 +485,12 @@ export const enTranslation = {
|
||||
userMgmtPassword: 'Password',
|
||||
userMgmtPasswordEditHint: 'Enter a new password to update it.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtLibraries: 'Libraries',
|
||||
userMgmtLibrariesAdminHint: 'Admin users automatically have access to all libraries.',
|
||||
userMgmtLibrariesEmpty: 'No libraries available on this server.',
|
||||
userMgmtLibrariesValidation: 'Select at least one library.',
|
||||
userMgmtLibrariesUpdateError: 'User saved, but library assignment failed',
|
||||
userMgmtNoLibraries: 'No libraries assigned',
|
||||
userMgmtSave: 'Save',
|
||||
userMgmtCancel: 'Cancel',
|
||||
userMgmtDelete: 'Delete',
|
||||
|
||||
@@ -476,6 +476,12 @@ export const esTranslation = {
|
||||
userMgmtPassword: 'Contraseña',
|
||||
userMgmtPasswordEditHint: 'Introduce una nueva contraseña para actualizarla.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtLibraries: 'Bibliotecas',
|
||||
userMgmtLibrariesAdminHint: 'Los usuarios admin tienen acceso automáticamente a todas las bibliotecas.',
|
||||
userMgmtLibrariesEmpty: 'No hay bibliotecas disponibles en este servidor.',
|
||||
userMgmtLibrariesValidation: 'Selecciona al menos una biblioteca.',
|
||||
userMgmtLibrariesUpdateError: 'Usuario guardado, pero la asignación de bibliotecas falló',
|
||||
userMgmtNoLibraries: 'Sin bibliotecas asignadas',
|
||||
userMgmtSave: 'Guardar',
|
||||
userMgmtCancel: 'Cancelar',
|
||||
userMgmtDelete: 'Eliminar',
|
||||
|
||||
@@ -473,6 +473,12 @@ export const frTranslation = {
|
||||
userMgmtPassword: 'Mot de passe',
|
||||
userMgmtPasswordEditHint: 'Saisir un nouveau mot de passe pour le modifier.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtLibraries: 'Bibliothèques',
|
||||
userMgmtLibrariesAdminHint: 'Les utilisateurs admin ont automatiquement accès à toutes les bibliothèques.',
|
||||
userMgmtLibrariesEmpty: 'Aucune bibliothèque disponible sur ce serveur.',
|
||||
userMgmtLibrariesValidation: 'Sélectionnez au moins une bibliothèque.',
|
||||
userMgmtLibrariesUpdateError: 'Utilisateur enregistré, mais l\u2019attribution des bibliothèques a échoué',
|
||||
userMgmtNoLibraries: 'Aucune bibliothèque attribuée',
|
||||
userMgmtSave: 'Enregistrer',
|
||||
userMgmtCancel: 'Annuler',
|
||||
userMgmtDelete: 'Supprimer',
|
||||
|
||||
@@ -473,6 +473,12 @@ export const nbTranslation = {
|
||||
userMgmtPassword: 'Passord',
|
||||
userMgmtPasswordEditHint: 'Skriv inn et nytt passord for å oppdatere det.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtLibraries: 'Biblioteker',
|
||||
userMgmtLibrariesAdminHint: 'Administratorbrukere har automatisk tilgang til alle biblioteker.',
|
||||
userMgmtLibrariesEmpty: 'Ingen biblioteker tilgjengelig på denne serveren.',
|
||||
userMgmtLibrariesValidation: 'Velg minst ett bibliotek.',
|
||||
userMgmtLibrariesUpdateError: 'Brukeren ble lagret, men bibliotekstilordning mislyktes',
|
||||
userMgmtNoLibraries: 'Ingen biblioteker tilordnet',
|
||||
userMgmtSave: 'Lagre',
|
||||
userMgmtCancel: 'Avbryt',
|
||||
userMgmtDelete: 'Slett',
|
||||
|
||||
@@ -472,6 +472,12 @@ export const nlTranslation = {
|
||||
userMgmtPassword: 'Wachtwoord',
|
||||
userMgmtPasswordEditHint: 'Voer een nieuw wachtwoord in om het bij te werken.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtLibraries: 'Bibliotheken',
|
||||
userMgmtLibrariesAdminHint: 'Beheerders hebben automatisch toegang tot alle bibliotheken.',
|
||||
userMgmtLibrariesEmpty: 'Geen bibliotheken beschikbaar op deze server.',
|
||||
userMgmtLibrariesValidation: 'Selecteer ten minste één bibliotheek.',
|
||||
userMgmtLibrariesUpdateError: 'Gebruiker opgeslagen, maar bibliotheektoewijzing mislukt',
|
||||
userMgmtNoLibraries: 'Geen bibliotheken toegewezen',
|
||||
userMgmtSave: 'Opslaan',
|
||||
userMgmtCancel: 'Annuleren',
|
||||
userMgmtDelete: 'Verwijderen',
|
||||
|
||||
@@ -490,6 +490,12 @@ export const ruTranslation = {
|
||||
userMgmtPassword: 'Пароль',
|
||||
userMgmtPasswordEditHint: 'Введите новый пароль, чтобы изменить его.',
|
||||
userMgmtRoleAdmin: 'Админ',
|
||||
userMgmtLibraries: 'Библиотеки',
|
||||
userMgmtLibrariesAdminHint: 'Администраторы автоматически имеют доступ ко всем библиотекам.',
|
||||
userMgmtLibrariesEmpty: 'На этом сервере нет доступных библиотек.',
|
||||
userMgmtLibrariesValidation: 'Выберите хотя бы одну библиотеку.',
|
||||
userMgmtLibrariesUpdateError: 'Пользователь сохранён, но не удалось назначить библиотеки',
|
||||
userMgmtNoLibraries: 'Библиотеки не назначены',
|
||||
userMgmtSave: 'Сохранить',
|
||||
userMgmtCancel: 'Отмена',
|
||||
userMgmtDelete: 'Удалить',
|
||||
|
||||
@@ -468,6 +468,12 @@ export const zhTranslation = {
|
||||
userMgmtPassword: '密码',
|
||||
userMgmtPasswordEditHint: '输入新密码以更新。',
|
||||
userMgmtRoleAdmin: '管理员',
|
||||
userMgmtLibraries: '音乐库',
|
||||
userMgmtLibrariesAdminHint: '管理员用户自动拥有所有音乐库的访问权限。',
|
||||
userMgmtLibrariesEmpty: '此服务器上没有可用的音乐库。',
|
||||
userMgmtLibrariesValidation: '请至少选择一个音乐库。',
|
||||
userMgmtLibrariesUpdateError: '用户已保存,但音乐库分配失败',
|
||||
userMgmtNoLibraries: '未分配音乐库',
|
||||
userMgmtSave: '保存',
|
||||
userMgmtCancel: '取消',
|
||||
userMgmtDelete: '删除',
|
||||
|
||||
Reference in New Issue
Block a user