generated from Dicken/dickendock
round21: Startseiten-Bereiche in eine Karte zusammengefasst, Favicon-Auswahl filtert tote Icons und zeigt groessere Vorschau, Icon fuer manuelle Anpassung getauscht, Zeitstempel-Inkonsistenz Scan/Ping behoben
This commit is contained in:
@@ -328,9 +328,13 @@ export function HomePage() {
|
||||
</div>
|
||||
|
||||
{showShelf ? (
|
||||
<div className="flex w-full max-w-xl flex-col gap-6">
|
||||
<div
|
||||
className="w-full max-w-xl divide-y divide-black/[0.06] rounded-2xl border
|
||||
border-black/[0.06] bg-black/[0.015] dark:divide-white/[0.06] dark:border-white/[0.06]
|
||||
dark:bg-white/[0.02]"
|
||||
>
|
||||
{hasFavorites ? (
|
||||
<div className="flex flex-col gap-4">
|
||||
<div className="flex flex-col gap-4 p-4">
|
||||
{favoriteServices.length > 0 ? (
|
||||
<FavoritesBar
|
||||
items={favoriteServices}
|
||||
@@ -359,18 +363,20 @@ export function HomePage() {
|
||||
) : null}
|
||||
|
||||
{recentVisits && recentVisits.length > 0 ? (
|
||||
<FavoritesBar
|
||||
items={recentVisits}
|
||||
label="Zuletzt besucht"
|
||||
categoryColors={categoryColors}
|
||||
onOpen={(item) => {
|
||||
const original = recentVisits.find((r) => r.id === item.id);
|
||||
if (original) openItem(original);
|
||||
}}
|
||||
/>
|
||||
<div className="p-4">
|
||||
<FavoritesBar
|
||||
items={recentVisits}
|
||||
label="Zuletzt besucht"
|
||||
categoryColors={categoryColors}
|
||||
onOpen={(item) => {
|
||||
const original = recentVisits.find((r) => r.id === item.id);
|
||||
if (original) openItem(original);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
<div>
|
||||
<div className="p-4">
|
||||
<div className="mb-2.5 flex items-center justify-between gap-2">
|
||||
<span className="text-xs font-medium uppercase tracking-wide text-black/35 dark:text-white/35">
|
||||
Später lesen
|
||||
|
||||
@@ -382,9 +382,20 @@ function DeviceRow({ device }: { device: DeviceWithServices }) {
|
||||
{device.online ? "Online" : "Offline"}
|
||||
</span>
|
||||
<div className="text-[10px] text-black/30 dark:text-white/30">
|
||||
{device.lastScan
|
||||
? `zuletzt gesehen: ${new Date(device.lastScan).toLocaleString("de-DE")}`
|
||||
: "nie gescannt"}
|
||||
{(() => {
|
||||
// "Zuletzt gesehen" soll den neueren der beiden Zeitpunkte
|
||||
// zeigen - ein echter Scan (lastScan) oder ein reiner
|
||||
// Ping-Live-Status-Check (lastPing, siehe Einstellungen) -
|
||||
// sonst wirkt es inkonsistent, wenn der Online-Punkt frisch
|
||||
// vom Ping aktualisiert wurde, der Zeitstempel aber noch den
|
||||
// alten Scan zeigt.
|
||||
const scanTime = device.lastScan ? new Date(device.lastScan).getTime() : 0;
|
||||
const pingTime = device.lastPing ? new Date(device.lastPing).getTime() : 0;
|
||||
const latest = Math.max(scanTime, pingTime);
|
||||
if (latest === 0) return "nie gescannt";
|
||||
const label = pingTime > scanTime ? "zuletzt gesehen (Ping)" : "zuletzt gesehen";
|
||||
return `${label}: ${new Date(latest).toLocaleString("de-DE")}`;
|
||||
})()}
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-4 py-3 text-black/60 dark:text-white/60">{device.services.length}</td>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useMemo, useState, type DragEvent } from "react";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import { faFloppyDisk, faPen, faTrash, faXmark, faSort, faSortUp, faSortDown, faStar as faStarSolid, faEye, faEyeSlash, faArrowLeft, faSignature } from "@fortawesome/free-solid-svg-icons";
|
||||
import { faFloppyDisk, faPen, faTrash, faXmark, faSort, faSortUp, faSortDown, faStar as faStarSolid, faEye, faEyeSlash, faArrowLeft, faUserPen } from "@fortawesome/free-solid-svg-icons";
|
||||
import { faStar } from "@fortawesome/free-regular-svg-icons";
|
||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||
import { Button, Favicon, FaviconPicker } from "@launchpad/ui";
|
||||
@@ -398,7 +398,7 @@ function ServiceRow({
|
||||
<span className="font-medium text-black dark:text-white">{service.displayName}</span>
|
||||
{service.displayNameEditedManually ? (
|
||||
<span title="Name wurde manuell angepasst – Scan-Vorschläge dafür werden nicht mehr angezeigt">
|
||||
<FontAwesomeIcon icon={faSignature} className="text-black/40 dark:text-white/40" />
|
||||
<FontAwesomeIcon icon={faUserPen} className="text-black/40 dark:text-white/40" />
|
||||
</span>
|
||||
) : null}
|
||||
{!service.visible ? (
|
||||
@@ -429,7 +429,7 @@ function ServiceRow({
|
||||
{service.category ?? "–"}
|
||||
{service.categoryEditedManually ? (
|
||||
<span title="Kategorie wurde manuell angepasst – Scan-Vorschläge dafür werden nicht mehr angezeigt">
|
||||
<FontAwesomeIcon icon={faSignature} className="text-black/40 dark:text-white/40" />
|
||||
<FontAwesomeIcon icon={faUserPen} className="text-black/40 dark:text-white/40" />
|
||||
</span>
|
||||
) : null}
|
||||
</span>
|
||||
|
||||
Reference in New Issue
Block a user