diff --git a/modules/shared/auth/ui/home.php b/modules/shared/auth/ui/home.php index 5462c32..3dece56 100644 --- a/modules/shared/auth/ui/home.php +++ b/modules/shared/auth/ui/home.php @@ -553,7 +553,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best echo " };"; echo " const isMobileDetailMode = () => window.matchMedia('(max-width: 767px)').matches;"; echo " const escapeHtml = (value) => String(value ?? '').replace(/[&<>\"']/g, (character) => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' }[character] || character));"; - echo " let bestellungenListSnapshot = '';"; + echo " let bestellungenMobileDetailHost = null;"; echo " let bestellungenDetailOpen = false;"; echo " const syncSearchState = () => {"; echo " const input = getSearchInput();"; @@ -575,7 +575,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best echo " const streetLine = [street, houseNumber].filter((part) => part && part.length > 0).join(' ').trim();"; echo " const cityLine = [zip, city].filter((part) => part && part.length > 0).join(' ').trim();"; echo " return ["; - echo " '
',"; + echo " '
',"; echo " '
',"; echo " '
',"; echo " '
',"; @@ -656,15 +656,23 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best echo " });"; echo " };"; echo " const restoreBestellungenList = () => {"; - echo " if (bestellungenListSnapshot === '') { return; }"; - echo " contentRoot.innerHTML = bestellungenListSnapshot;"; - echo " bestellungenListSnapshot = '';"; + echo " if (bestellungenMobileDetailHost && bestellungenMobileDetailHost.parentNode) {"; + echo " bestellungenMobileDetailHost.parentNode.removeChild(bestellungenMobileDetailHost);"; + echo " }"; + echo " bestellungenMobileDetailHost = null;"; + echo " document.body.classList.remove('sg-bestellungen-mobile-detail-open');"; echo " bestellungenDetailOpen = false;"; echo " bindTable();"; echo " };"; echo " const openMobileDetail = (trigger) => {"; - echo " bestellungenListSnapshot = contentRoot.innerHTML;"; - echo " contentRoot.innerHTML = renderMobileDetail(trigger);"; + echo " restoreBestellungenList();"; + echo " const host = document.createElement('div');"; + echo " host.innerHTML = renderMobileDetail(trigger);"; + echo " bestellungenMobileDetailHost = host.firstElementChild;"; + echo " if (bestellungenMobileDetailHost) {"; + echo " document.body.appendChild(bestellungenMobileDetailHost);"; + echo " document.body.classList.add('sg-bestellungen-mobile-detail-open');"; + echo " }"; echo " bestellungenDetailOpen = true;"; echo " window.history.pushState({ bestellungenView: 'detail', orderId: trigger.dataset.orderId || '' }, '', window.location.href);"; echo " };"; @@ -699,7 +707,11 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best echo " return false;"; echo " }"; echo " contentRoot.innerHTML = fragment.innerHTML;"; - echo " bestellungenListSnapshot = '';"; + echo " if (bestellungenMobileDetailHost && bestellungenMobileDetailHost.parentNode) {"; + echo " bestellungenMobileDetailHost.parentNode.removeChild(bestellungenMobileDetailHost);"; + echo " }"; + echo " bestellungenMobileDetailHost = null;"; + echo " document.body.classList.remove('sg-bestellungen-mobile-detail-open');"; echo " bestellungenDetailOpen = false;"; echo " table = getTable();"; echo " return !!table;"; diff --git a/public/assets/styles.portal.css b/public/assets/styles.portal.css index 68d8d91..62371d6 100644 --- a/public/assets/styles.portal.css +++ b/public/assets/styles.portal.css @@ -31,6 +31,31 @@ body.sg-otc-order-overlay-open { overflow: hidden; } +body.sg-bestellungen-mobile-detail-open { + overflow: hidden; +} + +body.sg-bestellungen-mobile-detail-open > :not([data-bestellungen-mobile-detail-host]) { + display: none !important; +} + +.sg-bestellungen-mobile-detail-host { + position: fixed; + inset: 0; + z-index: 1500; + display: flex; + flex-direction: column; + gap: var(--spacing-large); + padding: var(--spacing-large); + box-sizing: border-box; + overflow: auto; + background: var(--color-white); +} + +.sg-bestellungen-mobile-detail-host .sg-vsf-drawer-card { + width: 100%; +} + .sg-otc-order-overlay { position: fixed; inset: 0;