@quillsql/admin 1.6.0 → 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 (151) hide show
  1. package/dist/cjs/Admin.d.ts.map +1 -1
  2. package/dist/cjs/Admin.js +24 -11
  3. package/dist/cjs/AdminProvider.d.ts +2 -1
  4. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  5. package/dist/cjs/AdminProvider.js +13 -24
  6. package/dist/cjs/api/ConnectionClient.d.ts +8 -0
  7. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  8. package/dist/cjs/api/ConnectionClient.js +42 -8
  9. package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
  10. package/dist/cjs/components/DashboardSelectPopover.js +20 -3
  11. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  12. package/dist/cjs/components/DropDownMenuWithLabel.js +4 -35
  13. package/dist/cjs/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  14. package/dist/cjs/components/EmptyDashboardComponent/index.js +11 -9
  15. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  16. package/dist/cjs/components/QuillSelect.js +2 -2
  17. package/dist/cjs/components/SegmentedControl.d.ts +4 -2
  18. package/dist/cjs/components/SegmentedControl.d.ts.map +1 -1
  19. package/dist/cjs/components/SegmentedControl.js +22 -16
  20. package/dist/cjs/components/SqlTextEditor.d.ts +9 -1
  21. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
  22. package/dist/cjs/components/SqlTextEditor.js +60 -12
  23. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  24. package/dist/cjs/components/UiComponents.js +11 -2
  25. package/dist/cjs/constants/dataTypes.d.ts +2 -0
  26. package/dist/cjs/constants/dataTypes.d.ts.map +1 -0
  27. package/dist/cjs/constants/dataTypes.js +21 -0
  28. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  29. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +9 -17
  30. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  31. package/dist/cjs/forms/client_onboard/CreateSqlViews.js +24 -11
  32. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts +4 -1
  33. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  34. package/dist/cjs/forms/sql_views/CreateEditSqlView.js +87 -36
  35. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
  36. package/dist/cjs/modals/EditFiltersModal.js +13 -3
  37. package/dist/cjs/modals/NewDashboardModal.js +2 -2
  38. package/dist/cjs/modals/PromoteDashModal.js +2 -2
  39. package/dist/cjs/modals/PromoteViewModal.d.ts +2 -1
  40. package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
  41. package/dist/cjs/modals/PromoteViewModal.js +46 -36
  42. package/dist/cjs/primitives/TextInputPrimitive.d.ts +1 -0
  43. package/dist/cjs/primitives/TextInputPrimitive.d.ts.map +1 -1
  44. package/dist/cjs/primitives/TextInputPrimitive.js +35 -20
  45. package/dist/cjs/public_components/CreateEnvironment.d.ts +2 -1
  46. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  47. package/dist/cjs/public_components/CreateEnvironment.js +4 -1
  48. package/dist/cjs/public_components/DashboardBuilder.d.ts.map +1 -1
  49. package/dist/cjs/public_components/DashboardBuilder.js +67 -156
  50. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  51. package/dist/cjs/public_components/DashboardManager.js +72 -73
  52. package/dist/cjs/public_components/SQLViewManager.d.ts +1 -0
  53. package/dist/cjs/public_components/SQLViewManager.d.ts.map +1 -1
  54. package/dist/cjs/public_components/SQLViewManager.js +216 -40
  55. package/dist/cjs/utils/astProcessing.d.ts +2 -0
  56. package/dist/cjs/utils/astProcessing.d.ts.map +1 -0
  57. package/dist/cjs/utils/astProcessing.js +41 -0
  58. package/dist/cjs/utils/astProcessing.uspec.d.ts +2 -0
  59. package/dist/cjs/utils/astProcessing.uspec.d.ts.map +1 -0
  60. package/dist/cjs/utils/astProcessing.uspec.js +26 -0
  61. package/dist/cjs/utils/columnProcessing.d.ts +3 -0
  62. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -0
  63. package/dist/cjs/utils/columnProcessing.js +42 -0
  64. package/dist/cjs/utils/dataEditor.d.ts +2 -2
  65. package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
  66. package/dist/cjs/utils/dataEditor.js +4 -2
  67. package/dist/cjs/utils/databases.d.ts +0 -1
  68. package/dist/cjs/utils/databases.d.ts.map +1 -1
  69. package/dist/cjs/utils/databases.js +5 -6
  70. package/dist/cjs/utils/monacoAutocomplete.d.ts +21 -0
  71. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
  72. package/dist/cjs/utils/monacoAutocomplete.js +250 -0
  73. package/dist/cjs/utils/schema.d.ts +5 -0
  74. package/dist/cjs/utils/schema.d.ts.map +1 -1
  75. package/dist/cjs/utils/schema.js +129 -0
  76. package/dist/esm/Admin.d.ts.map +1 -1
  77. package/dist/esm/Admin.js +24 -11
  78. package/dist/esm/AdminProvider.d.ts +2 -1
  79. package/dist/esm/AdminProvider.d.ts.map +1 -1
  80. package/dist/esm/AdminProvider.js +13 -24
  81. package/dist/esm/api/ConnectionClient.d.ts +8 -0
  82. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  83. package/dist/esm/api/ConnectionClient.js +42 -8
  84. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  85. package/dist/esm/components/DashboardSelectPopover.js +20 -3
  86. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  87. package/dist/esm/components/DropDownMenuWithLabel.js +4 -35
  88. package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  89. package/dist/esm/components/EmptyDashboardComponent/index.js +11 -9
  90. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  91. package/dist/esm/components/QuillSelect.js +2 -2
  92. package/dist/esm/components/SegmentedControl.d.ts +4 -2
  93. package/dist/esm/components/SegmentedControl.d.ts.map +1 -1
  94. package/dist/esm/components/SegmentedControl.js +22 -16
  95. package/dist/esm/components/SqlTextEditor.d.ts +9 -1
  96. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
  97. package/dist/esm/components/SqlTextEditor.js +59 -11
  98. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  99. package/dist/esm/components/UiComponents.js +12 -3
  100. package/dist/esm/constants/dataTypes.d.ts +2 -0
  101. package/dist/esm/constants/dataTypes.d.ts.map +1 -0
  102. package/dist/esm/constants/dataTypes.js +18 -0
  103. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  104. package/dist/esm/forms/client_onboard/ConnectDatabase.js +9 -17
  105. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  106. package/dist/esm/forms/client_onboard/CreateSqlViews.js +25 -12
  107. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts +4 -1
  108. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  109. package/dist/esm/forms/sql_views/CreateEditSqlView.js +87 -36
  110. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
  111. package/dist/esm/modals/EditFiltersModal.js +13 -3
  112. package/dist/esm/modals/NewDashboardModal.js +2 -2
  113. package/dist/esm/modals/PromoteDashModal.js +2 -2
  114. package/dist/esm/modals/PromoteViewModal.d.ts +2 -1
  115. package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
  116. package/dist/esm/modals/PromoteViewModal.js +50 -40
  117. package/dist/esm/primitives/TextInputPrimitive.d.ts +1 -0
  118. package/dist/esm/primitives/TextInputPrimitive.d.ts.map +1 -1
  119. package/dist/esm/primitives/TextInputPrimitive.js +33 -21
  120. package/dist/esm/public_components/CreateEnvironment.d.ts +2 -1
  121. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  122. package/dist/esm/public_components/CreateEnvironment.js +4 -1
  123. package/dist/esm/public_components/DashboardBuilder.d.ts.map +1 -1
  124. package/dist/esm/public_components/DashboardBuilder.js +68 -157
  125. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  126. package/dist/esm/public_components/DashboardManager.js +73 -74
  127. package/dist/esm/public_components/SQLViewManager.d.ts +1 -0
  128. package/dist/esm/public_components/SQLViewManager.d.ts.map +1 -1
  129. package/dist/esm/public_components/SQLViewManager.js +216 -42
  130. package/dist/esm/utils/astProcessing.d.ts +2 -0
  131. package/dist/esm/utils/astProcessing.d.ts.map +1 -0
  132. package/dist/esm/utils/astProcessing.js +37 -0
  133. package/dist/esm/utils/astProcessing.uspec.d.ts +2 -0
  134. package/dist/esm/utils/astProcessing.uspec.d.ts.map +1 -0
  135. package/dist/esm/utils/astProcessing.uspec.js +24 -0
  136. package/dist/esm/utils/columnProcessing.d.ts +3 -0
  137. package/dist/esm/utils/columnProcessing.d.ts.map +1 -0
  138. package/dist/esm/utils/columnProcessing.js +37 -0
  139. package/dist/esm/utils/dataEditor.d.ts +2 -2
  140. package/dist/esm/utils/dataEditor.d.ts.map +1 -1
  141. package/dist/esm/utils/dataEditor.js +4 -2
  142. package/dist/esm/utils/databases.d.ts +0 -1
  143. package/dist/esm/utils/databases.d.ts.map +1 -1
  144. package/dist/esm/utils/databases.js +5 -6
  145. package/dist/esm/utils/monacoAutocomplete.d.ts +21 -0
  146. package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
  147. package/dist/esm/utils/monacoAutocomplete.js +245 -0
  148. package/dist/esm/utils/schema.d.ts +5 -0
  149. package/dist/esm/utils/schema.d.ts.map +1 -1
  150. package/dist/esm/utils/schema.js +126 -1
  151. package/package.json +3 -2
