@addev-be/ui 0.2.18 → 0.3.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 (177) hide show
  1. package/package.json +2 -1
  2. package/src/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.ts +1 -1
  3. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +1 -1
  4. package/src/providers/AuthenticationProvider/index.tsx +143 -0
  5. package/src/providers/LoadingProvider/index.tsx +47 -0
  6. package/src/providers/hooks.ts +3 -1
  7. package/src/providers/index.ts +2 -1
  8. package/src/services/WebSocketService.ts +6 -17
  9. package/src/services/hooks.ts +17 -0
  10. package/src/services/index.ts +6 -0
  11. package/src/services/requests/auth.ts +44 -0
  12. package/src/services/types/auth.ts +131 -0
  13. package/src/services/types/base.ts +10 -0
  14. package/src/services/types/users.ts +20 -0
  15. package/dist/Icons.d.ts +0 -45
  16. package/dist/Icons.js +0 -120
  17. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.d.ts +0 -14
  18. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +0 -76
  19. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.d.ts +0 -22
  20. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +0 -156
  21. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.d.ts +0 -2
  22. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.js +0 -18
  23. package/dist/components/data/AdvancedRequestDataGrid/index.d.ts +0 -2
  24. package/dist/components/data/AdvancedRequestDataGrid/index.js +0 -215
  25. package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +0 -21
  26. package/dist/components/data/AdvancedRequestDataGrid/types.js +0 -2
  27. package/dist/components/data/DataGrid/DataGridCell.d.ts +0 -2
  28. package/dist/components/data/DataGrid/DataGridCell.js +0 -59
  29. package/dist/components/data/DataGrid/DataGridColumnsModal/helpers.d.ts +0 -2
  30. package/dist/components/data/DataGrid/DataGridColumnsModal/helpers.js +0 -24
  31. package/dist/components/data/DataGrid/DataGridColumnsModal/hooks.d.ts +0 -6
  32. package/dist/components/data/DataGrid/DataGridColumnsModal/hooks.js +0 -38
  33. package/dist/components/data/DataGrid/DataGridColumnsModal/index.d.ts +0 -15
  34. package/dist/components/data/DataGrid/DataGridColumnsModal/index.js +0 -111
  35. package/dist/components/data/DataGrid/DataGridColumnsModal/styles.d.ts +0 -22
  36. package/dist/components/data/DataGrid/DataGridColumnsModal/styles.js +0 -54
  37. package/dist/components/data/DataGrid/DataGridEditableCell.d.ts +0 -2
  38. package/dist/components/data/DataGrid/DataGridEditableCell.js +0 -27
  39. package/dist/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.d.ts +0 -13
  40. package/dist/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.js +0 -71
  41. package/dist/components/data/DataGrid/DataGridFilterMenu/hooks.d.ts +0 -9
  42. package/dist/components/data/DataGrid/DataGridFilterMenu/hooks.js +0 -52
  43. package/dist/components/data/DataGrid/DataGridFilterMenu/index.d.ts +0 -9
  44. package/dist/components/data/DataGrid/DataGridFilterMenu/index.js +0 -221
  45. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.d.ts +0 -18
  46. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.js +0 -31
  47. package/dist/components/data/DataGrid/DataGridFooter.d.ts +0 -4
  48. package/dist/components/data/DataGrid/DataGridFooter.js +0 -44
  49. package/dist/components/data/DataGrid/DataGridHeader.d.ts +0 -4
  50. package/dist/components/data/DataGrid/DataGridHeader.js +0 -119
  51. package/dist/components/data/DataGrid/DataGridHeaderCell.d.ts +0 -2
  52. package/dist/components/data/DataGrid/DataGridHeaderCell.js +0 -84
  53. package/dist/components/data/DataGrid/FilterModalContent/index.d.ts +0 -7
  54. package/dist/components/data/DataGrid/FilterModalContent/index.js +0 -117
  55. package/dist/components/data/DataGrid/FilterModalContent/styles.d.ts +0 -3
  56. package/dist/components/data/DataGrid/FilterModalContent/styles.js +0 -15
  57. package/dist/components/data/DataGrid/VirtualScroller.d.ts +0 -11
  58. package/dist/components/data/DataGrid/VirtualScroller.js +0 -41
  59. package/dist/components/data/DataGrid/helpers/columns.d.ts +0 -13
  60. package/dist/components/data/DataGrid/helpers/columns.js +0 -169
  61. package/dist/components/data/DataGrid/helpers/filters.d.ts +0 -18
  62. package/dist/components/data/DataGrid/helpers/filters.js +0 -334
  63. package/dist/components/data/DataGrid/helpers/index.d.ts +0 -2
  64. package/dist/components/data/DataGrid/helpers/index.js +0 -18
  65. package/dist/components/data/DataGrid/hooks/index.d.ts +0 -7
  66. package/dist/components/data/DataGrid/hooks/index.js +0 -34
  67. package/dist/components/data/DataGrid/hooks/useDataGrid.d.ts +0 -2
  68. package/dist/components/data/DataGrid/hooks/useDataGrid.js +0 -252
  69. package/dist/components/data/DataGrid/hooks/useDataGridCopy.d.ts +0 -4
  70. package/dist/components/data/DataGrid/hooks/useDataGridCopy.js +0 -163
  71. package/dist/components/data/DataGrid/hooks/useDataGridSettings.d.ts +0 -16
  72. package/dist/components/data/DataGrid/hooks/useDataGridSettings.js +0 -43
  73. package/dist/components/data/DataGrid/index.d.ts +0 -4
  74. package/dist/components/data/DataGrid/index.js +0 -108
  75. package/dist/components/data/DataGrid/styles.d.ts +0 -60
  76. package/dist/components/data/DataGrid/styles.js +0 -128
  77. package/dist/components/data/DataGrid/types.d.ts +0 -165
  78. package/dist/components/data/DataGrid/types.js +0 -34
  79. package/dist/components/data/SqlRequestDataGrid/helpers/columns.d.ts +0 -16
  80. package/dist/components/data/SqlRequestDataGrid/helpers/columns.js +0 -125
  81. package/dist/components/data/SqlRequestDataGrid/helpers/index.d.ts +0 -2
  82. package/dist/components/data/SqlRequestDataGrid/helpers/index.js +0 -18
  83. package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.d.ts +0 -3
  84. package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.js +0 -18
  85. package/dist/components/data/SqlRequestDataGrid/index.d.ts +0 -2
  86. package/dist/components/data/SqlRequestDataGrid/index.js +0 -296
  87. package/dist/components/data/SqlRequestDataGrid/types.d.ts +0 -21
  88. package/dist/components/data/SqlRequestDataGrid/types.js +0 -2
  89. package/dist/components/data/index.d.ts +0 -8
  90. package/dist/components/data/index.js +0 -24
  91. package/dist/components/forms/Button.d.ts +0 -10
  92. package/dist/components/forms/Button.js +0 -70
  93. package/dist/components/forms/IconButton.d.ts +0 -7
  94. package/dist/components/forms/IconButton.js +0 -64
  95. package/dist/components/forms/IndeterminateCheckbox.d.ts +0 -8
  96. package/dist/components/forms/IndeterminateCheckbox.js +0 -41
  97. package/dist/components/forms/Select.d.ts +0 -10
  98. package/dist/components/forms/Select.js +0 -49
  99. package/dist/components/forms/index.d.ts +0 -5
  100. package/dist/components/forms/index.js +0 -23
  101. package/dist/components/forms/styles.d.ts +0 -2
  102. package/dist/components/forms/styles.js +0 -34
  103. package/dist/components/index.d.ts +0 -3
  104. package/dist/components/index.js +0 -19
  105. package/dist/components/layout/Dropdown/index.d.ts +0 -11
  106. package/dist/components/layout/Dropdown/index.js +0 -85
  107. package/dist/components/layout/Dropdown/styles.d.ts +0 -11
  108. package/dist/components/layout/Dropdown/styles.js +0 -45
  109. package/dist/components/layout/Loading/index.d.ts +0 -6
  110. package/dist/components/layout/Loading/index.js +0 -42
  111. package/dist/components/layout/Loading/styles.d.ts +0 -6
  112. package/dist/components/layout/Loading/styles.js +0 -18
  113. package/dist/components/layout/Modal/index.d.ts +0 -16
  114. package/dist/components/layout/Modal/index.js +0 -67
  115. package/dist/components/layout/Modal/styles.d.ts +0 -32
  116. package/dist/components/layout/Modal/styles.js +0 -52
  117. package/dist/components/layout/index.d.ts +0 -3
  118. package/dist/components/layout/index.js +0 -19
  119. package/dist/components/ui/ContextMenu/index.d.ts +0 -11
  120. package/dist/components/ui/ContextMenu/index.js +0 -63
  121. package/dist/components/ui/ContextMenu/styles.d.ts +0 -18
  122. package/dist/components/ui/ContextMenu/styles.js +0 -56
  123. package/dist/config/index.d.ts +0 -10
  124. package/dist/config/index.js +0 -2
  125. package/dist/helpers/dates.d.ts +0 -2
  126. package/dist/helpers/dates.js +0 -13
  127. package/dist/helpers/getScrollbarSize.d.ts +0 -1
  128. package/dist/helpers/getScrollbarSize.js +0 -17
  129. package/dist/helpers/numbers.d.ts +0 -4
  130. package/dist/helpers/numbers.js +0 -39
  131. package/dist/hooks/index.d.ts +0 -2
  132. package/dist/hooks/index.js +0 -18
  133. package/dist/hooks/useElementSize.d.ts +0 -4
  134. package/dist/hooks/useElementSize.js +0 -23
  135. package/dist/hooks/useWindowSize.d.ts +0 -4
  136. package/dist/hooks/useWindowSize.js +0 -19
  137. package/dist/index.d.ts +0 -5
  138. package/dist/index.js +0 -21
  139. package/dist/providers/PortalsProvider/index.d.ts +0 -10
  140. package/dist/providers/PortalsProvider/index.js +0 -46
  141. package/dist/providers/PortalsProvider/styles.d.ts +0 -9
  142. package/dist/providers/PortalsProvider/styles.js +0 -21
  143. package/dist/providers/SettingsProvider/index.d.ts +0 -8
  144. package/dist/providers/SettingsProvider/index.js +0 -54
  145. package/dist/providers/ThemeProvider/ThemeProvider.d.ts +0 -7
  146. package/dist/providers/ThemeProvider/ThemeProvider.js +0 -51
  147. package/dist/providers/ThemeProvider/defaultTheme.d.ts +0 -2
  148. package/dist/providers/ThemeProvider/defaultTheme.js +0 -417
  149. package/dist/providers/ThemeProvider/index.d.ts +0 -2
  150. package/dist/providers/ThemeProvider/index.js +0 -5
  151. package/dist/providers/ThemeProvider/types.d.ts +0 -24
  152. package/dist/providers/ThemeProvider/types.js +0 -2
  153. package/dist/providers/UiProviders/index.d.ts +0 -12
  154. package/dist/providers/UiProviders/index.js +0 -62
  155. package/dist/providers/UiProviders/styles.d.ts +0 -3
  156. package/dist/providers/UiProviders/styles.js +0 -13
  157. package/dist/providers/hooks.d.ts +0 -3
  158. package/dist/providers/hooks.js +0 -13
  159. package/dist/providers/index.d.ts +0 -4
  160. package/dist/providers/index.js +0 -20
  161. package/dist/services/HttpService.d.ts +0 -10
  162. package/dist/services/HttpService.js +0 -117
  163. package/dist/services/WebSocketService.d.ts +0 -24
  164. package/dist/services/WebSocketService.js +0 -136
  165. package/dist/services/advancedRequests.d.ts +0 -41
  166. package/dist/services/advancedRequests.js +0 -13
  167. package/dist/services/base.d.ts +0 -19
  168. package/dist/services/base.js +0 -10
  169. package/dist/services/globalSearch.d.ts +0 -13
  170. package/dist/services/globalSearch.js +0 -8
  171. package/dist/services/hooks.d.ts +0 -2
  172. package/dist/services/hooks.js +0 -18
  173. package/dist/services/index.d.ts +0 -2
  174. package/dist/services/index.js +0 -18
  175. package/dist/services/sqlRequests.d.ts +0 -45
  176. package/dist/services/sqlRequests.js +0 -11
  177. package/tsconfig.tsbuildinfo +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@addev-be/ui",
