@quillsql/admin 1.5.2 → 1.6.1

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 (219) hide show
  1. package/dist/cjs/Admin.d.ts +19 -72
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +215 -996
  4. package/dist/cjs/AdminProvider.d.ts +2 -12
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +27 -32
  7. package/dist/cjs/api/ConnectionClient.d.ts +19 -0
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +108 -13
  10. package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
  11. package/dist/cjs/components/DashboardSelectPopover.js +20 -3
  12. package/dist/cjs/components/DropDownMenu.js +1 -1
  13. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  14. package/dist/cjs/components/DropDownMenuWithLabel.js +18 -87
  15. package/dist/cjs/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  16. package/dist/cjs/components/EmptyDashboardComponent/index.js +11 -9
  17. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  18. package/dist/cjs/components/OrgSelect.js +10 -20
  19. package/dist/cjs/components/QuillSelect.d.ts +3 -0
  20. package/dist/cjs/components/QuillSelect.d.ts.map +1 -0
  21. package/dist/cjs/components/QuillSelect.js +137 -0
  22. package/dist/cjs/components/SegmentedControl.d.ts +9 -0
  23. package/dist/cjs/components/SegmentedControl.d.ts.map +1 -0
  24. package/dist/cjs/components/SegmentedControl.js +60 -0
  25. package/dist/cjs/components/SqlTextEditor.d.ts +9 -1
  26. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
  27. package/dist/cjs/components/SqlTextEditor.js +60 -12
  28. package/dist/cjs/components/UiComponents.d.ts +18 -30
  29. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  30. package/dist/cjs/components/UiComponents.js +48 -84
  31. package/dist/cjs/constants/dataTypes.d.ts +2 -0
  32. package/dist/cjs/constants/dataTypes.d.ts.map +1 -0
  33. package/dist/cjs/constants/dataTypes.js +21 -0
  34. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  35. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +9 -17
  36. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts +2 -1
  37. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  38. package/dist/cjs/forms/client_onboard/ConnectSchema.js +143 -68
  39. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  40. package/dist/cjs/forms/client_onboard/CreateSqlViews.js +57 -15
  41. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts +11 -5
  42. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  43. package/dist/cjs/forms/sql_views/CreateEditSqlView.js +107 -53
  44. package/dist/cjs/hooks/useOnClickOutside.d.ts +3 -0
  45. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -0
  46. package/dist/cjs/hooks/useOnClickOutside.js +20 -0
  47. package/dist/cjs/modals/EditFiltersModal.d.ts +17 -0
  48. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -0
  49. package/dist/cjs/modals/EditFiltersModal.js +355 -0
  50. package/dist/cjs/modals/NewDashboardModal.d.ts +1 -3
  51. package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
  52. package/dist/cjs/modals/NewDashboardModal.js +64 -47
  53. package/dist/cjs/modals/PromoteDashModal.d.ts.map +1 -1
  54. package/dist/cjs/modals/PromoteDashModal.js +11 -4
  55. package/dist/cjs/modals/PromoteViewModal.d.ts +2 -1
  56. package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
  57. package/dist/cjs/modals/PromoteViewModal.js +46 -36
  58. package/dist/cjs/modals/ReorderDashboardModal.d.ts.map +1 -1
  59. package/dist/cjs/modals/ReorderDashboardModal.js +42 -45
  60. package/dist/cjs/modals/index.d.ts +0 -1
  61. package/dist/cjs/modals/index.d.ts.map +1 -1
  62. package/dist/cjs/modals/index.js +1 -3
  63. package/dist/cjs/primitives/ButtonPrimitive.d.ts +3 -1
  64. package/dist/cjs/primitives/ButtonPrimitive.d.ts.map +1 -1
  65. package/dist/cjs/primitives/ButtonPrimitive.js +5 -3
  66. package/dist/cjs/primitives/TextInputPrimitive.d.ts +1 -0
  67. package/dist/cjs/primitives/TextInputPrimitive.d.ts.map +1 -1
  68. package/dist/cjs/primitives/TextInputPrimitive.js +35 -20
  69. package/dist/cjs/primitives/TogglePrimitive.js +5 -5
  70. package/dist/cjs/public_components/CreateEnvironment.d.ts +2 -1
  71. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  72. package/dist/cjs/public_components/CreateEnvironment.js +5 -2
  73. package/dist/cjs/public_components/DashboardBuilder.d.ts.map +1 -1
  74. package/dist/cjs/public_components/DashboardBuilder.js +71 -125
  75. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  76. package/dist/cjs/public_components/DashboardManager.js +109 -146
  77. package/dist/cjs/public_components/SQLViewManager.d.ts +1 -0
  78. package/dist/cjs/public_components/SQLViewManager.d.ts.map +1 -1
  79. package/dist/cjs/public_components/SQLViewManager.js +271 -46
  80. package/dist/cjs/utils/astProcessing.d.ts +2 -0
  81. package/dist/cjs/utils/astProcessing.d.ts.map +1 -0
  82. package/dist/cjs/utils/astProcessing.js +41 -0
  83. package/dist/cjs/utils/astProcessing.uspec.d.ts +2 -0
  84. package/dist/cjs/utils/astProcessing.uspec.d.ts.map +1 -0
  85. package/dist/cjs/utils/astProcessing.uspec.js +26 -0
  86. package/dist/cjs/utils/columnProcessing.d.ts +3 -0
  87. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -0
  88. package/dist/cjs/utils/columnProcessing.js +42 -0
  89. package/dist/cjs/utils/dataEditor.d.ts +2 -2
  90. package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
  91. package/dist/cjs/utils/dataEditor.js +4 -2
  92. package/dist/cjs/utils/databases.d.ts +0 -1
  93. package/dist/cjs/utils/databases.d.ts.map +1 -1
  94. package/dist/cjs/utils/databases.js +5 -6
  95. package/dist/cjs/utils/monacoAutocomplete.d.ts +21 -0
  96. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
  97. package/dist/cjs/utils/monacoAutocomplete.js +250 -0
  98. package/dist/cjs/utils/schema.d.ts +11 -0
  99. package/dist/cjs/utils/schema.d.ts.map +1 -1
  100. package/dist/cjs/utils/schema.js +129 -0
  101. package/dist/cjs/utils/table.d.ts +1 -0
  102. package/dist/cjs/utils/table.d.ts.map +1 -1
  103. package/dist/cjs/utils/table.js +13 -0
  104. package/dist/cjs/utils/textProcessing.d.ts +2 -0
  105. package/dist/cjs/utils/textProcessing.d.ts.map +1 -0
  106. package/dist/cjs/utils/textProcessing.js +9 -0
  107. package/dist/esm/Admin.d.ts +19 -72
  108. package/dist/esm/Admin.d.ts.map +1 -1
  109. package/dist/esm/Admin.js +218 -989
  110. package/dist/esm/AdminProvider.d.ts +2 -12
  111. package/dist/esm/AdminProvider.d.ts.map +1 -1
  112. package/dist/esm/AdminProvider.js +27 -32
  113. package/dist/esm/api/ConnectionClient.d.ts +19 -0
  114. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  115. package/dist/esm/api/ConnectionClient.js +106 -12
  116. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  117. package/dist/esm/components/DashboardSelectPopover.js +20 -3
  118. package/dist/esm/components/DropDownMenu.js +1 -1
  119. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  120. package/dist/esm/components/DropDownMenuWithLabel.js +18 -87
  121. package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  122. package/dist/esm/components/EmptyDashboardComponent/index.js +11 -9
  123. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  124. package/dist/esm/components/OrgSelect.js +6 -19
  125. package/dist/esm/components/QuillSelect.d.ts +3 -0
  126. package/dist/esm/components/QuillSelect.d.ts.map +1 -0
  127. package/dist/esm/components/QuillSelect.js +130 -0
  128. package/dist/esm/components/SegmentedControl.d.ts +9 -0
  129. package/dist/esm/components/SegmentedControl.d.ts.map +1 -0
  130. package/dist/esm/components/SegmentedControl.js +56 -0
  131. package/dist/esm/components/SqlTextEditor.d.ts +9 -1
  132. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
  133. package/dist/esm/components/SqlTextEditor.js +59 -11
  134. package/dist/esm/components/UiComponents.d.ts +18 -30
  135. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  136. package/dist/esm/components/UiComponents.js +45 -83
  137. package/dist/esm/constants/dataTypes.d.ts +2 -0
  138. package/dist/esm/constants/dataTypes.d.ts.map +1 -0
  139. package/dist/esm/constants/dataTypes.js +18 -0
  140. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  141. package/dist/esm/forms/client_onboard/ConnectDatabase.js +9 -17
  142. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts +2 -1
  143. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  144. package/dist/esm/forms/client_onboard/ConnectSchema.js +145 -70
  145. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  146. package/dist/esm/forms/client_onboard/CreateSqlViews.js +58 -16
  147. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts +11 -5
  148. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  149. package/dist/esm/forms/sql_views/CreateEditSqlView.js +108 -54
  150. package/dist/esm/hooks/useOnClickOutside.d.ts +3 -0
  151. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -0
  152. package/dist/esm/hooks/useOnClickOutside.js +18 -0
  153. package/dist/esm/modals/EditFiltersModal.d.ts +17 -0
  154. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -0
  155. package/dist/esm/modals/EditFiltersModal.js +348 -0
  156. package/dist/esm/modals/NewDashboardModal.d.ts +1 -3
  157. package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
  158. package/dist/esm/modals/NewDashboardModal.js +64 -47
  159. package/dist/esm/modals/PromoteDashModal.d.ts.map +1 -1
  160. package/dist/esm/modals/PromoteDashModal.js +11 -4
  161. package/dist/esm/modals/PromoteViewModal.d.ts +2 -1
  162. package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
  163. package/dist/esm/modals/PromoteViewModal.js +50 -40
  164. package/dist/esm/modals/ReorderDashboardModal.d.ts.map +1 -1
  165. package/dist/esm/modals/ReorderDashboardModal.js +43 -46
  166. package/dist/esm/modals/index.d.ts +0 -1
  167. package/dist/esm/modals/index.d.ts.map +1 -1
  168. package/dist/esm/modals/index.js +0 -1
  169. package/dist/esm/primitives/ButtonPrimitive.d.ts +3 -1
  170. package/dist/esm/primitives/ButtonPrimitive.d.ts.map +1 -1
  171. package/dist/esm/primitives/ButtonPrimitive.js +5 -3
  172. package/dist/esm/primitives/TextInputPrimitive.d.ts +1 -0
  173. package/dist/esm/primitives/TextInputPrimitive.d.ts.map +1 -1
  174. package/dist/esm/primitives/TextInputPrimitive.js +33 -21
  175. package/dist/esm/primitives/TogglePrimitive.js +5 -5
  176. package/dist/esm/public_components/CreateEnvironment.d.ts +2 -1
  177. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  178. package/dist/esm/public_components/CreateEnvironment.js +5 -2
  179. package/dist/esm/public_components/DashboardBuilder.d.ts.map +1 -1
  180. package/dist/esm/public_components/DashboardBuilder.js +72 -126
  181. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  182. package/dist/esm/public_components/DashboardManager.js +112 -149
  183. package/dist/esm/public_components/SQLViewManager.d.ts +1 -0
  184. package/dist/esm/public_components/SQLViewManager.d.ts.map +1 -1
  185. package/dist/esm/public_components/SQLViewManager.js +271 -48
  186. package/dist/esm/utils/astProcessing.d.ts +2 -0
  187. package/dist/esm/utils/astProcessing.d.ts.map +1 -0
  188. package/dist/esm/utils/astProcessing.js +37 -0
  189. package/dist/esm/utils/astProcessing.uspec.d.ts +2 -0
  190. package/dist/esm/utils/astProcessing.uspec.d.ts.map +1 -0
  191. package/dist/esm/utils/astProcessing.uspec.js +24 -0
  192. package/dist/esm/utils/columnProcessing.d.ts +3 -0
  193. package/dist/esm/utils/columnProcessing.d.ts.map +1 -0
  194. package/dist/esm/utils/columnProcessing.js +37 -0
  195. package/dist/esm/utils/dataEditor.d.ts +2 -2
  196. package/dist/esm/utils/dataEditor.d.ts.map +1 -1
  197. package/dist/esm/utils/dataEditor.js +4 -2
  198. package/dist/esm/utils/databases.d.ts +0 -1
  199. package/dist/esm/utils/databases.d.ts.map +1 -1
  200. package/dist/esm/utils/databases.js +5 -6
  201. package/dist/esm/utils/monacoAutocomplete.d.ts +21 -0
  202. package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
  203. package/dist/esm/utils/monacoAutocomplete.js +245 -0
  204. package/dist/esm/utils/schema.d.ts +11 -0
  205. package/dist/esm/utils/schema.d.ts.map +1 -1
  206. package/dist/esm/utils/schema.js +126 -1
  207. package/dist/esm/utils/table.d.ts +1 -0
  208. package/dist/esm/utils/table.d.ts.map +1 -1
  209. package/dist/esm/utils/table.js +11 -1
  210. package/dist/esm/utils/textProcessing.d.ts +2 -0
  211. package/dist/esm/utils/textProcessing.d.ts.map +1 -0
  212. package/dist/esm/utils/textProcessing.js +5 -0
  213. package/package.json +3 -2
  214. package/dist/cjs/modals/EditDashboardsModal.d.ts +0 -20
  215. package/dist/cjs/modals/EditDashboardsModal.d.ts.map +0 -1
  216. package/dist/cjs/modals/EditDashboardsModal.js +0 -94
  217. package/dist/esm/modals/EditDashboardsModal.d.ts +0 -20
  218. package/dist/esm/modals/EditDashboardsModal.d.ts.map +0 -1
  219. package/dist/esm/modals/EditDashboardsModal.js +0 -91
