@addev-be/ui 0.16.7 → 0.16.9

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 (263) hide show
  1. package/assets/icons/arrow-down-1-9.svg +1 -1
  2. package/assets/icons/arrow-down-a-z.svg +1 -1
  3. package/assets/icons/arrow-up-z-a.svg +1 -1
  4. package/assets/icons/check.svg +1 -1
  5. package/assets/icons/circle-check.svg +1 -1
  6. package/assets/icons/down.svg +1 -1
  7. package/assets/icons/filter-full.svg +1 -1
  8. package/assets/icons/filter.svg +1 -1
  9. package/assets/icons/hashtag.svg +1 -1
  10. package/assets/icons/image-slash.svg +1 -1
  11. package/assets/icons/left.svg +1 -1
  12. package/assets/icons/magnifier.svg +1 -1
  13. package/assets/icons/phone.svg +1 -1
  14. package/assets/icons/right.svg +1 -1
  15. package/assets/icons/sort-calendar-ascending.svg +5 -5
  16. package/assets/icons/spinner-third.svg +1 -1
  17. package/assets/icons/table-columns.svg +1 -1
  18. package/assets/icons/table-footer-slash.svg +4 -4
  19. package/assets/icons/table-footer.svg +3 -3
  20. package/assets/icons/table.svg +1 -1
  21. package/assets/icons/up.svg +1 -1
  22. package/assets/icons/user-tie.svg +1 -1
  23. package/assets/icons/x-bar.svg +3 -3
  24. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.d.ts +14 -0
  25. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +77 -0
  26. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.d.ts +22 -0
  27. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +105 -0
  28. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.d.ts +2 -0
  29. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.js +18 -0
  30. package/dist/components/data/AdvancedRequestDataGrid/index.d.ts +2 -0
  31. package/dist/components/data/AdvancedRequestDataGrid/index.js +215 -0
  32. package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +21 -0
  33. package/dist/components/data/AdvancedRequestDataGrid/types.js +2 -0
  34. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +10 -0
  35. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +173 -0
  36. package/dist/components/data/DataGrid/DataGridEditableCell.d.ts +2 -0
  37. package/dist/components/data/DataGrid/DataGridEditableCell.js +27 -0
  38. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +13 -0
  39. package/dist/components/data/DataGrid/FilterValuesScroller.js +73 -0
  40. package/dist/components/data/DataGrid/VirtualScroller.d.ts +11 -0
  41. package/dist/components/data/DataGrid/VirtualScroller.js +41 -0
  42. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +12 -0
  43. package/dist/components/data/DataGrid/helpers/advancedRequests.js +53 -0
  44. package/dist/components/data/DataGrid/helpers.d.ts +28 -0
  45. package/dist/components/data/DataGrid/helpers.js +436 -0
  46. package/dist/components/data/DataGrid/styles.d.ts +1 -1
  47. package/dist/components/data/DataGrid/styles.js +4 -4
  48. package/dist/components/data/SmartQueryDataGrid/helpers/columns.d.ts +20 -0
  49. package/dist/components/data/SmartQueryDataGrid/helpers/columns.js +160 -0
  50. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.d.ts +5 -0
  51. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.js +41 -0
  52. package/dist/components/data/SmartQueryDataGrid/helpers/index.d.ts +2 -0
  53. package/dist/components/data/SmartQueryDataGrid/helpers/index.js +18 -0
  54. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.d.ts +3 -0
  55. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.js +15 -0
  56. package/dist/components/data/SmartQueryDataGrid/hooks.d.ts +9 -0
  57. package/dist/components/data/SmartQueryDataGrid/hooks.js +63 -0
  58. package/dist/components/data/SmartQueryDataGrid/index.d.ts +12 -0
  59. package/dist/components/data/SmartQueryDataGrid/index.js +242 -0
  60. package/dist/components/data/SmartQueryDataGrid/types.d.ts +22 -0
  61. package/dist/components/data/SmartQueryDataGrid/types.js +2 -0
  62. package/dist/components/forms/Form/Checkbox.d.ts +2 -2
  63. package/dist/components/forms/Form/Checkbox.js +2 -2
  64. package/dist/components/forms/Form/Input.d.ts +2 -2
  65. package/dist/components/forms/Form/Input.js +2 -3
  66. package/dist/components/forms/Form/InputWithLabel.d.ts +2 -0
  67. package/dist/components/forms/Form/InputWithLabel.js +10 -0
  68. package/dist/components/forms/Form/Select.d.ts +0 -1
  69. package/dist/components/forms/Form/Select.js +4 -5
  70. package/dist/components/forms/Form/TextArea.d.ts +2 -2
  71. package/dist/components/forms/Form/TextArea.js +2 -3
  72. package/dist/components/forms/Form/index.d.ts +8 -22
  73. package/dist/components/forms/Form/index.js +1 -6
  74. package/dist/components/forms/Form/styles.d.ts +4 -9
  75. package/dist/components/forms/Form/styles.js +11 -13
  76. package/dist/components/forms/Form/types.d.ts +7 -0
  77. package/dist/components/forms/Form/types.js +2 -0
  78. package/dist/components/forms/index.d.ts +1 -2
  79. package/dist/components/forms/index.js +1 -2
  80. package/dist/config/types.d.ts +11 -0
  81. package/dist/config/types.js +2 -0
  82. package/dist/hooks/index.d.ts +0 -1
  83. package/dist/hooks/index.js +0 -1
  84. package/dist/services/requests/userPermissions.d.ts +4 -0
  85. package/dist/services/requests/userPermissions.js +20 -0
  86. package/package.json +1 -1
  87. package/src/Icons.tsx +134 -134
  88. package/src/components/auth/LoginForm.tsx +84 -84
  89. package/src/components/auth/LoginPage.tsx +32 -32
  90. package/src/components/auth/PasswordRecoveryForm.tsx +52 -52
  91. package/src/components/auth/PasswordResetForm.tsx +112 -112
  92. package/src/components/auth/index.ts +4 -4
  93. package/src/components/auth/styles.ts +14 -14
  94. package/src/components/data/DataGrid/DataGridCell.tsx +77 -77
  95. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  96. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  97. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  98. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  99. package/src/components/data/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +38 -38
  100. package/src/components/data/DataGrid/DataGridEditableCell/DateEditableCell.tsx +39 -39
  101. package/src/components/data/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +68 -68
  102. package/src/components/data/DataGrid/DataGridEditableCell/TextEditableCell.tsx +38 -38
  103. package/src/components/data/DataGrid/DataGridEditableCell/index.tsx +106 -108
  104. package/src/components/data/DataGrid/DataGridEditableCell/styles.ts +35 -35
  105. package/src/components/data/DataGrid/DataGridEditableCell/types.ts +19 -19
  106. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +131 -131
  107. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  108. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +376 -376
  109. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  110. package/src/components/data/DataGrid/DataGridFooter.tsx +45 -45
  111. package/src/components/data/DataGrid/DataGridHeader.tsx +185 -173
  112. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +111 -111
  113. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +82 -80
  114. package/src/components/data/DataGrid/FilterModalContent/index.tsx +136 -136
  115. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  116. package/src/components/data/DataGrid/constants.ts +6 -6
  117. package/src/components/data/DataGrid/helpers/columns.tsx +386 -386
  118. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  119. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  120. package/src/components/data/DataGrid/hooks/index.ts +29 -29
  121. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +377 -377
  122. package/src/components/data/DataGrid/hooks/useDataGridChangedRows.ts +89 -56
  123. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +174 -174
  124. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  125. package/src/components/data/DataGrid/hooks/useRefreshModal.tsx +48 -0
  126. package/src/components/data/DataGrid/index.tsx +110 -110
  127. package/src/components/data/DataGrid/styles.ts +379 -379
  128. package/src/components/data/DataGrid/types.ts +367 -367
  129. package/src/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.tsx +16 -16
  130. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +481 -480
  131. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  132. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  133. package/src/components/data/SqlRequestDataGrid/index.tsx +402 -402
  134. package/src/components/data/SqlRequestDataGrid/styles.ts +15 -15
  135. package/src/components/data/SqlRequestDataGrid/types.ts +74 -74
  136. package/src/components/data/SqlRequestForeignList/index.tsx +259 -259
  137. package/src/components/data/SqlRequestForeignList/styles.ts +43 -43
  138. package/src/components/data/SqlRequestForeignList/types.ts +34 -34
  139. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +110 -110
  140. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  141. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  142. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  143. package/src/components/data/SqlRequestGrid/index.tsx +316 -316
  144. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  145. package/src/components/data/SqlRequestGrid/types.ts +75 -75
  146. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  147. package/src/components/data/VirtualScroller/index.tsx +91 -91
  148. package/src/components/data/VirtualScroller/styles.ts +58 -58
  149. package/src/components/data/VirtualScroller/types.ts +12 -12
  150. package/src/components/data/index.ts +16 -16
  151. package/src/components/forms/AutoTextArea.tsx +41 -41
  152. package/src/components/forms/Button.tsx +133 -133
  153. package/src/components/forms/Form/Checkbox.tsx +12 -12
  154. package/src/components/forms/Form/FormGroup.tsx +27 -27
  155. package/src/components/forms/Form/Input.tsx +16 -16
  156. package/src/components/forms/Form/Row.tsx +32 -32
  157. package/src/components/forms/Form/Select.tsx +81 -81
  158. package/src/components/forms/Form/TextArea.tsx +17 -17
  159. package/src/components/forms/Form/index.tsx +45 -45
  160. package/src/components/forms/Form/styles.ts +171 -171
  161. package/src/components/forms/IconButton.tsx +57 -57
  162. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  163. package/src/components/forms/NumberInput.tsx +53 -53
  164. package/src/components/forms/Select.tsx +35 -35
  165. package/src/components/forms/VerticalLabel.tsx +20 -20
  166. package/src/components/forms/index.ts +9 -9
  167. package/src/components/forms/styles.ts +31 -31
  168. package/src/components/index.ts +6 -6
  169. package/src/components/layout/Columns.ts +20 -20
  170. package/src/components/layout/Dropdown/index.tsx +113 -113
  171. package/src/components/layout/Dropdown/styles.ts +45 -45
  172. package/src/components/layout/Grid/index.tsx +8 -8
  173. package/src/components/layout/Grid/styles.ts +34 -34
  174. package/src/components/layout/Loading/index.tsx +29 -29
  175. package/src/components/layout/Loading/styles.ts +29 -29
  176. package/src/components/layout/Masonry/index.tsx +29 -29
  177. package/src/components/layout/Masonry/styles.ts +20 -20
  178. package/src/components/layout/Modal/index.tsx +51 -51
  179. package/src/components/layout/Modal/styles.ts +125 -121
  180. package/src/components/layout/index.ts +6 -6
  181. package/src/components/search/HighlightedText.tsx +41 -37
  182. package/src/components/search/QuickSearchBar.tsx +90 -86
  183. package/src/components/search/QuickSearchResults.tsx +86 -86
  184. package/src/components/search/index.ts +9 -9
  185. package/src/components/search/styles.ts +96 -96
  186. package/src/components/search/types.ts +26 -26
  187. package/src/components/ui/Avatar/index.tsx +54 -54
  188. package/src/components/ui/Avatar/styles.ts +61 -61
  189. package/src/components/ui/Card/index.tsx +14 -14
  190. package/src/components/ui/Card/styles.ts +37 -37
  191. package/src/components/ui/ContextMenu/index.tsx +79 -79
  192. package/src/components/ui/ContextMenu/styles.ts +119 -119
  193. package/src/components/ui/Ellipsis.tsx +34 -34
  194. package/src/components/ui/Message/index.tsx +57 -57
  195. package/src/components/ui/Message/styles.ts +40 -40
  196. package/src/components/ui/index.ts +6 -6
  197. package/src/config/index.ts +14 -14
  198. package/src/helpers/dates.ts +17 -17
  199. package/src/helpers/getScrollbarSize.ts +14 -14
  200. package/src/helpers/index.ts +4 -4
  201. package/src/helpers/numbers.ts +63 -63
  202. package/src/helpers/responsive.ts +83 -83
  203. package/src/helpers/text.ts +13 -13
  204. package/src/hooks/index.ts +7 -7
  205. package/src/hooks/useContainerMediaQuery.ts +7 -7
  206. package/src/hooks/useElementSize.ts +24 -24
  207. package/src/hooks/useMediaQuery.ts +9 -9
  208. package/src/hooks/useMediaQueryForWidth.ts +35 -35
  209. package/src/hooks/useMutableState.ts +19 -19
  210. package/src/hooks/useShowArchived.ts +28 -28
  211. package/src/hooks/useWindowSize.ts +20 -20
  212. package/src/index.ts +9 -9
  213. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  214. package/src/providers/AuthenticationProvider/index.tsx +243 -243
  215. package/src/providers/LoadingProvider/index.tsx +47 -47
  216. package/src/providers/PortalsProvider/index.tsx +54 -54
  217. package/src/providers/PortalsProvider/styles.ts +31 -31
  218. package/src/providers/SettingsProvider/index.tsx +70 -70
  219. package/src/providers/ThemeProvider/ThemeProvider.ts +63 -63
  220. package/src/providers/ThemeProvider/defaultTheme.ts +457 -457
  221. package/src/providers/ThemeProvider/helpers.ts +11 -11
  222. package/src/providers/ThemeProvider/index.ts +4 -4
  223. package/src/providers/ThemeProvider/types.ts +131 -131
  224. package/src/providers/TrackingProvider/hooks.ts +14 -14
  225. package/src/providers/TrackingProvider/index.tsx +71 -71
  226. package/src/providers/UiProviders/index.tsx +68 -68
  227. package/src/providers/UiProviders/styles.ts +10 -10
  228. package/src/providers/hooks.ts +12 -12
  229. package/src/providers/index.ts +8 -8
  230. package/src/services/HttpService.ts +92 -92
  231. package/src/services/WebSocketService.ts +137 -137
  232. package/src/services/advancedRequests.ts +102 -102
  233. package/src/services/base.ts +23 -23
  234. package/src/services/globalSearch.ts +29 -29
  235. package/src/services/hooks.ts +44 -44
  236. package/src/services/index.ts +21 -21
  237. package/src/services/requests/auth.ts +44 -44
  238. package/src/services/requests/generic.ts +62 -62
  239. package/src/services/requests/tracking.ts +12 -12
  240. package/src/services/requests/userProfiles.ts +35 -35
  241. package/src/services/requests/users.ts +28 -28
  242. package/src/services/smartQueries.ts +122 -122
  243. package/src/services/sqlRequests.ts +111 -111
  244. package/src/services/types/auth.ts +131 -131
  245. package/src/services/types/base.ts +10 -10
  246. package/src/services/types/generic.ts +96 -96
  247. package/src/services/types/tracking.ts +39 -39
  248. package/src/services/types/userProfiles.ts +107 -107
  249. package/src/services/types/users.ts +106 -106
  250. package/src/services/updateSqlRequests.ts +34 -34
  251. package/src/styles/animations.scss +30 -30
  252. package/src/styles/index.scss +42 -42
  253. package/src/typings.d.ts +19 -19
  254. package/tsconfig.json +18 -18
  255. package/tsconfig.tsbuildinfo +1 -1
  256. package/dist/components/forms/Form/Row.d.ts +0 -9
  257. package/dist/components/forms/Form/Row.js +0 -10
  258. package/dist/components/forms/NumberInput.d.ts +0 -9
  259. package/dist/components/forms/NumberInput.js +0 -41
  260. package/dist/components/ui/ToastNotification.d.ts +0 -14
  261. package/dist/components/ui/ToastNotification.js +0 -78
  262. package/dist/hooks/useMutableState.d.ts +0 -2
  263. package/dist/hooks/useMutableState.js +0 -16
