import { PureComponent } from 'react'; import Box from '@mui/material/Box'; import IconButton from '@mui/material/IconButton'; import ListItem from '@mui/material/ListItem'; import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'; import DragIndicatorIcon from '@mui/icons-material/DragIndicator'; import SingleLineTextEdit from 'dashgui/SingleLineTextEdit'; import { enqueueSnackbar } from 'notistack'; import companyAutomat from '../../automats/companyAutomat'; import { notifyError } from '../../utils/notify'; class ArtikelLager extends PureComponent { constructor(props) { super(props); const item = props.warehouse ?? props.item; this.state = { draft: item?.name ?? '', }; } componentDidUpdate(prevProps) { const prevItem = prevProps.warehouse ?? prevProps.item; const item = this.props.warehouse ?? this.props.item; if (prevItem?.name !== item?.name) { this.setState({ draft: item?.name ?? '' }); } else if (prevProps.disabled && !this.props.disabled) { if (this.state.draft !== item?.name) { this.setState({ draft: item?.name ?? '' }); } } } handleChange = (next) => { this.setState({ draft: next }); const item = this.props.warehouse ?? this.props.item; this.props.onChange?.(next, item); }; handleBlur = () => { if (this.props.disabled) return; const item = this.props.warehouse ?? this.props.item; if (!item) return; const draft = this.state.draft.trim(); if (!draft) { this.setState({ draft: item.name ?? '' }); return; } if (draft !== item.name) { void this.renameWarehouse(item, draft); } }; async renameWarehouse(item, name) { try { await companyAutomat.actions.updateWarehouse(item.id, { name }); enqueueSnackbar('Lager gespeichert.', { variant: 'success' }); } catch (err) { this.setState({ draft: item.name ?? '' }); notifyError(err); } } handleKeyDown = (event) => { if (this.props.disabled) return; const item = this.props.warehouse ?? this.props.item; if (event.key === 'Enter') { event.preventDefault(); event.target.blur(); } if (event.key === 'Escape') { event.preventDefault(); this.setState({ draft: item?.name ?? '' }); event.target.blur(); } }; handleDelete = () => { if (this.props.disabled) return; const item = this.props.warehouse ?? this.props.item; if (!item) return; if (!window.confirm(`Lager „${item.name}" wirklich löschen?`)) return; void (async () => { try { await companyAutomat.actions.removeWarehouse(item.id); enqueueSnackbar('Lager gelöscht.', { variant: 'success' }); } catch (err) { notifyError(err); } })(); }; render() { const { disabled, sx } = this.props; const item = this.props.warehouse ?? this.props.item; const { draft } = this.state; const name = item?.name ?? ''; return ( ); } } export default ArtikelLager;