@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
@@ -4,7 +4,8 @@ import { ButtonPrimitive, ModalPrimitive, TextInputPrimitive, } from '../../prim
4
4
  import { createSQLView, getQueryFromAiWithConnection, getSqlViewData, } from '../../api/ConnectionClient';
5
5
  import SqlViewTile from '../../components/SqlViewTile';
6
6
  import SqlTextEditor from '../../components/SqlTextEditor';
7
- import { Table } from '@quillsql/react';
7
+ import { SchemaListComponent, Table } from '@quillsql/react';
8
+ import { LoadingSpinner, } from '../../components/UiComponents';
8
9
  export default function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByTable, environmentDetails, allSchemaInfo, domainName, completeOnboarding, clientId, state, }) {
9
10
  const [selectedTable, setSelectedTable] = useState(undefined);
10
11
  const [queryInfo, setQueryInfo] = useState({
@@ -17,9 +18,11 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
17
18
  const [tableData, setTableData] = useState(undefined);
18
19
  const [client, setClient] = useState(undefined);
19
20
  const [sqlTables, setSqlTables] = useState([]);
20
- const [askAIButton, setAskAIButton] = useState('Ask AI');
21
- const [runQueryButtonLabel, setRunQueryButtonLabel] = useState('Run query');
21
+ const [askAIButtonLoading, setAskAIButtonLoading] = useState(false);
22
+ const [runQueryButtonLoading, setRunQueryButtonLoading] = useState(false);
22
23
  const [showFKModal, setShowFKModal] = useState(false);
24
+ const [tableSearchQuery, setTableSearchQuery] = useState('');
25
+ const [displayedTableData, setDisplayedTableData] = useState(columnsByTable);
23
26
  const addSqlView = async (override) => {
24
27
  const results = await createSQLView(environmentDetails, allSchemaInfo, columnsByTable, queryInfo, client, domainName, tableData, sqlTables.map((e) => {
25
28
  return e.name;
@@ -37,6 +40,15 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
37
40
  setSqlQueryInfo({ msg: results.message, status: true });
38
41
  }
39
42
  };
43
+ const handleClickSchemaItem = async (event) => {
44
+ const name = event.target.textContent;
45
+ if (queryInfo.query && queryInfo.query.length > 0) {
46
+ await navigator.clipboard.writeText(name || '');
47
+ }
48
+ else {
49
+ setQueryInfo({ name: queryInfo.name, query: `SELECT * FROM ${name}` });
50
+ }
51
+ };
40
52
  useEffect(() => {
41
53
  window.scrollTo({
42
54
  behavior: 'smooth',
@@ -58,7 +70,24 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
58
70
  flexDirection: 'row',
59
71
  borderTop: 'solid 1px #e7e7e7',
60
72
  height: 'calc(100vh - 143px)',
61
- }, children: [_jsxs("div", { id: "form-editor-table", style: {
73
+ }, children: [_jsxs("div", { style: {
74
+ display: 'flex',
75
+ flexDirection: 'column',
76
+ }, children: [_jsx("div", { style: {
77
+ paddingLeft: '20px',
78
+ paddingRight: '30px',
79
+ height: 70,
80
+ minHeight: 70,
81
+ display: 'flex',
82
+ alignItems: 'center',
83
+ }, children: _jsx(TextInputPrimitive, { placeholder: "Search...",
84
+ // @ts-ignore
85
+ onChange: (e) => {
86
+ setTableSearchQuery(e.target.value);
87
+ setDisplayedTableData(columnsByTable.filter((table) => table.tableName
88
+ .toLowerCase()
89
+ .includes(e.target.value.toLowerCase().trim())));
90
+ }, value: tableSearchQuery, width: "100%" }) }), _jsx(SchemaListComponent, { schema: displayedTableData, theme: state.theme, width: '300px', loading: false, LoadingComponent: LoadingSpinner, onClick: handleClickSchemaItem })] }), _jsxs("div", { id: "form-editor-table", style: {
62
91
  display: 'flex',
63
92
  flexDirection: 'column',
64
93
  width: 'calc(100% - 300px)',
@@ -73,13 +102,13 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
73
102
  height: 70,
74
103
  }, children: [_jsx(TextInputPrimitive, { onChange: (e) => {
75
104
  setAIPrompt(e.target.value);
76
- }, placeholder: 'Describe a query...', value: aiPrompt }), _jsx(ButtonPrimitive, { label: askAIButton, onClick: async () => {
77
- setAskAIButton('Loading...');
105
+ }, placeholder: 'Describe a query...', value: aiPrompt }), _jsx(ButtonPrimitive, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: async () => {
106
+ setAskAIButtonLoading(true);
78
107
  const results = await getQueryFromAiWithConnection(aiPrompt, clientId, allSchemaInfo?.selectedFields.schema
79
108
  ? [allSchemaInfo?.selectedFields.schema]
80
109
  : undefined);
81
110
  setQueryInfo({ name: queryInfo.name, query: results });
82
- setAskAIButton('Ask AI');
111
+ setAskAIButtonLoading(false);
83
112
  }, style: { width: '90px' } })] }), _jsx(SqlTextEditor, { value: queryInfo.query, setValue: (e) => {
84
113
  setQueryInfo({ name: queryInfo.name, query: e });
85
114
  }, containerStyle: { paddingLeft: 16, paddingRight: 16 } }), _jsxs("div", { style: {
@@ -90,8 +119,8 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
90
119
  paddingLeft: 16,
91
120
  paddingRight: 16,
92
121
  height: 70,
93
- }, children: [_jsx(ButtonPrimitive, { label: runQueryButtonLabel, onClick: async () => {
94
- setRunQueryButtonLabel('Querying...');
122
+ }, children: [_jsx(ButtonPrimitive, { label: 'Run query', onClick: async () => {
123
+ setRunQueryButtonLoading(true);
95
124
  const getSqlResults = await getSqlViewData(clientId, queryInfo.query, environmentDetails.type, state.queryEndpoint);
96
125
  if (!getSqlResults.success) {
97
126
  setErrorInfo({ status: true, msg: getSqlResults.error });
@@ -100,7 +129,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
100
129
  setErrorInfo({ status: false, msg: '' });
101
130
  setTableData(getSqlResults);
102
131
  }
103
- setRunQueryButtonLabel('Run query');
132
+ setRunQueryButtonLoading(false);
104
133
  } }), errorInfo.status ? (_jsx("h2", { style: {
105
134
  ...header2Style,
106
135
  color: 'red',
@@ -113,7 +142,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
113
142
  }, children: [_jsx(Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: {
114
143
  height: 'calc(100vh - 589px)',
115
144
  width: '100%',
116
- }, showDownloadCSVButton: true }), _jsxs("div", { style: {
145
+ }, hideCSVDownloadButton: true }), _jsxs("div", { style: {
117
146
  width: '100%',
118
147
  display: 'flex',
119
148
  justifyContent: 'space-between',
@@ -1,5 +1,6 @@
1
- /// <reference types="react" />
2
- import { ButtonComponentProps, TextInputComponentProps, HeaderProps } from '@quillsql/react';
1
+ import { ButtonComponentProps } from '@quillsql/react';
2
+ import { ReactNode } from 'react';
3
+ import { TextInputComponentProps } from '../../components/UiComponents';
3
4
  import { ColumnsByTable } from '../../utils/table';
4
5
  interface CreateEditSqlViewProps {
5
6
  containerStyle: React.CSSProperties;
@@ -12,9 +13,11 @@ interface CreateEditSqlViewProps {
12
13
  SecondaryButtonComponent?: (props: ButtonComponentProps) => JSX.Element;
13
14
  TextInput?: (props: TextInputComponentProps) => JSX.Element;
14
15
  LoadingComponent?: () => JSX.Element;
15
- Header?: (props: HeaderProps) => JSX.Element;
16
+ Header?: (props: {
17
+ children: ReactNode;
18
+ }) => JSX.Element;
16
19
  closeEditView: () => void;
17
- addEditView: (request: string, query: string, name?: string, id?: string) => void;
20
+ addEditView: (request: string, query: string, name?: string, id?: string, columns?: any[]) => void;
18
21
  allTableData: ColumnsByTable[];
19
22
  schemaIsLoading: boolean;
20
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CreateEditSqlView.d.ts","sourceRoot":"","sources":["../../../../src/forms/sql_views/CreateEditSqlView.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,oBAAoB,EAEpB,uBAAuB,EACvB,WAAW,EAGZ,MAAM,iBAAiB,CAAC;AAwBzB,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI3D,UAAU,sBAAsB;IAC9B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,KACR,IAAI,CAAC;IACV,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,wBAAwB,EACxB,gBAA2C,EAC3C,MAAuB,EACvB,SAA6B,EAC7B,MAAuB,EACvB,YAAY,EACZ,eAAe,GAChB,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAiTtC"}
1
+ {"version":3,"file":"CreateEditSqlView.d.ts","sourceRoot":"","sources":["../../../../src/forms/sql_views/CreateEditSqlView.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAKrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,SAAS,EAKV,MAAM,OAAO,CAAC;AASf,OAAO,EAML,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI3D,UAAU,sBAAsB;IAC9B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,EAAE,KACZ,IAAI,CAAC;IACV,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,wBAAwB,EACxB,gBAA2C,EAC3C,MAAuB,EACvB,SAA6B,EAC7B,MAAuB,EACvB,YAAY,EACZ,eAAe,GAChB,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAgUtC"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Table, SchemaListComponent, } from '@quillsql/react';
3
- import { useEffect, useState } from 'react';
3
+ import { useEffect, useState, } from 'react';
4
4
  import { useAdmin } from '../../AdminProvider';
5
5
  import { getQueryFromAiWithConnection, getSqlViewData, } from '../../api/ConnectionClient';
6
6
  import SqlTextEditor from '../../components/SqlTextEditor';
@@ -11,9 +11,9 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
11
11
  const [name, setName] = useState(initialSqlView?.name || '');
12
12
  const [editViewQuery, setEditViewQuery] = useState(initialSqlView?.query || '');
13
13
  const [ranViewQuery, setRanViewQuery] = useState(initialSqlView?.query || '');
14
- const [askAIButton, setAskAIButton] = useState('Ask AI');
14
+ const [askAIButtonLoading, setAskAIButtonLoading] = useState(false);
15
+ const [runQueryButtonLoading, setRunQueryButtonLoading] = useState(false);
15
16
  const [aiPrompt, setAIPrompt] = useState('');
16
- const [runQueryButtonLabel, setRunQueryButtonLabel] = useState('Run query');
17
17
  const [viewAddable, setViewAddable] = useState(false);
18
18
  const [showFKModal, setShowFKModal] = useState(false);
19
19
  const [overrideFKCheck, setOverrideFKCheck] = useState(false);
@@ -30,7 +30,7 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
30
30
  setShowFKModal(true);
31
31
  return;
32
32
  }
33
- addEditView(initialSqlView ? 'edit' : 'add', ranViewQuery, name, initialSqlView ? initialSqlView.id : undefined);
33
+ addEditView(initialSqlView ? 'edit' : 'add', ranViewQuery, name, initialSqlView ? initialSqlView.id : undefined, tableData?.fields || []);
34
34
  };
35
35
  useEffect(() => {
36
36
  setDisplayedTableData(allTableData);
@@ -38,19 +38,28 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
38
38
  const handleRunSqlPrompt = async () => {
39
39
  setErrorInfo({ show: false, message: '' });
40
40
  setViewAddable(false);
41
- setAskAIButton('Loading...');
41
+ setAskAIButtonLoading(true);
42
42
  const results = await getQueryFromAiWithConnection(aiPrompt, state.client._id, state.client.schemaNames);
43
43
  setOverrideFKCheck(false);
44
44
  setEditViewQuery(results);
45
- setAskAIButton('Ask AI');
45
+ setAskAIButtonLoading(false);
46
+ };
47
+ const handleClickSchemaItem = async (event) => {
48
+ const name = event.target.textContent;
49
+ if (editViewQuery && editViewQuery.length > 0) {
50
+ await navigator.clipboard.writeText(name || '');
51
+ }
52
+ else {
53
+ setEditViewQuery(`SELECT * FROM ${name}`);
54
+ }
46
55
  };
47
56
  const handleRunQuery = async () => {
48
57
  const query = editViewQuery;
49
58
  // If this query has a limit at the end alert the user
50
- if (query.toLowerCase().includes(' limit ')) {
59
+ if (/limit\s+\d+\s*;?\s*$/i.test(query)) {
51
60
  setErrorInfo({
52
61
  show: true,
53
- message: 'Error: Please remove the limit on you query.',
62
+ message: 'Error: Please remove the limit at the end of your query.',
54
63
  });
55
64
  return;
56
65
  }
@@ -58,11 +67,11 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
58
67
  setErrorInfo({ show: false, message: '' });
59
68
  setTableData(undefined);
60
69
  setIsLoading(true);
61
- setRunQueryButtonLabel('Querying...');
70
+ setRunQueryButtonLoading(true);
62
71
  setOverrideFKCheck(false);
63
72
  if (editViewQuery.length === 0) {
64
73
  setErrorInfo({ show: true, message: 'Error: Please enter a query.' });
65
- setRunQueryButtonLabel('Run query');
74
+ setRunQueryButtonLoading(false);
66
75
  return;
67
76
  }
68
77
  const resp = await getSqlViewData(state.client._id, query, state.client.databaseType, state.queryEndpoint);
@@ -70,11 +79,11 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
70
79
  setErrorInfo({ show: true, message: resp.error });
71
80
  setTableData(undefined);
72
81
  setViewAddable(false);
73
- setRunQueryButtonLabel('Run query');
82
+ setRunQueryButtonLoading(false);
74
83
  setIsLoading(false);
75
84
  return;
76
85
  }
77
- setRunQueryButtonLabel('Run query');
86
+ setRunQueryButtonLoading(false);
78
87
  setErrorInfo({ show: false, message: '' });
79
88
  // stringify all rows that are either jsonb or json
80
89
  resp.rows = resp.rows.map((row) => {
@@ -119,14 +128,12 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
119
128
  }, children: [_jsx("div", { style: {
120
129
  paddingLeft: '20px',
121
130
  paddingRight: '30px',
122
- }, children: _jsx(TextInput, { placeholder: "Search...",
123
- // @ts-ignore
124
- onChange: (e) => {
125
- setTableSearchQuery(e);
131
+ }, children: _jsx(TextInput, { placeholder: "Search...", onChange: (e) => {
132
+ setTableSearchQuery(e.target.value);
126
133
  setDisplayedTableData(allTableData.filter((table) => table.tableName
127
134
  .toLowerCase()
128
- .includes(e.toLowerCase().trim())));
129
- }, value: tableSearchQuery, id: 'edit-name', width: "100%" }) }), _jsx(SchemaListComponent, { schema: displayedTableData, theme: state.theme, LoadingComponent: LoadingComponent, loading: schemaIsLoading, width: '400px' })] }), _jsxs("div", { style: {
135
+ .includes(e.target.value.toLowerCase().trim())));
136
+ }, value: tableSearchQuery, id: 'edit-name', width: '100%' }) }), _jsx(SchemaListComponent, { schema: displayedTableData, theme: state.theme, LoadingComponent: LoadingComponent, loading: schemaIsLoading, width: '400px', onClick: handleClickSchemaItem })] }), _jsxs("div", { style: {
130
137
  display: 'flex',
131
138
  gap: 20,
132
139
  flexDirection: 'column',
@@ -141,15 +148,11 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
141
148
  justifyContent: 'space-between',
142
149
  gap: 20,
143
150
  width: '100%',
144
- }, children: [_jsx(TextInput
145
- // @ts-ignore
146
- , {
147
- // @ts-ignore
148
- onChange: (e) => {
149
- setAIPrompt(e);
150
- }, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '95%' }), _jsx(Button, { label: askAIButton, onClick: handleRunSqlPrompt, width: "100px" })] }), _jsx(SqlTextEditor, { value: editViewQuery, setValue: (e) => {
151
+ }, children: [_jsx(TextInput, { onChange: (e) => {
152
+ setAIPrompt(e.target.value);
153
+ }, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '100%' }), _jsx(Button, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: handleRunSqlPrompt })] }), _jsx(SqlTextEditor, { value: editViewQuery, setValue: (e) => {
151
154
  setEditViewQuery(e);
152
- } }), _jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: runQueryButtonLabel, onClick: handleRunQuery }) }), errorInfo.show ? (_jsx("div", { style: {
155
+ } }), _jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: 'Run query', isLoading: runQueryButtonLoading, onClick: handleRunQuery }) }), errorInfo.show ? (_jsx("div", { style: {
153
156
  fontSize: 15,
154
157
  fontWeight: '400',
155
158
  }, children: _jsx("div", { style: {
@@ -0,0 +1,3 @@
1
+ declare const useOnClickOutside: (ref: React.RefObject<HTMLDivElement>, handler: (event: any) => void) => void;
2
+ export default useOnClickOutside;
3
+ //# sourceMappingURL=useOnClickOutside.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,QAChB,MAAM,SAAS,CAAC,cAAc,CAAC,mBACjB,GAAG,KAAG,IAAI,SAgB9B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { useEffect } from "react";
2
+ const useOnClickOutside = (ref, handler) => {
3
+ useEffect(() => {
4
+ const listener = (event) => {
5
+ if (!ref.current || ref.current.contains(event.target)) {
6
+ return;
7
+ }
8
+ handler(event);
9
+ };
10
+ document.addEventListener("mousedown", listener);
11
+ document.addEventListener("touchstart", listener);
12
+ return () => {
13
+ document.removeEventListener("mousedown", listener);
14
+ document.removeEventListener("touchstart", listener);
15
+ };
16
+ }, [ref, handler]);
17
+ };
18
+ export default useOnClickOutside;
@@ -0,0 +1,17 @@
1
+ export declare function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, client, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, openEditOrderModal, }: {
2
+ isOpen: boolean;
3
+ dashboardData: any;
4
+ selectedDashboard: any;
5
+ client: any;
6
+ setIsOpen: any;
7
+ onSave: any;
8
+ openEditOrderModal: any;
9
+ ModalComponent: any;
10
+ TextInputComponent: any;
11
+ ButtonComponent: any;
12
+ HeaderComponent: any;
13
+ SelectComponent: any;
14
+ dashNames: any;
15
+ SecondaryButtonComponent: any;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=EditFiltersModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditFiltersModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditFiltersModal.tsx"],"names":[],"mappings":"AAeA,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,kBAAkB,GACnB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,iBAAiB,EAAE,GAAG,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EAAE,GAAG,CAAC;IACxB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CA8mBA"}