@@ -11,6 +11,9 @@ const ConnectionClient_1 = require("../../api/ConnectionClient");
11
11
  const SqlViewTile_1 = __importDefault(require("../../components/SqlViewTile"));
12
12
  const SqlTextEditor_1 = __importDefault(require("../../components/SqlTextEditor"));
13
13
  const react_2 = require("@quillsql/react");
14
+ const UiComponents_1 = require("../../components/UiComponents");
15
+ const SQLViewManager_1 = require("../../public_components/SQLViewManager");
16
+ const columnProcessing_1 = require("../../utils/columnProcessing");
14
17
  function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByTable, environmentDetails, allSchemaInfo, domainName, completeOnboarding, clientId, state, }) {
15
18
  const [selectedTable, setSelectedTable] = (0, react_1.useState)(undefined);
16
19
  const [queryInfo, setQueryInfo] = (0, react_1.useState)({
@@ -23,9 +26,11 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
23
26
  const [tableData, setTableData] = (0, react_1.useState)(undefined);
24
27
  const [client, setClient] = (0, react_1.useState)(undefined);
25
28
  const [sqlTables, setSqlTables] = (0, react_1.useState)([]);
26
- const [askAIButton, setAskAIButton] = (0, react_1.useState)('Ask AI');
27
- const [runQueryButtonLabel, setRunQueryButtonLabel] = (0, react_1.useState)('Run query');
29
+ const [askAIButtonLoading, setAskAIButtonLoading] = (0, react_1.useState)(false);
30
+ const [runQueryButtonLoading, setRunQueryButtonLoading] = (0, react_1.useState)(false);
28
31
  const [showFKModal, setShowFKModal] = (0, react_1.useState)(false);
32
+ const [tableSearchQuery, setTableSearchQuery] = (0, react_1.useState)('');
33
+ const [displayedTableData, setDisplayedTableData] = (0, react_1.useState)(columnsByTable);
29
34
  const addSqlView = async (override) => {
30
35
  const results = await (0, ConnectionClient_1.createSQLView)(environmentDetails, allSchemaInfo, columnsByTable, queryInfo, client, domainName, tableData, sqlTables.map((e) => {
31
36
  return e.name;
@@ -43,6 +48,17 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
43
48
  setSqlQueryInfo({ msg: results.message, status: true });
44
49
  }
45
50
  };
51
+ const handleClickSchemaItem = async (event) => {
52
+ const name = event.target.textContent;
53
+ if (!name) {
54
+ return;
55
+ }
56
+ const newQuery = `SELECT * FROM ${(0, columnProcessing_1.processColumnReference)(name, environmentDetails?.type)};`;
57
+ if (!queryInfo.query || queryInfo.query.length === 0) {
58
+ setQueryInfo({ name: queryInfo.name, query: newQuery });
59
+ }
60
+ await navigator.clipboard.writeText(newQuery);
61
+ };
46
62
  (0, react_1.useEffect)(() => {
47
63
  window.scrollTo({
48
64
  behavior: 'smooth',
@@ -53,6 +69,7 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
53
69
  ...containerStyle,
54
70
  display: 'flex',
55
71
  flexDirection: 'column',
72
+ minWidth: 900,
56
73
  }, id: "create-sql-view", children: [(0, jsx_runtime_1.jsxs)("div", { style: {
57
74
  padding: 20,
58
75
  paddingBottom: 12,
@@ -64,10 +81,28 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
64
81
  flexDirection: 'row',
65
82
  borderTop: 'solid 1px #e7e7e7',
66
83
  height: 'calc(100vh - 143px)',
67
- }, children: [(0, jsx_runtime_1.jsxs)("div", { id: "form-editor-table", style: {
84
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
85
+ display: 'flex',
86
+ flexDirection: 'column',
87
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
88
+ paddingLeft: '20px',
89
+ paddingRight: '30px',
90
+ height: 70,
91
+ minHeight: 70,
92
+ display: 'flex',
93
+ alignItems: 'center',
94
+ }, children: (0, jsx_runtime_1.jsx)(primitives_1.TextInputPrimitive, { placeholder: "Search...",
95
+ // @ts-ignore
96
+ onChange: (e) => {
97
+ setTableSearchQuery(e.target.value);
98
+ setDisplayedTableData(columnsByTable.filter((table) => table.tableName
99
+ .toLowerCase()
100
+ .includes(e.target.value.toLowerCase().trim())));
101
+ }, value: tableSearchQuery, width: "180px" }) }), (0, jsx_runtime_1.jsx)(react_2.SchemaListComponent, { schema: displayedTableData, theme: state.theme, width: '300px', loading: false, LoadingComponent: UiComponents_1.LoadingSpinner, onClick: handleClickSchemaItem })] }), (0, jsx_runtime_1.jsxs)("div", { id: "form-editor-table", style: {
68
102
  display: 'flex',
69
103
  flexDirection: 'column',
70
- width: 'calc(100% - 300px)',
104
+ width: 'calc(100% - 600px)',
105
+ minWidth: 300,
71
106
  }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
72
107
  display: 'flex',
73
108
  flexDirection: 'row',
@@ -79,16 +114,16 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
79
114
  height: 70,
80
115
  }, children: [(0, jsx_runtime_1.jsx)(primitives_1.TextInputPrimitive, { onChange: (e) => {
81
116
  setAIPrompt(e.target.value);
82
- }, placeholder: 'Describe a query...', value: aiPrompt }), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: askAIButton, onClick: async () => {
83
- setAskAIButton('Loading...');
117
+ }, placeholder: 'Describe a query...', value: aiPrompt }), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: async () => {
118
+ setAskAIButtonLoading(true);
84
119
  const results = await (0, ConnectionClient_1.getQueryFromAiWithConnection)(aiPrompt, clientId, allSchemaInfo?.selectedFields.schema
85
120
  ? [allSchemaInfo?.selectedFields.schema]
86
121
  : undefined);
87
122
  setQueryInfo({ name: queryInfo.name, query: results });
88
- setAskAIButton('Ask AI');
123
+ setAskAIButtonLoading(false);
89
124
  }, style: { width: '90px' } })] }), (0, jsx_runtime_1.jsx)(SqlTextEditor_1.default, { value: queryInfo.query, setValue: (e) => {
90
125
  setQueryInfo({ name: queryInfo.name, query: e });
91
- }, containerStyle: { paddingLeft: 16, paddingRight: 16 } }), (0, jsx_runtime_1.jsxs)("div", { style: {
126
+ }, setEditorMounted: () => { }, containerStyle: { paddingLeft: 16, paddingRight: 16 }, schema: displayedTableData, databaseType: environmentDetails?.type, previousProvider: null }), (0, jsx_runtime_1.jsxs)("div", { style: {
92
127
  display: 'flex',
93
128
  flexDirection: 'row',
94
129
  justifyContent: 'space-between',
@@ -96,8 +131,8 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
96
131
  paddingLeft: 16,
97
132
  paddingRight: 16,
98
133
  height: 70,
99
- }, children: [(0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: runQueryButtonLabel, onClick: async () => {
100
- setRunQueryButtonLabel('Querying...');
134
+ }, children: [(0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: 'Run query', onClick: async () => {
135
+ setRunQueryButtonLoading(true);
101
136
  const getSqlResults = await (0, ConnectionClient_1.getSqlViewData)(clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint);
102
137
  if (!getSqlResults.success) {
103
138
  setErrorInfo({ status: true, msg: getSqlResults.error });
@@ -106,7 +141,7 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
106
141
  setErrorInfo({ status: false, msg: '' });
107
142
  setTableData(getSqlResults);
108
143
  }
109
- setRunQueryButtonLabel('Run query');
144
+ setRunQueryButtonLoading(false);
110
145
  } }), errorInfo.status ? ((0, jsx_runtime_1.jsx)("h2", { style: {
111
146
  ...header2Style,
112
147
  color: 'red',
@@ -119,7 +154,7 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
119
154
  }, children: [(0, jsx_runtime_1.jsx)(react_2.Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: {
120
155
  height: 'calc(100vh - 589px)',
121
156
  width: '100%',
122
- }, showDownloadCSVButton: true }), (0, jsx_runtime_1.jsxs)("div", { style: {
157
+ }, hideCSVDownloadButton: true, isLoading: runQueryButtonLoading }), (0, jsx_runtime_1.jsxs)("div", { style: {
123
158
  width: '100%',
124
159
  display: 'flex',
125
160
  justifyContent: 'space-between',
@@ -130,7 +165,14 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
130
165
  color: 'red',
131
166
  paddingTop: '12px',
132
167
  // textTransform: 'capitalize',
133
- }, children: sqlQueryError.msg })) : ((0, jsx_runtime_1.jsx)("div", {})), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: "Add SQL View", onClick: () => addSqlView(false) })] })] }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
168
+ }, children: sqlQueryError.msg })) : ((0, jsx_runtime_1.jsx)("div", {})), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: "Add SQL View", onClick: () => {
169
+ const duplicateColumns2 = (0, SQLViewManager_1.getDuplicateColumns)(tableData?.fields);
170
+ if (duplicateColumns2.length > 0) {
171
+ alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
172
+ return;
173
+ }
174
+ addSqlView(false);
175
+ } })] })] }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
134
176
  // width: '30%',
