diff --git a/README.md b/README.md index e2bf816..0eb1487 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,11 @@ statt alles über vier Bereiche verteilt. Für „Willkommen" also Kanal, Karte, Farben, Vorschau und Begrüßungstext an einem Ort. Die Adresse merkt sich die Seite (`/settings#module/welcome`). +Die Funktionen, die man dauernd anfasst, stehen zusätzlich **oben in der +Seitenleiste** unter *Meine Funktionen* — ein Klick statt Umweg übers Raster. +Welche das sind, entscheidet der Stern auf der Modul-Karte (höchstens acht, +damit die Leiste kurz bleibt). + Gebaut wird sie aus den Registern: [`src/modules.js`](src/modules.js) kennt die Felder, [`src/templates.js`](src/templates.js) die Texte, [`src/tuning.js`](src/tuning.js) die Werte — jeweils über `module` verknüpft. Eine neue Funktion bekommt ihre diff --git a/frontend/src/components/ModulePage.jsx b/frontend/src/components/ModulePage.jsx index f164e92..8ee0e55 100644 --- a/frontend/src/components/ModulePage.jsx +++ b/frontend/src/components/ModulePage.jsx @@ -7,7 +7,7 @@ import { useEffect, useState } from 'react'; import { apiGet, apiPut, apiPost } from '../api.js'; import { moduleIcon } from '../module-icons.jsx'; -import { IconArrowLeft, IconWarning, IconCheck, IconRefresh, IconChevronDown } from '../icons.jsx'; +import { IconArrowLeft, IconWarning, IconCheck, IconRefresh, IconChevronDown, IconStar } from '../icons.jsx'; /** Ein Feld aus dem Register — Art entscheidet über die Darstellung */ function Feld({ feld, value, onChange, PickSelect, channelItems, roleItems }) { @@ -64,7 +64,7 @@ function Feld({ feld, value, onChange, PickSelect, channelItems, roleItems }) { */ export default function ModulePage(props) { const { id, onBack, onToggle, form, setForm, PickSelect, channelItems, roleItems, - welcomePreviewUrl, flash, goTab, reloadSettings } = props; + welcomePreviewUrl, flash, goTab, reloadSettings, favorites, onToggleFavorite } = props; const [detail, setDetail] = useState(null); const [fehler, setFehler] = useState(false); @@ -141,6 +141,15 @@ export default function ModulePage(props) {

{detail.name}

{detail.desc}

+ + + ); + })} + + )} + {TAB_SECTIONS.map((section) => { const items = foundTabs.filter((t) => t.section === section.id); if (items.length === 0) return null; @@ -2916,7 +2971,7 @@ export default function Settings({ me }) { {items.map((t) => (