@quillsql/admin 1.6.2 → 1.6.4

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 (193) hide show
  1. package/dist/cjs/Admin.d.ts +3 -0
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +20 -18
  4. package/dist/cjs/AdminProvider.d.ts +3 -1
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +3 -2
  7. package/dist/cjs/api/ConnectionClient.d.ts +21 -10
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +138 -31
  10. package/dist/cjs/components/CardSection.d.ts.map +1 -1
  11. package/dist/cjs/components/CardSection.js +4 -2
  12. package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
  13. package/dist/cjs/components/DashboardSelectPopover.js +17 -6
  14. package/dist/cjs/components/DatabaseSelector.d.ts +3 -1
  15. package/dist/cjs/components/DatabaseSelector.d.ts.map +1 -1
  16. package/dist/cjs/components/DatabaseSelector.js +3 -2
  17. package/dist/cjs/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -1
  18. package/dist/cjs/components/DateRangePicker/SingleDatePicker.js +31 -7
  19. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -1
  20. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.js +31 -7
  21. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  22. package/dist/cjs/components/DropDownMenuWithLabel.js +8 -1
  23. package/dist/cjs/components/DynamicBanner.d.ts +3 -2
  24. package/dist/cjs/components/DynamicBanner.d.ts.map +1 -1
  25. package/dist/cjs/components/DynamicBanner.js +7 -2
  26. package/dist/cjs/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  27. package/dist/cjs/components/EmptyDashboardComponent/index.js +3 -2
  28. package/dist/cjs/components/EmptyVirtualTablesComponent.d.ts.map +1 -1
  29. package/dist/cjs/components/EmptyVirtualTablesComponent.js +4 -1
  30. package/dist/cjs/components/FormTooltip.d.ts.map +1 -1
  31. package/dist/cjs/components/FormTooltip.js +4 -1
  32. package/dist/cjs/components/InputLabel.d.ts.map +1 -1
  33. package/dist/cjs/components/InputLabel.js +4 -2
  34. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  35. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +33 -14
  36. package/dist/cjs/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  37. package/dist/cjs/components/InternalDashboard/InternalDashboard.js +14 -1
  38. package/dist/cjs/components/OrgSelect.d.ts +0 -6
  39. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  40. package/dist/cjs/components/OrgSelect.js +32 -44
  41. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +3 -1
  42. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  43. package/dist/cjs/components/QuillMultiSelectWithCombo.js +27 -22
  44. package/dist/cjs/components/QuillPopover.d.ts.map +1 -1
  45. package/dist/cjs/components/QuillPopover.js +4 -5
  46. package/dist/cjs/components/QuillSelect.js +9 -9
  47. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  48. package/dist/cjs/components/QuillSelectWithCombo.js +13 -15
  49. package/dist/cjs/components/Tenants/EditTenant.d.ts.map +1 -1
  50. package/dist/cjs/components/Tenants/EditTenant.js +2 -2
  51. package/dist/cjs/components/UiComponents.d.ts +16 -43
  52. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  53. package/dist/cjs/components/UiComponents.js +161 -33
  54. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  55. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +113 -49
  56. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  57. package/dist/cjs/forms/client_onboard/ConnectSchema.js +3 -1
  58. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  59. package/dist/cjs/forms/client_onboard/CreateVirtualTables.js +6 -2
  60. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.js +1 -0
  61. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.js +1 -0
  62. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  63. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.js +10 -6
  64. package/dist/cjs/hooks/useDatabaseSchema.d.ts.map +1 -1
  65. package/dist/cjs/hooks/useDatabaseSchema.js +6 -1
  66. package/dist/cjs/modals/EditEnvironmentModal.d.ts.map +1 -1
  67. package/dist/cjs/modals/EditEnvironmentModal.js +7 -2
  68. package/dist/cjs/modals/EditFiltersModal.js +7 -7
  69. package/dist/cjs/primitives/ButtonPrimitive.d.ts.map +1 -1
  70. package/dist/cjs/primitives/ButtonPrimitive.js +10 -6
  71. package/dist/cjs/primitives/HeaderPrimitive.d.ts.map +1 -1
  72. package/dist/cjs/primitives/HeaderPrimitive.js +11 -7
  73. package/dist/cjs/primitives/PopoverPrimitive.d.ts.map +1 -1
  74. package/dist/cjs/primitives/PopoverPrimitive.js +3 -1
  75. package/dist/cjs/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  76. package/dist/cjs/primitives/SecondaryButtonPrimitive.js +5 -3
  77. package/dist/cjs/public_components/ChartQueryBuilder.d.ts.map +1 -1
  78. package/dist/cjs/public_components/ChartQueryBuilder.js +13 -3
  79. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  80. package/dist/cjs/public_components/CreateEnvironment.js +20 -15
  81. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  82. package/dist/cjs/public_components/DashboardManager.js +10 -1
  83. package/dist/cjs/public_components/EnvSelectPopover.d.ts +2 -1
  84. package/dist/cjs/public_components/EnvSelectPopover.d.ts.map +1 -1
  85. package/dist/cjs/public_components/EnvSelectPopover.js +19 -7
  86. package/dist/cjs/public_components/VirtualTableManager.d.ts.map +1 -1
  87. package/dist/cjs/public_components/VirtualTableManager.js +32 -8
  88. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  89. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  90. package/dist/cjs/utils/columnProcessing.js +1 -0
  91. package/dist/cjs/utils/constants.d.ts +1 -0
  92. package/dist/cjs/utils/constants.d.ts.map +1 -1
  93. package/dist/cjs/utils/constants.js +5 -1
  94. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  95. package/dist/cjs/utils/dataFetcher.js +0 -1
  96. package/dist/cjs/utils/databases.js +5 -5
  97. package/dist/esm/Admin.d.ts +3 -0
  98. package/dist/esm/Admin.d.ts.map +1 -1
  99. package/dist/esm/Admin.js +20 -18
  100. package/dist/esm/AdminProvider.d.ts +3 -1
  101. package/dist/esm/AdminProvider.d.ts.map +1 -1
  102. package/dist/esm/AdminProvider.js +5 -4
  103. package/dist/esm/api/ConnectionClient.d.ts +21 -10
  104. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  105. package/dist/esm/api/ConnectionClient.js +136 -31
  106. package/dist/esm/components/CardSection.d.ts.map +1 -1
  107. package/dist/esm/components/CardSection.js +4 -2
  108. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  109. package/dist/esm/components/DashboardSelectPopover.js +18 -7
  110. package/dist/esm/components/DatabaseSelector.d.ts +3 -1
  111. package/dist/esm/components/DatabaseSelector.d.ts.map +1 -1
  112. package/dist/esm/components/DatabaseSelector.js +3 -2
  113. package/dist/esm/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -1
  114. package/dist/esm/components/DateRangePicker/SingleDatePicker.js +31 -7
  115. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -1
  116. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.js +31 -7
  117. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  118. package/dist/esm/components/DropDownMenuWithLabel.js +9 -2
  119. package/dist/esm/components/DynamicBanner.d.ts +3 -2
  120. package/dist/esm/components/DynamicBanner.d.ts.map +1 -1
  121. package/dist/esm/components/DynamicBanner.js +7 -2
  122. package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  123. package/dist/esm/components/EmptyDashboardComponent/index.js +3 -2
  124. package/dist/esm/components/EmptyVirtualTablesComponent.d.ts.map +1 -1
  125. package/dist/esm/components/EmptyVirtualTablesComponent.js +4 -1
  126. package/dist/esm/components/FormTooltip.d.ts.map +1 -1
  127. package/dist/esm/components/FormTooltip.js +4 -1
  128. package/dist/esm/components/InputLabel.d.ts.map +1 -1
  129. package/dist/esm/components/InputLabel.js +4 -2
  130. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  131. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +33 -11
  132. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  133. package/dist/esm/components/InternalDashboard/InternalDashboard.js +14 -1
  134. package/dist/esm/components/OrgSelect.d.ts +0 -6
  135. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  136. package/dist/esm/components/OrgSelect.js +32 -42
  137. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +3 -1
  138. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  139. package/dist/esm/components/QuillMultiSelectWithCombo.js +27 -22
  140. package/dist/esm/components/QuillPopover.d.ts.map +1 -1
  141. package/dist/esm/components/QuillPopover.js +4 -5
  142. package/dist/esm/components/QuillSelect.js +9 -9
  143. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  144. package/dist/esm/components/QuillSelectWithCombo.js +13 -15
  145. package/dist/esm/components/Tenants/EditTenant.d.ts.map +1 -1
  146. package/dist/esm/components/Tenants/EditTenant.js +2 -2
  147. package/dist/esm/components/UiComponents.d.ts +16 -43
  148. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  149. package/dist/esm/components/UiComponents.js +126 -29
  150. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  151. package/dist/esm/forms/client_onboard/ConnectDatabase.js +113 -49
  152. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  153. package/dist/esm/forms/client_onboard/ConnectSchema.js +3 -1
  154. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  155. package/dist/esm/forms/client_onboard/CreateVirtualTables.js +6 -2
  156. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.js +1 -0
  157. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.js +1 -0
  158. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  159. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.js +11 -7
  160. package/dist/esm/hooks/useDatabaseSchema.d.ts.map +1 -1
  161. package/dist/esm/hooks/useDatabaseSchema.js +7 -2
  162. package/dist/esm/modals/EditEnvironmentModal.d.ts.map +1 -1
  163. package/dist/esm/modals/EditEnvironmentModal.js +7 -2
  164. package/dist/esm/modals/EditFiltersModal.js +8 -8
  165. package/dist/esm/primitives/ButtonPrimitive.d.ts.map +1 -1
  166. package/dist/esm/primitives/ButtonPrimitive.js +10 -6
  167. package/dist/esm/primitives/HeaderPrimitive.d.ts.map +1 -1
  168. package/dist/esm/primitives/HeaderPrimitive.js +11 -7
  169. package/dist/esm/primitives/PopoverPrimitive.d.ts.map +1 -1
  170. package/dist/esm/primitives/PopoverPrimitive.js +3 -1
  171. package/dist/esm/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  172. package/dist/esm/primitives/SecondaryButtonPrimitive.js +5 -3
  173. package/dist/esm/public_components/ChartQueryBuilder.d.ts.map +1 -1
  174. package/dist/esm/public_components/ChartQueryBuilder.js +14 -4
  175. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  176. package/dist/esm/public_components/CreateEnvironment.js +20 -15
  177. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  178. package/dist/esm/public_components/DashboardManager.js +10 -1
  179. package/dist/esm/public_components/EnvSelectPopover.d.ts +2 -1
  180. package/dist/esm/public_components/EnvSelectPopover.d.ts.map +1 -1
  181. package/dist/esm/public_components/EnvSelectPopover.js +20 -8
  182. package/dist/esm/public_components/VirtualTableManager.d.ts.map +1 -1
  183. package/dist/esm/public_components/VirtualTableManager.js +33 -9
  184. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  185. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  186. package/dist/esm/utils/columnProcessing.js +1 -1
  187. package/dist/esm/utils/constants.d.ts +1 -0
  188. package/dist/esm/utils/constants.d.ts.map +1 -1
  189. package/dist/esm/utils/constants.js +4 -0
  190. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  191. package/dist/esm/utils/dataFetcher.js +0 -1
  192. package/dist/esm/utils/databases.js +5 -5
  193. package/package.json +2 -2
