Web: Anteils-Ringe – Ring bleibt stehen, nur Legende scrollt; Ohne-MHD-Schalter in die Konfig
Bei vielen Kategorien scrollte die ganze Karte (Ring wanderte weg). Jetzt fuellt die Legende die Hoehe des Ring-Bereichs und scrollt in sich; der Ring bleibt mittig fixiert. Ablauf-Anteile: der Ohne-MHD-Schalter sass als Checkbox auf der Karte (localStorage). Jetzt als boolean-Konfig im Zahnrad-Dialog (Vorgabe an), wie die anderen Optionen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -428,16 +428,10 @@ function KarteBewegungen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------- Diagramme
|
// ---------------------------------------------------------------- Diagramme
|
||||||
function KarteAblaufRing() {
|
function KarteAblaufRing({ props: karteProps }) {
|
||||||
const { daten, fehler } = useDaten(() => api.dashboardExpirySplit());
|
const { daten, fehler } = useDaten(() => api.dashboardExpirySplit());
|
||||||
// Ob „Ohne MHD" (Gegenstände/undatierte Chargen) mitgezählt wird – gemerkt.
|
// Ob „Ohne MHD" (Gegenstände/undatierte Chargen) mitgezählt wird – Karten-Einstellung.
|
||||||
const [mitOhneMhd, setMitOhneMhd] = useState(
|
const mitOhneMhd = karteProps?.mit_ohne_mhd ?? true;
|
||||||
() => localStorage.getItem("ablauf_mit_ohne_mhd") !== "0",
|
|
||||||
);
|
|
||||||
function umschalten(on) {
|
|
||||||
setMitOhneMhd(on);
|
|
||||||
localStorage.setItem("ablauf_mit_ohne_mhd", on ? "1" : "0");
|
|
||||||
}
|
|
||||||
if (fehler) return <div className="alert error"><Icon name="alert" size={16} />{fehler}</div>;
|
if (fehler) return <div className="alert error"><Icon name="alert" size={16} />{fehler}</div>;
|
||||||
if (!daten) return <div className="empty">Lädt…</div>;
|
if (!daten) return <div className="empty">Lädt…</div>;
|
||||||
|
|
||||||
@@ -450,16 +444,7 @@ function KarteAblaufRing() {
|
|||||||
if (mitOhneMhd) {
|
if (mitOhneMhd) {
|
||||||
segmente.push({ name: "Ohne MHD", value: daten.no_date, color: tokenFarbe("--muted", "#6b7480") });
|
segmente.push({ name: "Ohne MHD", value: daten.no_date, color: tokenFarbe("--muted", "#6b7480") });
|
||||||
}
|
}
|
||||||
return (
|
return <Donut segmente={segmente} gesamtLabel="Einheiten" />;
|
||||||
<div className="ring-mit-schalter">
|
|
||||||
<label className="check-inline ring-schalter">
|
|
||||||
<input type="checkbox" checked={mitOhneMhd}
|
|
||||||
onChange={(e) => umschalten(e.target.checked)} />
|
|
||||||
<span>„Ohne MHD" einbeziehen</span>
|
|
||||||
</label>
|
|
||||||
<Donut segmente={segmente} gesamtLabel="Einheiten" />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function KarteKategorienRing({ props: karteProps }) {
|
function KarteKategorienRing({ props: karteProps }) {
|
||||||
@@ -685,6 +670,7 @@ export const KARTEN = {
|
|||||||
titel: "Ablauf-Anteile", icon: "clock", vorschau: "ring",
|
titel: "Ablauf-Anteile", icon: "clock", vorschau: "ring",
|
||||||
beschreibung: "Ring: in Ordnung, bald ablaufend, abgelaufen",
|
beschreibung: "Ring: in Ordnung, bald ablaufend, abgelaufen",
|
||||||
standard: { w: 4, h: 6 }, min: { w: 3, h: 5 },
|
standard: { w: 4, h: 6 }, min: { w: 3, h: 5 },
|
||||||
|
config: [{ key: "mit_ohne_mhd", type: "boolean", label: "„Ohne MHD“ einbeziehen", default: true }],
|
||||||
komponente: KarteAblaufRing,
|
komponente: KarteAblaufRing,
|
||||||
},
|
},
|
||||||
"category-donut": {
|
"category-donut": {
|
||||||
|
|||||||
@@ -778,13 +778,10 @@ select.zeitraum:hover { color: var(--text); }
|
|||||||
gap: var(--sp-4); flex-wrap: wrap;
|
gap: var(--sp-4); flex-wrap: wrap;
|
||||||
flex: 1; min-height: 0;
|
flex: 1; min-height: 0;
|
||||||
}
|
}
|
||||||
/* Ablauf-Ring mit „Ohne MHD"-Umschalter darueber; der Ring fuellt den Rest. */
|
/* Bei vielen Kategorien (Detailansicht) soll der Ring stehen bleiben und nur die
|
||||||
.ring-mit-schalter { display: flex; flex-direction: column; flex: 1; min-height: 0; }
|
Legende scrollen – nicht die ganze Karte. Deshalb füllt die Legende die Höhe
|
||||||
.ring-schalter { flex: 0 0 auto; justify-content: flex-end; margin: 0 0 4px; font-size: 0.78rem; color: var(--muted); }
|
des Ring-Bereichs und scrollt in sich; der Ring bleibt mittig fixiert. */
|
||||||
/* Der Umschalter ist eine Karten-Einstellung: nur sichtbar, wenn man das
|
.chart-donut .chart-legend { align-self: stretch; min-height: 0; overflow-y: auto; }
|
||||||
Dashboard gerade bearbeitet. Die Wahl wirkt trotzdem in der normalen Ansicht. */
|
|
||||||
.ring-mit-schalter .ring-schalter { display: none; }
|
|
||||||
.dash-grid.editing .ring-mit-schalter .ring-schalter { display: flex; }
|
|
||||||
.donut-svg { width: 160px; height: 160px; flex: 0 0 auto; }
|
.donut-svg { width: 160px; height: 160px; flex: 0 0 auto; }
|
||||||
.donut-svg circle { transition: stroke-width 120ms ease; cursor: default; }
|
.donut-svg circle { transition: stroke-width 120ms ease; cursor: default; }
|
||||||
.donut-value { font-size: 20px; font-weight: 680; fill: var(--text); }
|
.donut-value { font-size: 20px; font-weight: 680; fill: var(--text); }
|
||||||
|
|||||||
Reference in New Issue
Block a user