135
177
  background: '#fafafa',
136
178
  borderLeft: 'solid 1px #e7e7e7',
@@ -182,7 +224,7 @@ function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByT
182
224
  paddingRight: 12,
183
225
  background: 'white',
184
226
  borderTop: 'solid 1px #e7e7e7',
185
- }, children: (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: "Go to dashboard", onClick: () => {
227
+ }, children: (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: "Looks good", onClick: () => {
186
228
  completeOnboarding(client);
187
229
  }, style: { width: 276 } }) })) : null] })] }), (0, jsx_runtime_1.jsx)(ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addSqlView, foreignKey: allSchemaInfo?.selectedFields.foreignKey, tableName: allSchemaInfo?.selectedFields.table })] }));
188
230
  }
@@ -195,7 +237,7 @@ function ForeignKeyModal({ isOpen, setIsOpen, override, foreignKey, tableName, }
195
237
  fontWeight: 600,
196
238
  color: '#212121',
197
239
  paddingBottom: 14,
198
- }, children: `Organization Foreign Key "${foreignKey}" Not Found` }), (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: '12px' }, children: [`Your organization table `, (0, jsx_runtime_1.jsx)("strong", { children: `"${tableName}"` }), ` foreign key `, (0, jsx_runtime_1.jsx)("strong", { children: `"${foreignKey}"` }), " is not present in the current query. If this query will never have organization specific data on it (this is rare), override this message.`"] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
240
+ }, children: `Organization Foreign Key "${foreignKey?.replaceAll('"', '')}" Not Found` }), (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: '12px' }, children: [`Your organization table `, (0, jsx_runtime_1.jsx)("strong", { children: `"${tableName?.replaceAll('"', '')}"` }), ` foreign key `, (0, jsx_runtime_1.jsx)("strong", { children: `"${foreignKey?.replaceAll('"', '')}"` }), " is not present in the current query. If this query will never have organization specific data on it (this is rare), override this message.`"] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
199
241
  display: 'flex',
