fix(settings): bring the API keys section and its dialog in line with the rest of TREK

The section stacked a lonely button, a centred line and a small print hint
on top of each other, and the create dialog used bare browser checkboxes
that ignore the accent. The dialog now runs on the shared Modal with
selectable scope tiles, keys render as cards with their scopes as chips,
deletion goes through ConfirmDialog, and the endpoint sits in its own row
with a copy button.

Pressing Enter in the name field with every scope switched off used to
create a key: the empty list was dropped from the request and the server
stored it as a key that reads everything. Creation is now refused until at
least one scope is picked.

A failed list load no longer reads as "no keys yet", the create button
stops at the server's limit of ten keys, a refused clipboard says so, and
SQLite timestamps are parsed so Safari does not show Invalid Date.
This commit is contained in:
Maurice
2026-09-14 21:59:27 +02:00
parent da679e6266
commit 25282ea1c5
25 changed files with 648 additions and 220 deletions
+6
View File
@@ -548,6 +548,7 @@ const settings: TranslationStrings = {
'settings.apiScopes.hint':
'Leave everything on for a key that should see all of it. Anything you switch off is refused for this key, not just left out of the answer.',
'settings.apiScopes.all': 'Everything',
'settings.apiScopes.noneSelected': 'Pick at least one area, or the key could not read anything.',
'settings.apiScopes.limited': '{count} of {total}',
'settings.apiScopes.trips': 'Trips',
'settings.apiScopes.days': 'Days',
@@ -571,6 +572,11 @@ const settings: TranslationStrings = {
'settings.apiKeys.createFailed': 'Could not create the key',
'settings.apiKeys.copy': 'Copy',
'settings.apiKeys.docsHint': 'Send the key as "Authorization: Bearer ..." or "X-API-Key: ..." to /api/v1.',
'settings.apiKeys.endpoint': 'Endpoint',
'settings.apiKeys.neverUsed': 'never used',
'settings.apiKeys.loadFailed': 'Could not load your keys. Reload the page to try again.',
'settings.apiKeys.limitReached': 'You have {max} keys, the most an account can hold. Delete one you no longer use to create another.',
'settings.apiKeys.copyFailed': 'Could not copy. Select the text and copy it by hand.',
'settings.apiKeys.modal.createTitle': 'Create API key',
'settings.apiKeys.modal.name': 'Name',
'settings.apiKeys.modal.namePlaceholder': 'e.g. Dawarich',