You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.7 KiB
62 lines
1.7 KiB
import type { Page } from "playwright";
|
|
import type { AxelSelectionBridge } from "@/workers/rpa/axel-selection-bridge";
|
|
import { fetchAxelPlaceLocation } from "@/workers/rpa/axel-place-prefetch";
|
|
import {
|
|
CHECK_PICKUP_IN_REACT_STATE,
|
|
INJECT_REACT_STATE,
|
|
} from "@/workers/rpa/fix-place/browser-eval-scripts";
|
|
|
|
export async function commitViaReactStateInjection(
|
|
page: Page,
|
|
bridge: AxelSelectionBridge,
|
|
placeId: string,
|
|
description: string,
|
|
side: "pickup" | "delivery",
|
|
pickupInfo?: {
|
|
placeId: string;
|
|
description: string;
|
|
location: Record<string, unknown>;
|
|
},
|
|
): Promise<{ ok: boolean }> {
|
|
if (side === "delivery") {
|
|
const pickupStillPresent = await page.evaluate(CHECK_PICKUP_IN_REACT_STATE);
|
|
if (!pickupStillPresent && pickupInfo) {
|
|
const reinjected = await page.evaluate(INJECT_REACT_STATE, {
|
|
sideArg: "pickup",
|
|
pid: pickupInfo.placeId,
|
|
loc: pickupInfo.location,
|
|
desc: pickupInfo.description,
|
|
});
|
|
if (!reinjected) {
|
|
return { ok: false };
|
|
}
|
|
bridge.recordPlaceCommit(pickupInfo.placeId);
|
|
bridge.setPlaceDetails(pickupInfo.placeId, pickupInfo.location);
|
|
await page.waitForTimeout(400);
|
|
}
|
|
}
|
|
|
|
const { ok, location } = await fetchAxelPlaceLocation(page, placeId);
|
|
if (!ok || !location) {
|
|
return { ok: false };
|
|
}
|
|
|
|
const injected = await page.evaluate(INJECT_REACT_STATE, {
|
|
sideArg: side,
|
|
pid: placeId,
|
|
loc: location as Record<string, unknown>,
|
|
desc: description,
|
|
});
|
|
|
|
if (!injected) {
|
|
return { ok: false };
|
|
}
|
|
|
|
bridge.recordPlaceCommit(placeId);
|
|
bridge.setPlaceDetails(placeId, location as Record<string, unknown>);
|
|
|
|
await page.waitForTimeout(800);
|
|
|
|
return { ok: true };
|
|
}
|