@@ -50,6 +50,7 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
50
50
  reader.readAsText(file);
51
51
  };
52
52
  const testConnectionAndFormClient = async () => {
53
+ setShowError(false);
53
54
  const connectionString = formConnectionString(databaseConnectionDetails);
54
55
  const result = await testConnectionString(connectionString, databaseConnectionDetails.type, clientId);
55
56
  if (result.success) {
@@ -164,28 +165,19 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
164
165
  ...databaseConnectionDetails,
165
166
  [key]: e.target.value,
166
167
  });
167
- }, value: value, disabled: key === 'type' })] }, key));
168
- }) }) })] })) : (_jsx("div", { style: { minWidth: 790 }, children: _jsxs("div", { id: "database-details-form", style: {
168
+ }, value: value, disabled: key === 'type', password: key === 'password' ? true : false })] }, key));
169
+ }) }) })] })) : (_jsx("div", { style: { minWidth: 790 }, children: _jsx("div", { id: "database-details-form", style: {
169
170
  display: 'grid',
170
171
  gridTemplateColumns: 'repeat(1, 1fr)',
171
172
  gap: '20px',
172
173
  justifyContent: 'space-between',
173
174
  marginTop: '16px',
174
- }, children: [_jsxs("div", { children: [_jsx("h2", { style: {
175
- ...header2Style,
176
- fontWeight: '600',
177
- }, children: "Project ID" }), _jsx(TextInputPrimitive, { onChange: (e) => {
178
- setConnectionDetails({
179
- ...databaseConnectionDetails,
180
- companyTag: e.target.value,
181
- });
182
- setCompanyTag(e.target.value);
183
- }, value: companyTag })] }), _jsxs("div", { children: [_jsx("h2", { style: { ...header2Style, fontWeight: '600' }, children: "Submit File" }), _jsxs("div", { children: [_jsx("input", { type: "file", accept: ".json", onChange: handleFileChange, style: { display: 'none' }, id: "fileInput", ref: myInputRef }), _jsxs("div", { style: {
184
- display: 'flex',
185
- flexDirection: 'row',
186
- gap: 12,
187
- alignItems: 'center',
188
- }, children: [_jsx(ButtonPrimitive, { onClick: handleButtonClick, label: 'Upload JSON' }), _jsx("span", { style: { ...header2Style, fontWeight: '600' }, children: fileLabel })] })] })] })] }) })), _jsxs("div", { style: {
175
+ }, children: _jsxs("div", { children: [_jsx("h2", { style: { ...header2Style, fontWeight: '600' }, children: "Service Account Json" }), _jsxs("div", { children: [_jsx("input", { type: "file", accept: ".json", onChange: handleFileChange, style: { display: 'none' }, id: "fileInput", ref: myInputRef }), _jsxs("div", { style: {
176
+ display: 'flex',
177
+ flexDirection: 'row',
178
+ gap: 12,
179
+ alignItems: 'center',
180
+ }, children: [_jsx(ButtonPrimitive, { onClick: handleButtonClick, label: 'Upload JSON' }), _jsx("span", { style: { ...header2Style, fontWeight: '600' }, children: fileLabel })] })] })] }) }) })), _jsxs("div", { style: {
189
181
  width: '100%',
190
182
  display: 'flex',
191
183
  justifyContent: 'space-between',
@@ -1 +1 @@
1
- {"version":3,"file":"CreateSqlViews.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateSqlViews.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAY3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAwB,MAAM,uBAAuB,CAAC;AAS7E,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,KAAK,GACN,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;CACZ,2CA0ZA;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,QAAQ,EACR,UAAU,EACV,SAAS,GACV,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,2CAiDA"}
1
+ {"version":3,"file":"CreateSqlViews.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateSqlViews.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAW3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQvD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,KAAK,GACN,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;CACZ,2CA+aA;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,QAAQ,EACR,UAAU,EACV,SAAS,GACV,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,2CAkDA"}
@@ -5,7 +5,9 @@ import { createSQLView, getQueryFromAiWithConnection, getSqlViewData, } from '..
5
5
  import SqlViewTile from '../../components/SqlViewTile';
6
6
  import SqlTextEditor from '../../components/SqlTextEditor';
7
7
  import { SchemaListComponent, Table } from '@quillsql/react';
8
- import { LoadingSpinner, } from '../../components/UiComponents';
8
+ import { LoadingSpinner } from '../../components/UiComponents';
9
+ import { getDuplicateColumns } from '../../public_components/SQLViewManager';
10
+ import { processColumnReference } from '../../utils/columnProcessing';
9
11
  export default function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByTable, environmentDetails, allSchemaInfo, domainName, completeOnboarding, clientId, state, }) {
10
12
  const [selectedTable, setSelectedTable] = useState(undefined);
11
13
  const [queryInfo, setQueryInfo] = useState({
@@ -42,12 +44,14 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
42
44
  };
43
45
  const handleClickSchemaItem = async (event) => {
44
46
  const name = event.target.textContent;
45
- if (queryInfo.query && queryInfo.query.length > 0) {
46
- await navigator.clipboard.writeText(name || '');
47
+ if (!name) {
48
+ return;
47
49
  }
48
- else {
49
- setQueryInfo({ name: queryInfo.name, query: `SELECT * FROM ${name}` });
50
+ const newQuery = `SELECT * FROM ${processColumnReference(name, environmentDetails?.type)};`;
51
+ if (!queryInfo.query || queryInfo.query.length === 0) {
52
+ setQueryInfo({ name: queryInfo.name, query: newQuery });
50
53
  }
54
+ await navigator.clipboard.writeText(newQuery);
51
55
  };
52
56
  useEffect(() => {
53
57
  window.scrollTo({
@@ -59,6 +63,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
59
63
  ...containerStyle,
60
64
  display: 'flex',
61
65
  flexDirection: 'column',
66
+ minWidth: 900,
62
67
  }, id: "create-sql-view", children: [_jsxs("div", { style: {
63
68
  padding: 20,
64
69
  paddingBottom: 12,
@@ -87,10 +92,11 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
87
92
  setDisplayedTableData(columnsByTable.filter((table) => table.tableName
88
93
  .toLowerCase()
89
94
  .includes(e.target.value.toLowerCase().trim())));
90
- }, value: tableSearchQuery, width: "100%" }) }), _jsx(SchemaListComponent, { schema: displayedTableData, theme: state.theme, width: '300px', loading: false, LoadingComponent: LoadingSpinner, onClick: handleClickSchemaItem })] }), _jsxs("div", { id: "form-editor-table", style: {
95
+ }, value: tableSearchQuery, width: "180px" }) }), _jsx(SchemaListComponent, { schema: displayedTableData, theme: state.theme, width: '300px', loading: false, LoadingComponent: LoadingSpinner, onClick: handleClickSchemaItem })] }), _jsxs("div", { id: "form-editor-table", style: {
91
96
  display: 'flex',
92
97
  flexDirection: 'column',
93
- width: 'calc(100% - 300px)',
98
+ width: 'calc(100% - 600px)',
99
+ minWidth: 300,
94
100
  }, children: [_jsxs("div", { style: {
95
101
  display: 'flex',
96
102
  flexDirection: 'row',
@@ -111,7 +117,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
111
117
  setAskAIButtonLoading(false);
112
118
  }, style: { width: '90px' } })] }), _jsx(SqlTextEditor, { value: queryInfo.query, setValue: (e) => {
113
119
  setQueryInfo({ name: queryInfo.name, query: e });
114
- }, containerStyle: { paddingLeft: 16, paddingRight: 16 } }), _jsxs("div", { style: {
120
+ }, setEditorMounted: () => { }, containerStyle: { paddingLeft: 16, paddingRight: 16 }, schema: displayedTableData, databaseType: environmentDetails?.type, previousProvider: null }), _jsxs("div", { style: {
115
121
  display: 'flex',
116
122
  flexDirection: 'row',
117
123
  justifyContent: 'space-between',
@@ -142,7 +148,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
142
148
  }, children: [_jsx(Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: {
143
149
  height: 'calc(100vh - 589px)',
144
150
  width: '100%',
145
- }, hideCSVDownloadButton: true }), _jsxs("div", { style: {
151
+ }, hideCSVDownloadButton: true, isLoading: runQueryButtonLoading }), _jsxs("div", { style: {
146
152
  width: '100%',
147
153
  display: 'flex',
148
154
  justifyContent: 'space-between',
@@ -153,7 +159,14 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
153
159
  color: 'red',
154
160
  paddingTop: '12px',
155
161
  // textTransform: 'capitalize',
156
- }, children: sqlQueryError.msg })) : (_jsx("div", {})), _jsx(ButtonPrimitive, { label: "Add SQL View", onClick: () => addSqlView(false) })] })] }))] }), _jsxs("div", { style: {
162
+ }, children: sqlQueryError.msg })) : (_jsx("div", {})), _jsx(ButtonPrimitive, { label: "Add SQL View", onClick: () => {
163
+ const duplicateColumns2 = getDuplicateColumns(tableData?.fields);
164
+ if (duplicateColumns2.length > 0) {
165
+ alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
166
+ return;
167
+ }
168
+ addSqlView(false);
169
+ } })] })] }))] }), _jsxs("div", { style: {
157
170
  // width: '30%',
158
171
  background: '#fafafa',
159
172
  borderLeft: 'solid 1px #e7e7e7',
@@ -205,7 +218,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
205
218
  paddingRight: 12,
206
219
  background: 'white',
207
220
  borderTop: 'solid 1px #e7e7e7',
208
- }, children: _jsx(ButtonPrimitive, { label: "Go to dashboard", onClick: () => {
221
+ }, children: _jsx(ButtonPrimitive, { label: "Looks good", onClick: () => {
209
222
  completeOnboarding(client);
210
223
  }, style: { width: 276 } }) })) : null] })] }), _jsx(ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addSqlView, foreignKey: allSchemaInfo?.selectedFields.foreignKey, tableName: allSchemaInfo?.selectedFields.table })] }));
