@quillsql/admin 1.3.9 → 1.5.2

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 (55) hide show
  1. package/dist/cjs/Admin.d.ts +4 -1
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +122 -77
  4. package/dist/cjs/AdminProvider.d.ts +1 -1
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +9 -9
  7. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  8. package/dist/cjs/api/ConnectionClient.js +13 -0
  9. package/dist/cjs/components/UiComponents.d.ts +2 -1
  10. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  11. package/dist/cjs/components/UiComponents.js +9 -7
  12. package/dist/cjs/forms/client_onboard/CreateSqlViews.js +1 -1
  13. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  14. package/dist/cjs/forms/sql_views/CreateEditSqlView.js +19 -6
  15. package/dist/cjs/modals/NewDashboardModal.js +1 -1
  16. package/dist/cjs/modals/ReorderDashboardModal.d.ts.map +1 -1
  17. package/dist/cjs/modals/ReorderDashboardModal.js +178 -63
  18. package/dist/cjs/primitives/ModalPrimitive.d.ts.map +1 -1
  19. package/dist/cjs/primitives/ModalPrimitive.js +1 -2
  20. package/dist/cjs/public_components/DashboardBuilder.d.ts.map +1 -1
  21. package/dist/cjs/public_components/DashboardBuilder.js +92 -30
  22. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  23. package/dist/cjs/public_components/DashboardManager.js +164 -160
  24. package/dist/cjs/public_components/SQLViewManager.d.ts.map +1 -1
  25. package/dist/cjs/public_components/SQLViewManager.js +23 -4
  26. package/dist/cjs/utils/constants.d.ts +4 -4
  27. package/dist/cjs/utils/constants.js +2 -2
  28. package/dist/esm/Admin.d.ts +4 -1
  29. package/dist/esm/Admin.d.ts.map +1 -1
  30. package/dist/esm/Admin.js +124 -79
  31. package/dist/esm/AdminProvider.d.ts +1 -1
  32. package/dist/esm/AdminProvider.d.ts.map +1 -1
  33. package/dist/esm/AdminProvider.js +10 -10
  34. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  35. package/dist/esm/api/ConnectionClient.js +13 -0
  36. package/dist/esm/components/UiComponents.d.ts +2 -1
  37. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  38. package/dist/esm/components/UiComponents.js +9 -7
  39. package/dist/esm/forms/client_onboard/CreateSqlViews.js +2 -2
  40. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  41. package/dist/esm/forms/sql_views/CreateEditSqlView.js +19 -6
  42. package/dist/esm/modals/NewDashboardModal.js +1 -1
  43. package/dist/esm/modals/ReorderDashboardModal.d.ts.map +1 -1
  44. package/dist/esm/modals/ReorderDashboardModal.js +178 -63
  45. package/dist/esm/primitives/ModalPrimitive.d.ts.map +1 -1
  46. package/dist/esm/primitives/ModalPrimitive.js +1 -2
  47. package/dist/esm/public_components/DashboardBuilder.d.ts.map +1 -1
  48. package/dist/esm/public_components/DashboardBuilder.js +93 -31
  49. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  50. package/dist/esm/public_components/DashboardManager.js +164 -160
  51. package/dist/esm/public_components/SQLViewManager.d.ts.map +1 -1
  52. package/dist/esm/public_components/SQLViewManager.js +23 -4
  53. package/dist/esm/utils/constants.d.ts +4 -4
  54. package/dist/esm/utils/constants.js +2 -2
  55. package/package.json +1 -1
@@ -10,6 +10,7 @@ import { NewDashboardModal } from '../modals/NewDashboardModal';
10
10
  import { QUILL_SERVER } from '../utils/constants';
11
11
  import EmptyDashboardComponent from '../components/EmptyDashboardComponent';
12
12
  import DatabaseMismatchCard from '../components/DatabaseMismatchCard';
13
+ import { MemoizedModal } from '../components/UiComponents';
13
14
  export default function DashboardManager({ navigateToDashboardBuilder, containerStyle, }) {
14
15
  const { state, dispatch } = useAdmin();
15
16
  const parentRef = useRef(null);
@@ -109,13 +110,15 @@ export default function DashboardManager({ navigateToDashboardBuilder, container
109
110
  ...state.queryHeaders,
110
111
  'Content-Type': 'application/json',
111
112
  },
112
- body: JSON.stringify({ metadata: {
113
+ body: JSON.stringify({
114
+ metadata: {
113
115
  orgId: state.organizationId || '*',
114
116
  task: 'config',
115
117
  name: dashboard,
116
118
  clientId: state.client._id,
117
119
  databaseType: state.client.databaseType,
118
- } }),
120
+ },
121
+ }),
119
122
  credentials: state.withCredentials ? 'include' : 'omit', // If withCredentials is true, set to 'include'. Otherwise, set to 'omit'.
120
123
  });
