@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
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getDuplicateColumns = void 0;
6
7
  const jsx_runtime_1 = require("react/jsx-runtime");
7
8
  const react_1 = require("react");
8
9
  const primitives_1 = require("../primitives");
@@ -14,6 +15,28 @@ const dataEditor_1 = require("../utils/dataEditor");
14
15
  const ConnectionClient_1 = require("../api/ConnectionClient");
15
16
  const UiComponents_1 = require("../components/UiComponents");
16
17
  const DatabaseMismatchCard_1 = __importDefault(require("../components/DatabaseMismatchCard"));
18
+ const TogglePrimitive_1 = __importDefault(require("../primitives/TogglePrimitive"));
19
+ const SegmentedControl_1 = require("../components/SegmentedControl");
20
+ const SqlTextEditor_1 = __importDefault(require("../components/SqlTextEditor"));
21
+ const react_2 = require("@quillsql/react");
22
+ const schema_1 = require("../utils/schema");
23
+ const modals_1 = require("../modals");
24
+ const getDuplicateColumns = (columns) => {
25
+ if (!columns) {
26
+ return [];
27
+ }
28
+ const columnCount = columns?.reduce((acc, curr) => {
29
+ if (acc[curr.field]) {
30
+ acc[curr.field] += 1;
31
+ }
32
+ else {
33
+ acc[curr.field] = 1;
34
+ }
35
+ return acc;
36
+ }, {});
37
+ return Object.keys(columnCount).filter((column) => columnCount[column] > 1);
38
+ };
39
+ exports.getDuplicateColumns = getDuplicateColumns;
17
40
  function SQLViewManager({ containerStyle, }) {
18
41
  const [tables, setTables] = (0, react_1.useState)(undefined);
19
42
  const [modalIsOpen, setIsOpen] = (0, react_1.useState)(false);
@@ -29,14 +52,19 @@ function SQLViewManager({ containerStyle, }) {
29
52
  const [deleteModalIsOpen, setDeleteModalIsOpen] = (0, react_1.useState)(false);
30
53
  const [isPromoteViewModalOpen, setIsPromoteViewModalOpen] = (0, react_1.useState)(false);
31
54
  const [allTableData, setAllTableData] = (0, react_1.useState)([]);
55
+ const [referencedTablesMap, setReferencedTablesMap] = (0, react_1.useState)({});
32
56
  const [schemaIsLoading, setSchemaIsLoading] = (0, react_1.useState)(false);
57
+ const [customFieldInfo, setCustomFieldInfo] = (0, react_1.useState)(undefined);
58
+ const [provider, setProvider] = (0, react_1.useState)(null);
33
59
  const [initialSqlView, setInitialSqlView] = (0, react_1.useState)(undefined);
60
+ const [submittingView, setSubmittingView] = (0, react_1.useState)(false);
34
61
  const parentRef = (0, react_1.useRef)(null);
35
62
  const { state, dispatch } = (0, AdminProvider_1.useAdmin)();
36
63
  const closeEditModal = () => {
37
64
  setEditModalIsOpen(false);
38
65
  setEditName('');
39
66
  setEditViewQuery('');
67
+ setCustomFieldInfo(undefined);
40
68
  };
41
69
  const clickTableCell = (table) => {
42
70
  setEditName(table.name);
@@ -47,9 +75,26 @@ function SQLViewManager({ containerStyle, }) {
47
75
  name: table.name,
48
76
  query: table.viewQuery,
49
77
  });
78
+ setCustomFieldInfo(table.customFieldInfo);
50
79
  setEditModalIsOpen(true);
51
80
  };
52
81
  const getTables = async () => {
82
+ const schemaData = await (0, schema_1.getSchemaInfo)({
83
+ queryEndpoint: state.queryEndpoint,
84
+ queryHeaders: state.queryHeaders,
85
+ publicKey: state.client._id,
86
+ customerId: state.client.customerId,
87
+ gatherSchemaData: false,
88
+ }, 'svm');
89
+ setTables(schemaData);
90
+ };
91
+ const getSchemaTableDetails = async () => {
92
+ setSchemaIsLoading(true);
93
+ const response = await (0, ConnectionClient_1.getTableColumnsBySchema)(state.client._id, state.client.schemaNames, state.client.databaseType, state.queryEndpoint);
94
+ setAllTableData(response);
95
+ setSchemaIsLoading(false);
96
+ };
97
+ const getReferencedTablesMap = async () => {
53
98
  const response = await fetch(`${state.queryEndpoint}`, {
54
99
  method: 'POST',
55
100
  headers: {
@@ -60,7 +105,7 @@ function SQLViewManager({ containerStyle, }) {
60
105
  metadata: {
61
106
  clientId: state.client._id,
62
107
  publicKey: state.client._id,
63
- task: 'schema',
108
+ task: 'referenced-tables-map',
64
109
  databaseType: state.client.databaseType,
65
110
  },
66
111
  }),
@@ -69,74 +114,119 @@ function SQLViewManager({ containerStyle, }) {
69
114
  throw new Error('Failed to fetch tables data');
70
115
  }
71
116
  const data = await response.json();
72
- setTables(data.data.tables);
73
- };
74
- const getSchemaTableDetails = async () => {
75
- setSchemaIsLoading(true);
76
- const response = await (0, ConnectionClient_1.getTableColumnsBySchema)(state.client._id, state.client.schemaNames, state.client.databaseType, state.queryEndpoint);
77
- setAllTableData(response);
78
- setSchemaIsLoading(false);
117
+ setReferencedTablesMap(data.data.referencedTablesMap);
79
118
  };
80
119
  (0, react_1.useEffect)(() => {
81
120
  let isSubscribed = true;
82
121
  if (isSubscribed && state.client) {
83
122
  getTables();
84
123
  getSchemaTableDetails();
124
+ getReferencedTablesMap();
85
125
  }
86
126
  return () => {
87
127
  isSubscribed = false;
88
128
  };
89
129
  }, [state.client]);
90
- const handleClickFirstDelete = () => {
91
- setTableToBeDeleted(editName);
92
- setDeleteModalIsOpen(true);
93
- };
94
- const handleModalSubmit = async (submitRequest, query, name, id) => {
130
+ const handleModalSubmit = async (submitRequest, query, name, id, columns, customFieldInfo) => {
95
131
  try {
132
+ const prevTableName = tables?.find((table) => table._id === id)?.name;
133
+ const isPlural = referencedTablesMap &&
134
+ referencedTablesMap[prevTableName] &&
135
+ referencedTablesMap[prevTableName].length > 1
136
+ ? 's'
137
+ : '';
138
+ let trimmedName = name?.trim() || undefined;
139
+ let submitResponse;
96
140
  switch (submitRequest) {
97
141
  case 'add':
98
- if (!name) {
99
- alert('No Name found');
142
+ if (!trimmedName) {
143
+ alert('No name found');
100
144
  return;
101
145
  }
102
- if (tables?.map((table) => table.name).includes(name)) {
146
+ if (tables?.map((table) => table.name).includes(trimmedName)) {
103
147
  alert('Name already exists');
104
148
  return;
105
149
  }
106
- if (!/^[a-z0-9_]+$/.test(name)) {
107
- alert('Name must be lowercase with no spaces');
150
+ // determine if there are duplicate names if there are then alert the user
151
+ let duplicateColumns = (0, exports.getDuplicateColumns)(columns);
152
+ if (duplicateColumns.length > 0) {
153
+ alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns.join('\n')}`);
108
154
  return;
109
155
  }
110
- await (0, dataEditor_1.addSqlView)(name, query, state);
156
+ if (!/^[a-z0-9_]+$/.test(trimmedName)) {
157
+ alert('Names can only include lowercase letters, numbers, and underscores');
158
+ return;
159
+ }
160
+ submitResponse = await (0, dataEditor_1.addSqlView)(trimmedName, query, customFieldInfo, state);
111
161
  break;
112
162
  case 'edit':
113
163
  if (!id) {
114
164
  return;
115
165
  }
116
- if (!name) {
117
- alert('No id found');
166
+ if (referencedTablesMap && referencedTablesMap[prevTableName]) {
167
+ // This condition is for only query edits
168
+ if (editQueryView) {
169
+ const errorColumns = [];
170
+ referencedTablesMap[prevTableName] = referencedTablesMap[prevTableName].forEach((table) => {
171
+ table.referencedColumns.forEach((column) => {
172
+ if (!columns?.find((col) => {
173
+ return col.field === column;
174
+ })) {
175
+ errorColumns.push(`'${column}' referenced by ${table.dashboardName} - ${table.reportName}`);
176
+ }
177
+ });
178
+ });
179
+ if (errorColumns.length > 0) {
180
+ alert(`Edit Error\n\n${errorColumns.join('\n')} \n\nPlease modify your query to include these columns.`);
181
+ return;
182
+ }
183
+ }
184
+ else {
185
+ const referencedTableInfo = referencedTablesMap[prevTableName].map((info) => {
186
+ return `${info.dashboardName} - ${info.reportName}`;
187
+ });
188
+ alert(`Edit Error\n\n${referencedTableInfo.join('\n')} \n\nPlease delete those charts before renaming this table.`);
189
+ return;
190
+ }
191
+ }
192
+ if (!trimmedName) {
193
+ alert('No name found');
118
194
  return;
119
195
  }
120
- if (!/^[a-z0-9_]+$/.test(name)) {
196
+ if (!/^[a-z0-9_]+$/.test(trimmedName)) {
121
197
  alert('Names can only include lowercase letters, numbers, and underscores');
122
198
  return;
123
199
  }
200
+ // determine if there are duplicate names if there are then alert the user
201
+ const duplicateColumns2 = (0, exports.getDuplicateColumns)(columns);
202
+ if (duplicateColumns2.length > 0) {
203
+ alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
204
+ return;
205
+ }
124
206
  // check if the tableName is present excluding the table with the same id
125
207
  if (tables
126
208
  ?.filter((table) => table._id !== id)
127
209
  .map((table) => table.name)
128
- .includes(name)) {
210
+ .includes(trimmedName)) {
129
211
  alert('Name already exists');
130
212
  return;
131
213
  }
132
- await (0, dataEditor_1.editSQLView)(name, query, id, state);
214
+ submitResponse = await (0, dataEditor_1.editSQLView)(trimmedName, query, id, customFieldInfo, state);
133
215
  break;
134
216
  case 'delete':
135
217
  if (!id) {
136
218
  alert('No id found');
137
219
  return;
138
220
  }
139
- await (0, dataEditor_1.deleteSQLView)(id, state);
221
+ // Determine if the table is referenced in other charts
222
+ if (referencedTablesMap && referencedTablesMap[prevTableName]) {
223
+ const referencedTableInfo = referencedTablesMap[prevTableName].map((info) => {
224
+ return `${info.dashboardName} - ${info.reportName}`;
225
+ });
226
+ alert(`This table is referenced in the following dashboard${isPlural}/chart${isPlural}.\n\n${referencedTableInfo.join('\n')} \n\nPlease delete those charts before deleting this table.`);
227
+ return;
228
+ }
229
+ submitResponse = await (0, dataEditor_1.deleteSQLView)(id, state);
140
230
  break;
141
231
  default:
142
232
  setEditName('');
@@ -145,6 +235,10 @@ function SQLViewManager({ containerStyle, }) {
145
235
  setEditModalIsOpen(true);
146
236
  return;
147
237
  }
238
+ if (submitResponse.status !== 'success') {
239
+ alert(`There was an error processing your ${submitRequest} request.`);
240
+ return;
241
+ }
148
242
  await getTables();
149
243
  closeEditModal();
150
244
  setEditQueryView(false);
@@ -153,21 +247,13 @@ function SQLViewManager({ containerStyle, }) {
153
247
  console.error(e);
154
248
  }
155
249
  };
156
- const handleEditAddView = async (request, query, name, id) => {
250
+ const handleEditAddView = async (request, query, name, id, columns) => {
157
251
  switch (request) {
158
252
  case 'edit':
159
- if (!name) {
160
- alert('No name found');
161
- return;
162
- }
163
- if (!id) {
164
- alert('No id found');
165
- return;
166
- }
167
- await handleModalSubmit('edit', query, name, id);
253
+ await handleModalSubmit('edit', query, name, id, columns);
168
254
  break;
169
255
  default:
170
- await handleModalSubmit('final-edit', query);
256
+ await handleModalSubmit('final-edit', query, undefined, undefined, columns);
171
257
  break;
172
258
  }
173
259
  };
@@ -200,7 +286,7 @@ function SQLViewManager({ containerStyle, }) {
200
286
  borderLeftWidth: 0,
201
287
  borderRightWidth: 0,
202
288
  borderStyle: 'solid',
203
- borderColor: state.theme.borderColor,
289
+ borderColor: state.theme?.borderColor,
204
290
  paddingBottom: 20,
205
291
  // boxShadow: "0px 1px 4px 0px rgba(0, 0, 0, 0.07)",
206
292
  // paddingRight: '50px',
@@ -236,15 +322,32 @@ function SQLViewManager({ containerStyle, }) {
236
322
  paddingTop: 25,
237
323
  }, children: tables && tables?.length
238
324
  ? tables.map((table) => ((0, jsx_runtime_1.jsx)(Admin_1.TableCell, { table: table, clickTableCell: clickTableCell }, table._id)))
239
- : null }, 'edit-view-query')) : ((0, jsx_runtime_1.jsx)(CreateEditSqlView_1.default, { containerStyle: {}, initialSqlView: initialSqlView, closeEditView: () => setEditQueryView(false), addEditView: (request, name, query, id) => {
240
- handleEditAddView(request, name, query, id);
241
- }, allTableData: allTableData, schemaIsLoading: schemaIsLoading })) }))] }), (0, jsx_runtime_1.jsx)(EditAddViewModal, { viewName: editName, viewQuery: editViewQuery, viewId: editViewId, editModalIsOpen: editModalIsOpen, closeEditModal: closeEditModal, submit: handleModalSubmit, state: state, onEditViewClick: () => setEditQueryView(true) })] }));
325
+ : null }, 'edit-view-query')) : ((0, jsx_runtime_1.jsx)(CreateEditSqlView_1.default, { containerStyle: {}, initialSqlView: initialSqlView, closeEditView: () => setEditQueryView(false), addEditView: (request, name, query, id, columns) => {
326
+ handleEditAddView(request, name, query, id, columns);
327
+ }, setProvider: (provider) => { setProvider(provider); }, provider: provider, allTableData: allTableData, schemaIsLoading: schemaIsLoading })) }))] }), (0, jsx_runtime_1.jsx)(modals_1.PromoteViewModal, { clientId: state.client._id, client: state.client, clients: state.clients, isOpen: isPromoteViewModalOpen, setIsOpen: setIsPromoteViewModalOpen, ModalComponent: UiComponents_1.MemoizedModal, views: tables || [], parentRef: parentRef }), (0, jsx_runtime_1.jsx)(EditAddViewModal, { viewName: editName, viewQuery: editViewQuery, viewId: editViewId, editModalIsOpen: editModalIsOpen, customFieldInfo: customFieldInfo, closeEditModal: closeEditModal, submit: async (submitRequest, query, name, id, columns, customFieldInfo) => {
328
+ if (submitRequest !== 'delete') {
329
+ setSubmittingView(true);
330
+ }
331
+ await handleModalSubmit(submitRequest, query, name, id, columns, customFieldInfo);
332
+ setSubmittingView(false);
333
+ }, state: state, onEditViewClick: () => setEditQueryView(true), isLoading: submittingView })] }));
242
334
  }
243
335
  exports.default = SQLViewManager;
244
- function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, closeEditModal, submit, state, onEditViewClick = () => { }, }) {
336
+ function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, customFieldInfo, closeEditModal, submit, state, onEditViewClick = () => { }, isLoading, }) {
245
337
  const [name, setName] = (0, react_1.useState)(viewName);
246
338
  const [query, setQuery] = (0, react_1.useState)(viewQuery);
247
339
  const [id, setId] = (0, react_1.useState)(viewId);
340
+ const [useCustomField, setUseCustomField] = (0, react_1.useState)(customFieldInfo ? true : false);
341
+ const [customFieldType, setCustomFieldType] = (0, react_1.useState)(customFieldInfo ? customFieldInfo.type : 'eav');
342
+ const [customFieldQuery, setCustomFieldQuery] = (0, react_1.useState)(customFieldInfo ? customFieldInfo.query : '');
343
+ const [runQueryButtonLoading, setRunQueryButtonLoading] = (0, react_1.useState)(false);
344
+ const [tableData, setTableData] = (0, react_1.useState)(undefined);
345
+ const [errorInfo, setErrorInfo] = (0, react_1.useState)({ show: false, message: '' });
346
+ (0, react_1.useEffect)(() => {
347
+ setCustomFieldQuery(customFieldInfo?.query || '');
348
+ setCustomFieldType(customFieldInfo?.type || 'eav');
349
+ setUseCustomField(customFieldInfo ? true : false);
350
+ }, [customFieldInfo]);
248
351
  (0, react_1.useEffect)(() => {
249
352
  setName(viewName);
250
353
  }, [viewName]);
@@ -254,7 +357,15 @@ function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, closeE
254
357
  (0, react_1.useEffect)(() => {
255
358
  setId(viewId);
256
359
  }, [viewId]);
257
- return ((0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: editModalIsOpen, close: closeEditModal, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col p-[6px]", children: [(0, jsx_runtime_1.jsxs)("div", { style: {
360
+ return ((0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: editModalIsOpen, close: () => {
361
+ setUseCustomField(false);
362
+ setCustomFieldType('eav');
363
+ setCustomFieldQuery('');
364
+ setTableData(undefined);
365
+ setErrorInfo({ show: false, message: '' });
366
+ setName('');
367
+ closeEditModal();
368
+ }, children: (0, jsx_runtime_1.jsxs)("div", { style: { height: '100%', overflow: 'scroll', width: '100%' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
258
369
  display: 'flex',
259
370
  flexDirection: 'row',
260
371
  alignItems: 'center',
@@ -287,7 +398,6 @@ function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, closeE
287
398
  fontWeight: 'medium',
288
399
  height: '120px',
289
400
  boxShadow: '0 1px 2px 0 rgba(0,0,0,.05)',
290
- width: '500px',
291
401
  background: 'linear-gradient(white 50%, transparent)',
292
402
  color: state.theme?.primaryTextColor,
293
403
  borderWidth: '1px',
@@ -321,7 +431,81 @@ function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, closeE
321
431
  } }), viewName && ((0, jsx_runtime_1.jsx)("div", { style: { position: 'absolute', bottom: '10px', right: '10px' }, children: (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedSecondaryButton, { label: 'Edit Query ↗', onClick: () => {
322
432
  closeEditModal();
323
433
  onEditViewClick();
324
- } }) }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
434
+ } }) }))] }), (0, jsx_runtime_1.jsx)("br", {}), ['65d65b57cdd8ae70a5648d9c', '665610862cf7a3000be66453'].includes(state.client._id) &&
435
+ state.client.databaseType === 'PostgreSQL' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h3", { style: {
436
+ fontWeight: '600',
437
+ fontSize: '14px',
438
+ marginBottom: '6px',
439
+ color: '#212121',
440
+ }, children: "Custom fields" }), (0, jsx_runtime_1.jsx)(TogglePrimitive_1.default, { value: useCustomField, onClick: () => {
441
+ setUseCustomField((useCustomField) => !useCustomField);
442
+ } }), (0, jsx_runtime_1.jsx)("br", {}), useCustomField && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h3", { style: {
443
+ fontWeight: '600',
444
+ fontSize: '14px',
445
+ marginBottom: '6px',
446
+ marginTop: '20px',
447
+ color: '#212121',
448
+ }, children: "Custom field type" }), (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { theme: state.theme, value: customFieldType, onChange: (e) => {
449
+ setCustomFieldType(e);
450
+ }, left: 'EAV', right: 'JSON' }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("h3", { style: {
451
+ fontWeight: '600',
452
+ fontSize: '14px',
453
+ marginBottom: '6px',
454
+ color: '#212121',
455
+ }, children: "Custom field query" }), (0, jsx_runtime_1.jsx)("h3", { style: {
456
+ fontWeight: '400',
457
+ fontSize: '14px',
458
+ marginBottom: '20px',
459
+ color: '#212121',
460
+ }, children: customFieldType === 'eav'
461
+ ? `A table of custom fields. It must have these columns: ref_table, ref_id, field, value, type, ${state.client.customerFieldName.replaceAll('"', '')}.`
462
+ : `A table of custom fields. It must have these columns: ref_table, ref_column, field, ${state.client.customerFieldName.replaceAll('"', '')}.` }), (0, jsx_runtime_1.jsx)(SqlTextEditor_1.default, { value: customFieldQuery, setValue: (e) => {
463
+ setCustomFieldQuery(e);
464
+ }, setEditorMounted: () => { }, containerStyle: {
465
+ width: 800,
466
+ }, previousProvider: null, height: '150px', schema: [] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedButton, { label: 'Run query', onClick: async () => {
467
+ if (/limit\s+\d+\s*;?\s*$/i.test(customFieldQuery)) {
468
+ setErrorInfo({
469
+ show: true,
470
+ message: 'Error: Please remove the limit at the end of your query.',
471
+ });
472
+ return;
473
+ }
474
+ setErrorInfo({ show: false, message: '' });
475
+ setRunQueryButtonLoading(true);
476
+ const getSqlResults = await (0, ConnectionClient_1.getSqlViewData)(state.client._id, customFieldQuery, state.client.databaseType, state.queryEndpoint);
477
+ if (!getSqlResults.success) {
478
+ setErrorInfo({
479
+ show: true,
480
+ message: getSqlResults.error,
481
+ });
482
+ }
483
+ else {
484
+ setErrorInfo({ show: false, message: '' });
485
+ setTableData(getSqlResults);
486
+ }
487
+ setRunQueryButtonLoading(false);
488
+ } }), (0, jsx_runtime_1.jsx)("br", {}), runQueryButtonLoading && ((0, jsx_runtime_1.jsx)("div", { style: {
489
+ height: '250px',
490
+ width: '100%',
491
+ display: 'flex',
492
+ justifyContent: 'center',
493
+ alignItems: 'center',
494
+ }, children: (0, jsx_runtime_1.jsx)(UiComponents_1.LoadingSpinner, {}) })), !errorInfo.show && tableData && !runQueryButtonLoading && ((0, jsx_runtime_1.jsx)(react_2.Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: {
495
+ height: '250px',
496
+ maxWidth: '800px',
497
+ paddingTop: '20px',
498
+ }, hideCSVDownloadButton: true })), errorInfo.show && ((0, jsx_runtime_1.jsx)("div", { style: {
499
+ fontSize: 15,
500
+ fontWeight: '400',
501
+ paddingTop: '20px',
502
+ }, children: (0, jsx_runtime_1.jsx)("div", { style: {
503
+ padding: 30,
504
+ background: 'rgba(0,0,0,0.02)',
505
+ display: 'inline-block',
506
+ flex: 0,
507
+ borderRadius: 6,
508
+ }, children: errorInfo.message }) }))] }))] })), (0, jsx_runtime_1.jsxs)("div", { style: {
325
509
  display: 'flex',
326
510
  flexDirection: 'row',
327
511
  alignItems: 'center',
@@ -333,6 +517,47 @@ function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, closeE
333
517
  alert('Please enter a name');
334
518
  return;
335
519
  }
336
- submit(viewName ? 'edit' : 'add', query, name, id);
337
- }, label: viewName ? 'Save changes' : 'Create view' })] })] }) }));
520
+ if (useCustomField) {
521
+ const fields = tableData?.fields.map((field) => field.field);
522
+ const missingFields = [];
523
+ if (!fields) {
524
+ alert('Custom field query is missing required columns');
525
+ return;
526
+ }
527
+ if (customFieldType === 'eav') {
528
+ // make sure the tableData has the required columns
529
+ [
530
+ 'ref_table',
531
+ 'ref_id',
532
+ 'field',
533
+ 'value',
534
+ 'type',
535
+ state.client.customerFieldName.replaceAll('"', ''),
536
+ ].forEach((requiredField) => {
537
+ if (!fields.includes(requiredField)) {
538
+ missingFields.push(requiredField);
539
+ }
540
+ });
541
+ }
542
+ else {
543
+ [
544
+ 'ref_table',
545
+ 'field',
546
+ 'ref_column',
547
+ state.client.customerFieldName.replaceAll('"', ''),
548
+ ].forEach((requiredField) => {
549
+ if (!fields.includes(requiredField)) {
550
+ missingFields.push(requiredField);
551
+ }
552
+ });
553
+ }
554
+ if (missingFields.length > 0) {
555
+ alert(`Custom field query is missing required columns: ${missingFields.join(', ')}`);
556
+ return;
557
+ }
558
+ }
559
+ submit(viewName ? 'edit' : 'add', query, name, id, undefined, useCustomField
560
+ ? { type: customFieldType, query: customFieldQuery }
561
+ : undefined);
562
+ }, label: viewName ? 'Save changes' : 'Create view', isLoading: isLoading })] })] }) }));
338
563
  }
@@ -0,0 +1,2 @@
1
+ export declare function processJoinASTWithDuplicateColumns(duplicateColumnsNames: string[], tableNames: string[], schema: any, ast: any): any;
2
+ //# sourceMappingURL=astProcessing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,kCAAkC,CAChD,qBAAqB,EAAE,MAAM,EAAE,EAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,GAAG,EACX,GAAG,EAAE,GAAG,OAsCT"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processJoinASTWithDuplicateColumns = void 0;
4
+ function processJoinASTWithDuplicateColumns(duplicateColumnsNames, tableNames, schema, ast) {
5
+ const columns = [];
6
+ schema.forEach((table) => {
7
+ if (tableNames.includes(table.tableName)) {
8
+ table.columns.forEach((column) => {
9
+ let tableName = table.tableName;
10
+ if (table.tableName.includes('.')) {
11
+ tableName = table.tableName.split('.')[1] || table.tableName;
12
+ }
13
+ if (duplicateColumnsNames.includes(column.columnName)) {
14
+ columns.push({
15
+ type: 'expr',
16
+ as: `${tableName}_${column.columnName}`,
17
+ expr: {
18
+ type: 'column_ref',
19
+ table: tableName,
20
+ column: column.columnName,
21
+ },
22
+ });
23
+ }
24
+ else {
25
+ columns.push({
26
+ type: 'expr',
27
+ as: null,
28
+ expr: {
29
+ type: 'column_ref',
30
+ table: tableName,
31
+ column: column.columnName,
32
+ },
33
+ });
34
+ }
35
+ });
36
+ }
37
+ });
38
+ ast.columns = columns;
39
+ return ast;
40
+ }
41
+ exports.processJoinASTWithDuplicateColumns = processJoinASTWithDuplicateColumns;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=astProcessing.uspec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astProcessing.uspec.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.uspec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const astProcessing_1 = require("./astProcessing");
4
+ describe('astProcessing', () => {
5
+ describe('processJoinASTWithDuplicateColumns', () => {
6
+ it('should return a new ast object with unambiguous columns', () => {
7
+ const dummyAst = { where: 'dummy where' };
8
+ const tableNames = ['table1', 'table2'];
9
+ const duplicateColumns = ['amount'];
10
+ const schema = [
11
+ {
12
+ tableName: 'table1',
13
+ columns: [{ columnName: 'amount' }, { columnName: 'name' }],
14
+ },
15
+ {
16
+ tableName: 'table2',
17
+ columns: [{ columnName: 'amount' }, { columnName: 'other_name' }],
18
+ },
19
+ ];
20
+ const resultAst = (0, astProcessing_1.processJoinASTWithDuplicateColumns)(duplicateColumns, tableNames, schema, dummyAst);
21
+ expect(resultAst.columns.length).toEqual(4);
22
+ expect(resultAst.columns[0].as).toEqual('table1_amount');
23
+ expect(resultAst.columns[1].as).toEqual(null);
24
+ });
25
+ });
26
+ });
@@ -0,0 +1,3 @@
1
+ export declare function convertFieldTypeToJSType(fieldType: string): string;
2
+ export declare function processColumnReference(column: string, databaseType: string): string;
3
+ //# sourceMappingURL=columnProcessing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAa1E"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processColumnReference = exports.convertFieldTypeToJSType = void 0;
4
+ function convertFieldTypeToJSType(fieldType) {
5
+ switch (fieldType) {
6
+ case 'bool':
7
+ return 'bool';
8
+ case 'int8':
9
+ case 'int2':
10
+ case 'int4':
11
+ case 'float4':
12
+ case 'float8':
13
+ case 'numeric':
14
+ return 'number';
15
+ case 'date':
16
+ case 'time':
17
+ case 'timestamptz':
18
+ case 'timestamp':
19
+ return 'date';
20
+ case 'interval':
21
+ case 'varchar':
22
+ case 'text':
23
+ default:
24
+ return 'string';
25
+ }
26
+ }
27
+ exports.convertFieldTypeToJSType = convertFieldTypeToJSType;
28
+ function processColumnReference(column, databaseType) {
29
+ if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
30
+ const columnParts = column.split('.');
31
+ if (columnParts.length > 1) {
32
+ return `"${columnParts[0]}"."${columnParts[1]}"`;
33
+ }
34
+ return `"${column}"`;
35
+ }
36
+ const columnParts = column.split('.');
37
+ if (columnParts.length > 1) {
38
+ return `\`${columnParts[0]}\`.\`${columnParts[1]}\``;
39
+ }
40
+ return `\`${column}\``;
41
+ }
42
+ exports.processColumnReference = processColumnReference;
@@ -1,4 +1,4 @@
1
- export declare const editSQLView: (editName: string, editViewQuery: string, editViewId: string, state: any) => Promise<any>;
2
- export declare const addSqlView: (name: string, editViewQuery: string, state: any) => Promise<any>;
1
+ export declare const editSQLView: (editName: string, editViewQuery: string, editViewId: string, customFieldInfo: any, state: any) => Promise<any>;
2
+ export declare const addSqlView: (name: string, editViewQuery: string, customFieldInfo: any, state: any) => Promise<any>;
3
3
  export declare const deleteSQLView: (id: string, state: any) => Promise<any>;
4
4
  //# sourceMappingURL=dataEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataEditor.d.ts","sourceRoot":"","sources":["../../../src/utils/dataEditor.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,aACZ,MAAM,iBACD,MAAM,cACT,MAAM,SACX,GAAG,iBAsDX,CAAC;AAEF,eAAO,MAAM,UAAU,SACf,MAAM,iBACG,MAAM,SACd,GAAG,iBA+CX,CAAC;AAEF,eAAO,MAAM,aAAa,OAAc,MAAM,SAAS,GAAG,iBAmCzD,CAAC"}
1
+ {"version":3,"file":"dataEditor.d.ts","sourceRoot":"","sources":["../../../src/utils/dataEditor.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,aACZ,MAAM,iBACD,MAAM,cACT,MAAM,mBACD,GAAG,SACb,GAAG,iBAuDX,CAAC;AAEF,eAAO,MAAM,UAAU,SACf,MAAM,iBACG,MAAM,mBACJ,GAAG,SACb,GAAG,iBAgDX,CAAC;AAEF,eAAO,MAAM,aAAa,OAAc,MAAM,SAAS,GAAG,iBAmCzD,CAAC"}