Prepare → open PDF and cloud print status
Printed documents stay server PDFs opened in a new tab through a short-lived signed link (T001 Q26): prepare → ready (expires) → open, and expired → prepare again. Cloud print to the Shanghai agent: queued → sent → printed, or failed + reprint.
Covers: M04. Exports: DocumentLink, PrintJobStatus.
Anatomy
The component as it sits in the product: English, compact, real data shapes.
States
8 states, left to right, top to bottom. A mock poll never finishes, so each state is drawn on purpose.
Density
Compact (2b ultra, the default) and comfortable, side by side. Same markup, only the density tokens change.
English · 中文
Staff pick en or cn (T001 Q25). Labels arrive localised; CJK falls back to PingFang SC / Noto Sans SC.
Long string · permission denied
The long-string case (PL-063) and what a role without the permission sees (the server decides; T003).
Both apps
One @rj/admin-kit component, two themes: the Laravel admin (navy pinned) and the DTC admin (kit v4 Midnight green), by token swap only.
Contract
The @rj/admin-kit API for this family. Mirrored in CONTRACT.md.
- Export
DocumentLink·@rj/admin-kit- Props
prepare(op returning {url, expires_at}) ·label- States
- idle · preparing · ready (countdown) · expired · error
- shadcn / Radix
- Button + Badge
- Package underneath
- useMutation + window.open (no PDF library)
- Accessibility
- announces “PDF opened in a new tab”
- API operations
- admin.orders.print-url → admin.signed.orders.print · admin.orders.markup-pdf-url · admin.orders.bulk-print-url · admin.orders.print-jobs.pdf-url · admin.shipping.containers.ticket-url · admin.pricing.export-download-url
- Export
PrintJobStatus·@rj/admin-kit- Props
job·onReprint- States
- queued · sent · printed · failed + reprint
- Package underneath
- react-query polling
- API operations
- admin.orders.cloud-print · admin.orders.print-jobs.index / .reprint · admin.print-studio.jobs.status
- Phone variant
- same; reprint is a phone job