@grafana/sql 0.0.0 → 13.0.0-23483592685

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.
Files changed (323) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/README.md +10 -0
  3. package/dist/cjs/ResponseParser.cjs +29 -0
  4. package/dist/cjs/ResponseParser.cjs.map +1 -0
  5. package/dist/cjs/SQLVariableEditor.cjs +86 -0
  6. package/dist/cjs/SQLVariableEditor.cjs.map +1 -0
  7. package/dist/cjs/SQLVariableSupport.cjs +40 -0
  8. package/dist/cjs/SQLVariableSupport.cjs.map +1 -0
  9. package/dist/cjs/SQLVariableUtils.cjs +75 -0
  10. package/dist/cjs/SQLVariableUtils.cjs.map +1 -0
  11. package/dist/cjs/components/ConfirmModal.cjs +56 -0
  12. package/dist/cjs/components/ConfirmModal.cjs.map +1 -0
  13. package/dist/cjs/components/DatasetSelector.cjs +48 -0
  14. package/dist/cjs/components/DatasetSelector.cjs.map +1 -0
  15. package/dist/cjs/components/QueryEditor.cjs +124 -0
  16. package/dist/cjs/components/QueryEditor.cjs.map +1 -0
  17. package/dist/cjs/components/QueryEditorLazy.cjs +44 -0
  18. package/dist/cjs/components/QueryEditorLazy.cjs.map +1 -0
  19. package/dist/cjs/components/QueryHeader.cjs +294 -0
  20. package/dist/cjs/components/QueryHeader.cjs.map +1 -0
  21. package/dist/cjs/components/TableSelector.cjs +41 -0
  22. package/dist/cjs/components/TableSelector.cjs.map +1 -0
  23. package/dist/cjs/components/configuration/ConnectionLimits.cjs +162 -0
  24. package/dist/cjs/components/configuration/ConnectionLimits.cjs.map +1 -0
  25. package/dist/cjs/components/configuration/Divider.cjs +25 -0
  26. package/dist/cjs/components/configuration/Divider.cjs.map +1 -0
  27. package/dist/cjs/components/configuration/MaxLifetimeField.cjs +41 -0
  28. package/dist/cjs/components/configuration/MaxLifetimeField.cjs.map +1 -0
  29. package/dist/cjs/components/configuration/MaxOpenConnectionsField.cjs +53 -0
  30. package/dist/cjs/components/configuration/MaxOpenConnectionsField.cjs.map +1 -0
  31. package/dist/cjs/components/configuration/NumberInput.cjs +37 -0
  32. package/dist/cjs/components/configuration/NumberInput.cjs.map +1 -0
  33. package/dist/cjs/components/configuration/TLSSecretsConfig.cjs +106 -0
  34. package/dist/cjs/components/configuration/TLSSecretsConfig.cjs.map +1 -0
  35. package/dist/cjs/components/configuration/useMigrateDatabaseFields.cjs +52 -0
  36. package/dist/cjs/components/configuration/useMigrateDatabaseFields.cjs.map +1 -0
  37. package/dist/cjs/components/query-editor-raw/QueryEditorRaw.cjs +40 -0
  38. package/dist/cjs/components/query-editor-raw/QueryEditorRaw.cjs.map +1 -0
  39. package/dist/cjs/components/query-editor-raw/QueryToolbox.cjs +108 -0
  40. package/dist/cjs/components/query-editor-raw/QueryToolbox.cjs.map +1 -0
  41. package/dist/cjs/components/query-editor-raw/QueryValidator.cjs +100 -0
  42. package/dist/cjs/components/query-editor-raw/QueryValidator.cjs.map +1 -0
  43. package/dist/cjs/components/query-editor-raw/RawEditor.cjs +116 -0
  44. package/dist/cjs/components/query-editor-raw/RawEditor.cjs.map +1 -0
  45. package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs +273 -0
  46. package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs.map +1 -0
  47. package/dist/cjs/components/visual-query-builder/GroupByRow.cjs +69 -0
  48. package/dist/cjs/components/visual-query-builder/GroupByRow.cjs.map +1 -0
  49. package/dist/cjs/components/visual-query-builder/OrderByRow.cjs +82 -0
  50. package/dist/cjs/components/visual-query-builder/OrderByRow.cjs.map +1 -0
  51. package/dist/cjs/components/visual-query-builder/Preview.cjs +55 -0
  52. package/dist/cjs/components/visual-query-builder/Preview.cjs.map +1 -0
  53. package/dist/cjs/components/visual-query-builder/SQLGroupByRow.cjs +18 -0
  54. package/dist/cjs/components/visual-query-builder/SQLGroupByRow.cjs.map +1 -0
  55. package/dist/cjs/components/visual-query-builder/SQLOrderByRow.cjs +18 -0
  56. package/dist/cjs/components/visual-query-builder/SQLOrderByRow.cjs.map +1 -0
  57. package/dist/cjs/components/visual-query-builder/SQLWhereRow.cjs +56 -0
  58. package/dist/cjs/components/visual-query-builder/SQLWhereRow.cjs.map +1 -0
  59. package/dist/cjs/components/visual-query-builder/SelectColumn.cjs +30 -0
  60. package/dist/cjs/components/visual-query-builder/SelectColumn.cjs.map +1 -0
  61. package/dist/cjs/components/visual-query-builder/SelectCustomFunctionParameters.cjs +135 -0
  62. package/dist/cjs/components/visual-query-builder/SelectCustomFunctionParameters.cjs.map +1 -0
  63. package/dist/cjs/components/visual-query-builder/SelectFunctionParameters.cjs +142 -0
  64. package/dist/cjs/components/visual-query-builder/SelectFunctionParameters.cjs.map +1 -0
  65. package/dist/cjs/components/visual-query-builder/SelectRow.cjs +184 -0
  66. package/dist/cjs/components/visual-query-builder/SelectRow.cjs.map +1 -0
  67. package/dist/cjs/components/visual-query-builder/VisualEditor.cjs +43 -0
  68. package/dist/cjs/components/visual-query-builder/VisualEditor.cjs.map +1 -0
  69. package/dist/cjs/components/visual-query-builder/WhereRow.cjs +84 -0
  70. package/dist/cjs/components/visual-query-builder/WhereRow.cjs.map +1 -0
  71. package/dist/cjs/constants.cjs +77 -0
  72. package/dist/cjs/constants.cjs.map +1 -0
  73. package/dist/cjs/datasource/SqlDatasource.cjs +188 -0
  74. package/dist/cjs/datasource/SqlDatasource.cjs.map +1 -0
  75. package/dist/cjs/defaults.cjs +32 -0
  76. package/dist/cjs/defaults.cjs.map +1 -0
  77. package/dist/cjs/expressions.cjs +23 -0
  78. package/dist/cjs/expressions.cjs.map +1 -0
  79. package/dist/cjs/index.cjs +48 -0
  80. package/dist/cjs/index.cjs.map +1 -0
  81. package/dist/cjs/loadResources.cjs +49 -0
  82. package/dist/cjs/loadResources.cjs.map +1 -0
  83. package/dist/cjs/locales/cs-CZ/grafana-sql.json.cjs +165 -0
  84. package/dist/cjs/locales/cs-CZ/grafana-sql.json.cjs.map +1 -0
  85. package/dist/cjs/locales/de-DE/grafana-sql.json.cjs +165 -0
  86. package/dist/cjs/locales/de-DE/grafana-sql.json.cjs.map +1 -0
  87. package/dist/cjs/locales/en-US/grafana-sql.json.cjs +165 -0
  88. package/dist/cjs/locales/en-US/grafana-sql.json.cjs.map +1 -0
  89. package/dist/cjs/locales/es-ES/grafana-sql.json.cjs +165 -0
  90. package/dist/cjs/locales/es-ES/grafana-sql.json.cjs.map +1 -0
  91. package/dist/cjs/locales/fr-FR/grafana-sql.json.cjs +165 -0
  92. package/dist/cjs/locales/fr-FR/grafana-sql.json.cjs.map +1 -0
  93. package/dist/cjs/locales/hu-HU/grafana-sql.json.cjs +165 -0
  94. package/dist/cjs/locales/hu-HU/grafana-sql.json.cjs.map +1 -0
  95. package/dist/cjs/locales/id-ID/grafana-sql.json.cjs +165 -0
  96. package/dist/cjs/locales/id-ID/grafana-sql.json.cjs.map +1 -0
  97. package/dist/cjs/locales/it-IT/grafana-sql.json.cjs +165 -0
  98. package/dist/cjs/locales/it-IT/grafana-sql.json.cjs.map +1 -0
  99. package/dist/cjs/locales/ja-JP/grafana-sql.json.cjs +165 -0
  100. package/dist/cjs/locales/ja-JP/grafana-sql.json.cjs.map +1 -0
  101. package/dist/cjs/locales/ko-KR/grafana-sql.json.cjs +165 -0
  102. package/dist/cjs/locales/ko-KR/grafana-sql.json.cjs.map +1 -0
  103. package/dist/cjs/locales/nl-NL/grafana-sql.json.cjs +165 -0
  104. package/dist/cjs/locales/nl-NL/grafana-sql.json.cjs.map +1 -0
  105. package/dist/cjs/locales/pl-PL/grafana-sql.json.cjs +165 -0
  106. package/dist/cjs/locales/pl-PL/grafana-sql.json.cjs.map +1 -0
  107. package/dist/cjs/locales/pt-BR/grafana-sql.json.cjs +165 -0
  108. package/dist/cjs/locales/pt-BR/grafana-sql.json.cjs.map +1 -0
  109. package/dist/cjs/locales/pt-PT/grafana-sql.json.cjs +165 -0
  110. package/dist/cjs/locales/pt-PT/grafana-sql.json.cjs.map +1 -0
  111. package/dist/cjs/locales/ru-RU/grafana-sql.json.cjs +165 -0
  112. package/dist/cjs/locales/ru-RU/grafana-sql.json.cjs.map +1 -0
  113. package/dist/cjs/locales/sv-SE/grafana-sql.json.cjs +165 -0
  114. package/dist/cjs/locales/sv-SE/grafana-sql.json.cjs.map +1 -0
  115. package/dist/cjs/locales/tr-TR/grafana-sql.json.cjs +165 -0
  116. package/dist/cjs/locales/tr-TR/grafana-sql.json.cjs.map +1 -0
  117. package/dist/cjs/locales/zh-Hans/grafana-sql.json.cjs +165 -0
  118. package/dist/cjs/locales/zh-Hans/grafana-sql.json.cjs.map +1 -0
  119. package/dist/cjs/locales/zh-Hant/grafana-sql.json.cjs +165 -0
  120. package/dist/cjs/locales/zh-Hant/grafana-sql.json.cjs.map +1 -0
  121. package/dist/cjs/types.cjs +24 -0
  122. package/dist/cjs/types.cjs.map +1 -0
  123. package/dist/cjs/utils/formatSQL.cjs +19 -0
  124. package/dist/cjs/utils/formatSQL.cjs.map +1 -0
  125. package/dist/cjs/utils/getColumnsWithIndices.cjs +33 -0
  126. package/dist/cjs/utils/getColumnsWithIndices.cjs.map +1 -0
  127. package/dist/cjs/utils/logging.cjs +11 -0
  128. package/dist/cjs/utils/logging.cjs.map +1 -0
  129. package/dist/cjs/utils/migration.cjs +24 -0
  130. package/dist/cjs/utils/migration.cjs.map +1 -0
  131. package/dist/cjs/utils/sql.utils.cjs +75 -0
  132. package/dist/cjs/utils/sql.utils.cjs.map +1 -0
  133. package/dist/cjs/utils/testHelpers.cjs +31 -0
  134. package/dist/cjs/utils/testHelpers.cjs.map +1 -0
  135. package/dist/cjs/utils/useSqlChange.cjs +22 -0
  136. package/dist/cjs/utils/useSqlChange.cjs.map +1 -0
  137. package/dist/esm/ResponseParser.mjs +25 -0
  138. package/dist/esm/ResponseParser.mjs.map +1 -0
  139. package/dist/esm/SQLVariableEditor.mjs +82 -0
  140. package/dist/esm/SQLVariableEditor.mjs.map +1 -0
  141. package/dist/esm/SQLVariableSupport.mjs +36 -0
  142. package/dist/esm/SQLVariableSupport.mjs.map +1 -0
  143. package/dist/esm/SQLVariableUtils.mjs +68 -0
  144. package/dist/esm/SQLVariableUtils.mjs.map +1 -0
  145. package/dist/esm/components/ConfirmModal.mjs +52 -0
  146. package/dist/esm/components/ConfirmModal.mjs.map +1 -0
  147. package/dist/esm/components/DatasetSelector.mjs +44 -0
  148. package/dist/esm/components/DatasetSelector.mjs.map +1 -0
  149. package/dist/esm/components/QueryEditor.mjs +122 -0
  150. package/dist/esm/components/QueryEditor.mjs.map +1 -0
  151. package/dist/esm/components/QueryEditorLazy.mjs +38 -0
  152. package/dist/esm/components/QueryEditorLazy.mjs.map +1 -0
  153. package/dist/esm/components/QueryHeader.mjs +290 -0
  154. package/dist/esm/components/QueryHeader.mjs.map +1 -0
  155. package/dist/esm/components/TableSelector.mjs +37 -0
  156. package/dist/esm/components/TableSelector.mjs.map +1 -0
  157. package/dist/esm/components/configuration/ConnectionLimits.mjs +158 -0
  158. package/dist/esm/components/configuration/ConnectionLimits.mjs.map +1 -0
  159. package/dist/esm/components/configuration/Divider.mjs +21 -0
  160. package/dist/esm/components/configuration/Divider.mjs.map +1 -0
  161. package/dist/esm/components/configuration/MaxLifetimeField.mjs +37 -0
  162. package/dist/esm/components/configuration/MaxLifetimeField.mjs.map +1 -0
  163. package/dist/esm/components/configuration/MaxOpenConnectionsField.mjs +49 -0
  164. package/dist/esm/components/configuration/MaxOpenConnectionsField.mjs.map +1 -0
  165. package/dist/esm/components/configuration/NumberInput.mjs +33 -0
  166. package/dist/esm/components/configuration/NumberInput.mjs.map +1 -0
  167. package/dist/esm/components/configuration/TLSSecretsConfig.mjs +102 -0
  168. package/dist/esm/components/configuration/TLSSecretsConfig.mjs.map +1 -0
  169. package/dist/esm/components/configuration/useMigrateDatabaseFields.mjs +48 -0
  170. package/dist/esm/components/configuration/useMigrateDatabaseFields.mjs.map +1 -0
  171. package/dist/esm/components/query-editor-raw/QueryEditorRaw.mjs +36 -0
  172. package/dist/esm/components/query-editor-raw/QueryEditorRaw.mjs.map +1 -0
  173. package/dist/esm/components/query-editor-raw/QueryToolbox.mjs +104 -0
  174. package/dist/esm/components/query-editor-raw/QueryToolbox.mjs.map +1 -0
  175. package/dist/esm/components/query-editor-raw/QueryValidator.mjs +96 -0
  176. package/dist/esm/components/query-editor-raw/QueryValidator.mjs.map +1 -0
  177. package/dist/esm/components/query-editor-raw/RawEditor.mjs +108 -0
  178. package/dist/esm/components/query-editor-raw/RawEditor.mjs.map +1 -0
  179. package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs +266 -0
  180. package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs.map +1 -0
  181. package/dist/esm/components/visual-query-builder/GroupByRow.mjs +65 -0
  182. package/dist/esm/components/visual-query-builder/GroupByRow.mjs.map +1 -0
  183. package/dist/esm/components/visual-query-builder/OrderByRow.mjs +78 -0
  184. package/dist/esm/components/visual-query-builder/OrderByRow.mjs.map +1 -0
  185. package/dist/esm/components/visual-query-builder/Preview.mjs +51 -0
  186. package/dist/esm/components/visual-query-builder/Preview.mjs.map +1 -0
  187. package/dist/esm/components/visual-query-builder/SQLGroupByRow.mjs +14 -0
  188. package/dist/esm/components/visual-query-builder/SQLGroupByRow.mjs.map +1 -0
  189. package/dist/esm/components/visual-query-builder/SQLOrderByRow.mjs +14 -0
  190. package/dist/esm/components/visual-query-builder/SQLOrderByRow.mjs.map +1 -0
  191. package/dist/esm/components/visual-query-builder/SQLWhereRow.mjs +51 -0
  192. package/dist/esm/components/visual-query-builder/SQLWhereRow.mjs.map +1 -0
  193. package/dist/esm/components/visual-query-builder/SelectColumn.mjs +26 -0
  194. package/dist/esm/components/visual-query-builder/SelectColumn.mjs.map +1 -0
  195. package/dist/esm/components/visual-query-builder/SelectCustomFunctionParameters.mjs +131 -0
  196. package/dist/esm/components/visual-query-builder/SelectCustomFunctionParameters.mjs.map +1 -0
  197. package/dist/esm/components/visual-query-builder/SelectFunctionParameters.mjs +138 -0
  198. package/dist/esm/components/visual-query-builder/SelectFunctionParameters.mjs.map +1 -0
  199. package/dist/esm/components/visual-query-builder/SelectRow.mjs +180 -0
  200. package/dist/esm/components/visual-query-builder/SelectRow.mjs.map +1 -0
  201. package/dist/esm/components/visual-query-builder/VisualEditor.mjs +39 -0
  202. package/dist/esm/components/visual-query-builder/VisualEditor.mjs.map +1 -0
  203. package/dist/esm/components/visual-query-builder/WhereRow.mjs +80 -0
  204. package/dist/esm/components/visual-query-builder/WhereRow.mjs.map +1 -0
  205. package/dist/esm/constants.mjs +71 -0
  206. package/dist/esm/constants.mjs.map +1 -0
  207. package/dist/esm/datasource/SqlDatasource.mjs +184 -0
  208. package/dist/esm/datasource/SqlDatasource.mjs.map +1 -0
  209. package/dist/esm/defaults.mjs +28 -0
  210. package/dist/esm/defaults.mjs.map +1 -0
  211. package/dist/esm/expressions.mjs +18 -0
  212. package/dist/esm/expressions.mjs.map +1 -0
  213. package/dist/esm/index.mjs +22 -0
  214. package/dist/esm/index.mjs.map +1 -0
  215. package/dist/esm/loadResources.mjs +43 -0
  216. package/dist/esm/loadResources.mjs.map +1 -0
  217. package/dist/esm/locales/cs-CZ/grafana-sql.json.mjs +163 -0
  218. package/dist/esm/locales/cs-CZ/grafana-sql.json.mjs.map +1 -0
  219. package/dist/esm/locales/de-DE/grafana-sql.json.mjs +163 -0
  220. package/dist/esm/locales/de-DE/grafana-sql.json.mjs.map +1 -0
  221. package/dist/esm/locales/en-US/grafana-sql.json.mjs +163 -0
  222. package/dist/esm/locales/en-US/grafana-sql.json.mjs.map +1 -0
  223. package/dist/esm/locales/es-ES/grafana-sql.json.mjs +163 -0
  224. package/dist/esm/locales/es-ES/grafana-sql.json.mjs.map +1 -0
  225. package/dist/esm/locales/fr-FR/grafana-sql.json.mjs +163 -0
  226. package/dist/esm/locales/fr-FR/grafana-sql.json.mjs.map +1 -0
  227. package/dist/esm/locales/hu-HU/grafana-sql.json.mjs +163 -0
  228. package/dist/esm/locales/hu-HU/grafana-sql.json.mjs.map +1 -0
  229. package/dist/esm/locales/id-ID/grafana-sql.json.mjs +163 -0
  230. package/dist/esm/locales/id-ID/grafana-sql.json.mjs.map +1 -0
  231. package/dist/esm/locales/it-IT/grafana-sql.json.mjs +163 -0
  232. package/dist/esm/locales/it-IT/grafana-sql.json.mjs.map +1 -0
  233. package/dist/esm/locales/ja-JP/grafana-sql.json.mjs +163 -0
  234. package/dist/esm/locales/ja-JP/grafana-sql.json.mjs.map +1 -0
  235. package/dist/esm/locales/ko-KR/grafana-sql.json.mjs +163 -0
  236. package/dist/esm/locales/ko-KR/grafana-sql.json.mjs.map +1 -0
  237. package/dist/esm/locales/nl-NL/grafana-sql.json.mjs +163 -0
  238. package/dist/esm/locales/nl-NL/grafana-sql.json.mjs.map +1 -0
  239. package/dist/esm/locales/pl-PL/grafana-sql.json.mjs +163 -0
  240. package/dist/esm/locales/pl-PL/grafana-sql.json.mjs.map +1 -0
  241. package/dist/esm/locales/pt-BR/grafana-sql.json.mjs +163 -0
  242. package/dist/esm/locales/pt-BR/grafana-sql.json.mjs.map +1 -0
  243. package/dist/esm/locales/pt-PT/grafana-sql.json.mjs +163 -0
  244. package/dist/esm/locales/pt-PT/grafana-sql.json.mjs.map +1 -0
  245. package/dist/esm/locales/ru-RU/grafana-sql.json.mjs +163 -0
  246. package/dist/esm/locales/ru-RU/grafana-sql.json.mjs.map +1 -0
  247. package/dist/esm/locales/sv-SE/grafana-sql.json.mjs +163 -0
  248. package/dist/esm/locales/sv-SE/grafana-sql.json.mjs.map +1 -0
  249. package/dist/esm/locales/tr-TR/grafana-sql.json.mjs +163 -0
  250. package/dist/esm/locales/tr-TR/grafana-sql.json.mjs.map +1 -0
  251. package/dist/esm/locales/zh-Hans/grafana-sql.json.mjs +163 -0
  252. package/dist/esm/locales/zh-Hans/grafana-sql.json.mjs.map +1 -0
  253. package/dist/esm/locales/zh-Hant/grafana-sql.json.mjs +163 -0
  254. package/dist/esm/locales/zh-Hant/grafana-sql.json.mjs.map +1 -0
  255. package/dist/esm/types.mjs +18 -0
  256. package/dist/esm/types.mjs.map +1 -0
  257. package/dist/esm/utils/formatSQL.mjs +11 -0
  258. package/dist/esm/utils/formatSQL.mjs.map +1 -0
  259. package/dist/esm/utils/getColumnsWithIndices.mjs +29 -0
  260. package/dist/esm/utils/getColumnsWithIndices.mjs.map +1 -0
  261. package/dist/esm/utils/logging.mjs +7 -0
  262. package/dist/esm/utils/logging.mjs.map +1 -0
  263. package/dist/esm/utils/migration.mjs +22 -0
  264. package/dist/esm/utils/migration.mjs.map +1 -0
  265. package/dist/esm/utils/sql.utils.mjs +66 -0
  266. package/dist/esm/utils/sql.utils.mjs.map +1 -0
  267. package/dist/esm/utils/testHelpers.mjs +27 -0
  268. package/dist/esm/utils/testHelpers.mjs.map +1 -0
  269. package/dist/esm/utils/useSqlChange.mjs +18 -0
  270. package/dist/esm/utils/useSqlChange.mjs.map +1 -0
  271. package/dist/types/ResponseParser.d.ts +5 -0
  272. package/dist/types/SQLVariableEditor.d.ts +5 -0
  273. package/dist/types/SQLVariableSupport.d.ts +11 -0
  274. package/dist/types/SQLVariableUtils.d.ts +6 -0
  275. package/dist/types/components/ConfirmModal.d.ts +8 -0
  276. package/dist/types/components/DatasetSelector.d.ts +11 -0
  277. package/dist/types/components/ErrorBoundary.d.ts +12 -0
  278. package/dist/types/components/QueryEditor.d.ts +8 -0
  279. package/dist/types/components/QueryEditorLazy.d.ts +2 -0
  280. package/dist/types/components/QueryHeader.d.ts +16 -0
  281. package/dist/types/components/SqlComponents.testHelpers.d.ts +65 -0
  282. package/dist/types/components/TableSelector.d.ts +10 -0
  283. package/dist/types/components/configuration/ConnectionLimits.d.ts +8 -0
  284. package/dist/types/components/configuration/Divider.d.ts +1 -0
  285. package/dist/types/components/configuration/MaxLifetimeField.d.ts +8 -0
  286. package/dist/types/components/configuration/MaxOpenConnectionsField.d.ts +8 -0
  287. package/dist/types/components/configuration/NumberInput.d.ts +8 -0
  288. package/dist/types/components/configuration/TLSSecretsConfig.d.ts +9 -0
  289. package/dist/types/components/configuration/useMigrateDatabaseFields.d.ts +7 -0
  290. package/dist/types/components/index.d.ts +1 -0
  291. package/dist/types/components/query-editor-raw/QueryEditorRaw.d.ts +15 -0
  292. package/dist/types/components/query-editor-raw/QueryToolbox.d.ts +10 -0
  293. package/dist/types/components/query-editor-raw/QueryValidator.d.ts +9 -0
  294. package/dist/types/components/query-editor-raw/RawEditor.d.ts +9 -0
  295. package/dist/types/components/visual-query-builder/AwesomeQueryBuilder.d.ts +6 -0
  296. package/dist/types/components/visual-query-builder/GroupByRow.d.ts +9 -0
  297. package/dist/types/components/visual-query-builder/OrderByRow.d.ts +10 -0
  298. package/dist/types/components/visual-query-builder/Preview.d.ts +6 -0
  299. package/dist/types/components/visual-query-builder/SQLGroupByRow.d.ts +11 -0
  300. package/dist/types/components/visual-query-builder/SQLOrderByRow.d.ts +11 -0
  301. package/dist/types/components/visual-query-builder/SQLWhereRow.d.ts +12 -0
  302. package/dist/types/components/visual-query-builder/SelectColumn.d.ts +8 -0
  303. package/dist/types/components/visual-query-builder/SelectCustomFunctionParameters.d.ts +11 -0
  304. package/dist/types/components/visual-query-builder/SelectFunctionParameters.d.ts +11 -0
  305. package/dist/types/components/visual-query-builder/SelectRow.d.ts +10 -0
  306. package/dist/types/components/visual-query-builder/VisualEditor.d.ts +8 -0
  307. package/dist/types/components/visual-query-builder/WhereRow.d.ts +9 -0
  308. package/dist/types/components/visual-query-builder/index.d.ts +1 -0
  309. package/dist/types/constants.d.ts +12 -0
  310. package/dist/types/datasource/SqlDatasource.d.ts +38 -0
  311. package/dist/types/defaults.d.ts +3 -0
  312. package/dist/types/expressions.d.ts +51 -0
  313. package/dist/types/index.d.ts +21 -0
  314. package/dist/types/loadResources.d.ts +2 -0
  315. package/dist/types/types.d.ts +152 -0
  316. package/dist/types/utils/formatSQL.d.ts +1 -0
  317. package/dist/types/utils/getColumnsWithIndices.d.ts +3 -0
  318. package/dist/types/utils/logging.d.ts +2 -0
  319. package/dist/types/utils/migration.d.ts +3 -0
  320. package/dist/types/utils/sql.utils.d.ts +21 -0
  321. package/dist/types/utils/testHelpers.d.ts +2 -0
  322. package/dist/types/utils/useSqlChange.d.ts +10 -0
  323. package/package.json +80 -4
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var css = require('@emotion/css');
7
+ var reactUse = require('react-use');
8
+ var i18n = require('@grafana/i18n');
9
+ var runtime = require('@grafana/runtime');
10
+ var ui = require('@grafana/ui');
11
+ var formatSQL = require('../../utils/formatSQL.cjs');
12
+
13
+ "use strict";
14
+ function Preview({ rawSql, datasourceType }) {
15
+ const [_, copyToClipboard] = reactUse.useCopyToClipboard();
16
+ const styles = ui.useStyles2(getStyles);
17
+ const copyPreview = (rawSql2) => {
18
+ copyToClipboard(rawSql2);
19
+ runtime.reportInteraction("grafana_sql_preview_copied", {
20
+ datasource: datasourceType
21
+ });
22
+ };
23
+ const labelElement = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.labelWrapper, children: [
24
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.label, children: /* @__PURE__ */ jsxRuntime.jsx(i18n.Trans, { i18nKey: "grafana-sql.components.preview.label-element.preview", children: "Preview" }) }),
25
+ /* @__PURE__ */ jsxRuntime.jsx(
26
+ ui.IconButton,
27
+ {
28
+ tooltip: i18n.t("grafana-sql.components.preview.label-element.tooltip-copy-to-clipboard", "Copy to clipboard"),
29
+ onClick: () => copyPreview(rawSql),
30
+ name: "copy"
31
+ }
32
+ )
33
+ ] });
34
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.Field, { label: labelElement, className: styles.grow, children: /* @__PURE__ */ jsxRuntime.jsx(
35
+ ui.CodeEditor,
36
+ {
37
+ language: "sql",
38
+ height: 80,
39
+ value: formatSQL.formatSQL(rawSql),
40
+ monacoOptions: { scrollbar: { vertical: "hidden" }, scrollBeyondLastLine: false },
41
+ readOnly: true,
42
+ showMiniMap: false
43
+ }
44
+ ) });
45
+ }
46
+ function getStyles(theme) {
47
+ return {
48
+ grow: css.css({ flexGrow: 1 }),
49
+ label: css.css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),
50
+ labelWrapper: css.css({ display: "flex", justifyContent: "space-between", paddingBottom: theme.spacing(0.5) })
51
+ };
52
+ }
53
+
54
+ exports.Preview = Preview;
55
+ //# sourceMappingURL=Preview.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preview.cjs","sources":["../../../../src/components/visual-query-builder/Preview.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui';\n\nimport { formatSQL } from '../../utils/formatSQL';\n\ntype PreviewProps = {\n rawSql: string;\n datasourceType?: string;\n};\n\nexport function Preview({ rawSql, datasourceType }: PreviewProps) {\n // TODO: use zero index to give feedback about copy success\n const [_, copyToClipboard] = useCopyToClipboard();\n const styles = useStyles2(getStyles);\n\n const copyPreview = (rawSql: string) => {\n copyToClipboard(rawSql);\n reportInteraction('grafana_sql_preview_copied', {\n datasource: datasourceType,\n });\n };\n\n const labelElement = (\n <div className={styles.labelWrapper}>\n <span className={styles.label}>\n <Trans i18nKey=\"grafana-sql.components.preview.label-element.preview\">Preview</Trans>\n </span>\n <IconButton\n tooltip={t('grafana-sql.components.preview.label-element.tooltip-copy-to-clipboard', 'Copy to clipboard')}\n onClick={() => copyPreview(rawSql)}\n name=\"copy\"\n />\n </div>\n );\n\n return (\n <Field label={labelElement} className={styles.grow}>\n <CodeEditor\n language=\"sql\"\n height={80}\n value={formatSQL(rawSql)}\n monacoOptions={{ scrollbar: { vertical: 'hidden' }, scrollBeyondLastLine: false }}\n readOnly={true}\n showMiniMap={false}\n />\n </Field>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grow: css({ flexGrow: 1 }),\n label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),\n labelWrapper: css({ display: 'flex', justifyContent: 'space-between', paddingBottom: theme.spacing(0.5) }),\n };\n}\n"],"names":["useCopyToClipboard","useStyles2","rawSql","reportInteraction","jsxs","jsx","Trans","IconButton","t","Field","CodeEditor","formatSQL","css"],"mappings":";;;;;;;;;;;;;AAeO,SAAS,OAAA,CAAQ,EAAE,MAAA,EAAQ,cAAA,EAAe,EAAiB;AAEhE,EAAA,MAAM,CAAC,CAAA,EAAG,eAAe,CAAA,GAAIA,2BAAA,EAAmB;AAChD,EAAA,MAAM,MAAA,GAASC,cAAW,SAAS,CAAA;AAEnC,EAAA,MAAM,WAAA,GAAc,CAACC,OAAAA,KAAmB;AACtC,IAAA,eAAA,CAAgBA,OAAM,CAAA;AACtB,IAAAC,yBAAA,CAAkB,4BAAA,EAA8B;AAAA,MAC9C,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,YAAA,mBACJC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,YAAA,EACrB,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,WAAW,MAAA,CAAO,KAAA,EACtB,yCAACC,UAAA,EAAA,EAAM,OAAA,EAAQ,sDAAA,EAAuD,QAAA,EAAA,SAAA,EAAO,CAAA,EAC/E,CAAA;AAAA,oBACAD,cAAA;AAAA,MAACE,aAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAASC,MAAA,CAAE,wEAAA,EAA0E,mBAAmB,CAAA;AAAA,QACxG,OAAA,EAAS,MAAM,WAAA,CAAY,MAAM,CAAA;AAAA,QACjC,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAGF,EAAA,sCACGC,QAAA,EAAA,EAAM,KAAA,EAAO,YAAA,EAAc,SAAA,EAAW,OAAO,IAAA,EAC5C,QAAA,kBAAAJ,cAAA;AAAA,IAACK,aAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,EAAA;AAAA,MACR,KAAA,EAAOC,oBAAU,MAAM,CAAA;AAAA,MACvB,aAAA,EAAe,EAAE,SAAA,EAAW,EAAE,UAAU,QAAA,EAAS,EAAG,sBAAsB,KAAA,EAAM;AAAA,MAChF,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA;AAAA,GACf,EACF,CAAA;AAEJ;AAEA,SAAS,UAAU,KAAA,EAAsB;AACvC,EAAA,OAAO;AAAA,IACL,IAAA,EAAMC,OAAA,CAAI,EAAE,QAAA,EAAU,GAAG,CAAA;AAAA,IACzB,KAAA,EAAOA,QAAI,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,gBAAA,EAAkB,CAAA;AAAA,IAC1E,YAAA,EAAcA,OAAA,CAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,cAAA,EAAgB,eAAA,EAAiB,aAAA,EAAe,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAAA,GAC3G;AACF;;;;"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var getColumnsWithIndices = require('../../utils/getColumnsWithIndices.cjs');
7
+ var useSqlChange = require('../../utils/useSqlChange.cjs');
8
+ var GroupByRow = require('./GroupByRow.cjs');
9
+
10
+ "use strict";
11
+ function SQLGroupByRow({ fields, query, onQueryChange, db }) {
12
+ const { onSqlChange } = useSqlChange.useSqlChange({ query, onQueryChange, db });
13
+ let columnsWithIndices = getColumnsWithIndices.getColumnsWithIndices(query, fields);
14
+ return /* @__PURE__ */ jsxRuntime.jsx(GroupByRow.GroupByRow, { columns: columnsWithIndices, sql: query.sql, onSqlChange });
15
+ }
16
+
17
+ exports.SQLGroupByRow = SQLGroupByRow;
18
+ //# sourceMappingURL=SQLGroupByRow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLGroupByRow.cjs","sources":["../../../../src/components/visual-query-builder/SQLGroupByRow.tsx"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\n\nimport { QueryWithDefaults } from '../../defaults';\nimport { DB, SQLQuery } from '../../types';\nimport { getColumnsWithIndices } from '../../utils/getColumnsWithIndices';\nimport { useSqlChange } from '../../utils/useSqlChange';\n\nimport { GroupByRow } from './GroupByRow';\n\ninterface SQLGroupByRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLGroupByRow({ fields, query, onQueryChange, db }: SQLGroupByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = getColumnsWithIndices(query, fields);\n return <GroupByRow columns={columnsWithIndices} sql={query.sql!} onSqlChange={onSqlChange} />;\n}\n"],"names":["useSqlChange","getColumnsWithIndices","GroupByRow"],"mappings":";;;;;;;;;;AAgBO,SAAS,cAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,IAAG,EAAuB;AACtF,EAAA,MAAM,EAAE,aAAY,GAAIA,yBAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAI,CAAA;AACjE,EAAA,IAAI,kBAAA,GAAwCC,2CAAA,CAAsB,KAAA,EAAO,MAAM,CAAA;AAC/E,EAAA,sCAAQC,qBAAA,EAAA,EAAW,OAAA,EAAS,oBAAoB,GAAA,EAAK,KAAA,CAAM,KAAM,WAAA,EAA0B,CAAA;AAC7F;;;;"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var getColumnsWithIndices = require('../../utils/getColumnsWithIndices.cjs');
7
+ var useSqlChange = require('../../utils/useSqlChange.cjs');
8
+ var OrderByRow = require('./OrderByRow.cjs');
9
+
10
+ "use strict";
11
+ function SQLOrderByRow({ fields, query, onQueryChange, db }) {
12
+ const { onSqlChange } = useSqlChange.useSqlChange({ query, onQueryChange, db });
13
+ let columnsWithIndices = getColumnsWithIndices.getColumnsWithIndices(query, fields);
14
+ return /* @__PURE__ */ jsxRuntime.jsx(OrderByRow.OrderByRow, { sql: query.sql, onSqlChange, columns: columnsWithIndices });
15
+ }
16
+
17
+ exports.SQLOrderByRow = SQLOrderByRow;
18
+ //# sourceMappingURL=SQLOrderByRow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLOrderByRow.cjs","sources":["../../../../src/components/visual-query-builder/SQLOrderByRow.tsx"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\n\nimport { QueryWithDefaults } from '../../defaults';\nimport { DB, SQLQuery } from '../../types';\nimport { getColumnsWithIndices } from '../../utils/getColumnsWithIndices';\nimport { useSqlChange } from '../../utils/useSqlChange';\n\nimport { OrderByRow } from './OrderByRow';\n\ntype SQLOrderByRowProps = {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n};\n\nexport function SQLOrderByRow({ fields, query, onQueryChange, db }: SQLOrderByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = getColumnsWithIndices(query, fields);\n return <OrderByRow sql={query.sql!} onSqlChange={onSqlChange} columns={columnsWithIndices} />;\n}\n"],"names":["useSqlChange","getColumnsWithIndices","OrderByRow"],"mappings":";;;;;;;;;;AAgBO,SAAS,cAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,IAAG,EAAuB;AACtF,EAAA,MAAM,EAAE,aAAY,GAAIA,yBAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAI,CAAA;AACjE,EAAA,IAAI,kBAAA,GAAwCC,2CAAA,CAAsB,KAAA,EAAO,MAAM,CAAA;AAC/E,EAAA,sCAAQC,qBAAA,EAAA,EAAW,GAAA,EAAK,MAAM,GAAA,EAAM,WAAA,EAA0B,SAAS,kBAAA,EAAoB,CAAA;AAC7F;;;;"}
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var reactUse = require('react-use');
7
+ var runtime = require('@grafana/runtime');
8
+ var useSqlChange = require('../../utils/useSqlChange.cjs');
9
+ var WhereRow = require('./WhereRow.cjs');
10
+
11
+ "use strict";
12
+ function SQLWhereRow({ query, fields, onQueryChange, db }) {
13
+ const state = reactUse.useAsync(async () => {
14
+ return mapFieldsToTypes(fields);
15
+ }, [fields]);
16
+ const { onSqlChange } = useSqlChange.useSqlChange({ query, onQueryChange, db });
17
+ return /* @__PURE__ */ jsxRuntime.jsx(
18
+ WhereRow.WhereRow,
19
+ {
20
+ config: { fields: state.value || {} },
21
+ sql: query.sql,
22
+ onSqlChange: (val) => {
23
+ const templateVars = runtime.getTemplateSrv().getVariables();
24
+ removeQuotesForMultiVariables(val, templateVars);
25
+ onSqlChange(val);
26
+ }
27
+ },
28
+ JSON.stringify(state.value)
29
+ );
30
+ }
31
+ function mapFieldsToTypes(columns) {
32
+ const fields = {};
33
+ for (const col of columns) {
34
+ fields[col.value] = {
35
+ type: col.raqbFieldType || "text",
36
+ valueSources: ["value"],
37
+ mainWidgetProps: { customProps: { icon: col.icon } }
38
+ };
39
+ }
40
+ return fields;
41
+ }
42
+ function removeQuotesForMultiVariables(val, templateVars) {
43
+ var _a, _b;
44
+ const multiVariableInWhereString = (tv) => {
45
+ var _a2, _b2;
46
+ return "multi" in tv && tv.multi && (((_a2 = val.whereString) == null ? void 0 : _a2.includes(`\${${tv.name}}`)) || ((_b2 = val.whereString) == null ? void 0 : _b2.includes(`$${tv.name}`)));
47
+ };
48
+ if (templateVars.some((tv) => multiVariableInWhereString(tv))) {
49
+ val.whereString = (_a = val.whereString) == null ? void 0 : _a.replaceAll("')", ")");
50
+ val.whereString = (_b = val.whereString) == null ? void 0 : _b.replaceAll("('", "(");
51
+ }
52
+ }
53
+
54
+ exports.SQLWhereRow = SQLWhereRow;
55
+ exports.removeQuotesForMultiVariables = removeQuotesForMultiVariables;
56
+ //# sourceMappingURL=SQLWhereRow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLWhereRow.cjs","sources":["../../../../src/components/visual-query-builder/SQLWhereRow.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { SelectableValue, TypedVariableModel } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\n\nimport { QueryWithDefaults } from '../../defaults';\nimport { DB, SQLExpression, SQLQuery, SQLSelectableValue } from '../../types';\nimport { useSqlChange } from '../../utils/useSqlChange';\n\nimport { Config } from './AwesomeQueryBuilder';\nimport { WhereRow } from './WhereRow';\n\ninterface WhereRowProps {\n query: QueryWithDefaults;\n fields: SelectableValue[];\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLWhereRow({ query, fields, onQueryChange, db }: WhereRowProps) {\n const state = useAsync(async () => {\n return mapFieldsToTypes(fields);\n }, [fields]);\n\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return (\n <WhereRow\n // TODO: fix key that's used to force clean render or SQLWhereRow - otherwise it doesn't render operators correctly\n key={JSON.stringify(state.value)}\n config={{ fields: state.value || {} }}\n sql={query.sql!}\n onSqlChange={(val: SQLExpression) => {\n const templateVars = getTemplateSrv().getVariables();\n\n removeQuotesForMultiVariables(val, templateVars);\n\n onSqlChange(val);\n }}\n />\n );\n}\n\n// needed for awesome query builder\nfunction mapFieldsToTypes(columns: SQLSelectableValue[]) {\n const fields: Config['fields'] = {};\n for (const col of columns) {\n fields[col.value] = {\n type: col.raqbFieldType || 'text',\n valueSources: ['value'],\n mainWidgetProps: { customProps: { icon: col.icon } },\n };\n }\n return fields;\n}\n\nexport function removeQuotesForMultiVariables(val: SQLExpression, templateVars: TypedVariableModel[]) {\n const multiVariableInWhereString = (tv: TypedVariableModel) =>\n 'multi' in tv &&\n tv.multi &&\n (val.whereString?.includes(`\\${${tv.name}}`) || val.whereString?.includes(`$${tv.name}`));\n\n if (templateVars.some((tv) => multiVariableInWhereString(tv))) {\n val.whereString = val.whereString?.replaceAll(\"')\", ')');\n val.whereString = val.whereString?.replaceAll(\"('\", '(');\n }\n}\n"],"names":["useAsync","useSqlChange","jsx","WhereRow","getTemplateSrv","_a","_b"],"mappings":";;;;;;;;;;;AAmBO,SAAS,YAAY,EAAE,KAAA,EAAO,MAAA,EAAQ,aAAA,EAAe,IAAG,EAAkB;AAC/E,EAAA,MAAM,KAAA,GAAQA,kBAAS,YAAY;AACjC,IAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,EAAE,aAAY,GAAIC,yBAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAI,CAAA;AAEjE,EAAA,uBACEC,cAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MAGC,QAAQ,EAAE,MAAA,EAAQ,KAAA,CAAM,KAAA,IAAS,EAAC,EAAE;AAAA,MACpC,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,WAAA,EAAa,CAAC,GAAA,KAAuB;AACnC,QAAA,MAAM,YAAA,GAAeC,sBAAA,EAAe,CAAE,YAAA,EAAa;AAEnD,QAAA,6BAAA,CAA8B,KAAK,YAAY,CAAA;AAE/C,QAAA,WAAA,CAAY,GAAG,CAAA;AAAA,MACjB;AAAA,KAAA;AAAA,IATK,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAK;AAAA,GAUjC;AAEJ;AAGA,SAAS,iBAAiB,OAAA,EAA+B;AACvD,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,GAAI;AAAA,MAClB,IAAA,EAAM,IAAI,aAAA,IAAiB,MAAA;AAAA,MAC3B,YAAA,EAAc,CAAC,OAAO,CAAA;AAAA,MACtB,iBAAiB,EAAE,WAAA,EAAa,EAAE,IAAA,EAAM,GAAA,CAAI,MAAK;AAAE,KACrD;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,6BAAA,CAA8B,KAAoB,YAAA,EAAoC;AAxDtG,EAAA,IAAA,EAAA,EAAA,EAAA;AAyDE,EAAA,MAAM,0BAAA,GAA6B,CAAC,EAAA,KAAwB;AAzD9D,IAAA,IAAAC,GAAAA,EAAAC,GAAAA;AA0DI,IAAA,OAAA,OAAA,IAAW,EAAA,IACX,GAAG,KAAA,KAAA,CAAA,CACFD,GAAAA,GAAA,IAAI,WAAA,KAAJ,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAiB,QAAA,CAAS,CAAA,GAAA,EAAM,GAAG,IAAI,CAAA,CAAA,CAAA,CAAA,MAAA,CAAQC,MAAA,GAAA,CAAI,WAAA,KAAJ,gBAAAA,GAAAA,CAAiB,QAAA,CAAS,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,EAAA,CAAA;AAEvF,EAAA,IAAI,aAAa,IAAA,CAAK,CAAC,OAAO,0BAAA,CAA2B,EAAE,CAAC,CAAA,EAAG;AAC7D,IAAA,GAAA,CAAI,WAAA,GAAA,CAAc,EAAA,GAAA,GAAA,CAAI,WAAA,KAAJ,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,WAAW,IAAA,EAAM,GAAA,CAAA;AACpD,IAAA,GAAA,CAAI,WAAA,GAAA,CAAc,EAAA,GAAA,GAAA,CAAI,WAAA,KAAJ,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,WAAW,IAAA,EAAM,GAAA,CAAA;AAAA,EACtD;AACF;;;;;"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var e2eSelectors = require('@grafana/e2e-selectors');
8
+ var i18n = require('@grafana/i18n');
9
+ var pluginUi = require('@grafana/plugin-ui');
10
+ var ui = require('@grafana/ui');
11
+
12
+ "use strict";
13
+ function SelectColumn({ columns, onParameterChange, value }) {
14
+ const selectInputId = react.useId();
15
+ return /* @__PURE__ */ jsxRuntime.jsx(pluginUi.EditorField, { label: i18n.t("grafana-sql.components.select-column.label-column", "Column"), width: 25, children: /* @__PURE__ */ jsxRuntime.jsx(
16
+ ui.Select,
17
+ {
18
+ value,
19
+ "data-testid": e2eSelectors.selectors.components.SQLQueryEditor.selectColumn,
20
+ inputId: selectInputId,
21
+ menuShouldPortal: true,
22
+ options: [{ label: "*", value: "*" }, ...columns],
23
+ allowCustomValue: true,
24
+ onChange: (s) => onParameterChange(s.value)
25
+ }
26
+ ) });
27
+ }
28
+
29
+ exports.SelectColumn = SelectColumn;
30
+ //# sourceMappingURL=SelectColumn.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectColumn.cjs","sources":["../../../../src/components/visual-query-builder/SelectColumn.tsx"],"sourcesContent":["import { useId } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { EditorField } from '@grafana/plugin-ui';\nimport { Select } from '@grafana/ui';\n\ninterface Props {\n columns: Array<SelectableValue<string>>;\n onParameterChange: (value?: string) => void;\n value: SelectableValue<string> | null;\n}\n\nexport function SelectColumn({ columns, onParameterChange, value }: Props) {\n const selectInputId = useId();\n\n return (\n <EditorField label={t('grafana-sql.components.select-column.label-column', 'Column')} width={25}>\n <Select\n value={value}\n data-testid={selectors.components.SQLQueryEditor.selectColumn}\n inputId={selectInputId}\n menuShouldPortal\n options={[{ label: '*', value: '*' }, ...columns]}\n allowCustomValue\n onChange={(s) => onParameterChange(s.value)}\n />\n </EditorField>\n );\n}\n"],"names":["useId","jsx","EditorField","t","Select","selectors"],"mappings":";;;;;;;;;;;;AAcO,SAAS,YAAA,CAAa,EAAE,OAAA,EAAS,iBAAA,EAAmB,OAAM,EAAU;AACzE,EAAA,MAAM,gBAAgBA,WAAA,EAAM;AAE5B,EAAA,uBACEC,cAAA,CAACC,wBAAY,KAAA,EAAOC,MAAA,CAAE,qDAAqD,QAAQ,CAAA,EAAG,OAAO,EAAA,EAC3F,QAAA,kBAAAF,cAAA;AAAA,IAACG,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,aAAA,EAAaC,sBAAA,CAAU,UAAA,CAAW,cAAA,CAAe,YAAA;AAAA,MACjD,OAAA,EAAS,aAAA;AAAA,MACT,gBAAA,EAAgB,IAAA;AAAA,MAChB,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,KAAK,KAAA,EAAO,GAAA,EAAI,EAAG,GAAG,OAAO,CAAA;AAAA,MAChD,gBAAA,EAAgB,IAAA;AAAA,MAChB,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,EAAE,KAAK;AAAA;AAAA,GAC5C,EACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,135 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var css = require('@emotion/css');
7
+ var react = require('react');
8
+ var e2eSelectors = require('@grafana/e2e-selectors');
9
+ var i18n = require('@grafana/i18n');
10
+ var ui = require('@grafana/ui');
11
+ var expressions = require('../../expressions.cjs');
12
+ var sql_utils = require('../../utils/sql.utils.cjs');
13
+ var SelectColumn = require('./SelectColumn.cjs');
14
+
15
+ "use strict";
16
+ function SelectCustomFunctionParameters({
17
+ columns,
18
+ query,
19
+ onSqlChange,
20
+ onParameterChange,
21
+ currentColumnIndex
22
+ }) {
23
+ var _a, _b, _c;
24
+ const styles = ui.useStyles2(getStyles);
25
+ const macroOrFunction = (_b = (_a = query.sql) == null ? void 0 : _a.columns) == null ? void 0 : _b[currentColumnIndex];
26
+ const addParameter = react.useCallback(
27
+ (index) => {
28
+ var _a2, _b2, _c2, _d;
29
+ const item = (_b2 = (_a2 = query.sql) == null ? void 0 : _a2.columns) == null ? void 0 : _b2[index];
30
+ if (!item) {
31
+ return;
32
+ }
33
+ item.parameters = item.parameters ? [...item.parameters, { type: expressions.QueryEditorExpressionType.FunctionParameter, name: "" }] : [];
34
+ const newSql = {
35
+ ...query.sql,
36
+ columns: (_d = (_c2 = query.sql) == null ? void 0 : _c2.columns) == null ? void 0 : _d.map((c, i) => i === index ? item : c)
37
+ };
38
+ onSqlChange(newSql);
39
+ },
40
+ [onSqlChange, query.sql]
41
+ );
42
+ const removeParameter = react.useCallback(
43
+ (columnIndex, index) => {
44
+ var _a2, _b2, _c2, _d, _e;
45
+ const item = (_b2 = (_a2 = query.sql) == null ? void 0 : _a2.columns) == null ? void 0 : _b2[columnIndex];
46
+ if (!(item == null ? void 0 : item.parameters)) {
47
+ return;
48
+ }
49
+ item.parameters = (_c2 = item.parameters) == null ? void 0 : _c2.filter((_, i) => i !== index);
50
+ const newSql = {
51
+ ...query.sql,
52
+ columns: (_e = (_d = query.sql) == null ? void 0 : _d.columns) == null ? void 0 : _e.map((c, i) => i === columnIndex ? item : c)
53
+ };
54
+ onSqlChange(newSql);
55
+ },
56
+ [onSqlChange, query.sql]
57
+ );
58
+ function renderParameters(columnIndex) {
59
+ if (!(macroOrFunction == null ? void 0 : macroOrFunction.parameters) || macroOrFunction.parameters.length <= 1) {
60
+ return null;
61
+ }
62
+ const paramComponents = macroOrFunction.parameters.map((param, index) => {
63
+ if (index === 0) {
64
+ return null;
65
+ }
66
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { gap: 2, children: [
67
+ /* @__PURE__ */ jsxRuntime.jsx(ui.InlineLabel, { className: styles.label, children: "," }),
68
+ /* @__PURE__ */ jsxRuntime.jsx(
69
+ ui.Input,
70
+ {
71
+ onChange: (e) => onParameterChange(index)(e.currentTarget.value),
72
+ value: param.name,
73
+ "aria-label": i18n.t(
74
+ "grafana-sql.components.select-custom-function-parameters.aria-label-parameter",
75
+ "Parameter {{index}} for column {{columnIndex}}",
76
+ { index, columnIndex }
77
+ ),
78
+ "data-testid": e2eSelectors.selectors.components.SQLQueryEditor.selectInputParameter,
79
+ addonAfter: /* @__PURE__ */ jsxRuntime.jsx(
80
+ ui.Button,
81
+ {
82
+ "aria-label": i18n.t(
83
+ "grafana-sql.components.select-custom-function-parameters.render-parameters.params.title-remove-parameter",
84
+ "Remove parameter"
85
+ ),
86
+ type: "button",
87
+ icon: "times",
88
+ variant: "secondary",
89
+ size: "md",
90
+ onClick: () => removeParameter(columnIndex, index)
91
+ }
92
+ )
93
+ }
94
+ )
95
+ ] }, index);
96
+ });
97
+ return paramComponents;
98
+ }
99
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
100
+ /* @__PURE__ */ jsxRuntime.jsx(ui.InlineLabel, { className: styles.label, children: "(" }),
101
+ /* @__PURE__ */ jsxRuntime.jsx(
102
+ SelectColumn.SelectColumn,
103
+ {
104
+ columns,
105
+ onParameterChange: (s) => onParameterChange(0)(s),
106
+ value: sql_utils.getColumnValue((_c = macroOrFunction == null ? void 0 : macroOrFunction.parameters) == null ? void 0 : _c[0])
107
+ }
108
+ ),
109
+ renderParameters(currentColumnIndex),
110
+ /* @__PURE__ */ jsxRuntime.jsx(
111
+ ui.Button,
112
+ {
113
+ type: "button",
114
+ onClick: () => addParameter(currentColumnIndex),
115
+ variant: "secondary",
116
+ size: "md",
117
+ icon: "plus",
118
+ "aria-label": i18n.t("grafana-sql.components.select-custom-function-parameters.title-add-parameter", "Add parameter")
119
+ }
120
+ ),
121
+ /* @__PURE__ */ jsxRuntime.jsx(ui.InlineLabel, { className: styles.label, children: ")" })
122
+ ] });
123
+ }
124
+ const getStyles = () => {
125
+ return {
126
+ label: css.css({
127
+ padding: 0,
128
+ margin: 0,
129
+ width: "unset"
130
+ })
131
+ };
132
+ };
133
+
134
+ exports.SelectCustomFunctionParameters = SelectCustomFunctionParameters;
135
+ //# sourceMappingURL=SelectCustomFunctionParameters.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectCustomFunctionParameters.cjs","sources":["../../../../src/components/visual-query-builder/SelectCustomFunctionParameters.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useCallback } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Button, InlineLabel, Input, Stack, useStyles2 } from '@grafana/ui';\n\nimport { QueryEditorExpressionType } from '../../expressions';\nimport { SQLExpression, SQLQuery } from '../../types';\nimport { getColumnValue } from '../../utils/sql.utils';\n\nimport { SelectColumn } from './SelectColumn';\n\ninterface Props {\n columns: Array<SelectableValue<string>>;\n query: SQLQuery;\n onSqlChange: (sql: SQLExpression) => void;\n onParameterChange: (index: number) => (value?: string) => void;\n currentColumnIndex: number;\n}\n\nexport function SelectCustomFunctionParameters({\n columns,\n query,\n onSqlChange,\n onParameterChange,\n currentColumnIndex,\n}: Props) {\n const styles = useStyles2(getStyles);\n const macroOrFunction = query.sql?.columns?.[currentColumnIndex];\n\n const addParameter = useCallback(\n (index: number) => {\n const item = query.sql?.columns?.[index];\n if (!item) {\n return;\n }\n\n item.parameters = item.parameters\n ? [...item.parameters, { type: QueryEditorExpressionType.FunctionParameter, name: '' }]\n : [];\n\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === index ? item : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, query.sql]\n );\n\n const removeParameter = useCallback(\n (columnIndex: number, index: number) => {\n const item = query.sql?.columns?.[columnIndex];\n if (!item?.parameters) {\n return;\n }\n item.parameters = item.parameters?.filter((_, i) => i !== index);\n\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === columnIndex ? item : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, query.sql]\n );\n\n function renderParameters(columnIndex: number) {\n if (!macroOrFunction?.parameters || macroOrFunction.parameters.length <= 1) {\n return null;\n }\n\n const paramComponents = macroOrFunction.parameters.map((param, index) => {\n // Skip the first parameter as it is the column name\n if (index === 0) {\n return null;\n }\n\n return (\n <Stack key={index} gap={2}>\n <InlineLabel className={styles.label}>,</InlineLabel>\n <Input\n onChange={(e) => onParameterChange(index)(e.currentTarget.value)}\n value={param.name}\n aria-label={t(\n 'grafana-sql.components.select-custom-function-parameters.aria-label-parameter',\n 'Parameter {{index}} for column {{columnIndex}}',\n { index, columnIndex }\n )}\n data-testid={selectors.components.SQLQueryEditor.selectInputParameter}\n addonAfter={\n <Button\n aria-label={t(\n 'grafana-sql.components.select-custom-function-parameters.render-parameters.params.title-remove-parameter',\n 'Remove parameter'\n )}\n type=\"button\"\n icon=\"times\"\n variant=\"secondary\"\n size=\"md\"\n onClick={() => removeParameter(columnIndex, index)}\n />\n }\n />\n </Stack>\n );\n });\n return paramComponents;\n }\n\n return (\n <>\n <InlineLabel className={styles.label}>(</InlineLabel>\n <SelectColumn\n columns={columns}\n onParameterChange={(s) => onParameterChange(0)(s)}\n value={getColumnValue(macroOrFunction?.parameters?.[0])}\n />\n {renderParameters(currentColumnIndex)}\n <Button\n type=\"button\"\n onClick={() => addParameter(currentColumnIndex)}\n variant=\"secondary\"\n size=\"md\"\n icon=\"plus\"\n aria-label={t('grafana-sql.components.select-custom-function-parameters.title-add-parameter', 'Add parameter')}\n />\n <InlineLabel className={styles.label}>)</InlineLabel>\n </>\n );\n}\n\nconst getStyles = () => {\n return {\n label: css({\n padding: 0,\n margin: 0,\n width: 'unset',\n }),\n };\n};\n"],"names":["useStyles2","useCallback","_a","_b","_c","QueryEditorExpressionType","jsxs","Stack","jsx","InlineLabel","Input","t","selectors","Button","Fragment","SelectColumn","getColumnValue","css"],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var css = require('@emotion/css');
7
+ var react = require('react');
8
+ var e2eSelectors = require('@grafana/e2e-selectors');
9
+ var pluginUi = require('@grafana/plugin-ui');
10
+ var ui = require('@grafana/ui');
11
+ var expressions = require('../../expressions.cjs');
12
+ var sql_utils = require('../../utils/sql.utils.cjs');
13
+ var SelectColumn = require('./SelectColumn.cjs');
14
+ var SelectCustomFunctionParameters = require('./SelectCustomFunctionParameters.cjs');
15
+
16
+ "use strict";
17
+ function SelectFunctionParameters({ query, onSqlChange, currentColumnIndex, db, columns }) {
18
+ var _a, _b, _c;
19
+ const selectInputId = react.useId();
20
+ const macroOrFunction = (_b = (_a = query.sql) == null ? void 0 : _a.columns) == null ? void 0 : _b[currentColumnIndex];
21
+ const styles = ui.useStyles2(getStyles);
22
+ const func = db.functions().find((f) => f.name === (macroOrFunction == null ? void 0 : macroOrFunction.name));
23
+ const [fieldsFromFunction, setFieldsFromFunction] = react.useState([]);
24
+ react.useEffect(() => {
25
+ const getFieldsFromFunction = async () => {
26
+ var _a2;
27
+ if (!func) {
28
+ return;
29
+ }
30
+ const options = [];
31
+ for (const param of (_a2 = func.parameters) != null ? _a2 : []) {
32
+ if (param.options) {
33
+ options.push(await param.options(query));
34
+ } else {
35
+ options.push([]);
36
+ }
37
+ }
38
+ setFieldsFromFunction(options);
39
+ };
40
+ getFieldsFromFunction();
41
+ }, [macroOrFunction == null ? void 0 : macroOrFunction.name]);
42
+ const onParameterChange = react.useCallback(
43
+ (index, keepIndex) => (s) => {
44
+ var _a2, _b2, _c2, _d, _e;
45
+ const item = (_b2 = (_a2 = query.sql) == null ? void 0 : _a2.columns) == null ? void 0 : _b2[currentColumnIndex];
46
+ if (!item) {
47
+ return;
48
+ }
49
+ if (!item.parameters) {
50
+ item.parameters = [];
51
+ }
52
+ if (item.parameters[index] === void 0) {
53
+ item.parameters[index] = { type: expressions.QueryEditorExpressionType.FunctionParameter, name: s };
54
+ } else if (s == null && keepIndex) {
55
+ item.parameters = item.parameters.map((p, i) => i === index ? { ...p, name: "" } : p);
56
+ if (((_c2 = item.parameters[item.parameters.length - 1]) == null ? void 0 : _c2.name) === "") {
57
+ item.parameters = item.parameters.filter((p) => p.name !== "");
58
+ }
59
+ } else if (s == null) {
60
+ item.parameters = item.parameters.filter((_, i) => i !== index);
61
+ } else {
62
+ item.parameters = item.parameters.map((p, i) => i === index ? { ...p, name: s } : p);
63
+ }
64
+ const newSql = {
65
+ ...query.sql,
66
+ columns: (_e = (_d = query.sql) == null ? void 0 : _d.columns) == null ? void 0 : _e.map((c, i) => i === currentColumnIndex ? item : c)
67
+ };
68
+ onSqlChange(newSql);
69
+ },
70
+ [currentColumnIndex, onSqlChange, query.sql]
71
+ );
72
+ function renderParametersWithFunctions() {
73
+ if (!(func == null ? void 0 : func.parameters)) {
74
+ return null;
75
+ }
76
+ return func == null ? void 0 : func.parameters.map((funcParam, index) => {
77
+ var _a2;
78
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { alignItems: "flex-end", gap: 2, children: [
79
+ /* @__PURE__ */ jsxRuntime.jsx(pluginUi.EditorField, { label: funcParam.name, width: 25, optional: !funcParam.required, children: /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: funcParam.options ? /* @__PURE__ */ jsxRuntime.jsx(
80
+ ui.Select,
81
+ {
82
+ value: sql_utils.getColumnValue(macroOrFunction == null ? void 0 : macroOrFunction.parameters[index]),
83
+ options: fieldsFromFunction == null ? void 0 : fieldsFromFunction[index],
84
+ "data-testid": e2eSelectors.selectors.components.SQLQueryEditor.selectFunctionParameter(funcParam.name),
85
+ inputId: selectInputId,
86
+ menuShouldPortal: true,
87
+ allowCustomValue: true,
88
+ isClearable: true,
89
+ onChange: (s) => onParameterChange(index, true)(s == null ? void 0 : s.value)
90
+ }
91
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
92
+ ui.Input,
93
+ {
94
+ onChange: (e) => onParameterChange(index, true)(e.currentTarget.value),
95
+ value: (_a2 = macroOrFunction == null ? void 0 : macroOrFunction.parameters[index]) == null ? void 0 : _a2.name,
96
+ "data-testid": e2eSelectors.selectors.components.SQLQueryEditor.selectInputParameter
97
+ }
98
+ ) }) }),
99
+ func.parameters.length !== index + 1 && /* @__PURE__ */ jsxRuntime.jsx(ui.InlineLabel, { className: styles.label, children: "," })
100
+ ] }, index);
101
+ });
102
+ }
103
+ if ((macroOrFunction == null ? void 0 : macroOrFunction.name) === void 0) {
104
+ return /* @__PURE__ */ jsxRuntime.jsx(
105
+ SelectColumn.SelectColumn,
106
+ {
107
+ columns,
108
+ onParameterChange: (s) => onParameterChange(0)(s),
109
+ value: sql_utils.getColumnValue((_c = macroOrFunction == null ? void 0 : macroOrFunction.parameters) == null ? void 0 : _c[0])
110
+ }
111
+ );
112
+ }
113
+ if (!func) {
114
+ return /* @__PURE__ */ jsxRuntime.jsx(
115
+ SelectCustomFunctionParameters.SelectCustomFunctionParameters,
116
+ {
117
+ query,
118
+ onSqlChange,
119
+ currentColumnIndex,
120
+ columns,
121
+ onParameterChange
122
+ }
123
+ );
124
+ }
125
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
126
+ /* @__PURE__ */ jsxRuntime.jsx(ui.InlineLabel, { className: styles.label, children: "(" }),
127
+ renderParametersWithFunctions(),
128
+ /* @__PURE__ */ jsxRuntime.jsx(ui.InlineLabel, { className: styles.label, children: ")" })
129
+ ] });
130
+ }
131
+ const getStyles = () => {
132
+ return {
133
+ label: css.css({
134
+ padding: 0,
135
+ margin: 0,
136
+ width: "unset"
137
+ })
138
+ };
139
+ };
140
+
141
+ exports.SelectFunctionParameters = SelectFunctionParameters;
142
+ //# sourceMappingURL=SelectFunctionParameters.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectFunctionParameters.cjs","sources":["../../../../src/components/visual-query-builder/SelectFunctionParameters.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useCallback, useEffect, useId, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { EditorField } from '@grafana/plugin-ui';\nimport { InlineLabel, Input, Select, Stack, useStyles2 } from '@grafana/ui';\n\nimport { QueryEditorExpressionType } from '../../expressions';\nimport { DB, SQLExpression, SQLQuery } from '../../types';\nimport { getColumnValue } from '../../utils/sql.utils';\n\nimport { SelectColumn } from './SelectColumn';\nimport { SelectCustomFunctionParameters } from './SelectCustomFunctionParameters';\n\ninterface Props {\n query: SQLQuery;\n onSqlChange: (sql: SQLExpression) => void;\n currentColumnIndex: number;\n db: DB;\n columns: Array<SelectableValue<string>>;\n}\n\nexport function SelectFunctionParameters({ query, onSqlChange, currentColumnIndex, db, columns }: Props) {\n const selectInputId = useId();\n const macroOrFunction = query.sql?.columns?.[currentColumnIndex];\n const styles = useStyles2(getStyles);\n const func = db.functions().find((f) => f.name === macroOrFunction?.name);\n\n const [fieldsFromFunction, setFieldsFromFunction] = useState<Array<Array<SelectableValue<string>>>>([]);\n\n useEffect(() => {\n const getFieldsFromFunction = async () => {\n if (!func) {\n return;\n }\n const options: Array<Array<SelectableValue<string>>> = [];\n for (const param of func.parameters ?? []) {\n if (param.options) {\n options.push(await param.options(query));\n } else {\n options.push([]);\n }\n }\n setFieldsFromFunction(options);\n };\n getFieldsFromFunction();\n\n // It is fine to ignore the warning here and omit the query object\n // only table property is used in the query object and whenever table changes the component is re-rendered\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [macroOrFunction?.name]);\n\n const onParameterChange = useCallback(\n (index: number, keepIndex?: boolean) => (s: string | undefined) => {\n const item = query.sql?.columns?.[currentColumnIndex];\n if (!item) {\n return;\n }\n if (!item.parameters) {\n item.parameters = [];\n }\n if (item.parameters[index] === undefined) {\n item.parameters[index] = { type: QueryEditorExpressionType.FunctionParameter, name: s };\n } else if (s == null && keepIndex) {\n // Remove value from index\n item.parameters = item.parameters.map((p, i) => (i === index ? { ...p, name: '' } : p));\n // Remove the last empty parameter\n if (item.parameters[item.parameters.length - 1]?.name === '') {\n item.parameters = item.parameters.filter((p) => p.name !== '');\n }\n } else if (s == null) {\n item.parameters = item.parameters.filter((_, i) => i !== index);\n } else {\n item.parameters = item.parameters.map((p, i) => (i === index ? { ...p, name: s } : p));\n }\n\n const newSql: SQLExpression = {\n ...query.sql,\n columns: query.sql?.columns?.map((c, i) => (i === currentColumnIndex ? item : c)),\n };\n\n onSqlChange(newSql);\n },\n [currentColumnIndex, onSqlChange, query.sql]\n );\n\n function renderParametersWithFunctions() {\n if (!func?.parameters) {\n return null;\n }\n\n return func?.parameters.map((funcParam, index) => {\n return (\n <Stack key={index} alignItems=\"flex-end\" gap={2}>\n <EditorField label={funcParam.name} width={25} optional={!funcParam.required}>\n <>\n {funcParam.options ? (\n <Select\n value={getColumnValue(macroOrFunction?.parameters![index])}\n options={fieldsFromFunction?.[index]}\n data-testid={selectors.components.SQLQueryEditor.selectFunctionParameter(funcParam.name)}\n inputId={selectInputId}\n menuShouldPortal\n allowCustomValue\n isClearable\n onChange={(s) => onParameterChange(index, true)(s?.value)}\n />\n ) : (\n <Input\n onChange={(e) => onParameterChange(index, true)(e.currentTarget.value)}\n value={macroOrFunction?.parameters![index]?.name}\n data-testid={selectors.components.SQLQueryEditor.selectInputParameter}\n />\n )}\n </>\n </EditorField>\n {func.parameters!.length !== index + 1 && <InlineLabel className={styles.label}>,</InlineLabel>}\n </Stack>\n );\n });\n }\n\n // This means that no function is selected, we render a column selector\n if (macroOrFunction?.name === undefined) {\n return (\n <SelectColumn\n columns={columns}\n onParameterChange={(s) => onParameterChange(0)(s)}\n value={getColumnValue(macroOrFunction?.parameters?.[0])}\n />\n );\n }\n\n // If the function is not found, that means that it might be a custom value\n // we let the user add any number of parameters\n if (!func) {\n return (\n <SelectCustomFunctionParameters\n query={query}\n onSqlChange={onSqlChange}\n currentColumnIndex={currentColumnIndex}\n columns={columns}\n onParameterChange={onParameterChange}\n />\n );\n }\n\n // Else we render the function parameters based on the provided settings\n return (\n <>\n <InlineLabel className={styles.label}>(</InlineLabel>\n {renderParametersWithFunctions()}\n <InlineLabel className={styles.label}>)</InlineLabel>\n </>\n );\n}\n\nconst getStyles = () => {\n return {\n label: css({\n padding: 0,\n margin: 0,\n width: 'unset',\n }),\n };\n};\n"],"names":["useId","useStyles2","useState","useEffect","_a","useCallback","_b","_c","QueryEditorExpressionType","jsxs","Stack","jsx","EditorField","Fragment","Select","getColumnValue","selectors","Input","InlineLabel","SelectColumn","SelectCustomFunctionParameters","css"],"mappings":"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"}