From f4834e0e7ab3291930cde1b405eabedfc606c8bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Gla=CC=88ser?= Date: Sun, 20 Sep 2026 09:13:35 +0200 Subject: [PATCH] Markt-Drawer zeigt keine Neuanlagekarte in Details --- modules/shared/auth/ui/home.php | 4 ++-- public/assets/styles.portal.css | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/shared/auth/ui/home.php b/modules/shared/auth/ui/home.php index 5671403..9a42d78 100644 --- a/modules/shared/auth/ui/home.php +++ b/modules/shared/auth/ui/home.php @@ -185,7 +185,7 @@ function auth_render_market_definitions_content(array $marketTable): string $marketId = (int) ($row['id'] ?? 0); $marketName = (string) ($row['name'] ?? ''); $html[] = '
'; - $html[] = '
'; + $html[] = '
'; $html[] = '
' . auth_escape_html((string) ($row['category_name'] ?? $row['category_code'] ?? '')) . '
'; $html[] = '
' . auth_escape_html($websiteValue) . '
'; $html[] = '
' . auth_escape_html((string) ($row['occurrence_count'] ?? 0)) . '
'; @@ -1207,7 +1207,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM echo " const closeDrawer = () => { resetForm(); readCard.hidden = true; card.hidden = true; activeMarket = null; setDrawerState(false); };"; echo " const showReadCard = (trigger) => { activeMarket = { id: trigger.dataset.marketDefinitionId || '', trigger }; readCard.querySelector('[data-market-definition-read-title]').textContent = trigger.dataset.marketDefinitionName || 'Markt'; readCard.querySelector('[data-market-definition-read-name]').textContent = trigger.dataset.marketDefinitionName || 'Nicht hinterlegt'; readCard.querySelector('[data-market-definition-read-category]').textContent = trigger.dataset.marketDefinitionCategoryName || 'Nicht hinterlegt'; readCard.querySelector('[data-market-definition-read-website]').textContent = trigger.dataset.marketDefinitionWebsite || 'Nicht hinterlegt'; readCard.hidden = false; card.hidden = true; setDrawerState(true); };"; echo " const openEditCard = () => { if (!activeMarket) { return; } form.querySelector('[data-market-definition-form-title]').textContent = 'Markt bearbeiten'; form.querySelector('[data-market-definition-name]').value = activeMarket.trigger.dataset.marketDefinitionName || ''; form.querySelector('[data-market-definition-category]').value = activeMarket.trigger.dataset.marketDefinitionCategoryId || ''; form.querySelector('[data-market-definition-website]').value = activeMarket.trigger.dataset.marketDefinitionWebsite === 'Nicht hinterlegt' ? '' : (activeMarket.trigger.dataset.marketDefinitionWebsite || ''); readCard.hidden = true; card.hidden = false; form.querySelector('[data-market-definition-name]')?.focus(); };"; - echo " const appendMarketRow = (market) => { const table = contentRoot.querySelector('[data-market-definitions-table]'); if (!table) { return; } const row = document.createElement('div'); row.className = 'sg-card-segment sg-card-segment--body sg-card-segment--white sg-large-table__row'; row.setAttribute('role', 'row'); row.dataset.componentPart = 'large-table-row'; row.dataset.marketDefinitionRow = ''; row.dataset.marketDefinitionId = String(market.id || ''); const category = form.querySelector('[data-market-definition-category]')?.selectedOptions[0]?.textContent || ''; const website = market.website_url || 'Nicht hinterlegt'; const cells = document.createElement('div'); cells.className = 'sg-large-table__cell'; const trigger = document.createElement('button'); trigger.className = 'sg-interaction-element sg-hyperlink'; trigger.type = 'button'; trigger.setAttribute('aria-haspopup', 'dialog'); trigger.setAttribute('aria-expanded', 'false'); trigger.dataset.marketDefinitionOpen = ''; trigger.dataset.marketDefinitionId = String(market.id || ''); trigger.dataset.marketDefinitionName = market.name || ''; trigger.dataset.marketDefinitionCategoryId = String(market.category_id || ''); trigger.dataset.marketDefinitionCategoryName = category; trigger.dataset.marketDefinitionWebsite = website; trigger.textContent = market.name || ''; cells.appendChild(trigger); row.appendChild(cells); [category, website, '0', 'Aktiv'].forEach((value) => { const cell = document.createElement('div'); cell.className = 'sg-large-table__cell'; cell.setAttribute('role', 'cell'); cell.textContent = value; row.appendChild(cell); }); table.appendChild(row); };"; + echo " const appendMarketRow = (market) => { const table = contentRoot.querySelector('[data-market-definitions-table]'); if (!table) { return; } const row = document.createElement('div'); row.className = 'sg-card-segment sg-card-segment--body sg-large-table__row'; row.setAttribute('role', 'row'); row.dataset.componentPart = 'large-table-row'; row.dataset.marketDefinitionRow = ''; row.dataset.marketDefinitionId = String(market.id || ''); const category = form.querySelector('[data-market-definition-category]')?.selectedOptions[0]?.textContent || ''; const website = market.website_url || 'Nicht hinterlegt'; const cells = document.createElement('div'); cells.className = 'sg-large-table__cell'; const trigger = document.createElement('button'); trigger.className = 'sg-interaction-element sg-button sg-hyperlink'; trigger.type = 'button'; trigger.setAttribute('aria-haspopup', 'dialog'); trigger.setAttribute('aria-expanded', 'false'); trigger.dataset.marketDefinitionOpen = ''; trigger.dataset.marketDefinitionId = String(market.id || ''); trigger.dataset.marketDefinitionName = market.name || ''; trigger.dataset.marketDefinitionCategoryId = String(market.category_id || ''); trigger.dataset.marketDefinitionCategoryName = category; trigger.dataset.marketDefinitionWebsite = website; trigger.textContent = market.name || ''; cells.appendChild(trigger); row.appendChild(cells); [category, website, '0', 'Aktiv'].forEach((value) => { const cell = document.createElement('div'); cell.className = 'sg-large-table__cell'; cell.setAttribute('role', 'cell'); cell.textContent = value; row.appendChild(cell); }); table.appendChild(row); };"; echo " document.addEventListener('click', (event) => { const openTrigger = event.target.closest('[data-market-definition-open]'); if (openTrigger) { event.preventDefault(); showReadCard(openTrigger); return; } if (event.target.closest('[data-market-definition-create]')) { event.preventDefault(); activeMarket = null; resetForm(); form.querySelector('[data-market-definition-form-title]').textContent = 'Neuen Markt anlegen'; readCard.hidden = true; card.hidden = false; setDrawerState(true); form.querySelector('[data-market-definition-name]')?.focus(); return; } if (event.target.closest('[data-market-definition-edit]')) { event.preventDefault(); openEditCard(); return; } if (event.target.closest('[data-market-definition-cancel]') || event.target.closest('[data-market-definition-drawer-backdrop]')) { event.preventDefault(); closeDrawer(); } });"; echo " document.addEventListener('keydown', (event) => { if (event.key === 'Escape' && drawer.dataset.open === 'true') { closeDrawer(); } });"; echo " form.addEventListener('submit', async (event) => { event.preventDefault(); const status = form.querySelector('[data-market-definition-status]'); const submit = form.querySelector('[type=submit]'); const fields = Object.fromEntries(new FormData(form).entries()); const isUpdate = Boolean(activeMarket?.id); if (status) { status.textContent = 'Speichern läuft …'; } if (submit) { submit.disabled = true; } try { const response = await fetch('/api/market-definition.php', { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': definitionContent.dataset.marketDefinitionsCsrfToken || '' }, body: JSON.stringify({ action: isUpdate ? 'update' : 'create', id: isUpdate ? activeMarket.id : null, fields }) }); const result = await response.json(); if (!response.ok || !result.ok) { throw new Error(result.error || 'Speichern fehlgeschlagen.'); } if (isUpdate) { const trigger = activeMarket.trigger; const category = form.querySelector('[data-market-definition-category]')?.selectedOptions[0]; const website = result.market.website_url || 'Nicht hinterlegt'; trigger.textContent = result.market.name; trigger.dataset.marketDefinitionName = result.market.name; trigger.dataset.marketDefinitionCategoryId = String(result.market.category_id); trigger.dataset.marketDefinitionCategoryName = category?.textContent || ''; trigger.dataset.marketDefinitionWebsite = website; showReadCard(trigger); } else { appendMarketRow(result.market); closeDrawer(); } } catch (error) { if (status) { status.textContent = error instanceof Error ? error.message : 'Speichern fehlgeschlagen.'; } } finally { if (submit) { submit.disabled = false; } } });"; diff --git a/public/assets/styles.portal.css b/public/assets/styles.portal.css index 7b18692..176c805 100644 --- a/public/assets/styles.portal.css +++ b/public/assets/styles.portal.css @@ -351,7 +351,9 @@ body.sg-lager-mobile-detail-open > :not([data-lager-mobile-detail-host]) { .sg-card-list-page-drawer [data-lager-drawer-topic="new-lot-form"][hidden], .sg-card-list-page-drawer [data-lager-new-lot-notification-wrapper][hidden], .sg-card-list-page-drawer [data-lager-open-edit-form][hidden], -.sg-card-list-page-drawer [data-lager-open-card][hidden] { +.sg-card-list-page-drawer [data-lager-open-card][hidden], +.sg-card-list-page-drawer [data-market-definition-read-card][hidden], +.sg-card-list-page-drawer [data-market-definition-create-card][hidden] { display: none; }