@quillsql/admin 1.5.2 → 1.6.0

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 (141) hide show
  1. package/dist/cjs/Admin.d.ts +19 -72
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +200 -994
  4. package/dist/cjs/AdminProvider.d.ts +0 -11
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +16 -10
  7. package/dist/cjs/api/ConnectionClient.d.ts +11 -0
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +71 -10
  10. package/dist/cjs/components/DropDownMenu.js +1 -1
  11. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  12. package/dist/cjs/components/DropDownMenuWithLabel.js +16 -54
  13. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  14. package/dist/cjs/components/OrgSelect.js +10 -20
  15. package/dist/cjs/components/QuillSelect.d.ts +3 -0
  16. package/dist/cjs/components/QuillSelect.d.ts.map +1 -0
  17. package/dist/cjs/components/QuillSelect.js +137 -0
  18. package/dist/cjs/components/SegmentedControl.d.ts +7 -0
  19. package/dist/cjs/components/SegmentedControl.d.ts.map +1 -0
  20. package/dist/cjs/components/SegmentedControl.js +54 -0
  21. package/dist/cjs/components/UiComponents.d.ts +18 -30
  22. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  23. package/dist/cjs/components/UiComponents.js +39 -84
  24. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts +2 -1
  25. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  26. package/dist/cjs/forms/client_onboard/ConnectSchema.js +143 -68
  27. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  28. package/dist/cjs/forms/client_onboard/CreateSqlViews.js +39 -10
  29. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts +7 -4
  30. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  31. package/dist/cjs/forms/sql_views/CreateEditSqlView.js +28 -25
  32. package/dist/cjs/hooks/useOnClickOutside.d.ts +3 -0
  33. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -0
  34. package/dist/cjs/hooks/useOnClickOutside.js +20 -0
  35. package/dist/cjs/modals/EditFiltersModal.d.ts +17 -0
  36. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -0
  37. package/dist/cjs/modals/EditFiltersModal.js +345 -0
  38. package/dist/cjs/modals/NewDashboardModal.d.ts +1 -3
  39. package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
  40. package/dist/cjs/modals/NewDashboardModal.js +62 -45
  41. package/dist/cjs/modals/PromoteDashModal.d.ts.map +1 -1
  42. package/dist/cjs/modals/PromoteDashModal.js +10 -3
  43. package/dist/cjs/modals/ReorderDashboardModal.d.ts.map +1 -1
  44. package/dist/cjs/modals/ReorderDashboardModal.js +42 -45
  45. package/dist/cjs/modals/index.d.ts +0 -1
  46. package/dist/cjs/modals/index.d.ts.map +1 -1
  47. package/dist/cjs/modals/index.js +1 -3
  48. package/dist/cjs/primitives/ButtonPrimitive.d.ts +3 -1
  49. package/dist/cjs/primitives/ButtonPrimitive.d.ts.map +1 -1
  50. package/dist/cjs/primitives/ButtonPrimitive.js +5 -3
  51. package/dist/cjs/primitives/TogglePrimitive.js +5 -5
  52. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  53. package/dist/cjs/public_components/CreateEnvironment.js +1 -1
  54. package/dist/cjs/public_components/DashboardBuilder.d.ts.map +1 -1
  55. package/dist/cjs/public_components/DashboardBuilder.js +41 -6
  56. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  57. package/dist/cjs/public_components/DashboardManager.js +47 -83
  58. package/dist/cjs/public_components/SQLViewManager.d.ts.map +1 -1
  59. package/dist/cjs/public_components/SQLViewManager.js +69 -20
  60. package/dist/cjs/utils/schema.d.ts +6 -0
  61. package/dist/cjs/utils/schema.d.ts.map +1 -1
  62. package/dist/cjs/utils/table.d.ts +1 -0
  63. package/dist/cjs/utils/table.d.ts.map +1 -1
  64. package/dist/cjs/utils/table.js +13 -0
  65. package/dist/cjs/utils/textProcessing.d.ts +2 -0
  66. package/dist/cjs/utils/textProcessing.d.ts.map +1 -0
  67. package/dist/cjs/utils/textProcessing.js +9 -0
  68. package/dist/esm/Admin.d.ts +19 -72
  69. package/dist/esm/Admin.d.ts.map +1 -1
  70. package/dist/esm/Admin.js +203 -987
  71. package/dist/esm/AdminProvider.d.ts +0 -11
  72. package/dist/esm/AdminProvider.d.ts.map +1 -1
  73. package/dist/esm/AdminProvider.js +16 -10
  74. package/dist/esm/api/ConnectionClient.d.ts +11 -0
  75. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  76. package/dist/esm/api/ConnectionClient.js +69 -9
  77. package/dist/esm/components/DropDownMenu.js +1 -1
  78. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  79. package/dist/esm/components/DropDownMenuWithLabel.js +16 -54
  80. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  81. package/dist/esm/components/OrgSelect.js +6 -19
  82. package/dist/esm/components/QuillSelect.d.ts +3 -0
  83. package/dist/esm/components/QuillSelect.d.ts.map +1 -0
  84. package/dist/esm/components/QuillSelect.js +130 -0
  85. package/dist/esm/components/SegmentedControl.d.ts +7 -0
  86. package/dist/esm/components/SegmentedControl.d.ts.map +1 -0
  87. package/dist/esm/components/SegmentedControl.js +50 -0
  88. package/dist/esm/components/UiComponents.d.ts +18 -30
  89. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  90. package/dist/esm/components/UiComponents.js +36 -83
  91. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts +2 -1
  92. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  93. package/dist/esm/forms/client_onboard/ConnectSchema.js +145 -70
  94. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  95. package/dist/esm/forms/client_onboard/CreateSqlViews.js +40 -11
  96. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts +7 -4
  97. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
  98. package/dist/esm/forms/sql_views/CreateEditSqlView.js +29 -26
  99. package/dist/esm/hooks/useOnClickOutside.d.ts +3 -0
  100. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -0
  101. package/dist/esm/hooks/useOnClickOutside.js +18 -0
  102. package/dist/esm/modals/EditFiltersModal.d.ts +17 -0
  103. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -0
  104. package/dist/esm/modals/EditFiltersModal.js +338 -0
  105. package/dist/esm/modals/NewDashboardModal.d.ts +1 -3
  106. package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
  107. package/dist/esm/modals/NewDashboardModal.js +62 -45
  108. package/dist/esm/modals/PromoteDashModal.d.ts.map +1 -1
  109. package/dist/esm/modals/PromoteDashModal.js +10 -3
  110. package/dist/esm/modals/ReorderDashboardModal.d.ts.map +1 -1
  111. package/dist/esm/modals/ReorderDashboardModal.js +43 -46
  112. package/dist/esm/modals/index.d.ts +0 -1
  113. package/dist/esm/modals/index.d.ts.map +1 -1
  114. package/dist/esm/modals/index.js +0 -1
  115. package/dist/esm/primitives/ButtonPrimitive.d.ts +3 -1
  116. package/dist/esm/primitives/ButtonPrimitive.d.ts.map +1 -1
  117. package/dist/esm/primitives/ButtonPrimitive.js +5 -3
  118. package/dist/esm/primitives/TogglePrimitive.js +5 -5
  119. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  120. package/dist/esm/public_components/CreateEnvironment.js +1 -1
  121. package/dist/esm/public_components/DashboardBuilder.d.ts.map +1 -1
  122. package/dist/esm/public_components/DashboardBuilder.js +41 -6
  123. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  124. package/dist/esm/public_components/DashboardManager.js +49 -85
  125. package/dist/esm/public_components/SQLViewManager.d.ts.map +1 -1
  126. package/dist/esm/public_components/SQLViewManager.js +69 -20
  127. package/dist/esm/utils/schema.d.ts +6 -0
  128. package/dist/esm/utils/schema.d.ts.map +1 -1
  129. package/dist/esm/utils/table.d.ts +1 -0
  130. package/dist/esm/utils/table.d.ts.map +1 -1
  131. package/dist/esm/utils/table.js +11 -1
  132. package/dist/esm/utils/textProcessing.d.ts +2 -0
  133. package/dist/esm/utils/textProcessing.d.ts.map +1 -0
  134. package/dist/esm/utils/textProcessing.js +5 -0
  135. package/package.json +1 -1
  136. package/dist/cjs/modals/EditDashboardsModal.d.ts +0 -20
  137. package/dist/cjs/modals/EditDashboardsModal.d.ts.map +0 -1
  138. package/dist/cjs/modals/EditDashboardsModal.js +0 -94
  139. package/dist/esm/modals/EditDashboardsModal.d.ts +0 -20
  140. package/dist/esm/modals/EditDashboardsModal.d.ts.map +0 -1
  141. package/dist/esm/modals/EditDashboardsModal.js +0 -91
