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 (
handleResolve(false)} />

Share site data?

{`${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.`}

Requested resource
{resource}
{Object.keys(requestArgs).length > 0 && (
Request details
                {prettyJson(requestArgs)}
              
)}
Data preview
              {prettyJson(responsePreview ?? { message: 'No data available for preview.' })}
            
setDeclineReason(e.target.value)} placeholder="Add a note for your records" className="w-full text-sm px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-blue-500" />
); }; export default React.memo(ReadApprovalModal);