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