200
242
  flexDirection: 'row',
201
243
  gap: '12px',
@@ -1,5 +1,7 @@
1
- /// <reference types="react" />
2
- import { ButtonComponentProps, TextInputComponentProps, HeaderProps } from '@quillsql/react';
1
+ import { ButtonComponentProps } from '@quillsql/react';
2
+ import { ReactNode } from 'react';
3
+ import { IDisposable } from 'monaco-editor';
4
+ import { TextInputComponentProps } from '../../components/UiComponents';
3
5
  import { ColumnsByTable } from '../../utils/table';
4
6
  interface CreateEditSqlViewProps {
5
7
  containerStyle: React.CSSProperties;
@@ -12,12 +14,16 @@ interface CreateEditSqlViewProps {
12
14
  SecondaryButtonComponent?: (props: ButtonComponentProps) => JSX.Element;
13
15
  TextInput?: (props: TextInputComponentProps) => JSX.Element;
14
16
  LoadingComponent?: () => JSX.Element;
15
- Header?: (props: HeaderProps) => JSX.Element;
17
+ Header?: (props: {
18
+ children: ReactNode;
19
+ }) => JSX.Element;
16
20
  closeEditView: () => void;
17
- addEditView: (request: string, query: string, name?: string, id?: string) => void;
21
+ addEditView: (request: string, query: string, name?: string, id?: string, columns?: any[]) => void;
22
+ setProvider: (provider: IDisposable | null) => void;
23
+ provider: IDisposable | null;
18
24
  allTableData: ColumnsByTable[];
19
25
  schemaIsLoading: boolean;
20
26
  }
21
- export default function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, SecondaryButtonComponent, LoadingComponent, Button, TextInput, Header, allTableData, schemaIsLoading, }: CreateEditSqlViewProps): JSX.Element;
27
+ export default function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, setProvider, provider, SecondaryButtonComponent, LoadingComponent, Button, TextInput, Header, allTableData, schemaIsLoading, }: CreateEditSqlViewProps): JSX.Element;
22
28
  export {};