@@ -11,6 +11,7 @@ import { QuillMultiSelectComponentWithCombo } from '../../components/QuillMultiS
11
11
  import CardSection from '../../components/CardSection';
12
12
  // import InputLabel from '../../components/InputLabel';
13
13
  import { useAdmin } from '../../AdminProvider';
14
+ import { quillFetch } from '../../utils/dataFetcher';
14
15
  export default function ConnectDatabase({ containerStyle, header1Style, header2Style, environmentDetails, setEnvironmentDetails, fetchSchemasLoading, onConnectDatabase, }) {
15
16
  const { state, getToken } = useAdmin();
16
17
  const [error, setError] = useState(undefined);
@@ -120,8 +121,8 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
120
121
  }
121
122
  try {
122
123
  setIsConnecting(true);
123
- await setSchemaNames(state.queryEndpoint, clientId, selectedSchemas, getToken);
124
- const databaseSchema = await getTableColumnsBySchema(state.queryEndpoint, clientId, getToken, selectedSchemas).then((res) => res.columnsByTable);
124
+ await setSchemaNames(state.queryEndpoint, clientId, selectedSchemas, getToken, state.queryHeaders);
125
+ const databaseSchema = await getTableColumnsBySchema(state.isSelfHosted, state.queryEndpoint, clientId, databaseConnectionDetails.type, getToken, selectedSchemas, state.queryHeaders).then((res) => res.columnsByTable);
125
126
  setEnvironmentDetails(databaseConnectionDetails, databaseSchema, selectedSchemas, clientId);
126
127
  }
