@addev-be/ui 0.3.2 → 0.3.3

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 (281) 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/down.svg +1 -1
  6. package/assets/icons/filter-full.svg +1 -1
  7. package/assets/icons/filter.svg +1 -1
  8. package/assets/icons/hashtag.svg +1 -1
  9. package/assets/icons/image-slash.svg +1 -1
  10. package/assets/icons/left.svg +1 -1
  11. package/assets/icons/magnifier.svg +1 -1
  12. package/assets/icons/phone.svg +1 -1
  13. package/assets/icons/right.svg +1 -1
  14. package/assets/icons/sort-calendar-ascending.svg +5 -5
  15. package/assets/icons/spinner-third.svg +1 -1
  16. package/assets/icons/table-columns.svg +1 -1
  17. package/assets/icons/table-footer-slash.svg +4 -4
  18. package/assets/icons/table-footer.svg +3 -3
  19. package/assets/icons/up.svg +1 -1
  20. package/assets/icons/user-tie.svg +1 -1
  21. package/assets/icons/x-bar.svg +3 -3
  22. package/dist/Icons.d.ts +43 -0
  23. package/dist/Icons.js +116 -0
  24. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.d.ts +14 -0
  25. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +76 -0
  26. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.d.ts +22 -0
  27. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +156 -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/DataGridCell.d.ts +2 -0
  37. package/dist/components/data/DataGrid/DataGridCell.js +59 -0
  38. package/dist/components/data/DataGrid/DataGridColumnsModal/helpers.d.ts +2 -0
  39. package/dist/components/data/DataGrid/DataGridColumnsModal/helpers.js +24 -0
  40. package/dist/components/data/DataGrid/DataGridColumnsModal/hooks.d.ts +6 -0
  41. package/dist/components/data/DataGrid/DataGridColumnsModal/hooks.js +38 -0
  42. package/dist/components/data/DataGrid/DataGridColumnsModal/index.d.ts +15 -0
  43. package/dist/components/data/DataGrid/DataGridColumnsModal/index.js +111 -0
  44. package/dist/components/data/DataGrid/DataGridColumnsModal/styles.d.ts +22 -0
  45. package/dist/components/data/DataGrid/DataGridColumnsModal/styles.js +54 -0
  46. package/dist/components/data/DataGrid/DataGridEditableCell.d.ts +2 -0
  47. package/dist/components/data/DataGrid/DataGridEditableCell.js +27 -0
  48. package/dist/components/data/DataGrid/DataGridFilterMenu/hooks.d.ts +9 -0
  49. package/dist/components/data/DataGrid/DataGridFilterMenu/hooks.js +52 -0
  50. package/dist/components/data/DataGrid/DataGridFilterMenu/index.d.ts +9 -0
  51. package/dist/components/data/DataGrid/DataGridFilterMenu/index.js +220 -0
  52. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.d.ts +9 -0
  53. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.js +21 -0
  54. package/dist/components/data/DataGrid/DataGridFooter.d.ts +4 -0
  55. package/dist/components/data/DataGrid/DataGridFooter.js +44 -0
  56. package/dist/components/data/DataGrid/DataGridHeader.d.ts +4 -0
  57. package/dist/components/data/DataGrid/DataGridHeader.js +119 -0
  58. package/dist/components/data/DataGrid/DataGridHeaderCell.d.ts +2 -0
  59. package/dist/components/data/DataGrid/DataGridHeaderCell.js +84 -0
  60. package/dist/components/data/DataGrid/FilterModalContent/index.d.ts +7 -0
  61. package/dist/components/data/DataGrid/FilterModalContent/index.js +108 -0
  62. package/dist/components/data/DataGrid/FilterModalContent/styles.d.ts +3 -0
  63. package/dist/components/data/DataGrid/FilterModalContent/styles.js +15 -0
  64. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +13 -0
  65. package/dist/components/data/DataGrid/FilterValuesScroller.js +73 -0
  66. package/dist/components/data/DataGrid/VirtualScroller.d.ts +11 -0
  67. package/dist/components/data/DataGrid/VirtualScroller.js +41 -0
  68. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +12 -0
  69. package/dist/components/data/DataGrid/helpers/advancedRequests.js +53 -0
  70. package/dist/components/data/DataGrid/helpers/columns.d.ts +12 -0
  71. package/dist/components/data/DataGrid/helpers/columns.js +162 -0
  72. package/dist/components/data/DataGrid/helpers/filters.d.ts +17 -0
  73. package/dist/components/data/DataGrid/helpers/filters.js +254 -0
  74. package/dist/components/data/DataGrid/helpers/index.d.ts +2 -0
  75. package/dist/components/data/DataGrid/helpers/index.js +18 -0
  76. package/dist/components/data/DataGrid/helpers.d.ts +28 -0
  77. package/dist/components/data/DataGrid/helpers.js +436 -0
  78. package/dist/components/data/DataGrid/hooks/index.d.ts +7 -0
  79. package/dist/components/data/DataGrid/hooks/index.js +34 -0
  80. package/dist/components/data/DataGrid/hooks/useDataGrid.d.ts +2 -0
  81. package/dist/components/data/DataGrid/hooks/useDataGrid.js +246 -0
  82. package/dist/components/data/DataGrid/hooks/useDataGridCopy.d.ts +4 -0
  83. package/dist/components/data/DataGrid/hooks/useDataGridCopy.js +171 -0
  84. package/dist/components/data/DataGrid/hooks/useDataGridSettings.d.ts +16 -0
  85. package/dist/components/data/DataGrid/hooks/useDataGridSettings.js +43 -0
  86. package/dist/components/data/DataGrid/index.d.ts +4 -0
  87. package/dist/components/data/DataGrid/index.js +108 -0
  88. package/dist/components/data/DataGrid/styles.d.ts +64 -0
  89. package/dist/components/data/DataGrid/styles.js +134 -0
  90. package/dist/components/data/DataGrid/types.d.ts +162 -0
  91. package/dist/components/data/DataGrid/types.js +34 -0
  92. package/dist/components/data/SqlRequestDataGrid/helpers/columns.d.ts +16 -0
  93. package/dist/components/data/SqlRequestDataGrid/helpers/columns.js +125 -0
  94. package/dist/components/data/SqlRequestDataGrid/helpers/index.d.ts +2 -0
  95. package/dist/components/data/SqlRequestDataGrid/helpers/index.js +18 -0
  96. package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.d.ts +3 -0
  97. package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.js +18 -0
  98. package/dist/components/data/SqlRequestDataGrid/index.d.ts +2 -0
  99. package/dist/components/data/SqlRequestDataGrid/index.js +296 -0
  100. package/dist/components/data/SqlRequestDataGrid/types.d.ts +21 -0
  101. package/dist/components/data/SqlRequestDataGrid/types.js +2 -0
  102. package/dist/components/data/index.d.ts +8 -0
  103. package/dist/components/data/index.js +24 -0
  104. package/dist/components/forms/Button.d.ts +10 -0
  105. package/dist/components/forms/Button.js +70 -0
  106. package/dist/components/forms/IconButton.d.ts +7 -0
  107. package/dist/components/forms/IconButton.js +64 -0
  108. package/dist/components/forms/IndeterminateCheckbox.d.ts +8 -0
  109. package/dist/components/forms/IndeterminateCheckbox.js +41 -0
  110. package/dist/components/forms/Select.d.ts +10 -0
  111. package/dist/components/forms/Select.js +49 -0
  112. package/dist/components/forms/index.d.ts +5 -0
  113. package/dist/components/forms/index.js +23 -0
  114. package/dist/components/forms/styles.d.ts +2 -0
  115. package/dist/components/forms/styles.js +34 -0
  116. package/dist/components/index.d.ts +3 -0
  117. package/dist/components/index.js +19 -0
  118. package/dist/components/layout/Dropdown/index.d.ts +11 -0
  119. package/dist/components/layout/Dropdown/index.js +85 -0
  120. package/dist/components/layout/Dropdown/styles.d.ts +11 -0
  121. package/dist/components/layout/Dropdown/styles.js +45 -0
  122. package/dist/components/layout/Loading/index.d.ts +6 -0
  123. package/dist/components/layout/Loading/index.js +42 -0
  124. package/dist/components/layout/Loading/styles.d.ts +6 -0
  125. package/dist/components/layout/Loading/styles.js +18 -0
  126. package/dist/components/layout/Modal/index.d.ts +16 -0
  127. package/dist/components/layout/Modal/index.js +67 -0
  128. package/dist/components/layout/Modal/styles.d.ts +32 -0
  129. package/dist/components/layout/Modal/styles.js +52 -0
  130. package/dist/components/layout/index.d.ts +3 -0
  131. package/dist/components/layout/index.js +19 -0
  132. package/dist/components/ui/ContextMenu/index.d.ts +11 -0
  133. package/dist/components/ui/ContextMenu/index.js +58 -0
  134. package/dist/components/ui/ContextMenu/styles.d.ts +18 -0
  135. package/dist/components/ui/ContextMenu/styles.js +56 -0
  136. package/dist/config/index.d.ts +10 -0
  137. package/dist/config/index.js +2 -0
  138. package/dist/config/types.d.ts +11 -0
  139. package/dist/config/types.js +2 -0
  140. package/dist/helpers/dates.d.ts +2 -0
  141. package/dist/helpers/dates.js +13 -0
  142. package/dist/helpers/getScrollbarSize.d.ts +1 -0
  143. package/dist/helpers/getScrollbarSize.js +17 -0
  144. package/dist/helpers/numbers.d.ts +3 -0
  145. package/dist/helpers/numbers.js +31 -0
  146. package/dist/hooks/index.d.ts +2 -0
  147. package/dist/hooks/index.js +18 -0
  148. package/dist/hooks/useElementSize.d.ts +4 -0
  149. package/dist/hooks/useElementSize.js +23 -0
  150. package/dist/hooks/useWindowSize.d.ts +4 -0
  151. package/dist/hooks/useWindowSize.js +19 -0
  152. package/dist/index.d.ts +5 -0
  153. package/dist/index.js +21 -0
  154. package/dist/providers/PortalsProvider/index.d.ts +10 -0
  155. package/dist/providers/PortalsProvider/index.js +46 -0
  156. package/dist/providers/PortalsProvider/styles.d.ts +9 -0
  157. package/dist/providers/PortalsProvider/styles.js +21 -0
  158. package/dist/providers/SettingsProvider/index.d.ts +8 -0
  159. package/dist/providers/SettingsProvider/index.js +54 -0
  160. package/dist/providers/ThemeProvider/ThemeProvider.d.ts +7 -0
  161. package/dist/providers/ThemeProvider/ThemeProvider.js +51 -0
  162. package/dist/providers/ThemeProvider/defaultTheme.d.ts +2 -0
  163. package/dist/providers/ThemeProvider/defaultTheme.js +417 -0
  164. package/dist/providers/ThemeProvider/index.d.ts +2 -0
  165. package/dist/providers/ThemeProvider/index.js +5 -0
  166. package/dist/providers/ThemeProvider/types.d.ts +24 -0
  167. package/dist/providers/ThemeProvider/types.js +2 -0
  168. package/dist/providers/UiProviders/index.d.ts +12 -0
  169. package/dist/providers/UiProviders/index.js +62 -0
  170. package/dist/providers/UiProviders/styles.d.ts +3 -0
  171. package/dist/providers/UiProviders/styles.js +13 -0
  172. package/dist/providers/hooks.d.ts +3 -0
  173. package/dist/providers/hooks.js +13 -0
  174. package/dist/providers/index.d.ts +4 -0
  175. package/dist/providers/index.js +20 -0
  176. package/dist/services/HttpService.d.ts +10 -0
  177. package/dist/services/HttpService.js +117 -0
  178. package/dist/services/WebSocketService.d.ts +24 -0
  179. package/dist/services/WebSocketService.js +136 -0
  180. package/dist/services/advancedRequests.d.ts +41 -0
  181. package/dist/services/advancedRequests.js +13 -0
  182. package/dist/services/base.d.ts +19 -0
  183. package/dist/services/base.js +10 -0
  184. package/dist/services/hooks.d.ts +2 -0
  185. package/dist/services/hooks.js +18 -0
  186. package/dist/services/index.d.ts +2 -0
  187. package/dist/services/index.js +18 -0
  188. package/dist/services/sqlRequests.d.ts +45 -0
  189. package/dist/services/sqlRequests.js +11 -0
  190. package/package.json +1 -1
  191. package/src/Icons.tsx +108 -108
  192. package/src/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.ts +93 -93
  193. package/src/components/data/AdvancedRequestDataGrid/helpers/columns.tsx +262 -262
  194. package/src/components/data/AdvancedRequestDataGrid/helpers/index.ts +2 -2
  195. package/src/components/data/AdvancedRequestDataGrid/index.tsx +267 -267
  196. package/src/components/data/AdvancedRequestDataGrid/types.ts +47 -47
  197. package/src/components/data/DataGrid/DataGridCell.tsx +73 -73
  198. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +14 -14
  199. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  200. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +181 -181
  201. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  202. package/src/components/data/DataGrid/DataGridEditableCell.tsx +43 -43
  203. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +120 -120
  204. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +75 -75
  205. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +360 -360
  206. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +96 -96
  207. package/src/components/data/DataGrid/DataGridFooter.tsx +42 -42
  208. package/src/components/data/DataGrid/DataGridHeader.tsx +126 -126
  209. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +132 -132
  210. package/src/components/data/DataGrid/FilterModalContent/index.tsx +136 -136
  211. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  212. package/src/components/data/DataGrid/VirtualScroller.tsx +46 -46
  213. package/src/components/data/DataGrid/helpers/columns.tsx +295 -295
  214. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  215. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  216. package/src/components/data/DataGrid/hooks/index.ts +30 -30
  217. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +306 -306
  218. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +175 -175
  219. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  220. package/src/components/data/DataGrid/index.tsx +140 -140
  221. package/src/components/data/DataGrid/styles.ts +323 -323
  222. package/src/components/data/DataGrid/types.ts +267 -267
  223. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +277 -277
  224. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  225. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  226. package/src/components/data/SqlRequestDataGrid/index.tsx +347 -347
  227. package/src/components/data/SqlRequestDataGrid/types.ts +47 -47
  228. package/src/components/data/index.ts +8 -8
  229. package/src/components/forms/Button.tsx +99 -99
  230. package/src/components/forms/IconButton.tsx +56 -56
  231. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  232. package/src/components/forms/Select.tsx +40 -40
  233. package/src/components/forms/index.ts +5 -5
  234. package/src/components/forms/styles.ts +20 -20
  235. package/src/components/index.ts +3 -3
  236. package/src/components/layout/Dropdown/index.tsx +79 -79
  237. package/src/components/layout/Dropdown/styles.ts +44 -44
  238. package/src/components/layout/Loading/index.tsx +29 -29
  239. package/src/components/layout/Loading/styles.ts +29 -29
  240. package/src/components/layout/Modal/index.tsx +51 -51
  241. package/src/components/layout/Modal/styles.ts +110 -110
  242. package/src/components/layout/index.ts +3 -3
  243. package/src/components/ui/ContextMenu/index.tsx +79 -79
  244. package/src/components/ui/ContextMenu/styles.ts +119 -119
  245. package/src/config/index.ts +14 -14
  246. package/src/helpers/dates.ts +9 -9
  247. package/src/helpers/getScrollbarSize.ts +14 -14
  248. package/src/helpers/numbers.ts +26 -26
  249. package/src/hooks/index.ts +2 -2
  250. package/src/hooks/useElementSize.ts +24 -24
  251. package/src/hooks/useWindowSize.ts +20 -20
  252. package/src/index.ts +7 -7
  253. package/src/providers/AuthenticationProvider/index.tsx +199 -143
  254. package/src/providers/LoadingProvider/index.tsx +47 -47
  255. package/src/providers/PortalsProvider/index.tsx +54 -54
  256. package/src/providers/PortalsProvider/styles.ts +27 -27
  257. package/src/providers/SettingsProvider/index.tsx +70 -70
  258. package/src/providers/ThemeProvider/ThemeProvider.ts +55 -55
  259. package/src/providers/ThemeProvider/defaultTheme.ts +444 -444
  260. package/src/providers/ThemeProvider/index.ts +4 -4
  261. package/src/providers/ThemeProvider/types.ts +123 -123
  262. package/src/providers/UiProviders/index.tsx +65 -65
  263. package/src/providers/UiProviders/styles.ts +10 -10
  264. package/src/providers/hooks.ts +12 -10
  265. package/src/providers/index.ts +6 -6
  266. package/src/services/HttpService.ts +80 -80
  267. package/src/services/WebSocketService.ts +136 -136
  268. package/src/services/advancedRequests.ts +101 -101
  269. package/src/services/base.ts +31 -31
  270. package/src/services/globalSearch.ts +27 -27
  271. package/src/services/hooks.ts +40 -40
  272. package/src/services/index.ts +8 -8
  273. package/src/services/requests/auth.ts +44 -44
  274. package/src/services/sqlRequests.ts +110 -110
  275. package/src/services/types/auth.ts +131 -131
  276. package/src/services/types/base.ts +10 -10
  277. package/src/services/types/users.ts +20 -20
  278. package/src/styles/animations.scss +30 -30
  279. package/src/styles/index.scss +42 -42
  280. package/src/typings.d.ts +6 -6
  281. package/tsconfig.tsbuildinfo +1 -0
