@addev-be/ui 2.4.5 → 2.4.7

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 (238) 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/up.svg +1 -1
  21. package/assets/icons/user-tie.svg +1 -1
  22. package/assets/icons/x-bar.svg +3 -3
  23. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +9 -8
  24. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +21 -72
  25. package/dist/components/data/AdvancedRequestDataGrid/index.js +2 -2
  26. package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +1 -1
  27. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +10 -0
  28. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +173 -0
  29. package/dist/components/data/DataGrid/DataGridFooter.js +1 -1
  30. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +13 -0
  31. package/dist/components/data/DataGrid/FilterValuesScroller.js +73 -0
  32. package/dist/components/data/DataGrid/VirtualScroller.d.ts +11 -0
  33. package/dist/components/data/DataGrid/VirtualScroller.js +41 -0
  34. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +12 -0
  35. package/dist/components/data/DataGrid/helpers/advancedRequests.js +53 -0
  36. package/dist/components/data/DataGrid/helpers.d.ts +28 -0
  37. package/dist/components/data/DataGrid/helpers.js +436 -0
  38. package/dist/components/data/DataGrid/styles.js +6 -3
  39. package/dist/components/data/SmartQueryDataGrid/helpers/columns.d.ts +20 -0
  40. package/dist/components/data/SmartQueryDataGrid/helpers/columns.js +160 -0
  41. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.d.ts +5 -0
  42. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.js +41 -0
  43. package/dist/components/data/SmartQueryDataGrid/helpers/index.d.ts +2 -0
  44. package/dist/components/data/SmartQueryDataGrid/helpers/index.js +18 -0
  45. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.d.ts +3 -0
  46. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.js +15 -0
  47. package/dist/components/data/SmartQueryDataGrid/hooks.d.ts +9 -0
  48. package/dist/components/data/SmartQueryDataGrid/hooks.js +63 -0
  49. package/dist/components/data/SmartQueryDataGrid/index.d.ts +12 -0
  50. package/dist/components/data/SmartQueryDataGrid/index.js +242 -0
  51. package/dist/components/data/SmartQueryDataGrid/types.d.ts +22 -0
  52. package/dist/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.d.ts +2 -1
  53. package/dist/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.js +2 -3
  54. package/dist/components/forms/Form/InputWithLabel.d.ts +2 -0
  55. package/dist/components/forms/Form/InputWithLabel.js +10 -0
  56. package/dist/components/forms/Form/types.d.ts +7 -0
  57. package/dist/components/forms/Form/types.js +2 -0
  58. package/dist/config/types.d.ts +11 -0
  59. package/dist/config/types.js +2 -0
  60. package/dist/helpers/react.d.ts +2 -0
  61. package/dist/helpers/react.js +8 -0
  62. package/dist/services/index.js +17 -7
  63. package/dist/services/requests/userPermissions.d.ts +4 -0
  64. package/dist/services/requests/userPermissions.js +20 -0
  65. package/eslint.config.js +3 -3
  66. package/package.json +2 -2
  67. package/src/Icons.tsx +138 -138
  68. package/src/components/auth/LoginForm.tsx +86 -86
  69. package/src/components/auth/LoginPage.tsx +32 -32
  70. package/src/components/auth/PasswordRecoveryForm.tsx +53 -53
  71. package/src/components/auth/PasswordResetForm.tsx +112 -112
  72. package/src/components/auth/styles.ts +14 -14
  73. package/src/components/data/DataGrid/DataGridCell.tsx +81 -81
  74. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  75. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  76. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  77. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  78. package/src/components/data/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +37 -37
  79. package/src/components/data/DataGrid/DataGridEditableCell/DateEditableCell.tsx +38 -38
  80. package/src/components/data/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +71 -71
  81. package/src/components/data/DataGrid/DataGridEditableCell/TextEditableCell.tsx +37 -37
  82. package/src/components/data/DataGrid/DataGridEditableCell/index.tsx +106 -106
  83. package/src/components/data/DataGrid/DataGridEditableCell/styles.ts +35 -35
  84. package/src/components/data/DataGrid/DataGridEditableCell/types.ts +18 -18
  85. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +129 -129
  86. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  87. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +370 -370
  88. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  89. package/src/components/data/DataGrid/DataGridFooter.tsx +47 -45
  90. package/src/components/data/DataGrid/DataGridHeader.tsx +74 -74
  91. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +112 -112
  92. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +83 -83
  93. package/src/components/data/DataGrid/DataGridToolbar.tsx +134 -134
  94. package/src/components/data/DataGrid/FilterModalContent/index.tsx +137 -137
  95. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  96. package/src/components/data/DataGrid/constants.ts +6 -6
  97. package/src/components/data/DataGrid/helpers/columns.tsx +456 -456
  98. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  99. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  100. package/src/components/data/DataGrid/hooks/index.ts +29 -29
  101. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +383 -383
  102. package/src/components/data/DataGrid/hooks/useDataGridChangedRows.ts +97 -97
  103. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +174 -174
  104. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  105. package/src/components/data/DataGrid/hooks/useRefreshModal.tsx +48 -48
  106. package/src/components/data/DataGrid/index.tsx +111 -111
  107. package/src/components/data/DataGrid/styles.ts +434 -430
  108. package/src/components/data/DataGrid/types.ts +380 -380
  109. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +526 -526
  110. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  111. package/src/components/data/SqlRequestDataGrid/helpers/rows.ts +24 -24
  112. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  113. package/src/components/data/SqlRequestDataGrid/index.tsx +417 -417
  114. package/src/components/data/SqlRequestDataGrid/styles.ts +15 -15
  115. package/src/components/data/SqlRequestDataGrid/types.ts +74 -74
  116. package/src/components/data/SqlRequestForeignList/index.tsx +254 -254
  117. package/src/components/data/SqlRequestForeignList/styles.ts +43 -43
  118. package/src/components/data/SqlRequestForeignList/types.ts +32 -32
  119. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +108 -108
  120. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  121. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  122. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  123. package/src/components/data/SqlRequestGrid/index.tsx +304 -304
  124. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  125. package/src/components/data/SqlRequestGrid/types.ts +73 -73
  126. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  127. package/src/components/data/VirtualScroller/index.tsx +89 -89
  128. package/src/components/data/VirtualScroller/styles.ts +57 -57
  129. package/src/components/data/VirtualScroller/types.ts +10 -10
  130. package/src/components/forms/AutoTextArea.tsx +48 -48
  131. package/src/components/forms/Button.tsx +132 -132
  132. package/src/components/forms/Form/Checkbox.tsx +12 -12
  133. package/src/components/forms/Form/CustomSelect.tsx +86 -86
  134. package/src/components/forms/Form/FormGroup.tsx +31 -31
  135. package/src/components/forms/Form/Input.tsx +16 -16
  136. package/src/components/forms/Form/Row.tsx +32 -32
  137. package/src/components/forms/Form/Select.tsx +82 -82
  138. package/src/components/forms/Form/TextArea.tsx +17 -17
  139. package/src/components/forms/Form/index.tsx +48 -48
  140. package/src/components/forms/Form/styles.ts +184 -184
  141. package/src/components/forms/IconButton.tsx +61 -61
  142. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  143. package/src/components/forms/NumberInput.tsx +53 -53
  144. package/src/components/forms/Select.tsx +34 -34
  145. package/src/components/forms/VerticalLabel.tsx +20 -20
  146. package/src/components/forms/styles.ts +42 -42
  147. package/src/components/layout/Columns.ts +28 -28
  148. package/src/components/layout/Dropdown/index.tsx +113 -113
  149. package/src/components/layout/Dropdown/styles.ts +53 -53
  150. package/src/components/layout/Flexbox.ts +21 -21
  151. package/src/components/layout/Grid/index.tsx +8 -8
  152. package/src/components/layout/Grid/styles.ts +34 -34
  153. package/src/components/layout/Loading/index.tsx +29 -29
  154. package/src/components/layout/Loading/styles.ts +29 -29
  155. package/src/components/layout/Masonry/index.tsx +29 -29
  156. package/src/components/layout/Masonry/styles.ts +20 -20
  157. package/src/components/layout/Modal/index.tsx +51 -51
  158. package/src/components/layout/Modal/styles.ts +125 -125
  159. package/src/components/search/HighlightedText.tsx +41 -41
  160. package/src/components/search/QuickSearchBar.tsx +102 -102
  161. package/src/components/search/QuickSearchResults.tsx +86 -86
  162. package/src/components/search/styles.ts +96 -96
  163. package/src/components/search/types.ts +29 -29
  164. package/src/components/ui/Avatar/index.tsx +54 -54
  165. package/src/components/ui/Card/index.tsx +14 -14
  166. package/src/components/ui/Card/styles.ts +37 -37
  167. package/src/components/ui/ContextMenu/index.tsx +79 -79
  168. package/src/components/ui/ContextMenu/styles.ts +119 -119
  169. package/src/components/ui/Ellipsis.tsx +33 -33
  170. package/src/components/ui/Label.tsx +93 -93
  171. package/src/components/ui/Message/index.tsx +57 -57
  172. package/src/components/ui/Message/styles.ts +44 -44
  173. package/src/components/ui/TabsView/TabsList.tsx +44 -44
  174. package/src/components/ui/TabsView/TabsView.tsx +38 -38
  175. package/src/components/ui/TabsView/styles.ts +76 -76
  176. package/src/components/ui/TabsView/types.ts +15 -15
  177. package/src/config/index.ts +10 -10
  178. package/src/helpers/components.ts +9 -9
  179. package/src/helpers/dates.ts +17 -17
  180. package/src/helpers/getScrollbarSize.ts +14 -14
  181. package/src/helpers/numbers.ts +63 -63
  182. package/src/helpers/responsive.ts +83 -83
  183. package/src/helpers/styled/space.ts +114 -114
  184. package/src/helpers/styled/typography.ts +25 -25
  185. package/src/helpers/text.ts +13 -13
  186. package/src/helpers/types.ts +9 -9
  187. package/src/hooks/useContainerMediaQuery.ts +7 -7
  188. package/src/hooks/useElementSize.ts +24 -24
  189. package/src/hooks/useMediaQuery.ts +9 -9
  190. package/src/hooks/useMediaQueryForWidth.ts +35 -35
  191. package/src/hooks/useMutableState.ts +25 -25
  192. package/src/hooks/useShowArchived.ts +28 -28
  193. package/src/hooks/useWindowSize.ts +20 -20
  194. package/src/index.ts +102 -102
  195. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  196. package/src/providers/AuthenticationProvider/index.tsx +303 -303
  197. package/src/providers/LoadingProvider/index.tsx +47 -47
  198. package/src/providers/PortalsProvider/index.tsx +54 -54
  199. package/src/providers/PortalsProvider/styles.ts +31 -31
  200. package/src/providers/SettingsProvider/index.tsx +70 -70
  201. package/src/providers/ThemeProvider/defaultTheme.ts +470 -470
  202. package/src/providers/ThemeProvider/helpers.ts +84 -84
  203. package/src/providers/ThemeProvider/index.ts +66 -66
  204. package/src/providers/ThemeProvider/types.ts +134 -134
  205. package/src/providers/ToastProvider/index.tsx +93 -93
  206. package/src/providers/TrackingProvider/index.tsx +71 -71
  207. package/src/providers/UiProviders/index.tsx +76 -76
  208. package/src/providers/UiProviders/styles.ts +10 -10
  209. package/src/providers/hooks.ts +14 -14
  210. package/src/services/HttpService.ts +92 -92
  211. package/src/services/WebSocketService.ts +155 -155
  212. package/src/services/advancedRequests.ts +102 -102
  213. package/src/services/base.ts +23 -23
  214. package/src/services/globalSearch.ts +32 -32
  215. package/src/services/hooks.ts +92 -92
  216. package/src/services/requests/auth.ts +44 -44
  217. package/src/services/requests/generic.ts +62 -62
  218. package/src/services/requests/tracking.ts +12 -12
  219. package/src/services/requests/userProfiles.ts +35 -35
  220. package/src/services/requests/users.ts +28 -28
  221. package/src/services/smartQueries.ts +122 -122
  222. package/src/services/sqlRequests.ts +111 -111
  223. package/src/services/types/auth.ts +98 -98
  224. package/src/services/types/base.ts +10 -10
  225. package/src/services/types/generic.ts +82 -82
  226. package/src/services/types/tracking.ts +29 -29
  227. package/src/services/types/userProfiles.ts +79 -79
  228. package/src/services/types/users.ts +74 -74
  229. package/src/services/updateSqlRequests.ts +32 -32
  230. package/src/styles/animations.scss +30 -30
  231. package/src/styles/index.scss +42 -42
  232. package/src/types.ts +8 -8
  233. package/src/typings.d.ts +2 -2
  234. package/tsconfig.json +18 -18
  235. package/dist/services/requests/printing.d.ts +0 -2
  236. package/dist/services/requests/printing.js +0 -8
  237. package/dist/services/types/printing.d.ts +0 -8
  238. /package/dist/{services/types/printing.js → components/data/SmartQueryDataGrid/types.js} +0 -0
