This commit is contained in:
seb
2026-11-03 06:46:36 +01:00
parent 9841002398
commit 863422df8e
20 changed files with 300 additions and 82 deletions

View File

@@ -64,6 +64,7 @@ export default class PosTerminalSettingsPanel extends Component {
super(props);
const terminals = companyAutomat.state.terminals ?? [];
this.state = {
isAdmin: companyAutomat.state.current?.role === 'admin',
status: companyAutomat.state.terminalsStatus === 'succeeded' ? 'ready' : 'loading',
error: null,
terminals,
@@ -93,6 +94,7 @@ export default class PosTerminalSettingsPanel extends Component {
componentDidMount() {
this.unsub = companyAutomat.subscribe(this, (state) => ({
isAdmin: state.current?.role === 'admin',
terminals: Array.isArray(state.terminals) ? state.terminals : [],
status: state.terminalsStatus === 'succeeded' ? 'ready' : state.terminalsStatus === 'failed' ? 'failed' : this.state.status,
}));
@@ -133,6 +135,7 @@ export default class PosTerminalSettingsPanel extends Component {
}
async handleCreateTerminal() {
if (!this.state.isAdmin) return;
const { newTerminalName, enableAllForNew, terminals } = this.state;
const trimmed = newTerminalName.trim();
if (!trimmed) return;
@@ -294,6 +297,7 @@ export default class PosTerminalSettingsPanel extends Component {
render() {
const {
isAdmin,
status,
error,
terminals,
@@ -362,7 +366,7 @@ export default class PosTerminalSettingsPanel extends Component {
placeholder="Neues Terminal..."
value={newTerminalName}
onChange={(e) => this.setState({ newTerminalName: e.target.value })}
disabled={creatingTerminal}
disabled={!isAdmin || creatingTerminal}
autoComplete="off"
slotProps={{
htmlInput: {
@@ -387,7 +391,7 @@ export default class PosTerminalSettingsPanel extends Component {
size="small"
checked={enableAllForNew}
onChange={(e) => this.setState({ enableAllForNew: e.target.checked })}
disabled={creatingTerminal}
disabled={!isAdmin || creatingTerminal}
/>
</Box>
</Tooltip>
@@ -396,7 +400,7 @@ export default class PosTerminalSettingsPanel extends Component {
size="small"
startIcon={creatingTerminal ? <CircularProgress size={16} color="inherit" /> : <AddIcon />}
onClick={this.handleCreateTerminal}
disabled={creatingTerminal || !newTerminalName.trim()}
disabled={!isAdmin || creatingTerminal || !newTerminalName.trim()}
>
Hinzufügen
</Button>
@@ -492,7 +496,7 @@ export default class PosTerminalSettingsPanel extends Component {
<Switch
size="small"
checked={isEnabled}
disabled={isPatching || isDeleting}
disabled={!isAdmin || isPatching || isDeleting}
onChange={(e) => void this.handleToggleEnabled(terminal, e.target.checked)}
color="success"
/>
@@ -516,7 +520,7 @@ export default class PosTerminalSettingsPanel extends Component {
size="small"
aria-label={`Terminal ${terminal.name} löschen`}
onClick={() => void this.handleDeleteTerminal(terminal)}
disabled={isDeleting || creatingTerminal || isPatching}
disabled={!isAdmin || isDeleting || creatingTerminal || isPatching}
color="error"
>
{isDeleting ? (
@@ -546,13 +550,14 @@ export default class PosTerminalSettingsPanel extends Component {
<Chip
icon={<FolderIcon />}
label={this.getCategoryLabel(terminal)}
onClick={() => this.setState({ pickerTerminal: terminal })}
onClick={isAdmin ? () => this.setState({ pickerTerminal: terminal }) : undefined}
onDelete={
terminal.rootCategoryId != null
isAdmin && terminal.rootCategoryId != null
? () => void this.handleSetRootCategory(terminal, null)
: undefined
}
clickable
clickable={isAdmin}
disabled={!isAdmin || isPatching || isDeleting}
variant={terminal.rootCategoryId != null ? 'filled' : 'outlined'}
color={terminal.rootCategoryId != null ? 'primary' : 'default'}
size="small"
@@ -560,6 +565,7 @@ export default class PosTerminalSettingsPanel extends Component {
<Button
size="small"
variant="text"
disabled={!isAdmin || isPatching || isDeleting}
onClick={() => this.setState({ pickerTerminal: terminal })}
sx={{ minWidth: 'auto', p: 0.5, fontSize: '0.75rem' }}
>
@@ -576,7 +582,7 @@ export default class PosTerminalSettingsPanel extends Component {
<span>
<IconButton
size="small"
disabled={index === 0 || isPatching || isDeleting}
disabled={!isAdmin || index === 0 || isPatching || isDeleting}
onClick={() => void this.handleMoveTerminal(terminal, 'up')}
sx={{ p: 0.25 }}
>
@@ -588,7 +594,7 @@ export default class PosTerminalSettingsPanel extends Component {
<span>
<IconButton
size="small"
disabled={index === terminals.length - 1 || isPatching || isDeleting}
disabled={!isAdmin || index === terminals.length - 1 || isPatching || isDeleting}
onClick={() => void this.handleMoveTerminal(terminal, 'down')}
sx={{ p: 0.25 }}
>
@@ -599,7 +605,7 @@ export default class PosTerminalSettingsPanel extends Component {
<TextField
type="number"
size="small"
disabled={isPatching || isDeleting}
disabled={!isAdmin || isPatching || isDeleting}
value={this.state.sortDrafts[terminal.id] ?? terminal.sort ?? 0}
onChange={(e) => this.handleSortDraftChange(terminal.id, e.target.value)}
onBlur={() => void this.handleSortSubmit(terminal)}
@@ -624,7 +630,7 @@ export default class PosTerminalSettingsPanel extends Component {
<Switch
size="small"
checked={Boolean(terminal.syncRootArticles)}
disabled={isPatching || isDeleting}
disabled={!isAdmin || isPatching || isDeleting}
onChange={(e) => void this.handleToggleSyncRootArticles(terminal, e.target.checked)}
/>
}