@@ -1,136 +1,136 @@
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.onOpen?.();
49
- }
50
- }, 100);
51
- };
52
-
53
- this.socket.onclose = () => {
54
- console.log('[WS] Disconnected');
55
- setTimeout(() => this.connect(), this.status === true ? 500 : 5000);
56
- this.onClose?.();
57
- this.setStatus(false);
58
- };
59
-
60
- this.socket.onmessage = (event) => {
61
- this.onMessage?.(event.data);
62
- this.parseMessage(event.data);
63
- };
64
-
65
- this.socket.onerror = (error) => {
66
- this.onError?.(error);
67
- console.error('[WS] Error:', error);
68
- };
69
- }
70
-
71
- public connect(force = false) {
72
- if (this.status === false || force) {
73
- this.resetConnection();
74
- }
75
- }
76
-
77
- private setStatus(status: boolean | undefined) {
78
- this.status = status;
79
- this.status$.next(status);
80
- }
81
-
82
- private sendQueue() {
83
- if (this.socket && this.status) {
84
- let request: Request | undefined;
85
- while ((request = this.queue.shift())) {
86
- console.log('[WS] Sending queued request:', request);
87
- this.socket?.send(JSON.stringify(request));
88
- }
89
- this.queue.forEach((request) =>
90
- this.socket?.send(JSON.stringify(request))
91
- );
92
- }
93
- }
94
-
95
- public sendRequest<TReq, TRes>(name: string, data: TReq) {
96
- const id = v4();
97
- const promise = new Promise<TRes>((resolve, reject) => {
98
- const request: Request = { id, name, data };
99
- this.promises[id] = { resolve, reject };
100
- if (!this.socket || !this.status) {
101
- this.queue.push(request);
102
- return;
103
- }
104
- console.log('[WS] Sending request:', request);
105
- this.socket?.send(JSON.stringify(request));
106
- });
107
- return promise;
108
- }
109
-
110
- private parseMessage(message: string) {
111
- try {
112
- const response = JSON.parse(message);
113
- if (!response.id) {
114
- throw new Error('Received message is not valid');
115
- }
116
- if (this.promises[response.id]) {
117
- console.log('[WS] Received response:', response);
118
- if (
119
- typeof response.data?.status === 'number' &&
120
- response.data.status < 0
121
- ) {
122
- this.promises[response.id].reject(new Error(response.data.message));
123
- } else {
124
- this.promises[response.id].resolve(response.data);
125
- }
126
- delete this.promises[response.id];
127
- } else {
128
- console.log('[WS] Received request:', response);
129
- // TODO : Implement request handling
130
- throw new Error('Not yet implemented');
131
- }
132
- } catch (error) {
133
- console.error('[WS] Error parsing message:', error);
134
- }
135
- }
136
- }
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.onOpen?.();
49
+ }
50
+ }, 100);
51
+ };
52
+
53
+ this.socket.onclose = () => {
54
+ console.log('[WS] Disconnected');
55
+ setTimeout(() => this.connect(), this.status === true ? 500 : 5000);
56
+ this.onClose?.();
57
+ this.setStatus(false);
58
+ };
59
+
60
+ this.socket.onmessage = (event) => {
61
+ this.onMessage?.(event.data);
62
+ this.parseMessage(event.data);
63
+ };
64
+
65
+ this.socket.onerror = (error) => {
66
+ this.onError?.(error);
67
+ console.error('[WS] Error:', error);
68
+ };
69
+ }
70
+
71
+ public connect(force = false) {
72
+ if (this.status === false || force) {
73
+ this.resetConnection();
74
+ }
75
+ }
76
+
77
+ private setStatus(status: boolean | undefined) {
78
+ this.status = status;
79
+ this.status$.next(status);
80
+ }
81
+
82
+ private sendQueue() {
83
+ if (this.socket && this.status) {
84
+ let request: Request | undefined;
85
+ while ((request = this.queue.shift())) {
86
+ console.log('[WS] Sending queued request:', request);
87
+ this.socket?.send(JSON.stringify(request));
88
+ }
89
+ this.queue.forEach((request) =>
90
+ this.socket?.send(JSON.stringify(request))
91
+ );
92
+ }
93
+ }
94
+
95
+ public sendRequest<TReq, TRes>(name: string, data: TReq) {
96
+ const id = v4();
97
+ const promise = new Promise<TRes>((resolve, reject) => {
98
+ const request: Request = { id, name, data };
99
+ this.promises[id] = { resolve, reject };
100
+ if (!this.socket || !this.status) {
101
+ this.queue.push(request);
102
+ return;
103
+ }
104
+ console.log('[WS] Sending request:', request);
105
+ this.socket?.send(JSON.stringify(request));
106
+ });
107
+ return promise;
108
+ }
109
+
110
+ private parseMessage(message: string) {
111
+ try {
112
+ const response = JSON.parse(message);
113
+ if (!response.id) {
114
+ throw new Error('Received message is not valid');
115
+ }
116
+ if (this.promises[response.id]) {
117
+ console.log('[WS] Received response:', response);
118
+ if (
119
+ typeof response.data?.status === 'number' &&
120
+ response.data.status < 0
121
+ ) {
122
+ this.promises[response.id].reject(new Error(response.data.message));
123
+ } else {
124
+ this.promises[response.id].resolve(response.data);
125
+ }
126
+ delete this.promises[response.id];
127
+ } else {
128
+ console.log('[WS] Received request:', response);
129
+ // TODO : Implement request handling
130
+ throw new Error('Not yet implemented');
131
+ }
132
+ } catch (error) {
133
+ console.error('[WS] Error parsing message:', error);
134
+ }
135
+ }
136
+ }
@@ -1,101 +1,101 @@
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
- | 'inArray'
46
- | 'in'
47
- | 'not'
48
- | 'and'
49
- | 'or';
50
- value?:
51
- | string
52
- | number
53
- | boolean
54
- | null
55
- | (string | number | boolean | null)[];
56
- children?: boolean;
57
- };
58
-
59
- export type OrderByDTO = {
60
- field: string;
61
- direction?: 'ASC' | 'DESC';
62
- };
63
-
64
- export type AdvancedRequestDTO = {
65
- type: string;
66
- fields: FieldDTO[];
67
- conditions: ConditionDTO[];
68
- orderBy?: OrderByDTO[];
69
- start?: number;
70
- length?: number;
71
- getTotal?: boolean;
72
- unique?: boolean;
73
- };
74
-
75
- export type AdvancedRequestRow<R> = {
76
- [K in keyof R]: R[K] extends string | number | null
77
- ? R[K]
78
- : string | number | null;
79
- };
80
-
81
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
- export type AdvancedResponseDTO<T = any> = {
83
- data: AdvancedRequestRow<T>[];
84
- count?: number;
85
- };
86
-
87
- export type AdvancedRequestFieldDTO =
88
- | string
89
- | {
90
- name: string;
91
- fields: AdvancedRequestFieldDTO[];
92
- };
93
-
94
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
- export const useAdvancedRequestHandler = <T = any>() =>
96
- useWebSocketRequestHandler<AdvancedRequestDTO, AdvancedResponseDTO<T>>(
97
- 'AdvancedRequest'
98
- );
99
-
100
- export const useRawAdvancedRequestHandler = () =>
101
- 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
+ | 'inArray'
46
+ | 'in'
47
+ | 'not'
48
+ | 'and'
49
+ | 'or';
50
+ value?:
51
+ | string
52
+ | number
53
+ | boolean
54
+ | null
55
+ | (string | number | boolean | null)[];
56
+ children?: boolean;
57
+ };
58
+
59
+ export type OrderByDTO = {
60
+ field: string;
61
+ direction?: 'ASC' | 'DESC';
62
+ };
63
+
64
+ export type AdvancedRequestDTO = {
65
+ type: string;
66
+ fields: FieldDTO[];
67
+ conditions: ConditionDTO[];
68
+ orderBy?: OrderByDTO[];
69
+ start?: number;
70
+ length?: number;
71
+ getTotal?: boolean;
72
+ unique?: boolean;
73
+ };
74
+
75
+ export type AdvancedRequestRow<R> = {
76
+ [K in keyof R]: R[K] extends string | number | null
77
+ ? R[K]
78
+ : string | number | null;
79
+ };
80
+
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ export type AdvancedResponseDTO<T = any> = {
83
+ data: AdvancedRequestRow<T>[];
84
+ count?: number;
85
+ };
86
+
87
+ export type AdvancedRequestFieldDTO =
88
+ | string
89
+ | {
90
+ name: string;
91
+ fields: AdvancedRequestFieldDTO[];
92
+ };
93
+
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
+ export const useAdvancedRequestHandler = <T = any>() =>
96
+ useWebSocketRequestHandler<AdvancedRequestDTO, AdvancedResponseDTO<T>>(
97
+ 'AdvancedRequest'
98
+ );
99
+
100
+ export const useRawAdvancedRequestHandler = () =>
101
+ useWebSocketRequestHandler<AdvancedRequestDTO, string>('RawAdvancedRequest');
@@ -1,31 +1,31 @@
1
- export type BaseModelDTO = {
2
- id: string;
3
- dateAdd: string;
4
- dateUpd: string;
5
- dateDel: string | null;
6
- };
7
-
8
- export const emptyBaseModel: BaseModelDTO = {
9
- id: '',
10
- dateAdd: new Date().toISOString(),
11
- dateUpd: new Date().toISOString(),
12
- dateDel: null,
13
- };
14
-
15
- export type ArchivableModelDTO = BaseModelDTO & {
16
- archived: boolean | null;
17
- };
18
-
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- export type Request<T = any> = {
21
- id: string;
22
- name: string;
23
- data: T;
24
- };
25
-
26
- export const UUID_REGEX =
27
- /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
28
-
29
- export type GetObjectRequestDTO = {
30
- id: string;
31
- };
1
+ export type BaseModelDTO = {
2
+ id: string;
3
+ dateAdd: string;
4
+ dateUpd: string;
5
+ dateDel: string | null;
6
+ };
7
+
8
+ export const emptyBaseModel: BaseModelDTO = {
9
+ id: '',
10
+ dateAdd: new Date().toISOString(),
11
+ dateUpd: new Date().toISOString(),
12
+ dateDel: null,
13
+ };
14
+
15
+ export type ArchivableModelDTO = BaseModelDTO & {
16
+ archived: boolean | null;
17
+ };
18
+
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ export type Request<T = any> = {
21
+ id: string;
22
+ name: string;
23
+ data: T;
24
+ };
25
+
26
+ export const UUID_REGEX =
27
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
28
+
29
+ export type GetObjectRequestDTO = {
30
+ id: string;
31
+ };
@@ -1,27 +1,27 @@
1
- import { SqlRequestRow } from './sqlRequests';
2
- import { useWebSocketRequestHandler } from './hooks';
3
-
4
- export type GlobalSearchRequestDTO = {
5
- types: string[];
6
- searchTerm: string;
7
- limit?: number;
8
- };
9
-
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- export type GlobalSearchResponseDTO<T = any> = {
12
- data: Record<string, SqlRequestRow<T>[]>;
13
- count?: number;
14
- };
15
-
16
- type GlobalSearchRequestHandler<T> = (
17
- request: GlobalSearchRequestDTO
18
- ) => Promise<GlobalSearchResponseDTO<T>>;
19
-
20
- export const useGlobalSearchRequestHandler = <
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
- T = any
23
- >(): GlobalSearchRequestHandler<T> =>
24
- useWebSocketRequestHandler<
25
- GlobalSearchRequestDTO,
26
- GlobalSearchResponseDTO<T>
27
- >('GlobalSearch');
1
+ import { SqlRequestRow } from './sqlRequests';
2
+ import { useWebSocketRequestHandler } from './hooks';
3
+
4
+ export type GlobalSearchRequestDTO = {
5
+ types: string[];
6
+ searchTerm: string;
7
+ limit?: number;
8
+ };
9
+
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ export type GlobalSearchResponseDTO<T = any> = {
12
+ data: Record<string, SqlRequestRow<T>[]>;
13
+ count?: number;
14
+ };
15
+
16
+ type GlobalSearchRequestHandler<T> = (
17
+ request: GlobalSearchRequestDTO
18
+ ) => Promise<GlobalSearchResponseDTO<T>>;
19
+
20
+ export const useGlobalSearchRequestHandler = <
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ T = any
23
+ >(): GlobalSearchRequestHandler<T> =>
24
+ useWebSocketRequestHandler<
25
+ GlobalSearchRequestDTO,
26
+ GlobalSearchResponseDTO<T>
27
+ >('GlobalSearch');
@@ -1,40 +1,40 @@
1
- import { HttpService } from './HttpService';
2
- import { WebSocketService } from './WebSocketService';
3
- import { useCallback } from 'react';
4
- import { useLoading } from '../providers';
5
-
6
- export const useLoadingRequestHandler = <TReq, TRes>(
7
- name: string
8
- ): ((data: TReq) => Promise<TRes>) => {
9
- const { startLoading, stopLoading } = useLoading();
10
-
11
- return useCallback(
12
- (data: TReq) => {
13
- startLoading();
14
- return WebSocketService.getInstance()
15
- .sendRequest<TReq, TRes>(name, data)
16
- .finally(stopLoading);
17
- },
18
- [name, startLoading, stopLoading]
19
- );
20
- };
21
-
22
- export const useWebSocketRequestHandler = <TReq, TRes>(
23
- name: string
24
- ): ((data: TReq) => Promise<TRes>) =>
25
- useCallback(
26
- (data: TReq) => {
27
- return WebSocketService.getInstance().sendRequest<TReq, TRes>(name, data);
28
- },
29
- [name]
30
- );
31
-
32
- export const useHttpRequestHandler = <TReq, TRes>(
33
- name: string
34
- ): ((data: TReq) => Promise<TRes>) =>
35
- useCallback(
36
- (data: TReq) => {
37
- return HttpService.getInstance().sendRequest<TReq, TRes>(name, data);
38
- },
39
- [name]
40
- );
1
+ import { HttpService } from './HttpService';
2
+ import { WebSocketService } from './WebSocketService';
3
+ import { useCallback } from 'react';
4
+ import { useLoading } from '../providers';
5
+
6
+ export const useLoadingRequestHandler = <TReq, TRes>(
7
+ name: string
8
+ ): ((data: TReq) => Promise<TRes>) => {
9
+ const { startLoading, stopLoading } = useLoading();
10
+
11
+ return useCallback(
12
+ (data: TReq) => {
13
+ startLoading();
14
+ return WebSocketService.getInstance()
15
+ .sendRequest<TReq, TRes>(name, data)
16
+ .finally(stopLoading);
17
+ },
18
+ [name, startLoading, stopLoading]
19
+ );
20
+ };
21
+
22
+ export const useWebSocketRequestHandler = <TReq, TRes>(
23
+ name: string
24
+ ): ((data: TReq) => Promise<TRes>) =>
25
+ useCallback(
26
+ (data: TReq) => {
27
+ return WebSocketService.getInstance().sendRequest<TReq, TRes>(name, data);
28
+ },
29
+ [name]
30
+ );
31
+
32
+ export const useHttpRequestHandler = <TReq, TRes>(
33
+ name: string
34
+ ): ((data: TReq) => Promise<TRes>) =>
35
+ useCallback(
36
+ (data: TReq) => {
37
+ return HttpService.getInstance().sendRequest<TReq, TRes>(name, data);
38
+ },
39
+ [name]
40
+ );