@@ -1,92 +1,92 @@
1
- import { Config } from '../config';
2
- import { trimEnd } from 'lodash';
3
- import { v4 } from 'uuid';
4
-
5
- export class HttpService {
6
- private static instance: HttpService;
7
- private config: Config;
8
- private promises: {
9
- [id: string]: {
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- resolve: (value: any) => void;
12
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
- reject: (reason?: any) => void;
14
- };
15
- } = {};
16
-
17
- constructor(config: Config) {
18
- HttpService.instance = this;
19
- this.config = config;
20
- }
21
-
22
- public static getInstance() {
23
- return HttpService.instance;
24
- }
25
-
26
- public sendRequest<TReq, TRes>(
27
- name: string,
28
- data: TReq,
29
- files?: Record<string, File>
30
- ) {
31
- const id = v4();
32
- const promise = new Promise<TRes>((resolve, reject) => {
33
- this.promises[id] = { resolve, reject };
34
-
35
- const formData = new FormData();
36
- formData.append('id', id);
37
- formData.append('data', JSON.stringify(data));
38
- if (files) {
39
- Object.entries(files).forEach(([key, file]) => {
40
- formData.append(key, file);
41
- });
42
- }
43
-
44
- console.log('[HTTP] Sending request:', { id, name, data });
45
- fetch(`${trimEnd(this.config.httpServerUrl, '/')}/${name}`, {
46
- method: 'POST',
47
- headers: {
48
- 'Content-Type': 'application/json',
49
- },
50
- body: formData,
51
- })
52
- .then(async (response) => {
53
- if (!response.ok) {
54
- throw new Error('HTTP request failed');
55
- }
56
- const body = await response.text();
57
- this.parseMessage(body);
58
- })
59
- .catch((error) => {
60
- reject(error);
61
- });
62
- });
63
- return promise;
64
- }
65
-
66
- private parseMessage(message: string) {
67
- try {
68
- const response = JSON.parse(message);
69
- if (!response.id) {
70
- throw new Error('Received message is not valid');
71
- }
72
- if (this.promises[response.id]) {
73
- console.log('[HTTP] Received response:', response);
74
- if (
75
- typeof response.data?.status === 'number' &&
76
- response.data.status < 0
77
- ) {
78
- this.promises[response.id].reject(new Error(response.data.message));
79
- } else {
80
- this.promises[response.id].resolve(response.data);
81
- }
82
- delete this.promises[response.id];
83
- } else {
84
- console.log('[HTTP] Received request:', response);
85
- // TODO : Implement request handling
86
- throw new Error('Not yet implemented');
87
- }
88
- } catch (error) {
89
- console.error('[HTTP] Error parsing message:', error);
90
- }
91
- }
92
- }
1
+ import { Config } from '../config';
2
+ import { trimEnd } from 'lodash';
3
+ import { v4 } from 'uuid';
4
+
5
+ export class HttpService {
6
+ private static instance: HttpService;
7
+ private config: Config;
8
+ private promises: {
9
+ [id: string]: {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ resolve: (value: any) => void;
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ reject: (reason?: any) => void;
14
+ };
15
+ } = {};
16
+
17
+ constructor(config: Config) {
18
+ HttpService.instance = this;
19
+ this.config = config;
20
+ }
21
+
22
+ public static getInstance() {
23
+ return HttpService.instance;
24
+ }
25
+
26
+ public sendRequest<TReq, TRes>(
27
+ name: string,
28
+ data: TReq,
29
+ files?: Record<string, File>
30
+ ) {
31
+ const id = v4();
32
+ const promise = new Promise<TRes>((resolve, reject) => {
33
+ this.promises[id] = { resolve, reject };
34
+
35
+ const formData = new FormData();
36
+ formData.append('id', id);
37
+ formData.append('data', JSON.stringify(data));
38
+ if (files) {
39
+ Object.entries(files).forEach(([key, file]) => {
40
+ formData.append(key, file);
41
+ });
42
+ }
43
+
44
+ console.log('[HTTP] Sending request:', { id, name, data });
45
+ fetch(`${trimEnd(this.config.httpServerUrl, '/')}/${name}`, {
46
+ method: 'POST',
47
+ headers: {
48
+ 'Content-Type': 'application/json',
49
+ },
50
+ body: formData,
51
+ })
52
+ .then(async (response) => {
53
+ if (!response.ok) {
54
+ throw new Error('HTTP request failed');
55
+ }
56
+ const body = await response.text();
57
+ this.parseMessage(body);
58
+ })
59
+ .catch((error) => {
60
+ reject(error);
61
+ });
62
+ });
63
+ return promise;
64
+ }
65
+
66
+ private parseMessage(message: string) {
67
+ try {
68
+ const response = JSON.parse(message);
69
+ if (!response.id) {
70
+ throw new Error('Received message is not valid');
71
+ }
72
+ if (this.promises[response.id]) {
73
+ console.log('[HTTP] Received response:', response);
74
+ if (
75
+ typeof response.data?.status === 'number' &&
76
+ response.data.status < 0
77
+ ) {
78
+ this.promises[response.id].reject(new Error(response.data.message));
79
+ } else {
80
+ this.promises[response.id].resolve(response.data);
81
+ }
82
+ delete this.promises[response.id];
83
+ } else {
84
+ console.log('[HTTP] Received request:', response);
85
+ // TODO : Implement request handling
86
+ throw new Error('Not yet implemented');
87
+ }
88
+ } catch (error) {
89
+ console.error('[HTTP] Error parsing message:', error);
90
+ }
91
+ }
92
+ }
@@ -1,137 +1,137 @@
1
- import { Config } from '../config';
2
- import { Request } from './base';
3
- import { Subject } from 'rxjs';
4
- import { v4 } from 'uuid';
5
-
6
- export class WebSocketService {
7
- private static instance: WebSocketService;
8
- private config: Config;
9
- private socket: WebSocket | null = null;
10
-
11
- public status: boolean | undefined = undefined;
12
- public status$ = new Subject<boolean | undefined>();
13
-
14
- private queue: Request[] = [];
15
- private promises: {
16
- [id: string]: {
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
- resolve: (value: any) => void;
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- reject: (reason?: any) => void;
21
- };
22
- } = {};
23
-
24
- public onOpen?: () => void = () => {};
25
- public onClose?: () => void = () => {};
26
- public onMessage?: (message: string) => void = () => {};
27
- public onError?: (error: unknown) => void = () => {};
28
-
29
- constructor(config: Config) {
30
- WebSocketService.instance = this;
31
- this.config = config;
32
- }
33
-
34
- public static getInstance() {
35
- return WebSocketService.instance;
36
- }
37
-
38
- private resetConnection() {
39
- this.setStatus(undefined);
40
- this.socket = new WebSocket(this.config.webSocketUrl);
41
-
42
- this.socket.onopen = () => {
43
- console.log('[WS] Connected');
44
- const interval = setInterval(() => {
45
- if (this.socket && this.socket.readyState === 1) {
46
- clearInterval(interval);
47
- this.setStatus(true);
48
- this.sendQueue();
49
- this.onOpen?.();
50
- }
51
- }, 100);
52
- };
53
-
54
- this.socket.onclose = () => {
55
- console.log('[WS] Disconnected');
56
- setTimeout(() => this.connect(), this.status === true ? 500 : 5000);
57
- this.onClose?.();
58
- this.setStatus(false);
59
- };
60
-
61
- this.socket.onmessage = (event) => {
62
- this.onMessage?.(event.data);
63
- this.parseMessage(event.data);
64
- };
65
-
66
- this.socket.onerror = (error) => {
67
- this.onError?.(error);
68
- console.error('[WS] Error:', error);
69
- };
70
- }
71
-
72
- public connect(force = false) {
73
- if (this.status === false || force) {
74
- this.resetConnection();
75
- }
76
- }
77
-
78
- private setStatus(status: boolean | undefined) {
79
- this.status = status;
80
- this.status$.next(status);
81
- }
82
-
83
- private sendQueue() {
84
- if (this.socket && this.status) {
85
- let request: Request | undefined;
86
- while ((request = this.queue.shift())) {
87
- console.log('[WS] Sending queued request:', request);
88
- this.socket?.send(JSON.stringify(request));
89
- }
90
- this.queue.forEach((request) =>
91
- this.socket?.send(JSON.stringify(request))
92
- );
93
- }
94
- }
95
-
96
- public sendRequest<TReq, TRes>(name: string, data: TReq) {
97
- const id = v4();
98
- const promise = new Promise<TRes>((resolve, reject) => {
99
- const request: Request = { id, name, data };
100
- this.promises[id] = { resolve, reject };
101
- if (!this.socket || !this.status) {
102
- this.queue.push(request);
103
- return;
104
- }
105
- console.log('[WS] Sending request:', request);
106
- this.socket?.send(JSON.stringify(request));
107
- });
108
- return promise;
109
- }
110
-
111
- private parseMessage(message: string) {
112
- try {
113
- const response = JSON.parse(message);
114
- if (!response.id) {
115
- throw new Error('Received message is not valid');
116
- }
117
- if (this.promises[response.id]) {
118
- console.log('[WS] Received response:', response);
119
- if (
120
- typeof response.data?.status === 'number' &&
121
- response.data.status < 0
122
- ) {
123
- this.promises[response.id].reject(new Error(response.data.message));
124
- } else {
125
- this.promises[response.id].resolve(response.data);
126
- }
127
- delete this.promises[response.id];
128
- } else {
129
- console.log('[WS] Received request:', response);
130
- // TODO : Implement request handling
131
- throw new Error('Not yet implemented');
132
- }
133
- } catch (error) {
134
- console.error('[WS] Error parsing message:', error);
135
- }
136
- }
137
- }
1
+ import { Config } from '../config';
2
+ import { Request } from './base';
3
+ import { Subject } from 'rxjs';
4
+ import { v4 } from 'uuid';
5
+
6
+ export class WebSocketService {
7
+ private static instance: WebSocketService;
8
+ private config: Config;
9
+ private socket: WebSocket | null = null;
10
+
11
+ public status: boolean | undefined = undefined;
12
+ public status$ = new Subject<boolean | undefined>();
13
+
14
+ private queue: Request[] = [];
15
+ private promises: {
16
+ [id: string]: {
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ resolve: (value: any) => void;
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ reject: (reason?: any) => void;
21
+ };
22
+ } = {};
23
+
24
+ public onOpen?: () => void = () => {};
25
+ public onClose?: () => void = () => {};
26
+ public onMessage?: (message: string) => void = () => {};
27
+ public onError?: (error: unknown) => void = () => {};
28
+
29
+ constructor(config: Config) {
30
+ WebSocketService.instance = this;
31
+ this.config = config;
32
+ }
33
+
34
+ public static getInstance() {
35
+ return WebSocketService.instance;
36
+ }
37
+
38
+ private resetConnection() {
39
+ this.setStatus(undefined);
40
+ this.socket = new WebSocket(this.config.webSocketUrl);
41
+
42
+ this.socket.onopen = () => {
43
+ console.log('[WS] Connected');
44
+ const interval = setInterval(() => {
45
+ if (this.socket && this.socket.readyState === 1) {
46
+ clearInterval(interval);
47
+ this.setStatus(true);
48
+ this.sendQueue();
49
+ this.onOpen?.();
50
+ }
51
+ }, 100);
52
+ };
53
+
54
+ this.socket.onclose = () => {
55
+ console.log('[WS] Disconnected');
56
+ setTimeout(() => this.connect(), this.status === true ? 500 : 5000);
57
+ this.onClose?.();
58
+ this.setStatus(false);
59
+ };
60
+
61
+ this.socket.onmessage = (event) => {
62
+ this.onMessage?.(event.data);
63
+ this.parseMessage(event.data);
64
+ };
65
+
66
+ this.socket.onerror = (error) => {
67
+ this.onError?.(error);
68
+ console.error('[WS] Error:', error);
69
+ };
70
+ }
71
+
72
+ public connect(force = false) {
73
+ if (this.status === false || force) {
74
+ this.resetConnection();
75
+ }
76
+ }
77
+
78
+ private setStatus(status: boolean | undefined) {
79
+ this.status = status;
80
+ this.status$.next(status);
81
+ }
82
+
83
+ private sendQueue() {
84
+ if (this.socket && this.status) {
85
+ let request: Request | undefined;
86
+ while ((request = this.queue.shift())) {
87
+ console.log('[WS] Sending queued request:', request);
88
+ this.socket?.send(JSON.stringify(request));
89
+ }
90
+ this.queue.forEach((request) =>
91
+ this.socket?.send(JSON.stringify(request))
92
+ );
93
+ }
94
+ }
95
+
96
+ public sendRequest<TReq, TRes>(name: string, data: TReq) {
97
+ const id = v4();
98
+ const promise = new Promise<TRes>((resolve, reject) => {
99
+ const request: Request = { id, name, data };
100
+ this.promises[id] = { resolve, reject };
101
+ if (!this.socket || !this.status) {
102
+ this.queue.push(request);
103
+ return;
104
+ }
105
+ console.log('[WS] Sending request:', request);
106
+ this.socket?.send(JSON.stringify(request));
107
+ });
108
+ return promise;
109
+ }
110
+
111
+ private parseMessage(message: string) {
112
+ try {
113
+ const response = JSON.parse(message);
114
+ if (!response.id) {
115
+ throw new Error('Received message is not valid');
116
+ }
117
+ if (this.promises[response.id]) {
118
+ console.log('[WS] Received response:', response);
119
+ if (
120
+ typeof response.data?.status === 'number' &&
121
+ response.data.status < 0
122
+ ) {
123
+ this.promises[response.id].reject(new Error(response.data.message));
124
+ } else {
125
+ this.promises[response.id].resolve(response.data);
126
+ }
127
+ delete this.promises[response.id];
128
+ } else {
129
+ console.log('[WS] Received request:', response);
130
+ // TODO : Implement request handling
131
+ throw new Error('Not yet implemented');
132
+ }
133
+ } catch (error) {
134
+ console.error('[WS] Error parsing message:', error);
135
+ }
136
+ }
137
+ }
@@ -1,102 +1,102 @@
1
- import { useWebSocketRequestHandler } from './hooks';
2
-
3
- export type FieldDTO<T extends string = string> = {
4
- fieldName?: T;
5
- fieldAlias?: string;
6
- operator?:
7
- | 'add'
8
- | 'concat'
9
- | 'divide'
10
- | 'groupConcat'
11
- | 'if'
12
- | 'ifNull'
13
- | 'jsonObject'
14
- | 'length'
15
- | 'modulo'
16
- | 'multiply'
17
- | 'subtract'
18
- | 'sum'
19
- | 'trim';
20
- operands?: FieldDTO[];
21
- constantValue?: string | number | boolean | null;
22
- groupBy?: boolean;
23
- };
24
-
25
- export type ConditionDTO = {
26
- field: string;
27
- operator:
28
- | 'lessThan'
29
- | 'lessThanOrEqual'
30
- | 'lessThanOrEquals'
31
- | 'equals'
32
- | 'notEquals'
33
- | 'greaterThanOrEqual'
34
- | 'greaterThanOrEquals'
35
- | 'greaterThan'
36
- | 'like'
37
- | 'contains'
38
- | 'notContains'
39
- | 'startsWith'
40
- | 'endsWith'
41
- | 'notLike'
42
- | 'inRange'
43
- | 'between'
44
- | 'isNull'
45
- | 'isNotNull'
46
- | 'inArray'
47
- | 'in'
48
- | 'not'
49
- | 'and'
50
- | 'or';
51
- value?:
52
- | string
53
- | number
54
- | boolean
55
- | null
56
- | (string | number | boolean | null)[];
57
- children?: boolean;
58
- };
59
-
60
- export type OrderByDTO = {
61
- field: string;
62
- direction?: 'ASC' | 'DESC';
63
- };
64
-
65
- export type AdvancedRequestDTO = {
66
- type: string;
67
- fields: FieldDTO[];
68
- conditions: ConditionDTO[];
69
- orderBy?: OrderByDTO[];
70
- start?: number;
71
- length?: number;
72
- getTotal?: boolean;
73
- unique?: boolean;
74
- };
75
-
76
- export type AdvancedRequestRow<R> = {
77
- [K in keyof R]: R[K] extends string | number | null
78
- ? R[K]
79
- : string | number | null;
80
- };
81
-
82
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
- export type AdvancedResponseDTO<T = any> = {
84
- data: AdvancedRequestRow<T>[];
85
- count?: number;
86
- };
87
-
88
- export type AdvancedRequestFieldDTO =
89
- | string
90
- | {
91
- name: string;
92
- fields: AdvancedRequestFieldDTO[];
93
- };
94
-
95
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
- export const useAdvancedRequestHandler = <T = any>() =>
97
- useWebSocketRequestHandler<AdvancedRequestDTO, AdvancedResponseDTO<T>>(
98
- 'AdvancedRequest'
99
- );
100
-
101
- export const useRawAdvancedRequestHandler = () =>
102
- useWebSocketRequestHandler<AdvancedRequestDTO, string>('RawAdvancedRequest');
1
+ import { useWebSocketRequestHandler } from './hooks';
2
+
3
+ export type FieldDTO<T extends string = string> = {
4
+ fieldName?: T;
5
+ fieldAlias?: string;
6
+ operator?:
7
+ | 'add'
8
+ | 'concat'
9
+ | 'divide'
10
+ | 'groupConcat'
11
+ | 'if'
12
+ | 'ifNull'
13
+ | 'jsonObject'
14
+ | 'length'
15
+ | 'modulo'
16
+ | 'multiply'
17
+ | 'subtract'
18
+ | 'sum'
19
+ | 'trim';
20
+ operands?: FieldDTO[];
21
+ constantValue?: string | number | boolean | null;
22
+ groupBy?: boolean;
23
+ };
24
+
25
+ export type ConditionDTO = {
26
+ field: string;
27
+ operator:
28
+ | 'lessThan'
29
+ | 'lessThanOrEqual'
30
+ | 'lessThanOrEquals'
31
+ | 'equals'
32
+ | 'notEquals'
33
+ | 'greaterThanOrEqual'
34
+ | 'greaterThanOrEquals'
35
+ | 'greaterThan'
36
+ | 'like'
37
+ | 'contains'
38
+ | 'notContains'
39
+ | 'startsWith'
40
+ | 'endsWith'
41
+ | 'notLike'
42
+ | 'inRange'
43
+ | 'between'
44
+ | 'isNull'
45
+ | 'isNotNull'
46
+ | 'inArray'
47
+ | 'in'
48
+ | 'not'
49
+ | 'and'
50
+ | 'or';
51
+ value?:
52
+ | string
53
+ | number
54
+ | boolean
55
+ | null
56
+ | (string | number | boolean | null)[];
57
+ children?: boolean;
58
+ };
59
+
60
+ export type OrderByDTO = {
61
+ field: string;
62
+ direction?: 'ASC' | 'DESC';
63
+ };
64
+
65
+ export type AdvancedRequestDTO = {
66
+ type: string;
67
+ fields: FieldDTO[];
68
+ conditions: ConditionDTO[];
69
+ orderBy?: OrderByDTO[];
70
+ start?: number;
71
+ length?: number;
72
+ getTotal?: boolean;
73
+ unique?: boolean;
74
+ };
75
+
76
+ export type AdvancedRequestRow<R> = {
77
+ [K in keyof R]: R[K] extends string | number | null
78
+ ? R[K]
79
+ : string | number | null;
80
+ };
81
+
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ export type AdvancedResponseDTO<T = any> = {
84
+ data: AdvancedRequestRow<T>[];
85
+ count?: number;
86
+ };
87
+
88
+ export type AdvancedRequestFieldDTO =
89
+ | string
90
+ | {
91
+ name: string;
92
+ fields: AdvancedRequestFieldDTO[];
93
+ };
94
+
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ export const useAdvancedRequestHandler = <T = any>() =>
97
+ useWebSocketRequestHandler<AdvancedRequestDTO, AdvancedResponseDTO<T>>(
98
+ 'AdvancedRequest'
99
+ );
100
+
101
+ export const useRawAdvancedRequestHandler = () =>
102
+ useWebSocketRequestHandler<AdvancedRequestDTO, string>('RawAdvancedRequest');