@@ -24,6 +24,7 @@ export default function SQLViewManager({ containerStyle, }) {
24
24
  const [deleteModalIsOpen, setDeleteModalIsOpen] = useState(false);
25
25
  const [isPromoteViewModalOpen, setIsPromoteViewModalOpen] = useState(false);
26
26
  const [allTableData, setAllTableData] = useState([]);
27
+ const [referencedTablesMap, setReferencedTablesMap] = useState({});
27
28
  const [schemaIsLoading, setSchemaIsLoading] = useState(false);
28
29
  const [initialSqlView, setInitialSqlView] = useState(undefined);
29
30
  const parentRef = useRef(null);
@@ -72,26 +73,51 @@ export default function SQLViewManager({ containerStyle, }) {
72
73
  setAllTableData(response);
73
74
  setSchemaIsLoading(false);
74
75
  };
76
+ const getReferencedTablesMap = async () => {
77
+ const response = await fetch(`${state.queryEndpoint}`, {
78
+ method: 'POST',
79
+ headers: {
80
+ ...state.queryHeaders,
81
+ 'Content-Type': 'application/json',
82
+ },
83
+ body: JSON.stringify({
84
+ metadata: {
85
+ clientId: state.client._id,
86
+ publicKey: state.client._id,
87
+ task: 'referenced-tables-map',
88
+ databaseType: state.client.databaseType,
89
+ },
90
+ }),
91
+ });
92
+ if (!response.ok) {
93
+ throw new Error('Failed to fetch tables data');
94
+ }
95
+ const data = await response.json();
96
+ setReferencedTablesMap(data.data.referencedTablesMap);
97
+ };
75
98
  useEffect(() => {
76
99
  let isSubscribed = true;
77
100
  if (isSubscribed && state.client) {
78
101
  getTables();
79
102
  getSchemaTableDetails();
103
+ getReferencedTablesMap();
80
104
  }
81
105
  return () => {
82
106
  isSubscribed = false;
83
107
  };
84
108
  }, [state.client]);
85
- const handleClickFirstDelete = () => {
86
- setTableToBeDeleted(editName);
87
- setDeleteModalIsOpen(true);
88
- };
89
- const handleModalSubmit = async (submitRequest, query, name, id) => {
109
+ const handleModalSubmit = async (submitRequest, query, name, id, columns) => {
90
110
  try {
111
+ const prevTableName = tables?.find((table) => table._id === id)?.name;
112
+ const isPlural = referencedTablesMap &&
113
+ referencedTablesMap[prevTableName] &&
114
+ referencedTablesMap[prevTableName].length > 1
115
+ ? 's'
116
+ : '';
91
117
  switch (submitRequest) {
92
118
  case 'add':
93
119
  if (!name) {
94
- alert('No Name found');
120
+ alert('No name found');
95
121
  return;
96
122
  }
97
123
  if (tables?.map((table) => table.name).includes(name)) {
@@ -108,8 +134,34 @@ export default function SQLViewManager({ containerStyle, }) {
108
134
  if (!id) {
109
135
  return;
110
136
  }
137
+ if (referencedTablesMap && referencedTablesMap[prevTableName]) {
138
+ // This condition is for only query edits
139
+ if (editQueryView) {
140
+ const errorColumns = [];
141
+ referencedTablesMap[prevTableName] = referencedTablesMap[prevTableName].forEach((table) => {
142
+ table.referencedColumns.forEach((column) => {
143
+ if (!columns?.find((col) => {
144
+ return col.field === column;
145
+ })) {
146
+ errorColumns.push(`'${column}' referenced by ${table.dashboardName} - ${table.reportName}`);
147
+ }
148
+ });
149
+ });
150
+ if (errorColumns.length > 0) {
151
+ alert(`Edit Error\n\n${errorColumns.join('\n')} \n\nPlease modify your query to include these columns.`);
152
+ return;
153
+ }
154
+ }
155
+ else {
156
+ const referencedTableInfo = referencedTablesMap[prevTableName].map((info) => {
157
+ return `${info.dashboardName} - ${info.reportName}`;
158
+ });
159
+ alert(`Edit Error\n\n${referencedTableInfo.join('\n')} \n\nPlease delete those charts before renaming this table.`);
160
+ return;
161
+ }
162
+ }
111
163
  if (!name) {
112
- alert('No id found');
164
+ alert('No name found');
113
165
  return;
114
166
  }
115
167
  if (!/^[a-z0-9_]+$/.test(name)) {
@@ -131,6 +183,11 @@ export default function SQLViewManager({ containerStyle, }) {
131
183
  alert('No id found');
132
184
  return;
133
185
  }
186
+ // Determine if the table is referenced in other charts
187
+ if (referencedTablesMap && referencedTablesMap[prevTableName]) {
188
+ alert(`This table is referenced in the following dashboard${isPlural}/chart${isPlural}.\n\n${referencedTablesMap[prevTableName]?.join('\n')} \n\nPlease delete those charts before deleting this table.`);
189
+ return;
190
+ }
134
191
  await deleteSQLView(id, state);
135
192
  break;
136
193
  default:
@@ -148,18 +205,10 @@ export default function SQLViewManager({ containerStyle, }) {
148
205
  console.error(e);
149
206
  }
150
207
  };
151
- const handleEditAddView = async (request, query, name, id) => {
208
+ const handleEditAddView = async (request, query, name, id, columns) => {
152
209
  switch (request) {
153
210
  case 'edit':
154
- if (!name) {
155
- alert('No name found');
156
- return;
157
- }
158
- if (!id) {
159
- alert('No id found');
160
- return;
161
- }
162
- await handleModalSubmit('edit', query, name, id);
211
+ await handleModalSubmit('edit', query, name, id, columns);
163
212
  break;
164
213
  default:
165
214
  await handleModalSubmit('final-edit', query);
@@ -195,7 +244,7 @@ export default function SQLViewManager({ containerStyle, }) {
195
244
  borderLeftWidth: 0,
196
245
  borderRightWidth: 0,
197
246
  borderStyle: 'solid',
198
- borderColor: state.theme.borderColor,
247
+ borderColor: state.theme?.borderColor,
199
248
  paddingBottom: 20,
200
249
  // boxShadow: "0px 1px 4px 0px rgba(0, 0, 0, 0.07)",
201
250
  // paddingRight: '50px',
@@ -231,8 +280,8 @@ export default function SQLViewManager({ containerStyle, }) {
231
280
  paddingTop: 25,
232
281
  }, children: tables && tables?.length
233
282
  ? tables.map((table) => (_jsx(TableCell, { table: table, clickTableCell: clickTableCell }, table._id)))
234
- : null }, 'edit-view-query')) : (_jsx(CreateEditSqlView, { containerStyle: {}, initialSqlView: initialSqlView, closeEditView: () => setEditQueryView(false), addEditView: (request, name, query, id) => {
235
- handleEditAddView(request, name, query, id);
283
+ : null }, 'edit-view-query')) : (_jsx(CreateEditSqlView, { containerStyle: {}, initialSqlView: initialSqlView, closeEditView: () => setEditQueryView(false), addEditView: (request, name, query, id, columns) => {
284
+ handleEditAddView(request, name, query, id, columns);
236
285
  }, allTableData: allTableData, schemaIsLoading: schemaIsLoading })) }))] }), _jsx(EditAddViewModal, { viewName: editName, viewQuery: editViewQuery, viewId: editViewId, editModalIsOpen: editModalIsOpen, closeEditModal: closeEditModal, submit: handleModalSubmit, state: state, onEditViewClick: () => setEditQueryView(true) })] }));