23
29
  //# sourceMappingURL=CreateEditSqlView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateEditSqlView.d.ts","sourceRoot":"","sources":["../../../../src/forms/sql_views/CreateEditSqlView.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,oBAAoB,EAEpB,uBAAuB,EACvB,WAAW,EAGZ,MAAM,iBAAiB,CAAC;AAwBzB,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI3D,UAAU,sBAAsB;IAC9B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,KACR,IAAI,CAAC;IACV,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,wBAAwB,EACxB,gBAA2C,EAC3C,MAAuB,EACvB,SAA6B,EAC7B,MAAuB,EACvB,YAAY,EACZ,eAAe,GAChB,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAiTtC"}
1
+ {"version":3,"file":"CreateEditSqlView.d.ts","sourceRoot":"","sources":["../../../../src/forms/sql_views/CreateEditSqlView.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAKrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQ5C,OAAO,EAML,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQ3D,UAAU,sBAAsB;IAC9B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,EAAE,KACZ,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,wBAAwB,EACxB,gBAA2C,EAC3C,MAAuB,EACvB,SAA6B,EAC7B,MAAuB,EACvB,YAAY,EACZ,eAAe,GAChB,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAmYtC"}
@@ -12,18 +12,23 @@ const SqlTextEditor_1 = __importDefault(require("../../components/SqlTextEditor"
12
12
  const UiComponents_1 = require("../../components/UiComponents");
13
13
  const CreateSqlViews_1 = require("../client_onboard/CreateSqlViews");
14
14
  const DynamicBanner_1 = __importDefault(require("../../components/DynamicBanner"));
15
- function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, SecondaryButtonComponent, LoadingComponent = () => (0, jsx_runtime_1.jsx)(UiComponents_1.LoadingSpinner, {}), Button = UiComponents_1.MemoizedButton, TextInput = UiComponents_1.MemoizedTextInput, Header = UiComponents_1.MemoizedHeader, allTableData, schemaIsLoading, }) {
15
+ const SQLViewManager_1 = require("../../public_components/SQLViewManager");
16
+ const columnProcessing_1 = require("../../utils/columnProcessing");
17
+ const astProcessing_1 = require("../../utils/astProcessing");
18
+ const constants_1 = require("../../utils/constants");
19
+ function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, setProvider, provider, SecondaryButtonComponent, LoadingComponent = () => (0, jsx_runtime_1.jsx)(UiComponents_1.LoadingSpinner, {}), Button = UiComponents_1.MemoizedButton, TextInput = UiComponents_1.MemoizedTextInput, Header = UiComponents_1.MemoizedHeader, allTableData, schemaIsLoading, }) {
16
20
  const [name, setName] = (0, react_2.useState)(initialSqlView?.name || '');
17
21
  const [editViewQuery, setEditViewQuery] = (0, react_2.useState)(initialSqlView?.query || '');
18
22
  const [ranViewQuery, setRanViewQuery] = (0, react_2.useState)(initialSqlView?.query || '');
19
- const [askAIButton, setAskAIButton] = (0, react_2.useState)('Ask AI');
23
+ const [askAIButtonLoading, setAskAIButtonLoading] = (0, react_2.useState)(false);
24
+ const [runQueryButtonLoading, setRunQueryButtonLoading] = (0, react_2.useState)(false);
20
25
  const [aiPrompt, setAIPrompt] = (0, react_2.useState)('');
21
- const [runQueryButtonLabel, setRunQueryButtonLabel] = (0, react_2.useState)('Run query');
22
26
  const [viewAddable, setViewAddable] = (0, react_2.useState)(false);
23
27
  const [showFKModal, setShowFKModal] = (0, react_2.useState)(false);
24
28
  const [overrideFKCheck, setOverrideFKCheck] = (0, react_2.useState)(false);
25
29
  const [isLoading, setIsLoading] = (0, react_2.useState)(false);
26
30
  const [tableSearchQuery, setTableSearchQuery] = (0, react_2.useState)('');
31
+ const [editorMounted, setEditorMounted] = (0, react_2.useState)(false);
27
32
  const [displayedTableData, setDisplayedTableData] = (0, react_2.useState)(allTableData);
28
33
  const [errorInfo, setErrorInfo] = (0, react_2.useState)({ show: false, message: '' });
29
34
  const [tableData, setTableData] = (0, react_2.useState)(undefined);
@@ -35,7 +40,7 @@ function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addE
35
40
  setShowFKModal(true);
36
41
  return;
37
42
  }
