import React, { useState, useMemo } from 'react'; import { useIsReadApprovalModalOpen, useReadApprovalRequest, useUISelector, } from '../../contexts/UIContext'; import { ASSISTANT_BRAND_NAME } from '../../constants'; const prettyJson = (value: any) => { try { return JSON.stringify(value, null, 2); } catch { return String(value); } }; const ReadApprovalModal: React.FC = () => { const open = useIsReadApprovalModalOpen(); const payload = useReadApprovalRequest(); const resolve = useUISelector((s) => s.resolveReadApproval); const [declineReason, setDeclineReason] = useState(''); const requestArgs = useMemo(() => { const req = payload?.request ?? payload; if (!req) return {}; if (req.arguments && typeof req.arguments === 'object') { return req.arguments; } return {}; }, [payload]); const resource = (requestArgs?.resource as string | undefined) || 'unknown'; const responsePreview = payload?.response; if (!open) return null; const handleResolve = (approved: boolean) => { resolve({ approved, user_reason: approved ? undefined : (declineReason?.trim() || undefined), }); setDeclineReason(''); }; return (
{`${ASSISTANT_BRAND_NAME} is requesting to read data from your site. Review the request and preview below. Approving will share this data with the assistant for the current turn only.`}
{prettyJson(requestArgs)}
{prettyJson(responsePreview ?? { message: 'No data available for preview.' })}