u
This commit is contained in:
@@ -12,45 +12,115 @@ import CheckCircleIcon from '@mui/icons-material/CheckCircle';
|
||||
import { enqueueSnackbar } from 'notistack';
|
||||
|
||||
import { labeltemplate, printer, article } from '../../../api';
|
||||
import { companyAutomat } from '../../../automats';
|
||||
import { notifyError } from '../../../utils/notify';
|
||||
import BackendError from '../../BackendError';
|
||||
|
||||
function filterZplPrinters(agentprinters, fallbackPrinters = []) {
|
||||
const filteredAgent = (Array.isArray(agentprinters) ? agentprinters : []).filter(
|
||||
(p) => p.enabled !== false && (!p.type || p.type.toLowerCase() === 'zpl'),
|
||||
);
|
||||
if (filteredAgent.length > 0) return filteredAgent;
|
||||
|
||||
return (Array.isArray(fallbackPrinters) ? fallbackPrinters : []).filter(
|
||||
(p) => !p.type || p.type.toLowerCase() === 'zpl',
|
||||
);
|
||||
}
|
||||
|
||||
function getPrinterLabel(p) {
|
||||
let label;
|
||||
if (p.model && p.serial) {
|
||||
label = `${p.model} (${p.serial})`;
|
||||
} else if (p.model) {
|
||||
label = p.model;
|
||||
} else if (p.serial) {
|
||||
label = `Drucker (${p.serial})`;
|
||||
} else if (p.desc && p.address) {
|
||||
label = `${p.desc} (${p.address})`;
|
||||
} else if (p.address) {
|
||||
label = p.address;
|
||||
} else if (p.desc) {
|
||||
label = p.desc;
|
||||
} else {
|
||||
label = `Drucker #${p.id}`;
|
||||
}
|
||||
|
||||
if (p.online === false) {
|
||||
return `${label} (offline)`;
|
||||
}
|
||||
return label;
|
||||
}
|
||||
|
||||
export default class ArticleLabelTab extends PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
const initialPrinters = filterZplPrinters(companyAutomat.state.agentprinters);
|
||||
this.state = {
|
||||
templates: null,
|
||||
printers: null,
|
||||
printers: initialPrinters,
|
||||
selectedTemplateId: '',
|
||||
selectedPrinterId: '',
|
||||
selectedPrinterId: initialPrinters.length > 0 ? initialPrinters[0].id : '',
|
||||
quantity: 1,
|
||||
loading: true,
|
||||
error: null,
|
||||
};
|
||||
this.legacyPrinters = [];
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.unsub = companyAutomat.subscribe(this, (state) => {
|
||||
const zplPrinters = filterZplPrinters(state.agentprinters, this.legacyPrinters);
|
||||
this.setState((prev) => ({
|
||||
printers: zplPrinters,
|
||||
selectedPrinterId:
|
||||
prev.selectedPrinterId && zplPrinters.some((p) => p.id === prev.selectedPrinterId)
|
||||
? prev.selectedPrinterId
|
||||
: (zplPrinters[0]?.id ?? ''),
|
||||
}));
|
||||
});
|
||||
this.loadData();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.unsub?.();
|
||||
}
|
||||
|
||||
async loadData() {
|
||||
this.setState({ loading: true, error: null });
|
||||
try {
|
||||
const [resTemplates, resPrinters] = await Promise.all([
|
||||
const [resTemplates] = await Promise.all([
|
||||
labeltemplate.list(),
|
||||
printer.list(),
|
||||
companyAutomat.actions.loadAgentPrinters().catch(() => companyAutomat.state.agentprinters),
|
||||
]);
|
||||
|
||||
const templates = resTemplates.labeltemplates || [];
|
||||
const zplPrinters = (resPrinters.printers || []).filter((p) => p.type === 'zpl');
|
||||
let zplPrinters = filterZplPrinters(companyAutomat.state.agentprinters);
|
||||
|
||||
this.setState({
|
||||
if (zplPrinters.length === 0) {
|
||||
try {
|
||||
const resPrinters = await printer.list();
|
||||
this.legacyPrinters = (resPrinters.printers || []).filter((p) => p.type === 'zpl');
|
||||
zplPrinters = filterZplPrinters(companyAutomat.state.agentprinters, this.legacyPrinters);
|
||||
} catch {
|
||||
// ignore legacy fallback error
|
||||
}
|
||||
}
|
||||
|
||||
this.setState((prev) => ({
|
||||
templates,
|
||||
printers: zplPrinters,
|
||||
selectedTemplateId: templates.length > 0 ? templates[0].id : '',
|
||||
selectedPrinterId: zplPrinters.length > 0 ? zplPrinters[0].id : '',
|
||||
selectedTemplateId:
|
||||
templates.length > 0
|
||||
? prev.selectedTemplateId && templates.some((t) => t.id === prev.selectedTemplateId)
|
||||
? prev.selectedTemplateId
|
||||
: templates[0].id
|
||||
: '',
|
||||
selectedPrinterId:
|
||||
prev.selectedPrinterId && zplPrinters.some((p) => p.id === prev.selectedPrinterId)
|
||||
? prev.selectedPrinterId
|
||||
: (zplPrinters[0]?.id ?? ''),
|
||||
loading: false,
|
||||
});
|
||||
}));
|
||||
} catch (error) {
|
||||
this.setState({ error, loading: false });
|
||||
}
|
||||
@@ -219,7 +289,7 @@ export default class ArticleLabelTab extends PureComponent {
|
||||
>
|
||||
{printers.map((p) => (
|
||||
<MenuItem key={p.id} value={p.id}>
|
||||
{p.desc ? `${p.desc} (${p.address})` : p.address}
|
||||
{getPrinterLabel(p)}
|
||||
</MenuItem>
|
||||
))}
|
||||
</TextInput>
|
||||
|
||||
Reference in New Issue
Block a user