import { PureComponent } from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import AppDialog from '../AppDialog'; import DialogActions from '@mui/material/DialogActions'; import DialogContent from '@mui/material/DialogContent'; import DialogTitle from '@mui/material/DialogTitle'; import IconButton from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; import Alert from '@mui/material/Alert'; import CloseIcon from '@mui/icons-material/Close'; import ArticleSearch from '../article/ArticleSearch'; export default class ArticleSearchDialog extends PureComponent { constructor(props) { super(props); this.state = { assigningSku: null, error: null, }; } componentDidUpdate(prevProps) { if (!prevProps.open && this.props.open) { this.setState({ assigningSku: null, error: null }); } } handleSelect = async (article) => { const { onAssign, line, kind = 'delivery' } = this.props; const isDelivery = kind === 'delivery'; if (!onAssign || !article?.sku) return; if (article.isParent || article.is_parent) { this.setState({ error: 'Ein Vaterartikel kann nicht auf Belege gebucht werden.' }); return; } this.setState({ assigningSku: article.sku, error: null }); try { await onAssign(article, line); } catch (err) { this.setState({ assigningSku: null, error: err?.message || (isDelivery ? 'Fehler beim Verknüpfen des Lieferanten-Artikels.' : 'Fehler beim Zuordnen des Artikels.'), }); } }; render() { const { open, onClose, line, kind = 'delivery' } = this.props; const { assigningSku, error } = this.state; const isDelivery = kind === 'delivery'; const rawSku = line?.sku != null ? String(line.sku).trim() : ''; return ( {line ? 'Existierenden Artikel zuordnen' : 'Artikel auswählen'} {isDelivery ? 'Lieferanten-SKU' : 'SKU'}: {rawSku || '–'} {line?.name ? ` · ${line.name}` : ''} {error && ( {error} )} ); } }