You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.5 KiB
TypeScript

// frontend/components/notify/GuardPanel.tsx — 집중 보호 · 묶음 배달
"use client";
import { Icon } from "@/components/Icon";
import type { Digest, NotifyGuard } from "@/lib/types";
export function GuardPanel({
guard,
digests,
onToggle,
}: {
guard: NotifyGuard;
digests: Digest[];
onToggle: () => void;
}) {
const on = guard.on;
return (
<div className="board">
<section className="card sp2">
<div className="ch">
<div className="ico">
<Icon name="shield" />
</div>
<div className="htext">
<h3> · </h3>
<div className="sub">, </div>
</div>
</div>
<div className={"gd-hold" + (on ? "" : " off")}>
<div className="gd-ic">
<Icon name="target" />
</div>
<div className="gd-body">
{on ? (
<>
<div className="gd-t"> {guard.until}</div>
<div className="gd-s"> {guard.held} · </div>
</>
) : (
<>
<div className="gd-t"> </div>
<div className="gd-s">
·
</div>
</>
)}
</div>
<button
className={"sw" + (on ? " on" : "")}
onClick={onToggle}
aria-label="집중 보호 켜기/끄기"
aria-pressed={on}
/>
</div>
<div className="gd-quiet">
<Icon name="moon" />
<span> </span>
<b>{guard.quiet}</b>
<span className="hint">·VIP </span>
</div>
<div className="gd-sec"> </div>
<div className="dg2-list">
{digests.map((d) => (
<div className={"dg2-row" + (d.done ? " done" : "")} key={d.id}>
<span className="dg2-time">{d.time}</span>
<div className="dg2-body">
<div className="dg2-name">
{d.name}
{d.done ? " — 전달됨" : ""}
</div>
<div className="dg2-desc">{d.desc}</div>
</div>
<span className="dg2-n">{d.count}</span>
</div>
))}
</div>
</section>
</div>
);
}