237
286
  }
238
287
  function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, closeEditModal, submit, state, onEditViewClick = () => { }, }) {
@@ -7,6 +7,11 @@ export interface SchemaDetails {
7
7
  name: string;
8
8
  }[];
9
9
  foreignKeys?: string[];
10
+ customQueryFKs?: string[];
11
+ customQueryOrganizations?: {
12
+ id: any;
13
+ name: string;
14
+ }[];
10
15
  selectedFields: {
11
16
  schema: string;
12
17
  table?: string;
@@ -17,6 +22,7 @@ export interface SchemaDetails {
17
22
  name: string;
18
23
  };
19
24
  foreignKey?: string;
25
+ customerView?: string;
20
26
  };
21
27
  }
22
28
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,UAAU,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB,CAAC,EAAE;QAAE,EAAE,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,UAAU,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH"}
@@ -15,4 +15,5 @@ export interface Column {
15
15
  displayName: string;
16
16
  fieldType: string;
17
17
  }
18
+ export declare const hasColumnAlias: (columns: Column[], referencedColumns: string[]) => boolean;
18
19
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/utils/table.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/utils/table.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,cAAc,YAChB,MAAM,EAAE,qBACE,MAAM,EAAE,KAC1B,OAUF,CAAC"}
@@ -1 +1,11 @@
1
- export {};
1
+ export const hasColumnAlias = (columns, referencedColumns) => {
2
+ if (!referencedColumns) {
3
+ return true;
4
+ }
5
+ for (const column of columns) {
6
+ if (!referencedColumns.includes(column.field)) {
7
+ return true;
8
+ }
9
+ }
10
+ return false;
11
+ };
@@ -0,0 +1,2 @@
1
+ export declare function wrapInQuotes(str?: string, willWrap?: boolean): string;
2
+ //# sourceMappingURL=textProcessing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/textProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM,CAGnE"}
@@ -0,0 +1,5 @@
1
+ export function wrapInQuotes(str, willWrap = false) {
2
+ if (!willWrap)
3
+ return str || '';
4
+ return `"${str}"`;
5
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/admin",
3
- "version": "1.5.2",
3
+ "version": "1.6.0",
4
4
  "description": "Admin tools for Quill",
5
5
  "exports": {
6
6
  ".": {
@@ -1,20 +0,0 @@
1
- /// <reference types="react" />
2
- interface EditDashboardsModalProps {
3
- ModalComponent: React.ComponentType<any>;
4
- TextInputComponent: React.ComponentType<any>;
5
- isOpen: boolean;
6
- setIsOpen: (isOpen: boolean) => void;
7
- clientId: string;
8
- ButtonComponent: React.ComponentType<any>;
9
- SecondaryButtonComponent: React.ComponentType<any>;
10
- openEditFilterModal: (dashboardName: string) => void;
11
- openEditOrderModal: (dashboardName: string) => void;
12
- openAddDashboardModal: () => void;
13
- HeaderComponent: React.ComponentType<any>;
14
- setDashboardData: (dashboardData: any) => void;
15
- dashboards: any[];
16
- getDashNames: () => void;
17
- }
18
- export default function EditDashboardsModal({ ModalComponent, TextInputComponent, isOpen, setIsOpen, clientId, ButtonComponent, SecondaryButtonComponent, openEditFilterModal, openEditOrderModal, openAddDashboardModal, HeaderComponent, setDashboardData, dashboards, getDashNames, }: EditDashboardsModalProps): import("react/jsx-runtime").JSX.Element;
19
- export {};
20
- //# sourceMappingURL=EditDashboardsModal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditDashboardsModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditDashboardsModal.tsx"],"names":[],"mappings":";AAGA,UAAU,wBAAwB;IAChC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,wBAAwB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACnD,mBAAmB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,kBAAkB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,gBAAgB,EAAE,CAAC,aAAa,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,GACb,EAAE,wBAAwB,2CAyJ1B"}
@@ -1,94 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const Admin_1 = require("../Admin");
5
- const constants_1 = require("../utils/constants");
6
- function EditDashboardsModal({ ModalComponent, TextInputComponent, isOpen, setIsOpen, clientId, ButtonComponent, SecondaryButtonComponent, openEditFilterModal, openEditOrderModal, openAddDashboardModal, HeaderComponent, setDashboardData, dashboards, getDashNames, }) {
7
- // const [dashboards, setDashboards] = useState([]);
8
- // useEffect(() => {
9
- // async function getDashboards(clientId) {
10
- // const url = `${QUILL_SERVER}/dashnames/${clientId}/`;
11
- // const response2 = await fetch(url, {
12
- // method: "GET",
13
- // headers: {
14
- // Authorization: "Bearer ", // Ensure you append your token after 'Bearer ' if needed
15
- // },
16
- // });
17
- // // If you need to retrieve the JSON data from the response:
18
- // const data = await response2.json();
19
- // setDashboards(data);
20
- // }
21
- // if (clientId) {
22
- // getDashboards(clientId);
23
- // }
24
- // }, [clientId]);
25
- async function handleDeleteDashboard(dashboardName) {
26
- const url = `${constants_1.QUILL_SERVER}/dashdelete/${clientId}/`;
27
- const body = {
28
- name: dashboardName,
29
- };
30
- const headers = {
31
- 'Content-Type': 'application/json',
32
- Authorization: `Bearer `,
33
- };
34
- try {
35
- const response = await fetch(url, {
36
- method: 'POST',
37
- headers: headers,
38
- body: JSON.stringify(body),
39
- });
40
- if (!response.ok) {
41
- throw new Error(`HTTP error! Status: ${response.status}`);
42
- }
43
- const responseData = await response.json();
44
- if (responseData) {
45
- getDashNames();
46
- return;
47
- }
48
- }
49
- catch (e) {
50
- console.log('error', e);
51
- }
52
- }
53
- return ((0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: isOpen, close: () => setIsOpen(false), children: (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
54
- display: 'flex',
55
- flexDirection: 'column',
56
- }, children: [(0, jsx_runtime_1.jsx)("h1", { style: {
57
- fontWeight: '600',
58
- fontSize: 24,
59
- paddingBottom: 8,
60
- color: Admin_1.theme.primaryTextColor,
61
- }, children: "Dashboards" }), dashboards &&
62
- dashboards.map((dashboardName, index) => {
63
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
64
- display: 'flex',
65
- flexDirection: 'row',
66
- paddingTop: 5,
67
- width: 400,
68
- paddingBottom: 5,
69
- alignItems: 'center',
70
- justifyContent: 'space-between',
71
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
72
- display: 'flex',
73
- flexDirection: 'column',
74
- }, children: (0, jsx_runtime_1.jsx)("div", { style: {
75
- marginRight: 12,
76
- fontWeight: '600',
77
- fontSize: 16,
78
- color: Admin_1.theme.primaryTextColor,
79
- }, children: dashboardName.name }) }), (0, jsx_runtime_1.jsx)("div", { style: {
80
- display: 'flex',
81
- flexDirection: 'column',
82
- }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
83
- display: 'flex',
84
- flexDirection: 'row',
85
- alignItems: 'flex-end',
86
- }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => openEditFilterModal(dashboardName.name), label: "Edit" }), (0, jsx_runtime_1.jsx)("div", { style: { width: 8 } }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => openEditOrderModal(dashboardName.name), label: "Reorder" }), (0, jsx_runtime_1.jsx)("div", { style: { width: 8 } }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleDeleteDashboard(dashboardName.name), label: "Delete" })] }) })] }, dashboardName + index));
87
- })] }), (0, jsx_runtime_1.jsx)("div", { style: {
88
- display: 'flex',
89
- flexDirection: 'column',
90
- justifyContent: 'center',
91
- marginTop: 20,
92
- }, children: (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: openAddDashboardModal, label: "Create new dashboard" }) })] }) }));
93
- }
94
- exports.default = EditDashboardsModal;
@@ -1,20 +0,0 @@
1
- /// <reference types="react" />
2
- interface EditDashboardsModalProps {
3
- ModalComponent: React.ComponentType<any>;
4
- TextInputComponent: React.ComponentType<any>;
5
- isOpen: boolean;
6
- setIsOpen: (isOpen: boolean) => void;
7
- clientId: string;
8
- ButtonComponent: React.ComponentType<any>;
9
- SecondaryButtonComponent: React.ComponentType<any>;
10
- openEditFilterModal: (dashboardName: string) => void;
11
- openEditOrderModal: (dashboardName: string) => void;
12
- openAddDashboardModal: () => void;
13
- HeaderComponent: React.ComponentType<any>;
14
- setDashboardData: (dashboardData: any) => void;
15
- dashboards: any[];
16
- getDashNames: () => void;
17
- }
18
- export default function EditDashboardsModal({ ModalComponent, TextInputComponent, isOpen, setIsOpen, clientId, ButtonComponent, SecondaryButtonComponent, openEditFilterModal, openEditOrderModal, openAddDashboardModal, HeaderComponent, setDashboardData, dashboards, getDashNames, }: EditDashboardsModalProps): import("react/jsx-runtime").JSX.Element;
19
- export {};
20
- //# sourceMappingURL=EditDashboardsModal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditDashboardsModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditDashboardsModal.tsx"],"names":[],"mappings":";AAGA,UAAU,wBAAwB;IAChC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,wBAAwB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACnD,mBAAmB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,kBAAkB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,gBAAgB,EAAE,CAAC,aAAa,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,QAAQ,EACR,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,GACb,EAAE,wBAAwB,2CAyJ1B"}
@@ -1,91 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { theme } from '../Admin';
3
- import { QUILL_SERVER } from '../utils/constants';
4
- export default function EditDashboardsModal({ ModalComponent, TextInputComponent, isOpen, setIsOpen, clientId, ButtonComponent, SecondaryButtonComponent, openEditFilterModal, openEditOrderModal, openAddDashboardModal, HeaderComponent, setDashboardData, dashboards, getDashNames, }) {
5
- // const [dashboards, setDashboards] = useState([]);
6
- // useEffect(() => {
7
- // async function getDashboards(clientId) {
8
- // const url = `${QUILL_SERVER}/dashnames/${clientId}/`;
9
- // const response2 = await fetch(url, {
10
- // method: "GET",
11
- // headers: {
12
- // Authorization: "Bearer ", // Ensure you append your token after 'Bearer ' if needed
13
- // },
14
- // });
15
- // // If you need to retrieve the JSON data from the response:
16
- // const data = await response2.json();
17
- // setDashboards(data);
18
- // }
19
- // if (clientId) {
20
- // getDashboards(clientId);
21
- // }
22
- // }, [clientId]);
23
- async function handleDeleteDashboard(dashboardName) {
24
- const url = `${QUILL_SERVER}/dashdelete/${clientId}/`;
25
- const body = {
26
- name: dashboardName,
27
- };
28
- const headers = {
29
- 'Content-Type': 'application/json',
30
- Authorization: `Bearer `,
31
- };
32
- try {
33
- const response = await fetch(url, {
34
- method: 'POST',
35
- headers: headers,
36
- body: JSON.stringify(body),
37
- });
38
- if (!response.ok) {
39
- throw new Error(`HTTP error! Status: ${response.status}`);
40
- }
41
- const responseData = await response.json();
42
- if (responseData) {
43
- getDashNames();
44
- return;
45
- }
46
- }
47
- catch (e) {
48
- console.log('error', e);
49
- }
50
- }
51
- return (_jsx(ModalComponent, { isOpen: isOpen, close: () => setIsOpen(false), children: _jsxs("div", { children: [_jsxs("div", { style: {
52
- display: 'flex',
53
- flexDirection: 'column',
54
- }, children: [_jsx("h1", { style: {
55
- fontWeight: '600',
56
- fontSize: 24,
57
- paddingBottom: 8,
58
- color: theme.primaryTextColor,
59
- }, children: "Dashboards" }), dashboards &&
60
- dashboards.map((dashboardName, index) => {
61
- return (_jsxs("div", { style: {
62
- display: 'flex',
63
- flexDirection: 'row',
64
- paddingTop: 5,
65
- width: 400,
66
- paddingBottom: 5,
67
- alignItems: 'center',
68
- justifyContent: 'space-between',
69
- }, children: [_jsx("div", { style: {
70
- display: 'flex',
71
- flexDirection: 'column',
72
- }, children: _jsx("div", { style: {
73
- marginRight: 12,
74
- fontWeight: '600',
75
- fontSize: 16,
76
- color: theme.primaryTextColor,
77
- }, children: dashboardName.name }) }), _jsx("div", { style: {
78
- display: 'flex',
79
- flexDirection: 'column',
80
- }, children: _jsxs("div", { style: {
81
- display: 'flex',
82
- flexDirection: 'row',
83
- alignItems: 'flex-end',
84
- }, children: [_jsx(SecondaryButtonComponent, { onClick: () => openEditFilterModal(dashboardName.name), label: "Edit" }), _jsx("div", { style: { width: 8 } }), _jsx(SecondaryButtonComponent, { onClick: () => openEditOrderModal(dashboardName.name), label: "Reorder" }), _jsx("div", { style: { width: 8 } }), _jsx(SecondaryButtonComponent, { onClick: () => handleDeleteDashboard(dashboardName.name), label: "Delete" })] }) })] }, dashboardName + index));
85
- })] }), _jsx("div", { style: {
86
- display: 'flex',
87
- flexDirection: 'column',
88
- justifyContent: 'center',
89
- marginTop: 20,
90
- }, children: _jsx(ButtonComponent, { onClick: openAddDashboardModal, label: "Create new dashboard" }) })] }) }));
91
- }