38
- addEditView(initialSqlView ? 'edit' : 'add', ranViewQuery, name, initialSqlView ? initialSqlView.id : undefined);
43
+ addEditView(initialSqlView ? 'edit' : 'add', ranViewQuery, name, initialSqlView ? initialSqlView.id : undefined, tableData?.fields || []);
39
44
  };
40
45
  (0, react_2.useEffect)(() => {
41
46
  setDisplayedTableData(allTableData);
@@ -43,19 +48,30 @@ function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addE
43
48
  const handleRunSqlPrompt = async () => {
44
49
  setErrorInfo({ show: false, message: '' });
45
50
  setViewAddable(false);
46
- setAskAIButton('Loading...');
51
+ setAskAIButtonLoading(true);
47
52
  const results = await (0, ConnectionClient_1.getQueryFromAiWithConnection)(aiPrompt, state.client._id, state.client.schemaNames);
48
53
  setOverrideFKCheck(false);
49
54
  setEditViewQuery(results);
50
- setAskAIButton('Ask AI');
55
+ setAskAIButtonLoading(false);
51
56
  };
52
- const handleRunQuery = async () => {
53
- const query = editViewQuery;
57
+ const handleClickSchemaItem = async (event) => {
58
+ const name = event.target.textContent;
59
+ if (!name) {
60
+ return;
61
+ }
62
+ const newQuery = `SELECT * FROM ${(0, columnProcessing_1.processColumnReference)(name, state.client.databaseType)};`;
63
+ if (!editViewQuery || editViewQuery.length === 0) {
64
+ setEditViewQuery(newQuery);
65
+ }
66
+ await navigator.clipboard.writeText(newQuery);
67
+ };
68
+ const handleRunQuery = async (overrideQuery) => {
69
+ const query = overrideQuery ? overrideQuery : editViewQuery;
54
70
  // If this query has a limit at the end alert the user
55
- if (query.toLowerCase().includes(' limit ')) {
71
+ if (/limit\s+\d+\s*;?\s*$/i.test(query)) {
56
72
  setErrorInfo({
57
73
  show: true,
58
- message: 'Error: Please remove the limit on you query.',
74
+ message: 'Error: Please remove the limit at the end of your query.',
59
75
  });
60
76
  return;
61
77
  }
@@ -63,11 +79,11 @@ function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addE
63
79
  setErrorInfo({ show: false, message: '' });
64
80
  setTableData(undefined);
65
81
  setIsLoading(true);
66
- setRunQueryButtonLabel('Querying...');
82
+ setRunQueryButtonLoading(true);
67
83
  setOverrideFKCheck(false);
68
- if (editViewQuery.length === 0) {
84
+ if (query.length === 0) {
69
85
  setErrorInfo({ show: true, message: 'Error: Please enter a query.' });
70
- setRunQueryButtonLabel('Run query');
86
+ setRunQueryButtonLoading(false);
71
87
  return;
72
88
  }
73
89
  const resp = await (0, ConnectionClient_1.getSqlViewData)(state.client._id, query, state.client.databaseType, state.queryEndpoint);
@@ -75,22 +91,48 @@ function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addE
75
91
  setErrorInfo({ show: true, message: resp.error });
76
92
  setTableData(undefined);
77
93
  setViewAddable(false);
78
- setRunQueryButtonLabel('Run query');
94
+ setRunQueryButtonLoading(false);
79
95
  setIsLoading(false);
80
96
  return;
81
97
  }
82
- setRunQueryButtonLabel('Run query');
98
+ setRunQueryButtonLoading(false);
83
99
  setErrorInfo({ show: false, message: '' });
84
100
  // stringify all rows that are either jsonb or json
85
101
  resp.rows = resp.rows.map((row) => {
86
102
  for (const key in row) {
87
- if (typeof row[key] === 'object') {
103
+ if (row[key] !== null && typeof row[key] === 'object') {
88
104
  row[key] = JSON.stringify(row[key]);
89
105
  }
90
106
  }
91
107
  return row;
92
108
  });
93
- setTableData(resp);
109
+ const duplicateColumns = (0, SQLViewManager_1.getDuplicateColumns)(resp.fields);
110
+ if (duplicateColumns.length > 0) {
111
+ let parsedAST = resp.ast;
112
+ if (Array.isArray(resp.ast)) {
113
+ parsedAST = [0];
114
+ }
115
+ const tableNames = parsedAST.from.map((table) => {
116
+ const db = table.db ? `${table.db}.` : '';
117
+ return `${db}${table.table}`;
118
+ });
119
+ const newAst = (0, astProcessing_1.processJoinASTWithDuplicateColumns)(duplicateColumns, tableNames, allTableData, parsedAST);
120
+ const response = await fetch(`${constants_1.QUILL_SERVER}/sqlify`, {
121
+ method: 'POST',
122
+ headers: {
123
+ 'Content-Type': 'application/json',
124
+ },
125
+ body: JSON.stringify({
126
+ ast: { ...newAst },
127
+ publicKey: state.client._id,
128
+ }),
129
+ });
130
+ const jsonResponse = await response.json();
131
+ setEditViewQuery(jsonResponse.query);
132
+ await handleRunQuery(jsonResponse.query);
133
+ return;
134
+ }
135
+ setTableData({ fields: resp.fields, rows: resp.rows });
94
136
  setViewAddable(true);
95
137
  setRanViewQuery(query);
96
138
  setIsLoading(false);
@@ -98,7 +140,7 @@ function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addE
98
140
  return ((0, jsx_runtime_1.jsx)("div", { style: {
99
141
  ...containerStyle,
100
142
  gap: 6,
101
- height: 'calc(100vh - 188px)',
143
+ height: 'calc(100vh - 130px)',
102
144
  }, children: (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', height: '100%', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(DynamicBanner_1.default, { header: initialSqlView
103
145
  ? `Edit "${initialSqlView.name}" view`
104
146
  : 'Create SQL View', message: initialSqlView
@@ -124,51 +166,63 @@ function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addE
124
166
  }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
125
167
  paddingLeft: '20px',
126
168
  paddingRight: '30px',
127
- }, children: (0, jsx_runtime_1.jsx)(TextInput, { placeholder: "Search...",
128
- // @ts-ignore
129
- onChange: (e) => {
130
- setTableSearchQuery(e);
169
+ }, children: (0, jsx_runtime_1.jsx)(TextInput, { placeholder: "Search...", onChange: (e) => {
170
+ setTableSearchQuery(e.target.value);
131
171
  setDisplayedTableData(allTableData.filter((table) => table.tableName
132
172
  .toLowerCase()
133
- .includes(e.toLowerCase().trim())));
134
- }, value: tableSearchQuery, id: 'edit-name', width: "100%" }) }), (0, jsx_runtime_1.jsx)(react_1.SchemaListComponent, { schema: displayedTableData, theme: state.theme, LoadingComponent: LoadingComponent, loading: schemaIsLoading, width: '400px' })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
173
+ .includes(e.target.value.toLowerCase().trim())));
174
+ }, value: tableSearchQuery, id: 'edit-name', width: '100%' }) }), (0, jsx_runtime_1.jsx)(react_1.SchemaListComponent, { schema: displayedTableData, theme: state.theme, LoadingComponent: LoadingComponent, loading: schemaIsLoading, width: '400px', onClick: handleClickSchemaItem })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
135
175
  display: 'flex',
136
176
  gap: 20,
137
177
  flexDirection: 'column',
138
178
  width: 'calc(100% - 250px)',
139
- height: '100%',
179
+ maxHeight: '100%',
140
180
  overflowX: 'hidden',
141
181
  paddingRight: '24px',
142
182
  }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