211
224
  }
@@ -217,7 +230,7 @@ export function ForeignKeyModal({ isOpen, setIsOpen, override, foreignKey, table
217
230
  fontWeight: 600,
218
231
  color: '#212121',
219
232
  paddingBottom: 14,
220
- }, children: `Organization Foreign Key "${foreignKey}" Not Found` }), _jsxs("div", { style: { marginBottom: '12px' }, children: [`Your organization table `, _jsx("strong", { children: `"${tableName}"` }), ` foreign key `, _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.`"] }), _jsx("br", {}), _jsxs("div", { style: {
233
+ }, children: `Organization Foreign Key "${foreignKey?.replaceAll('"', '')}" Not Found` }), _jsxs("div", { style: { marginBottom: '12px' }, children: [`Your organization table `, _jsx("strong", { children: `"${tableName?.replaceAll('"', '')}"` }), ` foreign key `, _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.`"] }), _jsx("br", {}), _jsxs("div", { style: {
221
234
  display: 'flex',
222
235
  flexDirection: 'row',
223
236
  gap: '12px',
@@ -1,5 +1,6 @@
1
1
  import { ButtonComponentProps } from '@quillsql/react';
2
2
  import { ReactNode } from 'react';
3
+ import { IDisposable } from 'monaco-editor';
3
4
  import { TextInputComponentProps } from '../../components/UiComponents';
4
5
  import { ColumnsByTable } from '../../utils/table';
5
6
  interface CreateEditSqlViewProps {
@@ -18,9 +19,11 @@ interface CreateEditSqlViewProps {
18
19
  }) => JSX.Element;
19
20
  closeEditView: () => void;
20
21
  addEditView: (request: string, query: string, name?: string, id?: string, columns?: any[]) => void;
22
+ setProvider: (provider: IDisposable | null) => void;
23
+ provider: IDisposable | null;
21
24
  allTableData: ColumnsByTable[];
22
25
  schemaIsLoading: boolean;
23
26
  }
24
- 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;
25
28
  export {};
26
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,EAKrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,SAAS,EAKV,MAAM,OAAO,CAAC;AASf,OAAO,EAML,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAEvC,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;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,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,CAgUtC"}
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"}
@@ -7,7 +7,11 @@ import SqlTextEditor from '../../components/SqlTextEditor';
7
7
  import { LoadingSpinner, MemoizedButton, MemoizedHeader, MemoizedTextInput, } from '../../components/UiComponents';
8
8
  import { ForeignKeyModal } from '../client_onboard/CreateSqlViews';
9
9
  import DynamicBanner from '../../components/DynamicBanner';
10
- export default function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, SecondaryButtonComponent, LoadingComponent = () => _jsx(LoadingSpinner, {}), Button = MemoizedButton, TextInput = MemoizedTextInput, Header = MemoizedHeader, allTableData, schemaIsLoading, }) {
10
+ import { getDuplicateColumns } from '../../public_components/SQLViewManager';
11
+ import { processColumnReference } from '../../utils/columnProcessing';
12
+ import { processJoinASTWithDuplicateColumns } from '../../utils/astProcessing';
13
+ import { QUILL_SERVER } from '../../utils/constants';
14
+ export default function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, setProvider, provider, SecondaryButtonComponent, LoadingComponent = () => _jsx(LoadingSpinner, {}), Button = MemoizedButton, TextInput = MemoizedTextInput, Header = MemoizedHeader, allTableData, schemaIsLoading, }) {
11
15
  const [name, setName] = useState(initialSqlView?.name || '');
12
16
  const [editViewQuery, setEditViewQuery] = useState(initialSqlView?.query || '');
13
17
  const [ranViewQuery, setRanViewQuery] = useState(initialSqlView?.query || '');
@@ -19,6 +23,7 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
19
23
  const [overrideFKCheck, setOverrideFKCheck] = useState(false);
20
24
  const [isLoading, setIsLoading] = useState(false);
21
25
  const [tableSearchQuery, setTableSearchQuery] = useState('');
26
+ const [editorMounted, setEditorMounted] = useState(false);
22
27
  const [displayedTableData, setDisplayedTableData] = useState(allTableData);
23
28
  const [errorInfo, setErrorInfo] = useState({ show: false, message: '' });
24
29
  const [tableData, setTableData] = useState(undefined);
@@ -46,15 +51,17 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
46
51
  };