127
128
  catch (e) {
@@ -133,11 +134,38 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
133
134
  }, 1000);
134
135
  }
135
136
  };
137
+ const getSchemaNames = async () => {
138
+ setIsConnecting(true);
139
+ const tempClientId = clientId ?? state.client?.clientId;
140
+ const { data, status, queries } = await quillFetch({
141
+ client: {
142
+ queryEndpoint: state.queryEndpoint,
143
+ queryHeaders: state.queryHeaders,
144
+ withCredentials: !!state.withCredentials,
145
+ clientId: tempClientId,
146
+ },
147
+ task: 'get-schema-names',
148
+ metadata: {
149
+ databaseType: databaseConnectionDetails.type,
150
+ newClientId: clientId,
151
+ },
152
+ getToken: getToken,
153
+ });
154
+ if (status !== 'success') {
155
+ setIsConnecting(false);
156
+ setError('Error fetching schemas');
157
+ return;
158
+ }
159
+ const schemas = queries?.queryResults?.[0]?.rows?.map((row) => row['schema_name'] || row['SCHEMA_NAME']);
160
+ setClientId(data?.clientId);
161
+ setAllSchemas(schemas);
162
+ setIsConnecting(false);
163
+ };
136
164
  const testConnectionAndFormClient = async () => {
137
165
  setError(undefined);
138
166
  const connectionString = formConnectionString(databaseConnectionDetails);
139
167
  setIsConnecting(true);
140
- const result = await testConnectionString(state.queryEndpoint, connectionString, databaseConnectionDetails.type, getToken, clientId);
168
+ const result = await testConnectionString(state.queryEndpoint, connectionString, databaseConnectionDetails.type, getToken, clientId, state.queryHeaders);
141
169
  if (result.success) {
142
170
  try {
143
171
  setConnectionDetails({
@@ -170,50 +198,75 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
170
198
  display: 'flex',
171
199
  flexDirection: 'row',
172
200
  justifyContent: 'space-between',
173
- }, children: [_jsx("h1", { style: header1Style, children: "Connect Database" }), clientId && !!selectedSchemas?.length && (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", width: "24px", height: "24px", children: _jsx("path", { fillRule: "evenodd", d: "M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z", clipRule: "evenodd" }) }))] }), _jsxs("div", { style: { marginTop: 12 }, children: [_jsx("h2", { style: { ...header2Style, fontWeight: 600, color: '#565656' }, children: "Database type" }), _jsx("div", { style: { display: 'flex', gap: 10, userSelect: 'none' }, children: DATABASE_DEFAULT_INFO.map((database) => {
174
- return (_jsx(DatabaseSelector, { onDatabaseSelect: onDatabaseSelect, databaseType: databaseConnectionDetails?.type || '', containerStyle: { marginBottom: '12px' }, label: database.label, value: database.value, imageUrl: database.imageUrl }, database.label));
175
- }) })] }), databaseConnectionDetails && (_jsxs("div", { children: [databaseConnectionDetails.type !== 'BigQuery' ? (_jsxs("div", { children: [['MySQL', 'PostgreSQL'].includes(databaseConnectionDetails.type) && (_jsxs("div", { style: { marginTop: 16, marginBottom: 24 }, children: [_jsx("h2", { style: {
176
- ...header2Style,
177
- fontWeight: 600,
178
- marginBottom: 8,
179
- }, children: "Connection Method" }), _jsx(QuillTab, { width: "486px", modeToggleOptions: credentialTabOptions, toggleMode: credentialTab, setToggleMode: setCredentialTab })] })), credentialTab === 'Database Credentials' ? (_jsx("div", { id: "database-details-form", children: _jsx("div", { style: {
180
- display: 'grid',
181
- gridTemplateColumns: 'repeat(3, 1fr)',
182
- gap: '20px',
183
- justifyContent: 'space-between',
184
- marginTop: '16px',
185
- }, children:
186
- // get a list of types in the databaseConnectionDetails object and create a form for each
187
- Object.entries(databaseConnectionDetails).map(([key, value]) => {
188
- if (key !== 'connectionString' && key !== 'type')
189
- return (_jsxs("div", { "data-testid": `quill-input-${key}`, children: [_jsx("h2", { style: {
190
- ...header2Style,
191
- fontWeight: '600',
192
- }, children: key
193
- .split(/(?=[A-Z])/)
194
- .map((word) => word.charAt(0).toUpperCase() +
195
- word.slice(1))
196
- .join(' ') }), _jsx(TextInputPrimitive, { onChange: (e) => {
197
- setConnectionDetails({
198
- ...databaseConnectionDetails,
199
- [key]: e.target.value,
200
- connectionString: '',
201
- });
202
- }, value: value, disabled: key === 'type', password: key === 'password' ? true : false })] }, key));
203
- }) }) })) : (_jsxs("div", { "data-testid": "quill-input-connectionString", children: [_jsx("h2", { style: { ...header2Style, fontWeight: 600 }, children: "Connection String" }), _jsx(TextInputPrimitive, { onChange: (e) => {
204
- updateConnectionString(e.target.value);
205
- }, value: databaseConnectionDetails.connectionString })] }))] })) : (_jsx("div", { style: { minWidth: 790 }, children: _jsx("div", { id: "database-details-form-bq", style: {
206
- display: 'grid',
207
- gridTemplateColumns: 'repeat(1, 1fr)',
208
- gap: '20px',
209
- justifyContent: 'space-between',
210
- marginTop: '16px',
211
- }, children: _jsxs("div", { children: [_jsx("h2", { style: { ...header2Style, fontWeight: '600' }, children: "Service Account Json" }), _jsxs("div", { children: [_jsx("input", { title: "Upload JSON", type: "file", accept: ".json", onChange: handleFileChange, style: { display: 'none' }, id: "fileInput", "data-testid": "quill-input-fileInput", ref: myInputRef }), _jsxs("div", { style: {
212
- display: 'flex',
213
- flexDirection: 'row',
214
- gap: 12,
215
- alignItems: 'center',
216
- }, children: [_jsx(ButtonPrimitive, { onClick: handleButtonClick, label: 'Upload JSON' }), _jsx("span", { "data-testid": "quill-file-label", style: { ...header2Style, fontWeight: '600' }, children: fileLabel })] })] })] }) }) })), _jsxs("div", { style: {
201
+ }, children: [_jsx("h1", { style: header1Style, children: "Connect Database" }), clientId && !!selectedSchemas?.length && (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", width: "24px", height: "24px", children: _jsx("path", { fillRule: "evenodd", d: "M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z", clipRule: "evenodd" }) }))] }), !state.isSelfHosted && (_jsxs("div", { style: { marginTop: 12 }, children: [_jsx("h2", { style: { ...header2Style, fontWeight: 600 }, children: "Database type" }), _jsx("div", { style: { display: 'flex', gap: 10, userSelect: 'none' }, children: DATABASE_DEFAULT_INFO.map((database) => {
202
+ return (_jsx(DatabaseSelector, { onDatabaseSelect: onDatabaseSelect, databaseType: databaseConnectionDetails?.type || '', containerStyle: {
203
+ marginBottom: '12px',
204
+ ...(state.isSelfHosted && {
205
+ cursor: 'not-allowed',
206
+ pointerEvents: 'none',
207
+ }),
208
+ ...(state.isSelfHosted &&
209
+ database.value.toLowerCase() !==
210
+ environmentDetails.connection.type.toLowerCase() && {
211
+ backgroundColor: '#f5f5f5',
212
+ }),
213
+ }, label: database.label, value: database.value, imageUrl: database.imageUrl, theme: state.theme }, database.label));
214
+ }) })] })), databaseConnectionDetails && (_jsxs("div", { children: [!state.isSelfHosted && (_jsx("div", { children: databaseConnectionDetails.type !== 'BigQuery' ? (_jsxs("div", { children: [['MySQL', 'PostgreSQL'].includes(databaseConnectionDetails.type) && (_jsxs("div", { style: { marginTop: 16, marginBottom: 24 }, children: [_jsx("h2", { style: {
215
+ ...header2Style,
216
+ fontWeight: 600,
217
+ marginBottom: 8,
218
+ }, children: "Connection Method" }), _jsx(QuillTab, { width: "486px", modeToggleOptions: credentialTabOptions, toggleMode: credentialTab, setToggleMode: setCredentialTab })] })), credentialTab === 'Database Credentials' ? (_jsx("div", { id: "database-details-form", children: _jsx("div", { style: {
219
+ display: 'grid',
220
+ gridTemplateColumns: 'repeat(3, 1fr)',
221
+ gap: '20px',
222
+ justifyContent: 'space-between',
223
+ marginTop: '16px',
224
+ }, children:
225
+ // get a list of types in the databaseConnectionDetails object and create a form for each
226
+ Object.entries(databaseConnectionDetails).map(([key, value]) => {
227
+ if (key !== 'connectionString' && key !== 'type')
228
+ return (_jsxs("div", { "data-testid": `quill-input-${key}`, children: [_jsx("h2", { style: {
229
+ ...header2Style,
230
+ fontWeight: '600',
231
+ }, children: key
232
+ .split(/(?=[A-Z])/)
233
+ .map((word) => word.charAt(0).toUpperCase() +
234
+ word.slice(1))
235
+ .join(' ') }), _jsx(TextInputPrimitive, { onChange: (e) => {
236
+ setConnectionDetails({
237
+ ...databaseConnectionDetails,
238
+ [key]: e.target.value,
239
+ connectionString: '',
240
+ });
241
+ }, value: value, disabled: key === 'type', password: key === 'password' ? true : false })] }, key));
242
+ }) }) })) : (_jsxs("div", { "data-testid": "quill-input-connectionString", children: [_jsx("h2", { style: { ...header2Style, fontWeight: 600 }, children: "Connection String" }), _jsx(TextInputPrimitive, { onChange: (e) => {
243
+ updateConnectionString(e.target.value);
244
+ }, value: databaseConnectionDetails.connectionString })] }))] })) : (_jsx("div", { style: { minWidth: 790 }, children: _jsx("div", { id: "database-details-form-bq", style: {
245
+ display: 'grid',
246
+ gridTemplateColumns: 'repeat(1, 1fr)',
247
+ gap: '20px',
248
+ justifyContent: 'space-between',
249
+ marginTop: '16px',
250
+ }, children: _jsxs("div", { children: [_jsx("h2", { style: { ...header2Style, fontWeight: '600' }, children: "Service Account Json" }), _jsxs("div", { children: [_jsx("input", { title: "Upload JSON", type: "file", accept: ".json", onChange: handleFileChange, style: { display: 'none' }, id: "fileInput", "data-testid": "quill-input-fileInput", ref: myInputRef }), _jsxs("div", { style: {
251
+ display: 'flex',
252
+ flexDirection: 'row',
253
+ gap: 12,
254
+ alignItems: 'center',
255
+ }, children: [_jsx(ButtonPrimitive, { onClick: handleButtonClick, label: 'Upload JSON' }), _jsx("span", { "data-testid": "quill-file-label", style: { ...header2Style, fontWeight: '600' }, children: fileLabel })] })] })] }) }) })) })), state.isSelfHosted ? (_jsxs("div", { style: {
256
+ borderRadius: 6,
257
+ padding: 12,
258
+ background: '#f5f5f5',
259
+ marginBottom: 18,
260
+ marginTop: 18,
261
+ fontSize: 14,
262
+ }, children: [_jsx("h2", { style: { ...header2Style, fontWeight: 600 }, children: "Self-hosted Database Connection" }), _jsx("div", { style: {
263
+ display: 'flex',
264
+ flexDirection: 'row',
265
+ alignItems: 'center',
266
+ gap: 4,
267
+ color: state.theme?.secondaryTextColor,
268
+ fontFamily: state.theme?.fontFamily,
269
+ }, children: `Using the database credentials passed into the Quill Server SDK at this endpoint: ${state.queryEndpoint}.` })] })) : (_jsxs("div", { style: {
217
270
  borderRadius: 6,
218
271
  padding: 12,
219
272
  background: '#f5f5f5',
@@ -225,6 +278,8 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
225
278
  flexDirection: 'row',
226
279
  alignItems: 'center',
227
280
  gap: 4,
281
+ color: state.theme?.secondaryTextColor,
282
+ fontFamily: state.theme?.fontFamily,
228
283
  }, children: ["Ensure Quill's IP is allowed to connect to your database", ' ', _jsx(ExternalLink, { href: databaseConnectionDetails.type.toLowerCase() === 'bigquery'
229
284
  ? 'https://cloud.google.com/access-context-manager/docs/overview#ip-address'
230
285
  : databaseConnectionDetails.type.toLowerCase() === 'mysql'
@@ -240,18 +295,26 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
240
295
  ? 'https://clickhouse.com/docs/cloud/security/setting-ip-filters/'
241
296
  : 'https://www.postgresql.org/docs/current/auth-pg-hba-conf.html' })] }), _jsx(ClipboardButton, { text: "34.133.137.225", containerStyle: {
242
297
  marginTop: 12,
243
- } })] }), _jsx("div", { style: {
298
+ } })] })), _jsx("div", { style: {
244
299
  width: '100%',
245
300
  display: 'flex',
246
301
  justifyContent: 'space-between',
247
302
  alignItems: 'center',
248
303
  marginTop: '24px',
249
- }, "data-testid": "quill-connect-button", children: _jsx(ButtonPrimitive, { label: 'Connect', onClick: testConnectionAndFormClient, disabled: isButtonDisabled, isLoading: isConnecting }) })] })), _jsx(ModalPrimitive, { isOpen: !!error, onClose: () => setError(undefined), style: {
304
+ }, "data-testid": "quill-connect-button", children: _jsx(ButtonPrimitive, { label: 'Connect', onClick: () => {
305
+ if (state.isSelfHosted) {
306
+ getSchemaNames();
307
+ }
308
+ else {
309
+ testConnectionAndFormClient();
310
+ }
311
+ }, disabled: isButtonDisabled && !state.isSelfHosted, isLoading: isConnecting }) })] })), _jsx(ModalPrimitive, { isOpen: !!error, onClose: () => setError(undefined), style: {
250
312
  width: 420,
251
313
  }, children: _jsxs("div", { style: {
252
314
  display: 'flex',
253
315
  flexDirection: 'column',
254
316
  gap: 20,
317
+ fontFamily: state.theme?.fontFamily,
255
318
  width: '100%',
256
319
  }, children: [_jsx(CardSection, { children: "Failed to Connect" }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 5 }, children: [_jsx("div", { style: {
257
320
  color: 'red',
@@ -280,6 +343,7 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
280
343
  flexDirection: 'column',
281
344
  gap: 20,
282
345
  width: '100%',
346
+ fontFamily: state.theme?.fontFamily,
283
347
  }, children: [_jsx(CardSection, { children: "Connection Successful" }), _jsx("h2", { style: {
284
348
  fontSize: 15,
285
349
  fontWeight: 500,
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectSchema.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/ConnectSchema.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,OAAO,CAAC;AAOpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAY,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMhD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,cAAc,EACd,YAAY,EAEZ,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,KAAK,EACL,KAAK,EACL,uBAAuB,GACxB,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,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,gBAAgB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC,2CA0SA"}
1
+ {"version":3,"file":"ConnectSchema.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/ConnectSchema.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,OAAO,CAAC;AAOpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAY,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMhD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,cAAc,EACd,YAAY,EAEZ,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,KAAK,EACL,KAAK,EACL,uBAAuB,GACxB,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,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,gBAAgB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC,2CA4SA"}
@@ -123,7 +123,8 @@ databaseSchema, connection, tenantInit, onTenantCreation, clientId, selectedSche
123
123
  }, children: [_jsx("h2", { style: {
124
124
  fontSize: 15,
125
125
  fontWeight: 500,
126
- color: '#6e6e6e',
126
+ color: state.theme?.secondaryTextColor,
127
+ fontFamily: state.theme?.fontFamily,
127
128
  paddingBottom: 20,
128
129
  }, children: `How do you represent your customers in your database?` }), _jsx(EditTenant, { tenant: tenantToEdit, setTenant: (tenant) => setTenantToEdit(tenant), setCreateNewTenant: () => { }, onSubmitEditTenant: onSubmitEditTenant, onValidateEditTenant: onValidateEditTenant, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, ButtonComponent: MemoizedButton, isSubmitTenantLoading: isSubmitTenantLoading, client: {
129
130
  id: clientId,
@@ -138,6 +139,7 @@ databaseSchema, connection, tenantInit, onTenantCreation, clientId, selectedSche
138
139
  display: 'flex',
139
140
  flexDirection: 'column',
140
141
  gap: 20,
142
+ fontFamily: state.theme?.fontFamily,
141
143
  width: '100%',
142
144
  }, children: [_jsx(CardSection, { children: noTables ? 'Schema Issue' : 'Tenant Issue' }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 5 }, children: [_jsx("div", { style: {
143
145
  color: 'red',
@@ -1 +1 @@
1
- {"version":3,"file":"CreateVirtualTables.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateVirtualTables.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+B,MAAM,OAAO,CAAC;AACnE,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAY3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOvD,OAAO,EAAE,KAAK,EAAY,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,GACb,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,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,IAAI,CAAC;CAClE,2CAoiBA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,EACT,SAAS,EACT,YAAY,EACZ,eAAe,GAChB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD,2CAqHA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,GACX,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,2CA8EA"}
1
+ {"version":3,"file":"CreateVirtualTables.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateVirtualTables.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+B,MAAM,OAAO,CAAC;AACnE,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAY3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOvD,OAAO,EAAE,KAAK,EAAY,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,GACb,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,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,IAAI,CAAC;CAClE,2CAwiBA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,EACT,SAAS,EACT,YAAY,EACZ,eAAe,GAChB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD,2CA2HA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,GACX,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,2CA8EA"}
@@ -152,7 +152,7 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
152
152
  whiteSpace: 'normal',
153
153
  }, displayBelow: true, children: _jsx(ButtonPrimitive, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: async () => {
154
154
  setAskAIButtonLoading(true);
155
- const results = await getQueryFromAiWithConnection(state.queryEndpoint, aiPrompt, client.clientId, getToken, client.schemaNames);
155
+ const results = await getQueryFromAiWithConnection(state.isSelfHosted, databaseSchema, state.queryEndpoint, aiPrompt, client.clientId, getToken, client.schemaNames, state.queryHeaders);
156
156
  setQueryInfo({ name: queryInfo.name, query: results });
157
157
  setAskAIButtonLoading(false);
158
158
  }, style: { width: '90px' }, disabled: aiPrompt.trim().length > 500 }) })] }), _jsx("div", { "data-testid": "quill-sql-text-editor", children: _jsx(SqlTextEditor, { value: queryInfo.query, setValue: (e) => {
@@ -170,7 +170,7 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
170
170
  height: 70,
171
171
  }, children: [_jsx(ButtonPrimitive, { label: 'Run query', isLoading: runQueryButtonLoading, onClick: async () => {
172
172
  setRunQueryButtonLoading(true);
173
- const getSqlResults = await getVirtualTableData(client.clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint, getToken);
173
+ const getSqlResults = await getVirtualTableData(client.clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint, getToken, client.queryHeaders);
174
174
  if (!getSqlResults.success) {
175
175
  setErrorInfo({ status: true, msg: getSqlResults.error });
176
176
  }
@@ -307,15 +307,18 @@ export default function CreateVirtualTables({ containerStyle, header1Style, head
307
307
  }, isLoading: isLoading }) })) : null] })] }), _jsx(TenantFieldModal, { isOpen: !!failingTenant, setClosed: () => setFailingTenant(undefined), tenant: failingTenant, onOverride: () => addVirtualTable(true) }), _jsx(VirtualTableModal, { isOpen: virtualTableModalOpen, setIsOpen: setVirtualTableModalOpen, queryInfo: queryInfo, setQueryInfo: setQueryInfo, addVirtualTable: () => addVirtualTable(false) })] }));
308
308
  }
309
309
  export function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo, addVirtualTable, }) {
310
+ const { state: { theme }, } = useAdmin();
310
311
  return (_jsx(ModalPrimitive, { isOpen: isOpen, onClose: () => {
311
312
  setIsOpen(false);
312
313
  }, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '100%' }, children: [_jsx("h1", { style: {
313
314
  fontSize: 24,
315
+ fontFamily: theme.fontFamily,
314
316
  fontWeight: 600,
315
317
  color: '#212121',
316
318
  paddingBottom: 20,
317
319
  }, children: "Add Virtual Table" }), _jsx("h3", { style: {
318
320
  fontWeight: '600',
321
+ fontFamily: theme.fontFamily,
319
322
  fontSize: '14px',
320
323
  marginBottom: '6px',
321
324
  color: '#212121',
@@ -325,6 +328,7 @@ export function VirtualTableModal({ isOpen, setIsOpen, queryInfo, setQueryInfo,
325
328
  setQueryInfo({ name: e.target.value, query: queryInfo.query });
326
329
  }, placeholder: "Name..." }), _jsx("h3", { style: {
327
330
  fontWeight: '600',
331
+ fontFamily: theme.fontFamily,
328
332
  fontSize: '14px',
329
333
  marginBottom: '6px',
330
334
  marginTop: '12px',
@@ -64,6 +64,7 @@ describe('ConnectSchema', () => {
64
64
  const mockGetToken = jest.fn();
65
65
  const mockQuillFetchWithToken = jest.fn();
66
66
  const mockState = {
67
+ isSelfHosted: false,
67
68
  queryEndpoint: 'http://test-endpoint',
68
69
  loading: true,
69
70
  publicKey: 'test-key',
@@ -47,6 +47,7 @@ describe('CreateVirtualTables', () => {
47
47
  const mockGetToken = jest.fn();
48
48
  const mockQuillFetchWithToken = jest.fn();
49
49
  const mockState = {
50
+ isSelfHosted: false,
50
51
  queryEndpoint: 'http://test-endpoint',
51
52
  loading: true,
52
53
  publicKey: 'test-key',
@@ -1 +1 @@
1
- {"version":3,"file":"CreateEditVirtualTable.d.ts","sourceRoot":"","sources":["../../../../src/forms/virtual_tables/CreateEditVirtualTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAOL,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAU,cAAc,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,UAAU,2BAA2B;IACnC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACxE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,mBAAmB,EAAE,CACnB,OAAO,EAAE,KAAK,GAAG,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,EAAE,EAC3B,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,EAAE,EACf,QAAQ,CAAC,EAAE,OAAO,KACf,IAAI,CAAC;IACV,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,mBAAmB,EACxC,gBAA2C,EAC3C,eAAgC,EAChC,wBAAkD,EAClD,SAA6B,EAC7B,YAAY,EACZ,eAAe,EACf,MAAM,GACP,EAAE,2BAA2B,GAAG,GAAG,CAAC,OAAO,CAqgB3C"}
1
+ {"version":3,"file":"CreateEditVirtualTable.d.ts","sourceRoot":"","sources":["../../../../src/forms/virtual_tables/CreateEditVirtualTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAOL,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAU,cAAc,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,UAAU,2BAA2B;IACnC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACxE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,mBAAmB,EAAE,CACnB,OAAO,EAAE,KAAK,GAAG,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,EAAE,EAC3B,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,EAAE,EACf,QAAQ,CAAC,EAAE,OAAO,KACf,IAAI,CAAC;IACV,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,mBAAmB,EACxC,gBAA2C,EAC3C,eAAgC,EAChC,wBAAkD,EAClD,SAA6B,EAC7B,YAAY,EACZ,eAAe,EACf,MAAM,GACP,EAAE,2BAA2B,GAAG,GAAG,CAAC,OAAO,CA+gB3C"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Table, SchemaListComponent, } from '@quillsql/react';
3
- import { useEffect, useMemo, useState } from 'react';
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { useAdmin } from '../../AdminProvider';
5
5
  import { getQueryFromAiWithConnection, getVirtualTableData, } from '../../api/ConnectionClient';
6
6
  import SqlTextEditor from '../../components/SqlTextEditor';
@@ -32,6 +32,7 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
32
32
  const [tableData, setTableData] = useState(undefined);
33
33
  const [runningQuery, setRunningQuery] = useState(false);
34
34
  const { state, getToken, quillFetchWithToken } = useAdmin();
35
+ const containerRef = useRef(null);
35
36
  const addEditProcessVirtualTable = async (override = false) => {
36
37
  const failingTenant = virtualTableOwners?.find((field) => tableData &&
37
38
  !tableData.fields.find((col) => col.name === field?.replaceAll('"', '')));
@@ -60,7 +61,7 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
60
61
  setErrorInfo({ show: false, message: '' });
61
62
  setVirtualTableAddable(false);
62
63
  setAskAIButtonLoading(true);
63
- const results = await getQueryFromAiWithConnection(state.queryEndpoint, aiPrompt, state.client._id, getToken, state.client.schemaNames);
64
+ const results = await getQueryFromAiWithConnection(state.isSelfHosted, allTableData, state.queryEndpoint, aiPrompt, state.client._id, getToken, state.client.schemaNames, state.queryHeaders);
64
65
  setEditVirtualTableQuery(results);
65
66
  setAskAIButtonLoading(false);
66
67
  };
@@ -105,7 +106,7 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
105
106
  return;
106
107
  }
107
108
  setIsLoading(true);
108
- const resp = await getVirtualTableData(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken);
109
+ const resp = await getVirtualTableData(state.client._id, query, state.client.databaseType, state.queryEndpoint, getToken, state.queryHeaders);
109
110
  if (!resp.success) {
110
111
  setErrorInfo({ show: true, message: resp.error });
111
112
  setTableData(undefined);
@@ -169,13 +170,16 @@ export default function CreateEditVirtualTable({ containerStyle, initialVirtualT
169
170
  setIsLoading(false);
170
171
  setRunningQuery(false);
171
172
  };
172
- return (_jsx("div", { style: {
173
- ...containerStyle,
173
+ return (_jsx("div", { ref: containerRef, style: {
174
174
  gap: 6,
175
- height: 'calc(100vh - 130px)',
175
+ height: containerRef.current
176
+ ? `calc(100vh - ${containerRef.current.getBoundingClientRect().top ?? 0}px - 80px)`
177
+ : '100%',
178
+ // overflow: 'scroll',
179
+ ...containerStyle,
176
180
  }, children: _jsxs("div", { style: { display: 'flex', height: '100%', flexDirection: 'column' }, children: [_jsx(DynamicBanner, { header: initialVirtualTable
177
181
  ? `Edit "${initialVirtualTable.name}" Virtual Table`
178
- : 'Create Virtual Table', onExit: initialVirtualTable ? undefined : closeEditVirtualTable }), _jsxs("div", { style: {
182
+ : 'Create Virtual Table', onExit: initialVirtualTable ? undefined : closeEditVirtualTable, theme: state.theme }), _jsxs("div", { style: {
179
183
  width: '100%',
180
184
  display: 'flex',
181
185
  height: '100%',
@@ -1 +1 @@
1
- {"version":3,"file":"useDatabaseSchema.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDatabaseSchema.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB;;;CAuD7B,CAAC"}
1
+ {"version":3,"file":"useDatabaseSchema.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDatabaseSchema.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB;;;CAgE7B,CAAC"}
@@ -1,15 +1,20 @@
1
1
  import { useAdmin } from '../AdminProvider';
2
- import { useEffect, useState } from 'react';
2
+ import { useEffect, useRef, useState } from 'react';
3
3
  import { getTableColumnsBySchema } from '../api/ConnectionClient';
4
4
  export const useDatabaseSchema = () => {
5
5
  const { state, dispatch, getToken } = useAdmin();
6
6
  const [isLoading, setIsLoading] = useState(state.databaseSchema?.id !== state.client.id);
7
+ const idRef = useRef(null);
7
8
  useEffect(() => {
8
9
  const fetchSchema = async () => {
9
10
  if ((state.databaseSchema?.schema?.length ||
10
11
  state.databaseSchema?.loading) &&
11
12
  state.databaseSchema?.id === state.client.id)
12
13
  return;
14
+ if (idRef.current === state.client.id) {
15
+ return;
16
+ }
17
+ idRef.current = state.client.id;
13
18
  try {
14
19
  dispatch({
15
20
  type: 'SET_DATABASE_SCHEMA',
@@ -20,7 +25,7 @@ export const useDatabaseSchema = () => {
20
25
  },
21
26
  });
22
27
  setIsLoading(true);
23
- const schema = await getTableColumnsBySchema(state.queryEndpoint, state.client.id, getToken);
28
+ const schema = await getTableColumnsBySchema(state.isSelfHosted, state.queryEndpoint, state.client.id, state.client.databaseType, getToken, state.client.schemaNames ?? [], state.queryHeaders);
24
29
  dispatch({
25
30
  type: 'SET_DATABASE_SCHEMA',
26
31
  payload: {
@@ -1 +1 @@
1
- {"version":3,"file":"EditEnvironmentModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditEnvironmentModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,yBAAyB,EACzB,aAAa,EAGd,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAQ3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAsB1E,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EACd,yBAAyB,CACvB,uBAAuB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAC1D,GACD,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CAg4BA"}
1
+ {"version":3,"file":"EditEnvironmentModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditEnvironmentModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,yBAAyB,EACzB,aAAa,EAGd,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAQ3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAsB1E,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EACd,yBAAyB,CACvB,uBAAuB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAC1D,GACD,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,eAAe,EAAE,GAAG,CAAC;IACrB,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CAy4BA"}
@@ -268,7 +268,7 @@ export function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent
268
268
  loading: true,
269
269
  },
270
270
  });
271
- const schema = await getTableColumnsBySchema(state.queryEndpoint, state.client._id, getToken);
271
+ const schema = await getTableColumnsBySchema(state.isSelfHosted, state.queryEndpoint, state.client._id, state.client.databaseType, getToken, state.client.schemaNames ?? [], state.queryHeaders);
272
272
  // If any of the tenants point to a table that no longer exists, throw an error
273
273
  const tenantTables = state.client.allTenantTypes?.filter((t) => t.tenantTable !== undefined);
274
274
  const tables = schema.columnsByTable.map((t) => t.tableName);
@@ -346,6 +346,10 @@ export function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent
346
346
  }
347
347
  };
348
348
  const handleDeleteEnvironment = async () => {
349
+ if (state.clients.length === 1) {
350
+ alert('You cannot delete the only environment');
351
+ return;
352
+ }
349
353
  if (confirm('Are you sure? All dashboards in this environment will also be deleted. This action cannot be undone.')) {
350
354
  await quillFetchWithToken({
351
355
  client: {
@@ -365,7 +369,7 @@ export function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent
365
369
  payload: state.clients.filter((c) => c._id !== state.client._id),
366
370
  });
367
371
  setSelectedDashboard(null);
368
- setClient(state.clients[0]);
372
+ setClient(state.clients.filter((c) => c._id !== state.client._id)[0]);
369
373
  setIsOpen(false);
370
374
  onSave();
371
375
  }
@@ -407,6 +411,7 @@ export function EditEnvironmentModal({ isOpen, setIsOpen, onSave, ModalComponent
407
411
  // padding: '2px 8px',
408
412
  fontSize: 12,
409
413
  font: 'monospace',
414
+ fontFamily: state.theme.fontFamily,
410
415
  fontWeight: 300,
411
416
  width: 'fit-content',
412
417
  }, children: "Dashboard Owner" })), _jsx("div", { style: {
@@ -8,7 +8,7 @@ import { SAVED_QUERIES_DASHBOARD,
8
8
  SINGLE_TENANT,
9
9
  // defaultDateRange,
10
10
  } from '../utils/constants';
11
- import { defaultTheme, getPostgresBasicType } from '../Admin';
11
+ import { getPostgresBasicType } from '../Admin';
12
12
  import InputLabel from '../components/InputLabel';
13
13
  import CardSection from '../components/CardSection';
14
14
  import { SegmentedControl } from '../components/SegmentedControl';
@@ -632,7 +632,7 @@ export function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onS
632
632
  // ) ?? initialRange,
633
633
  selectablePresetOptions.find((option) => option.value === e) ??
634
634
  initialRange);
635
- }, options: selectablePresetOptions, theme: defaultTheme, hideEmptyOption: true })] }) }), _jsx("div", { style: {
635
+ }, options: selectablePresetOptions, theme: state.theme, hideEmptyOption: true })] }) }), _jsx("div", { style: {
636
636
  display: 'flex',
637
637
  flexDirection: 'row',
638
638
  gap: '10px',
@@ -673,12 +673,12 @@ export function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onS
673
673
  }, children: _jsxs("div", { style: {
674
674
  display: 'flex',
675
675
  flexDirection: 'column',
676
- fontFamily: defaultTheme.fontFamily,
676
+ fontFamily: state.theme.fontFamily,
677
677
  gap: 8,
678
678
  }, children: [_jsx("h3", { style: {
679
679
  fontSize: 14,
680
680
  fontWeight: 600,
681
- color: defaultTheme.primaryTextColor,
681
+ color: state.theme.primaryTextColor,
682
682
  }, children: "Recurring" }), _jsxs("div", { style: {
683
683
  display: 'flex',
684
684
  flexDirection: 'row',
@@ -762,7 +762,7 @@ export function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onS
762
762
  }, width: "78px", number: true, max: 9999, min: 0, step: 1 })] }))] }), _jsx("h3", { style: {
763
763
  fontSize: 14,
764
764
  fontWeight: 600,
765
- color: defaultTheme.primaryTextColor,
765
+ color: state.theme.primaryTextColor,
766
766
  }, children: "Standard" }), _jsxs("div", { style: {
767
767
  display: 'flex',
768
768
  flexDirection: 'row',
@@ -872,7 +872,7 @@ export function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onS
872
872
  ...newDateFilter,
873
873
  presetOptions: updatedOptions,
874
874
  });
875
- }, theme: defaultTheme, hideEmptyOption: true })] }), _jsxs("div", { style: {
875
+ }, theme: state.theme, hideEmptyOption: true })] }), _jsxs("div", { style: {
876
876
  display: 'flex',
877
877
  flexDirection: 'column',
878
878
  }, children: [index === 0 && _jsx(InputLabel, { children: "Value" }), interval.type === 'week' && (_jsx("div", { style: { width: 200, visibility: 'hidden' } })), interval.type === 'relative' && (_jsxs("div", { style: {
@@ -926,7 +926,7 @@ export function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onS
926
926
  ...newDateFilter,
927
927
  presetOptions: updatedOptions,
928
928
  });
929
- }, theme: defaultTheme, hideEmptyOption: true, style: {
929
+ }, theme: state.theme, hideEmptyOption: true, style: {
930
930
  width: 120,
931
931
  maxWidth: 120,
932
932
  minWidth: 120,
@@ -1270,7 +1270,7 @@ export function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onS
1270
1270
  alignItems: 'center',
1271
1271
  width: '100%',
1272
1272
  gap: 10,
1273
- }, children: _jsx(SegmentedControl, { theme: defaultTheme, value: filter && filter.stringFilterType
1273
+ }, children: _jsx(SegmentedControl, { theme: state.theme, value: filter && filter.stringFilterType
1274
1274
  ? filter.stringFilterType
1275
1275
  : 'default', onChange: (e) => {
1276
1276
  const updatedFilters = newFilters.map((otherFilter, i) => index === i
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonPrimitive.d.ts","sourceRoot":"","sources":["../../../src/primitives/ButtonPrimitive.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAgB,MAAM,UAAU,CAAC;AAGpD,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAC7B,oBAAoB,GAAG;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAgGF,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ButtonPrimitive.d.ts","sourceRoot":"","sources":["../../../src/primitives/ButtonPrimitive.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAC7B,oBAAoB,GAAG;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAsGF,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { defaultTheme } from '../Admin';
3
2
  import { LoadingSpinner } from '../components/UiComponents';
4
- const ButtonPrimitive = ({ onClick, isLoading = false, label, theme = defaultTheme, style, disabled, variant = 'primary', type = 'submit', }) => {
3
+ import { useAdmin } from '../AdminProvider';
4
+ const ButtonPrimitive = ({ onClick, isLoading = false, label, theme, style, disabled, variant = 'primary', type = 'submit', }) => {
5
+ const { state: { theme: stateTheme }, } = useAdmin();
6
+ theme = theme ?? stateTheme;
5
7
  if (variant === 'danger') {
6
8
  return (_jsx("button", { type: type, style: {
7
9
  height: 40,
@@ -24,7 +26,6 @@ const ButtonPrimitive = ({ onClick, isLoading = false, label, theme = defaultThe
24
26
  }
25
27
  return (_jsxs("button", { className: disabled ? 'quill-button-disabled' : 'quill-button', type: type, style: {
26
28
  height: 40,
27
- color: theme?.backgroundColor ?? 'white',
28
29
  display: 'flex',
29
30
  borderRadius: 6,
30
31
  alignItems: 'center',
@@ -43,13 +44,16 @@ const ButtonPrimitive = ({ onClick, isLoading = false, label, theme = defaultThe
43
44
  ...style,
44
45
  }, onClick: disabled || isLoading ? () => { } : onClick, children: [_jsx("style", { children: `
45
46
  .quill-button {
46
- background-color: #212121;
47
+ background-color: ${theme?.primaryButtonColor ?? '#212121'};
48
+ color: ${theme?.primaryButtonTextColor ?? 'white'}
47
49
  }
48
50
  .quill-button-disabled {
49
- background-color: rgba(56, 65, 81, 0.9);
51
+ background-color: ${theme?.primaryButtonColor ?? '#212121'};
52
+ color: ${theme?.primaryButtonTextColor ?? 'white'}
50
53
  }
51
54
  .quill-button:hover {
52
- background-color: rgba(56, 65, 81, 0.9);
55
+ background-color: ${theme?.hoverPrimaryButtonColor ?? 'rgba(56, 65, 81, 0.9)'};
56
+ color: ${theme?.hoverPrimaryButtonTextColor ?? 'white'}
53
57
  }` }), isLoading ? (_jsx("div", { style: { position: 'absolute' }, children: _jsx(LoadingSpinner, {}) })) : null, _jsx("div", { style: {
54
58
  visibility: isLoading ? 'hidden' : 'visible',
55
59
  }, children: label })] }));