3
- "version": "0.2.18",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "watch": "tsc -b --watch",
@@ -45,6 +45,7 @@
45
45
  "io-ts": "^2.2.21",
46
46
  "lodash": "^4.17.21",
47
47
  "moment": "^2.30.1",
48
+ "rxjs": "^7.8.1",
48
49
  "uuid": "^10.0.0"
49
50
  }
50
51
  }
@@ -65,7 +65,7 @@ export const convertFiltersToConditions = <R>(
65
65
  columns[columnKey].field?.fieldAlias ??
66
66
  columns[columnKey].field?.fieldName ??
67
67
  columnKey,
68
- operator: filter.operator,
68
+ operator: filter.operator as any,
69
69
  value: ['inArray', 'inRange'].includes(filter.operator)
70
70
  ? filter.values
71
71
  : _.castArray<string | number | null>(filter.values)[0],
@@ -9,7 +9,7 @@ export const convertSqlFiltersToConditions = (
9
9
  ): Record<string, ConditionDTO> =>
10
10
  _.mapValues(filters, (filter, columnKey) => ({
11
11
  field: columnKey,
12
- operator: filter.operator,
12
+ operator: filter.operator as any,
13
13
  value: ['inArray', 'inRange'].includes(filter.operator)
14
14
  ? filter.values
15
15
  : _.castArray<string | number | null>(filter.values)[0],
@@ -0,0 +1,143 @@
1
+ import {
2
+ FC,
3
+ PropsWithChildren,
4
+ createContext,
5
+ useCallback,
6
+ useEffect,
7
+ useMemo,
8
+ useState,
9
+ } from 'react';
10
+ import {
11
+ UserDTO,
12
+ WebSocketService,
13
+ useAuthenticateRequestHandler,
14
+ useLoginRequestHandler,
15
+ useLogoutRequestHandler,
16
+ } from '../../services';
17
+
18
+ export type AuthenticationContextProps = {
19
+ token?: string;
20
+ user?: UserDTO;
21
+ authenticate: () => void;
22
+ login: (username: string, password: string) => void;
23
+ logout: () => void;
24
+ };
25
+
26
+ export const AuthenticationContext = createContext<AuthenticationContextProps>({
27
+ authenticate: () => {},
28
+ login: () => {},
29
+ logout: () => {},
30
+ });
31
+
32
+ export type AuthenticationProviderProps = PropsWithChildren<{
33
+ loginComponent?: FC;
34
+ }>;
35
+
36
+ export const AuthenticationProvider: FC<AuthenticationProviderProps> = ({
37
+ loginComponent: LoginComponent,
38
+ children,
39
+ }) => {
40
+ const [, setWebSocketStatus] = useState<boolean | undefined>(false);
41
+ const [token, setToken] = useState<string | undefined>(
42
+ sessionStorage.getItem('authToken') || undefined
43
+ );
44
+ const [user, setUser] = useState<UserDTO | undefined>(undefined);
45
+
46
+ const sendAuthenticateRequest = useAuthenticateRequestHandler();
47
+ const sendLoginRequest = useLoginRequestHandler();
48
+ const sendLogoutRequest = useLogoutRequestHandler();
49
+
50
+ useEffect(() => {
51
+ if (token) {
52
+ sessionStorage.setItem('authToken', token);
53
+ } else {
54
+ sessionStorage.removeItem('authToken');
55
+ }
56
+ }, [token]);
57
+
58
+ const authenticate = useCallback(() => {
59
+ if (token && !user) {
60
+ sendAuthenticateRequest({ token }).then(
61
+ (response) => {
62
+ if (response.status === 0 && response.user) {
63
+ setUser(response.user);
64
+ } else if (response.status > 0) {
65
+ setToken(undefined);
66
+ setUser(undefined);
67
+ }
68
+ },
69
+ () => {
70
+ setToken(undefined);
71
+ setUser(undefined);
72
+ }
73
+ );
74
+ }
75
+ }, [sendAuthenticateRequest, token, user]);
76
+
77
+ const login = useCallback(
78
+ (username: string, password: string) => {
79
+ sendLoginRequest({ username, password }).then(
80
+ (response) => {
81
+ if (response.status === 0 && response.user) {
82
+ setToken(response.token);
83
+ setUser(response.user);
84
+ } else if (response.status > 0) {
85
+ setToken(undefined);
86
+ setUser(undefined);
87
+ }
88
+ },
89
+ () => {
90
+ setToken(undefined);
91
+ setUser(undefined);
92
+ }
93
+ );
94
+ },
95
+ [sendLoginRequest]
96
+ );
97
+
98
+ const logout = useCallback(() => {
99
+ sendLogoutRequest({}).finally(() => {
100
+ setToken(undefined);
101
+ setUser(undefined);
102
+ });
103
+ }, [sendLogoutRequest]);
104
+
105
+ const contextValue = useMemo(
106
+ () => ({
107
+ token,
108
+ user,
109
+ authenticate,
110
+ login,
111
+ logout,
112
+ }),
113
+ [authenticate, login, logout, token, user]
114
+ );
115
+
116
+ useEffect(() => {
117
+ const subscription = WebSocketService.getInstance()?.status$.subscribe(
118
+ (newStatus) => {
119
+ setWebSocketStatus((previousStatus) => {
120
+ if (!previousStatus && newStatus) {
121
+ authenticate();
122
+ }
123
+ return newStatus;
124
+ });
125
+ }
126
+ );
127
+ return () => subscription?.unsubscribe();
128
+ }, [authenticate]);
129
+
130
+ return (
131
+ <AuthenticationContext.Provider value={contextValue}>
132
+ {!user ? (
133
+ LoginComponent ? (
134
+ <LoginComponent />
135
+ ) : (
136
+ <div>Not authenticated</div>
137
+ )
138
+ ) : (
139
+ children
140
+ )}
141
+ </AuthenticationContext.Provider>
142
+ );
143
+ };
@@ -0,0 +1,47 @@
1
+ import {
2
+ FC,
3
+ PropsWithChildren,
4
+ createContext,
5
+ useCallback,
6
+ useMemo,
7
+ useState,
8
+ } from 'react';
9
+
10
+ import { Loading } from '../../components';
11
+
12
+ export type LoadingContextType = {
13
+ startLoading: () => void;
14
+ stopLoading: () => void;
15
+ };
16
+
17
+ export const LoadingContext = createContext<LoadingContextType>({
18
+ startLoading: () => {},
19
+ stopLoading: () => {},
20
+ });
21
+
22
+ export const LoadingProvider: FC<PropsWithChildren> = ({ children }) => {
23
+ const [loadingCount, setLoadingCount] = useState(0);
24
+
25
+ const startLoading = useCallback(() => {
26
+ setLoadingCount((count) => count + 1);
27
+ }, []);
28
+
29
+ const stopLoading = useCallback(() => {
30
+ setLoadingCount((count) => count - 1);
31
+ }, []);
32
+
33
+ const value = useMemo(
34
+ () => ({
35
+ startLoading,
36
+ stopLoading,
37
+ }),
38
+ [startLoading, stopLoading]
39
+ );
40
+
41
+ return (
42
+ <LoadingContext.Provider value={value}>
43
+ <Loading visible={loadingCount > 0}>Chargement ...</Loading>
44
+ {children}
45
+ </LoadingContext.Provider>
46
+ );
47
+ };
@@ -1,8 +1,10 @@
1
+ import { LoadingContext } from './LoadingProvider';
1
2
  import { PortalsContext } from './PortalsProvider';
2
3
  import { SettingsContext } from './SettingsProvider';
3
4
  import { UiContext } from './UiProviders';
4
5
  import { useContext } from 'react';
5
6
 
7
+ export const useLoading = () => useContext(LoadingContext);
6
8
  export const usePortals = () => useContext(PortalsContext);
7
- export const useUi = () => useContext(UiContext);
8
9
  export const useSettings = () => useContext(SettingsContext);
10
+ export const useUi = () => useContext(UiContext);
@@ -1,5 +1,6 @@
1
- export * from './UiProviders';
1
+ export * from './AuthenticationProvider';
2
2
  export * from './PortalsProvider';
3
3
  export * from './ThemeProvider';
4
+ export * from './UiProviders';
4
5
 
5
6
  export * from './hooks';
@@ -1,13 +1,16 @@
1
1
  import { Config } from '../config';
2
2
  import { Request } from './base';
3
+ import { Subject } from 'rxjs';
3
4
  import { v4 } from 'uuid';
4
5
 
5
6
  export class WebSocketService {
6
7
  private static instance: WebSocketService;
7
8
  private config: Config;
8
9
  private socket: WebSocket | null = null;
9
- public status: boolean | undefined = false;
10
- private listeners: ((status: boolean | undefined) => void)[] = [];
10
+
11
+ public status: boolean | undefined = undefined;
12
+ public status$ = new Subject<boolean | undefined>();
13
+
11
14
  private queue: Request[] = [];
12
15
  private promises: {
13
16
  [id: string]: {
@@ -71,23 +74,9 @@ export class WebSocketService {
71
74
  }
72
75
  }
73
76
 
74
- public subscribe(listener: (status: boolean | undefined) => void) {
75
- this.listeners.push(listener);
76
- listener(this.status);
77
- return () => this.listeners.splice(this.listeners.indexOf(listener), 1);
78
- }
79
-
80
- public unsubscribe(listener: (status: boolean | undefined) => void) {
81
- this.listeners.splice(this.listeners.indexOf(listener), 1);
82
- }
83
-
84
77
  private setStatus(status: boolean | undefined) {
85
- const previousStatus = this.status;
86
78
  this.status = status;
87
- this.listeners.forEach((listener) => listener(status));
88
- if (this.socket && !previousStatus && status) {
89
- this.sendQueue();
90
- }
79
+ this.status$.next(status);
91
80
  }
92
81
 
93
82
  private sendQueue() {
@@ -1,6 +1,23 @@
1
1
  import { HttpService } from './HttpService';
2
2
  import { WebSocketService } from './WebSocketService';
3
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
+ };
4
21
 
5
22
  export const useWebSocketRequestHandler = <TReq, TRes>(
6
23
  name: string
@@ -1,2 +1,8 @@
1
1
  export * from './WebSocketService';
2
2
  export * from './hooks';
3
+
4
+ export * from './requests/auth';
5
+
6
+ export * from './types/auth';
7
+ export * from './types/base';
8
+ export * from './types/users';
@@ -0,0 +1,44 @@
1
+ import {
2
+ AuthenticateRequestDTO,
3
+ AuthenticateResponseDTO,
4
+ CheckRecoveryKeyRequestDTO,
5
+ CheckRecoveryKeyResponseDTO,
6
+ LoginRequestDTO,
7
+ LoginResponseDTO,
8
+ LogoutRequestDTO,
9
+ LogoutResponseDTO,
10
+ ResetPasswordRequestDTO,
11
+ ResetPasswordResponseDTO,
12
+ SendRecoveryKeyRequestDTO,
13
+ SendRecoveryKeyResponseDTO,
14
+ } from '../types/auth';
15
+
16
+ import { useLoadingRequestHandler } from '../hooks';
17
+
18
+ export const useAuthenticateRequestHandler = () =>
19
+ useLoadingRequestHandler<AuthenticateRequestDTO, AuthenticateResponseDTO>(
20
+ 'Authenticate'
21
+ );
22
+
23
+ export const useLoginRequestHandler = () =>
24
+ useLoadingRequestHandler<LoginRequestDTO, LoginResponseDTO>('Login');
25
+
26
+ export const useLogoutRequestHandler = () =>
27
+ useLoadingRequestHandler<LogoutRequestDTO, LogoutResponseDTO>('Logout');
28
+
29
+ export const useSendRecoveryKeyRequestHandler = () =>
30
+ useLoadingRequestHandler<
31
+ SendRecoveryKeyRequestDTO,
32
+ SendRecoveryKeyResponseDTO
33
+ >('SendRecoveryKey');
34
+
35
+ export const useCheckRecoveryKeyRequestHandler = () =>
36
+ useLoadingRequestHandler<
37
+ CheckRecoveryKeyRequestDTO,
38
+ CheckRecoveryKeyResponseDTO
39
+ >('CheckRecoveryKey');
40
+
41
+ export const useResetPasswordRequestHandler = () =>
42
+ useLoadingRequestHandler<ResetPasswordRequestDTO, ResetPasswordResponseDTO>(
43
+ 'ResetPassword'
44
+ );
@@ -0,0 +1,131 @@
1
+ import * as t from 'io-ts';
2
+
3
+ import { userDtoCodec } from './users';
4
+
5
+ export const loginRequestDtoCodec = t.type(
6
+ {
7
+ username: t.string,
8
+ password: t.string,
9
+ },
10
+ 'LoginRequestDTO'
11
+ );
12
+
13
+ export const loginResponseDtoCodec = t.type(
14
+ {
15
+ status: t.number,
16
+ token: t.string,
17
+ user: t.union([userDtoCodec, t.null]),
18
+ },
19
+ 'LoginResponseDTO'
20
+ );
21
+
22
+ export type LoginRequestDTO = t.TypeOf<typeof loginRequestDtoCodec>;
23
+ export type LoginResponseDTO = t.TypeOf<typeof loginResponseDtoCodec>;
24
+
25
+ /*****/
26
+
27
+ export const logoutRequestDtoCodec = t.type({}, 'LogoutRequestDTO');
28
+
29
+ export const logoutResponseDtoCodec = t.type(
30
+ {
31
+ status: t.number,
32
+ },
33
+ 'LogoutResponseDTO'
34
+ );
35
+
36
+ export type LogoutRequestDTO = t.TypeOf<typeof logoutRequestDtoCodec>;
37
+ export type LogoutResponseDTO = t.TypeOf<typeof logoutResponseDtoCodec>;
38
+
39
+ /*****/
40
+
41
+ export const authenticateRequestDtoCodec = t.type(
42
+ {
43
+ token: t.string,
44
+ },
45
+ 'AuthenticateRequestDTO'
46
+ );
47
+
48
+ export const authenticateResponseDtoCodec = t.type(
49
+ {
50
+ status: t.number,
51
+ user: t.union([userDtoCodec, t.null]),
52
+ },
53
+ 'AuthenticateResponseDTO'
54
+ );
55
+
56
+ export type AuthenticateRequestDTO = t.TypeOf<
57
+ typeof authenticateRequestDtoCodec
58
+ >;
59
+ export type AuthenticateResponseDTO = t.TypeOf<
60
+ typeof authenticateResponseDtoCodec
61
+ >;
62
+
63
+ /*****/
64
+
65
+ export const sendRecoveryKeyRequestDtoCodec = t.type(
66
+ {
67
+ email: t.string,
68
+ },
69
+ 'SendRecoveryKeyRequestDTO'
70
+ );
71
+
72
+ export const sendRecoveryKeyResponseDtoCodec = t.type(
73
+ {
74
+ status: t.number,
75
+ },
76
+ 'SendRecoveryKeyResponseDTO'
77
+ );
78
+
79
+ export type SendRecoveryKeyRequestDTO = t.TypeOf<
80
+ typeof sendRecoveryKeyRequestDtoCodec
81
+ >;
82
+ export type SendRecoveryKeyResponseDTO = t.TypeOf<
83
+ typeof sendRecoveryKeyResponseDtoCodec
84
+ >;
85
+
86
+ /*****/
87
+
88
+ export const checkRecoveryKeyRequestDtoCodec = t.type(
89
+ {
90
+ key: t.string,
91
+ },
92
+ 'CheckRecoveryKeyRequestDTO'
93
+ );
94
+
95
+ export const checkRecoveryKeyResponseDtoCodec = t.type(
96
+ {
97
+ status: t.number,
98
+ },
99
+ 'CheckRecoveryKeyResponseDTO'
100
+ );
101
+
102
+ export type CheckRecoveryKeyRequestDTO = t.TypeOf<
103
+ typeof checkRecoveryKeyRequestDtoCodec
104
+ >;
105
+ export type CheckRecoveryKeyResponseDTO = t.TypeOf<
106
+ typeof checkRecoveryKeyResponseDtoCodec
107
+ >;
108
+
109
+ /*****/
110
+
111
+ export const resetPasswordRequestDtoCodec = t.type(
112
+ {
113
+ key: t.string,
114
+ password: t.string,
115
+ },
116
+ 'ResetPasswordRequestDTO'
117
+ );
118
+
119
+ export const resetPasswordResponseDtoCodec = t.type(
120
+ {
121
+ status: t.number,
122
+ },
123
+ 'ResetPasswordResponseDTO'
124
+ );
125
+
126
+ export type ResetPasswordRequestDTO = t.TypeOf<
127
+ typeof resetPasswordRequestDtoCodec
128
+ >;
129
+ export type ResetPasswordResponseDTO = t.TypeOf<
130
+ typeof resetPasswordResponseDtoCodec
131
+ >;
@@ -0,0 +1,10 @@
1
+ import * as t from 'io-ts';
2
+
3
+ export const baseModelDtoCodec = t.type({
4
+ id: t.union([t.string, t.null]),
5
+ });
6
+
7
+ export type BaseModelDTO = t.TypeOf<typeof baseModelDtoCodec>;
8
+
9
+ export const UUID_REGEX =
10
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
@@ -0,0 +1,20 @@
1
+ import * as t from 'io-ts';
2
+
3
+ import { baseModelDtoCodec } from './base';
4
+
5
+ export const userDtoCodec = t.intersection(
6
+ [
7
+ t.type({
8
+ ...baseModelDtoCodec.props,
9
+ username: t.string,
10
+ }),
11
+ t.partial({
12
+ name: t.string,
13
+ email: t.string,
14
+ lastLogin: t.union([t.string, t.null]),
15
+ }),
16
+ ],
17
+ 'UserDTO'
18
+ );
19
+
20
+ export type UserDTO = t.TypeOf<typeof userDtoCodec>;
package/dist/Icons.d.ts DELETED
@@ -1,45 +0,0 @@
1
- import { FC, SVGProps } from 'react';
2
- import ArrowDown19Icon from '../assets/icons/arrow-down-1-9.svg?react';
3
- import ArrowDownAZIcon from '../assets/icons/arrow-down-a-z.svg?react';
4
- import ArrowDownBigSmallIcon from '../assets/icons/arrow-down-big-small.svg?react';
5
- import ArrowUp91Icon from '../assets/icons/arrow-up-9-1.svg?react';
6
- import ArrowUpBigSmallIcon from '../assets/icons/arrow-up-big-small.svg?react';
7
- import ArrowUpZAIcon from '../assets/icons/arrow-up-z-a.svg?react';
8
- import ArrowsRotateIcon from '../assets/icons/arrows-rotate.svg?react';
9
- import ArrowsUpDownIcon from '../assets/icons/arrows-up-down.svg?react';
10
- import CheckIcon from '../assets/icons/check.svg?react';
11
- import ChevronDownIcon from '../assets/icons/chevron-down.svg?react';
12
- import CopyIcon from '../assets/icons/copy.svg?react';
13
- import DownIcon from '../assets/icons/down.svg?react';
14
- import EllipsisIcon from '../assets/icons/ellipsis.svg?react';
15
- import FilterFullIcon from '../assets/icons/filter-full.svg?react';
16
- import FilterIcon from '../assets/icons/filter.svg?react';
17
- import FilterSlashIcon from '../assets/icons/filter-slash.svg?react';
18
- import HashtagIcon from '../assets/icons/hashtag.svg?react';
19
- import ImageSlashIcon from '../assets/icons/image-slash.svg?react';
20
- import LeftIcon from '../assets/icons/left.svg?react';
21
- import MagnifierIcon from '../assets/icons/magnifier.svg?react';
22
- import PhoneIcon from '../assets/icons/phone.svg?react';
23
- import PlusIcon from '../assets/icons/plus.svg?react';
24
- import RightIcon from '../assets/icons/right.svg?react';
25
- import SigmaIcon from '../assets/icons/sigma.svg?react';
26
- import SortCalendarAscendingIcon from '../assets/icons/sort-calendar-ascending.svg?react';
27
- import SortCalendarDescendingIcon from '../assets/icons/sort-calendar-descending.svg?react';
28
- import SpinnerIcon from '../assets/icons/spinner-third.svg?react';
29
- import TableColumnsIcon from '../assets/icons/table-columns.svg?react';
30
- import TableFooterIcon from '../assets/icons/table-footer.svg?react';
31
- import TableFooterSlashIcon from '../assets/icons/table-footer-slash.svg?react';
32
- import TableIcon from '../assets/icons/table.svg?react';
33
- import TallyIcon from '../assets/icons/tally.svg?react';
34
- import UpIcon from '../assets/icons/up.svg?react';
35
- import UserTieIcon from '../assets/icons/user-tie.svg?react';
36
- import XBarIcon from '../assets/icons/x-bar.svg?react';
37
- type IconFCProps = SVGProps<SVGSVGElement>;
38
- export type IconFC = FC<IconFCProps>;
39
- type AnimatedIconProps = {
40
- icons: FC[];
41
- speed?: number;
42
- };
43
- export declare const AnimatedIcon: FC<AnimatedIconProps & IconFCProps>;
44
- export declare const LoadingIcon: FC<IconFCProps>;
45
- export { ArrowDownAZIcon, ArrowDown19Icon, ArrowDownBigSmallIcon, ArrowUpZAIcon, ArrowUpBigSmallIcon, ArrowUp91Icon, ArrowsRotateIcon, ArrowsUpDownIcon, CheckIcon, ChevronDownIcon, CopyIcon, DownIcon, EllipsisIcon, FilterFullIcon, FilterIcon, FilterSlashIcon, HashtagIcon, ImageSlashIcon, LeftIcon, MagnifierIcon, PhoneIcon, PlusIcon, RightIcon, SigmaIcon, SortCalendarAscendingIcon, SortCalendarDescendingIcon, SpinnerIcon, TableColumnsIcon, TableFooterIcon, TableFooterSlashIcon, TableIcon, TallyIcon, UpIcon, UserTieIcon, XBarIcon, };