From ed2ac2c2c355814e35e389e2edd350f5a59e8b60 Mon Sep 17 00:00:00 2001 From: seb Date: Sun, 11 Oct 2026 23:42:20 +0200 Subject: [PATCH] u --- src/routes/artikel/merkmale.jsx | 390 +++++++++++++++++--------------- 1 file changed, 203 insertions(+), 187 deletions(-) diff --git a/src/routes/artikel/merkmale.jsx b/src/routes/artikel/merkmale.jsx index 6289ef2..8428726 100644 --- a/src/routes/artikel/merkmale.jsx +++ b/src/routes/artikel/merkmale.jsx @@ -13,7 +13,7 @@ import { enqueueSnackbar } from 'notistack'; import BackendError from '../../components/BackendError'; import SingleLineTextEdit from 'dashgui/SingleLineTextEdit'; import FillSpace from 'dashgui/FillSpace'; -import { PanelTile, PanelTileGrid } from 'dashgui/panels'; +import { PanelTile, PanelTileGrid, TabbedPanelTileGrid } from 'dashgui/panels'; import withNavigate from '../../components/withNavigate'; import { backendErrorFrom } from '../../utils/backendError'; import { notifyError } from '../../utils/notify'; @@ -69,6 +69,7 @@ class ArtikelMerkmalePage extends PureComponent { this._valSortable = null; this.handleRetry = this.handleRetry.bind(this); + this.handleTabChange = this.handleTabChange.bind(this); this.handleCreateAttribute = this.handleCreateAttribute.bind(this); this.handleCreateValue = this.handleCreateValue.bind(this); this.handleCreateProperty = this.handleCreateProperty.bind(this); @@ -340,6 +341,15 @@ class ArtikelMerkmalePage extends PureComponent { void this.loadAll(); } + handleTabChange(nextTab) { + if (nextTab === 0) { + this._initAttrSortable(); + this._initValSortable(); + } else if (nextTab === 1) { + this._initPropSortable(); + } + } + handleSelectAttribute(attrId) { this.setState({ selectedAttributeId: attrId, valFilter: '', valPage: 1 }); } @@ -453,200 +463,206 @@ class ArtikelMerkmalePage extends PureComponent { : properties; return ( - - {/* Tile 1: Auswahl-Merkmale */} - - - - - - Auswahl-Merkmale - - + + {/* Tab 1: Auswahl-Merkmale & Werte */} + } text="Auswahl-Merkmale"> + {/* Tile 1: Auswahl-Merkmale */} + + + + + + Auswahl-Merkmale + + - - this.setState({ attrFilter: next })} - onKeyDown={(event) => { - if (event.key === 'Enter') { - event.preventDefault(); - void this.handleCreateAttribute(); - } - }} - /> - - + + this.setState({ attrFilter: next })} + onKeyDown={(event) => { + if (event.key === 'Enter') { + event.preventDefault(); + void this.handleCreateAttribute(); + } + }} + /> + + - {filteredAttributes.length === 0 ? ( - - {attrFilterTrimmed - ? `Keine Treffer für „${attrFilterTrimmed}“.` - : 'Noch keine Auswahl-Merkmale angelegt.'} - - ) : ( - this.setState({ attrPage: page })} - renderItem={(a) => ( - this.handleSelectAttribute(a.id)} - /> - )} - /> - )} - - + {filteredAttributes.length === 0 ? ( + + {attrFilterTrimmed + ? `Keine Treffer für „${attrFilterTrimmed}“.` + : 'Noch keine Auswahl-Merkmale angelegt.'} + + ) : ( + this.setState({ attrPage: page })} + renderItem={(a) => ( + this.handleSelectAttribute(a.id)} + /> + )} + /> + )} + + - {/* Tile 2: Werte für das gewählte Auswahl-Merkmal */} - - - - - - {selectedAttr ? `Werte für Auswahl-Merkmal „${selectedAttr.name}“` : 'Werte'} - - + {/* Tile 2: Werte für das gewählte Auswahl-Merkmal */} + + + + + + {selectedAttr ? `Werte für Auswahl-Merkmal „${selectedAttr.name}“` : 'Werte'} + + - {!selectedAttr ? ( - - Kein Attribut ausgewählt. - - ) : ( - <> - - this.setState({ valFilter: next })} - onKeyDown={(event) => { - if (event.key === 'Enter') { - event.preventDefault(); - void this.handleCreateValue(); - } - }} - /> - - + {!selectedAttr ? ( + + Kein Attribut ausgewählt. + + ) : ( + <> + + this.setState({ valFilter: next })} + onKeyDown={(event) => { + if (event.key === 'Enter') { + event.preventDefault(); + void this.handleCreateValue(); + } + }} + /> + + - {filteredValues.length === 0 ? ( - - {valFilterTrimmed - ? `Keine Treffer für „${valFilterTrimmed}“.` - : 'Noch keine Werte angelegt.'} - - ) : ( - this.setState({ valPage: page })} - renderItem={(v) => ( - - )} - /> - )} - - )} - - + {filteredValues.length === 0 ? ( + + {valFilterTrimmed + ? `Keine Treffer für „${valFilterTrimmed}“.` + : 'Noch keine Werte angelegt.'} + + ) : ( + this.setState({ valPage: page })} + renderItem={(v) => ( + + )} + /> + )} + + )} + + + - {/* Tile 3: Text-Merkmale */} - - - - - - Text-Merkmale - - + {/* Tab 2: Text-Merkmale */} + } text="Text-Merkmale"> + {/* Tile 3: Text-Merkmale */} + + + + + + Text-Merkmale + + - - this.setState({ propFilter: next })} - onKeyDown={(event) => { - if (event.key === 'Enter') { - event.preventDefault(); - void this.handleCreateProperty(); - } - }} - /> - - + + this.setState({ propFilter: next })} + onKeyDown={(event) => { + if (event.key === 'Enter') { + event.preventDefault(); + void this.handleCreateProperty(); + } + }} + /> + + - {filteredProperties.length === 0 ? ( - - {propFilterTrimmed - ? `Keine Treffer für „${propFilterTrimmed}“.` - : 'Noch keine Text-Merkmale angelegt.'} - - ) : ( - this.setState({ propPage: page })} - renderItem={(p) => ( - - )} - /> - )} - - - + {filteredProperties.length === 0 ? ( + + {propFilterTrimmed + ? `Keine Treffer für „${propFilterTrimmed}“.` + : 'Noch keine Text-Merkmale angelegt.'} + + ) : ( + this.setState({ propPage: page })} + renderItem={(p) => ( + + )} + /> + )} + + + + ); } }