Client: QR print updates
* Added grid borders * Replaced row height with instead choosing number of rows * Added support for negative margins * New QR code content format * Added number inputs to all sliders
This commit is contained in:
@@ -56,16 +56,22 @@
|
|||||||
"printing": {
|
"printing": {
|
||||||
"generic": {
|
"generic": {
|
||||||
"title": "Printing",
|
"title": "Printing",
|
||||||
|
"description": "Tune in the settings below to get the desired print layout. Keep in mind that printers and your OS may apply it's own margins and scaling, so you may need to adjust the settings accordingly. Test it on a piece of regular paper before printing on the actual labels.",
|
||||||
"print": "Print",
|
"print": "Print",
|
||||||
"columns": "Columns",
|
"columns": "Columns",
|
||||||
|
"rows": "Rows",
|
||||||
"paperSize": "Paper Size",
|
"paperSize": "Paper Size",
|
||||||
"rowHeight": "Row Height",
|
|
||||||
"showBorder": "Show Border",
|
"showBorder": "Show Border",
|
||||||
"previewScale": "Preview Scale",
|
"previewScale": "Preview Scale",
|
||||||
"marginLeft": "Left Margin",
|
"marginLeft": "Left Margin",
|
||||||
"marginRight": "Right Margin",
|
"marginRight": "Right Margin",
|
||||||
"marginTop": "Top Margin",
|
"marginTop": "Top Margin",
|
||||||
"marginBottom": "Bottom Margin"
|
"marginBottom": "Bottom Margin",
|
||||||
|
"borders": {
|
||||||
|
"none": "None",
|
||||||
|
"border": "Border",
|
||||||
|
"grid": "Grid"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"qrcode": {
|
"qrcode": {
|
||||||
"button": "Print QR Codes",
|
"button": "Print QR Codes",
|
||||||
|
|||||||
@@ -56,16 +56,22 @@
|
|||||||
"printing": {
|
"printing": {
|
||||||
"generic": {
|
"generic": {
|
||||||
"title": "Utskrift",
|
"title": "Utskrift",
|
||||||
|
"description": "Justera inställningarna nedan för att få önskat utskriftslayout. Kom ihåg att skrivare och ditt operativsystem kan tillämpa sina egna marginaler och skalning, så du kan behöva justera inställningarna därefter. Testa på ett vanligt papper innan du skriver ut på de faktiska etiketterna.",
|
||||||
"print": "Skriv ut",
|
"print": "Skriv ut",
|
||||||
"columns": "Kolumner",
|
"columns": "Kolumner",
|
||||||
|
"rows": "Rader",
|
||||||
"paperSize": "Papperstyp",
|
"paperSize": "Papperstyp",
|
||||||
"rowHeight": "Radhöjd",
|
|
||||||
"showBorder": "Visa ram",
|
"showBorder": "Visa ram",
|
||||||
"previewScale": "Skala förhandsgranskning",
|
"previewScale": "Skala förhandsgranskning",
|
||||||
"marginLeft": "Marginal - vänster",
|
"marginLeft": "Marginal - vänster",
|
||||||
"marginRight": "Marginal - höger",
|
"marginRight": "Marginal - höger",
|
||||||
"marginTop": "Marginal - topp",
|
"marginTop": "Marginal - topp",
|
||||||
"marginBottom": "Marginal - botten"
|
"marginBottom": "Marginal - botten",
|
||||||
|
"borders": {
|
||||||
|
"none": "Ingen",
|
||||||
|
"border": "Ram",
|
||||||
|
"grid": "Rutnät"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"qrcode": {
|
"qrcode": {
|
||||||
"button": "Skriv ut QR-koder",
|
"button": "Skriv ut QR-koder",
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ import {
|
|||||||
Col,
|
Col,
|
||||||
Form,
|
Form,
|
||||||
Divider,
|
Divider,
|
||||||
Switch,
|
RadioChangeEvent,
|
||||||
|
Radio,
|
||||||
|
InputNumber,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import ReactToPrint from "react-to-print";
|
import ReactToPrint from "react-to-print";
|
||||||
import { useSavedState } from "../../utils/saveload";
|
import { useSavedState } from "../../utils/saveload";
|
||||||
@@ -73,72 +75,112 @@ const PrintingDialog: React.FC<PrintingDialogProps> = ({
|
|||||||
10
|
10
|
||||||
);
|
);
|
||||||
const [itemsPerRow, setItemsPerRow] = useSavedState("print-itemsPerRow", 3);
|
const [itemsPerRow, setItemsPerRow] = useSavedState("print-itemsPerRow", 3);
|
||||||
|
const [rowsPerPage, setRowsPerPage] = useSavedState("print-rowsPerPage", 8);
|
||||||
const [paperSize, setPaperSize] = useSavedState("print-paperSize", "A4");
|
const [paperSize, setPaperSize] = useSavedState("print-paperSize", "A4");
|
||||||
const [rowHeight, setRowHeight] = useSavedState("print-rowHeight", 70);
|
|
||||||
const [previewScale, setPreviewScale] = useSavedState(
|
const [previewScale, setPreviewScale] = useSavedState(
|
||||||
"print-previewScale",
|
"print-previewScale",
|
||||||
0.6
|
0.6
|
||||||
);
|
);
|
||||||
const [showBorder, setShowBorder] = useSavedState("print-showBorder", true);
|
const [borderShowMode, setBorderShowMode] = useSavedState<
|
||||||
|
"none" | "border" | "grid"
|
||||||
|
>("print-borderShowMode", "grid");
|
||||||
|
|
||||||
const paperWidth = paperDimensions[paperSize].width;
|
const paperWidth = paperDimensions[paperSize].width;
|
||||||
const paperHeight = paperDimensions[paperSize].height;
|
const paperHeight = paperDimensions[paperSize].height;
|
||||||
|
|
||||||
const printRef = useRef<HTMLDivElement>(null);
|
const printRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
const itemsPerPage =
|
const calculatedRowHeight =
|
||||||
itemsPerRow *
|
(paperHeight - marginTop - marginBottom) / rowsPerPage;
|
||||||
Math.floor((paperHeight - marginTop - marginBottom) / rowHeight);
|
|
||||||
const pageBlocks = [];
|
const rowsOfItems = [];
|
||||||
for (let i = 0; i < items.length; i += 1) {
|
for (let row_idx = 0; row_idx <= items.length / itemsPerRow; row_idx += 1) {
|
||||||
if (i % itemsPerPage === 0) {
|
rowsOfItems.push(
|
||||||
pageBlocks.push(items.slice(i, i + itemsPerPage));
|
items.slice(row_idx * itemsPerRow, (row_idx + 1) * itemsPerRow)
|
||||||
}
|
);
|
||||||
}
|
}
|
||||||
const rowBlocks = pageBlocks.map((pageBlock, idx) => (
|
|
||||||
<div
|
const pageBlocks = [];
|
||||||
className="print-page"
|
for (
|
||||||
key={idx}
|
let page_idx = 0;
|
||||||
style={{
|
page_idx <= rowsOfItems.length / rowsPerPage;
|
||||||
width: `${paperWidth}mm`,
|
page_idx += 1
|
||||||
height: `${paperHeight}mm`,
|
) {
|
||||||
paddingTop: `calc(${marginTop}mm - ${showBorder ? "1px" : "0px"})`,
|
pageBlocks.push(
|
||||||
paddingLeft: `calc(${marginLeft}mm - ${showBorder ? "1px" : "0px"})`,
|
rowsOfItems.slice(page_idx * rowsPerPage, (page_idx + 1) * rowsPerPage)
|
||||||
paddingRight: `calc(${marginRight}mm - ${showBorder ? "1px" : "0px"})`,
|
);
|
||||||
paddingBottom: `calc(${marginBottom}mm - ${
|
}
|
||||||
showBorder ? "1px" : "0px"
|
|
||||||
})`,
|
const pages = pageBlocks.map(function (rows, idx) {
|
||||||
backgroundColor: "#FFF",
|
const itemRows = rows.map((row, idx) => {
|
||||||
}}
|
return (
|
||||||
>
|
<tr key={idx}>
|
||||||
<Row
|
{row.map((item, index) => (
|
||||||
|
<td>
|
||||||
|
<div
|
||||||
|
key={index}
|
||||||
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
justifyContent: "center",
|
||||||
|
alignItems: "center",
|
||||||
|
width: `${
|
||||||
|
(paperWidth - marginLeft - marginRight) / itemsPerRow
|
||||||
|
}mm`,
|
||||||
|
height: `${calculatedRowHeight}mm`,
|
||||||
|
flexDirection: "column",
|
||||||
|
border: borderShowMode === "grid" ? "1px solid #000" : "none",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{item}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
))}
|
||||||
|
</tr>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="print-page"
|
||||||
|
key={idx}
|
||||||
style={{
|
style={{
|
||||||
border: showBorder ? "1px solid #000" : "none",
|
width: `${paperWidth}mm`,
|
||||||
width: "100%",
|
height: `${paperHeight}mm`,
|
||||||
height: "100%",
|
backgroundColor: "#FFF",
|
||||||
alignContent: "flex-start",
|
overflow: "hidden",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{pageBlock.map((item, index) => (
|
<div
|
||||||
<div
|
className="print-page-area"
|
||||||
key={index}
|
style={{
|
||||||
|
marginTop: `calc(${marginTop}mm - ${
|
||||||
|
borderShowMode !== "none" ? "1px" : "0px"
|
||||||
|
})`,
|
||||||
|
marginLeft: `calc(${marginLeft}mm - ${
|
||||||
|
borderShowMode !== "none" ? "1px" : "0px"
|
||||||
|
})`,
|
||||||
|
marginRight: `calc(${marginRight}mm - ${
|
||||||
|
borderShowMode !== "none" ? "1px" : "0px"
|
||||||
|
})`,
|
||||||
|
marginBottom: `calc(${marginBottom}mm - ${
|
||||||
|
borderShowMode !== "none" ? "1px" : "0px"
|
||||||
|
})`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<table
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
border: borderShowMode !== "none" ? "1px solid #000" : "none",
|
||||||
justifyContent: "center",
|
width: "100%",
|
||||||
alignItems: "center",
|
height: "100%",
|
||||||
width: `${
|
alignContent: "flex-start",
|
||||||
(paperWidth - marginLeft - marginRight - 1) / itemsPerRow
|
|
||||||
}mm`,
|
|
||||||
height: `${rowHeight}mm`,
|
|
||||||
flexDirection: "column",
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{item}
|
{itemRows}
|
||||||
</div>
|
</table>
|
||||||
))}
|
</div>
|
||||||
</Row>
|
</div>
|
||||||
</div>
|
);
|
||||||
));
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
@@ -154,10 +196,11 @@ const PrintingDialog: React.FC<PrintingDialogProps> = ({
|
|||||||
content={() => printRef.current}
|
content={() => printRef.current}
|
||||||
/>,
|
/>,
|
||||||
]}
|
]}
|
||||||
width={1000} // Set the modal width to accommodate the preview
|
width={1200} // Set the modal width to accommodate the preview
|
||||||
>
|
>
|
||||||
<Row gutter={16}>
|
<Row gutter={16}>
|
||||||
<Col span={16}>
|
<Col span={24}>{t("printing.generic.description")}</Col>
|
||||||
|
<Col span={14}>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
transform: "translateZ(0)",
|
transform: "translateZ(0)",
|
||||||
@@ -194,73 +237,179 @@ const PrintingDialog: React.FC<PrintingDialogProps> = ({
|
|||||||
margin-top: 10mm;
|
margin-top: 10mm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.print-page td {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
${style ?? ""}
|
${style ?? ""}
|
||||||
`}
|
`}
|
||||||
</style>
|
</style>
|
||||||
{rowBlocks}
|
{pages}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={8}>
|
<Col span={10}>
|
||||||
<Form
|
<Form
|
||||||
labelAlign="left"
|
labelAlign="left"
|
||||||
colon={false}
|
colon={false}
|
||||||
labelCol={{ span: 14 }}
|
labelCol={{ span: 8 }}
|
||||||
wrapperCol={{ span: 10 }}
|
wrapperCol={{ span: 16 }}
|
||||||
>
|
>
|
||||||
<Form.Item label={t("printing.generic.marginLeft")}>
|
<Form.Item label={t("printing.generic.marginLeft")}>
|
||||||
<Slider
|
<Row>
|
||||||
min={0}
|
<Col span={12}>
|
||||||
max={50}
|
<Slider
|
||||||
tooltip={{ formatter: (value) => `${value} mm` }}
|
min={-20}
|
||||||
value={marginLeft}
|
max={50}
|
||||||
onChange={(value) => {
|
step={0.1}
|
||||||
setMarginLeft(value);
|
tooltip={{ formatter: (value) => `${value} mm` }}
|
||||||
}}
|
value={marginLeft}
|
||||||
/>
|
onChange={(value) => {
|
||||||
|
setMarginLeft(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
step={0.1}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={marginLeft}
|
||||||
|
addonAfter="mm"
|
||||||
|
onChange={(value) => {
|
||||||
|
setMarginLeft(value ?? 0);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.generic.marginTop")}>
|
<Form.Item label={t("printing.generic.marginTop")}>
|
||||||
<Slider
|
<Row>
|
||||||
min={0}
|
<Col span={12}>
|
||||||
max={50}
|
<Slider
|
||||||
tooltip={{ formatter: (value) => `${value} mm` }}
|
min={-20}
|
||||||
value={marginTop}
|
max={50}
|
||||||
onChange={(value) => {
|
step={0.1}
|
||||||
setMarginTop(value);
|
tooltip={{ formatter: (value) => `${value} mm` }}
|
||||||
}}
|
value={marginTop}
|
||||||
/>
|
onChange={(value) => {
|
||||||
|
setMarginTop(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
step={0.1}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={marginTop}
|
||||||
|
addonAfter="mm"
|
||||||
|
onChange={(value) => {
|
||||||
|
setMarginTop(value ?? 0);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.generic.marginRight")}>
|
<Form.Item label={t("printing.generic.marginRight")}>
|
||||||
<Slider
|
<Row>
|
||||||
min={0}
|
<Col span={12}>
|
||||||
max={50}
|
<Slider
|
||||||
tooltip={{ formatter: (value) => `${value} mm` }}
|
min={-20}
|
||||||
value={marginRight}
|
max={50}
|
||||||
onChange={(value) => {
|
step={0.1}
|
||||||
setMarginRight(value);
|
tooltip={{ formatter: (value) => `${value} mm` }}
|
||||||
}}
|
value={marginRight}
|
||||||
/>
|
onChange={(value) => {
|
||||||
|
setMarginRight(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
step={0.1}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={marginRight}
|
||||||
|
addonAfter="mm"
|
||||||
|
onChange={(value) => {
|
||||||
|
setMarginRight(value ?? 0);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.generic.marginBottom")}>
|
<Form.Item label={t("printing.generic.marginBottom")}>
|
||||||
<Slider
|
<Row>
|
||||||
min={0}
|
<Col span={12}>
|
||||||
max={50}
|
<Slider
|
||||||
tooltip={{ formatter: (value) => `${value} mm` }}
|
min={-20}
|
||||||
value={marginBottom}
|
max={50}
|
||||||
onChange={(value) => {
|
step={0.1}
|
||||||
setMarginBottom(value);
|
tooltip={{ formatter: (value) => `${value} mm` }}
|
||||||
}}
|
value={marginBottom}
|
||||||
/>
|
onChange={(value) => {
|
||||||
|
setMarginBottom(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
step={0.1}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={marginBottom}
|
||||||
|
addonAfter="mm"
|
||||||
|
onChange={(value) => {
|
||||||
|
setMarginBottom(value ?? 0);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.generic.columns")}>
|
<Form.Item label={t("printing.generic.columns")}>
|
||||||
<Slider
|
<Row>
|
||||||
min={1}
|
<Col span={12}>
|
||||||
max={5}
|
<Slider
|
||||||
value={itemsPerRow}
|
min={1}
|
||||||
onChange={(value) => {
|
max={5}
|
||||||
setItemsPerRow(value);
|
value={itemsPerRow}
|
||||||
}}
|
onChange={(value) => {
|
||||||
/>
|
setItemsPerRow(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
min={1}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={itemsPerRow}
|
||||||
|
onChange={(value) => {
|
||||||
|
setItemsPerRow(value ?? 1);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("printing.generic.rows")}>
|
||||||
|
<Row>
|
||||||
|
<Col span={12}>
|
||||||
|
<Slider
|
||||||
|
min={1}
|
||||||
|
max={15}
|
||||||
|
value={rowsPerPage}
|
||||||
|
onChange={(value) => {
|
||||||
|
setRowsPerPage(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
min={1}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={rowsPerPage}
|
||||||
|
onChange={(value) => {
|
||||||
|
setRowsPerPage(value ?? 1);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.generic.paperSize")}>
|
<Form.Item label={t("printing.generic.paperSize")}>
|
||||||
<Select
|
<Select
|
||||||
@@ -274,36 +423,53 @@ const PrintingDialog: React.FC<PrintingDialogProps> = ({
|
|||||||
))}
|
))}
|
||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.generic.rowHeight")}>
|
|
||||||
<Slider
|
|
||||||
min={30}
|
|
||||||
max={200}
|
|
||||||
tooltip={{ formatter: (value) => `${value} mm` }}
|
|
||||||
value={rowHeight}
|
|
||||||
onChange={(value) => {
|
|
||||||
setRowHeight(value);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item label={t("printing.generic.showBorder")}>
|
<Form.Item label={t("printing.generic.showBorder")}>
|
||||||
<Switch
|
<Radio.Group
|
||||||
checked={showBorder}
|
options={[
|
||||||
onChange={(checked) => setShowBorder(checked)}
|
{ label: t("printing.generic.borders.none"), value: "none" },
|
||||||
|
{
|
||||||
|
label: t("printing.generic.borders.border"),
|
||||||
|
value: "border",
|
||||||
|
},
|
||||||
|
{ label: t("printing.generic.borders.grid"), value: "grid" },
|
||||||
|
]}
|
||||||
|
onChange={(e: RadioChangeEvent) => {
|
||||||
|
setBorderShowMode(e.target.value);
|
||||||
|
}}
|
||||||
|
value={borderShowMode}
|
||||||
|
optionType="button"
|
||||||
|
buttonStyle="solid"
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
{extraSettings && <Divider />}
|
{extraSettings && <Divider />}
|
||||||
{extraSettings}
|
{extraSettings}
|
||||||
<Divider />
|
<Divider />
|
||||||
<Form.Item label={t("printing.generic.previewScale")}>
|
<Form.Item label={t("printing.generic.previewScale")}>
|
||||||
<Slider
|
<Row>
|
||||||
min={0.1}
|
<Col span={12}>
|
||||||
max={1}
|
<Slider
|
||||||
step={0.01}
|
min={0.1}
|
||||||
value={previewScale}
|
max={1}
|
||||||
onChange={(value) => {
|
step={0.01}
|
||||||
setPreviewScale(value);
|
value={previewScale}
|
||||||
}}
|
onChange={(value) => {
|
||||||
/>
|
setPreviewScale(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
min={0.1}
|
||||||
|
max={1}
|
||||||
|
step={0.01}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={previewScale}
|
||||||
|
onChange={(value) => {
|
||||||
|
setPreviewScale(value ?? 0.1);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
</Col>
|
</Col>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Form, QRCode, Slider, Switch } from "antd";
|
import { Col, Form, InputNumber, QRCode, Row, Slider, Switch } from "antd";
|
||||||
import { useSavedState } from "../../utils/saveload";
|
import { useSavedState } from "../../utils/saveload";
|
||||||
import PrintingDialog from "./printingDialog";
|
import PrintingDialog from "./printingDialog";
|
||||||
import { useTranslate } from "@refinedev/core";
|
import { useTranslate } from "@refinedev/core";
|
||||||
@@ -69,17 +69,34 @@ const QRCodePrintingDialog: React.FC<QRCodePrintingDialogProps> = ({
|
|||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.qrcode.textSize")}>
|
<Form.Item label={t("printing.qrcode.textSize")}>
|
||||||
<Slider
|
<Row>
|
||||||
disabled={!showContent}
|
<Col span={12}>
|
||||||
tooltip={{ formatter: (value) => `${value} mm` }}
|
<Slider
|
||||||
min={3}
|
disabled={!showContent}
|
||||||
max={15}
|
tooltip={{ formatter: (value) => `${value} mm` }}
|
||||||
value={textSize}
|
min={3}
|
||||||
step={0.1}
|
max={15}
|
||||||
onChange={(value) => {
|
value={textSize}
|
||||||
setTextSize(value);
|
step={0.1}
|
||||||
}}
|
onChange={(value) => {
|
||||||
/>
|
setTextSize(value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<InputNumber
|
||||||
|
disabled={!showContent}
|
||||||
|
min={0.01}
|
||||||
|
step={0.1}
|
||||||
|
style={{ margin: "0 16px" }}
|
||||||
|
value={textSize}
|
||||||
|
addonAfter="mm"
|
||||||
|
onChange={(value) => {
|
||||||
|
setTextSize(value ?? 5);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label={t("printing.qrcode.showSpoolmanIcon")}>
|
<Form.Item label={t("printing.qrcode.showSpoolmanIcon")}>
|
||||||
<Switch
|
<Switch
|
||||||
|
|||||||
@@ -41,9 +41,8 @@ const SelectAndPrint: React.FC = () => {
|
|||||||
setStep(1);
|
setStep(1);
|
||||||
}}
|
}}
|
||||||
items={selectedSpools.map((spool) => ({
|
items={selectedSpools.map((spool) => ({
|
||||||
value: `S:${spool.id}`,
|
value: `web+spoolman:s-${spool.id}`,
|
||||||
// value: `https://spoolman.lan/spool/show/${spool.id}`,
|
label: `s-${spool.id}`,
|
||||||
// label: `hello`,
|
|
||||||
errorLevel: "H",
|
errorLevel: "H",
|
||||||
}))}
|
}))}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user