From b42b051e6fd9a808c9035469d6561029dee21aac Mon Sep 17 00:00:00 2001 From: Martin Berka Date: Wed, 10 Jun 2026 19:28:46 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20u=C5=BEivatelsky=20p=C5=99=C3=ADv=C4=9B?= =?UTF-8?q?tiv=C4=9Bj=C5=A1=C3=AD=20mo=C5=BEnost=20zad=C3=A1n=C3=AD=20sled?= =?UTF-8?q?ovac=C3=AD=20URL=20pro=20Bolt=20Food?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/OrderGroupsPage.tsx | 83 +++++++++++++++++++++------- server/changelogs/2026-06-11.json | 4 +- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/client/src/pages/OrderGroupsPage.tsx b/client/src/pages/OrderGroupsPage.tsx index 321ff71..6e3a1e3 100644 --- a/client/src/pages/OrderGroupsPage.tsx +++ b/client/src/pages/OrderGroupsPage.tsx @@ -2,7 +2,7 @@ import { useCallback, useContext, useEffect, useRef, useState } from 'react'; import { Alert, Badge, Button, Card, Form, Modal, OverlayTrigger, Table, Tooltip } from 'react-bootstrap'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faTrashCan } from '@fortawesome/free-regular-svg-icons'; -import { faBasketShopping, faChevronLeft, faChevronRight, faCircleCheck, faClockRotateLeft, faGear, faLock, faLockOpen, faSearch, faUserPlus } from '@fortawesome/free-solid-svg-icons'; +import { faBasketShopping, faChevronLeft, faChevronRight, faCircleCheck, faClockRotateLeft, faGear, faLock, faLockOpen, faPen, faSearch, faUserPlus } from '@fortawesome/free-solid-svg-icons'; import DatePicker, { registerLocale } from 'react-datepicker'; import { cs } from 'date-fns/locale'; import 'react-datepicker/dist/react-datepicker.css'; @@ -43,6 +43,14 @@ function extractBoltToken(input: string): string | null { } } +/** Zkrátí dlouhý odkaz pro zobrazení v řádku (zachová začátek i konec). */ +function shortenUrl(url: string, max = 48): string { + if (url.length <= max) return url; + const head = Math.ceil((max - 1) / 2); + const tail = Math.floor((max - 1) / 2); + return `${url.slice(0, head)}…${url.slice(url.length - tail)}`; +} + // Český lokál pro date picker (názvy měsíců/dnů, pondělí jako první den) registerLocale('cs', cs); @@ -706,7 +714,7 @@ export default function OrderGroupsPage() { />
- Bolt odkaz: + Bolt odkaz pro sledování: setEditTimes(prev => { const n = { ...prev }; delete n[group.id]; return n; })}>Zrušit
) : ( -
!isReadOnly && isCreator && setEditTimes(prev => ({ ...prev, [group.id]: { orderedAt: group.orderedAt ?? '', deliveryAt: group.deliveryAt ?? '', boltUrl: group.boltTrackingToken ? `${BOLT_SHARE_URL_PREFIX}${group.boltTrackingToken}` : '' } }))} - title={!isReadOnly && isCreator ? 'Klikněte pro úpravu časů' : undefined} - > - - Objednáno v: {group.orderedAt ?? '—'} - - - Doručení v: {group.deliveryAt ?? '—'} - {group.boltTrackingToken && ( - Čas doručení se aktualizuje automaticky z Bolt Food}> - Bolt - - )} - +
+ {(() => { + const canEdit = !isReadOnly && isCreator; + // Aktivace editačního režimu – stejné chování jako tlačítko s tužkou + const startEdit = () => canEdit && setEditTimes(prev => ({ ...prev, [group.id]: { orderedAt: group.orderedAt ?? '', deliveryAt: group.deliveryAt ?? '', boltUrl: group.boltTrackingToken ? `${BOLT_SHARE_URL_PREFIX}${group.boltTrackingToken}` : '' } })); + const trackingUrl = group.boltTrackingToken ? `${BOLT_SHARE_URL_PREFIX}${group.boltTrackingToken}` : null; + return ( + <> + {canEdit && ( + + )} + + Objednáno v: {group.orderedAt ?? '—'} + + + Doručení v: {group.deliveryAt ?? '—'} + {group.boltTrackingToken && ( + Čas doručení se aktualizuje automaticky z Bolt Food}> + Bolt + + )} + + + URL pro sledování:{' '} + {trackingUrl ? ( + e.stopPropagation()} + > + {shortenUrl(trackingUrl)} + + ) : ( + + )} + + + ); + })()}
)}
diff --git a/server/changelogs/2026-06-11.json b/server/changelogs/2026-06-11.json index f80e466..b6e4135 100644 --- a/server/changelogs/2026-06-11.json +++ b/server/changelogs/2026-06-11.json @@ -1,3 +1,5 @@ [ - "Proklik na nabídku podniku ze stránky objednávek" + "Proklik na nabídku podniku ze stránky objednávek", + "Možnost přidat URL pro sledování stavu doručení pro Bolt Food", + "Automatická aktualizace času doručení na základě sledovací URL pro Bolt Food" ]