Files
PacketStation/frontend/src/packet/PrintMenu.tsx
T
spencermandClaude Opus 5.5 70a97398f1
ci / server (pull_request) Successful in 12m48s
ci / frontend (pull_request) Successful in 54s
ci / image (pull_request) Skipped
ci / e2e (pull_request) Successful in 4m38s
Build Seth's changes C1 to C11 (Gitea issues 1, 8, 18, 23, 24, 25, 27, 31, 32, 33, 36)
- C1 (issue 1): over target follows VISUAL ticket hours, not the timer.
- C2 (issue 24): a Q.C. reject always needs a reason; accept needs an NCR number after a reject without one.
- C3 (issue 25): an incomplete unit ITP blocks filing.
- C4 (issue 27): prints open the print dialog on the page, no new tab.
- C5 (issue 31): filing is blocked while VISUAL shows a work order open; the feed sets vclosed on VISUAL packets.
- C6 (issue 8): the data book leaves out the history pages.
- C7 (issue 18): the supervisor approves each received short; accept and filing wait for it.
- C8 (issue 23): per-department checklists, edited by the department supervisor or Admin, frozen at START.
- C9 (issue 32): Q.C. and Clerical may run the stamp check.
- C10 (issue 33): the PM screen and reports are for PS-ProjectMgmt and Admin only.
- C11 (issue 36): the Stall screen lists the packets assigned to the welder, at the supervisor's stall.

Migration 0011. Docs: PLAN (also issue 9 confirmed, issue 4 asked), POLICY, SECURITY, SCHEMA, FEED, README, CHANGELOG.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 16:36:49 -06:00

45 lines
1.5 KiB
TypeScript

import { useId } from "react";
import type { PacketRead } from "../api/types";
import { Sheet } from "../components/Sheet";
import { openPrint, printRows } from "./closeUtil";
/** The print menu: one row per print kind. A row closes the sheet and opens the print dialog on the stamped copy. */
export function PrintMenu({ p, sub, onClose }: { p: PacketRead; sub: string; onClose: () => void }) {
const base = useId();
const rows = printRows(p);
return (
<Sheet title="Print" sub={sub} onClose={onClose}>
<div className="ck">
{rows.map((r) => (
<button
key={r.kind}
type="button"
className="ck-item prow"
aria-label={r.label}
aria-describedby={`${base}-${r.kind}`}
onClick={() => {
onClose();
openPrint(p.id, r.kind);
}}
>
<span className="t">
<b>{r.label}</b>
<span className="small muted" id={`${base}-${r.kind}`}>
{r.desc}
</span>
</span>
</button>
))}
</div>
<div className="small muted">
Every printed page is stamped with who printed it and when, plus &quot;verify revision before use&quot;. Printing is recorded.
</div>
<div className="sheet-acts start">
<button className="btn ghost" type="button" onClick={onClose}>
Cancel
</button>
</div>
</Sheet>
);
}