47
52
  const handleClickSchemaItem = async (event) => {
48
53
  const name = event.target.textContent;
49
- if (editViewQuery && editViewQuery.length > 0) {
50
- await navigator.clipboard.writeText(name || '');
54
+ if (!name) {
55
+ return;
51
56
  }
52
- else {
53
- setEditViewQuery(`SELECT * FROM ${name}`);
57
+ const newQuery = `SELECT * FROM ${processColumnReference(name, state.client.databaseType)};`;
58
+ if (!editViewQuery || editViewQuery.length === 0) {
59
+ setEditViewQuery(newQuery);
54
60
  }
61
+ await navigator.clipboard.writeText(newQuery);
55
62
  };
56
- const handleRunQuery = async () => {
57
- const query = editViewQuery;
63
+ const handleRunQuery = async (overrideQuery) => {
64
+ const query = overrideQuery ? overrideQuery : editViewQuery;
58
65
  // If this query has a limit at the end alert the user
59
66
  if (/limit\s+\d+\s*;?\s*$/i.test(query)) {
60
67
  setErrorInfo({
@@ -69,7 +76,7 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
69
76
  setIsLoading(true);
70
77
  setRunQueryButtonLoading(true);
71
78
  setOverrideFKCheck(false);
72
- if (editViewQuery.length === 0) {
79
+ if (query.length === 0) {
73
80
  setErrorInfo({ show: true, message: 'Error: Please enter a query.' });
74
81
  setRunQueryButtonLoading(false);
75
82
  return;
@@ -88,13 +95,39 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
88
95
  // stringify all rows that are either jsonb or json
89
96
  resp.rows = resp.rows.map((row) => {
90
97
  for (const key in row) {
91
- if (typeof row[key] === 'object') {
98
+ if (row[key] !== null && typeof row[key] === 'object') {
92
99
  row[key] = JSON.stringify(row[key]);
93
100
  }
94
101
  }
95
102
  return row;
96
103
  });
97
- setTableData(resp);
104
+ const duplicateColumns = getDuplicateColumns(resp.fields);
105
+ if (duplicateColumns.length > 0) {
106
+ let parsedAST = resp.ast;
107
+ if (Array.isArray(resp.ast)) {
108
+ parsedAST = [0];
109
+ }
110
+ const tableNames = parsedAST.from.map((table) => {
111
+ const db = table.db ? `${table.db}.` : '';
112
+ return `${db}${table.table}`;
113
+ });
114
+ const newAst = processJoinASTWithDuplicateColumns(duplicateColumns, tableNames, allTableData, parsedAST);
115
+ const response = await fetch(`${QUILL_SERVER}/sqlify`, {
116
+ method: 'POST',
117
+ headers: {
118
+ 'Content-Type': 'application/json',
119
+ },
120
+ body: JSON.stringify({
121
+ ast: { ...newAst },
122
+ publicKey: state.client._id,
123
+ }),
124
+ });
125
+ const jsonResponse = await response.json();
126
+ setEditViewQuery(jsonResponse.query);
127
+ await handleRunQuery(jsonResponse.query);
128
+ return;
129
+ }
130
+ setTableData({ fields: resp.fields, rows: resp.rows });
98
131
  setViewAddable(true);
99
132
  setRanViewQuery(query);
100
133
  setIsLoading(false);
@@ -102,7 +135,7 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
102
135
  return (_jsx("div", { style: {
103
136
  ...containerStyle,
104
137
  gap: 6,
105
- height: 'calc(100vh - 188px)',
138
+ height: 'calc(100vh - 130px)',
106
139
  }, children: _jsxs("div", { style: { display: 'flex', height: '100%', flexDirection: 'column' }, children: [_jsx(DynamicBanner, { header: initialSqlView
107
140
  ? `Edit "${initialSqlView.name}" view`
108
141
  : 'Create SQL View', message: initialSqlView
@@ -138,34 +171,52 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
138
171
  gap: 20,
139
172
  flexDirection: 'column',
140
173
  width: 'calc(100% - 250px)',
141
- height: '100%',
174
+ maxHeight: '100%',
142
175
  overflowX: 'hidden',
143
176
  paddingRight: '24px',
144
177
  }, children: [_jsxs("div", { style: {
145
- display: 'flex',
146
- flexDirection: 'row',
147
- alignItems: 'flex-start',
148
- justifyContent: 'space-between',
178
+ overflow: 'auto',
149
179
  gap: 20,
150
- width: '100%',
151
- }, children: [_jsx(TextInput, { onChange: (e) => {
152
- setAIPrompt(e.target.value);
153
- }, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '100%' }), _jsx(Button, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: handleRunSqlPrompt })] }), _jsx(SqlTextEditor, { value: editViewQuery, setValue: (e) => {
154
- setEditViewQuery(e);
155
- } }), _jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: 'Run query', isLoading: runQueryButtonLoading, onClick: handleRunQuery }) }), errorInfo.show ? (_jsx("div", { style: {
156
- fontSize: 15,
157
- fontWeight: '400',
158
- }, children: _jsx("div", { style: {
159
- padding: 30,
160
- background: 'rgba(0,0,0,0.02)',
161
- display: 'inline-block',
162
- flex: 0,
163
- borderRadius: 6,
164
- }, children: errorInfo.message }) })) : null, isLoading && (_jsx("div", { style: {
165
- height: 'calc(100vh - 589px)',
166
- width: '100%',
167
180
  display: 'flex',
168
- justifyContent: 'center',
169
- alignItems: 'center',
170
- }, children: _jsx(LoadingComponent, {}) })), tableData && (_jsx(Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: { height: '360px' } })), viewAddable && (_jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: `${initialSqlView ? 'Save changes' : 'Create view'}`, onClick: () => addEditSqlView(false) }) }))] })] }), _jsx(ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addEditSqlView, foreignKey: state.client.customerFieldName, tableName: state.client.customerTableName })] }) }));
181
+ flexDirection: 'column',
182
+ }, children: [_jsxs("div", { style: {
183
+ display: 'flex',
184
+ flexDirection: 'row',
185
+ alignItems: 'flex-start',
186
+ justifyContent: 'space-between',
187
+ gap: 20,
188
+ width: '100%',
189
+ }, children: [_jsx(TextInput, { onChange: (e) => {
190
+ setAIPrompt(e.target.value);
191
+ }, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '100%' }), _jsx(Button, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: handleRunSqlPrompt })] }), _jsx(SqlTextEditor, { value: editViewQuery, setValue: (e) => {
192
+ setEditViewQuery(e);
193
+ }, setEditorMounted: (didMount) => {
194
+ setEditorMounted(didMount);
195
+ }, setPreviousProvier: (provider) => {
196
+ setProvider(provider);
197
+ }, previousProvider: provider, schema: displayedTableData, databaseType: state.client.databaseType }), editorMounted && (_jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: 'Run query', onClick: () => {
198
+ handleRunQuery();
199
+ } }) })), errorInfo.show ? (_jsx("div", { style: {
200
+ fontSize: 15,
201
+ fontWeight: '400',
202
+ }, children: _jsx("div", { style: {
203
+ padding: 30,
204
+ background: 'rgba(0,0,0,0.02)',
205
+ display: 'inline-block',
206
+ flex: 0,
207
+ borderRadius: 6,
208
+ }, children: errorInfo.message }) })) : null, isLoading && (_jsx("div", { style: {
209
+ height: 'calc(100vh - 589px)',
210
+ width: '100%',
211
+ display: 'flex',
212
+ justifyContent: 'center',
213
+ alignItems: 'center',
214
+ }, children: _jsx(LoadingComponent, {}) })), tableData && (_jsx(Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: { height: '360px', minHeight: 250 } }))] }), viewAddable && (_jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: `${initialSqlView ? 'Save changes' : 'Create view'}`, onClick: () => {
215
+ const duplicateColumns2 = getDuplicateColumns(tableData?.fields);
216
+ if (duplicateColumns2.length > 0) {
217
+ alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
218
+ return;
219
+ }
220
+ addEditSqlView(false);
221
+ } }) }))] })] }), _jsx(ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addEditSqlView, foreignKey: state.client.customerFieldName, tableName: state.client.customerTableName })] }) }));
171
222
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EditFiltersModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditFiltersModal.tsx"],"names":[],"mappings":"AAeA,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,2CA8mBA"}
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"}
@@ -8,6 +8,7 @@ import InputLabel from '../components/InputLabel';
8
8
  import CardSection from '../components/CardSection';
