@addev-be/ui 2.4.0 → 2.4.2

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 (250) 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/DataGrid/hooks/useDataGrid.js +3 -0
  25. package/dist/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.d.ts +1 -2
  26. package/dist/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.js +3 -2
  27. package/dist/components/data/SqlRequestDataGrid/helpers/columns.js +3 -1
  28. package/dist/services/index.js +7 -17
  29. package/eslint.config.js +3 -3
  30. package/package.json +2 -2
  31. package/src/Icons.tsx +138 -138
  32. package/src/components/auth/LoginForm.tsx +86 -86
  33. package/src/components/auth/LoginPage.tsx +32 -32
  34. package/src/components/auth/PasswordRecoveryForm.tsx +53 -53
  35. package/src/components/auth/PasswordResetForm.tsx +112 -112
  36. package/src/components/auth/styles.ts +14 -14
  37. package/src/components/data/DataGrid/DataGridCell.tsx +81 -81
  38. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  39. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  40. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  41. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  42. package/src/components/data/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +37 -37
  43. package/src/components/data/DataGrid/DataGridEditableCell/DateEditableCell.tsx +38 -38
  44. package/src/components/data/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +71 -71
  45. package/src/components/data/DataGrid/DataGridEditableCell/TextEditableCell.tsx +37 -37
  46. package/src/components/data/DataGrid/DataGridEditableCell/index.tsx +106 -106
  47. package/src/components/data/DataGrid/DataGridEditableCell/styles.ts +35 -35
  48. package/src/components/data/DataGrid/DataGridEditableCell/types.ts +18 -18
  49. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +129 -129
  50. package/src/components/data/DataGrid/DataGridFilterMenu/helpers.ts +23 -23
  51. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  52. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +370 -370
  53. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  54. package/src/components/data/DataGrid/DataGridFooter.tsx +45 -45
  55. package/src/components/data/DataGrid/DataGridHeader.tsx +74 -74
  56. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +112 -112
  57. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +83 -83
  58. package/src/components/data/DataGrid/DataGridToolbar.tsx +134 -134
  59. package/src/components/data/DataGrid/FilterModalContent/index.tsx +137 -137
  60. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  61. package/src/components/data/DataGrid/constants.ts +6 -6
  62. package/src/components/data/DataGrid/helpers/columns.tsx +452 -452
  63. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  64. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  65. package/src/components/data/DataGrid/hooks/index.ts +29 -29
  66. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +383 -380
  67. package/src/components/data/DataGrid/hooks/useDataGridChangedRows.ts +97 -97
  68. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +174 -174
  69. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  70. package/src/components/data/DataGrid/hooks/useRefreshModal.tsx +48 -48
  71. package/src/components/data/DataGrid/index.tsx +111 -111
  72. package/src/components/data/DataGrid/styles.ts +430 -430
  73. package/src/components/data/DataGrid/types.ts +380 -380
  74. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +526 -524
  75. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  76. package/src/components/data/SqlRequestDataGrid/helpers/rows.ts +24 -24
  77. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  78. package/src/components/data/SqlRequestDataGrid/index.tsx +417 -417
  79. package/src/components/data/SqlRequestDataGrid/styles.ts +15 -15
  80. package/src/components/data/SqlRequestDataGrid/types.ts +74 -74
  81. package/src/components/data/SqlRequestForeignList/index.tsx +254 -254
  82. package/src/components/data/SqlRequestForeignList/styles.ts +43 -43
  83. package/src/components/data/SqlRequestForeignList/types.ts +32 -32
  84. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +108 -108
  85. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  86. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  87. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  88. package/src/components/data/SqlRequestGrid/index.tsx +304 -304
  89. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  90. package/src/components/data/SqlRequestGrid/types.ts +73 -73
  91. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  92. package/src/components/data/VirtualScroller/index.tsx +89 -89
  93. package/src/components/data/VirtualScroller/styles.ts +57 -57
  94. package/src/components/data/VirtualScroller/types.ts +10 -10
  95. package/src/components/forms/AutoTextArea.tsx +48 -48
  96. package/src/components/forms/Button.tsx +132 -132
  97. package/src/components/forms/Form/Checkbox.tsx +12 -12
  98. package/src/components/forms/Form/CustomSelect.tsx +86 -86
  99. package/src/components/forms/Form/FormGroup.tsx +31 -31
  100. package/src/components/forms/Form/Input.tsx +16 -16
  101. package/src/components/forms/Form/Row.tsx +32 -32
  102. package/src/components/forms/Form/Select.tsx +82 -82
  103. package/src/components/forms/Form/TextArea.tsx +17 -17
  104. package/src/components/forms/Form/index.tsx +48 -48
  105. package/src/components/forms/Form/styles.ts +184 -184
  106. package/src/components/forms/IconButton.tsx +61 -61
  107. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  108. package/src/components/forms/NumberInput.tsx +53 -53
  109. package/src/components/forms/Select.tsx +34 -34
  110. package/src/components/forms/VerticalLabel.tsx +20 -20
  111. package/src/components/forms/styles.ts +42 -42
  112. package/src/components/layout/Columns.ts +28 -28
  113. package/src/components/layout/Dropdown/index.tsx +113 -113
  114. package/src/components/layout/Dropdown/styles.ts +53 -53
  115. package/src/components/layout/Flexbox.ts +21 -21
  116. package/src/components/layout/Grid/index.tsx +8 -8
  117. package/src/components/layout/Grid/styles.ts +34 -34
  118. package/src/components/layout/Loading/index.tsx +29 -29
  119. package/src/components/layout/Loading/styles.ts +29 -29
  120. package/src/components/layout/Masonry/index.tsx +29 -29
  121. package/src/components/layout/Masonry/styles.ts +20 -20
  122. package/src/components/layout/Modal/index.tsx +51 -51
  123. package/src/components/layout/Modal/styles.ts +125 -125
  124. package/src/components/search/HighlightedText.tsx +41 -41
  125. package/src/components/search/QuickSearchBar.tsx +99 -99
  126. package/src/components/search/QuickSearchResults.tsx +86 -86
  127. package/src/components/search/styles.ts +96 -96
  128. package/src/components/search/types.ts +29 -29
  129. package/src/components/ui/Avatar/index.tsx +54 -54
  130. package/src/components/ui/Avatar/styles.ts +61 -61
  131. package/src/components/ui/Card/index.tsx +14 -14
  132. package/src/components/ui/Card/styles.ts +37 -37
  133. package/src/components/ui/ContextMenu/index.tsx +79 -79
  134. package/src/components/ui/ContextMenu/styles.ts +119 -119
  135. package/src/components/ui/Ellipsis.tsx +33 -33
  136. package/src/components/ui/Label.tsx +93 -93
  137. package/src/components/ui/Message/index.tsx +57 -57
  138. package/src/components/ui/Message/styles.ts +44 -44
  139. package/src/components/ui/TabsView/TabsList.tsx +44 -44
  140. package/src/components/ui/TabsView/TabsView.tsx +38 -38
  141. package/src/components/ui/TabsView/index.ts +3 -3
  142. package/src/components/ui/TabsView/styles.ts +76 -76
  143. package/src/components/ui/TabsView/types.ts +15 -15
  144. package/src/config/index.ts +10 -10
  145. package/src/helpers/components.ts +9 -9
  146. package/src/helpers/dates.ts +17 -17
  147. package/src/helpers/getScrollbarSize.ts +14 -14
  148. package/src/helpers/numbers.ts +63 -63
  149. package/src/helpers/responsive.ts +83 -83
  150. package/src/helpers/styled/space.ts +114 -114
  151. package/src/helpers/styled/typography.ts +25 -25
  152. package/src/helpers/text.ts +13 -13
  153. package/src/helpers/types.ts +9 -9
  154. package/src/hooks/useContainerMediaQuery.ts +7 -7
  155. package/src/hooks/useElementSize.ts +24 -24
  156. package/src/hooks/useMediaQuery.ts +9 -9
  157. package/src/hooks/useMediaQueryForWidth.ts +35 -35
  158. package/src/hooks/useMutableState.ts +25 -25
  159. package/src/hooks/useShowArchived.ts +28 -28
  160. package/src/hooks/useWindowSize.ts +20 -20
  161. package/src/index.ts +102 -102
  162. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  163. package/src/providers/AuthenticationProvider/index.tsx +303 -303
  164. package/src/providers/LoadingProvider/index.tsx +47 -47
  165. package/src/providers/PortalsProvider/index.tsx +54 -54
  166. package/src/providers/PortalsProvider/styles.ts +31 -31
  167. package/src/providers/SettingsProvider/index.tsx +70 -70
  168. package/src/providers/ThemeProvider/defaultTheme.ts +470 -470
  169. package/src/providers/ThemeProvider/helpers.ts +84 -84
  170. package/src/providers/ThemeProvider/index.ts +66 -66
  171. package/src/providers/ThemeProvider/types.ts +134 -134
  172. package/src/providers/ToastProvider/index.tsx +93 -93
  173. package/src/providers/TrackingProvider/hooks.ts +14 -14
  174. package/src/providers/TrackingProvider/index.tsx +71 -71
  175. package/src/providers/UiProviders/index.tsx +76 -76
  176. package/src/providers/UiProviders/styles.ts +10 -10
  177. package/src/providers/hooks.ts +14 -14
  178. package/src/services/HttpService.ts +92 -92
  179. package/src/services/WebSocketService.ts +155 -155
  180. package/src/services/advancedRequests.ts +102 -102
  181. package/src/services/base.ts +23 -23
  182. package/src/services/globalSearch.ts +32 -32
  183. package/src/services/hooks.ts +92 -92
  184. package/src/services/requests/auth.ts +44 -44
  185. package/src/services/requests/generic.ts +62 -62
  186. package/src/services/requests/tracking.ts +12 -12
  187. package/src/services/requests/userProfiles.ts +35 -35
  188. package/src/services/requests/users.ts +28 -28
  189. package/src/services/smartQueries.ts +122 -122
  190. package/src/services/sqlRequests.ts +111 -111
  191. package/src/services/types/auth.ts +98 -98
  192. package/src/services/types/base.ts +10 -10
  193. package/src/services/types/generic.ts +82 -82
  194. package/src/services/types/tracking.ts +29 -29
  195. package/src/services/types/userProfiles.ts +79 -79
  196. package/src/services/types/users.ts +74 -74
  197. package/src/services/updateSqlRequests.ts +32 -32
  198. package/src/styles/animations.scss +30 -30
  199. package/src/styles/index.scss +42 -42
  200. package/src/types.ts +8 -8
  201. package/src/typings.d.ts +2 -2
  202. package/tsconfig.json +18 -18
  203. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.d.ts +0 -14
  204. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +0 -77
  205. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.d.ts +0 -22
  206. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +0 -105
  207. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.d.ts +0 -2
  208. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.js +0 -18
  209. package/dist/components/data/AdvancedRequestDataGrid/index.d.ts +0 -2
  210. package/dist/components/data/AdvancedRequestDataGrid/index.js +0 -215
  211. package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +0 -21
  212. package/dist/components/data/AdvancedRequestDataGrid/types.js +0 -2
  213. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +0 -10
  214. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +0 -173
  215. package/dist/components/data/DataGrid/DataGridEditableCell.d.ts +0 -2
  216. package/dist/components/data/DataGrid/DataGridEditableCell.js +0 -27
  217. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +0 -13
  218. package/dist/components/data/DataGrid/FilterValuesScroller.js +0 -73
  219. package/dist/components/data/DataGrid/VirtualScroller.d.ts +0 -11
  220. package/dist/components/data/DataGrid/VirtualScroller.js +0 -41
  221. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +0 -12
  222. package/dist/components/data/DataGrid/helpers/advancedRequests.js +0 -53
  223. package/dist/components/data/DataGrid/helpers.d.ts +0 -28
  224. package/dist/components/data/DataGrid/helpers.js +0 -436
  225. package/dist/components/data/SmartQueryDataGrid/helpers/columns.d.ts +0 -20
  226. package/dist/components/data/SmartQueryDataGrid/helpers/columns.js +0 -160
  227. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.d.ts +0 -5
  228. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.js +0 -41
  229. package/dist/components/data/SmartQueryDataGrid/helpers/index.d.ts +0 -2
  230. package/dist/components/data/SmartQueryDataGrid/helpers/index.js +0 -18
  231. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.d.ts +0 -3
  232. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.js +0 -15
  233. package/dist/components/data/SmartQueryDataGrid/hooks.d.ts +0 -9
  234. package/dist/components/data/SmartQueryDataGrid/hooks.js +0 -63
  235. package/dist/components/data/SmartQueryDataGrid/index.d.ts +0 -12
  236. package/dist/components/data/SmartQueryDataGrid/index.js +0 -242
  237. package/dist/components/data/SmartQueryDataGrid/types.d.ts +0 -22
  238. package/dist/components/data/SmartQueryDataGrid/types.js +0 -2
  239. package/dist/components/forms/Form/InputWithLabel.d.ts +0 -2
  240. package/dist/components/forms/Form/InputWithLabel.js +0 -10
  241. package/dist/components/forms/Form/types.d.ts +0 -7
  242. package/dist/components/forms/Form/types.js +0 -2
  243. package/dist/config/types.d.ts +0 -11
  244. package/dist/config/types.js +0 -2
  245. package/dist/helpers/react.d.ts +0 -2
  246. package/dist/helpers/react.js +0 -8
  247. package/dist/helpers/styled/index.d.ts +0 -1
  248. package/dist/helpers/styled/index.js +0 -17
  249. package/dist/services/requests/userPermissions.d.ts +0 -4
  250. package/dist/services/requests/userPermissions.js +0 -20
