feat(client): reply digital approvals to acp

This commit is contained in:
baiyanyun
2026-06-08 10:23:06 +08:00
parent ee51fcdbeb
commit f4af77cb2b
8 changed files with 228 additions and 130 deletions

View File

@@ -104,6 +104,12 @@ describe("digital employee state service", () => {
metadata: {
decision_id: "approval-1",
decision: "approved",
acp_permission: {
permission_id: "permission-1",
session_id: "session-1",
response: "once",
success: true,
},
},
state: {
selectedDutyIdsByDate: {},
@@ -135,6 +141,12 @@ describe("digital employee state service", () => {
decision: "approved",
decidedAt: "2026-06-07T08:00:00.000Z",
previousStatus: "pending",
acpPermission: {
permission_id: "permission-1",
session_id: "session-1",
response: "once",
success: true,
},
});
expect(mockState.db?.outbox.get("approval:upsert:approval-1")).toMatchObject({
entity_type: "approval",

View File

@@ -392,18 +392,21 @@ function recordUiApprovalDecision(update: DigitalEmployeeUiStateUpdate): void {
const previousStatus = stringField(existing, "status") || "pending";
const storedPayload = parseStoredPayload(existing["payload"]);
const storedPayloadRecord = objectRecord(storedPayload);
const acpPermission = objectRecord(metadata?.acp_permission);
const payload = storedPayloadRecord
? {
...storedPayloadRecord,
decision,
decidedAt: now,
previousStatus,
...(acpPermission ? { acpPermission } : {}),
}
: {
value: storedPayload,
decision,
decidedAt: now,
previousStatus,
...(acpPermission ? { acpPermission } : {}),
};
upsertApproval({
id: decisionId,