@quillsql/admin 1.3.6 → 1.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/cjs/Admin.d.ts.map +1 -1
  2. package/dist/cjs/Admin.js +25 -15
  3. package/dist/cjs/AdminProvider.d.ts +10 -0
  4. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  5. package/dist/cjs/AdminProvider.js +63 -43
  6. package/dist/cjs/api/ConnectionClient.d.ts +12 -10
  7. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  8. package/dist/cjs/api/ConnectionClient.js +100 -29
  9. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts +5 -0
  10. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -0
  11. package/dist/cjs/assets/ArrowDownHeadIcon.js +5 -0
  12. package/dist/cjs/assets/XIcon.d.ts +5 -0
  13. package/dist/cjs/assets/XIcon.d.ts.map +1 -0
  14. package/dist/cjs/assets/XIcon.js +5 -0
  15. package/dist/cjs/assets/index.d.ts +3 -0
  16. package/dist/cjs/assets/index.d.ts.map +1 -0
  17. package/dist/cjs/assets/index.js +10 -0
  18. package/dist/cjs/components/DatabaseMismatchCard.d.ts +6 -0
  19. package/dist/cjs/components/DatabaseMismatchCard.d.ts.map +1 -0
  20. package/dist/cjs/components/DatabaseMismatchCard.js +18 -0
  21. package/dist/cjs/components/DatabaseSelector.d.ts +2 -1
  22. package/dist/cjs/components/DatabaseSelector.d.ts.map +1 -1
  23. package/dist/cjs/components/DatabaseSelector.js +2 -2
  24. package/dist/cjs/components/DropDownMenuWithLabel.d.ts +2 -1
  25. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  26. package/dist/cjs/components/DropDownMenuWithLabel.js +160 -39
  27. package/dist/cjs/components/DynamicBanner.d.ts +11 -0
  28. package/dist/cjs/components/DynamicBanner.d.ts.map +1 -0
  29. package/dist/cjs/components/DynamicBanner.js +22 -0
  30. package/dist/cjs/components/EnvSelectPopover.d.ts.map +1 -1
  31. package/dist/cjs/components/EnvSelectPopover.js +0 -1
  32. package/dist/cjs/components/OrgSelect.d.ts +23 -0
  33. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  34. package/dist/cjs/components/OrgSelect.js +55 -15
  35. package/dist/cjs/components/SqlTextEditor.d.ts +7 -0
  36. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -0
  37. package/dist/cjs/components/SqlTextEditor.js +44 -0
  38. package/dist/cjs/components/UiComponents.d.ts +119 -0
  39. package/dist/cjs/components/UiComponents.d.ts.map +1 -0
  40. package/dist/cjs/components/UiComponents.js +268 -0
  41. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts +3 -2
  42. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  43. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +101 -43
  44. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts +3 -1
  45. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  46. package/dist/cjs/forms/client_onboard/ConnectSchema.js +13 -14
  47. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts +10 -1
  48. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  49. package/dist/cjs/forms/client_onboard/CreateSqlViews.js +12 -10
  50. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts +24 -0
  51. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +1 -0
  52. package/dist/cjs/forms/sql_views/CreateEditSqlView.js +161 -0
  53. package/dist/cjs/modals/NewDashboardModal.js +1 -1
  54. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  55. package/dist/cjs/public_components/CreateEnvironment.js +34 -8
  56. package/dist/cjs/public_components/DashboardBuilder.d.ts.map +1 -1
  57. package/dist/cjs/public_components/DashboardBuilder.js +30 -16
  58. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  59. package/dist/cjs/public_components/DashboardManager.js +110 -93
  60. package/dist/cjs/public_components/SQLViewManager.d.ts.map +1 -1
  61. package/dist/cjs/public_components/SQLViewManager.js +252 -333
  62. package/dist/cjs/utils/constants.d.ts +1 -1
  63. package/dist/cjs/utils/constants.d.ts.map +1 -1
  64. package/dist/cjs/utils/constants.js +1 -2
  65. package/dist/cjs/utils/dataEditor.d.ts +4 -0
  66. package/dist/cjs/utils/dataEditor.d.ts.map +1 -0
  67. package/dist/cjs/utils/dataEditor.js +144 -0
  68. package/dist/cjs/utils/dataFetcher.d.ts +3 -0
  69. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -0
  70. package/dist/cjs/utils/dataFetcher.js +68 -0
  71. package/dist/cjs/utils/databases.d.ts +13 -2
  72. package/dist/cjs/utils/databases.d.ts.map +1 -1
  73. package/dist/cjs/utils/databases.js +52 -9
  74. package/dist/cjs/utils/table.d.ts +2 -0
  75. package/dist/cjs/utils/table.d.ts.map +1 -1
  76. package/dist/esm/Admin.d.ts.map +1 -1
  77. package/dist/esm/Admin.js +25 -15
  78. package/dist/esm/AdminProvider.d.ts +10 -0
  79. package/dist/esm/AdminProvider.d.ts.map +1 -1
  80. package/dist/esm/AdminProvider.js +61 -44
  81. package/dist/esm/api/ConnectionClient.d.ts +12 -10
  82. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  83. package/dist/esm/api/ConnectionClient.js +97 -28
  84. package/dist/esm/assets/ArrowDownHeadIcon.d.ts +5 -0
  85. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -0
  86. package/dist/esm/assets/ArrowDownHeadIcon.js +3 -0
  87. package/dist/esm/assets/XIcon.d.ts +5 -0
  88. package/dist/esm/assets/XIcon.d.ts.map +1 -0
  89. package/dist/esm/assets/XIcon.js +3 -0
  90. package/dist/esm/assets/index.d.ts +3 -0
  91. package/dist/esm/assets/index.d.ts.map +1 -0
  92. package/dist/esm/assets/index.js +2 -0
  93. package/dist/esm/components/DatabaseMismatchCard.d.ts +6 -0
  94. package/dist/esm/components/DatabaseMismatchCard.d.ts.map +1 -0
  95. package/dist/esm/components/DatabaseMismatchCard.js +15 -0
  96. package/dist/esm/components/DatabaseSelector.d.ts +2 -1
  97. package/dist/esm/components/DatabaseSelector.d.ts.map +1 -1
  98. package/dist/esm/components/DatabaseSelector.js +2 -2
  99. package/dist/esm/components/DropDownMenuWithLabel.d.ts +2 -1
  100. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  101. package/dist/esm/components/DropDownMenuWithLabel.js +137 -39
  102. package/dist/esm/components/DynamicBanner.d.ts +11 -0
  103. package/dist/esm/components/DynamicBanner.d.ts.map +1 -0
  104. package/dist/esm/components/DynamicBanner.js +16 -0
  105. package/dist/esm/components/EnvSelectPopover.d.ts.map +1 -1
  106. package/dist/esm/components/EnvSelectPopover.js +0 -1
  107. package/dist/esm/components/OrgSelect.d.ts +23 -0
  108. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  109. package/dist/esm/components/OrgSelect.js +52 -16
  110. package/dist/esm/components/SqlTextEditor.d.ts +7 -0
  111. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -0
  112. package/dist/esm/components/SqlTextEditor.js +38 -0
  113. package/dist/esm/components/UiComponents.d.ts +119 -0
  114. package/dist/esm/components/UiComponents.d.ts.map +1 -0
  115. package/dist/esm/components/UiComponents.js +254 -0
  116. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts +3 -2
  117. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  118. package/dist/esm/forms/client_onboard/ConnectDatabase.js +102 -44
  119. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts +3 -1
  120. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  121. package/dist/esm/forms/client_onboard/ConnectSchema.js +13 -14
  122. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts +10 -1
  123. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
  124. package/dist/esm/forms/client_onboard/CreateSqlViews.js +11 -11
  125. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts +24 -0
  126. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +1 -0
  127. package/dist/esm/forms/sql_views/CreateEditSqlView.js +155 -0
  128. package/dist/esm/modals/NewDashboardModal.js +1 -1
  129. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  130. package/dist/esm/public_components/CreateEnvironment.js +12 -9
  131. package/dist/esm/public_components/DashboardBuilder.d.ts.map +1 -1
  132. package/dist/esm/public_components/DashboardBuilder.js +30 -16
  133. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  134. package/dist/esm/public_components/DashboardManager.js +111 -94
  135. package/dist/esm/public_components/SQLViewManager.d.ts.map +1 -1
  136. package/dist/esm/public_components/SQLViewManager.js +254 -335
  137. package/dist/esm/utils/constants.d.ts +1 -1
  138. package/dist/esm/utils/constants.d.ts.map +1 -1
  139. package/dist/esm/utils/constants.js +1 -2
  140. package/dist/esm/utils/dataEditor.d.ts +4 -0
  141. package/dist/esm/utils/dataEditor.d.ts.map +1 -0
  142. package/dist/esm/utils/dataEditor.js +138 -0
  143. package/dist/esm/utils/dataFetcher.d.ts +3 -0
  144. package/dist/esm/utils/dataFetcher.d.ts.map +1 -0
  145. package/dist/esm/utils/dataFetcher.js +63 -0
  146. package/dist/esm/utils/databases.d.ts +13 -2
  147. package/dist/esm/utils/databases.d.ts.map +1 -1
  148. package/dist/esm/utils/databases.js +52 -9
  149. package/dist/esm/utils/table.d.ts +2 -0
  150. package/dist/esm/utils/table.d.ts.map +1 -1
  151. package/package.json +2 -2
