@peak-ai/canvas 1.4.20-rc.9 → 1.4.21

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
@@ -2,7 +2,7 @@
2
2
  "name": "@peak-ai/canvas",
3
3
  "author": "squad-builder-experience",
4
4
  "license": "UNLICENSED",
5
- "version": "1.4.20-rc.9",
5
+ "version": "1.4.21",
6
6
  "description": "",
7
7
  "dependencies": {
8
8
  "@emotion/react": "^11.11.4",
@@ -59,4 +59,4 @@
59
59
  "types": "index.d.ts",
60
60
  "module": "index.js",
61
61
  "sideEffects": false
62
- }
62
+ }
@@ -1,6 +1,7 @@
1
1
  import { QueryCacheEntry, InteractionType, InteractionState } from './query-cache-utils';
2
2
  declare class QueryCacheManager {
3
3
  private cache;
4
+ private totalEntries;
4
5
  private maxCacheSize;
5
6
  private maxCacheAge;
6
7
  constructor(maxCacheSize?: number, maxCacheAge?: number);
@@ -10,7 +11,9 @@ declare class QueryCacheManager {
10
11
  invalidateAll(): void;
11
12
  isCached(componentId: string, interactionType: InteractionType, state: InteractionState): boolean;
12
13
  private cleanupCache;
14
+ private getTotalCacheSize;
13
15
  getStats(): {
16
+ componentCount: number;
14
17
  maxAge: number;
15
18
  maxSize: number;
16
19
  size: number;
@@ -1,3 +1,4 @@
1
- import _extends from"@babel/runtime/helpers/extends";function _createForOfIteratorHelperLoose(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}import{createCacheKey,getInvalidationPattern}from"./query-cache-utils";var QueryCacheManager=/*#__PURE__*/function(){// 5 minutes
2
- function QueryCacheManager(maxCacheSize,maxCacheAge){if(maxCacheSize===void 0){maxCacheSize=100}if(maxCacheAge===void 0){maxCacheAge=5*60*1000}this.cache=new Map;this.maxCacheSize=100;this.maxCacheAge=5*60*1000;this.maxCacheSize=maxCacheSize;this.maxCacheAge=maxCacheAge}var _proto=QueryCacheManager.prototype;_proto.getCachedQuery=function getCachedQuery(componentId,interactionType,state){var key=createCacheKey(componentId,interactionType,state);var entry=this.cache.get(key);if(!entry){return null}var now=Date.now();if(now-entry.timestamp>this.maxCacheAge){this.cache["delete"](key);return null}return entry};_proto.setCachedQuery=function setCachedQuery(componentId,interactionType,state,entry){var key=createCacheKey(componentId,interactionType,state);this.cache.set(key,_extends({},entry,{timestamp:Date.now()}));if(this.cache.size>this.maxCacheSize){this.cleanupCache()}};_proto.invalidateComponent=function invalidateComponent(componentId){var pattern=getInvalidationPattern(componentId);for(var _iterator=_createForOfIteratorHelperLoose(this.cache.keys()),_step;!(_step=_iterator()).done;){var key=_step.value;if(pattern.test(key)){this.cache["delete"](key)}}};_proto.invalidateAll=function invalidateAll(){this.cache.clear()};_proto.isCached=function isCached(componentId,interactionType,state){return this.getCachedQuery(componentId,interactionType,state)!==null};_proto.cleanupCache=function cleanupCache(){var now=Date.now();for(var _iterator2=_createForOfIteratorHelperLoose(this.cache.entries()),_step2;!(_step2=_iterator2()).done;){var _step2$value=_step2.value,_key=_step2$value[0],entry=_step2$value[1];if(now-entry.timestamp>this.maxCacheAge){this.cache["delete"](_key)}}if(this.cache.size>this.maxCacheSize){var entries=Array.from(this.cache.entries());entries.sort(function(a,b){return a[1].timestamp-b[1].timestamp});var entriesToRemove=entries.slice(0,this.cache.size-this.maxCacheSize);for(var _iterator3=_createForOfIteratorHelperLoose(entriesToRemove),_step3;!(_step3=_iterator3()).done;){var _step3$value=_step3.value,key=_step3$value[0];this.cache["delete"](key)}}};_proto.getStats=function getStats(){return{maxAge:this.maxCacheAge,maxSize:this.maxCacheSize,size:this.cache.size}};return QueryCacheManager}();var globalCacheInstance=null;export function getGlobalQueryCache(){if(!globalCacheInstance){globalCacheInstance=new QueryCacheManager}return globalCacheInstance}export function resetGlobalQueryCache(){globalCacheInstance=null}export function configureGlobalQueryCache(maxCacheSize,maxCacheAge){if(maxCacheSize===void 0){maxCacheSize=100}if(maxCacheAge===void 0){maxCacheAge=5*60*1000}globalCacheInstance=new QueryCacheManager(maxCacheSize,maxCacheAge)}
1
+ import _extends from"@babel/runtime/helpers/extends";function _createForOfIteratorHelperLoose(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}import{createInteractionKey}from"./query-cache-utils";var QueryCacheManager=/*#__PURE__*/function(){// 5 minutes
2
+ function QueryCacheManager(maxCacheSize,maxCacheAge){if(maxCacheSize===void 0){maxCacheSize=100}if(maxCacheAge===void 0){maxCacheAge=5*60*1000}this.cache=new Map;this.totalEntries=0;this.maxCacheSize=100;this.maxCacheAge=5*60*1000;this.maxCacheSize=maxCacheSize;this.maxCacheAge=maxCacheAge}var _proto=QueryCacheManager.prototype;_proto.getCachedQuery=function getCachedQuery(componentId,interactionType,state){var componentCache=this.cache.get(componentId);if(!componentCache){return null}var key=createInteractionKey(interactionType,state);var entry=componentCache.get(key);if(!entry){return null}var now=Date.now();if(now-entry.timestamp>this.maxCacheAge){componentCache["delete"](key);this.totalEntries-=1;if(componentCache.size===0){this.cache["delete"](componentId)}return null}return entry};_proto.setCachedQuery=function setCachedQuery(componentId,interactionType,state,entry){var componentCache=this.cache.get(componentId);if(!componentCache){componentCache=new Map;this.cache.set(componentId,componentCache)}var key=createInteractionKey(interactionType,state);var isNewEntry=!componentCache.has(key);componentCache.set(key,_extends({},entry,{timestamp:Date.now()}));if(isNewEntry){this.totalEntries+=1}if(this.totalEntries>this.maxCacheSize){this.cleanupCache()}};_proto.invalidateComponent=function invalidateComponent(componentId){var componentCache=this.cache.get(componentId);if(componentCache){this.totalEntries-=componentCache.size;this.cache["delete"](componentId)}};_proto.invalidateAll=function invalidateAll(){this.cache.clear();this.totalEntries=0};_proto.isCached=function isCached(componentId,interactionType,state){return this.getCachedQuery(componentId,interactionType,state)!==null};_proto.cleanupCache=function cleanupCache(){var now=Date.now();var allEntries=[];for(var _iterator=_createForOfIteratorHelperLoose(this.cache.entries()),_step;!(_step=_iterator()).done;){var _step$value=_step.value,_componentId=_step$value[0],_componentCache=_step$value[1];for(var _iterator3=_createForOfIteratorHelperLoose(_componentCache.entries()),_step3;!(_step3=_iterator3()).done;){var _step3$value=_step3.value,_key=_step3$value[0],entry=_step3$value[1];if(now-entry.timestamp>this.maxCacheAge){_componentCache["delete"](_key);this.totalEntries-=1}else{allEntries.push({componentId:_componentId,key:_key,timestamp:entry.timestamp})}}if(_componentCache.size===0){this.cache["delete"](_componentId)}}if(allEntries.length>this.maxCacheSize){allEntries.sort(function(a,b){return a.timestamp-b.timestamp});var entriesToRemove=allEntries.slice(0,allEntries.length-this.maxCacheSize);for(var _iterator2=_createForOfIteratorHelperLoose(entriesToRemove),_step2;!(_step2=_iterator2()).done;){var _step2$value=_step2.value,componentId=_step2$value.componentId,key=_step2$value.key;var componentCache=this.cache.get(componentId);if(componentCache){componentCache["delete"](key);this.totalEntries-=1;// Remove empty component caches
3
+ if(componentCache.size===0){this.cache["delete"](componentId)}}}}};_proto.getTotalCacheSize=function getTotalCacheSize(){return this.totalEntries};_proto.getStats=function getStats(){return{componentCount:this.cache.size,maxAge:this.maxCacheAge,maxSize:this.maxCacheSize,size:this.getTotalCacheSize()}};return QueryCacheManager}();var globalCacheInstance=null;export function getGlobalQueryCache(){if(!globalCacheInstance){globalCacheInstance=new QueryCacheManager}return globalCacheInstance}export function resetGlobalQueryCache(){globalCacheInstance=null}export function configureGlobalQueryCache(maxCacheSize,maxCacheAge){if(maxCacheSize===void 0){maxCacheSize=100}if(maxCacheAge===void 0){maxCacheAge=5*60*1000}globalCacheInstance=new QueryCacheManager(maxCacheSize,maxCacheAge)}
3
4
  //# sourceMappingURL=query-cache-singleton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-cache-singleton.js","names":["createCacheKey","getInvalidationPattern","QueryCacheManager","maxCacheSize","maxCacheAge","cache","Map","_proto","prototype","getCachedQuery","componentId","interactionType","state","key","entry","get","now","Date","timestamp","setCachedQuery","set","_extends","size","cleanupCache","invalidateComponent","pattern","_iterator","_createForOfIteratorHelperLoose","keys","_step","done","value","test","invalidateAll","clear","isCached","_iterator2","entries","_step2","_step2$value","Array","from","sort","a","b","entriesToRemove","slice","_iterator3","_step3","_step3$value","getStats","maxAge","maxSize","globalCacheInstance","getGlobalQueryCache","resetGlobalQueryCache","configureGlobalQueryCache"],"sources":["../../../src/plugins/helpers/query-cache-singleton.ts"],"sourcesContent":["import {\n QueryCacheEntry,\n InteractionType,\n InteractionState,\n createCacheKey,\n getInvalidationPattern\n} from './query-cache-utils';\n\nclass QueryCacheManager {\n private cache: Map<string, QueryCacheEntry> = new Map();\n private maxCacheSize = 100;\n private maxCacheAge: number = 5 * 60 * 1000; // 5 minutes\n\n constructor(maxCacheSize = 100, maxCacheAge = 5 * 60 * 1000) {\n this.maxCacheSize = maxCacheSize;\n this.maxCacheAge = maxCacheAge;\n }\n\n getCachedQuery(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): QueryCacheEntry | null {\n const key = createCacheKey(componentId, interactionType, state);\n const entry = this.cache.get(key);\n \n if (!entry) {\n return null;\n }\n \n const now = Date.now();\n\n if (now - entry.timestamp > this.maxCacheAge) {\n this.cache.delete(key);\n\n return null;\n }\n \n return entry;\n }\n\n setCachedQuery(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState,\n entry: QueryCacheEntry\n ): void {\n const key = createCacheKey(componentId, interactionType, state);\n this.cache.set(key, {\n ...entry,\n timestamp: Date.now(),\n });\n \n if (this.cache.size > this.maxCacheSize) {\n this.cleanupCache();\n }\n }\n\n invalidateComponent(componentId: string): void {\n const pattern = getInvalidationPattern(componentId);\n \n for (const key of this.cache.keys()) {\n if (pattern.test(key)) {\n this.cache.delete(key);\n }\n }\n }\n\n invalidateAll(): void {\n this.cache.clear();\n }\n\n isCached(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): boolean {\n return this.getCachedQuery(componentId, interactionType, state) !== null;\n }\n\n private cleanupCache(): void {\n const now = Date.now();\n \n for (const [key, entry] of this.cache.entries()) {\n if (now - entry.timestamp > this.maxCacheAge) {\n this.cache.delete(key);\n }\n }\n \n if (this.cache.size > this.maxCacheSize) {\n const entries = Array.from(this.cache.entries());\n entries.sort((a, b) => a[1].timestamp - b[1].timestamp);\n \n const entriesToRemove = entries.slice(0, this.cache.size - this.maxCacheSize);\n\n for (const [key] of entriesToRemove) {\n this.cache.delete(key);\n }\n }\n }\n\n getStats(): { maxAge: number; maxSize: number; size: number } {\n return {\n maxAge: this.maxCacheAge,\n maxSize: this.maxCacheSize,\n size: this.cache.size,\n };\n }\n}\n\nlet globalCacheInstance: QueryCacheManager | null = null;\n\nexport function getGlobalQueryCache(): QueryCacheManager {\n if (!globalCacheInstance) {\n globalCacheInstance = new QueryCacheManager();\n }\n\n return globalCacheInstance;\n}\n\nexport function resetGlobalQueryCache(): void {\n globalCacheInstance = null;\n}\n\nexport function configureGlobalQueryCache(maxCacheSize = 100, maxCacheAge = 5 * 60 * 1000): void {\n globalCacheInstance = new QueryCacheManager(maxCacheSize, maxCacheAge);\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"query-cache-singleton.js","names":["createInteractionKey","QueryCacheManager","maxCacheSize","maxCacheAge","cache","Map","totalEntries","_proto","prototype","getCachedQuery","componentId","interactionType","state","componentCache","get","key","entry","now","Date","timestamp","size","setCachedQuery","set","isNewEntry","has","_extends","cleanupCache","invalidateComponent","invalidateAll","clear","isCached","allEntries","_iterator","_createForOfIteratorHelperLoose","entries","_step","done","_step$value","value","_iterator3","_step3","_step3$value","push","length","sort","a","b","entriesToRemove","slice","_iterator2","_step2","_step2$value","getTotalCacheSize","getStats","componentCount","maxAge","maxSize","globalCacheInstance","getGlobalQueryCache","resetGlobalQueryCache","configureGlobalQueryCache"],"sources":["../../../src/plugins/helpers/query-cache-singleton.ts"],"sourcesContent":["import {\n QueryCacheEntry,\n InteractionType,\n InteractionState,\n createInteractionKey\n} from './query-cache-utils';\n\nclass QueryCacheManager {\n private cache: Map<string, Map<string, QueryCacheEntry>> = new Map();\n private totalEntries = 0;\n private maxCacheSize = 100;\n private maxCacheAge: number = 5 * 60 * 1000; // 5 minutes\n\n constructor(maxCacheSize = 100, maxCacheAge = 5 * 60 * 1000) {\n this.maxCacheSize = maxCacheSize;\n this.maxCacheAge = maxCacheAge;\n }\n\n getCachedQuery(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): QueryCacheEntry | null {\n const componentCache = this.cache.get(componentId);\n \n if (!componentCache) {\n return null;\n }\n \n const key = createInteractionKey(interactionType, state);\n const entry = componentCache.get(key);\n \n if (!entry) {\n return null;\n }\n \n const now = Date.now();\n\n if (now - entry.timestamp > this.maxCacheAge) {\n componentCache.delete(key);\n this.totalEntries -= 1;\n \n if (componentCache.size === 0) {\n this.cache.delete(componentId);\n }\n\n return null;\n }\n \n return entry;\n }\n\n setCachedQuery(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState,\n entry: QueryCacheEntry\n ): void {\n let componentCache = this.cache.get(componentId);\n \n if (!componentCache) {\n componentCache = new Map();\n this.cache.set(componentId, componentCache);\n }\n \n const key = createInteractionKey(interactionType, state);\n const isNewEntry = !componentCache.has(key);\n\n componentCache.set(key, {\n ...entry,\n timestamp: Date.now(),\n });\n \n if (isNewEntry) {\n this.totalEntries += 1;\n }\n\n if (this.totalEntries > this.maxCacheSize) {\n this.cleanupCache();\n }\n }\n\n invalidateComponent(componentId: string): void {\n const componentCache = this.cache.get(componentId);\n\n if (componentCache) {\n this.totalEntries -= componentCache.size;\n this.cache.delete(componentId);\n }\n }\n\n invalidateAll(): void {\n this.cache.clear();\n this.totalEntries = 0;\n }\n\n isCached(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): boolean {\n return this.getCachedQuery(componentId, interactionType, state) !== null;\n }\n\n private cleanupCache(): void {\n const now = Date.now();\n const allEntries: Array<{ componentId: string; key: string; timestamp: number }> = [];\n \n for (const [componentId, componentCache] of this.cache.entries()) {\n for (const [key, entry] of componentCache.entries()) {\n if (now - entry.timestamp > this.maxCacheAge) {\n componentCache.delete(key);\n this.totalEntries -= 1;\n } else {\n allEntries.push({ componentId, key, timestamp: entry.timestamp });\n }\n }\n \n if (componentCache.size === 0) {\n this.cache.delete(componentId);\n }\n }\n \n if (allEntries.length > this.maxCacheSize) {\n allEntries.sort((a, b) => a.timestamp - b.timestamp);\n \n const entriesToRemove = allEntries.slice(0, allEntries.length - this.maxCacheSize);\n \n for (const { componentId, key } of entriesToRemove) {\n const componentCache = this.cache.get(componentId);\n\n if (componentCache) {\n componentCache.delete(key);\n this.totalEntries -= 1;\n \n // Remove empty component caches\n if (componentCache.size === 0) {\n this.cache.delete(componentId);\n }\n }\n }\n }\n }\n \n private getTotalCacheSize(): number {\n return this.totalEntries;\n }\n\n getStats(): { componentCount: number; maxAge: number; maxSize: number; size: number } {\n return {\n componentCount: this.cache.size,\n maxAge: this.maxCacheAge,\n maxSize: this.maxCacheSize,\n size: this.getTotalCacheSize(),\n };\n }\n}\n\nlet globalCacheInstance: QueryCacheManager | null = null;\n\nexport function getGlobalQueryCache(): QueryCacheManager {\n if (!globalCacheInstance) {\n globalCacheInstance = new QueryCacheManager();\n }\n\n return globalCacheInstance;\n}\n\nexport function resetGlobalQueryCache(): void {\n globalCacheInstance = null;\n}\n\nexport function configureGlobalQueryCache(maxCacheSize = 100, maxCacheAge = 5 * 60 * 1000): void {\n globalCacheInstance = new QueryCacheManager(maxCacheSize, maxCacheAge);\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -43,6 +43,6 @@ export type CacheKey = {
43
43
  state: InteractionState;
44
44
  };
45
45
  export declare function createCacheKey(componentId: string, interactionType: InteractionType, interactionState: InteractionState): string;
46
+ export declare function createInteractionKey(interactionType: InteractionType, interactionState: InteractionState): string;
46
47
  export declare function extractInteractionState(componentProps: Record<string, unknown>): InteractionState;
47
48
  export declare function areStatesEqual(state1: InteractionState, state2: InteractionState): boolean;
48
- export declare function getInvalidationPattern(componentId: string): RegExp;
@@ -1,3 +1,6 @@
1
- function _createForOfIteratorHelperLoose(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}export function createCacheKey(componentId,interactionType,interactionState){var sortedState=sortObjectKeys(interactionState);var stateString=JSON.stringify(sortedState);return componentId+"::"+interactionType+"::"+stateString}function sortObjectKeys(obj){if(obj===null||obj===undefined){return obj}if(Array.isArray(obj)){return obj.map(function(item){return sortObjectKeys(item)})}if(typeof obj==="object"){var sorted={};var keys=Object.keys(obj).sort();for(var _iterator=_createForOfIteratorHelperLoose(keys),_step;!(_step=_iterator()).done;){var _key=_step.value;sorted[_key]=sortObjectKeys(obj[_key])}return sorted}return obj}export function extractInteractionState(componentProps){var state={};if("pagination"in componentProps&&typeof componentProps.pagination==="object"&&componentProps.pagination){var pagination=componentProps.pagination;if("pageNumber"in pagination&&typeof pagination.pageNumber==="number"){state.pageNumber=pagination.pageNumber}if("pageSize"in pagination&&typeof pagination.pageSize==="number"){state.pageSize=pagination.pageSize}}if("sortColumn"in componentProps){state.sortColumn=componentProps.sortColumn}if("sortDirection"in componentProps){state.sortDirection=componentProps.sortDirection}if("filters"in componentProps&&typeof componentProps.filters==="object"){state.filters=componentProps.filters}if("value"in componentProps){state.filterValue=componentProps.value}if("searchQuery"in componentProps&&typeof componentProps.searchQuery==="string"){state.searchQuery=componentProps.searchQuery}if("searchValue"in componentProps&&typeof componentProps.searchValue==="string"){state.searchValue=componentProps.searchValue}if("data"in componentProps){var data=componentProps.data;if(Array.isArray(data)&&data.length>0){state.dataLength=data.length;var firstRow=data[0];var lastRow=data[data.length-1];if(firstRow&&typeof firstRow==="object"){state.dataFingerprint=JSON.stringify({firstId:firstRow.id||Object.values(firstRow)[0],lastId:lastRow&&typeof lastRow==="object"?lastRow.id||Object.values(lastRow)[0]:null,length:data.length})}}else if(data&&typeof data==="object"&&data.name==="__peak_placeholder"){state.dataFingerprint="__peak_placeholder"}else{state.dataFingerprint="empty"}}if("bodyContent"in componentProps){state.bodyContent=componentProps.bodyContent}if("headerContent"in componentProps){state.headerContent=componentProps.headerContent}if("footerContent"in componentProps){state.footerContent=componentProps.footerContent}if("chartData"in componentProps){var chartData=componentProps.chartData;if(Array.isArray(chartData)){state.chartDataLength=chartData.length;state.chartDataFingerprint=JSON.stringify(chartData)}}if("summaryText"in componentProps){state.summaryText=componentProps.summaryText}if("error"in componentProps){state.error=componentProps.error}if("isMissing"in componentProps){state.isMissing=componentProps.isMissing}return state}export function areStatesEqual(state1,state2){return createCacheKey("test","semanticLayerQuery",state1)===createCacheKey("test","semanticLayerQuery",state2)}export function getInvalidationPattern(componentId){var escapedId=componentId.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");// eslint-disable-next-line security/detect-non-literal-regexp
2
- return new RegExp("^"+escapedId+"::")}
1
+ function _createForOfIteratorHelperLoose(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}export function createCacheKey(componentId,interactionType,interactionState){var sortedState=sortObjectKeys(interactionState);try{var stateString=JSON.stringify(sortedState);return componentId+"::"+interactionType+"::"+stateString}catch(error){// eslint-disable-next-line no-console
2
+ console.warn("Failed to serialize interaction state:",error);return componentId+"::"+interactionType+"::"+Date.now()+"::"+Math.random()}}export function createInteractionKey(interactionType,interactionState){var sortedState=sortObjectKeys(interactionState);try{var stateString=JSON.stringify(sortedState);return interactionType+"::"+stateString}catch(error){// eslint-disable-next-line no-console
3
+ console.warn("Failed to serialize interaction state:",error);return interactionType+"::"+Date.now()+"::"+Math.random()}}function sortObjectKeys(obj){if(obj===null||obj===undefined){return obj}if(Array.isArray(obj)){return obj.map(function(item){return sortObjectKeys(item)})}if(typeof obj==="object"){var sorted={};var keys=Object.keys(obj).sort();for(var _iterator=_createForOfIteratorHelperLoose(keys),_step;!(_step=_iterator()).done;){var _key=_step.value;sorted[_key]=sortObjectKeys(obj[_key])}return sorted}return obj}export function extractInteractionState(componentProps){var state={};if("pagination"in componentProps&&typeof componentProps.pagination==="object"&&componentProps.pagination){var pagination=componentProps.pagination;if("pageNumber"in pagination&&typeof pagination.pageNumber==="number"){state.pageNumber=pagination.pageNumber}if("pageSize"in pagination&&typeof pagination.pageSize==="number"){state.pageSize=pagination.pageSize}}if("sortColumn"in componentProps){state.sortColumn=componentProps.sortColumn}if("sortDirection"in componentProps){state.sortDirection=componentProps.sortDirection}if("filters"in componentProps&&typeof componentProps.filters==="object"){state.filters=componentProps.filters}if("value"in componentProps){state.filterValue=componentProps.value}if("searchQuery"in componentProps&&typeof componentProps.searchQuery==="string"){state.searchQuery=componentProps.searchQuery}if("searchValue"in componentProps&&typeof componentProps.searchValue==="string"){state.searchValue=componentProps.searchValue}if("data"in componentProps){var data=componentProps.data;if(Array.isArray(data)&&data.length>0){state.dataLength=data.length;var firstRow=data[0];var lastRow=data[data.length-1];if(firstRow&&typeof firstRow==="object"){try{state.dataFingerprint=JSON.stringify({firstId:firstRow.id||Object.values(firstRow)[0],lastId:lastRow&&typeof lastRow==="object"?lastRow.id||Object.values(lastRow)[0]:null,length:data.length})}catch(error){// eslint-disable-next-line no-console
4
+ console.warn("Failed to serialize data fingerprint:",error);state.dataFingerprint="fallback_"+data.length+"_"+Date.now()}}}else if(data&&typeof data==="object"&&data.name==="__peak_placeholder"){state.dataFingerprint="__peak_placeholder"}else{state.dataFingerprint="empty"}}if("bodyContent"in componentProps){state.bodyContent=componentProps.bodyContent}if("headerContent"in componentProps){state.headerContent=componentProps.headerContent}if("footerContent"in componentProps){state.footerContent=componentProps.footerContent}if("chartData"in componentProps){var chartData=componentProps.chartData;if(Array.isArray(chartData)){state.chartDataLength=chartData.length;try{state.chartDataFingerprint=JSON.stringify(chartData)}catch(error){// eslint-disable-next-line no-console
5
+ console.warn("Failed to serialize chart data fingerprint:",error);state.chartDataFingerprint="fallback_"+chartData.length+"_"+Date.now()}}}if("summaryText"in componentProps){state.summaryText=componentProps.summaryText}if("error"in componentProps){state.error=componentProps.error}if("isMissing"in componentProps){state.isMissing=componentProps.isMissing}return state}export function areStatesEqual(state1,state2){return createCacheKey("test","semanticLayerQuery",state1)===createCacheKey("test","semanticLayerQuery",state2)}
3
6
  //# sourceMappingURL=query-cache-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-cache-utils.js","names":["createCacheKey","componentId","interactionType","interactionState","sortedState","sortObjectKeys","stateString","JSON","stringify","obj","undefined","Array","isArray","map","item","sorted","keys","Object","sort","_iterator","_createForOfIteratorHelperLoose","_step","done","key","value","extractInteractionState","componentProps","state","pagination","pageNumber","pageSize","sortColumn","sortDirection","filters","filterValue","searchQuery","searchValue","data","length","dataLength","firstRow","lastRow","dataFingerprint","firstId","id","values","lastId","name","bodyContent","headerContent","footerContent","chartData","chartDataLength","chartDataFingerprint","summaryText","error","isMissing","areStatesEqual","state1","state2","getInvalidationPattern","escapedId","replace","RegExp"],"sources":["../../../src/plugins/helpers/query-cache-utils.ts"],"sourcesContent":["\nexport type InteractionType = 'semanticLayerQuery' | 'tableButton';\n\nexport type InteractionState = {\n [key: string]: unknown;\n bodyContent?: unknown;\n chartData?: unknown;\n chartDataFingerprint?: string;\n chartDataLength?: number;\n dataFingerprint?: string;\n dataLength?: number;\n error?: unknown;\n filterValue?: unknown;\n filters?: Record<string, unknown>;\n footerContent?: unknown;\n headerContent?: unknown;\n isMissing?: unknown;\n pageNumber?: number;\n pageSize?: number;\n searchQuery?: string;\n searchValue?: string;\n sortColumn?: string | null;\n sortDirection?: 'asc' | 'desc' | null;\n summaryText?: unknown;\n};\n\nexport type QueryCacheEntry = {\n queryHeadings: string[];\n sqlQuery: string | string[];\n tableButtonExplanations: Array<{\n action: string;\n buttonClassName?: string;\n buttonStyle?: Record<string, unknown>;\n explanation: string;\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n operationDescription?: string;\n operationSummary?: string;\n requestUrl?: string;\n }>;\n timestamp: number;\n};\n\nexport type CacheKey = {\n componentId: string;\n interactionType: InteractionType;\n state: InteractionState;\n};\n\nexport function createCacheKey(\n componentId: string,\n interactionType: InteractionType,\n interactionState: InteractionState\n): string {\n const sortedState = sortObjectKeys(interactionState);\n \n const stateString = JSON.stringify(sortedState);\n \n return `${componentId}::${interactionType}::${stateString}`;\n}\n\nfunction sortObjectKeys(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n \n if (Array.isArray(obj)) {\n return obj.map(item => sortObjectKeys(item));\n }\n \n if (typeof obj === 'object') {\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(obj as Record<string, unknown>).sort();\n \n for (const key of keys) {\n sorted[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);\n }\n \n return sorted;\n }\n \n return obj;\n}\n\nexport function extractInteractionState(componentProps: Record<string, unknown>): InteractionState {\n const state: InteractionState = {};\n \n if ('pagination' in componentProps && typeof componentProps.pagination === 'object' && componentProps.pagination) {\n const pagination = componentProps.pagination as Record<string, unknown>;\n\n if ('pageNumber' in pagination && typeof pagination.pageNumber === 'number') {\n state.pageNumber = pagination.pageNumber;\n }\n\n if ('pageSize' in pagination && typeof pagination.pageSize === 'number') {\n state.pageSize = pagination.pageSize;\n }\n }\n \n if ('sortColumn' in componentProps) {\n state.sortColumn = componentProps.sortColumn as string | null;\n }\n \n if ('sortDirection' in componentProps) {\n state.sortDirection = componentProps.sortDirection as 'asc' | 'desc' | null;\n }\n \n if ('filters' in componentProps && typeof componentProps.filters === 'object') {\n state.filters = componentProps.filters as Record<string, unknown>;\n }\n \n if ('value' in componentProps) {\n state.filterValue = componentProps.value as unknown;\n }\n \n if ('searchQuery' in componentProps && typeof componentProps.searchQuery === 'string') {\n state.searchQuery = componentProps.searchQuery;\n }\n \n if ('searchValue' in componentProps && typeof componentProps.searchValue === 'string') {\n state.searchValue = componentProps.searchValue;\n }\n\n if ('data' in componentProps) {\n const data = componentProps.data;\n \n if (Array.isArray(data) && data.length > 0) {\n state.dataLength = data.length;\n const firstRow = data[0];\n const lastRow = data[data.length - 1];\n \n if (firstRow && typeof firstRow === 'object') {\n state.dataFingerprint = JSON.stringify({\n firstId: (firstRow as Record<string, unknown>).id || Object.values(firstRow)[0],\n lastId: lastRow && typeof lastRow === 'object' \n ? ((lastRow as Record<string, unknown>).id || Object.values(lastRow)[0])\n : null,\n length: data.length\n });\n }\n } else if (data && typeof data === 'object' && (data as Record<string, unknown>).name === '__peak_placeholder') {\n state.dataFingerprint = '__peak_placeholder';\n } else {\n state.dataFingerprint = 'empty';\n }\n }\n \n if ('bodyContent' in componentProps) {\n state.bodyContent = componentProps.bodyContent as unknown;\n }\n \n if ('headerContent' in componentProps) {\n state.headerContent = componentProps.headerContent as unknown;\n }\n \n if ('footerContent' in componentProps) {\n state.footerContent = componentProps.footerContent as unknown;\n }\n \n if ('chartData' in componentProps) {\n const chartData = componentProps.chartData;\n\n if (Array.isArray(chartData)) {\n state.chartDataLength = chartData.length;\n state.chartDataFingerprint = JSON.stringify(chartData);\n }\n }\n \n if ('summaryText' in componentProps) {\n state.summaryText = componentProps.summaryText as unknown;\n }\n \n if ('error' in componentProps) {\n state.error = componentProps.error as unknown;\n }\n \n if ('isMissing' in componentProps) {\n state.isMissing = componentProps.isMissing as unknown;\n }\n \n return state;\n}\n\nexport function areStatesEqual(state1: InteractionState, state2: InteractionState): boolean {\n return createCacheKey('test', 'semanticLayerQuery', state1) === \n createCacheKey('test', 'semanticLayerQuery', state2);\n}\n\nexport function getInvalidationPattern(componentId: string): RegExp {\n const escapedId = componentId.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // eslint-disable-next-line security/detect-non-literal-regexp\n return new RegExp(`^${escapedId}::`);\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"query-cache-utils.js","names":["createCacheKey","componentId","interactionType","interactionState","sortedState","sortObjectKeys","stateString","JSON","stringify","error","console","warn","Date","now","Math","random","createInteractionKey","obj","undefined","Array","isArray","map","item","sorted","keys","Object","sort","_iterator","_createForOfIteratorHelperLoose","_step","done","key","value","extractInteractionState","componentProps","state","pagination","pageNumber","pageSize","sortColumn","sortDirection","filters","filterValue","searchQuery","searchValue","data","length","dataLength","firstRow","lastRow","dataFingerprint","firstId","id","values","lastId","name","bodyContent","headerContent","footerContent","chartData","chartDataLength","chartDataFingerprint","summaryText","isMissing","areStatesEqual","state1","state2"],"sources":["../../../src/plugins/helpers/query-cache-utils.ts"],"sourcesContent":["\nexport type InteractionType = 'semanticLayerQuery' | 'tableButton';\n\nexport type InteractionState = {\n [key: string]: unknown;\n bodyContent?: unknown;\n chartData?: unknown;\n chartDataFingerprint?: string;\n chartDataLength?: number;\n dataFingerprint?: string;\n dataLength?: number;\n error?: unknown;\n filterValue?: unknown;\n filters?: Record<string, unknown>;\n footerContent?: unknown;\n headerContent?: unknown;\n isMissing?: unknown;\n pageNumber?: number;\n pageSize?: number;\n searchQuery?: string;\n searchValue?: string;\n sortColumn?: string | null;\n sortDirection?: 'asc' | 'desc' | null;\n summaryText?: unknown;\n};\n\nexport type QueryCacheEntry = {\n queryHeadings: string[];\n sqlQuery: string | string[];\n tableButtonExplanations: Array<{\n action: string;\n buttonClassName?: string;\n buttonStyle?: Record<string, unknown>;\n explanation: string;\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n operationDescription?: string;\n operationSummary?: string;\n requestUrl?: string;\n }>;\n timestamp: number;\n};\n\nexport type CacheKey = {\n componentId: string;\n interactionType: InteractionType;\n state: InteractionState;\n};\n\nexport function createCacheKey(\n componentId: string,\n interactionType: InteractionType,\n interactionState: InteractionState\n): string {\n const sortedState = sortObjectKeys(interactionState);\n \n try {\n const stateString = JSON.stringify(sortedState);\n \n return `${componentId}::${interactionType}::${stateString}`;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Failed to serialize interaction state:', error);\n \n return `${componentId}::${interactionType}::${Date.now()}::${Math.random()}`;\n }\n}\n\nexport function createInteractionKey(\n interactionType: InteractionType,\n interactionState: InteractionState\n): string {\n const sortedState = sortObjectKeys(interactionState);\n \n try {\n const stateString = JSON.stringify(sortedState);\n \n return `${interactionType}::${stateString}`;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Failed to serialize interaction state:', error);\n \n return `${interactionType}::${Date.now()}::${Math.random()}`;\n }\n}\n\nfunction sortObjectKeys(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n \n if (Array.isArray(obj)) {\n return obj.map(item => sortObjectKeys(item));\n }\n \n if (typeof obj === 'object') {\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(obj as Record<string, unknown>).sort();\n \n for (const key of keys) {\n sorted[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);\n }\n \n return sorted;\n }\n \n return obj;\n}\n\nexport function extractInteractionState(componentProps: Record<string, unknown>): InteractionState {\n const state: InteractionState = {};\n \n if ('pagination' in componentProps && typeof componentProps.pagination === 'object' && componentProps.pagination) {\n const pagination = componentProps.pagination as Record<string, unknown>;\n\n if ('pageNumber' in pagination && typeof pagination.pageNumber === 'number') {\n state.pageNumber = pagination.pageNumber;\n }\n\n if ('pageSize' in pagination && typeof pagination.pageSize === 'number') {\n state.pageSize = pagination.pageSize;\n }\n }\n \n if ('sortColumn' in componentProps) {\n state.sortColumn = componentProps.sortColumn as string | null;\n }\n \n if ('sortDirection' in componentProps) {\n state.sortDirection = componentProps.sortDirection as 'asc' | 'desc' | null;\n }\n \n if ('filters' in componentProps && typeof componentProps.filters === 'object') {\n state.filters = componentProps.filters as Record<string, unknown>;\n }\n \n if ('value' in componentProps) {\n state.filterValue = componentProps.value as unknown;\n }\n \n if ('searchQuery' in componentProps && typeof componentProps.searchQuery === 'string') {\n state.searchQuery = componentProps.searchQuery;\n }\n \n if ('searchValue' in componentProps && typeof componentProps.searchValue === 'string') {\n state.searchValue = componentProps.searchValue;\n }\n\n if ('data' in componentProps) {\n const data = componentProps.data;\n \n if (Array.isArray(data) && data.length > 0) {\n state.dataLength = data.length;\n const firstRow = data[0];\n const lastRow = data[data.length - 1];\n \n if (firstRow && typeof firstRow === 'object') {\n try {\n state.dataFingerprint = JSON.stringify({\n firstId: (firstRow as Record<string, unknown>).id || Object.values(firstRow)[0],\n lastId: lastRow && typeof lastRow === 'object' \n ? ((lastRow as Record<string, unknown>).id || Object.values(lastRow)[0])\n : null,\n length: data.length\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Failed to serialize data fingerprint:', error);\n state.dataFingerprint = `fallback_${data.length}_${Date.now()}`;\n }\n }\n } else if (data && typeof data === 'object' && (data as Record<string, unknown>).name === '__peak_placeholder') {\n state.dataFingerprint = '__peak_placeholder';\n } else {\n state.dataFingerprint = 'empty';\n }\n }\n \n if ('bodyContent' in componentProps) {\n state.bodyContent = componentProps.bodyContent as unknown;\n }\n \n if ('headerContent' in componentProps) {\n state.headerContent = componentProps.headerContent as unknown;\n }\n \n if ('footerContent' in componentProps) {\n state.footerContent = componentProps.footerContent as unknown;\n }\n \n if ('chartData' in componentProps) {\n const chartData = componentProps.chartData;\n\n if (Array.isArray(chartData)) {\n state.chartDataLength = chartData.length;\n\n try {\n state.chartDataFingerprint = JSON.stringify(chartData);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Failed to serialize chart data fingerprint:', error);\n state.chartDataFingerprint = `fallback_${chartData.length}_${Date.now()}`;\n }\n }\n }\n \n if ('summaryText' in componentProps) {\n state.summaryText = componentProps.summaryText as unknown;\n }\n \n if ('error' in componentProps) {\n state.error = componentProps.error as unknown;\n }\n \n if ('isMissing' in componentProps) {\n state.isMissing = componentProps.isMissing as unknown;\n }\n \n return state;\n}\n\nexport function areStatesEqual(state1: InteractionState, state2: InteractionState): boolean {\n return createCacheKey('test', 'semanticLayerQuery', state1) === \n createCacheKey('test', 'semanticLayerQuery', state2);\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
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,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";function CopyButton(_ref){var onClick=_ref.onClick,isCopied=_ref.isCopied,_ref$variant=_ref.variant,variant=_ref$variant===void 0?"default":_ref$variant;var baseClasses="flex items-center gap-1 px-2 py-1 text-xs border rounded transition-colors";var variantClasses=variant==="light"?"bg-gray-50 border-gray-300 hover:bg-gray-100":"bg-gray-100 border-gray-300 hover:bg-gray-200";return/*#__PURE__*/_jsx("button",{onClick:onClick,className:baseClasses+" "+variantClasses,type:"button",children:isCopied?/*#__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"})]})})}function ContentText(_ref2){var children=_ref2.children,_ref2$hasOverflowHand=_ref2.hasOverflowHandling,hasOverflowHandling=_ref2$hasOverflowHand===void 0?true:_ref2$hasOverflowHand;var overflowClasses=hasOverflowHandling?"overflow-hidden break-words":"";return/*#__PURE__*/_jsx("pre",{className:"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0 "+overflowClasses,children:children})}function ContentBlock(_ref3){var title=_ref3.title,children=_ref3.children,copyContent=_ref3.copyContent,copyId=_ref3.copyId,copied=_ref3.copied,onCopy=_ref3.onCopy,_ref3$variant=_ref3.variant,variant=_ref3$variant===void 0?"bordered":_ref3$variant,_ref3$copyButtonVaria=_ref3.copyButtonVariant,copyButtonVariant=_ref3$copyButtonVaria===void 0?"default":_ref3$copyButtonVaria;var containerClasses=variant==="bordered"?"rounded-lg p-3":"bg-white border border-gray-200 rounded-lg p-4";var containerStyle=variant==="bordered"?{border:"1px solid #E9EAF5"}:{};var titleClasses=variant==="bordered"?"text-sm font-medium text-gray-600":"font-semibold text-sm text-gray-500 m-0";return/*#__PURE__*/_jsxs("div",{className:containerClasses,style:containerStyle,children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:titleClasses,children:title}),copyContent&&/*#__PURE__*/_jsx(CopyButton,{onClick:function onClick(){return onCopy(copyContent,copyId)},isCopied:copied[copyId]||false,variant:copyButtonVariant})]}),children]})}export function QueryDetailsModal(_ref4){var isOpen=_ref4.isOpen,onClose=_ref4.onClose,isLoading=_ref4.isLoading,error=_ref4.error,sqlQuery=_ref4.sqlQuery,_ref4$queryHeadings=_ref4.queryHeadings,queryHeadings=_ref4$queryHeadings===void 0?[]:_ref4$queryHeadings,_ref4$tableButtonExpl=_ref4.tableButtonExplanations,tableButtonExplanations=_ref4$tableButtonExpl===void 0?[]:_ref4$tableButtonExpl,onRetry=_ref4.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!==""}function hasValidFormFields(formFields){return formFields!==null&&formFields!==undefined&&Object.keys(formFields||{}).length>0}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 justify-center px-3 rounded text-xs font-medium",style:_extends({height:"35px",width:"fit-content",minWidth:"fit-content",backgroundColor:(_button$buttonStyle=button.buttonStyle)==null?void 0:_button$buttonStyle.backgroundColor,color:(_button$buttonStyle2=button.buttonStyle)==null?void 0:_button$buttonStyle2.color,border:(_button$buttonStyle3=button.buttonStyle)==null?void 0:_button$buttonStyle3.border},button.buttonStyle||{},button.buttonStyle||{},{display:"flex",alignItems:"center",justifyContent:"center"}),children:button.action}),/*#__PURE__*/_jsx("div",{className:"ml-3 flex flex-col",children:button.operationSummary&&/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-700 font-medium",children:button.operationSummary})})]}),/*#__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:[button.operationDescription&&/*#__PURE__*/_jsx(ContentBlock,{title:"Description",copyId:"description-"+index,copied:copied,onCopy:copyToClipboard,variant:"bordered",children:/*#__PURE__*/_jsx(ContentText,{children:button.operationDescription})}),(button.requestUrl||button.explanation)&&/*#__PURE__*/_jsx(ContentBlock,{title:"URL",copyContent:button.requestUrl||button.explanation,copyId:"url-"+index,copied:copied,onCopy:copyToClipboard,variant:"bordered",children:/*#__PURE__*/_jsx(ContentText,{children:button.requestUrl||button.explanation})}),(hasValidJsonBody(button.jsonBody)||hasValidFormFields(button.formFields))&&/*#__PURE__*/_jsx(ContentBlock,{title:"Payload",copyContent:JSON.stringify(hasValidJsonBody(button.jsonBody)?button.jsonBody:button.formFields,null,2),copyId:"payload-"+index,copied:copied,onCopy:copyToClipboard,variant:"bordered",children:/*#__PURE__*/_jsx(ContentText,{children:hasValidJsonBody(button.jsonBody)?JSON.stringify(button.jsonBody,null,2):JSON.stringify(button.formFields,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
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,ChevronUp}from"lucide-react";import{formatQueryHeading}from"./query-heading-formatter";import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";function CopyButton(_ref){var onClick=_ref.onClick,isCopied=_ref.isCopied,_ref$variant=_ref.variant,variant=_ref$variant===void 0?"default":_ref$variant;var baseClasses="flex items-center gap-1 px-2 py-1 text-xs border rounded transition-colors";var variantClasses=variant==="light"?"bg-gray-50 border-gray-300 hover:bg-gray-100":"bg-gray-100 border-gray-300 hover:bg-gray-200";return/*#__PURE__*/_jsx("button",{onClick:onClick,className:baseClasses+" "+variantClasses,type:"button",children:isCopied?/*#__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"})]})})}function ContentText(_ref2){var children=_ref2.children,_ref2$hasOverflowHand=_ref2.hasOverflowHandling,hasOverflowHandling=_ref2$hasOverflowHand===void 0?true:_ref2$hasOverflowHand;var overflowClasses=hasOverflowHandling?"overflow-hidden break-words":"";return/*#__PURE__*/_jsx("pre",{className:"whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0 "+overflowClasses,children:children})}function ContentBlock(_ref3){var title=_ref3.title,children=_ref3.children,copyContent=_ref3.copyContent,copyId=_ref3.copyId,copied=_ref3.copied,onCopy=_ref3.onCopy,_ref3$variant=_ref3.variant,variant=_ref3$variant===void 0?"bordered":_ref3$variant,_ref3$copyButtonVaria=_ref3.copyButtonVariant,copyButtonVariant=_ref3$copyButtonVaria===void 0?"default":_ref3$copyButtonVaria;var containerClasses=variant==="bordered"?"rounded-lg p-3":"bg-white border border-gray-200 rounded-lg p-4";var containerStyle=variant==="bordered"?{border:"1px solid #E9EAF5"}:{};var titleClasses=variant==="bordered"?"text-sm font-medium text-gray-600":"font-semibold text-sm text-gray-500 m-0";return/*#__PURE__*/_jsxs("div",{className:containerClasses,style:containerStyle,children:[/*#__PURE__*/_jsxs("div",{className:"flex justify-between items-start mb-2",children:[/*#__PURE__*/_jsx("span",{className:titleClasses,children:title}),copyContent&&/*#__PURE__*/_jsx(CopyButton,{onClick:function onClick(){return onCopy(copyContent,copyId)},isCopied:copied[copyId]||false,variant:copyButtonVariant})]}),children]})}export function QueryDetailsModal(_ref4){var isOpen=_ref4.isOpen,onClose=_ref4.onClose,isLoading=_ref4.isLoading,error=_ref4.error,sqlQuery=_ref4.sqlQuery,_ref4$queryHeadings=_ref4.queryHeadings,queryHeadings=_ref4$queryHeadings===void 0?[]:_ref4$queryHeadings,_ref4$tableButtonExpl=_ref4.tableButtonExplanations,tableButtonExplanations=_ref4$tableButtonExpl===void 0?[]:_ref4$tableButtonExpl,onRetry=_ref4.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!==""}function hasValidFormFields(formFields){return formFields!==null&&formFields!==undefined&&Object.keys(formFields||{}).length>0}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 justify-center px-3 rounded text-xs font-medium",style:_extends({height:"35px",width:"fit-content",minWidth:"fit-content",backgroundColor:(_button$buttonStyle=button.buttonStyle)==null?void 0:_button$buttonStyle.backgroundColor,color:(_button$buttonStyle2=button.buttonStyle)==null?void 0:_button$buttonStyle2.color,border:(_button$buttonStyle3=button.buttonStyle)==null?void 0:_button$buttonStyle3.border},button.buttonStyle||{},button.buttonStyle||{},{display:"flex",alignItems:"center",justifyContent:"center"}),children:button.action}),/*#__PURE__*/_jsx("div",{className:"ml-3 flex flex-col",children:button.operationSummary&&/*#__PURE__*/_jsx("span",{className:"text-xs text-gray-700 font-medium",children:button.operationSummary})})]}),expandedButtons[index]?/*#__PURE__*/_jsx(ChevronUp,{className:"w-4 h-4 text-gray-500 transition-transform cursor-pointer",onClick:function onClick(){return toggleButtonExpansion(index)}}):/*#__PURE__*/_jsx(ChevronDown,{className:"w-4 h-4 text-gray-500 transition-transform cursor-pointer",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:[button.operationDescription&&/*#__PURE__*/_jsx(ContentBlock,{title:"Description",copyId:"description-"+index,copied:copied,onCopy:copyToClipboard,variant:"bordered",children:/*#__PURE__*/_jsx(ContentText,{children:button.operationDescription})}),(button.requestUrl||button.explanation)&&/*#__PURE__*/_jsx(ContentBlock,{title:"URL",copyContent:button.requestUrl||button.explanation,copyId:"url-"+index,copied:copied,onCopy:copyToClipboard,variant:"bordered",children:/*#__PURE__*/_jsx(ContentText,{children:button.requestUrl||button.explanation})}),(hasValidJsonBody(button.jsonBody)||hasValidFormFields(button.formFields))&&/*#__PURE__*/_jsx(ContentBlock,{title:"Payload",copyContent:JSON.stringify(hasValidJsonBody(button.jsonBody)?button.jsonBody:button.formFields,null,2),copyId:"payload-"+index,copied:copied,onCopy:copyToClipboard,variant:"bordered",children:/*#__PURE__*/_jsx(ContentText,{children:hasValidJsonBody(button.jsonBody)?JSON.stringify(button.jsonBody,null,2):JSON.stringify(button.formFields,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__*/_jsx(ContentBlock,{title:heading,copyContent:query,copyId:"query-"+index,copied:copied,onCopy:copyToClipboard,variant:"default",copyButtonVariant:"light",children:/*#__PURE__*/_jsx(ContentText,{hasOverflowHandling:false,children:query})},index)}),renderTableButtonExplanations()]})}return/*#__PURE__*/_jsxs("div",{className:"p-6 space-y-4",children:[/*#__PURE__*/_jsx(ContentBlock,{title:formatQueryHeading(queryHeadings[0]||"Query details"),copyContent:typeof sqlQuery==="string"?sqlQuery:"",copyId:"single",copied:copied,onCopy:copyToClipboard,variant:"default",copyButtonVariant:"light",children:/*#__PURE__*/_jsx(ContentText,{hasOverflowHandling:false,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","Fragment","_Fragment","jsxs","_jsxs","CopyButton","_ref","onClick","isCopied","_ref$variant","variant","baseClasses","variantClasses","className","type","children","ContentText","_ref2","_ref2$hasOverflowHand","hasOverflowHandling","overflowClasses","ContentBlock","_ref3","title","copyContent","copyId","copied","onCopy","_ref3$variant","_ref3$copyButtonVaria","copyButtonVariant","containerClasses","containerStyle","border","titleClasses","style","QueryDetailsModal","_ref4","isOpen","onClose","isLoading","error","sqlQuery","_ref4$queryHeadings","queryHeadings","_ref4$tableButtonExpl","tableButtonExplanations","onRetry","_useState","setCopied","_useState2","expandedButtons","setExpandedButtons","copyToClipboard","_x","_x2","_copyToClipboard","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","queryToCopy","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","hasValidFormFields","formFields","Object","keys","map","button","index","_button$buttonStyle","_button$buttonStyle2","_button$buttonStyle3","buttonClassName","height","width","minWidth","backgroundColor","buttonStyle","color","display","alignItems","justifyContent","action","operationSummary","operationDescription","requestUrl","explanation","JSON","stringify","renderModalContent","query","trim","rawHeading","heading"],"sources":["../../../src/plugins/helpers/query-details-modal.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { CustomModal } from './custom-modal';\nimport { Copy, Check, ChevronDown, X } from 'lucide-react';\nimport { formatQueryHeading } from './query-heading-formatter';\n\ntype CopyButtonProps = {\n onClick: () => void;\n isCopied: boolean;\n variant?: 'default' | 'light';\n};\n\nfunction CopyButton({ onClick, isCopied, variant = 'default' }: CopyButtonProps) {\n const baseClasses = \"flex items-center gap-1 px-2 py-1 text-xs border rounded transition-colors\";\n const variantClasses = variant === 'light' \n ? \"bg-gray-50 border-gray-300 hover:bg-gray-100\"\n : \"bg-gray-100 border-gray-300 hover:bg-gray-200\";\n\n return (\n <button\n onClick={onClick}\n className={`${baseClasses} ${variantClasses}`}\n type=\"button\"\n >\n {isCopied ? (\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 );\n}\n\ntype ContentTextProps = {\n children: React.ReactNode;\n hasOverflowHandling?: boolean;\n};\n\nfunction ContentText({ children, hasOverflowHandling = true }: ContentTextProps) {\n const overflowClasses = hasOverflowHandling ? \"overflow-hidden break-words\" : \"\";\n\n return (\n <pre className={`whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0 ${overflowClasses}`}>\n {children}\n </pre>\n );\n}\n\ntype ContentBlockProps = {\n title: string;\n children: React.ReactNode;\n copyContent?: string;\n copyId: string;\n copied: Record<string, boolean>;\n onCopy: (content: string, id: string) => void;\n variant?: 'default' | 'bordered';\n copyButtonVariant?: 'default' | 'light';\n};\n\nfunction ContentBlock({ \n title, \n children, \n copyContent, \n copyId, \n copied, \n onCopy,\n variant = 'bordered',\n copyButtonVariant = 'default'\n}: ContentBlockProps) {\n const containerClasses = variant === 'bordered' \n ? \"rounded-lg p-3\"\n : \"bg-white border border-gray-200 rounded-lg p-4\";\n \n const containerStyle = variant === 'bordered' \n ? { border: '1px solid #E9EAF5' }\n : {};\n\n const titleClasses = variant === 'bordered'\n ? \"text-sm font-medium text-gray-600\"\n : \"font-semibold text-sm text-gray-500 m-0\";\n\n return (\n <div className={containerClasses} style={containerStyle}>\n <div className=\"flex justify-between items-start mb-2\">\n <span className={titleClasses}>{title}</span>\n {copyContent && (\n <CopyButton\n onClick={() => onCopy(copyContent, copyId)}\n isCopied={copied[copyId] || false}\n variant={copyButtonVariant}\n />\n )}\n </div>\n {children}\n </div>\n );\n}\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 operationSummary?: string,\n operationDescription?: string,\n buttonClassName?: string, \n buttonStyle?: Record<string, unknown>,\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n requestUrl?: string;\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 function hasValidFormFields(formFields: Record<string, unknown> | undefined): boolean {\n return formFields !== null && formFields !== undefined && Object.keys(formFields || {}).length > 0;\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 justify-center px-3 rounded text-xs font-medium\"}\n style={{\n height: '35px',\n width: 'fit-content',\n minWidth: 'fit-content',\n backgroundColor: (button.buttonStyle?.backgroundColor as string),\n color: (button.buttonStyle?.color as string),\n border: (button.buttonStyle?.border as string),\n ...(button.buttonStyle as React.CSSProperties || {})\n , ...button.buttonStyle as React.CSSProperties || {},\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n {button.action}\n </button>\n <div className=\"ml-3 flex flex-col\">\n {button.operationSummary && (\n <span className=\"text-xs text-gray-700 font-medium\">\n {button.operationSummary}\n </span>\n )}\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 {/* Description Block */}\n {button.operationDescription && (\n <ContentBlock\n title=\"Description\"\n copyId={`description-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"bordered\"\n >\n <ContentText>\n {button.operationDescription}\n </ContentText>\n </ContentBlock>\n )}\n\n {(button.requestUrl || button.explanation) && (\n <ContentBlock\n title=\"URL\"\n copyContent={button.requestUrl || button.explanation}\n copyId={`url-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"bordered\"\n >\n <ContentText>\n {button.requestUrl || button.explanation}\n </ContentText>\n </ContentBlock>\n )}\n \n {(hasValidJsonBody(button.jsonBody) || hasValidFormFields(button.formFields)) && (\n <ContentBlock\n title=\"Payload\"\n copyContent={JSON.stringify(\n hasValidJsonBody(button.jsonBody) ? button.jsonBody : button.formFields, \n null, \n 2\n )}\n copyId={`payload-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"bordered\"\n >\n <ContentText>\n {hasValidJsonBody(button.jsonBody) \n ? JSON.stringify(button.jsonBody, null, 2)\n : JSON.stringify(button.formFields, null, 2)}\n </ContentText>\n </ContentBlock>\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 <ContentBlock\n key={index}\n title={heading}\n copyContent={query}\n copyId={`query-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"default\"\n copyButtonVariant=\"light\"\n >\n <ContentText hasOverflowHandling={false}>\n {query}\n </ContentText>\n </ContentBlock>\n );\n })}\n {renderTableButtonExplanations()}\n </div>\n );\n }\n\n return (\n <div className=\"p-6 space-y-4\">\n <ContentBlock\n title={formatQueryHeading(queryHeadings[0] || \"Query details\")}\n copyContent={typeof sqlQuery === 'string' ? sqlQuery : ''}\n copyId=\"single\"\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"default\"\n copyButtonVariant=\"light\"\n >\n <ContentText hasOverflowHandling={false}>\n {sqlQuery}\n </ContentText>\n </ContentBlock>\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","ChevronUp","formatQueryHeading","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CopyButton","_ref","onClick","isCopied","_ref$variant","variant","baseClasses","variantClasses","className","type","children","ContentText","_ref2","_ref2$hasOverflowHand","hasOverflowHandling","overflowClasses","ContentBlock","_ref3","title","copyContent","copyId","copied","onCopy","_ref3$variant","_ref3$copyButtonVaria","copyButtonVariant","containerClasses","containerStyle","border","titleClasses","style","QueryDetailsModal","_ref4","isOpen","onClose","isLoading","error","sqlQuery","_ref4$queryHeadings","queryHeadings","_ref4$tableButtonExpl","tableButtonExplanations","onRetry","_useState","setCopied","_useState2","expandedButtons","setExpandedButtons","copyToClipboard","_x","_x2","_copyToClipboard","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","queryToCopy","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","hasValidFormFields","formFields","Object","keys","map","button","index","_button$buttonStyle","_button$buttonStyle2","_button$buttonStyle3","buttonClassName","height","width","minWidth","backgroundColor","buttonStyle","color","display","alignItems","justifyContent","action","operationSummary","operationDescription","requestUrl","explanation","JSON","stringify","renderModalContent","query","trim","rawHeading","heading"],"sources":["../../../src/plugins/helpers/query-details-modal.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { CustomModal } from './custom-modal';\nimport { Copy, Check, ChevronDown, ChevronUp, X } from 'lucide-react';\nimport { formatQueryHeading } from './query-heading-formatter';\n\ntype CopyButtonProps = {\n onClick: () => void;\n isCopied: boolean;\n variant?: 'default' | 'light';\n};\n\nfunction CopyButton({ onClick, isCopied, variant = 'default' }: CopyButtonProps) {\n const baseClasses = \"flex items-center gap-1 px-2 py-1 text-xs border rounded transition-colors\";\n const variantClasses = variant === 'light' \n ? \"bg-gray-50 border-gray-300 hover:bg-gray-100\"\n : \"bg-gray-100 border-gray-300 hover:bg-gray-200\";\n\n return (\n <button\n onClick={onClick}\n className={`${baseClasses} ${variantClasses}`}\n type=\"button\"\n >\n {isCopied ? (\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 );\n}\n\ntype ContentTextProps = {\n children: React.ReactNode;\n hasOverflowHandling?: boolean;\n};\n\nfunction ContentText({ children, hasOverflowHandling = true }: ContentTextProps) {\n const overflowClasses = hasOverflowHandling ? \"overflow-hidden break-words\" : \"\";\n\n return (\n <pre className={`whitespace-pre-wrap leading-relaxed text-xs text-gray-700 m-0 p-0 ${overflowClasses}`}>\n {children}\n </pre>\n );\n}\n\ntype ContentBlockProps = {\n title: string;\n children: React.ReactNode;\n copyContent?: string;\n copyId: string;\n copied: Record<string, boolean>;\n onCopy: (content: string, id: string) => void;\n variant?: 'default' | 'bordered';\n copyButtonVariant?: 'default' | 'light';\n};\n\nfunction ContentBlock({ \n title, \n children, \n copyContent, \n copyId, \n copied, \n onCopy,\n variant = 'bordered',\n copyButtonVariant = 'default'\n}: ContentBlockProps) {\n const containerClasses = variant === 'bordered' \n ? \"rounded-lg p-3\"\n : \"bg-white border border-gray-200 rounded-lg p-4\";\n \n const containerStyle = variant === 'bordered' \n ? { border: '1px solid #E9EAF5' }\n : {};\n\n const titleClasses = variant === 'bordered'\n ? \"text-sm font-medium text-gray-600\"\n : \"font-semibold text-sm text-gray-500 m-0\";\n\n return (\n <div className={containerClasses} style={containerStyle}>\n <div className=\"flex justify-between items-start mb-2\">\n <span className={titleClasses}>{title}</span>\n {copyContent && (\n <CopyButton\n onClick={() => onCopy(copyContent, copyId)}\n isCopied={copied[copyId] || false}\n variant={copyButtonVariant}\n />\n )}\n </div>\n {children}\n </div>\n );\n}\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 operationSummary?: string,\n operationDescription?: string,\n buttonClassName?: string, \n buttonStyle?: Record<string, unknown>,\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n requestUrl?: string;\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 function hasValidFormFields(formFields: Record<string, unknown> | undefined): boolean {\n return formFields !== null && formFields !== undefined && Object.keys(formFields || {}).length > 0;\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 justify-center px-3 rounded text-xs font-medium\"}\n style={{\n height: '35px',\n width: 'fit-content',\n minWidth: 'fit-content',\n backgroundColor: (button.buttonStyle?.backgroundColor as string),\n color: (button.buttonStyle?.color as string),\n border: (button.buttonStyle?.border as string),\n ...(button.buttonStyle as React.CSSProperties || {})\n , ...button.buttonStyle as React.CSSProperties || {},\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n {button.action}\n </button>\n <div className=\"ml-3 flex flex-col\">\n {button.operationSummary && (\n <span className=\"text-xs text-gray-700 font-medium\">\n {button.operationSummary}\n </span>\n )}\n </div>\n </div>\n {expandedButtons[index] ? (\n <ChevronUp \n className=\"w-4 h-4 text-gray-500 transition-transform cursor-pointer\"\n onClick={() => toggleButtonExpansion(index)}\n />\n ) : (\n <ChevronDown \n className=\"w-4 h-4 text-gray-500 transition-transform cursor-pointer\"\n onClick={() => toggleButtonExpansion(index)}\n />\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 {/* Description Block */}\n {button.operationDescription && (\n <ContentBlock\n title=\"Description\"\n copyId={`description-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"bordered\"\n >\n <ContentText>\n {button.operationDescription}\n </ContentText>\n </ContentBlock>\n )}\n\n {(button.requestUrl || button.explanation) && (\n <ContentBlock\n title=\"URL\"\n copyContent={button.requestUrl || button.explanation}\n copyId={`url-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"bordered\"\n >\n <ContentText>\n {button.requestUrl || button.explanation}\n </ContentText>\n </ContentBlock>\n )}\n \n {(hasValidJsonBody(button.jsonBody) || hasValidFormFields(button.formFields)) && (\n <ContentBlock\n title=\"Payload\"\n copyContent={JSON.stringify(\n hasValidJsonBody(button.jsonBody) ? button.jsonBody : button.formFields, \n null, \n 2\n )}\n copyId={`payload-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"bordered\"\n >\n <ContentText>\n {hasValidJsonBody(button.jsonBody) \n ? JSON.stringify(button.jsonBody, null, 2)\n : JSON.stringify(button.formFields, null, 2)}\n </ContentText>\n </ContentBlock>\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 <ContentBlock\n key={index}\n title={heading}\n copyContent={query}\n copyId={`query-${index}`}\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"default\"\n copyButtonVariant=\"light\"\n >\n <ContentText hasOverflowHandling={false}>\n {query}\n </ContentText>\n </ContentBlock>\n );\n })}\n {renderTableButtonExplanations()}\n </div>\n );\n }\n\n return (\n <div className=\"p-6 space-y-4\">\n <ContentBlock\n title={formatQueryHeading(queryHeadings[0] || \"Query details\")}\n copyContent={typeof sqlQuery === 'string' ? sqlQuery : ''}\n copyId=\"single\"\n copied={copied}\n onCopy={copyToClipboard}\n variant=\"default\"\n copyButtonVariant=\"light\"\n >\n <ContentText hasOverflowHandling={false}>\n {sqlQuery}\n </ContentText>\n </ContentBlock>\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,5 +1,6 @@
1
- import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";import React,{useState,useRef}from"react";import{QueryDetailsModal}from"./query-details-modal";import{QueryLoadingModal}from"./query-loading-modal";import{formatQueryHeading}from"./query-heading-formatter";import{useQueryCache}from"./query-cache-context";import{extractInteractionState}from"./query-cache-utils";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";var POSITION_CLASSES={"top-right":"absolute top-0 right-0","top-left":"absolute top-2 left-2","bottom-left":"absolute bottom-0 left-1/2 transform -translate-x-1/2","bottom-right":"absolute bottom-0 right-0 ","card-overlay":"absolute bottom-0 right-0"};var ERROR_MESSAGES={FETCH_FAILED:"Failed to fetch query details from semantic layer",LOAD_FAILED:"Failed to load query information",SQL_NOT_AVAILABLE:"SQL not available"};export function StyledInfoButton(_ref){var _ref$position=_ref.position,position=_ref$position===void 0?"bottom-right":_ref$position,componentId=_ref.componentId,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,_ref$isVisible=_ref.isVisible,isVisible=_ref$isVisible===void 0?true:_ref$isVisible,onSqlFetch=_ref.onSqlFetch,_ref$performInteracti=_ref.performInteraction,performInteraction=_ref$performInteracti===void 0?function(){return Promise.resolve({})}:_ref$performInteracti,_ref$tableActions=_ref.tableActions,tableActions=_ref$tableActions===void 0?[]:_ref$tableActions,_ref$firstRowData=_ref.firstRowData,firstRowData=_ref$firstRowData===void 0?{}:_ref$firstRowData,_ref$componentProps=_ref.componentProps,componentProps=_ref$componentProps===void 0?{}:_ref$componentProps;var _useState=useState(false),isModalOpen=_useState[0],setIsModalOpen=_useState[1];var _useState2=useState(false),isLoadingModalOpen=_useState2[0],setIsLoadingModalOpen=_useState2[1];var _useState3=useState(""),sqlQuery=_useState3[0],setSqlQuery=_useState3[1];var _useState4=useState([]),queryHeadings=_useState4[0],setQueryHeadings=_useState4[1];var _useState5=useState([]),tableButtonExplanations=_useState5[0],setTableButtonExplanations=_useState5[1];var _useState6=useState(false),isLoading=_useState6[0],setIsLoading=_useState6[1];var _useState7=useState(""),error=_useState7[0],setError=_useState7[1];var modalOpen=useRef(false);var queryCache=useQueryCache();var currentInteractionState=extractInteractionState(componentProps);var interactionStateKey=JSON.stringify(currentInteractionState);var prevInteractionStateKeyRef=useRef(undefined);var prevKey=prevInteractionStateKeyRef.current;var currentKey=interactionStateKey;if(prevKey!==currentKey&&prevKey!==undefined){if(componentId){queryCache.invalidateComponent(componentId);setSqlQuery("");setQueryHeadings([]);setTableButtonExplanations([]);setError("")}}prevInteractionStateKeyRef.current=currentKey;var interactionState=currentInteractionState;function fetchTableButtonExplanations(){return _fetchTableButtonExplanations.apply(this,arguments)}function _fetchTableButtonExplanations(){_fetchTableButtonExplanations=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(){var buttonPromises,results;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.prev=0;if(!(!tableActions||tableActions.length===0)){_context2.next=3;break}return _context2.abrupt("return",[]);case 3:buttonPromises=tableActions.map(/*#__PURE__*/function(){var _ref2=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(action){var result,response,buttonStyle,actionClassName,bgMatch,textMatch,borderMatch,formFields,jsonBody,filesArg,hasFormFields,hasJsonBody,hasFilesArg,hasPayload;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:_context.prev=0;_context.next=3;return performInteraction({id:action.id||componentId,interactionType:"tableButton",payload:{row:firstRowData,params:{isInfoButtonInteraction:true}},affectedComponents:[]});case 3:result=_context.sent;if(!(result&&typeof result==="object"&&"apiResponse"in result&&result.apiResponse&&typeof result.apiResponse==="object")){_context.next=18;break}response=result.apiResponse;if(!(response.request_url&&typeof response.request_url==="string")){_context.next=18;break}buttonStyle={};actionClassName=action.className||"";if(typeof actionClassName==="string"){bgMatch=actionClassName.match(/bg-\[(#[0-9A-Fa-f]{6})\]/);if(bgMatch){buttonStyle.backgroundColor=bgMatch[1]}textMatch=actionClassName.match(/text-\[(#[0-9A-Fa-f]{6})\]/);if(textMatch){buttonStyle.color=textMatch[1]}borderMatch=actionClassName.match(/border-\[(#[0-9A-Fa-f]{6})\]/);if(borderMatch){buttonStyle.border="1px solid "+borderMatch[1]}}formFields=response.form_fields||{};jsonBody=response.json_body;filesArg=response.files_arg||{};// Check if any payload fields have content
2
- hasFormFields=Object.keys(formFields).length>0;hasJsonBody=jsonBody!==null&&jsonBody!==undefined&&jsonBody!=="";hasFilesArg=Object.keys(filesArg).length>0;hasPayload=hasFormFields||hasJsonBody||hasFilesArg;return _context.abrupt("return",{action:action.text||action.id||"Button Action",explanation:response.request_url,operationName:response.operation_name,operationSummary:response.operation_summary,operationDescription:response.operation_description,buttonClassName:actionClassName,buttonStyle:buttonStyle,formFields:formFields,jsonBody:jsonBody,filesArg:filesArg,hasPayload:hasPayload});case 18:return _context.abrupt("return",null);case 21:_context.prev=21;_context.t0=_context["catch"](0);return _context.abrupt("return",null);case 24:case"end":return _context.stop()}},_callee,null,[[0,21]])}));return function(_x2){return _ref2.apply(this,arguments)}}());_context2.next=6;return Promise.all(buttonPromises);case 6:results=_context2.sent;return _context2.abrupt("return",results.filter(function(result){return result!==null}));case 10:_context2.prev=10;_context2.t0=_context2["catch"](0);return _context2.abrupt("return",[]);case 13:case"end":return _context2.stop()}},_callee2,null,[[0,10]])}));return _fetchTableButtonExplanations.apply(this,arguments)}function fetchSemanticLayerQuery(){return _fetchSemanticLayerQuery.apply(this,arguments)}function _fetchSemanticLayerQuery(){_fetchSemanticLayerQuery=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(){var result,apiResponse,sqlResponse,successArray,hasAnyValidQuery,validQueries,sqlQueries,extractedHeadings,sqlObjects,_validQueries,_sqlQueries,_extractedHeadings;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:_context3.prev=0;setIsLoading(true);setError("");_context3.next=5;return performInteraction({id:componentId||"styled-info-button",interactionType:"semanticLayerQuery",affectedComponents:[]});case 5:result=_context3.sent;if(!(result&&typeof result==="object"&&"apiResponse"in result&&result.apiResponse&&typeof result.apiResponse==="object")){_context3.next=35;break}apiResponse=result.apiResponse;if("sql"in apiResponse){_context3.next=10;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 10:sqlResponse=apiResponse.sql;if(!(!sqlResponse||typeof sqlResponse!=="object")){_context3.next=13;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 13:if(!("success"in sqlResponse&&Array.isArray(sqlResponse.success))){_context3.next=24;break}successArray=sqlResponse.success;hasAnyValidQuery=successArray.some(function(item){return item&&typeof item==="object"&&item.error===false&&"sql"in item&&typeof item.sql==="string"&&item.sql.trim()});if(hasAnyValidQuery){_context3.next=18;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 18:validQueries=successArray.filter(function(item){return item&&typeof item==="object"&&item.error===false&&"sql"in item&&typeof item.sql==="string"&&item.sql.trim()}).map(function(item){return{sql:item.sql,queryKey:item.query_key||"unknown"}});if(!(validQueries.length===0)){_context3.next=21;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 21:// Extract SQL and headings in the correct order
3
- sqlQueries=validQueries.map(function(q){return q.sql});extractedHeadings=validQueries.map(function(q){return formatQueryHeading(q.queryKey)});return _context3.abrupt("return",{sql:sqlQueries.length>1?sqlQueries:sqlQueries[0],headings:extractedHeadings});case 24:if(!("error"in sqlResponse&&typeof sqlResponse.error==="string")){_context3.next=26;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 26:if(!Array.isArray(sqlResponse)){_context3.next=34;break}sqlObjects=sqlResponse;_validQueries=sqlObjects.filter(function(obj){return obj&&typeof obj==="object"&&"sql"in obj&&"error"in obj&&!obj.error&&obj.sql&&obj.sql.trim()}).map(function(obj){return{sql:obj.sql,queryKey:obj.query_key||"unknown"}});if(!(_validQueries.length===0)){_context3.next=31;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 31:_sqlQueries=_validQueries.map(function(q){return q.sql});_extractedHeadings=_validQueries.map(function(q){return formatQueryHeading(q.queryKey)});return _context3.abrupt("return",{sql:_sqlQueries.length>1?_sqlQueries:_sqlQueries[0],headings:_extractedHeadings});case 34:return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 35:return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 38:_context3.prev=38;_context3.t0=_context3["catch"](0);return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 41:_context3.prev=41;setIsLoading(false);return _context3.finish(41);case 44:case"end":return _context3.stop()}},_callee3,null,[[0,38,41,44]])}));return _fetchSemanticLayerQuery.apply(this,arguments)}function handleInfoClick(_x){return _handleInfoClick.apply(this,arguments)}function _handleInfoClick(){_handleInfoClick=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(e){var cachedSemanticQuery,cachedTableButton,_yield$Promise$all,sqlResult,buttonExplanations,cacheEntry;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:e.stopPropagation();e.preventDefault();modalOpen.current=true;_context4.prev=3;cachedSemanticQuery=componentId?queryCache.getCachedQuery(componentId,"semanticLayerQuery",interactionState):null;cachedTableButton=componentId&&tableActions.length>0?queryCache.getCachedQuery(componentId,"tableButton",interactionState):null;if(!(cachedSemanticQuery&&(tableActions.length===0||cachedTableButton))){_context4.next=14;break}setSqlQuery(cachedSemanticQuery.sqlQuery);setQueryHeadings(cachedSemanticQuery.queryHeadings);setTableButtonExplanations((cachedTableButton==null?void 0:cachedTableButton.tableButtonExplanations)||cachedSemanticQuery.tableButtonExplanations);setError("");if(modalOpen.current){setIsModalOpen(true)}if(onSqlFetch&&cachedSemanticQuery.sqlQuery&&cachedSemanticQuery.sqlQuery!==ERROR_MESSAGES.SQL_NOT_AVAILABLE){onSqlFetch(cachedSemanticQuery.sqlQuery)}return _context4.abrupt("return");case 14:setIsLoadingModalOpen(true);setError("");_context4.next=18;return Promise.all([fetchSemanticLayerQuery(),fetchTableButtonExplanations()]);case 18:_yield$Promise$all=_context4.sent;sqlResult=_yield$Promise$all[0];buttonExplanations=_yield$Promise$all[1];if(componentId){cacheEntry={sqlQuery:sqlResult.sql||ERROR_MESSAGES.SQL_NOT_AVAILABLE,queryHeadings:sqlResult.headings||[],tableButtonExplanations:buttonExplanations,timestamp:Date.now()};queryCache.setCachedQuery(componentId,"semanticLayerQuery",interactionState,cacheEntry);if(tableActions.length>0){queryCache.setCachedQuery(componentId,"tableButton",interactionState,_extends({},cacheEntry,{tableButtonExplanations:buttonExplanations}))}}setSqlQuery(sqlResult.sql||ERROR_MESSAGES.SQL_NOT_AVAILABLE);setQueryHeadings(sqlResult.headings||[]);setTableButtonExplanations(buttonExplanations);setIsLoadingModalOpen(false);if(modalOpen.current){setIsModalOpen(true)}if(onSqlFetch&&sqlResult.sql&&sqlResult.sql!==ERROR_MESSAGES.SQL_NOT_AVAILABLE){onSqlFetch(sqlResult.sql)}_context4.next=36;break;case 30:_context4.prev=30;_context4.t0=_context4["catch"](3);setSqlQuery(ERROR_MESSAGES.SQL_NOT_AVAILABLE);setTableButtonExplanations([]);setIsLoadingModalOpen(false);if(modalOpen.current){setIsModalOpen(true)}case 36:case"end":return _context4.stop()}},_callee4,null,[[3,30]])}));return _handleInfoClick.apply(this,arguments)}function resetState(){setIsModalOpen(false);setIsLoadingModalOpen(false);setSqlQuery("");setQueryHeadings([]);setTableButtonExplanations([]);setError("");setIsLoading(false)}function handleModalClose(){// User explicitly closed the modal
1
+ import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";import React,{useState,useRef,useEffect}from"react";import{QueryDetailsModal}from"./query-details-modal";import{QueryLoadingModal}from"./query-loading-modal";import{formatQueryHeading}from"./query-heading-formatter";import{useQueryCache}from"./query-cache-context";import{extractInteractionState}from"./query-cache-utils";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";var POSITION_CLASSES={"top-right":"absolute top-0 right-0","top-left":"absolute top-2 left-2","bottom-left":"absolute bottom-0 left-1/2 transform -translate-x-1/2","bottom-right":"absolute bottom-0 right-0 ","card-overlay":"absolute bottom-0 right-0"};var ERROR_MESSAGES={FETCH_FAILED:"Failed to fetch query details from semantic layer",LOAD_FAILED:"Failed to load query information",SQL_NOT_AVAILABLE:"SQL not available"};export function StyledInfoButton(_ref){var _ref$position=_ref.position,position=_ref$position===void 0?"bottom-right":_ref$position,componentId=_ref.componentId,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,_ref$isVisible=_ref.isVisible,isVisible=_ref$isVisible===void 0?true:_ref$isVisible,onSqlFetch=_ref.onSqlFetch,_ref$performInteracti=_ref.performInteraction,performInteraction=_ref$performInteracti===void 0?function(){return Promise.resolve({})}:_ref$performInteracti,_ref$tableActions=_ref.tableActions,tableActions=_ref$tableActions===void 0?[]:_ref$tableActions,_ref$firstRowData=_ref.firstRowData,firstRowData=_ref$firstRowData===void 0?{}:_ref$firstRowData,_ref$componentProps=_ref.componentProps,componentProps=_ref$componentProps===void 0?{}:_ref$componentProps;var _useState=useState(false),isModalOpen=_useState[0],setIsModalOpen=_useState[1];var _useState2=useState(false),isLoadingModalOpen=_useState2[0],setIsLoadingModalOpen=_useState2[1];var _useState3=useState(""),sqlQuery=_useState3[0],setSqlQuery=_useState3[1];var _useState4=useState([]),queryHeadings=_useState4[0],setQueryHeadings=_useState4[1];var _useState5=useState([]),tableButtonExplanations=_useState5[0],setTableButtonExplanations=_useState5[1];var _useState6=useState(false),isLoading=_useState6[0],setIsLoading=_useState6[1];var _useState7=useState(""),error=_useState7[0],setError=_useState7[1];var modalOpen=useRef(false);var queryCache=useQueryCache();var currentInteractionState=extractInteractionState(componentProps);var interactionStateKey="";try{interactionStateKey=JSON.stringify(currentInteractionState)}catch(err){// eslint-disable-next-line no-console
2
+ console.warn("Failed to serialize interaction state:",err);interactionStateKey="fallback_"+Date.now()+"_"+Math.random()}var prevInteractionStateKeyRef=useRef(undefined);var interactionState=currentInteractionState;useEffect(function(){var prevKey=prevInteractionStateKeyRef.current;var currentKey=interactionStateKey;if(prevKey!==currentKey&&prevKey!==undefined){if(componentId){queryCache.invalidateComponent(componentId);setSqlQuery("");setQueryHeadings([]);setTableButtonExplanations([]);setError("")}}prevInteractionStateKeyRef.current=currentKey},[interactionStateKey,componentId,queryCache]);function fetchTableButtonExplanations(){return _fetchTableButtonExplanations.apply(this,arguments)}function _fetchTableButtonExplanations(){_fetchTableButtonExplanations=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(){var buttonPromises,results;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.prev=0;if(!(!tableActions||tableActions.length===0)){_context2.next=3;break}return _context2.abrupt("return",[]);case 3:buttonPromises=tableActions.map(/*#__PURE__*/function(){var _ref2=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(action){var result,response,buttonStyle,actionClassName,bgMatch,textMatch,borderMatch,formFields,jsonBody,filesArg,hasFormFields,hasJsonBody,hasFilesArg,hasPayload;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:_context.prev=0;_context.next=3;return performInteraction({id:action.id||componentId,interactionType:"tableButton",payload:{row:firstRowData,params:{isInfoButtonInteraction:true}},affectedComponents:[]});case 3:result=_context.sent;if(!(result&&typeof result==="object"&&"apiResponse"in result&&result.apiResponse&&typeof result.apiResponse==="object")){_context.next=18;break}response=result.apiResponse;if(!(response.request_url&&typeof response.request_url==="string")){_context.next=18;break}buttonStyle={};actionClassName=action.className||"";if(typeof actionClassName==="string"){bgMatch=actionClassName.match(/bg-\[(#[0-9A-Fa-f]{6})\]/);if(bgMatch){buttonStyle.backgroundColor=bgMatch[1]}textMatch=actionClassName.match(/text-\[(#[0-9A-Fa-f]{6})\]/);if(textMatch){buttonStyle.color=textMatch[1]}borderMatch=actionClassName.match(/border-\[(#[0-9A-Fa-f]{6})\]/);if(borderMatch){buttonStyle.border="1px solid "+borderMatch[1]}}formFields=response.form_fields||{};jsonBody=response.json_body;filesArg=response.files_arg||{};// Check if any payload fields have content
3
+ hasFormFields=Object.keys(formFields).length>0;hasJsonBody=jsonBody!==null&&jsonBody!==undefined&&jsonBody!=="";hasFilesArg=Object.keys(filesArg).length>0;hasPayload=hasFormFields||hasJsonBody||hasFilesArg;return _context.abrupt("return",{action:action.text||action.id||"Button Action",explanation:response.request_url,operationName:response.operation_name,operationSummary:response.operation_summary,operationDescription:response.operation_description,buttonClassName:actionClassName,buttonStyle:buttonStyle,formFields:formFields,jsonBody:jsonBody,filesArg:filesArg,hasPayload:hasPayload});case 18:return _context.abrupt("return",null);case 21:_context.prev=21;_context.t0=_context["catch"](0);return _context.abrupt("return",null);case 24:case"end":return _context.stop()}},_callee,null,[[0,21]])}));return function(_x2){return _ref2.apply(this,arguments)}}());_context2.next=6;return Promise.all(buttonPromises);case 6:results=_context2.sent;return _context2.abrupt("return",results.filter(function(result){return result!==null}));case 10:_context2.prev=10;_context2.t0=_context2["catch"](0);return _context2.abrupt("return",[]);case 13:case"end":return _context2.stop()}},_callee2,null,[[0,10]])}));return _fetchTableButtonExplanations.apply(this,arguments)}function fetchSemanticLayerQuery(){return _fetchSemanticLayerQuery.apply(this,arguments)}function _fetchSemanticLayerQuery(){_fetchSemanticLayerQuery=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(){var result,apiResponse,sqlResponse,successArray,hasAnyValidQuery,validQueries,sqlQueries,extractedHeadings,sqlObjects,_validQueries,_sqlQueries,_extractedHeadings;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:_context3.prev=0;setIsLoading(true);setError("");_context3.next=5;return performInteraction({id:componentId||"styled-info-button",interactionType:"semanticLayerQuery",affectedComponents:[]});case 5:result=_context3.sent;if(!(result&&typeof result==="object"&&"apiResponse"in result&&result.apiResponse&&typeof result.apiResponse==="object")){_context3.next=35;break}apiResponse=result.apiResponse;if("sql"in apiResponse){_context3.next=10;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 10:sqlResponse=apiResponse.sql;if(!(!sqlResponse||typeof sqlResponse!=="object")){_context3.next=13;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 13:if(!("success"in sqlResponse&&Array.isArray(sqlResponse.success))){_context3.next=24;break}successArray=sqlResponse.success;hasAnyValidQuery=successArray.some(function(item){return item&&typeof item==="object"&&item.error===false&&"sql"in item&&typeof item.sql==="string"&&item.sql.trim()});if(hasAnyValidQuery){_context3.next=18;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 18:validQueries=successArray.filter(function(item){return item&&typeof item==="object"&&item.error===false&&"sql"in item&&typeof item.sql==="string"&&item.sql.trim()}).map(function(item){return{sql:item.sql,queryKey:item.query_key||"Query details"}});if(!(validQueries.length===0)){_context3.next=21;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 21:// Extract SQL and headings in the correct order
4
+ sqlQueries=validQueries.map(function(q){return q.sql});extractedHeadings=validQueries.map(function(q){return formatQueryHeading(q.queryKey)});return _context3.abrupt("return",{sql:sqlQueries.length>1?sqlQueries:sqlQueries[0],headings:extractedHeadings});case 24:if(!("error"in sqlResponse&&typeof sqlResponse.error==="string")){_context3.next=26;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 26:if(!Array.isArray(sqlResponse)){_context3.next=34;break}sqlObjects=sqlResponse;_validQueries=sqlObjects.filter(function(obj){return obj&&typeof obj==="object"&&"sql"in obj&&"error"in obj&&!obj.error&&obj.sql&&obj.sql.trim()}).map(function(obj){return{sql:obj.sql,queryKey:obj.query_key||"Query details"}});if(!(_validQueries.length===0)){_context3.next=31;break}return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 31:_sqlQueries=_validQueries.map(function(q){return q.sql});_extractedHeadings=_validQueries.map(function(q){return formatQueryHeading(q.queryKey)});return _context3.abrupt("return",{sql:_sqlQueries.length>1?_sqlQueries:_sqlQueries[0],headings:_extractedHeadings});case 34:return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 35:return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 38:_context3.prev=38;_context3.t0=_context3["catch"](0);return _context3.abrupt("return",{sql:ERROR_MESSAGES.SQL_NOT_AVAILABLE,headings:[]});case 41:_context3.prev=41;setIsLoading(false);return _context3.finish(41);case 44:case"end":return _context3.stop()}},_callee3,null,[[0,38,41,44]])}));return _fetchSemanticLayerQuery.apply(this,arguments)}function handleInfoClick(_x){return _handleInfoClick.apply(this,arguments)}function _handleInfoClick(){_handleInfoClick=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(e){var cachedSemanticQuery,cachedTableButton,_yield$Promise$all,sqlResult,buttonExplanations,cacheEntry;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:e.stopPropagation();e.preventDefault();modalOpen.current=true;_context4.prev=3;cachedSemanticQuery=componentId?queryCache.getCachedQuery(componentId,"semanticLayerQuery",interactionState):null;cachedTableButton=componentId&&tableActions.length>0?queryCache.getCachedQuery(componentId,"tableButton",interactionState):null;if(!(cachedSemanticQuery&&(tableActions.length===0||cachedTableButton))){_context4.next=14;break}setSqlQuery(cachedSemanticQuery.sqlQuery);setQueryHeadings(cachedSemanticQuery.queryHeadings);setTableButtonExplanations((cachedTableButton==null?void 0:cachedTableButton.tableButtonExplanations)||cachedSemanticQuery.tableButtonExplanations);setError("");if(modalOpen.current){setIsModalOpen(true)}if(onSqlFetch&&cachedSemanticQuery.sqlQuery&&cachedSemanticQuery.sqlQuery!==ERROR_MESSAGES.SQL_NOT_AVAILABLE){onSqlFetch(cachedSemanticQuery.sqlQuery)}return _context4.abrupt("return");case 14:setIsLoadingModalOpen(true);setError("");_context4.next=18;return Promise.all([fetchSemanticLayerQuery(),fetchTableButtonExplanations()]);case 18:_yield$Promise$all=_context4.sent;sqlResult=_yield$Promise$all[0];buttonExplanations=_yield$Promise$all[1];if(componentId){cacheEntry={sqlQuery:sqlResult.sql||ERROR_MESSAGES.SQL_NOT_AVAILABLE,queryHeadings:sqlResult.headings||[],tableButtonExplanations:buttonExplanations,timestamp:Date.now()};queryCache.setCachedQuery(componentId,"semanticLayerQuery",interactionState,cacheEntry);if(tableActions.length>0){queryCache.setCachedQuery(componentId,"tableButton",interactionState,_extends({},cacheEntry,{tableButtonExplanations:buttonExplanations}))}}setSqlQuery(sqlResult.sql||ERROR_MESSAGES.SQL_NOT_AVAILABLE);setQueryHeadings(sqlResult.headings||[]);setTableButtonExplanations(buttonExplanations);setIsLoadingModalOpen(false);if(modalOpen.current){setIsModalOpen(true)}if(onSqlFetch&&sqlResult.sql&&sqlResult.sql!==ERROR_MESSAGES.SQL_NOT_AVAILABLE){onSqlFetch(sqlResult.sql)}_context4.next=36;break;case 30:_context4.prev=30;_context4.t0=_context4["catch"](3);setSqlQuery(ERROR_MESSAGES.SQL_NOT_AVAILABLE);setTableButtonExplanations([]);setIsLoadingModalOpen(false);if(modalOpen.current){setIsModalOpen(true)}case 36:case"end":return _context4.stop()}},_callee4,null,[[3,30]])}));return _handleInfoClick.apply(this,arguments)}function resetState(){setIsModalOpen(false);setIsLoadingModalOpen(false);setSqlQuery("");setQueryHeadings([]);setTableButtonExplanations([]);setError("");setIsLoading(false)}function handleModalClose(){// User explicitly closed the modal
4
5
  modalOpen.current=false;resetState()}function handleRetry(){resetState();var mockEvent={stopPropagation:function stopPropagation(){return void 0},preventDefault:function preventDefault(){return void 0}};handleInfoClick(mockEvent)}if(!isVisible){return null}return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx("button",{className:POSITION_CLASSES[position]+" "+className,onClick:handleInfoClick,title:"View Query Details",type:"button",style:{width:"60px",height:"60px",transform:"rotate(0deg)",opacity:1,border:"none",background:"transparent",padding:0},children:/*#__PURE__*/_jsxs("svg",{width:"50",height:"50",viewBox:"0 0 67 66",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[/*#__PURE__*/_jsxs("g",{filter:"url(#filter0_d_4766_2811)",children:[/*#__PURE__*/_jsx("rect",{x:"16.1667",y:"15.5",width:"35",height:"35",rx:"7.5",stroke:"#A601FF",strokeWidth:"1",shapeRendering:"crispEdges"}),/*#__PURE__*/_jsx("path",{d:"M33.0756 28.0171C33.3312 27.5498 34.0023 27.5498 34.2578 28.0171L35.7159 30.683C35.7777 30.7961 35.8706 30.889 35.9837 30.9508L38.6496 32.4089C39.1169 32.6644 39.1169 33.3355 38.6496 33.5911L35.9837 35.0491C35.8706 35.111 35.7777 35.2039 35.7159 35.317L34.2578 37.9829C34.0023 38.4501 33.3312 38.4501 33.0756 37.9829L31.6176 35.317C31.5557 35.2039 31.4628 35.111 31.3497 35.0491L28.6838 33.5911C28.2166 33.3355 28.2166 32.6644 28.6838 32.4089L31.3497 30.9508C31.4628 30.889 31.5557 30.7961 31.6176 30.683L33.0756 28.0171Z",fill:"#A601FF"}),/*#__PURE__*/_jsx("path",{d:"M29.0634 27.1601C29.1801 26.9466 29.4866 26.9466 29.6033 27.1601L29.9973 27.8804C30.0255 27.932 30.068 27.9745 30.1196 28.0027L30.84 28.3967C31.0534 28.5134 31.0534 28.8199 30.84 28.9367L30.1196 29.3306C30.068 29.3589 30.0255 29.4013 29.9973 29.4529L29.6033 30.1733C29.4866 30.3867 29.1801 30.3867 29.0634 30.1733L28.6694 29.4529C28.6412 29.4013 28.5987 29.3589 28.5471 29.3306L27.8268 28.9367C27.6133 28.8199 27.6133 28.5134 27.8268 28.3967L28.5471 28.0027C28.5987 27.9745 28.6412 27.932 28.6694 27.8804L29.0634 27.1601Z",fill:"#A601FF"}),/*#__PURE__*/_jsx("path",{d:"M38.0346 36.5104C38.1638 36.2743 38.5029 36.2743 38.6321 36.5105L38.8874 36.9773C38.9186 37.0344 38.9656 37.0814 39.0227 37.1126L39.4896 37.368C39.7257 37.4971 39.7257 37.8363 39.4896 37.9654L39.0227 38.2207C38.9656 38.252 38.9186 38.2989 38.8874 38.3561L38.6321 38.8229C38.5029 39.059 38.1638 39.059 38.0346 38.8229L37.7793 38.3561C37.748 38.2989 37.7011 38.252 37.6439 38.2207L37.1771 37.9654C36.941 37.8363 36.941 37.4971 37.1771 37.368L37.6439 37.1126C37.7011 37.0814 37.748 37.0344 37.7793 36.9773L38.0346 36.5104Z",fill:"#A601FF"})]}),/*#__PURE__*/_jsx("defs",{children:/*#__PURE__*/_jsxs("filter",{id:"filter0_d_4766_2811",x:"0.666687",y:"0",width:"66",height:"66",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB",children:[/*#__PURE__*/_jsx("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),/*#__PURE__*/_jsx("feColorMatrix",{"in":"SourceAlpha",type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",result:"hardAlpha"}),/*#__PURE__*/_jsx("feMorphology",{radius:"5",operator:"dilate","in":"SourceAlpha",result:"effect1_dropShadow_4766_2811"}),/*#__PURE__*/_jsx("feOffset",{}),/*#__PURE__*/_jsx("feGaussianBlur",{stdDeviation:"5"}),/*#__PURE__*/_jsx("feComposite",{in2:"hardAlpha",operator:"out"}),/*#__PURE__*/_jsx("feColorMatrix",{type:"matrix",values:"0 0 0 0 0.0317231 0 0 0 0 0.0834676 0 0 0 0 0.370052 0 0 0 0.05 0"}),/*#__PURE__*/_jsx("feBlend",{mode:"normal",in2:"BackgroundImageFix",result:"effect1_dropShadow_4766_2811"}),/*#__PURE__*/_jsx("feBlend",{mode:"normal","in":"SourceGraphic",in2:"effect1_dropShadow_4766_2811",result:"shape"})]})})]})}),/*#__PURE__*/_jsx(QueryLoadingModal,{isOpen:isLoadingModalOpen,onClose:handleModalClose}),/*#__PURE__*/_jsx(QueryDetailsModal,{isOpen:isModalOpen,onClose:handleModalClose,isLoading:isLoading,error:error,sqlQuery:sqlQuery,queryHeadings:queryHeadings,tableButtonExplanations:tableButtonExplanations,onRetry:handleRetry})]})}
5
6
  //# sourceMappingURL=styled-info-button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styled-info-button.js","names":["React","useState","useRef","QueryDetailsModal","QueryLoadingModal","formatQueryHeading","useQueryCache","extractInteractionState","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","POSITION_CLASSES","ERROR_MESSAGES","FETCH_FAILED","LOAD_FAILED","SQL_NOT_AVAILABLE","StyledInfoButton","_ref","_ref$position","position","componentId","_ref$className","className","_ref$isVisible","isVisible","onSqlFetch","_ref$performInteracti","performInteraction","Promise","resolve","_ref$tableActions","tableActions","_ref$firstRowData","firstRowData","_ref$componentProps","componentProps","_useState","isModalOpen","setIsModalOpen","_useState2","isLoadingModalOpen","setIsLoadingModalOpen","_useState3","sqlQuery","setSqlQuery","_useState4","queryHeadings","setQueryHeadings","_useState5","tableButtonExplanations","setTableButtonExplanations","_useState6","isLoading","setIsLoading","_useState7","error","setError","modalOpen","queryCache","currentInteractionState","interactionStateKey","JSON","stringify","prevInteractionStateKeyRef","undefined","prevKey","current","currentKey","invalidateComponent","interactionState","fetchTableButtonExplanations","_fetchTableButtonExplanations","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","buttonPromises","results","wrap","_callee2$","_context2","prev","next","length","abrupt","map","_ref2","_callee","action","result","response","buttonStyle","actionClassName","bgMatch","textMatch","borderMatch","formFields","jsonBody","filesArg","hasFormFields","hasJsonBody","hasFilesArg","hasPayload","_callee$","_context","id","interactionType","payload","row","params","isInfoButtonInteraction","affectedComponents","sent","apiResponse","request_url","match","backgroundColor","color","border","form_fields","json_body","files_arg","Object","keys","text","explanation","operationName","operation_name","operationSummary","operation_summary","operationDescription","operation_description","buttonClassName","t0","stop","_x2","all","filter","fetchSemanticLayerQuery","_fetchSemanticLayerQuery","_callee3","sqlResponse","successArray","hasAnyValidQuery","validQueries","sqlQueries","extractedHeadings","sqlObjects","_validQueries","_sqlQueries","_extractedHeadings","_callee3$","_context3","sql","headings","Array","isArray","success","some","item","trim","queryKey","query_key","q","obj","finish","handleInfoClick","_x","_handleInfoClick","_callee4","e","cachedSemanticQuery","cachedTableButton","_yield$Promise$all","sqlResult","buttonExplanations","cacheEntry","_callee4$","_context4","stopPropagation","preventDefault","getCachedQuery","timestamp","Date","now","setCachedQuery","_extends","resetState","handleModalClose","handleRetry","mockEvent","children","onClick","title","type","style","width","height","transform","opacity","background","padding","viewBox","fill","xmlns","x","y","rx","stroke","strokeWidth","shapeRendering","d","filterUnits","colorInterpolationFilters","floodOpacity","values","radius","operator","stdDeviation","in2","mode","isOpen","onClose","onRetry"],"sources":["../../../src/plugins/helpers/styled-info-button.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react';\nimport { QueryDetailsModal } from './query-details-modal';\nimport { QueryLoadingModal } from './query-loading-modal';\nimport { formatQueryHeading } from './query-heading-formatter';\nimport { useQueryCache } from './query-cache-context';\nimport { extractInteractionState } from './query-cache-utils';\n\nconst POSITION_CLASSES = {\n 'top-right': 'absolute top-0 right-0',\n 'top-left': 'absolute top-2 left-2', \n 'bottom-left': 'absolute bottom-0 left-1/2 transform -translate-x-1/2',\n 'bottom-right': 'absolute bottom-0 right-0 ',\n 'card-overlay': 'absolute bottom-0 right-0'\n} as const;\n\nconst ERROR_MESSAGES = {\n FETCH_FAILED: 'Failed to fetch query details from semantic layer',\n LOAD_FAILED: 'Failed to load query information',\n SQL_NOT_AVAILABLE: 'SQL not available'\n} as const;\n\n\ntype ButtonStyle = {\n backgroundColor?: string;\n color?: string;\n border?: string;\n [key: string]: unknown;\n};\n\ntype TableButtonExplanation = {\n action: string;\n explanation: string;\n operationName?: string;\n operationSummary?: string;\n operationDescription?: string;\n buttonClassName?: string;\n buttonStyle?: ButtonStyle;\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n filesArg?: Record<string, unknown>;\n hasPayload?: boolean;\n};\n\ntype TableAction = {\n id: string;\n text: string;\n className?: string;\n [key: string]: unknown;\n};\n\ntype Position = 'top-right' | 'top-left' | 'bottom-left' | 'bottom-right' | 'card-overlay';\n\ntype StyledInfoButtonProps = {\n buttonStyle?: ButtonStyle;\n onClick?: () => void;\n isVisible?: boolean;\n tableName?: string;\n position?: Position;\n componentId?: string;\n className?: string;\n onSqlFetch?: (sql: string | string[]) => void;\n performInteraction?: (payload: Record<string, unknown>) => Promise<Record<string, unknown>>;\n tableActions?: TableAction[];\n firstRowData?: Record<string, unknown>;\n componentProps?: Record<string, unknown>;\n}\n\n\nexport function StyledInfoButton({ \n position = 'bottom-right', \n componentId,\n className = '',\n isVisible = true,\n onSqlFetch,\n performInteraction = () => Promise.resolve({} as Record<string, unknown>),\n tableActions = [],\n firstRowData = {},\n componentProps = {}\n}: StyledInfoButtonProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isLoadingModalOpen, setIsLoadingModalOpen] = useState(false);\n \n const [sqlQuery, setSqlQuery] = useState<string | string[]>('');\n const [queryHeadings, setQueryHeadings] = useState<string[]>([]);\n const [tableButtonExplanations, setTableButtonExplanations] = useState<TableButtonExplanation[]>([]);\n \n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string>('');\n \n const modalOpen = useRef(false);\n \n const queryCache = useQueryCache();\n \n const currentInteractionState = extractInteractionState(componentProps);\n const interactionStateKey = JSON.stringify(currentInteractionState);\n \n const prevInteractionStateKeyRef = useRef<string | undefined>(undefined);\n \n const prevKey = prevInteractionStateKeyRef.current;\n const currentKey = interactionStateKey;\n \n if (prevKey !== currentKey && prevKey !== undefined) {\n if (componentId) {\n queryCache.invalidateComponent(componentId);\n \n setSqlQuery('');\n setQueryHeadings([]);\n setTableButtonExplanations([]);\n setError('');\n }\n }\n \n prevInteractionStateKeyRef.current = currentKey;\n \n const interactionState = currentInteractionState;\n\n async function fetchTableButtonExplanations(): Promise<TableButtonExplanation[]> {\n try {\n if (!tableActions || tableActions.length === 0) {\n return [];\n }\n \n\n const buttonPromises = tableActions.map(async (action) => {\n try {\n const result = await performInteraction({\n id: action.id || componentId,\n interactionType: 'tableButton',\n payload: {\n row: firstRowData,\n params: { isInfoButtonInteraction: true }\n },\n affectedComponents: []\n });\n\n if (result && typeof result === 'object' && 'apiResponse' in result && \n result.apiResponse && typeof result.apiResponse === 'object') {\n const response = result.apiResponse as Record<string, unknown>;\n \n if (response.request_url && typeof response.request_url === 'string') {\n const buttonStyle: ButtonStyle = {};\n const actionClassName = (action.className as string) || '';\n \n if (typeof actionClassName === 'string') {\n const bgMatch = actionClassName.match(/bg-\\[(#[0-9A-Fa-f]{6})\\]/);\n\n if (bgMatch) {\n buttonStyle.backgroundColor = bgMatch[1];\n }\n \n const textMatch = actionClassName.match(/text-\\[(#[0-9A-Fa-f]{6})\\]/);\n\n if (textMatch) {\n buttonStyle.color = textMatch[1];\n }\n \n const borderMatch = actionClassName.match(/border-\\[(#[0-9A-Fa-f]{6})\\]/);\n\n if (borderMatch) {\n buttonStyle.border = `1px solid ${borderMatch[1]}`;\n }\n }\n \n const formFields = response.form_fields as Record<string, unknown> || {};\n const jsonBody = response.json_body;\n const filesArg = response.files_arg as Record<string, unknown> || {};\n \n // Check if any payload fields have content\n const hasFormFields = Object.keys(formFields).length > 0;\n const hasJsonBody = jsonBody !== null && jsonBody !== undefined && jsonBody !== '';\n const hasFilesArg = Object.keys(filesArg).length > 0;\n const hasPayload = hasFormFields || hasJsonBody || hasFilesArg;\n \n return {\n action: action.text || action.id || 'Button Action',\n explanation: response.request_url,\n operationName: response.operation_name as string,\n operationSummary: response.operation_summary as string,\n operationDescription: response.operation_description as string,\n buttonClassName: actionClassName,\n buttonStyle,\n formFields,\n jsonBody,\n filesArg,\n hasPayload\n };\n }\n }\n\n return null;\n } catch (err) {\n return null;\n }\n });\n\n const results = await Promise.all(buttonPromises);\n\n return results.filter((result) => result !== null) as TableButtonExplanation[];\n } catch (err) {\n return [];\n }\n }\n\n async function fetchSemanticLayerQuery(): Promise<{sql: string | string[], headings: string[]}> {\n try {\n setIsLoading(true);\n setError('');\n \n const result = await performInteraction({\n id: componentId || 'styled-info-button',\n interactionType: 'semanticLayerQuery',\n affectedComponents: []\n });\n\n if (result && typeof result === 'object' && 'apiResponse' in result && \n result.apiResponse && typeof result.apiResponse === 'object') {\n const apiResponse = result.apiResponse as Record<string, unknown>;\n \n if (!('sql' in apiResponse)) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n const sqlResponse = apiResponse.sql;\n \n if (!sqlResponse || (typeof sqlResponse !== 'object')) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n if ('success' in sqlResponse && Array.isArray(sqlResponse.success)) {\n const successArray = sqlResponse.success as Array<{\n error: boolean;\n sql?: string;\n errorMessage?: string;\n query_key?: string;\n }>;\n \n const hasAnyValidQuery = successArray.some(item => \n item && typeof item === 'object' && \n item.error === false && \n 'sql' in item && \n typeof item.sql === 'string' && \n item.sql.trim()\n );\n \n if (!hasAnyValidQuery) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n const validQueries = successArray\n .filter(item => \n item && \n typeof item === 'object' && \n item.error === false && \n 'sql' in item && \n typeof item.sql === 'string' && \n item.sql.trim()\n )\n .map(item => ({\n sql: item.sql as string,\n queryKey: item.query_key || 'unknown'\n }));\n \n if (validQueries.length === 0) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n // Extract SQL and headings in the correct order\n const sqlQueries = validQueries.map(q => q.sql);\n const extractedHeadings = validQueries.map(q => formatQueryHeading(q.queryKey));\n \n return {\n sql: sqlQueries.length > 1 ? sqlQueries : sqlQueries[0],\n headings: extractedHeadings\n };\n }\n \n if ('error' in sqlResponse && typeof sqlResponse.error === 'string') {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n if (Array.isArray(sqlResponse)) {\n const sqlObjects = sqlResponse as Array<{sql: string, error: boolean, query_key?: string}>;\n \n const validQueries = sqlObjects\n .filter(obj => obj && typeof obj === 'object' && 'sql' in obj && 'error' in obj && !obj.error && obj.sql && obj.sql.trim())\n .map(obj => ({\n sql: obj.sql,\n queryKey: obj.query_key || 'unknown'\n }));\n \n if (validQueries.length === 0) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n const sqlQueries = validQueries.map(q => q.sql);\n const extractedHeadings = validQueries.map(q => formatQueryHeading(q.queryKey));\n \n return {\n sql: sqlQueries.length > 1 ? sqlQueries : sqlQueries[0],\n headings: extractedHeadings\n };\n }\n \n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n\n } catch (err) {\n\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n\n } finally {\n setIsLoading(false);\n }\n }\n\n async function handleInfoClick(e: React.MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n \n modalOpen.current = true;\n \n try {\n const cachedSemanticQuery = componentId \n ? queryCache.getCachedQuery(componentId, 'semanticLayerQuery', interactionState)\n : null;\n \n const cachedTableButton = componentId && tableActions.length > 0\n ? queryCache.getCachedQuery(componentId, 'tableButton', interactionState)\n : null;\n \n if (cachedSemanticQuery && (tableActions.length === 0 || cachedTableButton)) {\n setSqlQuery(cachedSemanticQuery.sqlQuery);\n setQueryHeadings(cachedSemanticQuery.queryHeadings);\n setTableButtonExplanations(\n cachedTableButton?.tableButtonExplanations || cachedSemanticQuery.tableButtonExplanations\n );\n setError('');\n \n if (modalOpen.current) {\n setIsModalOpen(true);\n }\n \n if (onSqlFetch && cachedSemanticQuery.sqlQuery && \n cachedSemanticQuery.sqlQuery !== ERROR_MESSAGES.SQL_NOT_AVAILABLE) {\n onSqlFetch(cachedSemanticQuery.sqlQuery);\n }\n \n return;\n }\n \n setIsLoadingModalOpen(true);\n setError('');\n\n const [sqlResult, buttonExplanations] = await Promise.all([\n fetchSemanticLayerQuery(),\n fetchTableButtonExplanations()\n ]);\n \n if (componentId) {\n const cacheEntry = {\n sqlQuery: sqlResult.sql || ERROR_MESSAGES.SQL_NOT_AVAILABLE,\n queryHeadings: sqlResult.headings || [],\n tableButtonExplanations: buttonExplanations,\n timestamp: Date.now(),\n };\n \n queryCache.setCachedQuery(componentId, 'semanticLayerQuery', interactionState, cacheEntry);\n \n if (tableActions.length > 0) {\n queryCache.setCachedQuery(componentId, 'tableButton', interactionState, {\n ...cacheEntry,\n tableButtonExplanations: buttonExplanations,\n });\n }\n }\n \n setSqlQuery(sqlResult.sql || ERROR_MESSAGES.SQL_NOT_AVAILABLE);\n setQueryHeadings(sqlResult.headings || []);\n setTableButtonExplanations(buttonExplanations);\n \n setIsLoadingModalOpen(false);\n \n if (modalOpen.current) {\n setIsModalOpen(true);\n }\n \n if (onSqlFetch && sqlResult.sql && sqlResult.sql !== ERROR_MESSAGES.SQL_NOT_AVAILABLE) {\n onSqlFetch(sqlResult.sql);\n }\n } catch (err) {\n setSqlQuery(ERROR_MESSAGES.SQL_NOT_AVAILABLE);\n setTableButtonExplanations([]);\n setIsLoadingModalOpen(false);\n \n if (modalOpen.current) {\n setIsModalOpen(true);\n }\n }\n }\n\n function resetState() {\n setIsModalOpen(false);\n setIsLoadingModalOpen(false);\n setSqlQuery('');\n setQueryHeadings([]);\n setTableButtonExplanations([]);\n setError('');\n setIsLoading(false);\n }\n\n function handleModalClose() {\n // User explicitly closed the modal\n modalOpen.current = false;\n resetState();\n }\n\n function handleRetry() {\n resetState();\n const mockEvent = { \n stopPropagation: () => void 0,\n preventDefault: () => void 0\n } as React.MouseEvent;\n handleInfoClick(mockEvent);\n }\n\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <>\n <button\n className={`${POSITION_CLASSES[position]} ${className}`}\n onClick={handleInfoClick}\n title=\"View Query Details\"\n type=\"button\"\n style={{\n width: '60px',\n height: '60px',\n transform: 'rotate(0deg)',\n opacity: 1,\n border: 'none',\n background: 'transparent',\n padding: 0,\n }}\n >\n <svg \n width=\"50\" \n height=\"50\" \n viewBox=\"0 0 67 66\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_d_4766_2811)\">\n <rect x=\"16.1667\" y=\"15.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#A601FF\" strokeWidth=\"1\" shapeRendering=\"crispEdges\"/>\n <path d=\"M33.0756 28.0171C33.3312 27.5498 34.0023 27.5498 34.2578 28.0171L35.7159 30.683C35.7777 30.7961 35.8706 30.889 35.9837 30.9508L38.6496 32.4089C39.1169 32.6644 39.1169 33.3355 38.6496 33.5911L35.9837 35.0491C35.8706 35.111 35.7777 35.2039 35.7159 35.317L34.2578 37.9829C34.0023 38.4501 33.3312 38.4501 33.0756 37.9829L31.6176 35.317C31.5557 35.2039 31.4628 35.111 31.3497 35.0491L28.6838 33.5911C28.2166 33.3355 28.2166 32.6644 28.6838 32.4089L31.3497 30.9508C31.4628 30.889 31.5557 30.7961 31.6176 30.683L33.0756 28.0171Z\" fill=\"#A601FF\"/>\n <path d=\"M29.0634 27.1601C29.1801 26.9466 29.4866 26.9466 29.6033 27.1601L29.9973 27.8804C30.0255 27.932 30.068 27.9745 30.1196 28.0027L30.84 28.3967C31.0534 28.5134 31.0534 28.8199 30.84 28.9367L30.1196 29.3306C30.068 29.3589 30.0255 29.4013 29.9973 29.4529L29.6033 30.1733C29.4866 30.3867 29.1801 30.3867 29.0634 30.1733L28.6694 29.4529C28.6412 29.4013 28.5987 29.3589 28.5471 29.3306L27.8268 28.9367C27.6133 28.8199 27.6133 28.5134 27.8268 28.3967L28.5471 28.0027C28.5987 27.9745 28.6412 27.932 28.6694 27.8804L29.0634 27.1601Z\" fill=\"#A601FF\"/>\n <path d=\"M38.0346 36.5104C38.1638 36.2743 38.5029 36.2743 38.6321 36.5105L38.8874 36.9773C38.9186 37.0344 38.9656 37.0814 39.0227 37.1126L39.4896 37.368C39.7257 37.4971 39.7257 37.8363 39.4896 37.9654L39.0227 38.2207C38.9656 38.252 38.9186 38.2989 38.8874 38.3561L38.6321 38.8229C38.5029 39.059 38.1638 39.059 38.0346 38.8229L37.7793 38.3561C37.748 38.2989 37.7011 38.252 37.6439 38.2207L37.1771 37.9654C36.941 37.8363 36.941 37.4971 37.1771 37.368L37.6439 37.1126C37.7011 37.0814 37.748 37.0344 37.7793 36.9773L38.0346 36.5104Z\" fill=\"#A601FF\"/>\n </g>\n <defs>\n <filter id=\"filter0_d_4766_2811\" x=\"0.666687\" y=\"0\" width=\"66\" height=\"66\" filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feMorphology radius=\"5\" operator=\"dilate\" in=\"SourceAlpha\" result=\"effect1_dropShadow_4766_2811\"/>\n <feOffset/>\n <feGaussianBlur stdDeviation=\"5\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0317231 0 0 0 0 0.0834676 0 0 0 0 0.370052 0 0 0 0.05 0\"/>\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4766_2811\"/>\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_4766_2811\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n </button>\n \n <QueryLoadingModal isOpen={isLoadingModalOpen} onClose={handleModalClose} />\n \n <QueryDetailsModal\n isOpen={isModalOpen}\n onClose={handleModalClose}\n isLoading={isLoading}\n error={error}\n sqlQuery={sqlQuery}\n queryHeadings={queryHeadings}\n tableButtonExplanations={tableButtonExplanations}\n onRetry={handleRetry}\n />\n </>\n );\n}"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"styled-info-button.js","names":["React","useState","useRef","useEffect","QueryDetailsModal","QueryLoadingModal","formatQueryHeading","useQueryCache","extractInteractionState","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","POSITION_CLASSES","ERROR_MESSAGES","FETCH_FAILED","LOAD_FAILED","SQL_NOT_AVAILABLE","StyledInfoButton","_ref","_ref$position","position","componentId","_ref$className","className","_ref$isVisible","isVisible","onSqlFetch","_ref$performInteracti","performInteraction","Promise","resolve","_ref$tableActions","tableActions","_ref$firstRowData","firstRowData","_ref$componentProps","componentProps","_useState","isModalOpen","setIsModalOpen","_useState2","isLoadingModalOpen","setIsLoadingModalOpen","_useState3","sqlQuery","setSqlQuery","_useState4","queryHeadings","setQueryHeadings","_useState5","tableButtonExplanations","setTableButtonExplanations","_useState6","isLoading","setIsLoading","_useState7","error","setError","modalOpen","queryCache","currentInteractionState","interactionStateKey","JSON","stringify","err","console","warn","Date","now","Math","random","prevInteractionStateKeyRef","undefined","interactionState","prevKey","current","currentKey","invalidateComponent","fetchTableButtonExplanations","_fetchTableButtonExplanations","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","buttonPromises","results","wrap","_callee2$","_context2","prev","next","length","abrupt","map","_ref2","_callee","action","result","response","buttonStyle","actionClassName","bgMatch","textMatch","borderMatch","formFields","jsonBody","filesArg","hasFormFields","hasJsonBody","hasFilesArg","hasPayload","_callee$","_context","id","interactionType","payload","row","params","isInfoButtonInteraction","affectedComponents","sent","apiResponse","request_url","match","backgroundColor","color","border","form_fields","json_body","files_arg","Object","keys","text","explanation","operationName","operation_name","operationSummary","operation_summary","operationDescription","operation_description","buttonClassName","t0","stop","_x2","all","filter","fetchSemanticLayerQuery","_fetchSemanticLayerQuery","_callee3","sqlResponse","successArray","hasAnyValidQuery","validQueries","sqlQueries","extractedHeadings","sqlObjects","_validQueries","_sqlQueries","_extractedHeadings","_callee3$","_context3","sql","headings","Array","isArray","success","some","item","trim","queryKey","query_key","q","obj","finish","handleInfoClick","_x","_handleInfoClick","_callee4","e","cachedSemanticQuery","cachedTableButton","_yield$Promise$all","sqlResult","buttonExplanations","cacheEntry","_callee4$","_context4","stopPropagation","preventDefault","getCachedQuery","timestamp","setCachedQuery","_extends","resetState","handleModalClose","handleRetry","mockEvent","children","onClick","title","type","style","width","height","transform","opacity","background","padding","viewBox","fill","xmlns","x","y","rx","stroke","strokeWidth","shapeRendering","d","filterUnits","colorInterpolationFilters","floodOpacity","values","radius","operator","stdDeviation","in2","mode","isOpen","onClose","onRetry"],"sources":["../../../src/plugins/helpers/styled-info-button.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport { QueryDetailsModal } from './query-details-modal';\nimport { QueryLoadingModal } from './query-loading-modal';\nimport { formatQueryHeading } from './query-heading-formatter';\nimport { useQueryCache } from './query-cache-context';\nimport { extractInteractionState } from './query-cache-utils';\n\nconst POSITION_CLASSES = {\n 'top-right': 'absolute top-0 right-0',\n 'top-left': 'absolute top-2 left-2', \n 'bottom-left': 'absolute bottom-0 left-1/2 transform -translate-x-1/2',\n 'bottom-right': 'absolute bottom-0 right-0 ',\n 'card-overlay': 'absolute bottom-0 right-0'\n} as const;\n\nconst ERROR_MESSAGES = {\n FETCH_FAILED: 'Failed to fetch query details from semantic layer',\n LOAD_FAILED: 'Failed to load query information',\n SQL_NOT_AVAILABLE: 'SQL not available'\n} as const;\n\n\ntype ButtonStyle = {\n backgroundColor?: string;\n color?: string;\n border?: string;\n [key: string]: unknown;\n};\n\ntype TableButtonExplanation = {\n action: string;\n explanation: string;\n operationName?: string;\n operationSummary?: string;\n operationDescription?: string;\n buttonClassName?: string;\n buttonStyle?: ButtonStyle;\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n filesArg?: Record<string, unknown>;\n hasPayload?: boolean;\n};\n\ntype TableAction = {\n id: string;\n text: string;\n className?: string;\n [key: string]: unknown;\n};\n\ntype Position = 'top-right' | 'top-left' | 'bottom-left' | 'bottom-right' | 'card-overlay';\n\ntype StyledInfoButtonProps = {\n buttonStyle?: ButtonStyle;\n onClick?: () => void;\n isVisible?: boolean;\n tableName?: string;\n position?: Position;\n componentId?: string;\n className?: string;\n onSqlFetch?: (sql: string | string[]) => void;\n performInteraction?: (payload: Record<string, unknown>) => Promise<Record<string, unknown>>;\n tableActions?: TableAction[];\n firstRowData?: Record<string, unknown>;\n componentProps?: Record<string, unknown>;\n}\n\n\nexport function StyledInfoButton({ \n position = 'bottom-right', \n componentId,\n className = '',\n isVisible = true,\n onSqlFetch,\n performInteraction = () => Promise.resolve({} as Record<string, unknown>),\n tableActions = [],\n firstRowData = {},\n componentProps = {}\n}: StyledInfoButtonProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isLoadingModalOpen, setIsLoadingModalOpen] = useState(false);\n \n const [sqlQuery, setSqlQuery] = useState<string | string[]>('');\n const [queryHeadings, setQueryHeadings] = useState<string[]>([]);\n const [tableButtonExplanations, setTableButtonExplanations] = useState<TableButtonExplanation[]>([]);\n \n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string>('');\n \n const modalOpen = useRef(false);\n \n const queryCache = useQueryCache();\n \n const currentInteractionState = extractInteractionState(componentProps);\n \n let interactionStateKey = '';\n\n try {\n interactionStateKey = JSON.stringify(currentInteractionState);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn('Failed to serialize interaction state:', err);\n interactionStateKey = `fallback_${Date.now()}_${Math.random()}`;\n }\n \n const prevInteractionStateKeyRef = useRef<string | undefined>(undefined);\n \n const interactionState = currentInteractionState;\n\n useEffect(() => {\n const prevKey = prevInteractionStateKeyRef.current;\n const currentKey = interactionStateKey;\n \n if (prevKey !== currentKey && prevKey !== undefined) {\n if (componentId) {\n queryCache.invalidateComponent(componentId);\n \n setSqlQuery('');\n setQueryHeadings([]);\n setTableButtonExplanations([]);\n setError('');\n }\n }\n \n prevInteractionStateKeyRef.current = currentKey;\n }, [interactionStateKey, componentId, queryCache]);\n\n async function fetchTableButtonExplanations(): Promise<TableButtonExplanation[]> {\n try {\n if (!tableActions || tableActions.length === 0) {\n return [];\n }\n \n\n const buttonPromises = tableActions.map(async (action) => {\n try {\n const result = await performInteraction({\n id: action.id || componentId,\n interactionType: 'tableButton',\n payload: {\n row: firstRowData,\n params: { isInfoButtonInteraction: true }\n },\n affectedComponents: []\n });\n\n if (result && typeof result === 'object' && 'apiResponse' in result && \n result.apiResponse && typeof result.apiResponse === 'object') {\n const response = result.apiResponse as Record<string, unknown>;\n \n if (response.request_url && typeof response.request_url === 'string') {\n const buttonStyle: ButtonStyle = {};\n const actionClassName = (action.className as string) || '';\n \n if (typeof actionClassName === 'string') {\n const bgMatch = actionClassName.match(/bg-\\[(#[0-9A-Fa-f]{6})\\]/);\n\n if (bgMatch) {\n buttonStyle.backgroundColor = bgMatch[1];\n }\n \n const textMatch = actionClassName.match(/text-\\[(#[0-9A-Fa-f]{6})\\]/);\n\n if (textMatch) {\n buttonStyle.color = textMatch[1];\n }\n \n const borderMatch = actionClassName.match(/border-\\[(#[0-9A-Fa-f]{6})\\]/);\n\n if (borderMatch) {\n buttonStyle.border = `1px solid ${borderMatch[1]}`;\n }\n }\n \n const formFields = response.form_fields as Record<string, unknown> || {};\n const jsonBody = response.json_body;\n const filesArg = response.files_arg as Record<string, unknown> || {};\n \n // Check if any payload fields have content\n const hasFormFields = Object.keys(formFields).length > 0;\n const hasJsonBody = jsonBody !== null && jsonBody !== undefined && jsonBody !== '';\n const hasFilesArg = Object.keys(filesArg).length > 0;\n const hasPayload = hasFormFields || hasJsonBody || hasFilesArg;\n \n return {\n action: action.text || action.id || 'Button Action',\n explanation: response.request_url,\n operationName: response.operation_name as string,\n operationSummary: response.operation_summary as string,\n operationDescription: response.operation_description as string,\n buttonClassName: actionClassName,\n buttonStyle,\n formFields,\n jsonBody,\n filesArg,\n hasPayload\n };\n }\n }\n\n return null;\n } catch (err) {\n return null;\n }\n });\n\n const results = await Promise.all(buttonPromises);\n\n return results.filter((result) => result !== null) as TableButtonExplanation[];\n } catch (err) {\n return [];\n }\n }\n\n async function fetchSemanticLayerQuery(): Promise<{sql: string | string[], headings: string[]}> {\n try {\n setIsLoading(true);\n setError('');\n \n const result = await performInteraction({\n id: componentId || 'styled-info-button',\n interactionType: 'semanticLayerQuery',\n affectedComponents: []\n });\n\n if (result && typeof result === 'object' && 'apiResponse' in result && \n result.apiResponse && typeof result.apiResponse === 'object') {\n const apiResponse = result.apiResponse as Record<string, unknown>;\n \n if (!('sql' in apiResponse)) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n const sqlResponse = apiResponse.sql;\n \n if (!sqlResponse || (typeof sqlResponse !== 'object')) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n if ('success' in sqlResponse && Array.isArray(sqlResponse.success)) {\n const successArray = sqlResponse.success as Array<{\n error: boolean;\n sql?: string;\n errorMessage?: string;\n query_key?: string;\n }>;\n \n const hasAnyValidQuery = successArray.some(item => \n item && typeof item === 'object' && \n item.error === false && \n 'sql' in item && \n typeof item.sql === 'string' && \n item.sql.trim()\n );\n \n if (!hasAnyValidQuery) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n const validQueries = successArray\n .filter(item => \n item && \n typeof item === 'object' && \n item.error === false && \n 'sql' in item && \n typeof item.sql === 'string' && \n item.sql.trim()\n )\n .map(item => ({\n sql: item.sql as string,\n queryKey: item.query_key || 'Query details'\n }));\n \n if (validQueries.length === 0) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n // Extract SQL and headings in the correct order\n const sqlQueries = validQueries.map(q => q.sql);\n const extractedHeadings = validQueries.map(q => formatQueryHeading(q.queryKey));\n \n return {\n sql: sqlQueries.length > 1 ? sqlQueries : sqlQueries[0],\n headings: extractedHeadings\n };\n }\n \n if ('error' in sqlResponse && typeof sqlResponse.error === 'string') {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n if (Array.isArray(sqlResponse)) {\n const sqlObjects = sqlResponse as Array<{sql: string, error: boolean, query_key?: string}>;\n \n const validQueries = sqlObjects\n .filter(obj => obj && typeof obj === 'object' && 'sql' in obj && 'error' in obj && !obj.error && obj.sql && obj.sql.trim())\n .map(obj => ({\n sql: obj.sql,\n queryKey: obj.query_key || 'Query details'\n }));\n \n if (validQueries.length === 0) {\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n \n const sqlQueries = validQueries.map(q => q.sql);\n const extractedHeadings = validQueries.map(q => formatQueryHeading(q.queryKey));\n \n return {\n sql: sqlQueries.length > 1 ? sqlQueries : sqlQueries[0],\n headings: extractedHeadings\n };\n }\n \n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n }\n\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n\n } catch (err) {\n\n return {sql: ERROR_MESSAGES.SQL_NOT_AVAILABLE, headings: []};\n\n } finally {\n setIsLoading(false);\n }\n }\n\n async function handleInfoClick(e: React.MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n \n modalOpen.current = true;\n \n try {\n const cachedSemanticQuery = componentId \n ? queryCache.getCachedQuery(componentId, 'semanticLayerQuery', interactionState)\n : null;\n \n const cachedTableButton = componentId && tableActions.length > 0\n ? queryCache.getCachedQuery(componentId, 'tableButton', interactionState)\n : null;\n \n if (cachedSemanticQuery && (tableActions.length === 0 || cachedTableButton)) {\n setSqlQuery(cachedSemanticQuery.sqlQuery);\n setQueryHeadings(cachedSemanticQuery.queryHeadings);\n setTableButtonExplanations(\n cachedTableButton?.tableButtonExplanations || cachedSemanticQuery.tableButtonExplanations\n );\n setError('');\n \n if (modalOpen.current) {\n setIsModalOpen(true);\n }\n \n if (onSqlFetch && cachedSemanticQuery.sqlQuery && \n cachedSemanticQuery.sqlQuery !== ERROR_MESSAGES.SQL_NOT_AVAILABLE) {\n onSqlFetch(cachedSemanticQuery.sqlQuery);\n }\n \n return;\n }\n \n setIsLoadingModalOpen(true);\n setError('');\n\n const [sqlResult, buttonExplanations] = await Promise.all([\n fetchSemanticLayerQuery(),\n fetchTableButtonExplanations()\n ]);\n \n if (componentId) {\n const cacheEntry = {\n sqlQuery: sqlResult.sql || ERROR_MESSAGES.SQL_NOT_AVAILABLE,\n queryHeadings: sqlResult.headings || [],\n tableButtonExplanations: buttonExplanations,\n timestamp: Date.now(),\n };\n \n queryCache.setCachedQuery(componentId, 'semanticLayerQuery', interactionState, cacheEntry);\n \n if (tableActions.length > 0) {\n queryCache.setCachedQuery(componentId, 'tableButton', interactionState, {\n ...cacheEntry,\n tableButtonExplanations: buttonExplanations,\n });\n }\n }\n \n setSqlQuery(sqlResult.sql || ERROR_MESSAGES.SQL_NOT_AVAILABLE);\n setQueryHeadings(sqlResult.headings || []);\n setTableButtonExplanations(buttonExplanations);\n \n setIsLoadingModalOpen(false);\n \n if (modalOpen.current) {\n setIsModalOpen(true);\n }\n \n if (onSqlFetch && sqlResult.sql && sqlResult.sql !== ERROR_MESSAGES.SQL_NOT_AVAILABLE) {\n onSqlFetch(sqlResult.sql);\n }\n } catch (err) {\n setSqlQuery(ERROR_MESSAGES.SQL_NOT_AVAILABLE);\n setTableButtonExplanations([]);\n setIsLoadingModalOpen(false);\n \n if (modalOpen.current) {\n setIsModalOpen(true);\n }\n }\n }\n\n function resetState() {\n setIsModalOpen(false);\n setIsLoadingModalOpen(false);\n setSqlQuery('');\n setQueryHeadings([]);\n setTableButtonExplanations([]);\n setError('');\n setIsLoading(false);\n }\n\n function handleModalClose() {\n // User explicitly closed the modal\n modalOpen.current = false;\n resetState();\n }\n\n function handleRetry() {\n resetState();\n const mockEvent = { \n stopPropagation: () => void 0,\n preventDefault: () => void 0\n } as React.MouseEvent;\n handleInfoClick(mockEvent);\n }\n\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <>\n <button\n className={`${POSITION_CLASSES[position]} ${className}`}\n onClick={handleInfoClick}\n title=\"View Query Details\"\n type=\"button\"\n style={{\n width: '60px',\n height: '60px',\n transform: 'rotate(0deg)',\n opacity: 1,\n border: 'none',\n background: 'transparent',\n padding: 0,\n }}\n >\n <svg \n width=\"50\" \n height=\"50\" \n viewBox=\"0 0 67 66\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_d_4766_2811)\">\n <rect x=\"16.1667\" y=\"15.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#A601FF\" strokeWidth=\"1\" shapeRendering=\"crispEdges\"/>\n <path d=\"M33.0756 28.0171C33.3312 27.5498 34.0023 27.5498 34.2578 28.0171L35.7159 30.683C35.7777 30.7961 35.8706 30.889 35.9837 30.9508L38.6496 32.4089C39.1169 32.6644 39.1169 33.3355 38.6496 33.5911L35.9837 35.0491C35.8706 35.111 35.7777 35.2039 35.7159 35.317L34.2578 37.9829C34.0023 38.4501 33.3312 38.4501 33.0756 37.9829L31.6176 35.317C31.5557 35.2039 31.4628 35.111 31.3497 35.0491L28.6838 33.5911C28.2166 33.3355 28.2166 32.6644 28.6838 32.4089L31.3497 30.9508C31.4628 30.889 31.5557 30.7961 31.6176 30.683L33.0756 28.0171Z\" fill=\"#A601FF\"/>\n <path d=\"M29.0634 27.1601C29.1801 26.9466 29.4866 26.9466 29.6033 27.1601L29.9973 27.8804C30.0255 27.932 30.068 27.9745 30.1196 28.0027L30.84 28.3967C31.0534 28.5134 31.0534 28.8199 30.84 28.9367L30.1196 29.3306C30.068 29.3589 30.0255 29.4013 29.9973 29.4529L29.6033 30.1733C29.4866 30.3867 29.1801 30.3867 29.0634 30.1733L28.6694 29.4529C28.6412 29.4013 28.5987 29.3589 28.5471 29.3306L27.8268 28.9367C27.6133 28.8199 27.6133 28.5134 27.8268 28.3967L28.5471 28.0027C28.5987 27.9745 28.6412 27.932 28.6694 27.8804L29.0634 27.1601Z\" fill=\"#A601FF\"/>\n <path d=\"M38.0346 36.5104C38.1638 36.2743 38.5029 36.2743 38.6321 36.5105L38.8874 36.9773C38.9186 37.0344 38.9656 37.0814 39.0227 37.1126L39.4896 37.368C39.7257 37.4971 39.7257 37.8363 39.4896 37.9654L39.0227 38.2207C38.9656 38.252 38.9186 38.2989 38.8874 38.3561L38.6321 38.8229C38.5029 39.059 38.1638 39.059 38.0346 38.8229L37.7793 38.3561C37.748 38.2989 37.7011 38.252 37.6439 38.2207L37.1771 37.9654C36.941 37.8363 36.941 37.4971 37.1771 37.368L37.6439 37.1126C37.7011 37.0814 37.748 37.0344 37.7793 36.9773L38.0346 36.5104Z\" fill=\"#A601FF\"/>\n </g>\n <defs>\n <filter id=\"filter0_d_4766_2811\" x=\"0.666687\" y=\"0\" width=\"66\" height=\"66\" filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feMorphology radius=\"5\" operator=\"dilate\" in=\"SourceAlpha\" result=\"effect1_dropShadow_4766_2811\"/>\n <feOffset/>\n <feGaussianBlur stdDeviation=\"5\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0317231 0 0 0 0 0.0834676 0 0 0 0 0.370052 0 0 0 0.05 0\"/>\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4766_2811\"/>\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_4766_2811\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n </button>\n \n <QueryLoadingModal isOpen={isLoadingModalOpen} onClose={handleModalClose} />\n \n <QueryDetailsModal\n isOpen={isModalOpen}\n onClose={handleModalClose}\n isLoading={isLoading}\n error={error}\n sqlQuery={sqlQuery}\n queryHeadings={queryHeadings}\n tableButtonExplanations={tableButtonExplanations}\n onRetry={handleRetry}\n />\n </>\n );\n}"],"mappings":"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","ignoreList":[]}