121
124
  responseData = (await response.json()).data;
@@ -155,168 +158,169 @@ export default function DashboardManager({ navigateToDashboardBuilder, container
155
158
  state.organizationId,
156
159
  state.client,
157
160
  ]);
158
- if (state.activeComponent == 'Report') {
159
- return (_jsx(ReportWrapper, { ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, ModalComponent: ModalPrimitive, SelectComponent: SelectPrimitive, OrganizationSelectComponent: OrgSelect, organizationId: state.organizationId, queryEndpoint: state.queryEndpoint, queryHeaders: state.queryHeaders, withCredentials: state.withCredentials }));
160
- }
161
- return (_jsx("div", { style: containerStyle, children: _jsxs("div", { style: {
162
- display: 'flex',
163
- flexDirection: 'column',
164
- paddingTop: '0px',
165
- position: 'relative',
166
- }, ref: parentRef, children: [_jsx("div", { style: {
167
- // width: 'calc(100vw - 30px)',
168
- display: 'flex',
169
- position: 'sticky',
170
- backgroundColor: 'white',
171
- zIndex: 3,
172
- left: 0,
173
- right: 0,
174
- top: 0,
175
- flexDirection: 'row',
176
- paddingTop: 12,
177
- alignItems: 'center',
178
- justifyContent: 'space-between',
179
- paddingLeft: '30px',
180
- paddingRight: '30px',
181
- borderBottomWidth: 1,
182
- borderTopWidth: 0,
183
- borderLeftWidth: 0,
184
- borderRightWidth: 0,
185
- borderStyle: 'solid',
186
- borderColor: state.theme.borderColor,
187
- paddingBottom: 20,
188
- // boxShadow: "0px 1px 4px 0px rgba(0, 0, 0, 0.07)",
189
- // paddingRight: '50px',
190
- // position: 'absolute'
191
- // // zIndex: 10
192
- }, children: _jsxs("div", { style: {
193
- width: '100%',
161
+ return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: {
162
+ display: 'flex',
163
+ flexDirection: 'column',
164
+ paddingTop: '0px',
165
+ position: 'relative',
166
+ }, ref: parentRef, children: [_jsx("div", { style: {
167
+ // width: 'calc(100vw - 30px)',
194
168
  display: 'flex',
169
+ position: 'sticky',
170
+ backgroundColor: 'white',
171
+ zIndex: 3,
172
+ left: 0,
173
+ right: 0,
174
+ top: 0,
195
175
  flexDirection: 'row',
196
- alignItems: 'flex-end',
176
+ paddingTop: 12,
177
+ alignItems: 'center',
197
178
  justifyContent: 'space-between',
198
- }, children: [_jsxs("div", { style: { gap: 16, display: 'flex', flexDirection: 'row' }, children: [!!state.dashboards.length && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("h1", { style: {
199
- fontSize: '14px',
200
- paddingTop: '0px',
201
- marginTop: '0px',
202
- marginBottom: '4px',
203
- fontWeight: '600',
204
- color: state.theme.secondaryTextColor,
205
- userSelect: 'none',
206
- }, children: "Dashboard" }), _jsx(DashboardSelectPopover, { dashboards: state.dashboards.length
207
- ? state.dashboards.map((elem) => {
208
- return { value: elem.name, label: elem.name };
209
- })
210
- : [], setDashboard: (dashboard) => {
211
- dispatch({
212
- type: 'SET_SELECTED_DASHBOARD',
213
- payload: dashboard,
214
- });
215
- }, dashboard: state.selectedDashboard ? state.selectedDashboard : '', theme: state.theme, onClickNewDashboard: () => {
216
- setNewDashboardModalIsOpen(true);
217
- }, setSelectedEditDashboard: (d) => {
218
- dispatch({
219
- type: 'SET_SELECTED_EDIT_DASHBOARD',
220
- payload: d,
221
- });
222
- setEditFilterModalIsOpen(true);
223
- } })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("h1", { style: {
224
- fontSize: '14px',
225
- paddingTop: '0px',
226
- marginTop: '0px',
227
- marginBottom: '4px',
228
- fontWeight: '600',
229
- color: state.theme.secondaryTextColor,
230
- fontFamily: state.theme.fontFamily,
231
- userSelect: 'none',
232
- }, children: "Environment" }), _jsx(EnvSelectPopover, { setEnvironment: (env) => dispatch({ type: 'SET_ENVIRONMENT', payload: env }), environment: state.environment, clients: state.clients, client: state.client, setClient: (client) => dispatch({ type: 'SET_CLIENT', payload: client }), theme: state.theme, showPromote: true, handlePromote: () => setIsPromoteDashModalOpen(true) })] })] }), !!state.dashboards.length && !state.databaseTypeMismatch.show && (_jsx(OrgSelect, { parentRef: parentRef, environment: state.environment, setEnvironment: (env) => dispatch({ type: 'SET_ENVIRONMENT', payload: env }), organizations: state.organizations, theme: state.theme, organizationId: state.organizationId, setOrganizationId: (id) => dispatch({ type: 'SET_ORGANIZATION_ID', payload: id }) }))] }) }), state.databaseTypeMismatch.show ? (_jsx(DatabaseMismatchCard, { environemntName: state.client.name, environemntDatabaseType: state.client.databaseType, backendDatabaseType: state.databaseTypeMismatch.backendDatabaseType })) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: { display: 'inline-block' }, children: [!state.dashboards.length && !initialLoad && (_jsx("div", { style: {
233
- width: '100%',
234
- display: 'flex',
235
- flexDirection: 'column',
236
- alignItems: 'center',
237
- }, children: _jsxs("div", { style: {
238
- height: 80,
239
- width: 260,
240
- borderRadius: 6,
241
- marginTop: 100,
179
+ paddingLeft: '30px',
180
+ paddingRight: '30px',
181
+ borderBottomWidth: 1,
182
+ borderTopWidth: 0,
183
+ borderLeftWidth: 0,
184
+ borderRightWidth: 0,
185
+ borderStyle: 'solid',
186
+ borderColor: state.theme.borderColor,
187
+ paddingBottom: 20,
188
+ // boxShadow: "0px 1px 4px 0px rgba(0, 0, 0, 0.07)",
189
+ // paddingRight: '50px',
190
+ // position: 'absolute'
191
+ // // zIndex: 10
192
+ }, children: _jsxs("div", { style: {
193
+ width: '100%',
194
+ display: 'flex',
195
+ flexDirection: 'row',
196
+ alignItems: 'flex-end',
197
+ justifyContent: 'space-between',
198
+ }, children: [_jsxs("div", { style: { gap: 16, display: 'flex', flexDirection: 'row' }, children: [!!state.dashboards.length && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("h1", { style: {
199
+ fontSize: '14px',
200
+ paddingTop: '0px',
201
+ marginTop: '0px',
202
+ marginBottom: '4px',
203
+ fontWeight: '600',
204
+ color: state.theme.secondaryTextColor,
205
+ userSelect: 'none',
206
+ }, children: "Dashboard" }), _jsx(DashboardSelectPopover, { dashboards: state.dashboards.length
207
+ ? state.dashboards.map((elem) => {
208
+ return { value: elem.name, label: elem.name };
209
+ })
210
+ : [], setDashboard: (dashboard) => {
211
+ dispatch({
212
+ type: 'SET_SELECTED_DASHBOARD',
213
+ payload: dashboard,
214
+ });
215
+ }, dashboard: state.selectedDashboard ? state.selectedDashboard : '', theme: state.theme, onClickNewDashboard: () => {
216
+ setNewDashboardModalIsOpen(true);
217
+ }, setSelectedEditDashboard: (d) => {
218
+ dispatch({
219
+ type: 'SET_SELECTED_EDIT_DASHBOARD',
220
+ payload: d,
221
+ });
222
+ setEditFilterModalIsOpen(true);
223
+ } })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("h1", { style: {
224
+ fontSize: '14px',
225
+ paddingTop: '0px',
226
+ marginTop: '0px',
227
+ marginBottom: '4px',
228
+ fontWeight: '600',
229
+ color: state.theme.secondaryTextColor,
230
+ fontFamily: state.theme.fontFamily,
231
+ userSelect: 'none',
232
+ }, children: "Environment" }), _jsx(EnvSelectPopover, { setEnvironment: (env) => dispatch({ type: 'SET_ENVIRONMENT', payload: env }), environment: state.environment, clients: state.clients, client: state.client, setClient: (client) => dispatch({ type: 'SET_CLIENT', payload: client }), theme: state.theme, showPromote: true, handlePromote: () => setIsPromoteDashModalOpen(true) })] })] }), !!state.dashboards.length && !state.databaseTypeMismatch.show && (_jsx(OrgSelect, { parentRef: parentRef, environment: state.environment, setEnvironment: (env) => dispatch({ type: 'SET_ENVIRONMENT', payload: env }), organizations: state.organizations, theme: state.theme, organizationId: state.organizationId, setOrganizationId: (id) => dispatch({ type: 'SET_ORGANIZATION_ID', payload: id }) }))] }) }), state.databaseTypeMismatch.show ? (_jsx(DatabaseMismatchCard, { environemntName: state.client.name, environemntDatabaseType: state.client.databaseType, backendDatabaseType: state.databaseTypeMismatch.backendDatabaseType })) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: { display: 'inline-block' }, children: [!state.dashboards.length && !initialLoad && (_jsx("div", { style: {
233
+ width: '100%',
242
234
  display: 'flex',
243
235
  flexDirection: 'column',
244
236
  alignItems: 'center',
245
- justifyContent: 'center',
246
- gap: 20,
247
- }, className: "hover-dash-rect", onClick: () => {
248
- setNewDashboardModalIsOpen(true);
249
- }, children: [_jsx("style", { children: ` .hover-dash-rect { background: white; border: 1px dashed #e7e7e7; } .hover-dash-rect:hover { background: white; box-shadow: 0px 1px 24px 0px rgba(0, 0, 0, 0.07); border: 1px solid #e7e7e7; } ` }), _jsxs("div", { style: {
250
- display: 'flex',
251
- flexDirection: 'row',
252
- alignItems: 'center',
253
- justifyContent: 'center',
254
- width: 260,
255
- }, children: [_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#565656", height: 26, width: 26, children: [_jsx("path", { fillRule: "evenodd", d: "M2.25 13.5a8.25 8.25 0 0 1 8.25-8.25.75.75 0 0 1 .75.75v6.75H18a.75.75 0 0 1 .75.75 8.25 8.25 0 0 1-16.5 0Z", clipRule: "evenodd" }), _jsx("path", { fillRule: "evenodd", d: "M12.75 3a.75.75 0 0 1 .75-.75 8.25 8.25 0 0 1 8.25 8.25.75.75 0 0 1-.75.75h-7.5a.75.75 0 0 1-.75-.75V3Z", clipRule: "evenodd" })] }), _jsx("div", { style: {
256
- fontSize: 14,
257
- fontWeight: 500,
258
- color: '#565656',
259
- // border: '1px solid #e7e7e7',
260
- paddingTop: 8,
261
- paddingBottom: 8,
262
- paddingRight: 12,
263
- paddingLeft: 12,
264
- borderRadius: 4,
265
- cursor: 'pointer',
266
- }, className: "quill-hover-button", children: "Create new dashboard" })] })] }) })), reloadFlag ? null : (_jsx(Dashboard, { name: state.selectedDashboard, containerStyle: {
267
- paddingRight: 25,
268
- paddingLeft: 25,
269
- paddingTop: 30,
270
- }, onClickDashboardItem: (elem) => {
271
- dispatch({ type: 'SET_REPORT_ID', payload: elem._id });
272
- dispatch({
273
- type: 'SET_ACTIVE_COMPONENT',
274
- payload: 'Report',
275
- });
276
- }, EmptyDashboardComponent: EmptyDashboardComponent }))] }), _jsx(EditDashboardsModal, { clientId: state.client._id, isOpen: isEditDashboardModalOpen, setIsOpen: setIsEditDashboardModalOpen, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, openEditFilterModal: (dashboardName) => {
277
- dispatch({
278
- type: 'SET_SELECTED_EDIT_DASHBOARD',
279
- payload: dashboardName,
280
- });
281
- setEditFilterModalIsOpen(true);
282
- // setIsEditDashboardModalOpen(false);
283
- }, openAddDashboardModal: () => {
284
- setIsAddDashboardModalOpen(true);
285
- // setIsEditDashboardModalOpen(false);
286
- }, openEditOrderModal: (dashboardName) => {
287
- setSelectedReorderDashboard(dashboardName);
288
- setIsReorderDashboardModalOpen(true);
289
- }, HeaderComponent: HeaderPrimitive, setDashboardData: setDashboardData, dashboards: state.dashboards, getDashNames: getDashNames }), _jsx(PromoteDashModal, { clientId: state.client._id, client: state.client, clients: state.clients, isOpen: isPromoteDashModalOpen, setIsOpen: setIsPromoteDashModalOpen, ModalComponent: ModalPrimitive, dashboards: state.dashboards, selectedDashboard: state.selectedDashboard, theme: state.theme, ButtonComponent: ButtonPrimitive }), _jsx(EditFiltersModal, { selectedDashboard: state.selectedDashboard, dashboardData: state.editDashboardData, isOpen: editFilterModalIsOpen, setIsOpen: setEditFilterModalIsOpen, openAddFilterModal: () => {
290
- setAddFilterModalIsOpen(true);
291
- // setEditFilterModalIsOpen(false);
292
- }, openEditOrderModal: (dashboardName) => {
293
- setSelectedReorderDashboard(dashboardName);
294
- setIsReorderDashboardModalOpen(true);
295
- }, onSave: async () => {
296
- await getDashNames();
297
- setReloadFlag(true);
298
- reloadDashboard();
299
- }, client: state.client, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, HeaderComponent: HeaderPrimitive, SelectComponent: SelectPrimitive, dashNames: state.dashboards, setSelectedEditDashboard: (d) => dispatch({ type: 'SET_SELECTED_EDIT_DASHBOARD', payload: d }) }), _jsx(NewDashboardModal, { isOpen: newDashboardModalIsOpen, setIsOpen: setNewDashboardModalIsOpen, openEditOrderModal: (dashboardName) => {
300
- setSelectedReorderDashboard(dashboardName);
301
- setIsReorderDashboardModalOpen(true);
302
- }, onSave: (name) => {
303
- dispatch({ type: 'SET_SELECTED_DASHBOARD', payload: name });
304
- dispatch({
305
- type: 'SET_DASHBOARDS',
306
- payload: [...state.dashboards, { name }],
307
- });
308
- setReloadFlag(true);
309
- reloadDashboard();
310
- }, client: state.client, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, HeaderComponent: HeaderPrimitive, SelectComponent: SelectPrimitive, dashNames: state.dashboards, setSelectedEditDashboard: (d) => dispatch({ type: 'SET_SELECTED_EDIT_DASHBOARD', payload: d }) }), _jsx(ReorderDashboardModal, { organizationId: state.organizationId, isOpen: isReorderDashboardModalOpen, client: state.client, onSave: () => {
311
- setReloadFlag(true);
312
- reloadDashboard();
313
- }, setIsOpen: setIsReorderDashboardModalOpen, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, selectedDashboard: selectedReorderDashboard }), _jsx(AddFilterModal, { selectedDashboard: state.selectedEditDashboard, isOpen: addFilterModalIsOpen, setIsOpen: setAddFilterModalIsOpen, client: state.client, ModalComponent: ModalPrimitive, TextInputComponent: TextInputPrimitive, SelectComponent: SelectPrimitive, HeaderComponent: HeaderPrimitive, ButtonComponent: ButtonPrimitive, openAddDashboardModal: () => {
314
- setIsAddDashboardModalOpen(true);
315
- // setAddFilterModalIsOpen(false);
316
- } }), _jsx(AddDashboardModal, { selectedDashboard: state.selectedDashboard, isOpen: isAddDashboardModalOpen, setIsOpen: setIsAddDashboardModalOpen, client: state.client, ModalComponent: ModalPrimitive, TextInputComponent: TextInputPrimitive, SelectComponent: SelectPrimitive, HeaderComponent: HeaderPrimitive, ButtonComponent: ButtonPrimitive, dashNames: state.dashboards,
317
- // @ts-ignore
318
- openAddFilterModal: () => {
319
- setAddFilterModalIsOpen(true);
320
- // setIsAddDashboardModalOpen(false);
321
- }, organizationId: state.organizationId, getDashNames: getDashNames })] }))] }) }));
237
+ }, children: _jsxs("div", { style: {
238
+ height: 80,
239
+ width: 260,
240
+ borderRadius: 6,
241
+ marginTop: 100,
242
+ display: 'flex',
243
+ flexDirection: 'column',
244
+ alignItems: 'center',
245
+ justifyContent: 'center',
246
+ gap: 20,
247
+ }, className: "hover-dash-rect", onClick: () => {
248
+ setNewDashboardModalIsOpen(true);
249
+ }, children: [_jsx("style", { children: ` .hover-dash-rect { background: white; border: 1px dashed #e7e7e7; } .hover-dash-rect:hover { background: white; box-shadow: 0px 1px 24px 0px rgba(0, 0, 0, 0.07); border: 1px solid #e7e7e7; } ` }), _jsxs("div", { style: {
250
+ display: 'flex',
251
+ flexDirection: 'row',
252
+ alignItems: 'center',
253
+ justifyContent: 'center',
254
+ width: 260,
255
+ }, children: [_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#565656", height: 26, width: 26, children: [_jsx("path", { fillRule: "evenodd", d: "M2.25 13.5a8.25 8.25 0 0 1 8.25-8.25.75.75 0 0 1 .75.75v6.75H18a.75.75 0 0 1 .75.75 8.25 8.25 0 0 1-16.5 0Z", clipRule: "evenodd" }), _jsx("path", { fillRule: "evenodd", d: "M12.75 3a.75.75 0 0 1 .75-.75 8.25 8.25 0 0 1 8.25 8.25.75.75 0 0 1-.75.75h-7.5a.75.75 0 0 1-.75-.75V3Z", clipRule: "evenodd" })] }), _jsx("div", { style: {
256
+ fontSize: 14,
257
+ fontWeight: 500,
258
+ color: '#565656',
259
+ // border: '1px solid #e7e7e7',
260
+ paddingTop: 8,
261
+ paddingBottom: 8,
262
+ paddingRight: 12,
263
+ paddingLeft: 12,
264
+ borderRadius: 4,
265
+ cursor: 'pointer',
266
+ }, className: "quill-hover-button", children: "Create new dashboard" })] })] }) })), reloadFlag ? null : (_jsx(Dashboard, { name: state.selectedDashboard, containerStyle: { padding: 25 }, onClickDashboardItem: (elem) => {
267
+ dispatch({ type: 'SET_REPORT_ID', payload: elem._id });
268
+ dispatch({
269
+ type: 'SET_ACTIVE_COMPONENT',
270
+ payload: 'Report',
271
+ });
272
+ }, EmptyDashboardComponent: EmptyDashboardComponent }))] }), _jsx(EditDashboardsModal, { clientId: state.client._id, isOpen: isEditDashboardModalOpen, setIsOpen: setIsEditDashboardModalOpen, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, openEditFilterModal: (dashboardName) => {
273
+ dispatch({
274
+ type: 'SET_SELECTED_EDIT_DASHBOARD',
275
+ payload: dashboardName,
276
+ });
277
+ setEditFilterModalIsOpen(true);
278
+ // setIsEditDashboardModalOpen(false);
279
+ }, openAddDashboardModal: () => {
280
+ setIsAddDashboardModalOpen(true);
281
+ // setIsEditDashboardModalOpen(false);
282
+ }, openEditOrderModal: (dashboardName) => {
283
+ setSelectedReorderDashboard(dashboardName);
284
+ setIsReorderDashboardModalOpen(true);
285
+ }, HeaderComponent: HeaderPrimitive, setDashboardData: setDashboardData, dashboards: state.dashboards, getDashNames: getDashNames }), _jsx(PromoteDashModal, { clientId: state.client._id, client: state.client, clients: state.clients, isOpen: isPromoteDashModalOpen, setIsOpen: setIsPromoteDashModalOpen, ModalComponent: ModalPrimitive, dashboards: state.dashboards, selectedDashboard: state.selectedDashboard, theme: state.theme, ButtonComponent: ButtonPrimitive }), _jsx(EditFiltersModal, { selectedDashboard: state.selectedDashboard, dashboardData: state.editDashboardData, isOpen: editFilterModalIsOpen, setIsOpen: setEditFilterModalIsOpen, openAddFilterModal: () => {
286
+ setAddFilterModalIsOpen(true);
287
+ // setEditFilterModalIsOpen(false);
288
+ }, openEditOrderModal: (dashboardName) => {
289
+ setSelectedReorderDashboard(dashboardName);
290
+ setIsReorderDashboardModalOpen(true);
291
+ }, onSave: async () => {
292
+ await getDashNames();
293
+ setReloadFlag(true);
294
+ reloadDashboard();
295
+ }, client: state.client, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, HeaderComponent: HeaderPrimitive, SelectComponent: SelectPrimitive, dashNames: state.dashboards, setSelectedEditDashboard: (d) => dispatch({ type: 'SET_SELECTED_EDIT_DASHBOARD', payload: d }) }), _jsx(NewDashboardModal, { isOpen: newDashboardModalIsOpen, setIsOpen: setNewDashboardModalIsOpen, openEditOrderModal: (dashboardName) => {
296
+ setSelectedReorderDashboard(dashboardName);
297
+ setIsReorderDashboardModalOpen(true);
298
+ }, onSave: (name) => {
299
+ dispatch({ type: 'SET_SELECTED_DASHBOARD', payload: name });
300
+ dispatch({
301
+ type: 'SET_DASHBOARDS',
302
+ payload: [...state.dashboards, { name }],
303
+ });
304
+ setReloadFlag(true);
305
+ reloadDashboard();
306
+ }, client: state.client, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, TextInputComponent: TextInputPrimitive, HeaderComponent: HeaderPrimitive, SelectComponent: SelectPrimitive, dashNames: state.dashboards, setSelectedEditDashboard: (d) => dispatch({ type: 'SET_SELECTED_EDIT_DASHBOARD', payload: d }) }), _jsx(ReorderDashboardModal, { organizationId: state.organizationId, isOpen: isReorderDashboardModalOpen, client: state.client, onSave: () => {
307
+ setReloadFlag(true);
308
+ reloadDashboard();
309
+ }, setIsOpen: setIsReorderDashboardModalOpen, ModalComponent: ModalPrimitive, ButtonComponent: ButtonPrimitive, selectedDashboard: selectedReorderDashboard }), _jsx(AddFilterModal, { selectedDashboard: state.selectedEditDashboard, isOpen: addFilterModalIsOpen, setIsOpen: setAddFilterModalIsOpen, client: state.client, ModalComponent: ModalPrimitive, TextInputComponent: TextInputPrimitive, SelectComponent: SelectPrimitive, HeaderComponent: HeaderPrimitive, ButtonComponent: ButtonPrimitive, openAddDashboardModal: () => {
310
+ setIsAddDashboardModalOpen(true);
311
+ // setAddFilterModalIsOpen(false);
312
+ } }), _jsx(AddDashboardModal, { selectedDashboard: state.selectedDashboard, isOpen: isAddDashboardModalOpen, setIsOpen: setIsAddDashboardModalOpen, client: state.client, ModalComponent: ModalPrimitive, TextInputComponent: TextInputPrimitive, SelectComponent: SelectPrimitive, HeaderComponent: HeaderPrimitive, ButtonComponent: ButtonPrimitive, dashNames: state.dashboards,
313
+ // @ts-ignore
314
+ openAddFilterModal: () => {
315
+ setAddFilterModalIsOpen(true);
316
+ // setIsAddDashboardModalOpen(false);
317
+ }, organizationId: state.organizationId, getDashNames: getDashNames })] }))] }), _jsx(ReportWrapper, { isOpen: state.activeComponent === 'Report', setIsOpen: (isOpen) => {
318
+ dispatch({
319
+ type: 'SET_ACTIVE_COMPONENT',
320
+ payload: isOpen ? 'Report' : 'Dashboards',
321
+ });
322
+ }, ButtonComponent: ButtonPrimitive, SecondaryButtonComponent: SecondaryButtonPrimitive, ModalComponent: MemoizedModal, SelectComponent: SelectPrimitive, OrganizationSelectComponent: OrgSelect, organizationId: state.organizationId, queryEndpoint: state.queryEndpoint, queryHeaders: state.queryHeaders, withCredentials: state.withCredentials, reloadDashboard: () => {
323
+ setReloadFlag(true);
324
+ reloadDashboard();
325
+ } })] }));
322
326
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SQLViewManager.d.ts","sourceRoot":"","sources":["../../../src/public_components/SQLViewManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+B,MAAM,OAAO,CAAC;AA0BnE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,cAAc,GACf,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC,2CAqUA"}
1
+ {"version":3,"file":"SQLViewManager.d.ts","sourceRoot":"","sources":["../../../src/public_components/SQLViewManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+B,MAAM,OAAO,CAAC;AA0BnE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,cAAc,GACf,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC,2CA8VA"}
@@ -94,15 +94,34 @@ export default function SQLViewManager({ containerStyle, }) {
94
94
  alert('No Name found');
95
95
  return;
96
96
  }
97
+ if (tables?.map((table) => table.name).includes(name)) {
98
+ alert('Name already exists');
99
+ return;
100
+ }
101
+ if (!/^[a-z0-9_]+$/.test(name)) {
102
+ alert('Name must be lowercase with no spaces');
103
+ return;
104
+ }
97
105
  await addSqlView(name, query, state);
98
106
  break;
99
107
  case 'edit':
108
+ if (!id) {
109
+ return;
110
+ }
100
111
  if (!name) {
101
112
  alert('No id found');
102
113
  return;
103
114
  }
104
- if (!id) {
105
- alert('No id found');
115
+ if (!/^[a-z0-9_]+$/.test(name)) {
116
+ alert('Names can only include lowercase letters, numbers, and underscores');
117
+ return;
118
+ }
119
+ // check if the tableName is present excluding the table with the same id
120
+ if (tables
121
+ ?.filter((table) => table._id !== id)
122
+ .map((table) => table.name)
123
+ .includes(name)) {
124
+ alert('Name already exists');
106
125
  return;
107
126
  }
108
127
  await editSQLView(name, query, id, state);
@@ -155,7 +174,7 @@ export default function SQLViewManager({ containerStyle, }) {
155
174
  flexDirection: 'column',
156
175
  paddingTop: '0px',
157
176
  position: 'relative',
158
- }, ref: parentRef, children: [_jsx("div", { style: {
177
+ }, ref: parentRef, children: [(state.databaseTypeMismatch.show || !editQueryView) && (_jsx("div", { style: {
159
178
  // width: 'calc(100vw - 30px)',
160
179
  display: 'flex',
161
180
  position: 'sticky',
@@ -204,7 +223,7 @@ export default function SQLViewManager({ containerStyle, }) {
204
223
  setEditViewId('');
205
224
  setInitialSqlView(undefined);
206
225
  setEditQueryView(true);
207
- }, label: "Add view +" }))] }) }), state.databaseTypeMismatch.show ? (_jsx(DatabaseMismatchCard, { environemntName: state.client.name, environemntDatabaseType: state.client.databaseType, backendDatabaseType: state.databaseTypeMismatch.backendDatabaseType })) : (_jsx(_Fragment, { children: !editQueryView ? (_jsx("div", { style: {
226
+ }, label: "Add view +" }))] }) })), state.databaseTypeMismatch.show ? (_jsx(DatabaseMismatchCard, { environemntName: state.client.name, environemntDatabaseType: state.client.databaseType, backendDatabaseType: state.databaseTypeMismatch.backendDatabaseType })) : (_jsx(_Fragment, { children: !editQueryView ? (_jsx("div", { style: {
208
227
  display: 'flex',
209
228
  flexWrap: 'wrap',
210
229
  paddingLeft: 25,
@@ -8,11 +8,11 @@ export declare const InitialDateRangeOptions: readonly [{
8
8
  readonly value: "LAST_30_DAYS";
9
9
  readonly label: "Last 30 days";
10
10
  }, {
11
- readonly value: "CURRENT_MONTH";
12
- readonly label: "Current Month";
11
+ readonly value: "THIS_MONTH";
12
+ readonly label: "This Month";
13
13
  }, {
14
- readonly value: "CURRENT_WEEK";
15
- readonly label: "Current Week";
14
+ readonly value: "THIS_WEEK";
15
+ readonly label: "This Week";
16
16
  }, {
17
17
  readonly value: "ALL_TIME";
18
18
  readonly label: "All time";
@@ -4,8 +4,8 @@
4
4
  export const InitialDateRangeOptions = [
5
5
  { value: 'LAST_90_DAYS', label: 'Last 90 days' },
6
6
  { value: 'LAST_30_DAYS', label: 'Last 30 days' },
7
- { value: 'CURRENT_MONTH', label: 'Current Month' },
8
- { value: 'CURRENT_WEEK', label: 'Current Week' },
7
+ { value: 'THIS_MONTH', label: 'This Month' },
8
+ { value: 'THIS_WEEK', label: 'This Week' },
9
9
  { value: 'ALL_TIME', label: 'All time' },
10
10
  ];
11
11
  export const defaultDateRange = InitialDateRangeOptions[0];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/admin",
3
- "version": "1.3.9",
3
+ "version": "1.5.2",
4
4
  "description": "Admin tools for Quill",
5
5
  "exports": {
6
6
  ".": {