9
9
  import TogglePrimitive from '../primitives/TogglePrimitive';
10
10
  import { SegmentedControl } from '../components/SegmentedControl';
11
+ import { convertFieldTypeToJSType } from '../utils/columnProcessing';
11
12
  export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, client, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, openEditOrderModal, }) {
12
13
  const { state, dispatch } = useAdmin();
13
14
  const [selectedDashboardName, setSelectedDashboardName] = useState('');
@@ -102,6 +103,12 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
102
103
  filter: `${newDateFilter.label} (Date filter)`,
103
104
  });
104
105
  }
106
+ if (chart.chartType === 'pie' && isDateComparison) {
107
+ filterProblems.push({
108
+ chart: chart.name,
109
+ filter: `${newDateFilter.label} (Date comparison)`,
110
+ });
111
+ }
105
112
  });
106
113
  }
107
114
  updatedFilters.forEach((filter) => {
@@ -118,7 +125,7 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
118
125
  }
119
126
  const url = `${QUILL_SERVER}/dashfilter/${client._id}/`;
120
127
  const body = {
121
- newDashboardName: selectedDashboardName,
128
+ newDashboardName: selectedDashboardName.trim(),
122
129
  filters: updatedFilters,
123
130
  dateFilter: newDateFilter
124
131
  ? {
@@ -127,7 +134,9 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
127
134
  primaryRange: initialRange,
128
135
  }
129
136
  : null,
130
- name: selectedDashboard.name,
137
+ name: selectedDashboard.name
138
+ ? selectedDashboard.name.trim()
139
+ : selectedDashboardName.trim(),
131
140
  databaseType: state.client.databaseType,
132
141
  };
133
142
  const headers = {
@@ -167,6 +176,7 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
167
176
  body: JSON.stringify({
168
177
  clientId: client._id,
169
178
  databaseType: state.client.databaseType,
179
+ dashboardName: selectedDashboard.name,
170
180
  }),
171
181
  });