143
- display: 'flex',
144
- flexDirection: 'row',
145
- alignItems: 'flex-start',
146
- justifyContent: 'space-between',
183
+ overflow: 'auto',
147
184
  gap: 20,
148
- width: '100%',
149
- }, children: [(0, jsx_runtime_1.jsx)(TextInput
150
- // @ts-ignore
151
- , {
152
- // @ts-ignore
153
- onChange: (e) => {
154
- setAIPrompt(e);
155
- }, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '95%' }), (0, jsx_runtime_1.jsx)(Button, { label: askAIButton, onClick: handleRunSqlPrompt, width: "100px" })] }), (0, jsx_runtime_1.jsx)(SqlTextEditor_1.default, { value: editViewQuery, setValue: (e) => {
156
- setEditViewQuery(e);
157
- } }), (0, jsx_runtime_1.jsx)("div", { style: { width: '200px' }, children: (0, jsx_runtime_1.jsx)(Button, { label: runQueryButtonLabel, onClick: handleRunQuery }) }), errorInfo.show ? ((0, jsx_runtime_1.jsx)("div", { style: {
158
- fontSize: 15,
159
- fontWeight: '400',
160
- }, children: (0, jsx_runtime_1.jsx)("div", { style: {
161
- padding: 30,
162
- background: 'rgba(0,0,0,0.02)',
163
- display: 'inline-block',
164
- flex: 0,
165
- borderRadius: 6,
166
- }, children: errorInfo.message }) })) : null, isLoading && ((0, jsx_runtime_1.jsx)("div", { style: {
167
- height: 'calc(100vh - 589px)',
168
- width: '100%',
169
185
  display: 'flex',
170
- justifyContent: 'center',
171
- alignItems: 'center',
172
- }, children: (0, jsx_runtime_1.jsx)(LoadingComponent, {}) })), tableData && ((0, jsx_runtime_1.jsx)(react_1.Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: { height: '360px' } })), viewAddable && ((0, jsx_runtime_1.jsx)("div", { style: { width: '200px' }, children: (0, jsx_runtime_1.jsx)(Button, { label: `${initialSqlView ? 'Save changes' : 'Create view'}`, onClick: () => addEditSqlView(false) }) }))] })] }), (0, jsx_runtime_1.jsx)(CreateSqlViews_1.ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addEditSqlView, foreignKey: state.client.customerFieldName, tableName: state.client.customerTableName })] }) }));
186
+ flexDirection: 'column',
187
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
188
+ display: 'flex',
189
+ flexDirection: 'row',
190
+ alignItems: 'flex-start',
191
+ justifyContent: 'space-between',
192
+ gap: 20,
193
+ width: '100%',
194
+ }, children: [(0, jsx_runtime_1.jsx)(TextInput, { onChange: (e) => {
195
+ setAIPrompt(e.target.value);
196
+ }, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '100%' }), (0, jsx_runtime_1.jsx)(Button, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: handleRunSqlPrompt })] }), (0, jsx_runtime_1.jsx)(SqlTextEditor_1.default, { value: editViewQuery, setValue: (e) => {
197
+ setEditViewQuery(e);
198
+ }, setEditorMounted: (didMount) => {
199
+ setEditorMounted(didMount);
200
+ }, setPreviousProvier: (provider) => {
201
+ setProvider(provider);
202
+ }, previousProvider: provider, schema: displayedTableData, databaseType: state.client.databaseType }), editorMounted && ((0, jsx_runtime_1.jsx)("div", { style: { width: '200px' }, children: (0, jsx_runtime_1.jsx)(Button, { label: 'Run query', onClick: () => {
203
+ handleRunQuery();
204
+ } }) })), errorInfo.show ? ((0, jsx_runtime_1.jsx)("div", { style: {
205
+ fontSize: 15,
206
+ fontWeight: '400',
207
+ }, children: (0, jsx_runtime_1.jsx)("div", { style: {
208
+ padding: 30,
209
+ background: 'rgba(0,0,0,0.02)',
210
+ display: 'inline-block',
211
+ flex: 0,
212
+ borderRadius: 6,
213
+ }, children: errorInfo.message }) })) : null, isLoading && ((0, jsx_runtime_1.jsx)("div", { style: {
214
+ height: 'calc(100vh - 589px)',
215
+ width: '100%',
216
+ display: 'flex',
217
+ justifyContent: 'center',
218
+ alignItems: 'center',
219
+ }, children: (0, jsx_runtime_1.jsx)(LoadingComponent, {}) })), tableData && ((0, jsx_runtime_1.jsx)(react_1.Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: { height: '360px', minHeight: 250 } }))] }), viewAddable && ((0, jsx_runtime_1.jsx)("div", { style: { width: '200px' }, children: (0, jsx_runtime_1.jsx)(Button, { label: `${initialSqlView ? 'Save changes' : 'Create view'}`, onClick: () => {
220
+ const duplicateColumns2 = (0, SQLViewManager_1.getDuplicateColumns)(tableData?.fields);
221
+ if (duplicateColumns2.length > 0) {
222
+ alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
223
+ return;
224
+ }
225
+ addEditSqlView(false);
226
+ } }) }))] })] }), (0, jsx_runtime_1.jsx)(CreateSqlViews_1.ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addEditSqlView, foreignKey: state.client.customerFieldName, tableName: state.client.customerTableName })] }) }));
173
227
  }