@@ -9,13 +9,16 @@ const primitives_1 = require("../primitives");
9
9
  const AdminProvider_1 = require("../AdminProvider");
10
10
  const components_1 = require("../components");
11
11
  const Admin_1 = require("../Admin");
12
- const modals_1 = require("../modals");
13
- const react_2 = __importDefault(require("@monaco-editor/react"));
14
- const constants_1 = require("../utils/constants");
12
+ const CreateEditSqlView_1 = __importDefault(require("../forms/sql_views/CreateEditSqlView"));
13
+ const dataEditor_1 = require("../utils/dataEditor");
14
+ const ConnectionClient_1 = require("../api/ConnectionClient");
15
+ const UiComponents_1 = require("../components/UiComponents");
16
+ const DatabaseMismatchCard_1 = __importDefault(require("../components/DatabaseMismatchCard"));
15
17
  function SQLViewManager({ containerStyle, }) {
16
- const [tables, setTables] = (0, react_1.useState)([]);
18
+ const [tables, setTables] = (0, react_1.useState)(undefined);
17
19
  const [modalIsOpen, setIsOpen] = (0, react_1.useState)(false);
18
20
  const [editModalIsOpen, setEditModalIsOpen] = (0, react_1.useState)(false);
21
+ const [editQueryView, setEditQueryView] = (0, react_1.useState)(false);
19
22
  const [name, setName] = (0, react_1.useState)('');
20
23
  const [viewQuery, setViewQuery] = (0, react_1.useState)('');
21
24
  const [editViewId, setEditViewId] = (0, react_1.useState)('');
@@ -25,376 +28,292 @@ function SQLViewManager({ containerStyle, }) {
25
28
  const [deleteName, setDeleteName] = (0, react_1.useState)('');
26
29
  const [deleteModalIsOpen, setDeleteModalIsOpen] = (0, react_1.useState)(false);
27
30
  const [isPromoteViewModalOpen, setIsPromoteViewModalOpen] = (0, react_1.useState)(false);
31
+ const [allTableData, setAllTableData] = (0, react_1.useState)([]);
32
+ const [schemaIsLoading, setSchemaIsLoading] = (0, react_1.useState)(false);
33
+ const [initialSqlView, setInitialSqlView] = (0, react_1.useState)(undefined);
28
34
  const parentRef = (0, react_1.useRef)(null);
29
35
  const { state, dispatch } = (0, AdminProvider_1.useAdmin)();
30
- // const [organizations] = useContext(OrganizationsContext);
31
- // const [organizationId, setOrganizationId] = useContext(OrganizationIdContext);
32
- const closeDeleteModal = () => {
33
- setDeleteModalIsOpen(false);
34
- };
35
- const openModal = () => {
36
- setIsOpen(true);
37
- setEditViewQuery('');
38
- };
39
- const closeModal = () => {
40
- setIsOpen(false);
41
- setName('');
42
- setViewQuery('');
43
- };
44
36
  const closeEditModal = () => {
45
37
  setEditModalIsOpen(false);
46
38
  setEditName('');
47
39
  setEditViewQuery('');
48
40
  };
49
41
  const clickTableCell = (table) => {
50
- setEditModalIsOpen(true);
51
42
  setEditName(table.name);
52
43
  setEditViewQuery(table.viewQuery);
53
44
  setEditViewId(table._id);
45
+ setInitialSqlView({
46
+ id: table._id,
47
+ name: table.name,
48
+ query: table.viewQuery,
49
+ });
50
+ setEditModalIsOpen(true);
54
51
  };
55
- const handleDeleteTable = async () => {
56
- if (deleteName !== tableToBeDeleted) {
57
- alert('Table names must match');
58
- return;
59
- }
60
- if (!editViewId) {
61
- console.log('No view id found');
62
- return;
63
- }
64
- let response;
65
- if (state.queryEndpoint) {
66
- response = await fetch(state.queryEndpoint, {
67
- method: 'POST',
68
- headers: {
69
- 'Content-Type': 'application/json',
70
- ...state.queryHeaders,
71
- },
72
- body: JSON.stringify({
73
- metadata: {
74
- task: 'view',
75
- id: editViewId,
76
- deleted: true,
77
- clientId: state.client._id,
78
- },
79
- }),
80
- credentials: state.withCredentials ? 'include' : 'omit', // If withCredentials is true, set to 'include'. Otherwise, set to 'omit'.
81
- });
82
- }
83
- else {
84
- response = await fetch(`${constants_1.QUILL_SERVER}/table/${state.client._id}/`, {
85
- method: 'POST',
86
- headers: {
87
- 'Content-Type': 'application/json',
88
- Authorization: `Bearer `,
52
+ const getTables = async () => {
53
+ const response = await fetch(`${state.queryEndpoint}`, {
54
+ method: 'POST',
55
+ headers: {
56
+ ...state.queryHeaders,
57
+ 'Content-Type': 'application/json',
58
+ },
59
+ body: JSON.stringify({
60
+ metadata: {
61
+ clientId: state.client._id,
62
+ publicKey: state.client._id,
63
+ task: 'schema',
64
+ databaseType: state.client.databaseType,
89
65
  },
90
- body: JSON.stringify({
91
- id: editViewId,
92
- deleted: true,
93
- }),
94
- });
66
+ }),
67
+ });
68
+ if (!response.ok) {
69
+ throw new Error('Failed to fetch tables data');
95
70
  }
96
71
  const data = await response.json();
97
- if (data) {
98
- setDeleteName('');
99
- setDeleteModalIsOpen(false);
100
- setEditModalIsOpen(false);
101
- setEditName('');
102
- setEditViewQuery('');
103
- getTables();
104
- }
72
+ setTables(data.data.tables);
105
73
  };
106
- const getTables = async () => {
107
- const response = await fetch(`${constants_1.QUILL_SERVER}/schema2/${state.client._id}/`, {
108
- method: 'GET',
109
- headers: { Authorization: `Bearer ` },
110
- });
111
- const data = await response.json();
112
- setTables(data.tables);
74
+ const getSchemaTableDetails = async () => {
75
+ setSchemaIsLoading(true);
76
+ const response = await (0, ConnectionClient_1.getTableColumnsBySchema)(state.client._id, state.client.schemaNames, state.client.databaseType, state.queryEndpoint);
77
+ setAllTableData(response);
78
+ setSchemaIsLoading(false);
113
79
  };
114
80
  (0, react_1.useEffect)(() => {
115
81
  let isSubscribed = true;
116
82
  if (isSubscribed && state.client) {
117
83
  getTables();
84
+ getSchemaTableDetails();
118
85
  }
119
86
  return () => {
120
87
  isSubscribed = false;
121
88
  };
122
- }, []);
89
+ }, [state.client]);
123
90
  const handleClickFirstDelete = () => {
124
91
  setTableToBeDeleted(editName);
125
92
  setDeleteModalIsOpen(true);
126
93
  };
127
- const handleEditTable = async () => {
128
- if (!editName.length) {
129
- alert('Please enter a table name.');
130
- return;
131
- }
132
- if (!editViewQuery.length) {
133
- alert('Please enter a table query.');
134
- return;
135
- }
136
- if (!editViewId) {
137
- alert('Could not save.');
138
- return;
139
- }
140
- let response;
141
- if (state.queryEndpoint) {
142
- response = await fetch(state.queryEndpoint, {
143
- method: 'POST',
144
- headers: {
145
- 'Content-Type': 'application/json',
146
- ...state.queryHeaders,
147
- },
148
- body: JSON.stringify({
149
- metadata: {
150
- preQueries: editViewQuery[editViewQuery.length - 1] === ';'
151
- ? [editViewQuery.slice(0, -1)]
152
- : [editViewQuery],
153
- name: editName,
154
- task: 'view',
155
- id: editViewId,
156
- clientId: state.client._id,
157
- },
158
- }),
159
- credentials: state.withCredentials ? 'include' : 'omit', // If withCredentials is true, set to 'include'. Otherwise, set to 'omit'.
160
- });
161
- }
162
- else {
163
- response = await fetch(`${constants_1.QUILL_SERVER}/table/${state.client._id}/`, {
164
- method: 'POST',
165
- headers: {
166
- 'Content-Type': 'application/json',
167
- Authorization: `Bearer `,
168
- },
169
- body: JSON.stringify({
170
- viewQuery: editViewQuery[editViewQuery.length - 1] === ';'
171
- ? editViewQuery.slice(0, -1)
172
- : editViewQuery,
173
- name: editName,
174
- id: editViewId,
175
- }),
176
- });
177
- }
178
- const data = await response.json();
179
- if (data) {
94
+ const handleModalSubmit = async (submitRequest, query, name, id) => {
95
+ try {
96
+ switch (submitRequest) {
97
+ case 'add':
98
+ if (!name) {
99
+ alert('No Name found');
100
+ return;
101
+ }
102
+ await (0, dataEditor_1.addSqlView)(name, query, state);
103
+ break;
104
+ case 'edit':
105
+ if (!name) {
106
+ alert('No id found');
107
+ return;
108
+ }
109
+ if (!id) {
110
+ alert('No id found');
111
+ return;
112
+ }
113
+ await (0, dataEditor_1.editSQLView)(name, query, id, state);
114
+ break;
115
+ case 'delete':
116
+ if (!id) {
117
+ alert('No id found');
118
+ return;
119
+ }
120
+ await (0, dataEditor_1.deleteSQLView)(id, state);
121
+ break;
122
+ default:
123
+ setEditName('');
124
+ setEditViewQuery(query);
125
+ setEditViewId('');
126
+ setEditModalIsOpen(true);
127
+ return;
128
+ }
129
+ await getTables();
180
130
  closeEditModal();
181
- getTables();
131
+ setEditQueryView(false);
182
132
  }
183
- };
184
- const handleAddTable = async () => {
185
- if (!name.length) {
186
- alert('Please enter a table name.');
187
- return;
188
- }
189
- if (!editViewQuery.length) {
190
- alert('Please enter a table query.');
191
- return;
192
- }
193
- let response;
194
- if (state.queryEndpoint) {
195
- response = await fetch(state.queryEndpoint, {
196
- method: 'POST',
197
- headers: {
198
- 'Content-Type': 'application/json',
199
- ...state.queryHeaders,
200
- },
201
- body: JSON.stringify({
202
- metadata: {
203
- preQueries: editViewQuery[editViewQuery.length - 1] === ';'
204
- ? [editViewQuery.slice(0, -1)]
205
- : [editViewQuery],
206
- name: name,
207
- task: 'view',
208
- clientId: state.client._id,
209
- },
210
- }),
211
- credentials: state.withCredentials ? 'include' : 'omit', // If withCredentials is true, set to 'include'. Otherwise, set to 'omit'.
212
- });
133
+ catch (e) {
134
+ console.error(e);
213
135
  }
214
- else {
215
- response = await fetch(`${constants_1.QUILL_SERVER}/table/${state.client._id}/`, {
216
- method: 'POST',
217
- headers: {
218
- 'Content-Type': 'application/json',
219
- Authorization: `Bearer `,
220
- },
221
- body: JSON.stringify({
222
- viewQuery: editViewQuery[editViewQuery.length - 1] === ';'
223
- ? editViewQuery.slice(0, -1)
224
- : editViewQuery,
225
- name: name,
226
- }),
227
- });
228
- }
229
- const data = await response.json();
230
- if (data) {
231
- closeModal();
232
- getTables();
136
+ };
137
+ const handleEditAddView = async (request, query, name, id) => {
138
+ switch (request) {
139
+ case 'edit':
140
+ if (!name) {
141
+ alert('No name found');
142
+ return;
143
+ }
144
+ if (!id) {
145
+ alert('No id found');
146
+ return;
147
+ }
148
+ await handleModalSubmit('edit', query, name, id);
149
+ break;
150
+ default:
151
+ await handleModalSubmit('final-edit', query);
152
+ break;
233
153
  }
234
154
  };
235
155
  (0, react_1.useEffect)(() => {
236
156
  getTables();
237
157
  }, [state.client]);
238
- return ((0, jsx_runtime_1.jsx)("div", { style: { ...containerStyle }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
239
- display: 'flex',
240
- flexDirection: 'column',
241
- paddingTop: '0px',
242
- position: 'relative',
243
- }, ref: parentRef, children: [(0, jsx_runtime_1.jsx)("div", { style: {
244
- // width: 'calc(100vw - 30px)',
158
+ return ((0, jsx_runtime_1.jsxs)("div", { style: { ...containerStyle }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
159
+ display: 'flex',
160
+ flexDirection: 'column',
161
+ paddingTop: '0px',
162
+ position: 'relative',
163
+ }, ref: parentRef, children: [(0, jsx_runtime_1.jsx)("div", { style: {
164
+ // width: 'calc(100vw - 30px)',
165
+ display: 'flex',
166
+ position: 'sticky',
167
+ // position: "fixed",
168
+ backgroundColor: 'white',
169
+ zIndex: 1,
170
+ left: 0,
171
+ right: 0,
172
+ top: 0,
173
+ flexDirection: 'row',
174
+ paddingTop: 12,
175
+ alignItems: 'center',
176
+ justifyContent: 'space-between',
177
+ paddingLeft: '30px',
178
+ paddingRight: '30px',
179
+ borderBottomWidth: 1,
180
+ borderTopWidth: 0,
181
+ borderLeftWidth: 0,
182
+ borderRightWidth: 0,
183
+ borderStyle: 'solid',
184
+ borderColor: state.theme.borderColor,
185
+ paddingBottom: 20,
186
+ // boxShadow: "0px 1px 4px 0px rgba(0, 0, 0, 0.07)",
187
+ // paddingRight: '50px',
188
+ // position: 'absolute'
189
+ // // zIndex: 10
190
+ }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
191
+ display: 'flex',
192
+ flexDirection: 'row',
193
+ alignItems: 'flex-end',
194
+ justifyContent: 'space-between',
195
+ width: '100%',
196
+ // marginLeft: '25px'
197
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)("h1", { style: {
198
+ fontSize: '14px',
199
+ paddingTop: '0px',
200
+ marginTop: '0px',
201
+ marginBottom: '4px',
202
+ fontWeight: '600',
203
+ color: state.theme.secondaryTextColor,
204
+ fontFamily: state.theme.fontFamily,
205
+ userSelect: 'none',
206
+ }, children: "Environment" }), (0, jsx_runtime_1.jsx)(components_1.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: () => setIsPromoteViewModalOpen(true) })] }), !editQueryView && !state.databaseTypeMismatch.show && ((0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { onClick: () => {
207
+ setEditName('');
208
+ setEditViewQuery('');
209
+ setEditViewId('');
210
+ setInitialSqlView(undefined);
211
+ setEditQueryView(true);
212
+ }, label: "Add view +" }))] }) }), state.databaseTypeMismatch.show ? ((0, jsx_runtime_1.jsx)(DatabaseMismatchCard_1.default, { environemntName: state.client.name, environemntDatabaseType: state.client.databaseType, backendDatabaseType: state.databaseTypeMismatch.backendDatabaseType })) : ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: !editQueryView ? ((0, jsx_runtime_1.jsx)("div", { style: {
213
+ display: 'flex',
214
+ flexWrap: 'wrap',
215
+ paddingLeft: 25,
216
+ paddingRight: 25,
217
+ paddingTop: 25,
218
+ }, children: tables && tables?.length
219
+ ? tables.map((table) => ((0, jsx_runtime_1.jsx)(Admin_1.TableCell, { table: table, clickTableCell: clickTableCell }, table._id)))
220
+ : null }, 'edit-view-query')) : ((0, jsx_runtime_1.jsx)(CreateEditSqlView_1.default, { containerStyle: {}, initialSqlView: initialSqlView, closeEditView: () => setEditQueryView(false), addEditView: (request, name, query, id) => {
221
+ handleEditAddView(request, name, query, id);
222
+ }, allTableData: allTableData, schemaIsLoading: schemaIsLoading })) }))] }), (0, jsx_runtime_1.jsx)(EditAddViewModal, { viewName: editName, viewQuery: editViewQuery, viewId: editViewId, editModalIsOpen: editModalIsOpen, closeEditModal: closeEditModal, submit: handleModalSubmit, state: state, onEditViewClick: () => setEditQueryView(true) })] }));
223
+ }
224
+ exports.default = SQLViewManager;
225
+ function EditAddViewModal({ viewName, viewQuery, viewId, editModalIsOpen, closeEditModal, submit, state, onEditViewClick = () => { }, }) {
226
+ const [name, setName] = (0, react_1.useState)(viewName);
227
+ const [query, setQuery] = (0, react_1.useState)(viewQuery);
228
+ const [id, setId] = (0, react_1.useState)(viewId);
229
+ (0, react_1.useEffect)(() => {
230
+ setName(viewName);
231
+ }, [viewName]);
232
+ (0, react_1.useEffect)(() => {
233
+ setQuery(viewQuery);
234
+ }, [viewQuery]);
235
+ (0, react_1.useEffect)(() => {
236
+ setId(viewId);
237
+ }, [viewId]);
238
+ return ((0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: editModalIsOpen, close: closeEditModal, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col p-[6px]", children: [(0, jsx_runtime_1.jsxs)("div", { style: {
245
239
  display: 'flex',
246
- position: 'sticky',
247
- // position: "fixed",
248
- backgroundColor: 'white',
249
- zIndex: 1,
250
- left: 0,
251
- right: 0,
252
- top: 0,
253
240
  flexDirection: 'row',
254
- paddingTop: 12,
255
241
  alignItems: 'center',
256
242
  justifyContent: 'space-between',
257
- paddingLeft: '30px',
258
- paddingRight: '30px',
259
- borderBottomWidth: 1,
260
- borderTopWidth: 0,
261
- borderLeftWidth: 0,
262
- borderRightWidth: 0,
243
+ paddingBottom: '20px',
244
+ // width: '100%'
245
+ }, children: [(0, jsx_runtime_1.jsx)("h1", { style: {
246
+ fontSize: '24px',
247
+ paddingTop: '0px',
248
+ marginTop: '0px',
249
+ marginBottom: '0px',
250
+ fontWeight: 'bold',
251
+ color: '#384151',
252
+ }, children: viewName ? 'Edit SQL View' : 'Add SQL View' }), (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedDeleteButton, { onClick: closeEditModal, style: undefined })] }), (0, jsx_runtime_1.jsx)("h3", { style: {
253
+ fontWeight: '600',
254
+ fontSize: '14px',
255
+ marginBottom: '6px',
256
+ color: '#212121',
257
+ }, children: "Name" }), (0, jsx_runtime_1.jsx)(primitives_1.TextInputPrimitive, { placeholder: "Enter view display name...", onChange: (e) => setName(e.target.value), value: name ? name : '' }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("h3", { style: {
258
+ fontWeight: '600',
259
+ fontSize: '14px',
260
+ marginBottom: '6px',
261
+ color: '#212121',
262
+ }, children: "Query" }), (0, jsx_runtime_1.jsxs)("div", { style: {
263
+ display: 'flex',
264
+ flexDirection: 'row',
265
+ alignItems: 'center',
266
+ paddingLeft: '12px',
267
+ paddingRight: '12px',
268
+ fontWeight: 'medium',
269
+ height: '120px',
270
+ boxShadow: '0 1px 2px 0 rgba(0,0,0,.05)',
271
+ width: '500px',
272
+ background: 'linear-gradient(white 50%, transparent)',
273
+ color: state.theme?.primaryTextColor,
274
+ borderWidth: '1px',
275
+ borderColor: state.theme?.borderColor || '#E7E7E7',
263
276
  borderStyle: 'solid',
264
- borderColor: state.theme.borderColor,
265
- paddingBottom: 20,
266
- // boxShadow: "0px 1px 4px 0px rgba(0, 0, 0, 0.07)",
267
- // paddingRight: '50px',
268
- // position: 'absolute'
269
- // // zIndex: 10
270
- }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
271
- display: 'flex',
272
- flexDirection: 'row',
273
- alignItems: 'flex-end',
274
- justifyContent: 'space-between',
275
- width: '100%',
276
- // marginLeft: '25px'
277
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)("h1", { style: {
278
- fontSize: '14px',
279
- paddingTop: '0px',
280
- marginTop: '0px',
281
- marginBottom: '4px',
282
- fontWeight: '600',
283
- color: state.theme.secondaryTextColor,
284
- fontFamily: state.theme.fontFamily,
285
- userSelect: 'none',
286
- }, children: "Environment" }), (0, jsx_runtime_1.jsx)(components_1.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: () => setIsPromoteViewModalOpen(true) })] }), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { onClick: openModal, label: "Add view +" })] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
277
+ borderRadius: '6px',
278
+ fontSize: 14,
279
+ position: 'relative',
280
+ overflow: 'hidden',
281
+ }, children: [(0, jsx_runtime_1.jsx)("textarea", { style: {
282
+ width: '100%',
283
+ height: '100%',
284
+ resize: 'none',
285
+ opacity: '1',
286
+ background: 'transparent',
287
+ color: '#000',
288
+ fontFamily: 'inherit',
289
+ fontSize: 'inherit',
290
+ border: 'none',
291
+ overflow: 'hidden',
292
+ paddingTop: '12px',
293
+ paddingLeft: '8px',
294
+ }, value: viewQuery, disabled: true }), (0, jsx_runtime_1.jsx)("div", { style: {
295
+ position: 'absolute',
296
+ bottom: 0,
297
+ left: 0,
298
+ right: 0,
299
+ height: '90%',
300
+ background: 'linear-gradient(transparent, white)',
301
+ pointerEvents: 'none',
302
+ } }), viewName && ((0, jsx_runtime_1.jsx)("div", { style: { position: 'absolute', bottom: '10px', right: '10px' }, children: (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedSecondaryButton, { label: 'Edit Query ↗', onClick: () => {
303
+ closeEditModal();
304
+ onEditViewClick();
305
+ } }) }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
287
306
  display: 'flex',
288
- flexWrap: 'wrap',
289
- paddingLeft: 25,
290
- paddingRight: 25,
291
- paddingTop: 25,
292
- }, children: tables.length
293
- ? tables.map((table) => ((0, jsx_runtime_1.jsx)(Admin_1.TableCell, { table: table, clickTableCell: clickTableCell })))
294
- : null }), (0, jsx_runtime_1.jsx)(modals_1.PromoteViewModal, { clientId: state.client._id, client: state.client, clients: state.clients, isOpen: isPromoteViewModalOpen, setIsOpen: setIsPromoteViewModalOpen, ModalComponent: primitives_1.ModalPrimitive, views: tables }), (0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: modalIsOpen, close: closeModal, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col p-[6px]", children: [(0, jsx_runtime_1.jsx)(primitives_1.HeaderPrimitive, { label: "Add view" }), (0, jsx_runtime_1.jsx)("h3", { style: {
295
- fontWeight: 600,
296
- fontSize: 14,
297
- marginBottom: 6,
298
- marginTop: 8,
299
- color: '#212121',
300
- }, children: "name" }), (0, jsx_runtime_1.jsx)(primitives_1.TextInputPrimitive, { placeholder: "Enter table display name...", onChange: (e) => setName(e.target.value), value: name }), (0, jsx_runtime_1.jsx)("h3", { style: {
301
- fontWeight: 600,
302
- fontSize: 14,
303
- marginBottom: 6,
304
- color: '#212121',
305
- marginTop: 8,
306
- }, children: "query" }), (0, jsx_runtime_1.jsx)("div", { style: {
307
- background: state.theme.backgroundColor,
308
- // maxHeight: 700,
309
- width: '800px',
310
- height: '500px',
311
- // minWidth: 450,
312
- // overflowY: "scroll",
313
- // padding: "20px 30px 20px 20px",
314
- // marginLeft: 20,
315
- borderTopLeftRadius: 6,
316
- borderBottomLeftRadius: 6,
317
- borderTopRightRadius: 0,
318
- borderBottomRightRadius: 0,
319
- overflow: 'hidden',
320
- }, children: (0, jsx_runtime_1.jsx)(react_2.default, { height: "500px", width: "100%", defaultLanguage: "pgsql", defaultValue: "", value: editViewQuery, loading: (0, jsx_runtime_1.jsx)("div", {}), options: {
321
- wordWrap: 'on',
322
- minimap: {
323
- enabled: false,
324
- },
325
- padding: { top: 16 },
326
- }, onChange: (query) => setEditViewQuery(query), beforeMount: (monaco) => (0, Admin_1.defineEditorTheme)(monaco, state.theme), onMount: Admin_1.setEditorTheme }) }), (0, jsx_runtime_1.jsx)("div", { style: { height: 20 } }), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { label: "Add view +", onClick: handleAddTable })] }) }), (0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: editModalIsOpen, close: closeEditModal, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col p-[6px]", children: [(0, jsx_runtime_1.jsxs)("div", { style: {
327
- display: 'flex',
328
- flexDirection: 'row',
329
- alignItems: 'center',
330
- justifyContent: 'space-between',
331
- // width: '100%'
332
- }, children: [(0, jsx_runtime_1.jsx)("h1", { style: {
333
- fontSize: '24px',
334
- paddingTop: '0px',
335
- marginTop: '0px',
336
- marginBottom: '0px',
337
- fontWeight: 'bold',
338
- color: '#384151',
339
- }, children: "Edit view" }), (0, jsx_runtime_1.jsx)("button", { style: {
340
- background: 'transparent',
341
- border: 'none',
342
- outline: 'none',
343
- height: 24,
344
- width: 24,
345
- cursor: 'pointer',
346
- }, onClick: closeEditModal, children: (0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", height: "24px", width: "24px", children: [(0, jsx_runtime_1.jsx)("line", { x1: "18", x2: "6", y1: "6", y2: "18" }), (0, jsx_runtime_1.jsx)("line", { x1: "6", x2: "18", y1: "6", y2: "18" })] }) })] }), (0, jsx_runtime_1.jsx)("h3", { style: {
347
- fontWeight: '600',
348
- fontSize: '14px',
349
- marginBottom: '6px',
350
- color: '#212121',
351
- }, children: "name" }), (0, jsx_runtime_1.jsx)(primitives_1.TextInputPrimitive, { placeholder: "Enter table display name...", onChange: (e) => setEditName(e.target.value), value: editName }), (0, jsx_runtime_1.jsx)("h3", { style: {
352
- fontWeight: '600',
353
- fontSize: '14px',
354
- marginBottom: '6px',
355
- color: '#212121',
356
- }, children: "query" }), (0, jsx_runtime_1.jsx)("div", { style: {
357
- background: state.theme.backgroundColor,
358
- // maxHeight: 700,
359
- width: '520px',
360
- height: '300px',
361
- // minWidth: 450,
362
- // overflowY: "scroll",
363
- // padding: "20px 30px 20px 20px",
364
- // marginLeft: 20,
365
- borderTopLeftRadius: 6,
366
- borderBottomLeftRadius: 6,
367
- borderTopRightRadius: 0,
368
- borderBottomRightRadius: 0,
369
- overflow: 'hidden',
370
- }, children: (0, jsx_runtime_1.jsx)(react_2.default, { height: "300px", width: "520px", defaultLanguage: "pgsql", defaultValue: "", value: editViewQuery, loading: (0, jsx_runtime_1.jsx)("div", {}), options: {
371
- wordWrap: 'on',
372
- minimap: {
373
- enabled: false,
374
- },
375
- padding: { top: 16 },
376
- }, onChange: (query) => setEditViewQuery(query), beforeMount: (monaco) => (0, Admin_1.defineEditorTheme)(monaco, state.theme), onMount: Admin_1.setEditorTheme }) }), (0, jsx_runtime_1.jsxs)("div", { style: {
377
- display: 'flex',
378
- flexDirection: 'row',
379
- alignItems: 'center',
380
- marginTop: 20,
381
- gap: 8,
382
- }, children: [(0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { onClick: handleEditTable, label: "Save changes" }), (0, jsx_runtime_1.jsx)(primitives_1.SecondaryButtonPrimitive, { onClick: handleClickFirstDelete, label: "Delete" })] })] }) }), (0, jsx_runtime_1.jsx)(primitives_1.ModalPrimitive, { isOpen: deleteModalIsOpen, close: closeDeleteModal, children: (0, jsx_runtime_1.jsxs)("div", { style: {
383
- display: 'flex',
384
- flexDirection: 'column',
385
- padding: '6px',
386
- }, children: [(0, jsx_runtime_1.jsxs)("h1", { style: {
387
- fontSize: '1.25rem',
388
- paddingTop: '0px',
389
- marginTop: '0px',
390
- marginBottom: '12px',
391
- fontWeight: 'bold',
392
- color: '#212121',
393
- }, children: ["Confirm delete \"", tableToBeDeleted, "\" view"] }), (0, jsx_runtime_1.jsx)("h3", { style: {
394
- fontWeight: '600',
395
- fontSize: '0.875rem',
396
- marginBottom: '6px',
397
- color: '#212121',
398
- }, children: "View name" }), (0, jsx_runtime_1.jsx)(primitives_1.TextInputPrimitive, { placeholder: "Type view name to confirm delete...", onChange: (e) => setDeleteName(e.target.value), value: deleteName }), (0, jsx_runtime_1.jsx)("div", { style: { height: 20 } }), (0, jsx_runtime_1.jsx)(primitives_1.ButtonPrimitive, { onClick: handleDeleteTable, label: `Confirm delete ${tableToBeDeleted}` })] }) })] }) }));
307
+ flexDirection: 'row',
308
+ alignItems: 'center',
309
+ justifyContent: 'flex-end',
310
+ marginTop: 20,
311
+ gap: 8,
312
+ }, children: [viewName && ((0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedButton, { onClick: () => submit('delete', query, name, id), label: "Delete", style: { color: 'red', backgroundColor: 'white' } })), (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedButton, { onClick: () => {
313
+ if (!name) {
314
+ alert('Please enter a name');
315
+ return;
316
+ }
317
+ submit(viewName ? 'edit' : 'add', query, name, id);
318
+ }, label: viewName ? 'Save changes' : 'Create view' })] })] }) }));
399
319
  }
400
- exports.default = SQLViewManager;