@@ -1,86 +1,86 @@
1
- import { FC, useCallback, useEffect, useRef, useState } from 'react';
2
- import { Link, redirect } from 'react-router-dom';
3
-
4
- import { Button } from '../forms/Button';
5
- import { Card } from '../ui/Card';
6
- import { FormContainer } from './styles';
7
- import { Input } from '../forms/styles';
8
- import { Message } from '../ui/Message';
9
- import { StackedLabel } from '../forms/VerticalLabel';
10
- import { useAuthentication } from '../../providers/hooks';
11
-
12
- export const LoginForm: FC = () => {
13
- const [username, setUsername] = useState(
14
- localStorage.getItem('username') || ''
15
- );
16
- const [password, setPassword] = useState('');
17
- const [isLoading, setIsLoading] = useState(false);
18
- const [error, setError] = useState('');
19
- const usernameInputRef = useRef<HTMLInputElement>(null);
20
- const passwordInputRef = useRef<HTMLInputElement>(null);
21
-
22
- const { login } = useAuthentication();
23
-
24
- const onLoginClicked = useCallback(() => {
25
- setError('');
26
- setIsLoading(true);
27
- login(username, password).then((success) => {
28
- setIsLoading(false);
29
- if (success) {
30
- localStorage.setItem('username', username);
31
- redirect('/');
32
- } else {
33
- setError('Identifiants invalides');
34
- }
35
- });
36
- }, [login, password, username]);
37
-
38
- useEffect(() => {
39
- if (usernameInputRef.current && passwordInputRef.current) {
40
- const input = !username
41
- ? usernameInputRef.current
42
- : passwordInputRef.current;
43
- input.select();
44
- input.focus();
45
- }
46
- // eslint-disable-next-line react-hooks/exhaustive-deps
47
- }, []);
48
-
49
- if (isLoading) return <div>Chargement...</div>;
50
-
51
- return (
52
- <Card>
53
- <FormContainer>
54
- <StackedLabel label="Adresse e-mail / Nom d'utilisateur">
55
- <Input
56
- ref={usernameInputRef}
57
- type="email"
58
- autoComplete="email"
59
- required
60
- value={username}
61
- onChange={(e) => setUsername(e.target.value)}
62
- />
63
- </StackedLabel>
64
-
65
- <StackedLabel label="Mot de passe">
66
- <Input
67
- ref={passwordInputRef}
68
- type="password"
69
- autoComplete="current-password"
70
- required
71
- value={password}
72
- onChange={(e) => setPassword(e.target.value)}
73
- />
74
- </StackedLabel>
75
-
76
- {error && <Message type="error">{error}</Message>}
77
-
78
- <Button $color="primary" onClick={onLoginClicked}>
79
- Se connecter
80
- </Button>
81
-
82
- <Link to="/recover">Mot de passe oublié ?</Link>
83
- </FormContainer>
84
- </Card>
85
- );
86
- };
1
+ import { FC, useCallback, useEffect, useRef, useState } from 'react';
2
+ import { Link, redirect } from 'react-router-dom';
3
+
4
+ import { Button } from '../forms/Button';
5
+ import { Card } from '../ui/Card';
6
+ import { FormContainer } from './styles';
7
+ import { Input } from '../forms/styles';
8
+ import { Message } from '../ui/Message';
9
+ import { StackedLabel } from '../forms/VerticalLabel';
10
+ import { useAuthentication } from '../../providers/hooks';
11
+
12
+ export const LoginForm: FC = () => {
13
+ const [username, setUsername] = useState(
14
+ localStorage.getItem('username') || ''
15
+ );
16
+ const [password, setPassword] = useState('');
17
+ const [isLoading, setIsLoading] = useState(false);
18
+ const [error, setError] = useState('');
19
+ const usernameInputRef = useRef<HTMLInputElement>(null);
20
+ const passwordInputRef = useRef<HTMLInputElement>(null);
21
+
22
+ const { login } = useAuthentication();
23
+
24
+ const onLoginClicked = useCallback(() => {
25
+ setError('');
26
+ setIsLoading(true);
27
+ login(username, password).then((success) => {
28
+ setIsLoading(false);
29
+ if (success) {
30
+ localStorage.setItem('username', username);
31
+ redirect('/');
32
+ } else {
33
+ setError('Identifiants invalides');
34
+ }
35
+ });
36
+ }, [login, password, username]);
37
+
38
+ useEffect(() => {
39
+ if (usernameInputRef.current && passwordInputRef.current) {
40
+ const input = !username
41
+ ? usernameInputRef.current
42
+ : passwordInputRef.current;
43
+ input.select();
44
+ input.focus();
45
+ }
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47
+ }, []);
48
+
49
+ if (isLoading) return <div>Chargement...</div>;
50
+
51
+ return (
52
+ <Card>
53
+ <FormContainer>
54
+ <StackedLabel label="Adresse e-mail / Nom d'utilisateur">
55
+ <Input
56
+ ref={usernameInputRef}
57
+ type="email"
58
+ autoComplete="email"
59
+ required
60
+ value={username}
61
+ onChange={(e) => setUsername(e.target.value)}
62
+ />
63
+ </StackedLabel>
64
+
65
+ <StackedLabel label="Mot de passe">
66
+ <Input
67
+ ref={passwordInputRef}
68
+ type="password"
69
+ autoComplete="current-password"
70
+ required
71
+ value={password}
72
+ onChange={(e) => setPassword(e.target.value)}
73
+ />
74
+ </StackedLabel>
75
+
76
+ {error && <Message type="error">{error}</Message>}
77
+
78
+ <Button $color="primary" onClick={onLoginClicked}>
79
+ Se connecter
80
+ </Button>
81
+
82
+ <Link to="/recover">Mot de passe oublié ?</Link>
83
+ </FormContainer>
84
+ </Card>
85
+ );
86
+ };
@@ -1,32 +1,32 @@
1
- import { FC } from 'react';
2
- import { Outlet } from 'react-router-dom';
3
-
4
- export const LoginPage: FC = () => {
5
- return (
6
- <div className="flex flex-row h-full w-full">
7
- <div className="relative hidden w-0 flex-1 lg:block">
8
- <img className="absolute inset-0 h-full w-full object-cover" alt="" />
9
- </div>
10
- <div className="flex flex-1 flex-col justify-space-evenly overflow-y-auto px-4 py-12 sm:px-6 lg:flex-none lg:px-24 xl:px-36">
11
- <div className="mx-auto w-full max-w-sm lg:max-w-96 lg:w-96 xl:max-w-[32rem] xl:w-[32rem]">
12
- <div className="text-center">
13
- <img
14
- className="h-20 w-auto inline-block"
15
- src="/logo192.png"
16
- alt="Burotel"
17
- />
18
- <h2 className="mt-8 text-2xl font-bold leading-9 tracking-tight text-gray-900">
19
- Connectez-vous
20
- </h2>
21
- </div>
22
-
23
- <div className="mt-10 sm:mx-auto sm:w-full sm:max-w-[640px]">
24
- <div className="bg-white px-6 py-12 shadow sm:rounded-lg sm:px-12">
25
- <Outlet />
26
- </div>
27
- </div>
28
- </div>
29
- </div>
30
- </div>
31
- );
32
- };
1
+ import { FC } from 'react';
2
+ import { Outlet } from 'react-router-dom';
3
+
4
+ export const LoginPage: FC = () => {
5
+ return (
6
+ <div className="flex flex-row h-full w-full">
7
+ <div className="relative hidden w-0 flex-1 lg:block">
8
+ <img className="absolute inset-0 h-full w-full object-cover" alt="" />
9
+ </div>
10
+ <div className="flex flex-1 flex-col justify-space-evenly overflow-y-auto px-4 py-12 sm:px-6 lg:flex-none lg:px-24 xl:px-36">
11
+ <div className="mx-auto w-full max-w-sm lg:max-w-96 lg:w-96 xl:max-w-[32rem] xl:w-[32rem]">
12
+ <div className="text-center">
13
+ <img
14
+ className="h-20 w-auto inline-block"
15
+ src="/logo192.png"
16
+ alt="Burotel"
17
+ />
18
+ <h2 className="mt-8 text-2xl font-bold leading-9 tracking-tight text-gray-900">
19
+ Connectez-vous
20
+ </h2>
21
+ </div>
22
+
23
+ <div className="mt-10 sm:mx-auto sm:w-full sm:max-w-[640px]">
24
+ <div className="bg-white px-6 py-12 shadow sm:rounded-lg sm:px-12">
25
+ <Outlet />
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ );
32
+ };
@@ -1,53 +1,53 @@
1
- import { FC, useCallback, useState } from 'react';
2
-
3
- import { Button } from '../forms/Button';
4
- import { Card } from '../ui/Card';
5
- import { FormContainer } from './styles';
6
- import { Input } from '../forms/styles';
7
- import { Link } from 'react-router-dom';
8
- import { Message } from '../ui/Message';
9
- import { StackedLabel } from '../forms/VerticalLabel';
10
- import { useAuthentication } from '../../providers/hooks';
11
-
12
- export const PasswordRecoveryForm: FC = () => {
13
- const [email, setEmail] = useState('');
14
- const [isSubmitted, setIsSubmitted] = useState(false);
15
- const { sendRecoveryKey } = useAuthentication();
16
-
17
- const onSubmitClicked = useCallback(() => {
18
- sendRecoveryKey(email).then(() => {
19
- setIsSubmitted(true);
20
- });
21
- }, [email, sendRecoveryKey]);
22
-
23
- return (
24
- <Card>
25
- <FormContainer>
26
- {isSubmitted ? (
27
- <>
28
- <Message type="success">
29
- Un e-mail de réinitialisation de mot de passe vous a été envoyé.
30
- </Message>
31
- <Link to="/">Retour</Link>
32
- </>
33
- ) : (
34
- <>
35
- <StackedLabel label="Adresse e-mail">
36
- <Input
37
- type="email"
38
- autoComplete="email"
39
- required
40
- value={email}
41
- onChange={(e) => setEmail(e.target.value)}
42
- />
43
- </StackedLabel>
44
-
45
- <Button $color="primary" onClick={onSubmitClicked}>
46
- Envoyer un lien de récupération
47
- </Button>
48
- </>
49
- )}
50
- </FormContainer>
51
- </Card>
52
- );
53
- };
1
+ import { FC, useCallback, useState } from 'react';
2
+
3
+ import { Button } from '../forms/Button';
4
+ import { Card } from '../ui/Card';
5
+ import { FormContainer } from './styles';
6
+ import { Input } from '../forms/styles';
7
+ import { Link } from 'react-router-dom';
8
+ import { Message } from '../ui/Message';
9
+ import { StackedLabel } from '../forms/VerticalLabel';
10
+ import { useAuthentication } from '../../providers/hooks';
11
+
12
+ export const PasswordRecoveryForm: FC = () => {
13
+ const [email, setEmail] = useState('');
14
+ const [isSubmitted, setIsSubmitted] = useState(false);
15
+ const { sendRecoveryKey } = useAuthentication();
16
+
17
+ const onSubmitClicked = useCallback(() => {
18
+ sendRecoveryKey(email).then(() => {
19
+ setIsSubmitted(true);
20
+ });
21
+ }, [email, sendRecoveryKey]);
22
+
23
+ return (
24
+ <Card>
25
+ <FormContainer>
26
+ {isSubmitted ? (
27
+ <>
28
+ <Message type="success">
29
+ Un e-mail de réinitialisation de mot de passe vous a été envoyé.
30
+ </Message>
31
+ <Link to="/">Retour</Link>
32
+ </>
33
+ ) : (
34
+ <>
35
+ <StackedLabel label="Adresse e-mail">
36
+ <Input
37
+ type="email"
38
+ autoComplete="email"
39
+ required
40
+ value={email}
41
+ onChange={(e) => setEmail(e.target.value)}
42
+ />
43
+ </StackedLabel>
44
+
45
+ <Button $color="primary" onClick={onSubmitClicked}>
46
+ Envoyer un lien de récupération
47
+ </Button>
48
+ </>
49
+ )}
50
+ </FormContainer>
51
+ </Card>
52
+ );
53
+ };
@@ -1,112 +1,112 @@
1
- import { Button, Card, Input, useAuthentication } from '@addev-be/ui';
2
- import { FC, useCallback, useEffect, useMemo, useState } from 'react';
3
- import { Link, useParams } from 'react-router-dom';
4
-
5
- import { FormContainer } from './styles';
6
- import { Message } from '../ui/Message';
7
- import { StackedLabel } from '../forms/VerticalLabel';
8
-
9
- export const PasswordResetForm: FC = () => {
10
- const { key } = useParams<{ key: string }>();
11
- const [password1, setPassword1] = useState('');
12
- const [password2, setPassword2] = useState('');
13
- const [keyStatus, setKeyStatus] = useState(-1);
14
- const [status, setStatus] = useState(-1);
15
- const [error, setError] = useState('');
16
- const { resetPassword, checkRecoveryKey } = useAuthentication();
17
-
18
- useEffect(() => {
19
- if (key) {
20
- checkRecoveryKey(key).then((status) => {
21
- setKeyStatus(status);
22
- });
23
- }
24
- }, [checkRecoveryKey, key]);
25
-
26
- const onSubmitClicked = useCallback(() => {
27
- if (key) {
28
- if (password1 !== password2) {
29
- setError('Les mots de passe ne sont pas identiques');
30
- return;
31
- }
32
- resetPassword(key, password1).then((status) => {
33
- setStatus(status);
34
- setError(
35
- status === 4
36
- ? 'Le mot de passe est trop faible (min. 8 caractères requis)'
37
- : ''
38
- );
39
- });
40
- }
41
- }, [key, password1, password2, resetPassword]);
42
-
43
- const content = useMemo(() => {
44
- if (keyStatus < 0) {
45
- return <p>Chargement...</p>;
46
- }
47
- if (keyStatus > 0) {
48
- return (
49
- <>
50
- <Message type="error">
51
- La clé de récupération fournie est invalide ou expirée
52
- </Message>
53
- </>
54
- );
55
- }
56
-
57
- switch (status) {
58
- case 0:
59
- return (
60
- <>
61
- <Message type="success">
62
- Votre mot de passe a été réinitialisé avec succès. Vous pouvez
63
- maintenant vous connecter.
64
- </Message>
65
- </>
66
- );
67
-
68
- default:
69
- return null;
70
- }
71
- }, [keyStatus, status]);
72
-
73
- return (
74
- <Card>
75
- <FormContainer>
76
- {content ?? (
77
- <>
78
- <StackedLabel label="Nouveau mot de passe">
79
- <Input
80
- type="password"
81
- autoComplete="current-password"
82
- required
83
- value={password1}
84
- onChange={(e) => setPassword1(e.target.value)}
85
- />
86
- </StackedLabel>
87
- <StackedLabel label="Confirmation du mot de passe">
88
- <Input
89
- type="password"
90
- autoComplete="current-password"
91
- required
92
- value={password2}
93
- onChange={(e) => setPassword2(e.target.value)}
94
- />
95
- </StackedLabel>
96
-
97
- {error && (
98
- <Message className="mt-4" type="error">
99
- {error}
100
- </Message>
101
- )}
102
-
103
- <Button $color="primary" onClick={onSubmitClicked}>
104
- Réinitialiser le mot de passe
105
- </Button>
106
- </>
107
- )}
108
- <Link to="/">Retour</Link>
109
- </FormContainer>
110
- </Card>
111
- );
112
- };
1
+ import { Button, Card, Input, useAuthentication } from '@addev-be/ui';
2
+ import { FC, useCallback, useEffect, useMemo, useState } from 'react';
3
+ import { Link, useParams } from 'react-router-dom';
4
+
5
+ import { FormContainer } from './styles';
6
+ import { Message } from '../ui/Message';
7
+ import { StackedLabel } from '../forms/VerticalLabel';
8
+
9
+ export const PasswordResetForm: FC = () => {
10
+ const { key } = useParams<{ key: string }>();
11
+ const [password1, setPassword1] = useState('');
12
+ const [password2, setPassword2] = useState('');
13
+ const [keyStatus, setKeyStatus] = useState(-1);
14
+ const [status, setStatus] = useState(-1);
15
+ const [error, setError] = useState('');
16
+ const { resetPassword, checkRecoveryKey } = useAuthentication();
17
+
18
+ useEffect(() => {
19
+ if (key) {
20
+ checkRecoveryKey(key).then((status) => {
21
+ setKeyStatus(status);
22
+ });
23
+ }
24
+ }, [checkRecoveryKey, key]);
25
+
26
+ const onSubmitClicked = useCallback(() => {
27
+ if (key) {
28
+ if (password1 !== password2) {
29
+ setError('Les mots de passe ne sont pas identiques');
30
+ return;
31
+ }
32
+ resetPassword(key, password1).then((status) => {
33
+ setStatus(status);
34
+ setError(
35
+ status === 4
36
+ ? 'Le mot de passe est trop faible (min. 8 caractères requis)'
37
+ : ''
38
+ );
39
+ });
40
+ }
41
+ }, [key, password1, password2, resetPassword]);
42
+
43
+ const content = useMemo(() => {
44
+ if (keyStatus < 0) {
45
+ return <p>Chargement...</p>;
46
+ }
47
+ if (keyStatus > 0) {
48
+ return (
49
+ <>
50
+ <Message type="error">
51
+ La clé de récupération fournie est invalide ou expirée
52
+ </Message>
53
+ </>
54
+ );
55
+ }
56
+
57
+ switch (status) {
58
+ case 0:
59
+ return (
60
+ <>
61
+ <Message type="success">
62
+ Votre mot de passe a été réinitialisé avec succès. Vous pouvez
63
+ maintenant vous connecter.
64
+ </Message>
65
+ </>
66
+ );
67
+
68
+ default:
69
+ return null;
70
+ }
71
+ }, [keyStatus, status]);
72
+
73
+ return (
74
+ <Card>
75
+ <FormContainer>
76
+ {content ?? (
77
+ <>
78
+ <StackedLabel label="Nouveau mot de passe">
79
+ <Input
80
+ type="password"
81
+ autoComplete="current-password"
82
+ required
83
+ value={password1}
84
+ onChange={(e) => setPassword1(e.target.value)}
85
+ />
86
+ </StackedLabel>
87
+ <StackedLabel label="Confirmation du mot de passe">
88
+ <Input
89
+ type="password"
90
+ autoComplete="current-password"
91
+ required
92
+ value={password2}
93
+ onChange={(e) => setPassword2(e.target.value)}
94
+ />
95
+ </StackedLabel>
96
+
97
+ {error && (
98
+ <Message className="mt-4" type="error">
99
+ {error}
100
+ </Message>
101
+ )}
102
+
103
+ <Button $color="primary" onClick={onSubmitClicked}>
104
+ Réinitialiser le mot de passe
105
+ </Button>
106
+ </>
107
+ )}
108
+ <Link to="/">Retour</Link>
109
+ </FormContainer>
110
+ </Card>
111
+ );
112
+ };
@@ -1,14 +1,14 @@
1
- import styled from 'styled-components';
2
-
3
- export const FormContainer = styled.form.attrs({
4
- className: 'FormContainer',
5
- onSubmit: (e) => e.preventDefault(),
6
- })`
7
- display: flex;
8
- flex-direction: column;
9
- gap: var(--space-4);
10
-
11
- & > a {
12
- text-align: center;
13
- }
14
- `;
1
+ import styled from 'styled-components';
2
+
3
+ export const FormContainer = styled.form.attrs({
4
+ className: 'FormContainer',
5
+ onSubmit: (e) => e.preventDefault(),
6
+ })`
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: var(--space-4);
10
+
11
+ & > a {
12
+ text-align: center;
13
+ }
14
+ `;