import { useTranslate } from "@refinedev/core"; import { Col, Form, InputNumber, QRCode, Radio, RadioChangeEvent, Row, Slider, Switch, Typography } from "antd"; import { ReactElement } from "react"; import { getBasePath } from "../../utils/url"; import { QRCodePrintSettings } from "./printing"; import PrintingDialog from "./printingDialog"; const { Text } = Typography; interface QRCodeData { value: string; label?: ReactElement; errorLevel?: "L" | "M" | "Q" | "H"; } interface QRCodePrintingDialogProps { items: QRCodeData[]; printSettings: QRCodePrintSettings; setPrintSettings: (setPrintSettings: QRCodePrintSettings) => void; extraSettings?: ReactElement; extraSettingsStart?: ReactElement; extraButtons?: ReactElement; baseUrlRoot: string; useHTTPUrl: boolean; setUseHTTPUrl: (value: boolean) => void; } const QRCodePrintingDialog: React.FC = ({ items, printSettings, setPrintSettings, extraSettings, extraSettingsStart, extraButtons, baseUrlRoot, useHTTPUrl, setUseHTTPUrl, }) => { const t = useTranslate(); const showContent = printSettings?.showContent === undefined ? true : printSettings?.showContent; const showQRCodeMode = printSettings?.showQRCodeMode || "withIcon"; const textSize = printSettings?.textSize || 3; const elements = items.map((item) => { return (
{showQRCodeMode !== "no" && (
)} {showContent && (
{item.label ?? item.value}
)}
); }); return ( { printSettings.printSettings = newSettings; setPrintSettings(printSettings); }} extraButtons={extraButtons} extraSettingsStart={extraSettingsStart} extraSettings={ <> { printSettings.showQRCodeMode = e.target.value; setPrintSettings(printSettings); }} value={showQRCodeMode} optionType="button" buttonStyle="solid" /> {showQRCodeMode !== "no" && ( <> setUseHTTPUrl(e.target.value)} value={useHTTPUrl}> {t("printing.qrcode.useHTTPUrl.options.default")} {t("printing.qrcode.useHTTPUrl.options.url")} {useHTTPUrl ? `${baseUrlRoot}/spool/show/{id}` : `web+spoolman:s-{id}`} )} { printSettings.showContent = checked; setPrintSettings(printSettings); }} /> `${value} mm` }} min={2} max={7} value={textSize} step={0.1} onChange={(value) => { printSettings.textSize = value; setPrintSettings(printSettings); }} /> { printSettings.textSize = value ?? 5; setPrintSettings(printSettings); }} /> {extraSettings} } style={` .print-page .print-qrcode-item { display: flex; width: 100%; height: 100%; justify-content: center; } .print-page .print-qrcode-container { max-width: ${showContent ? "50%" : "100%"}; display: flex; } .print-page .print-qrcode { width: auto !important; height: auto !important; padding: 2mm; } .print-page .print-qrcode-title { flex: 1 1 auto; font-size: ${textSize}mm; color: #000; overflow: hidden; } .print-page canvas, .print-page svg { /* display: block; */ object-fit: contain; height: 100% !important; width: 100% !important; max-height: 100%; max-width: 100%; } `} /> ); }; export default QRCodePrintingDialog;