From f5e5e36de44f6f96e629f1a84a4c59702d85000a Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Thu, 12 Feb 2026 15:55:34 +0200 Subject: [PATCH] add account and parent page selection to notion approval ui --- .../components/tool-ui/create-notion-page.tsx | 142 +++++++++++++++++- 1 file changed, 139 insertions(+), 3 deletions(-) diff --git a/surfsense_web/components/tool-ui/create-notion-page.tsx b/surfsense_web/components/tool-ui/create-notion-page.tsx index 256d6a7c9..45fe1dc63 100644 --- a/surfsense_web/components/tool-ui/create-notion-page.tsx +++ b/surfsense_web/components/tool-ui/create-notion-page.tsx @@ -2,9 +2,16 @@ import { makeAssistantToolUI } from "@assistant-ui/react"; import { AlertTriangleIcon, CheckIcon, Loader2Icon, PencilIcon, XIcon } from "lucide-react"; -import { useState } from "react"; +import { useMemo, useState } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; interface InterruptResult { @@ -19,6 +26,27 @@ interface InterruptResult { action_name: string; allowed_decisions: Array<"approve" | "edit" | "reject">; }>; + interrupt_type?: string; + message?: string; + context?: { + accounts?: Array<{ + id: number; + name: string; + workspace_id: string | null; + workspace_name: string; + workspace_icon: string; + }>; + parent_pages?: Record< + number, + Array<{ + page_id: string; + title: string; + document_id: number; + }> + >; + total_pages_per_account?: Record; + error?: string; + }; } interface SuccessResult { @@ -75,6 +103,26 @@ function ApprovalCard({ const [isEditing, setIsEditing] = useState(false); const [editedArgs, setEditedArgs] = useState>(args); + const accounts = interruptData.context?.accounts ?? []; + const parentPages = interruptData.context?.parent_pages ?? {}; + const totalPagesPerAccount = interruptData.context?.total_pages_per_account ?? {}; + + const defaultAccountId = useMemo(() => { + if (args.connector_id) return String(args.connector_id); + if (accounts.length === 1) return String(accounts[0].id); + return ""; + }, [args.connector_id, accounts]); + + const [selectedAccountId, setSelectedAccountId] = useState(defaultAccountId); + const [selectedParentPageId, setSelectedParentPageId] = useState( + args.parent_page_id ? String(args.parent_page_id) : "" + ); + + const availableParentPages = useMemo(() => { + if (!selectedAccountId) return []; + return parentPages[Number(selectedAccountId)] ?? []; + }, [selectedAccountId, parentPages]); + const reviewConfig = interruptData.review_configs[0]; const allowedDecisions = reviewConfig?.allowed_decisions ?? ["approve", "reject"]; const canEdit = allowedDecisions.includes("edit"); @@ -115,6 +163,79 @@ function ApprovalCard({ + {/* Context section - account and parent page selection */} + {!decided && interruptData.context && ( +
+ {interruptData.message && ( +

{interruptData.message}

+ )} + + {interruptData.context.error ? ( +

{interruptData.context.error}

+ ) : ( + <> + {accounts.length > 0 && ( +
+ + +
+ )} + + {selectedAccountId && ( +
+ + + {availableParentPages.length === 0 && selectedAccountId && ( +

+ No pages available. Page will be created at root level. +

+ )} +
+ )} + + )} +
+ )} + {/* Display mode - show args as read-only */} {!isEditing && (
@@ -201,7 +322,11 @@ function ApprovalCard({ type: "edit", edited_action: { name: interruptData.action_requests[0].name, - args: editedArgs, + args: { + ...editedArgs, + connector_id: selectedAccountId ? Number(selectedAccountId) : null, + parent_page_id: selectedParentPageId || null, + }, }, }); }} @@ -227,8 +352,19 @@ function ApprovalCard({ size="sm" onClick={() => { setDecided("approve"); - onDecision({ type: "approve" }); + onDecision({ + type: "approve", + edited_action: { + name: interruptData.action_requests[0].name, + args: { + ...args, + connector_id: selectedAccountId ? Number(selectedAccountId) : null, + parent_page_id: selectedParentPageId || null, + }, + }, + }); }} + disabled={!selectedAccountId} > Approve