From 546810a6a6a7cd5dc8ccb59bed4bd4d442fa0796 Mon Sep 17 00:00:00 2001
From: henryk86 <166761451+henryk86@users.noreply.github.com>
Date: Fri, 9 Oct 2026 19:27:47 +0200
Subject: [PATCH 01/25] add hideInNav flag to plugins (optional)
---
public/translations/de.json | 44 +++++++-------
public/translations/en.json | 2 +
public/translations/es.json | 44 +++++++-------
public/translations/fr.json | 44 +++++++-------
public/translations/it.json | 44 +++++++-------
public/translations/pl.json | 44 +++++++-------
.../buttons/PluginTemplateDownloadButton.tsx | 4 +-
src/components/community/CommunitySubNav.tsx | 36 +++++------
.../community/plugincard/PluginCard.tsx | 59 +++++++++++++++----
.../community/pluginlist/PluginList.tsx | 26 ++++----
.../pluginlist/modals/PluginHelpModal.tsx | 4 +-
src/components/home/HomeSubNav.tsx | 2 +-
src/components/settings/SettingsSubNav.tsx | 2 +-
.../tonieboxes/TonieboxesSubNav.tsx | 2 +-
src/components/tonies/ToniesSubNav.tsx | 2 +-
src/provider/TeddyCloudProvider.tsx | 1 +
src/types/pluginsMetaTypes.ts | 1 +
17 files changed, 206 insertions(+), 155 deletions(-)
diff --git a/public/translations/de.json b/public/translations/de.json
index bb77ab82..5e5574dd 100644
--- a/public/translations/de.json
+++ b/public/translations/de.json
@@ -21,11 +21,11 @@
"password": "Passwort",
"passwordMin": "Mindestens 4 Zeichen",
"passwordRequired": "Passwort ist erforderlich",
- "username": "Benutzername",
- "usernameRequired": "Benutzername ist erforderlich",
+ "retry": "Erneut versuchen",
"statusLoadFailed": "Authentifizierungsstatus konnte nicht geladen werden",
"statusLoadFailedDetails": "Der Authentifizierungsstatus konnte nicht geladen werden. Prüfe die Verbindung zu TeddyCloud und versuche es erneut.",
- "retry": "Erneut versuchen"
+ "username": "Benutzername",
+ "usernameRequired": "Benutzername ist erforderlich"
},
"common": {
"cancel": "Abbrechen"
@@ -142,6 +142,7 @@
"fields": {
"author": "Autor des Plugins",
"description": "Kurze Zusammenfassung des Plugins",
+ "hideInNav": "Flag, das angibt, ob das Plugin in der Navigation ausgeblendet werden soll (true/false)",
"icon": "Das für das Plugin verwendete Icon. Muss eine gültige Ant Design Icon-Komponente von https://ant.design/components/icon sein, z. B. TrophyOutlined, TagsOutlined",
"pluginHomepage": "Homepage des Plugins",
"pluginName": "Der Titel, der in Menüs angezeigt wird (erforderlich)",
@@ -157,6 +158,7 @@
},
"helpButton": "Hilfe",
"helpTextCreatePlugin": "Ein Text darüber, wie man ein Plugin erstellt",
+ "hidden": "Versteckt",
"installedPlugins": "Installierte Plugins",
"intro": "Hier findest du deine hinzugefügten TeddyCloud Plugins und kannst neue Plugins von dir oder der TeddyCloud Community hinzufügen!",
"navigationTitle": "TC Plugins",
@@ -390,10 +392,18 @@
"filter": "Filter im aktuellen Ordner",
"help": {
"actionItems": {
+ "assignToTonie": {
+ "text": "Weist die ausgewählte Datei einem Tonie/Tag als Inhalt zu.",
+ "title": "Tonie zuweisen"
+ },
"deleteFileFolder": {
"text": "Löscht die Datei oder den Ordner (nur wenn der Ordner leer ist). Hinweis: Wenn diese Datei einem Tonie/Tag zugewiesen ist, wird der Verweis nicht aktualisiert.",
"title": "Datei/Ordner löschen"
},
+ "downloadFile": {
+ "text": "Lädt die ausgewählte Datei herunter oder lädt TAF-Dateien als OGG-Datei herunter.",
+ "title": "Datei herunterladen"
+ },
"duplicateTAPFile": {
"text": "Erstellt eine Kopie der ausgewählten TAP-Datei.",
"title": "TAP-Datei duplizieren"
@@ -406,6 +416,16 @@
"text": "Öffnet den Tonie-Audio-Playlist-Editor, um TAP-Dateien zu verwalten.",
"title": "TAP-Playlist bearbeiten"
},
+ "markAsListened": {
+ "listened": {
+ "text": "Die Datei ist derzeit als gehört markiert. Klicke, um sie als nicht gehört zu markieren.",
+ "title": "Als nicht gehört markieren"
+ },
+ "unlistened": {
+ "text": "Die Datei ist derzeit als nicht gehört markiert. Klicke, um sie als gehört zu markieren.",
+ "title": "Als gehört markieren"
+ }
+ },
"migrateToAudioIdFolder": {
"text": "Verschiebt die TAF-Datei in den Ordner 'by/audioId' der Library und aktualisiert die Quelle in der JSON-Datei.",
"title": "TAF-Datei nach AudioId in die Library verschieben"
@@ -425,24 +445,6 @@
"renameFile": {
"text": "Benennt die Datei um. Hinweis: Wenn diese Datei einem Tonie/Tag zugewiesen ist, wird der Verweis nicht automatisch aktualisiert.",
"title": "Datei umbenennen"
- },
- "downloadFile": {
- "title": "Datei herunterladen",
- "text": "Lädt die ausgewählte Datei herunter oder lädt TAF-Dateien als OGG-Datei herunter."
- },
- "markAsListened": {
- "unlistened": {
- "title": "Als gehört markieren",
- "text": "Die Datei ist derzeit als nicht gehört markiert. Klicke, um sie als gehört zu markieren."
- },
- "listened": {
- "title": "Als nicht gehört markieren",
- "text": "Die Datei ist derzeit als gehört markiert. Klicke, um sie als nicht gehört zu markieren."
- }
- },
- "assignToTonie": {
- "title": "Tonie zuweisen",
- "text": "Weist die ausgewählte Datei einem Tonie/Tag als Inhalt zu."
}
},
"actionItemsMulti": {
diff --git a/public/translations/en.json b/public/translations/en.json
index 7f60e20d..41241e66 100644
--- a/public/translations/en.json
+++ b/public/translations/en.json
@@ -142,6 +142,7 @@
"fields": {
"author": "Author of the plugin",
"description": "Short summary of the plugin",
+ "hideInNav": "Flag indicating whether the plugin should be hidden in navigation (true/false)",
"icon": "The icon used for the plugin. Must be a valid Ant Design icon component from https://ant.design/components/icon, e.g. TrophyOutlined, TagsOutlined",
"pluginHomepage": "Homepage of the plugin",
"pluginName": "The title shown in menus (mandatory)",
@@ -157,6 +158,7 @@
},
"helpButton": "Help",
"helpTextCreatePlugin": "Some Text about how to create a plugin",
+ "hidden": "Hidden",
"installedPlugins": "Installed plugins",
"intro": "Here you find your added TeddyCloud plugins and you can add new plugins provided by you or the TeddyCloud community!",
"navigationTitle": "TC Plugins",
diff --git a/public/translations/es.json b/public/translations/es.json
index 62330ec8..abd10683 100644
--- a/public/translations/es.json
+++ b/public/translations/es.json
@@ -21,11 +21,11 @@
"password": "Contraseña",
"passwordMin": "Al menos 4 caracteres",
"passwordRequired": "La contraseña es obligatoria",
- "username": "Usuario",
- "usernameRequired": "El usuario es obligatorio",
+ "retry": "Reintentar",
"statusLoadFailed": "No se pudo cargar el estado de autenticación",
"statusLoadFailedDetails": "No se pudo cargar el estado de autenticación. Comprueba la conexión con TeddyCloud e inténtalo de nuevo.",
- "retry": "Reintentar"
+ "username": "Usuario",
+ "usernameRequired": "El usuario es obligatorio"
},
"common": {
"cancel": "Cancelar"
@@ -142,6 +142,7 @@
"fields": {
"author": "Autor del plugin",
"description": "Resumen breve del plugin",
+ "hideInNav": "Indicador que define si el plugin debe ocultarse en la navegación (true/false)",
"icon": "El icono utilizado para el plugin. Debe ser un componente de icono válido de Ant Design de https://ant.design/components/icon, p. ej. TrophyOutlined, TagsOutlined",
"pluginHomepage": "Página principal del plugin",
"pluginName": "El título que aparece en los menús (obligatorio)",
@@ -157,6 +158,7 @@
},
"helpButton": "Ayuda",
"helpTextCreatePlugin": "Texto sobre cómo crear un plugin",
+ "hidden": "Oculto",
"installedPlugins": "Plugins instalados",
"intro": "Aquí puedes ver tus plugins añadidos a TeddyCloud y también agregar nuevos plugins creados por ti o por la comunidad TeddyCloud.",
"navigationTitle": "Plugins TC",
@@ -390,10 +392,18 @@
"filter": "Filtrar dentro de la carpeta actual",
"help": {
"actionItems": {
+ "assignToTonie": {
+ "text": "Asigna el archivo seleccionado como contenido a un Tonie/Tag.",
+ "title": "Asignar a Tonie"
+ },
"deleteFileFolder": {
"text": "Elimina el archivo o carpeta (solo si la carpeta está vacía). Nota: Si este archivo está asignado a un Tonie/Tag, la referencia no se actualizará.",
"title": "Eliminar archivo/carpeta"
},
+ "downloadFile": {
+ "text": "Descarga el archivo seleccionado o, en el caso de archivos TAF, lo descarga como archivo OGG.",
+ "title": "Descargar archivo"
+ },
"duplicateTAPFile": {
"text": "Crea una copia del archivo TAP seleccionado.",
"title": "Duplicar archivo TAP"
@@ -406,6 +416,16 @@
"text": "Abre el editor de TeddyAudio Playlist de Tonie para administrar archivos TAP.",
"title": "Editar lista de reproducción TAP"
},
+ "markAsListened": {
+ "listened": {
+ "text": "El archivo está marcado actualmente como escuchado. Haz clic para marcarlo como no escuchado.",
+ "title": "Marcar como no escuchado"
+ },
+ "unlistened": {
+ "text": "El archivo está marcado actualmente como no escuchado. Haz clic para marcarlo como escuchado.",
+ "title": "Marcar como escuchado"
+ }
+ },
"migrateToAudioIdFolder": {
"text": "Mueve el archivo TAF a la carpeta 'by/audioId' de la biblioteca y actualiza la fuente en el archivo JSON.",
"title": "Migrar archivo TAF a la biblioteca por AudioId"
@@ -425,24 +445,6 @@
"renameFile": {
"text": "Renombra el archivo. Nota: Si este archivo está asignado a un Tonie/Tag, la referencia no se actualizará automáticamente.",
"title": "Renombrar archivo"
- },
- "downloadFile": {
- "title": "Descargar archivo",
- "text": "Descarga el archivo seleccionado o, en el caso de archivos TAF, lo descarga como archivo OGG."
- },
- "markAsListened": {
- "unlistened": {
- "title": "Marcar como escuchado",
- "text": "El archivo está marcado actualmente como no escuchado. Haz clic para marcarlo como escuchado."
- },
- "listened": {
- "title": "Marcar como no escuchado",
- "text": "El archivo está marcado actualmente como escuchado. Haz clic para marcarlo como no escuchado."
- }
- },
- "assignToTonie": {
- "title": "Asignar a Tonie",
- "text": "Asigna el archivo seleccionado como contenido a un Tonie/Tag."
}
},
"actionItemsMulti": {
diff --git a/public/translations/fr.json b/public/translations/fr.json
index 95c5ae65..1a1f646e 100644
--- a/public/translations/fr.json
+++ b/public/translations/fr.json
@@ -21,11 +21,11 @@
"password": "Mot de passe",
"passwordMin": "Au moins 4 caractères",
"passwordRequired": "Le mot de passe est requis",
- "username": "Nom d'utilisateur",
- "usernameRequired": "Le nom d'utilisateur est requis",
+ "retry": "Réessayer",
"statusLoadFailed": "Impossible de charger l’état d’authentification",
"statusLoadFailedDetails": "L’état d’authentification n’a pas pu être chargé. Vérifiez la connexion à TeddyCloud et réessayez.",
- "retry": "Réessayer"
+ "username": "Nom d'utilisateur",
+ "usernameRequired": "Le nom d'utilisateur est requis"
},
"common": {
"cancel": "Annuler"
@@ -142,6 +142,7 @@
"fields": {
"author": "Auteur du plugin",
"description": "Résumé court du plugin",
+ "hideInNav": "Indicateur précisant si le plugin doit être masqué dans la navigation (true/false)",
"icon": "L'icône utilisée pour le plugin. Doit être un composant d'icône Ant Design valide depuis https://ant.design/components/icon, par ex. TrophyOutlined, TagsOutlined",
"pluginHomepage": "Page d'accueil du plugin",
"pluginName": "Le titre affiché dans les menus (obligatoire)",
@@ -157,6 +158,7 @@
},
"helpButton": "Aide",
"helpTextCreatePlugin": "Un texte sur la création d'un plugin",
+ "hidden": "Masqué",
"installedPlugins": "Plugins installés",
"intro": "Vous trouverez ici vos plugins TeddyCloud ajoutés et pouvez ajouter de nouveaux plugins fournis par vous-même ou la communauté TeddyCloud !",
"navigationTitle": "Plugins TC",
@@ -390,10 +392,18 @@
"filter": "Filtrer dans le dossier actuel",
"help": {
"actionItems": {
+ "assignToTonie": {
+ "text": "Assigne le fichier sélectionné comme contenu à un Tonie/Tag.",
+ "title": "Assigner à un Tonie"
+ },
"deleteFileFolder": {
"text": "Supprime le fichier ou le dossier (seulement si le dossier est vide). Remarque : si ce fichier est attribué à un Tonie/Tag, la référence ne sera pas mise à jour.",
"title": "Supprimer le fichier/dossier"
},
+ "downloadFile": {
+ "text": "Télécharge le fichier sélectionné ou, pour les fichiers TAF, le télécharge au format OGG.",
+ "title": "Télécharger le fichier"
+ },
"duplicateTAPFile": {
"text": "Crée une copie du fichier TAP sélectionné.",
"title": "Dupliquer le fichier TAP"
@@ -406,6 +416,16 @@
"text": "Ouvre l'éditeur de TeddyAudio Playlist pour gérer les fichiers TAP.",
"title": "Modifier la liste de lecture TAP"
},
+ "markAsListened": {
+ "listened": {
+ "text": "Le fichier est actuellement marqué comme écouté. Cliquez pour le marquer comme non écouté.",
+ "title": "Marquer comme non écouté"
+ },
+ "unlistened": {
+ "text": "Le fichier est actuellement marqué comme non écouté. Cliquez pour le marquer comme écouté.",
+ "title": "Marquer comme écouté"
+ }
+ },
"migrateToAudioIdFolder": {
"text": "Déplace le fichier TAF dans le dossier 'by/audioId' de la bibliothèque et met à jour la source dans le fichier JSON.",
"title": "Migrer le fichier TAF dans la bibliothèque par AudioId"
@@ -425,24 +445,6 @@
"renameFile": {
"text": "Renomme le fichier. Remarque : si ce fichier est attribué à un Tonie/Tag, la référence ne sera pas mise à jour automatiquement.",
"title": "Renommer le fichier"
- },
- "downloadFile": {
- "title": "Télécharger le fichier",
- "text": "Télécharge le fichier sélectionné ou, pour les fichiers TAF, le télécharge au format OGG."
- },
- "markAsListened": {
- "unlistened": {
- "title": "Marquer comme écouté",
- "text": "Le fichier est actuellement marqué comme non écouté. Cliquez pour le marquer comme écouté."
- },
- "listened": {
- "title": "Marquer comme non écouté",
- "text": "Le fichier est actuellement marqué comme écouté. Cliquez pour le marquer comme non écouté."
- }
- },
- "assignToTonie": {
- "title": "Assigner à un Tonie",
- "text": "Assigne le fichier sélectionné comme contenu à un Tonie/Tag."
}
},
"actionItemsMulti": {
diff --git a/public/translations/it.json b/public/translations/it.json
index 79b97ed7..e21c595f 100644
--- a/public/translations/it.json
+++ b/public/translations/it.json
@@ -21,11 +21,11 @@
"password": "Password",
"passwordMin": "Almeno 4 caratteri",
"passwordRequired": "La password è obbligatoria",
- "username": "Nome utente",
- "usernameRequired": "Il nome utente è obbligatorio",
+ "retry": "Riprova",
"statusLoadFailed": "Impossibile caricare lo stato di autenticazione",
"statusLoadFailedDetails": "Impossibile caricare lo stato di autenticazione. Controlla la connessione a TeddyCloud e riprova.",
- "retry": "Riprova"
+ "username": "Nome utente",
+ "usernameRequired": "Il nome utente è obbligatorio"
},
"common": {
"cancel": "Annulla"
@@ -142,6 +142,7 @@
"fields": {
"author": "Autore del plugin",
"description": "Breve descrizione del plugin",
+ "hideInNav": "Flag che indica se il plugin deve essere nascosto nella navigazione (true/false)",
"icon": "L'icona utilizzata per il plugin. Deve essere un componente icona Ant Design valido da https://ant.design/components/icon, ad es. TrophyOutlined, TagsOutlined",
"pluginHomepage": "Homepage del plugin",
"pluginName": "Il titolo mostrato nei menu (obbligatorio)",
@@ -157,6 +158,7 @@
},
"helpButton": "Aiuto",
"helpTextCreatePlugin": "Testo su come creare un plugin",
+ "hidden": "Nascosto",
"installedPlugins": "Plugin installati",
"intro": "Qui trovi i plugin TeddyCloud che hai aggiunto e puoi aggiungere nuovi plugin forniti da te o dalla comunità TeddyCloud!",
"navigationTitle": "Plugin TC",
@@ -390,10 +392,18 @@
"filter": "Filtra nella cartella corrente",
"help": {
"actionItems": {
+ "assignToTonie": {
+ "text": "Assegna il file selezionato come contenuto a un Tonie/Tag.",
+ "title": "Assegna a Tonie"
+ },
"deleteFileFolder": {
"text": "Elimina il file o la cartella (solo se la cartella è vuota). Nota: se questo file è assegnato a un Tonie/Tag, il riferimento non verrà aggiornato.",
"title": "Elimina file/cartella"
},
+ "downloadFile": {
+ "text": "Scarica il file selezionato oppure, per i file TAF, lo scarica come file OGG.",
+ "title": "Scarica file"
+ },
"duplicateTAPFile": {
"text": "Crea un duplicato del file TAP selezionato.",
"title": "Duplica file TAP"
@@ -406,6 +416,16 @@
"text": "Apre l'editor di playlist TeddyAudio per gestire i file TAP.",
"title": "Modifica playlist TAP"
},
+ "markAsListened": {
+ "listened": {
+ "text": "Il file è attualmente segnato come ascoltato. Fai clic per segnarlo come non ascoltato.",
+ "title": "Segna come non ascoltato"
+ },
+ "unlistened": {
+ "text": "Il file è attualmente segnato come non ascoltato. Fai clic per segnarlo come ascoltato.",
+ "title": "Segna come ascoltato"
+ }
+ },
"migrateToAudioIdFolder": {
"text": "Sposta il file TAF nella cartella 'by/audioId' della libreria e aggiorna la sorgente nel file JSON.",
"title": "Migra file TAF nella libreria per AudioId"
@@ -425,24 +445,6 @@
"renameFile": {
"text": "Rinomina il file. Nota: se questo file è assegnato a un Tonie/Tag, il riferimento non verrà aggiornato automaticamente.",
"title": "Rinomina file"
- },
- "downloadFile": {
- "title": "Scarica file",
- "text": "Scarica il file selezionato oppure, per i file TAF, lo scarica come file OGG."
- },
- "markAsListened": {
- "unlistened": {
- "title": "Segna come ascoltato",
- "text": "Il file è attualmente segnato come non ascoltato. Fai clic per segnarlo come ascoltato."
- },
- "listened": {
- "title": "Segna come non ascoltato",
- "text": "Il file è attualmente segnato come ascoltato. Fai clic per segnarlo come non ascoltato."
- }
- },
- "assignToTonie": {
- "title": "Assegna a Tonie",
- "text": "Assegna il file selezionato come contenuto a un Tonie/Tag."
}
},
"actionItemsMulti": {
diff --git a/public/translations/pl.json b/public/translations/pl.json
index f77a6d65..c80f5a34 100644
--- a/public/translations/pl.json
+++ b/public/translations/pl.json
@@ -21,11 +21,11 @@
"password": "Hasło",
"passwordMin": "Co najmniej 4 znaki",
"passwordRequired": "Hasło jest wymagane",
- "username": "Nazwa użytkownika",
- "usernameRequired": "Nazwa użytkownika jest wymagana",
+ "retry": "Spróbuj ponownie",
"statusLoadFailed": "Nie udało się wczytać stanu uwierzytelniania",
"statusLoadFailedDetails": "Nie udało się wczytać stanu uwierzytelniania. Sprawdź połączenie z TeddyCloud i spróbuj ponownie.",
- "retry": "Spróbuj ponownie"
+ "username": "Nazwa użytkownika",
+ "usernameRequired": "Nazwa użytkownika jest wymagana"
},
"common": {
"cancel": "Anuluj"
@@ -142,6 +142,7 @@
"fields": {
"author": "Autor wtyczki",
"description": "Krótki opis wtyczki",
+ "hideInNav": "Flaga określająca, czy wtyczka ma być ukryta w nawigacji (true/false)",
"icon": "Ikona używana dla wtyczki. Musi być prawidłowym komponentem ikony Ant Design z https://ant.design/components/icon, np. TrophyOutlined, TagsOutlined",
"pluginHomepage": "Strona domowa wtyczki",
"pluginName": "Tytuł wyświetlany w menu (wymagane)",
@@ -157,6 +158,7 @@
},
"helpButton": "Pomoc",
"helpTextCreatePlugin": "Przykładowy tekst o tym, jak stworzyć wtyczkę",
+ "hidden": "Ukryta",
"installedPlugins": "Zainstalowane wtyczki",
"intro": "Tutaj znajdziesz dodane przez Ciebie wtyczki TeddyCloud oraz możesz dodać nowe wtyczki udostępnione przez Ciebie lub społeczność TeddyCloud!",
"navigationTitle": "Wtyczki TC",
@@ -390,10 +392,18 @@
"filter": "Filtruj w bieżącym folderze",
"help": {
"actionItems": {
+ "assignToTonie": {
+ "text": "Przypisuje wybrany plik jako zawartość do Tonie/Taga.",
+ "title": "Przypisz do Tonie"
+ },
"deleteFileFolder": {
"text": "Usuwa plik lub folder (tylko jeśli folder jest pusty). Uwaga: jeśli ten plik jest przypisany do Tonie/Taga, odwołanie nie zostanie zaktualizowane.",
"title": "Usuń plik/folder"
},
+ "downloadFile": {
+ "text": "Pobiera wybrany plik lub, w przypadku plików TAF, pobiera go jako plik OGG.",
+ "title": "Pobierz plik"
+ },
"duplicateTAPFile": {
"text": "Tworzy duplikat wybranego pliku TAP.",
"title": "Duplikuj plik TAP"
@@ -406,6 +416,16 @@
"text": "Otwiera edytor playlist TeddyAudio do zarządzania plikami TAP.",
"title": "Edytuj playlistę TAP"
},
+ "markAsListened": {
+ "listened": {
+ "text": "Plik jest obecnie oznaczony jako odsłuchany. Kliknij, aby oznaczyć go jako nieodsłuchany.",
+ "title": "Oznacz jako nieodsłuchane"
+ },
+ "unlistened": {
+ "text": "Plik jest obecnie oznaczony jako nieodsłuchany. Kliknij, aby oznaczyć go jako odsłuchany.",
+ "title": "Oznacz jako odsłuchane"
+ }
+ },
"migrateToAudioIdFolder": {
"text": "Przenosi plik TAF do folderu biblioteki 'by/audioId' i aktualizuje źródło w pliku JSON.",
"title": "Migruj plik TAF do biblioteki wg AudioId"
@@ -425,24 +445,6 @@
"renameFile": {
"text": "Zmienia nazwę pliku. Uwaga: jeśli ten plik jest przypisany do Tonie/Taga, odwołanie nie zostanie zaktualizowane automatycznie.",
"title": "Zmień nazwę pliku"
- },
- "downloadFile": {
- "title": "Pobierz plik",
- "text": "Pobiera wybrany plik lub, w przypadku plików TAF, pobiera go jako plik OGG."
- },
- "markAsListened": {
- "unlistened": {
- "title": "Oznacz jako odsłuchane",
- "text": "Plik jest obecnie oznaczony jako nieodsłuchany. Kliknij, aby oznaczyć go jako odsłuchany."
- },
- "listened": {
- "title": "Oznacz jako nieodsłuchane",
- "text": "Plik jest obecnie oznaczony jako odsłuchany. Kliknij, aby oznaczyć go jako nieodsłuchany."
- }
- },
- "assignToTonie": {
- "title": "Przypisz do Tonie",
- "text": "Przypisuje wybrany plik jako zawartość do Tonie/Taga."
}
},
"actionItemsMulti": {
diff --git a/src/components/common/buttons/PluginTemplateDownloadButton.tsx b/src/components/common/buttons/PluginTemplateDownloadButton.tsx
index deafddc5..62de66ee 100644
--- a/src/components/common/buttons/PluginTemplateDownloadButton.tsx
+++ b/src/components/common/buttons/PluginTemplateDownloadButton.tsx
@@ -12,7 +12,8 @@ const createPluginJson = (): string =>
"standalone": false,
"pluginHomepage": "Homepage of the plugin (optionally)",
"teddyCloudSection": "one of: home|tonies|tonieboxes|settings|community (optionally)",
- "icon": "name of an icon from Ant Design icons (optional)"
+ "icon": "name of an icon from Ant Design icons (optional)",
+ "hideInNav": false
}`;
const createScriptJs = (): string =>
@@ -430,6 +431,7 @@ You can add more files as needed, for example:
- \`pluginHomepage\`: Optional project or documentation URL
- \`teddyCloudSection\`: Optional section of the TeddyCloud UI (home|tonies|tonieboxes|settings|community)
- \`icon\`: Optional Ant Design icon name
+- \`hideInNav\`: Optional boolean flag to hide the plugin in navigation (true/false, no quotes!)
---
diff --git a/src/components/community/CommunitySubNav.tsx b/src/components/community/CommunitySubNav.tsx
index ef4eec32..5face314 100644
--- a/src/components/community/CommunitySubNav.tsx
+++ b/src/components/community/CommunitySubNav.tsx
@@ -48,25 +48,27 @@ export const CommunitySubNav = () => {
const { plugins } = useTeddyCloud();
- const pluginItems = plugins.map((plugin) => ({
- key: `tcplugins-${plugin.pluginId}`,
- label: (
- {
- setNavOpen(false);
- setSubNavOpen(false);
- }}
- >
- {plugin.pluginName}
-
- ),
- icon: React.createElement(plugin.icon),
- title: plugin.pluginName,
- }));
+ const pluginItems = plugins
+ .filter((p) => !p.hideInNav)
+ .map((plugin) => ({
+ key: `tcplugins-${plugin.pluginId}`,
+ label: (
+ {
+ setNavOpen(false);
+ setSubNavOpen(false);
+ }}
+ >
+ {plugin.pluginName}
+
+ ),
+ icon: React.createElement(plugin.icon),
+ title: plugin.pluginName,
+ }));
const filteredPluginItems = plugins
- .filter((p) => p.teddyCloudSection === TeddyCloudSection.Community)
+ .filter((p) => p.teddyCloudSection === TeddyCloudSection.Community && !p.hideInNav)
.map((plugin) => ({
key: `plugin-${plugin.pluginId}`,
label: (
diff --git a/src/components/community/plugincard/PluginCard.tsx b/src/components/community/plugincard/PluginCard.tsx
index 94a8b89a..40f3c0c5 100644
--- a/src/components/community/plugincard/PluginCard.tsx
+++ b/src/components/community/plugincard/PluginCard.tsx
@@ -1,5 +1,5 @@
-import { Card, Typography, Badge, Tooltip, theme } from "antd";
-import { DesktopOutlined, HomeOutlined, DeleteOutlined } from "@ant-design/icons";
+import { Card, Typography, Badge, Tooltip, theme, Tag } from "antd";
+import { DesktopOutlined, HomeOutlined, DeleteOutlined, TagFilled } from "@ant-design/icons";
import { useTranslation } from "react-i18next";
import { canHover } from "../../../utils/browser/browserUtils";
import { withBase } from "../../../utils/basePath";
@@ -40,14 +40,40 @@ export const PluginCard: React.FC = ({
const titleContent = plugin.teddyCloudSection ? (
-