@peak-ai/canvas 1.4.19-rc.8 → 1.4.19-rc.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";import React,{useState,useEffect}from"react";import{CustomModal}from"./custom-modal";import{Copy,Check,ChevronDown}from"lucide-react";import{formatQueryHeading}from"./query-heading-formatter";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";export function QueryDetailsModal(_ref){var isOpen=_ref.isOpen,onClose=_ref.onClose,isLoading=_ref.isLoading,error=_ref.error,sqlQuery=_ref.sqlQuery,_ref$queryHeadings=_ref.queryHeadings,queryHeadings=_ref$queryHeadings===void 0?[]:_ref$queryHeadings,_ref$tableButtonExpla=_ref.tableButtonExplanations,tableButtonExplanations=_ref$tableButtonExpla===void 0?[]:_ref$tableButtonExpla,onRetry=_ref.onRetry;var _useState=useState({}),copied=_useState[0],setCopied=_useState[1];var _useState2=useState({}),expandedButtons=_useState2[0],setExpandedButtons=_useState2[1];// Reset expanded state when modal closes
|
|
2
|
-
useEffect(function(){if(!isOpen){setExpandedButtons({})}},[isOpen]);function copyToClipboard(_x,_x2){return _copyToClipboard.apply(this,arguments)}function _copyToClipboard(){_copyToClipboard=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(queryToCopy,copyId){var textToCopy,id;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:textToCopy=queryToCopy;if(!textToCopy){if(Array.isArray(sqlQuery)){textToCopy=sqlQuery.filter(function(q){return q&&typeof q==="string"}).join("\n\n-- Next Query --\n\n")}else if(typeof sqlQuery==="string"){textToCopy=sqlQuery}else{textToCopy=""}}if(textToCopy){_context.next=4;break}return _context.abrupt("return");case 4:id=copyId||"main";_context.prev=5;_context.next=8;return navigator.clipboard.writeText(textToCopy);case 8:setCopied(function(prev){var _extends3;return _extends({},prev,(_extends3={},_extends3[id]=true,_extends3))});setTimeout(function(){return setCopied(function(prev){var _extends4;return _extends({},prev,(_extends4={},_extends4[id]=false,_extends4))})},2000);_context.next=14;break;case 12:_context.prev=12;_context.t0=_context["catch"](5);case 14:case"end":return _context.stop()}},_callee,null,[[5,12]])}));return _copyToClipboard.apply(this,arguments)}function toggleButtonExpansion(buttonIndex){setExpandedButtons(function(prev){var _extends2;return _extends({},prev,(_extends2={},_extends2[buttonIndex]=!prev[buttonIndex],_extends2))})}function renderTableButtonExplanations(){if(!tableButtonExplanations||tableButtonExplanations.length===0){return null}function hasValidJsonBody(jsonBody){return jsonBody!==null&&jsonBody!==undefined&&jsonBody!==""}return/*#__PURE__*/_jsx("div",{className:"mb-6",children:tableButtonExplanations.map(function(button,index){var _button$buttonStyle,_button$buttonStyle2,_button$buttonStyle3;return/*#__PURE__*/_jsxs("div",{className:"mb-3 border border-gray-200 rounded-lg",children:[/*#__PURE__*/_jsxs("div",{className:"w-full px-4 py-3 flex items-center justify-between rounded-lg",children:[/*#__PURE__*/_jsxs("div",{className:"flex items-center",children:[/*#__PURE__*/_jsx("button",{onClick:function onClick(){return toggleButtonExpansion(index)},className:button.buttonClassName||"flex items-center px-3 py-1.5 rounded text-xs font-medium",style:_extends({backgroundColor:((_button$buttonStyle=button.buttonStyle)==null?void 0:_button$buttonStyle.backgroundColor)||"#f3f4f6",color:((_button$buttonStyle2=button.buttonStyle)==null?void 0:_button$buttonStyle2.color)||"#374151",border:((_button$buttonStyle3=button.buttonStyle)==null?void 0:_button$buttonStyle3.border)||"1px solid #d1d5db"},button.buttonStyle||{}),children:button.action}),/*#__PURE__*/_jsx("div",{className:"ml-3 flex flex-col",children:/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-500 font-medium",children:button.operationDescription||button.operationSummary||button.explanation})})]}),/*#__PURE__*/_jsx(ChevronDown,{className:"w-4 h-4 text-gray-500 transition-transform cursor-pointer "+(expandedButtons[index]?"rotate-180":""),onClick:function onClick(){return toggleButtonExpansion(index)}})]}),expandedButtons[index]&&/*#__PURE__*/_jsx("div",{className:"px-4 pb-3 border-t border-gray-200",children:/*#__PURE__*/_jsxs("div",{className:"mt-2 space-y-3",children:[/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"URL"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(button.explanation,"url-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["url-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:button.explanation})]}),button.hasPayload&&/*#__PURE__*/_jsxs("div",{className:"space-y-3",children:[button.formFields&&Object.keys(button.formFields).length>0&&/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"Form Fields"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(JSON.stringify(button.formFields,null,2),"form-fields-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["form-fields-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:JSON.stringify(button.formFields,null,2)})]}),hasValidJsonBody(button.jsonBody)&&/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"JSON Body"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(JSON.stringify(button.jsonBody,null,2),"json-body-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["json-body-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:JSON.stringify(button.jsonBody,null,2)})]}),button.filesArg&&Object.keys(button.filesArg).length>0&&/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"Files"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(JSON.stringify(button.filesArg,null,2),"files-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["files-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:JSON.stringify(button.filesArg,null,2)})]})]})]})})]},index)})})}function renderModalContent(){if(isLoading){return/*#__PURE__*/_jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[/*#__PURE__*/_jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-purple-600 mb-4"}),/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-600",children:"Fetching query details from semantic layer..."}),/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-400 mt-2",children:"This may take a few moments"})]})}if(error){return/*#__PURE__*/_jsxs("div",{className:"text-red-600 p-4 bg-red-50 rounded-lg border border-red-200 m-6",children:[/*#__PURE__*/_jsx("p",{className:"font-medium mb-2 text-xs",children:"Unable to fetch query details"}),/*#__PURE__*/_jsx("p",{className:"text-xs mb-3",children:error}),/*#__PURE__*/_jsx("button",{onClick:onRetry,className:"px-4 py-2 bg-red-100 hover:bg-red-200 rounded text-xs font-medium transition-colors",type:"button",children:"Retry"})]})}if(!sqlQuery||Array.isArray(sqlQuery)&&sqlQuery.length===0){return/*#__PURE__*/_jsx("div",{className:"text-gray-600 p-6",children:/*#__PURE__*/_jsx("p",{className:"text-xs",children:"No query details available"})})}// Handle multiple queries
|
|
2
|
+
useEffect(function(){if(!isOpen){setExpandedButtons({})}},[isOpen]);function copyToClipboard(_x,_x2){return _copyToClipboard.apply(this,arguments)}function _copyToClipboard(){_copyToClipboard=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(queryToCopy,copyId){var textToCopy,id;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:textToCopy=queryToCopy;if(!textToCopy){if(Array.isArray(sqlQuery)){textToCopy=sqlQuery.filter(function(q){return q&&typeof q==="string"}).join("\n\n-- Next Query --\n\n")}else if(typeof sqlQuery==="string"){textToCopy=sqlQuery}else{textToCopy=""}}if(textToCopy){_context.next=4;break}return _context.abrupt("return");case 4:id=copyId||"main";_context.prev=5;_context.next=8;return navigator.clipboard.writeText(textToCopy);case 8:setCopied(function(prev){var _extends3;return _extends({},prev,(_extends3={},_extends3[id]=true,_extends3))});setTimeout(function(){return setCopied(function(prev){var _extends4;return _extends({},prev,(_extends4={},_extends4[id]=false,_extends4))})},2000);_context.next=14;break;case 12:_context.prev=12;_context.t0=_context["catch"](5);case 14:case"end":return _context.stop()}},_callee,null,[[5,12]])}));return _copyToClipboard.apply(this,arguments)}function toggleButtonExpansion(buttonIndex){setExpandedButtons(function(prev){var _extends2;return _extends({},prev,(_extends2={},_extends2[buttonIndex]=!prev[buttonIndex],_extends2))})}function renderTableButtonExplanations(){if(!tableButtonExplanations||tableButtonExplanations.length===0){return null}var hasValidJsonBody=function hasValidJsonBody(jsonBody){return jsonBody!==null&&jsonBody!==undefined&&jsonBody!==""};return/*#__PURE__*/_jsx("div",{className:"mb-6",children:tableButtonExplanations.map(function(button,index){var _button$buttonStyle,_button$buttonStyle2,_button$buttonStyle3;return/*#__PURE__*/_jsxs("div",{className:"mb-3 border border-gray-200 rounded-lg",children:[/*#__PURE__*/_jsxs("div",{className:"w-full px-4 py-3 flex items-center justify-between rounded-lg",children:[/*#__PURE__*/_jsxs("div",{className:"flex items-center",children:[/*#__PURE__*/_jsx("button",{onClick:function onClick(){return toggleButtonExpansion(index)},className:button.buttonClassName||"flex items-center px-3 py-1.5 rounded text-xs font-medium",style:_extends({backgroundColor:((_button$buttonStyle=button.buttonStyle)==null?void 0:_button$buttonStyle.backgroundColor)||"#f3f4f6",color:((_button$buttonStyle2=button.buttonStyle)==null?void 0:_button$buttonStyle2.color)||"#374151",border:((_button$buttonStyle3=button.buttonStyle)==null?void 0:_button$buttonStyle3.border)||"1px solid #d1d5db"},button.buttonStyle||{}),children:button.action}),/*#__PURE__*/_jsx("div",{className:"ml-3 flex flex-col",children:/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-500 font-medium",children:button.operationDescription||button.operationSummary||button.explanation})})]}),/*#__PURE__*/_jsx(ChevronDown,{className:"w-4 h-4 text-gray-500 transition-transform cursor-pointer "+(expandedButtons[index]?"rotate-180":""),onClick:function onClick(){return toggleButtonExpansion(index)}})]}),expandedButtons[index]&&/*#__PURE__*/_jsx("div",{className:"px-4 pb-3 border-t border-gray-200",children:/*#__PURE__*/_jsxs("div",{className:"mt-2 space-y-3",children:[/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"URL"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(button.explanation,"url-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["url-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:button.explanation})]}),button.hasPayload&&/*#__PURE__*/_jsxs("div",{className:"space-y-3",children:[button.formFields&&Object.keys(button.formFields).length>0&&/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"Form Fields"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(JSON.stringify(button.formFields,null,2),"form-fields-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["form-fields-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:JSON.stringify(button.formFields,null,2)})]}),hasValidJsonBody(button.jsonBody)&&/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"JSON Body"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(JSON.stringify(button.jsonBody,null,2),"json-body-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["json-body-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:JSON.stringify(button.jsonBody,null,2)})]}),button.filesArg&&Object.keys(button.filesArg).length>0&&/*#__PURE__*/_jsxs("div",{className:"bg-gray-50 rounded-lg p-3",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:"text-xs font-medium text-gray-600",children:"Files"}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(JSON.stringify(button.filesArg,null,2),"files-"+index)},className:"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors",type:"button",children:copied["files-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"text-xs text-gray-700 font-mono bg-white p-2 rounded border",children:JSON.stringify(button.filesArg,null,2)})]})]})]})})]},index)})})}function renderModalContent(){if(isLoading){return/*#__PURE__*/_jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[/*#__PURE__*/_jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-purple-600 mb-4"}),/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-600",children:"Fetching query details from semantic layer..."}),/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-400 mt-2",children:"This may take a few moments"})]})}if(error){return/*#__PURE__*/_jsxs("div",{className:"text-red-600 p-4 bg-red-50 rounded-lg border border-red-200 m-6",children:[/*#__PURE__*/_jsx("p",{className:"font-medium mb-2 text-xs",children:"Unable to fetch query details"}),/*#__PURE__*/_jsx("p",{className:"text-xs mb-3",children:error}),/*#__PURE__*/_jsx("button",{onClick:onRetry,className:"px-4 py-2 bg-red-100 hover:bg-red-200 rounded text-xs font-medium transition-colors",type:"button",children:"Retry"})]})}if(!sqlQuery||Array.isArray(sqlQuery)&&sqlQuery.length===0){return/*#__PURE__*/_jsx("div",{className:"text-gray-600 p-6",children:/*#__PURE__*/_jsx("p",{className:"text-xs",children:"No query details available"})})}// Handle multiple queries
|
|
3
3
|
if(Array.isArray(sqlQuery)){return/*#__PURE__*/_jsxs("div",{className:"p-6 space-y-4",children:[sqlQuery.filter(function(query){return query&&typeof query==="string"&&query.trim()}).map(function(query,index){var rawHeading=queryHeadings[index]||"Query "+(index+1);var heading=formatQueryHeading(rawHeading);return/*#__PURE__*/_jsxs("div",{className:"bg-white border border-gray-200 rounded-lg p-4",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-3",children:[/*#__PURE__*/_jsx("h3",{className:"font-semibold text-xs text-gray-500 m-0",children:heading}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(query,"query-"+index)},className:"flex items-center gap-2 px-2 py-1 text-xs bg-gray-50 border border-gray-300 rounded hover:bg-gray-100 transition-colors",type:"button",children:copied["query-"+index]?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0",children:query})]},index)}),renderTableButtonExplanations()]})}return/*#__PURE__*/_jsxs("div",{className:"p-6 space-y-4",children:[/*#__PURE__*/_jsxs("div",{className:"bg-white border border-gray-200 rounded-lg p-4",children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-3",children:[/*#__PURE__*/_jsx("h3",{className:"font-semibold text-xs text-gray-500 m-0",children:formatQueryHeading(queryHeadings[0]||"Query details")}),/*#__PURE__*/_jsx("button",{onClick:function onClick(){return copyToClipboard(undefined,"single")},className:"flex items-center gap-2 px-2 py-1 text-xs bg-gray-50 border border-gray-300 rounded hover:bg-gray-100 transition-colors",type:"button",children:copied.single?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Check,{className:"w-3 h-3 text-green-600"}),/*#__PURE__*/_jsx("span",{className:"text-green-600",children:"Copied!"})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Copy,{className:"w-3 h-3 text-gray-600"}),/*#__PURE__*/_jsx("span",{className:"text-gray-600",children:"Copy"})]})})]}),/*#__PURE__*/_jsx("pre",{className:"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0",children:sqlQuery})]}),renderTableButtonExplanations()]})}return/*#__PURE__*/_jsx(CustomModal,{isOpen:isOpen,onClose:onClose,title:"How was this metric calculated?",children:renderModalContent()})}export default QueryDetailsModal;
|
|
4
4
|
//# sourceMappingURL=query-details-modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-details-modal.js","names":["React","useState","useEffect","CustomModal","Copy","Check","ChevronDown","formatQueryHeading","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","QueryDetailsModal","_ref","isOpen","onClose","isLoading","error","sqlQuery","_ref$queryHeadings","queryHeadings","_ref$tableButtonExpla","tableButtonExplanations","onRetry","_useState","copied","setCopied","_useState2","expandedButtons","setExpandedButtons","copyToClipboard","_x","_x2","_copyToClipboard","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","queryToCopy","copyId","textToCopy","id","wrap","_callee$","_context","prev","next","Array","isArray","filter","q","join","abrupt","navigator","clipboard","writeText","_extends3","_extends","setTimeout","_extends4","t0","stop","toggleButtonExpansion","buttonIndex","_extends2","renderTableButtonExplanations","length","hasValidJsonBody","jsonBody","undefined","className","children","map","button","index","_button$buttonStyle","_button$buttonStyle2","_button$buttonStyle3","onClick","buttonClassName","style","backgroundColor","buttonStyle","color","border","action","operationDescription","operationSummary","explanation","type","hasPayload","formFields","Object","keys","JSON","stringify","filesArg","renderModalContent","query","trim","rawHeading","heading","single","title"],"sources":["../../../src/plugins/helpers/query-details-modal.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { CustomModal } from './custom-modal';\nimport { Copy, Check, ChevronDown } from 'lucide-react';\nimport { formatQueryHeading } from './query-heading-formatter';\n\ntype QueryDetailsModalProps = {\n isOpen: boolean;\n onClose: () => void;\n isLoading: boolean;\n error: string;\n sqlQuery: string | string[];\n queryHeadings?: string[];\n tableButtonExplanations?: Array<{\n action: string, \n explanation: string, \n operationName?: string, \n operationSummary?: string,\n operationDescription?: string,\n buttonClassName?: string, \n buttonStyle?: Record<string, unknown>,\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n filesArg?: Record<string, unknown>;\n hasPayload?: boolean;\n }>;\n onRetry: () => void;\n};\n\nexport function QueryDetailsModal({\n isOpen,\n onClose,\n isLoading,\n error,\n sqlQuery,\n queryHeadings = [],\n tableButtonExplanations = [],\n onRetry\n}: QueryDetailsModalProps) {\n const [copied, setCopied] = useState<{ [key: string]: boolean }>({});\n const [expandedButtons, setExpandedButtons] = useState<{ [key: string]: boolean }>({});\n\n // Reset expanded state when modal closes\n useEffect(() => {\n if (!isOpen) {\n setExpandedButtons({});\n }\n }, [isOpen]);\n\n async function copyToClipboard(queryToCopy?: string, copyId?: string) {\n let textToCopy = queryToCopy;\n \n if (!textToCopy) {\n if (Array.isArray(sqlQuery)) {\n textToCopy = sqlQuery.filter(q => q && typeof q === 'string').join('\\n\\n-- Next Query --\\n\\n');\n } else if (typeof sqlQuery === 'string') {\n textToCopy = sqlQuery;\n } else {\n textToCopy = '';\n }\n }\n \n if (!textToCopy) {\n return;\n }\n \n const id = copyId || 'main';\n \n try {\n await navigator.clipboard.writeText(textToCopy);\n setCopied(prev => ({ ...prev, [id]: true }));\n setTimeout(() => setCopied(prev => ({ ...prev, [id]: false })), 2000);\n } catch (err) {\n // Silently fail if clipboard API is not available\n }\n }\n\n function toggleButtonExpansion(buttonIndex: number) {\n setExpandedButtons(prev => ({\n ...prev,\n [buttonIndex]: !prev[buttonIndex]\n }));\n }\n\n function renderTableButtonExplanations() {\n if (!tableButtonExplanations || tableButtonExplanations.length === 0) {\n return null;\n }\n\n function hasValidJsonBody(jsonBody: unknown): boolean {\n return jsonBody !== null && jsonBody !== undefined && jsonBody !== '';\n }\n\n return (\n <div className=\"mb-6\">\n {tableButtonExplanations.map((button, index) => (\n <div key={index} className=\"mb-3 border border-gray-200 rounded-lg\">\n <div className=\"w-full px-4 py-3 flex items-center justify-between rounded-lg\">\n <div className=\"flex items-center\">\n <button\n onClick={() => toggleButtonExpansion(index)}\n className={button.buttonClassName || \"flex items-center px-3 py-1.5 rounded text-xs font-medium\"}\n style={{\n backgroundColor: (button.buttonStyle?.backgroundColor as string) || '#f3f4f6',\n color: (button.buttonStyle?.color as string) || '#374151',\n border: (button.buttonStyle?.border as string) || '1px solid #d1d5db',\n ...(button.buttonStyle as React.CSSProperties || {})\n }}\n >\n {button.action}\n </button>\n <div className=\"ml-3 flex flex-col\">\n <span className=\"text-xs text-gray-500 font-medium\">\n {button.operationDescription || button.operationSummary || button.explanation}\n </span>\n </div>\n </div>\n <ChevronDown \n className={`w-4 h-4 text-gray-500 transition-transform cursor-pointer ${\n expandedButtons[index] ? 'rotate-180' : ''\n }`}\n onClick={() => toggleButtonExpansion(index)}\n />\n </div>\n \n {expandedButtons[index] && (\n <div className=\"px-4 pb-3 border-t border-gray-200\">\n <div className=\"mt-2 space-y-3\">\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">URL</span>\n <button\n onClick={() => copyToClipboard(button.explanation, `url-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`url-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {button.explanation}\n </pre>\n </div>\n \n {button.hasPayload && (\n <div className=\"space-y-3\">\n {button.formFields && Object.keys(button.formFields).length > 0 && (\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">Form Fields</span>\n <button\n onClick={() => copyToClipboard(JSON.stringify(button.formFields, null, 2), `form-fields-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`form-fields-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {JSON.stringify(button.formFields, null, 2)}\n </pre>\n </div>\n )}\n \n {hasValidJsonBody(button.jsonBody) && (\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">JSON Body</span>\n <button\n onClick={() => copyToClipboard(JSON.stringify(button.jsonBody, null, 2), `json-body-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`json-body-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {JSON.stringify(button.jsonBody, null, 2)}\n </pre>\n </div>\n )}\n \n {button.filesArg && Object.keys(button.filesArg).length > 0 && (\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">Files</span>\n <button\n onClick={() => copyToClipboard(JSON.stringify(button.filesArg, null, 2), `files-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`files-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {JSON.stringify(button.filesArg, null, 2)}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n );\n }\n\n function renderModalContent() {\n if (isLoading) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-purple-600 mb-4\"></div>\n <span className=\"text-xs text-gray-600\">Fetching query details from semantic layer...</span>\n <span className=\"text-xs text-gray-400 mt-2\">This may take a few moments</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"text-red-600 p-4 bg-red-50 rounded-lg border border-red-200 m-6\">\n <p className=\"font-medium mb-2 text-xs\">Unable to fetch query details</p>\n <p className=\"text-xs mb-3\">{error}</p>\n <button \n onClick={onRetry}\n className=\"px-4 py-2 bg-red-100 hover:bg-red-200 rounded text-xs font-medium transition-colors\"\n type=\"button\"\n >\n Retry\n </button>\n </div>\n );\n }\n\n if (!sqlQuery || (Array.isArray(sqlQuery) && sqlQuery.length === 0)) {\n return (\n <div className=\"text-gray-600 p-6\">\n <p className=\"text-xs\">No query details available</p>\n </div>\n );\n }\n\n // Handle multiple queries\n if (Array.isArray(sqlQuery)) {\n return (\n <div className=\"p-6 space-y-4\">\n {sqlQuery\n .filter(query => query && typeof query === 'string' && query.trim())\n .map((query, index) => {\n\n const rawHeading = queryHeadings[index] || `Query ${index + 1}`;\n const heading = formatQueryHeading(rawHeading);\n\n return (\n <div \n key={index} \n className=\"bg-white border border-gray-200 rounded-lg p-4\"\n >\n <div className=\"flex justify-between items-start mb-3\">\n <h3 className=\"font-semibold text-xs text-gray-500 m-0\">\n {heading}\n </h3>\n <button\n onClick={() => copyToClipboard(query, `query-${index}`)}\n className=\"flex items-center gap-2 px-2 py-1 text-xs bg-gray-50 border border-gray-300 rounded hover:bg-gray-100 transition-colors\"\n type=\"button\"\n >\n {copied[`query-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0\">\n {query}\n </pre>\n </div>\n );\n })}\n {renderTableButtonExplanations()}\n </div>\n );\n }\n\n return (\n <div className=\"p-6 space-y-4\">\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"flex justify-between items-start mb-3\">\n <h3 className=\"font-semibold text-xs text-gray-500 m-0\">\n {formatQueryHeading(queryHeadings[0] || \"Query details\")}\n </h3>\n <button\n onClick={() => copyToClipboard(undefined, 'single')}\n className=\"flex items-center gap-2 px-2 py-1 text-xs bg-gray-50 border border-gray-300 rounded hover:bg-gray-100 transition-colors\"\n type=\"button\"\n >\n {copied.single ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0\">\n {sqlQuery}\n </pre>\n </div>\n {renderTableButtonExplanations()}\n </div>\n );\n }\n\n return (\n <CustomModal\n isOpen={isOpen}\n onClose={onClose}\n title=\"How was this metric calculated?\"\n >\n {renderModalContent()}\n </CustomModal>\n );\n}\n\nexport default QueryDetailsModal;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"query-details-modal.js","names":["React","useState","useEffect","CustomModal","Copy","Check","ChevronDown","formatQueryHeading","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","QueryDetailsModal","_ref","isOpen","onClose","isLoading","error","sqlQuery","_ref$queryHeadings","queryHeadings","_ref$tableButtonExpla","tableButtonExplanations","onRetry","_useState","copied","setCopied","_useState2","expandedButtons","setExpandedButtons","copyToClipboard","_x","_x2","_copyToClipboard","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","queryToCopy","copyId","textToCopy","id","wrap","_callee$","_context","prev","next","Array","isArray","filter","q","join","abrupt","navigator","clipboard","writeText","_extends3","_extends","setTimeout","_extends4","t0","stop","toggleButtonExpansion","buttonIndex","_extends2","renderTableButtonExplanations","length","hasValidJsonBody","jsonBody","undefined","className","children","map","button","index","_button$buttonStyle","_button$buttonStyle2","_button$buttonStyle3","onClick","buttonClassName","style","backgroundColor","buttonStyle","color","border","action","operationDescription","operationSummary","explanation","type","hasPayload","formFields","Object","keys","JSON","stringify","filesArg","renderModalContent","query","trim","rawHeading","heading","single","title"],"sources":["../../../src/plugins/helpers/query-details-modal.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { CustomModal } from './custom-modal';\nimport { Copy, Check, ChevronDown } from 'lucide-react';\nimport { formatQueryHeading } from './query-heading-formatter';\n\ntype QueryDetailsModalProps = {\n isOpen: boolean;\n onClose: () => void;\n isLoading: boolean;\n error: string;\n sqlQuery: string | string[];\n queryHeadings?: string[];\n tableButtonExplanations?: Array<{\n action: string, \n explanation: string, \n operationName?: string, \n operationSummary?: string,\n operationDescription?: string,\n buttonClassName?: string, \n buttonStyle?: Record<string, unknown>,\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n filesArg?: Record<string, unknown>;\n hasPayload?: boolean;\n }>;\n onRetry: () => void;\n};\n\nexport function QueryDetailsModal({\n isOpen,\n onClose,\n isLoading,\n error,\n sqlQuery,\n queryHeadings = [],\n tableButtonExplanations = [],\n onRetry\n}: QueryDetailsModalProps) {\n const [copied, setCopied] = useState<{ [key: string]: boolean }>({});\n const [expandedButtons, setExpandedButtons] = useState<{ [key: string]: boolean }>({});\n\n // Reset expanded state when modal closes\n useEffect(() => {\n if (!isOpen) {\n setExpandedButtons({});\n }\n }, [isOpen]);\n\n async function copyToClipboard(queryToCopy?: string, copyId?: string) {\n let textToCopy = queryToCopy;\n \n if (!textToCopy) {\n if (Array.isArray(sqlQuery)) {\n textToCopy = sqlQuery.filter(q => q && typeof q === 'string').join('\\n\\n-- Next Query --\\n\\n');\n } else if (typeof sqlQuery === 'string') {\n textToCopy = sqlQuery;\n } else {\n textToCopy = '';\n }\n }\n \n if (!textToCopy) {\n return;\n }\n \n const id = copyId || 'main';\n \n try {\n await navigator.clipboard.writeText(textToCopy);\n setCopied(prev => ({ ...prev, [id]: true }));\n setTimeout(() => setCopied(prev => ({ ...prev, [id]: false })), 2000);\n } catch (err) {\n // Silently fail if clipboard API is not available\n }\n }\n\n function toggleButtonExpansion(buttonIndex: number) {\n setExpandedButtons(prev => ({\n ...prev,\n [buttonIndex]: !prev[buttonIndex]\n }));\n }\n\n function renderTableButtonExplanations() {\n if (!tableButtonExplanations || tableButtonExplanations.length === 0) {\n return null;\n }\n\n const hasValidJsonBody = (jsonBody: unknown): boolean => {\n return jsonBody !== null && jsonBody !== undefined && jsonBody !== '';\n };\n\n return (\n <div className=\"mb-6\">\n {tableButtonExplanations.map((button, index) => (\n <div key={index} className=\"mb-3 border border-gray-200 rounded-lg\">\n <div className=\"w-full px-4 py-3 flex items-center justify-between rounded-lg\">\n <div className=\"flex items-center\">\n <button\n onClick={() => toggleButtonExpansion(index)}\n className={button.buttonClassName || \"flex items-center px-3 py-1.5 rounded text-xs font-medium\"}\n style={{\n backgroundColor: (button.buttonStyle?.backgroundColor as string) || '#f3f4f6',\n color: (button.buttonStyle?.color as string) || '#374151',\n border: (button.buttonStyle?.border as string) || '1px solid #d1d5db',\n ...(button.buttonStyle as React.CSSProperties || {})\n }}\n >\n {button.action}\n </button>\n <div className=\"ml-3 flex flex-col\">\n <span className=\"text-xs text-gray-500 font-medium\">\n {button.operationDescription || button.operationSummary || button.explanation}\n </span>\n </div>\n </div>\n <ChevronDown \n className={`w-4 h-4 text-gray-500 transition-transform cursor-pointer ${\n expandedButtons[index] ? 'rotate-180' : ''\n }`}\n onClick={() => toggleButtonExpansion(index)}\n />\n </div>\n \n {expandedButtons[index] && (\n <div className=\"px-4 pb-3 border-t border-gray-200\">\n <div className=\"mt-2 space-y-3\">\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">URL</span>\n <button\n onClick={() => copyToClipboard(button.explanation, `url-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`url-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {button.explanation}\n </pre>\n </div>\n \n {button.hasPayload && (\n <div className=\"space-y-3\">\n {button.formFields && Object.keys(button.formFields).length > 0 && (\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">Form Fields</span>\n <button\n onClick={() => copyToClipboard(JSON.stringify(button.formFields, null, 2), `form-fields-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`form-fields-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {JSON.stringify(button.formFields, null, 2)}\n </pre>\n </div>\n )}\n \n {hasValidJsonBody(button.jsonBody) && (\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">JSON Body</span>\n <button\n onClick={() => copyToClipboard(JSON.stringify(button.jsonBody, null, 2), `json-body-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`json-body-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {JSON.stringify(button.jsonBody, null, 2)}\n </pre>\n </div>\n )}\n \n {button.filesArg && Object.keys(button.filesArg).length > 0 && (\n <div className=\"bg-gray-50 rounded-lg p-3\">\n <div className=\"flex justify-between items-start mb-2\">\n <span className=\"text-xs font-medium text-gray-600\">Files</span>\n <button\n onClick={() => copyToClipboard(JSON.stringify(button.filesArg, null, 2), `files-${index}`)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 border border-gray-300 rounded hover:bg-gray-200 transition-colors\"\n type=\"button\"\n >\n {copied[`files-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"text-xs text-gray-700 font-mono bg-white p-2 rounded border\">\n {JSON.stringify(button.filesArg, null, 2)}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n );\n }\n\n function renderModalContent() {\n if (isLoading) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-purple-600 mb-4\"></div>\n <span className=\"text-xs text-gray-600\">Fetching query details from semantic layer...</span>\n <span className=\"text-xs text-gray-400 mt-2\">This may take a few moments</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"text-red-600 p-4 bg-red-50 rounded-lg border border-red-200 m-6\">\n <p className=\"font-medium mb-2 text-xs\">Unable to fetch query details</p>\n <p className=\"text-xs mb-3\">{error}</p>\n <button \n onClick={onRetry}\n className=\"px-4 py-2 bg-red-100 hover:bg-red-200 rounded text-xs font-medium transition-colors\"\n type=\"button\"\n >\n Retry\n </button>\n </div>\n );\n }\n\n if (!sqlQuery || (Array.isArray(sqlQuery) && sqlQuery.length === 0)) {\n return (\n <div className=\"text-gray-600 p-6\">\n <p className=\"text-xs\">No query details available</p>\n </div>\n );\n }\n\n // Handle multiple queries\n if (Array.isArray(sqlQuery)) {\n return (\n <div className=\"p-6 space-y-4\">\n {sqlQuery\n .filter(query => query && typeof query === 'string' && query.trim())\n .map((query, index) => {\n\n const rawHeading = queryHeadings[index] || `Query ${index + 1}`;\n const heading = formatQueryHeading(rawHeading);\n\n return (\n <div \n key={index} \n className=\"bg-white border border-gray-200 rounded-lg p-4\"\n >\n <div className=\"flex justify-between items-start mb-3\">\n <h3 className=\"font-semibold text-xs text-gray-500 m-0\">\n {heading}\n </h3>\n <button\n onClick={() => copyToClipboard(query, `query-${index}`)}\n className=\"flex items-center gap-2 px-2 py-1 text-xs bg-gray-50 border border-gray-300 rounded hover:bg-gray-100 transition-colors\"\n type=\"button\"\n >\n {copied[`query-${index}`] ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0\">\n {query}\n </pre>\n </div>\n );\n })}\n {renderTableButtonExplanations()}\n </div>\n );\n }\n\n return (\n <div className=\"p-6 space-y-4\">\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"flex justify-between items-start mb-3\">\n <h3 className=\"font-semibold text-xs text-gray-500 m-0\">\n {formatQueryHeading(queryHeadings[0] || \"Query details\")}\n </h3>\n <button\n onClick={() => copyToClipboard(undefined, 'single')}\n className=\"flex items-center gap-2 px-2 py-1 text-xs bg-gray-50 border border-gray-300 rounded hover:bg-gray-100 transition-colors\"\n type=\"button\"\n >\n {copied.single ? (\n <>\n <Check className=\"w-3 h-3 text-green-600\" />\n <span className=\"text-green-600\">Copied!</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3 h-3 text-gray-600\" />\n <span className=\"text-gray-600\">Copy</span>\n </>\n )}\n </button>\n </div>\n <pre className=\"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0\">\n {sqlQuery}\n </pre>\n </div>\n {renderTableButtonExplanations()}\n </div>\n );\n }\n\n return (\n <CustomModal\n isOpen={isOpen}\n onClose={onClose}\n title=\"How was this metric calculated?\"\n >\n {renderModalContent()}\n </CustomModal>\n );\n}\n\nexport default QueryDetailsModal;\n"],"mappings":"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","ignoreList":[]}
|