@@ -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
+ `;
@@ -1,81 +1,81 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
-
3
- import * as styles from './styles';
4
-
5
- import { MouseEvent, useCallback, useMemo } from 'react';
6
-
7
- import { DataGridCellProps } from './types';
8
- import { DataGridEditableCell } from './DataGridEditableCell';
9
- import { useDataGridContext } from './hooks';
10
-
11
- const defaultRender = (value: any) => (!value ? '' : String(value));
12
-
13
- export const DataGridCell = <R, T>({
14
- row,
15
- rowIndex,
16
- columnKey,
17
- columnIndex,
18
- column,
19
- context,
20
- style,
21
- }: DataGridCellProps<R, T>) => {
22
- const {
23
- name,
24
- editable,
25
- editingCell = [-1, -1],
26
- setEditingCell,
27
- onRowDoubleClick,
28
- userSelect,
29
- headerColor,
30
- } = useDataGridContext(context);
31
- const isEditable =
32
- !!editable &&
33
- 'editable' in column &&
34
- !!column.editable &&
35
- !!column.editComponent;
36
- const isEditing =
37
- isEditable && editingCell[0] === rowIndex && editingCell[1] === columnIndex;
38
- const DataGridCellComponent = column.component ?? styles.DataGridCell;
39
-
40
- const value = useMemo(() => column.getter(row), [column, row]);
41
-
42
- const onDoubleClick = useCallback(
43
- (e: MouseEvent) => {
44
- e.stopPropagation();
45
- e.preventDefault();
46
- if (isEditable) {
47
- setEditingCell([rowIndex, columnIndex]);
48
- } else onRowDoubleClick?.(row, e);
49
- },
50
- [columnIndex, isEditable, onRowDoubleClick, row, rowIndex, setEditingCell]
51
- );
52
-
53
- if (isEditing) {
54
- return (
55
- <DataGridEditableCell
56
- key={`${name}-${rowIndex}-${columnIndex}`}
57
- row={row}
58
- rowIndex={rowIndex}
59
- columnKey={columnKey}
60
- columnIndex={columnIndex}
61
- column={column as any}
62
- context={context}
63
- userSelect={userSelect}
64
- />
65
- );
66
- }
67
-
68
- return (
69
- <DataGridCellComponent
70
- key={`${name}-${rowIndex}-${columnIndex}`}
71
- onDoubleClick={onDoubleClick}
72
- style={style}
73
- $userSelect={userSelect}
74
- $color={column.color}
75
- $textAlign={column.textAlign}
76
- $headerColor={headerColor}
77
- >
78
- {(column.render ?? defaultRender)(value, row, column)}
79
- </DataGridCellComponent>
80
- );
81
- };
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import * as styles from './styles';
4
+
5
+ import { MouseEvent, useCallback, useMemo } from 'react';
6
+
7
+ import { DataGridCellProps } from './types';
8
+ import { DataGridEditableCell } from './DataGridEditableCell';
9
+ import { useDataGridContext } from './hooks';
10
+
11
+ const defaultRender = (value: any) => (!value ? '' : String(value));
12
+
13
+ export const DataGridCell = <R, T>({
14
+ row,
15
+ rowIndex,
16
+ columnKey,
17
+ columnIndex,
18
+ column,
19
+ context,
20
+ style,
21
+ }: DataGridCellProps<R, T>) => {
22
+ const {
23
+ name,
24
+ editable,
25
+ editingCell = [-1, -1],
26
+ setEditingCell,
27
+ onRowDoubleClick,
28
+ userSelect,
29
+ headerColor,
30
+ } = useDataGridContext(context);
31
+ const isEditable =
32
+ !!editable &&
33
+ 'editable' in column &&
34
+ !!column.editable &&
35
+ !!column.editComponent;
36
+ const isEditing =
37
+ isEditable && editingCell[0] === rowIndex && editingCell[1] === columnIndex;
38
+ const DataGridCellComponent = column.component ?? styles.DataGridCell;
39
+
40
+ const value = useMemo(() => column.getter(row), [column, row]);
41
+
42
+ const onDoubleClick = useCallback(
43
+ (e: MouseEvent) => {
44
+ e.stopPropagation();
45
+ e.preventDefault();
46
+ if (isEditable) {
47
+ setEditingCell([rowIndex, columnIndex]);
48
+ } else onRowDoubleClick?.(row, e);
49
+ },
50
+ [columnIndex, isEditable, onRowDoubleClick, row, rowIndex, setEditingCell]
51
+ );
52
+
53
+ if (isEditing) {
54
+ return (
55
+ <DataGridEditableCell
56
+ key={`${name}-${rowIndex}-${columnIndex}`}
57
+ row={row}
58
+ rowIndex={rowIndex}
59
+ columnKey={columnKey}
60
+ columnIndex={columnIndex}
61
+ column={column as any}
62
+ context={context}
63
+ userSelect={userSelect}
64
+ />
65
+ );
66
+ }
67
+
68
+ return (
69
+ <DataGridCellComponent
70
+ key={`${name}-${rowIndex}-${columnIndex}`}
71
+ onDoubleClick={onDoubleClick}
72
+ style={style}
73
+ $userSelect={userSelect}
74
+ $color={column.color}
75
+ $textAlign={column.textAlign}
76
+ $headerColor={headerColor}
77
+ >
78
+ {(column.render ?? defaultRender)(value, row, column)}
79
+ </DataGridCellComponent>
80
+ );
81
+ };
@@ -1,9 +1,9 @@
1
- import { DataGridColumns } from '../types';
2
-
3
- export const normalizeColumnsOrders = <R>(
4
- columns: DataGridColumns<R>
5
- ): DataGridColumns<R> =>
6
- columns.map((column, index) => ({
7
- ...column,
8
- order: index,
9
- }));
1
+ import { DataGridColumns } from '../types';
2
+
3
+ export const normalizeColumnsOrders = <R>(
4
+ columns: DataGridColumns<R>
5
+ ): DataGridColumns<R> =>
6
+ columns.map((column, index) => ({
7
+ ...column,
8
+ order: index,
9
+ }));