fix: consume canvas agent pending requests
This commit is contained in:
parent
d5ac630d01
commit
cd0037dc47
@ -23,6 +23,16 @@ function normalizeNodeId(value: unknown) {
|
|||||||
return String(value || "").trim();
|
return String(value || "").trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function shouldConsumePendingRequest(params: {
|
||||||
|
pendingNodeId?: string;
|
||||||
|
detailNodeId?: string;
|
||||||
|
hasDetail: boolean;
|
||||||
|
}) {
|
||||||
|
const pendingNodeId = normalizeNodeId(params.pendingNodeId);
|
||||||
|
const detailNodeId = normalizeNodeId(params.detailNodeId);
|
||||||
|
return !params.hasDetail || !pendingNodeId || pendingNodeId === detailNodeId;
|
||||||
|
}
|
||||||
|
|
||||||
export function storeCanvasAgentSlotFillRequest(
|
export function storeCanvasAgentSlotFillRequest(
|
||||||
targetWindow: CanvasAgentPendingRequestWindow,
|
targetWindow: CanvasAgentPendingRequestWindow,
|
||||||
request: PendingCanvasAgentSlotFillRequest
|
request: PendingCanvasAgentSlotFillRequest
|
||||||
@ -42,9 +52,13 @@ export function consumeCanvasAgentSlotFillRequest(
|
|||||||
) {
|
) {
|
||||||
const pending = getPendingCanvasAgentSlotFillRequest(targetWindow);
|
const pending = getPendingCanvasAgentSlotFillRequest(targetWindow);
|
||||||
if (!pending) return null;
|
if (!pending) return null;
|
||||||
const pendingNodeId = normalizeNodeId(pending.nodeId);
|
if (
|
||||||
const detailNodeId = normalizeNodeId(detail?.nodeId);
|
shouldConsumePendingRequest({
|
||||||
if (!pendingNodeId || pendingNodeId === detailNodeId) {
|
pendingNodeId: pending.nodeId,
|
||||||
|
detailNodeId: detail?.nodeId,
|
||||||
|
hasDetail: Boolean(detail),
|
||||||
|
})
|
||||||
|
) {
|
||||||
delete targetWindow.__canvasAgentPendingSlotFillRequest;
|
delete targetWindow.__canvasAgentPendingSlotFillRequest;
|
||||||
}
|
}
|
||||||
return pending;
|
return pending;
|
||||||
@ -69,9 +83,13 @@ export function consumeCanvasAgentAnnotationEditRequest(
|
|||||||
) {
|
) {
|
||||||
const pending = getPendingCanvasAgentAnnotationEditRequest(targetWindow);
|
const pending = getPendingCanvasAgentAnnotationEditRequest(targetWindow);
|
||||||
if (!pending) return null;
|
if (!pending) return null;
|
||||||
const pendingNodeId = normalizeNodeId(pending.nodeId);
|
if (
|
||||||
const detailNodeId = normalizeNodeId(detail?.nodeId);
|
shouldConsumePendingRequest({
|
||||||
if (!pendingNodeId || pendingNodeId === detailNodeId) {
|
pendingNodeId: pending.nodeId,
|
||||||
|
detailNodeId: detail?.nodeId,
|
||||||
|
hasDetail: Boolean(detail),
|
||||||
|
})
|
||||||
|
) {
|
||||||
delete targetWindow.__canvasAgentPendingAnnotationEditRequest;
|
delete targetWindow.__canvasAgentPendingAnnotationEditRequest;
|
||||||
}
|
}
|
||||||
return pending;
|
return pending;
|
||||||
|
|||||||
@ -3706,6 +3706,29 @@ test.describe("canvas chat pure helpers", () => {
|
|||||||
expect(getPendingCanvasAgentAnnotationEditRequest(targetWindow)).toBeNull();
|
expect(getPendingCanvasAgentAnnotationEditRequest(targetWindow)).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("consumes pending canvas agent UI requests when no event detail is provided", () => {
|
||||||
|
const targetWindow = {} as CanvasAgentPendingRequestWindow;
|
||||||
|
const slotRequest = {
|
||||||
|
nodeId: "slot-1",
|
||||||
|
label: "主图槽",
|
||||||
|
};
|
||||||
|
const annotationRequest = {
|
||||||
|
nodeId: "image-annotated",
|
||||||
|
title: "白底主图",
|
||||||
|
annotationCount: 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
storeCanvasAgentSlotFillRequest(targetWindow, slotRequest);
|
||||||
|
storeCanvasAgentAnnotationEditRequest(targetWindow, annotationRequest);
|
||||||
|
|
||||||
|
expect(consumeCanvasAgentSlotFillRequest(targetWindow)).toEqual(slotRequest);
|
||||||
|
expect(consumeCanvasAgentAnnotationEditRequest(targetWindow)).toEqual(
|
||||||
|
annotationRequest
|
||||||
|
);
|
||||||
|
expect(getPendingCanvasAgentSlotFillRequest(targetWindow)).toBeNull();
|
||||||
|
expect(getPendingCanvasAgentAnnotationEditRequest(targetWindow)).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
test("keeps pending annotation edit targets eligible for the next canvas context", () => {
|
test("keeps pending annotation edit targets eligible for the next canvas context", () => {
|
||||||
const nodes = [
|
const nodes = [
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user