172
182
  setIsOpen(false);
@@ -291,7 +301,7 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
291
301
  ? state.tables
292
302
  .find((table) => table.name === filter.table)
293
303
  ?.columns.filter((column) => {
294
- return column.fieldType === 'varchar';
304
+ return (convertFieldTypeToJSType(column.fieldType) === 'string');
295
305
  })
296
306
  .map((column) => {
297
307
  return {
@@ -98,14 +98,14 @@ export function NewDashboardModal({ isOpen, client, setIsOpen, onSave, ModalComp
98
98
  }
99
99
  const url = `${QUILL_SERVER}/dashfilter/${client._id}/`;
100
100
  const body = {
101
- newDashboardName: selectedDashboardName,
101
+ newDashboardName: selectedDashboardName.trim(),
102
102
  filters: updatedFilters,
103
103
  dateFilter: showDateFilter && {
104
104
  ...newDateFilter,
105
105
  comparison: isDateComparison,
106
106
  primaryRange: initialRange,
107
107
  },
108
- name: selectedDashboardName,
108
+ name: selectedDashboardName.trim(),
109
109
  };
110
110
  const headers = {
111
111
  'Content-Type': 'application/json',
@@ -45,7 +45,7 @@ const createStyles = (theme) => ({
45
45
  marginTop: '0px',
46
46
  marginBottom: '4px',
47
47
  fontWeight: theme.labelFontWeight,
48
- color: theme.secondaryTextColor,
48
+ color: theme.primaryTextColor,
49
49
  },
50
50
  group: {
51
51
  display: 'flex',
@@ -105,7 +105,7 @@ export default function PromoteDashModal({ ModalComponent, isOpen, setIsOpen, cl
105
105
  }), onChange: setModalSelectedDashboard, value: modalSelectedDashboard, theme: theme }) }) }), _jsxs("div", { style: styles.multiContainer, children: [_jsxs("div", { style: styles.group, children: [_jsx("h1", { style: styles.header, children: "From" }), _jsx("div", { style: styles.text, children: _jsx(DropDownMenu, { items: [client], setSelected: () => { }, selected: client, theme: theme, disabled: true }) })] }), _jsx("div", { style: styles.group, children: _jsx("div", { style: styles.text, children: _jsx(QuillSelectComponent, { label: "To", options: clients
106
106
  .filter((c) => c.name !== client.name)
107
107
  .map((client) => {
108
- return { label: client.name, value: client.name };
108
+ return { label: client.name, value: client };
109
109
  }), onChange: setSelectedToClient, value: selectedToClient, theme: theme }) }) })] }), _jsx("div", { style: {
110
110
  display: 'flex',
111
111
  justifyContent: 'center',
@@ -7,7 +7,8 @@ interface PromoteViewModalProps {
7
7
  client: any;
8
8
  views: any[];
9
9
  clients: any[];
10
+ parentRef: any;
10
11
  }
11
- export default function PromoteViewModal({ ModalComponent, isOpen, setIsOpen, clientId, client, clients, views, }: PromoteViewModalProps): import("react/jsx-runtime").JSX.Element;
12
+ export default function PromoteViewModal({ ModalComponent, isOpen, setIsOpen, clientId, client, clients, views, parentRef, }: PromoteViewModalProps): import("react/jsx-runtime").JSX.Element;
12
13
  export {};
13
14
  //# sourceMappingURL=PromoteViewModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PromoteViewModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteViewModal.tsx"],"names":[],"mappings":";AAKA,UAAU,qBAAqB;IAC7B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB;AA+DD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,cAAc,EACd,MAAM,EACN,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,GACN,EAAE,qBAAqB,2CAsGvB"}
1
+ {"version":3,"file":"PromoteViewModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteViewModal.tsx"],"names":[],"mappings":";AAOA,UAAU,qBAAqB;IAC7B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;CAChB;AAgED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,cAAc,EACd,MAAM,EACN,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,qBAAqB,2CAuGvB"}