feat: sledování objednávek přes Wolt
CI / Generate TypeScript types (push) Successful in 13s
CI / Server unit tests (push) Successful in 25s
CI / Build server (push) Successful in 28s
CI / Build client (push) Successful in 41s
CI / Playwright E2E tests (push) Successful in 1m47s
CI / Build and push Docker image (push) Successful in 53s
CI / Notify (push) Successful in 2s
CI / Generate TypeScript types (push) Successful in 13s
CI / Server unit tests (push) Successful in 25s
CI / Build server (push) Successful in 28s
CI / Build client (push) Successful in 41s
CI / Playwright E2E tests (push) Successful in 1m47s
CI / Build and push Docker image (push) Successful in 53s
CI / Notify (push) Successful in 2s
Vedle Bolt Food jde nově sledovat i objednávka z Woltu — stačí u objednané skupiny vložit odkaz z track.wolt.com. Logika sledování je zobecněná do registru rozvozových služeb (trackingProviders.ts): každá služba umí vytáhnout kód ze sdílecího odkazu a dotázat se svého API, scheduler i stepper jsou společné. - pole skupiny bolt* přejmenována na tracking* + nové trackingProvider - endpoint /groups/setBoltTracking → /groups/setTracking - Wolt: čas doručení z delivery_eta v časové zóně objednávky, 404 ukončí sledování, stav kurýra odvozen z is_delivering/is_delivering_other_order - DEV simulace zůstává jen pro Bolt Food
This commit is contained in:
1 parent
eeb1630391
commit
5c048fe1f1
25 files changed
+1326
-869
No files matched your search
@@ -12,7 +12,7 @@ type Props = {
|
||||
group: OrderGroup;
|
||||
};
|
||||
|
||||
/** Nabídka stavů pro ruční nastavení (odpovídá mapování v BoltOrderProgress). */
|
||||
/** Nabídka stavů pro ruční nastavení (odpovídá mapování v OrderProgress). */
|
||||
const STATE_OPTIONS: { key: string; label: string; order_state: string; courier_state?: string }[] = [
|
||||
{ key: 'accepted', label: 'Přijato', order_state: 'accepted' },
|
||||
{ key: 'preparing', label: 'Příprava', order_state: 'preparing' },
|
||||
@@ -30,7 +30,7 @@ export default function BoltSimulationModal({ isOpen, onClose, group }: Readonly
|
||||
const [info, setInfo] = useState<string | null>(null);
|
||||
const [manualKey, setManualKey] = useState<string>('preparing');
|
||||
|
||||
const running = !!group.boltTrackingToken;
|
||||
const running = !!group.trackingCode;
|
||||
|
||||
/** Obecný runner — spustí akci, ošetří chybu a krátce zobrazí výsledek. */
|
||||
const run = async (action: () => Promise<{ error?: unknown }>, okMsg: string) => {
|
||||
@@ -113,7 +113,7 @@ export default function BoltSimulationModal({ isOpen, onClose, group }: Readonly
|
||||
<p className="mb-2">
|
||||
Stav simulace:{' '}
|
||||
{running
|
||||
? <Badge bg="success">běží{group.boltOrderState ? ` — ${group.boltOrderState}` : ''}</Badge>
|
||||
? <Badge bg="success">běží{group.trackingOrderState ? ` — ${group.trackingOrderState}` : ''}</Badge>
|
||||
: <Badge bg="secondary">neběží</Badge>}
|
||||
</p>
|
||||
|
||||
|
||||
@@ -141,13 +141,13 @@ export default function SettingsModal({ isOpen, onClose, onSave }: Readonly<Prop
|
||||
id="boltDeliveredCheckbox"
|
||||
ref={boltDeliveredRef}
|
||||
type="checkbox"
|
||||
label="Upozornění na doručení objednávky (Bolt Food)"
|
||||
label="Upozornění na doručení objednávky (Bolt Food / Wolt)"
|
||||
defaultChecked={notifSettings.boltDeliveredPush ?? false}
|
||||
key={`bolt-delivered-${notifSettings.boltDeliveredPush ?? false}`}
|
||||
/>
|
||||
<Form.Text className="text-muted">
|
||||
Až bude skupinová objednávka sledovaná přes Bolt Food doručena, přijde vám push notifikace.
|
||||
Zakladateli skupiny se neposílá — ten dostane upozornění přímo z aplikace Bolt.
|
||||
Až bude sledovaná skupinová objednávka doručena, přijde vám push notifikace.
|
||||
Zakladateli skupiny se neposílá — ten dostane upozornění přímo z aplikace rozvozové služby.
|
||||
</Form.Text>
|
||||
</Form.Group>
|
||||
|
||||
|
||||
Reference in new issue
Block a user