feat: add crud for integrations (#11)

* wip: add crud for services and integrations

* feat: remove services

* feat: move integration definitions to homarr/definitions, add temporary test connection solution without actual request

* feat: add integration count badge

* feat: add translation for integrations

* feat: add notifications and translate them

* feat: add notice to integration forms about test connection

* chore: fix ci check issues

* feat: add confirm modals for integration deletion and secret card cancellation, change ordering for list page, add name property to integrations

* refactor: move revalidate path action

* chore: fix ci check issues

* chore: install missing dependencies

* chore: fix ci check issues

* chore: address pull request feedback
This commit is contained in:
Meier Lukas
2024-01-02 17:12:26 +01:00
committed by GitHub
parent 2809e01b03
commit 367beb6759
52 changed files with 2164 additions and 23 deletions

View File

@@ -1,3 +1,5 @@
import "dayjs/locale/de";
export default {
user: {
page: {
@@ -26,6 +28,132 @@ export default {
create: "Benutzer erstellen",
},
},
integration: {
page: {
list: {
title: "Integrationen",
search: "Integration suchen",
empty: "Keine Integrationen gefunden",
},
create: {
title: "Neue {name} Integration erstellen",
notification: {
success: {
title: "Erstellung erfolgreich",
message: "Die Integration wurde erfolgreich erstellt",
},
error: {
title: "Erstellung fehlgeschlagen",
message: "Die Integration konnte nicht erstellt werden",
},
},
},
edit: {
title: "{name} Integration bearbeiten",
notification: {
success: {
title: "Änderungen erfolgreich angewendet",
message: "Die Integration wurde erfolgreich gespeichert",
},
error: {
title: "Änderungen konnten nicht angewendet werden",
message: "Die Integration konnte nicht gespeichert werden",
},
},
},
delete: {
title: "Integration entfernen",
message: "Möchtest du die Integration {name} wirklich entfernen?",
notification: {
success: {
title: "Entfernen erfolgreich",
message: "Die Integration wurde erfolgreich entfernt",
},
error: {
title: "Entfernen fehlgeschlagen",
message: "Die Integration konnte nicht entfernt werden",
},
},
},
},
field: {
name: {
label: "Name",
},
url: {
label: "Url",
},
},
action: {
create: "Neue Integration",
},
testConnection: {
action: "Verbindung überprüfen",
alertNotice:
"Der Button zum Speichern wird aktiviert, sobald die Verbindung erfolgreich überprüft wurde",
notification: {
success: {
title: "Verbindung erfolgreich",
message: "Die Verbindung wurde erfolgreich hergestellt",
},
invalidUrl: {
title: "Ungültige URL",
message: "Die URL ist ungültig",
},
notAllSecretsProvided: {
title: "Fehlende Zugangsdaten",
message: "Es wurden nicht alle Zugangsdaten angegeben",
},
invalidCredentials: {
title: "Ungültige Zugangsdaten",
message: "Die Zugangsdaten sind ungültig",
},
commonError: {
title: "Verbindung fehlgeschlagen",
message: "Die Verbindung konnte nicht hergestellt werden",
},
},
},
secrets: {
title: "Zugangsdaten",
lastUpdated: "Zuletzt geändert {date}",
secureNotice:
"Diese Zugangsdaten können nach der Erstellung nicht mehr ausgelesen werden",
reset: {
title: "Zugangsdaten zurücksetzen",
message: "Möchtest du diese Zugangsdaten wirklich zurücksetzen?",
},
kind: {
username: {
label: "Benutzername",
newLabel: "Neuer Benutzername",
},
apiKey: {
label: "API Key",
newLabel: "Neuer API Key",
},
password: {
label: "Passwort",
newLabel: "Neues Passwort",
},
},
},
},
common: {
action: {
backToOverview: "Zurück zur Übersicht",
create: "Erstellen",
edit: "Bearbeiten",
save: "Speichern",
cancel: "Abbrechen",
confirm: "Bestätigen",
},
noResults: "Keine Ergebnisse gefunden",
search: {
placeholder: "Suche nach etwas...",
nothingFound: "Nichts gefunden",
},
},
widget: {
clock: {
option: {
@@ -52,10 +180,4 @@ export default {
},
},
},
common: {
search: {
placeholder: "Suche nach etwas...",
nothingFound: "Nichts gefunden",
},
},
} as const;

View File

@@ -1,3 +1,5 @@
import "dayjs/locale/en";
export default {
user: {
page: {
@@ -26,6 +28,131 @@ export default {
create: "Create user",
},
},
integration: {
page: {
list: {
title: "Integrations",
search: "Search integrations",
empty: "No integrations found",
},
create: {
title: "New {name} integration",
notification: {
success: {
title: "Creation successful",
message: "The integration was successfully created",
},
error: {
title: "Creation failed",
message: "The integration could not be created",
},
},
},
edit: {
title: "Edit {name} integration",
notification: {
success: {
title: "Changes applied successfully",
message: "The integration was successfully saved",
},
error: {
title: "Unable to apply changes",
message: "The integration could not be saved",
},
},
},
delete: {
title: "Delete integration",
message: "Are you sure you want to delete the integration {name}?",
notification: {
success: {
title: "Deletion successful",
message: "The integration was successfully deleted",
},
error: {
title: "Deletion failed",
message: "Unable to delete the integration",
},
},
},
},
field: {
name: {
label: "Name",
},
url: {
label: "Url",
},
},
action: {
create: "New integration",
},
testConnection: {
action: "Test connection",
alertNotice:
"The Save button is enabled once a successful connection is established",
notification: {
success: {
title: "Connection successful",
message: "The connection was successfully established",
},
invalidUrl: {
title: "Invalid URL",
message: "The URL is invalid",
},
notAllSecretsProvided: {
title: "Missing credentials",
message: "Not all credentials were provided",
},
invalidCredentials: {
title: "Invalid credentials",
message: "The credentials are invalid",
},
commonError: {
title: "Connection failed",
message: "The connection could not be established",
},
},
},
secrets: {
title: "Secrets",
lastUpdated: "Last updated {date}",
secureNotice: "This secret cannot be retrieved after creation",
reset: {
title: "Reset secret",
message: "Are you sure you want to reset this secret?",
},
kind: {
username: {
label: "Username",
newLabel: "New username",
},
apiKey: {
label: "API Key",
newLabel: "New API Key",
},
password: {
label: "Password",
newLabel: "New password",
},
},
},
},
common: {
action: {
backToOverview: "Back to overview",
create: "Create",
edit: "Edit",
save: "Save",
cancel: "Cancel",
confirm: "Confirm",
},
search: {
placeholder: "Search for anything...",
nothingFound: "Nothing found",
},
noResults: "No results found",
},
widget: {
clock: {
option: {
@@ -52,12 +179,6 @@ export default {
},
},
},
common: {
search: {
placeholder: "Search for anything...",
nothingFound: "Nothing found",
},
},
management: {
metaTitle: "Management",
title: {