174
228
  exports.default = CreateEditSqlView;
@@ -0,0 +1,3 @@
1
+ declare const useOnClickOutside: (ref: React.RefObject<HTMLDivElement>, handler: (event: any) => void) => void;
2
+ export default useOnClickOutside;
3
+ //# sourceMappingURL=useOnClickOutside.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,QAChB,MAAM,SAAS,CAAC,cAAc,CAAC,mBACjB,GAAG,KAAG,IAAI,SAgB9B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_1 = require("react");
4
+ const useOnClickOutside = (ref, handler) => {
5
+ (0, react_1.useEffect)(() => {
6
+ const listener = (event) => {
7
+ if (!ref.current || ref.current.contains(event.target)) {
8
+ return;
9
+ }
10
+ handler(event);
11
+ };
12
+ document.addEventListener("mousedown", listener);
13
+ document.addEventListener("touchstart", listener);
14
+ return () => {
15
+ document.removeEventListener("mousedown", listener);
16
+ document.removeEventListener("touchstart", listener);
17
+ };
18
+ }, [ref, handler]);
19
+ };
20
+ exports.default = useOnClickOutside;
@@ -0,0 +1,17 @@
1
+ export declare function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, client, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, openEditOrderModal, }: {
2
+ isOpen: boolean;
3
+ dashboardData: any;
4
+ selectedDashboard: any;
5
+ client: any;
6
+ setIsOpen: any;
7
+ onSave: any;
8
+ openEditOrderModal: any;
9
+ ModalComponent: any;
10
+ TextInputComponent: any;
11
+ ButtonComponent: any;
12
+ HeaderComponent: any;
13
+ SelectComponent: any;
14
+ dashNames: any;
15
+ SecondaryButtonComponent: any;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=EditFiltersModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditFiltersModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditFiltersModal.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,kBAAkB,GACnB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,iBAAiB,EAAE,GAAG,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EAAE,GAAG,CAAC;IACxB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CA2nBA"}