@addev-be/ui 3.3.0 → 3.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) 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/grid/DataGrid/helpers/columns.js +22 -2
  25. package/dist/components/grid/DataGrid/types.d.ts +2 -7
  26. package/dist/components/grid/SqlRequestDataGrid/helpers/columns.js +13 -1
  27. package/dist/helpers/styled/typography.d.ts +5 -5
  28. package/dist/helpers/styled/typography.js +5 -5
  29. package/eslint.config.js +3 -3
  30. package/package.json +2 -2
  31. package/src/components/auth/LoginForm.tsx +92 -92
  32. package/src/components/auth/LoginPage.tsx +32 -32
  33. package/src/components/auth/PasswordRecoveryForm.tsx +53 -53
  34. package/src/components/auth/PasswordResetForm.tsx +114 -114
  35. package/src/components/auth/index.ts +4 -4
  36. package/src/components/auth/styles.ts +14 -14
  37. package/src/components/common/Accordion/Accordion.tsx +140 -140
  38. package/src/components/common/Accordion/index.ts +2 -2
  39. package/src/components/common/Avatar/index.tsx +54 -54
  40. package/src/components/common/Avatar/styles.ts +61 -61
  41. package/src/components/common/Card/index.tsx +17 -17
  42. package/src/components/common/Card/styles.ts +38 -38
  43. package/src/components/common/ContextMenu/index.tsx +79 -79
  44. package/src/components/common/ContextMenu/styles.ts +119 -119
  45. package/src/components/common/Ellipsis.tsx +33 -33
  46. package/src/components/common/Label.tsx +93 -93
  47. package/src/components/common/Message/index.tsx +57 -57
  48. package/src/components/common/Message/styles.ts +44 -44
  49. package/src/components/common/PropertiesList/PropertyInput.tsx +173 -173
  50. package/src/components/common/PropertiesList/index.tsx +48 -48
  51. package/src/components/common/PropertiesList/types.ts +60 -60
  52. package/src/components/common/TabsView/TabsList.tsx +49 -49
  53. package/src/components/common/TabsView/TabsView.tsx +42 -42
  54. package/src/components/common/TabsView/index.ts +3 -3
  55. package/src/components/common/TabsView/styles.ts +83 -83
  56. package/src/components/common/TabsView/types.ts +12 -12
  57. package/src/components/common/TreeView/TreeContext.tsx +379 -379
  58. package/src/components/common/TreeView/TreeView.tsx +281 -281
  59. package/src/components/common/TreeView/index.ts +3 -3
  60. package/src/components/common/index.ts +10 -10
  61. package/src/components/forms/AutoTextArea.tsx +48 -48
  62. package/src/components/forms/BillitIdentifier/index.tsx +78 -78
  63. package/src/components/forms/BillitIdentifier/styles.tsx +43 -43
  64. package/src/components/forms/Button.tsx +130 -130
  65. package/src/components/forms/Form/Checkbox.tsx +12 -12
  66. package/src/components/forms/Form/CustomSelect.tsx +86 -86
  67. package/src/components/forms/Form/FormGroup.tsx +33 -33
  68. package/src/components/forms/Form/Input.tsx +16 -16
  69. package/src/components/forms/Form/Row.tsx +28 -28
  70. package/src/components/forms/Form/Select.tsx +99 -99
  71. package/src/components/forms/Form/TextArea.tsx +17 -17
  72. package/src/components/forms/Form/index.tsx +48 -48
  73. package/src/components/forms/Form/styles.ts +148 -148
  74. package/src/components/forms/IconButton.tsx +61 -61
  75. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  76. package/src/components/forms/NumberInput.tsx +53 -53
  77. package/src/components/forms/Select.tsx +34 -34
  78. package/src/components/forms/VerticalLabel.tsx +20 -20
  79. package/src/components/forms/index.ts +11 -11
  80. package/src/components/forms/styles.ts +42 -42
  81. package/src/components/grid/DataGrid/DataGridCell.tsx +82 -82
  82. package/src/components/grid/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  83. package/src/components/grid/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  84. package/src/components/grid/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  85. package/src/components/grid/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  86. package/src/components/grid/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +37 -37
  87. package/src/components/grid/DataGrid/DataGridEditableCell/DateEditableCell.tsx +38 -38
  88. package/src/components/grid/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +71 -71
  89. package/src/components/grid/DataGrid/DataGridEditableCell/TextEditableCell.tsx +37 -37
  90. package/src/components/grid/DataGrid/DataGridEditableCell/index.tsx +112 -112
  91. package/src/components/grid/DataGrid/DataGridEditableCell/styles.ts +35 -35
  92. package/src/components/grid/DataGrid/DataGridEditableCell/types.ts +18 -18
  93. package/src/components/grid/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +129 -129
  94. package/src/components/grid/DataGrid/DataGridFilterMenu/helpers.ts +23 -23
  95. package/src/components/grid/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  96. package/src/components/grid/DataGrid/DataGridFilterMenu/index.tsx +370 -370
  97. package/src/components/grid/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  98. package/src/components/grid/DataGrid/DataGridFooter.tsx +48 -48
  99. package/src/components/grid/DataGrid/DataGridHeader.tsx +74 -74
  100. package/src/components/grid/DataGrid/DataGridHeaderCell.tsx +112 -112
  101. package/src/components/grid/DataGrid/DataGridRowTemplate.tsx +90 -90
  102. package/src/components/grid/DataGrid/DataGridToolbar.tsx +134 -134
  103. package/src/components/grid/DataGrid/FilterModalContent/index.tsx +137 -137
  104. package/src/components/grid/DataGrid/FilterModalContent/styles.ts +22 -22
  105. package/src/components/grid/DataGrid/constants.ts +6 -6
  106. package/src/components/grid/DataGrid/helpers/columns.tsx +458 -452
  107. package/src/components/grid/DataGrid/helpers/filters.ts +287 -287
  108. package/src/components/grid/DataGrid/helpers/index.ts +2 -2
  109. package/src/components/grid/DataGrid/hooks/index.ts +29 -29
  110. package/src/components/grid/DataGrid/hooks/useDataGrid.tsx +383 -383
  111. package/src/components/grid/DataGrid/hooks/useDataGridChangedRows.ts +97 -97
  112. package/src/components/grid/DataGrid/hooks/useDataGridCopy.ts +174 -174
  113. package/src/components/grid/DataGrid/hooks/useDataGridSettings.ts +48 -48
  114. package/src/components/grid/DataGrid/hooks/useRefreshModal.tsx +48 -48
  115. package/src/components/grid/DataGrid/index.tsx +111 -111
  116. package/src/components/grid/DataGrid/styles.ts +446 -446
  117. package/src/components/grid/DataGrid/types.ts +375 -380
  118. package/src/components/grid/SqlRequestDataGrid/helpers/columns.tsx +528 -526
  119. package/src/components/grid/SqlRequestDataGrid/helpers/index.ts +2 -2
  120. package/src/components/grid/SqlRequestDataGrid/helpers/rows.ts +24 -24
  121. package/src/components/grid/SqlRequestDataGrid/helpers/sqlRequests.ts +17 -17
  122. package/src/components/grid/SqlRequestDataGrid/index.tsx +417 -417
  123. package/src/components/grid/SqlRequestDataGrid/styles.ts +15 -15
  124. package/src/components/grid/SqlRequestDataGrid/types.ts +74 -74
  125. package/src/components/grid/SqlRequestForeignList/index.tsx +254 -254
  126. package/src/components/grid/SqlRequestForeignList/styles.ts +43 -43
  127. package/src/components/grid/SqlRequestForeignList/types.ts +32 -32
  128. package/src/components/grid/SqlRequestGrid/filters/FiltersSidebar.tsx +108 -108
  129. package/src/components/grid/SqlRequestGrid/filters/styles.ts +88 -88
  130. package/src/components/grid/SqlRequestGrid/helpers/index.ts +1 -1
  131. package/src/components/grid/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  132. package/src/components/grid/SqlRequestGrid/index.tsx +304 -304
  133. package/src/components/grid/SqlRequestGrid/styles.ts +20 -20
  134. package/src/components/grid/SqlRequestGrid/types.ts +73 -73
  135. package/src/components/grid/VirtualScroller/hooks.ts +71 -71
  136. package/src/components/grid/VirtualScroller/index.tsx +89 -89
  137. package/src/components/grid/VirtualScroller/styles.ts +57 -57
  138. package/src/components/grid/VirtualScroller/types.ts +10 -10
  139. package/src/components/grid/index.ts +11 -11
  140. package/src/components/layout/Columns.ts +28 -28
  141. package/src/components/layout/ContextMenu/ContextMenu.tsx +471 -471
  142. package/src/components/layout/ContextMenu/index.ts +23 -23
  143. package/src/components/layout/Dropdown/index.tsx +113 -113
  144. package/src/components/layout/Dropdown/styles.ts +53 -53
  145. package/src/components/layout/Flexbox.ts +21 -21
  146. package/src/components/layout/Grid/index.tsx +8 -8
  147. package/src/components/layout/Grid/styles.ts +34 -34
  148. package/src/components/layout/LeftMenu/LeftMenu.tsx +89 -89
  149. package/src/components/layout/LeftMenu/index.ts +2 -2
  150. package/src/components/layout/Loading/index.tsx +29 -29
  151. package/src/components/layout/Loading/styles.ts +29 -29
  152. package/src/components/layout/Masonry/index.tsx +29 -29
  153. package/src/components/layout/Masonry/styles.ts +20 -20
  154. package/src/components/layout/Modal/index.tsx +51 -51
  155. package/src/components/layout/Modal/styles.ts +125 -125
  156. package/src/components/layout/PanelContainer/PanelContainer.tsx +198 -198
  157. package/src/components/layout/PanelContainer/index.ts +2 -2
  158. package/src/components/layout/index.ts +10 -10
  159. package/src/components/search/HighlightedText.tsx +41 -41
  160. package/src/components/search/QuickSearchBar.tsx +125 -125
  161. package/src/components/search/QuickSearchResults.tsx +90 -90
  162. package/src/components/search/index.ts +5 -5
  163. package/src/components/search/styles.ts +96 -96
  164. package/src/components/search/types.ts +29 -29
  165. package/src/config/index.ts +10 -10
  166. package/src/helpers/cn.ts +6 -6
  167. package/src/helpers/components.ts +9 -9
  168. package/src/helpers/dates.ts +17 -17
  169. package/src/helpers/getScrollbarSize.ts +14 -14
  170. package/src/helpers/index.ts +8 -8
  171. package/src/helpers/numbers.ts +63 -63
  172. package/src/helpers/responsive.ts +83 -83
  173. package/src/helpers/styled/size.ts +24 -24
  174. package/src/helpers/styled/space.ts +111 -111
  175. package/src/helpers/styled/typography.ts +25 -25
  176. package/src/helpers/text.ts +13 -13
  177. package/src/helpers/types.ts +9 -9
  178. package/src/hooks/index.ts +9 -9
  179. package/src/hooks/providers.ts +14 -14
  180. package/src/hooks/useContainerMediaQuery.ts +7 -7
  181. package/src/hooks/useElementSize.ts +24 -24
  182. package/src/hooks/useMediaQuery.ts +9 -9
  183. package/src/hooks/useMediaQueryForWidth.ts +35 -35
  184. package/src/hooks/useMutableState.test.ts +410 -410
  185. package/src/hooks/useMutableState.ts +39 -39
  186. package/src/hooks/useShowArchived.ts +28 -28
  187. package/src/hooks/useWindowSize.ts +20 -20
  188. package/src/icons/index.tsx +138 -138
  189. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  190. package/src/providers/AuthenticationProvider/index.tsx +303 -303
  191. package/src/providers/LoadingProvider/index.tsx +47 -47
  192. package/src/providers/PortalsProvider/index.tsx +54 -54
  193. package/src/providers/PortalsProvider/styles.ts +31 -31
  194. package/src/providers/SettingsProvider/index.tsx +70 -70
  195. package/src/providers/ToastProvider/index.tsx +93 -93
  196. package/src/providers/TrackingProvider/hooks.ts +14 -14
  197. package/src/providers/TrackingProvider/index.tsx +71 -71
  198. package/src/providers/UiProviders/index.tsx +74 -74
  199. package/src/providers/UiProviders/styles.ts +10 -10
  200. package/src/providers/index.ts +6 -6
  201. package/src/services/HttpService.ts +92 -92
  202. package/src/services/WebSocketService.ts +155 -155
  203. package/src/services/advancedRequests.ts +102 -102
  204. package/src/services/base.ts +23 -23
  205. package/src/services/globalSearch.ts +32 -32
  206. package/src/services/hooks.ts +92 -92
  207. package/src/services/index.ts +20 -20
  208. package/src/services/requests/auth.ts +44 -44
  209. package/src/services/requests/generic.ts +76 -76
  210. package/src/services/requests/printing.ts +12 -12
  211. package/src/services/requests/tracking.ts +12 -12
  212. package/src/services/requests/userProfiles.ts +35 -35
  213. package/src/services/requests/users.ts +28 -28
  214. package/src/services/smartQueries.ts +122 -122
  215. package/src/services/sqlRequests.ts +119 -119
  216. package/src/services/types/auth.ts +98 -98
  217. package/src/services/types/base.ts +10 -10
  218. package/src/services/types/generic.ts +102 -102
  219. package/src/services/types/printing.ts +10 -10
  220. package/src/services/types/tracking.ts +29 -29
  221. package/src/services/types/userProfiles.ts +79 -79
  222. package/src/services/types/users.ts +74 -74
  223. package/src/services/updateSqlRequests.ts +32 -32
  224. package/src/styles/animations.scss +30 -30
  225. package/src/styles/index.scss +42 -42
  226. package/src/theme/ThemeProvider.ts +73 -73
  227. package/src/theme/defaultTheme.ts +471 -471
  228. package/src/theme/helpers.ts +89 -89
  229. package/src/theme/index.ts +4 -4
  230. package/src/theme/types.ts +139 -139
  231. package/src/types/index.ts +8 -8
  232. package/src/typings.d.ts +2 -2
  233. package/tsconfig.json +41 -41
  234. package/tsconfig.tsbuildinfo +1 -0
@@ -1,47 +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/layout/Loading';
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
+ import {
2
+ FC,
3
+ PropsWithChildren,
4
+ createContext,
5
+ useCallback,
6
+ useMemo,
7
+ useState,
8
+ } from 'react';
9
+
10
+ import { Loading } from '../../components/layout/Loading';
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,54 +1,54 @@
1
- import * as styles from './styles';
2
-
3
- import {
4
- FC,
5
- PropsWithChildren,
6
- ReactNode,
7
- ReactPortal,
8
- createContext,
9
- useCallback,
10
- useMemo,
11
- useRef,
12
- } from 'react';
13
-
14
- import { createPortal } from 'react-dom';
15
-
16
- export type PortalProps = {
17
- key: string;
18
- children: ReactNode;
19
- };
20
-
21
- export type PortalsContextType = {
22
- createPortal: (children: ReactNode) => ReactPortal | null;
23
- };
24
-
25
- export const PortalsContext = createContext<PortalsContextType>({
26
- createPortal: () => null,
27
- });
28
-
29
- export const PortalsProvider: FC<PropsWithChildren> = ({ children }) => {
30
- const containerRef = useRef<HTMLDivElement | null>(null);
31
-
32
- const createLocalPortal = useCallback(
33
- (children: ReactNode) =>
34
- createPortal(
35
- <styles.PortalContainer>{children}</styles.PortalContainer>,
36
- containerRef.current!
37
- ) ?? null,
38
- []
39
- );
40
-
41
- const value = useMemo(
42
- () => ({
43
- createPortal: createLocalPortal,
44
- }),
45
- [createLocalPortal]
46
- );
47
-
48
- return (
49
- <PortalsContext.Provider value={value}>
50
- {children}
51
- <styles.PortalsWrapper ref={containerRef} />
52
- </PortalsContext.Provider>
53
- );
54
- };
1
+ import * as styles from './styles';
2
+
3
+ import {
4
+ FC,
5
+ PropsWithChildren,
6
+ ReactNode,
7
+ ReactPortal,
8
+ createContext,
9
+ useCallback,
10
+ useMemo,
11
+ useRef,
12
+ } from 'react';
13
+
14
+ import { createPortal } from 'react-dom';
15
+
16
+ export type PortalProps = {
17
+ key: string;
18
+ children: ReactNode;
19
+ };
20
+
21
+ export type PortalsContextType = {
22
+ createPortal: (children: ReactNode) => ReactPortal | null;
23
+ };
24
+
25
+ export const PortalsContext = createContext<PortalsContextType>({
26
+ createPortal: () => null,
27
+ });
28
+
29
+ export const PortalsProvider: FC<PropsWithChildren> = ({ children }) => {
30
+ const containerRef = useRef<HTMLDivElement | null>(null);
31
+
32
+ const createLocalPortal = useCallback(
33
+ (children: ReactNode) =>
34
+ createPortal(
35
+ <styles.PortalContainer>{children}</styles.PortalContainer>,
36
+ containerRef.current!
37
+ ) ?? null,
38
+ []
39
+ );
40
+
41
+ const value = useMemo(
42
+ () => ({
43
+ createPortal: createLocalPortal,
44
+ }),
45
+ [createLocalPortal]
46
+ );
47
+
48
+ return (
49
+ <PortalsContext.Provider value={value}>
50
+ {children}
51
+ <styles.PortalsWrapper ref={containerRef} />
52
+ </PortalsContext.Provider>
53
+ );
54
+ };
@@ -1,31 +1,31 @@
1
- import styled from 'styled-components';
2
-
3
- export const BackdropContainer = styled.div.attrs({
4
- className: 'BackdropContainer',
5
- })`
6
- position: fixed;
7
- top: 0;
8
- left: 0;
9
- right: 0;
10
- bottom: 0;
11
- z-index: 1000;
12
- background-color: rgba(0, 0, 0, 0.5);
13
- display: flex;
14
- justify-content: center;
15
- align-items: center;
16
- `;
17
-
18
- export const PortalsWrapper = styled.div.attrs({
19
- className: 'PortalsWrapper',
20
- })`
21
- width: 0;
22
- height: 0;
23
- `;
24
-
25
- export const PortalContainer = styled.div.attrs({
26
- className: 'PortalContainer',
27
- })`
28
- z-index: 9999;
29
- position: fixed;
30
- inset: 0;
31
- `;
1
+ import styled from 'styled-components';
2
+
3
+ export const BackdropContainer = styled.div.attrs({
4
+ className: 'BackdropContainer',
5
+ })`
6
+ position: fixed;
7
+ top: 0;
8
+ left: 0;
9
+ right: 0;
10
+ bottom: 0;
11
+ z-index: 1000;
12
+ background-color: rgba(0, 0, 0, 0.5);
13
+ display: flex;
14
+ justify-content: center;
15
+ align-items: center;
16
+ `;
17
+
18
+ export const PortalsWrapper = styled.div.attrs({
19
+ className: 'PortalsWrapper',
20
+ })`
21
+ width: 0;
22
+ height: 0;
23
+ `;
24
+
25
+ export const PortalContainer = styled.div.attrs({
26
+ className: 'PortalContainer',
27
+ })`
28
+ z-index: 9999;
29
+ position: fixed;
30
+ inset: 0;
31
+ `;
@@ -1,70 +1,70 @@
1
- import {
2
- FC,
3
- PropsWithChildren,
4
- createContext,
5
- useCallback,
6
- useEffect,
7
- useMemo,
8
- useState,
9
- } from 'react';
10
-
11
- export type Settings = Record<string, string | undefined>;
12
-
13
- export type SettingsContextProps = {
14
- settings: Settings;
15
- updateSettings: (partialSettings: Settings) => void;
16
- };
17
-
18
- export const SettingsContext = createContext<SettingsContextProps>({
19
- settings: {},
20
- updateSettings: () => {},
21
- });
22
-
23
- export const SettingsProvider: FC<PropsWithChildren> = ({ children }) => {
24
- const [settings, setSettings] = useState({});
25
- const getSettings = useCallback(() => {
26
- try {
27
- const settingsJson = localStorage.getItem('settings');
28
- return settingsJson ? JSON.parse(settingsJson) : {};
29
- } catch (error) {
30
- console.warn('Settings load error', error);
31
- return {};
32
- }
33
- }, []);
34
-
35
- const saveSettings = useCallback((settingsToSave: Settings) => {
36
- try {
37
- localStorage.setItem('settings', JSON.stringify(settingsToSave));
38
- } catch (error) {
39
- console.error('Settings save error', error);
40
- }
41
- }, []);
42
-
43
- const updateSettings = useCallback(
44
- (partialSettings: Settings) => {
45
- const newSettings = {
46
- ...settings,
47
- ...partialSettings,
48
- };
49
- setSettings(newSettings);
50
- saveSettings(newSettings);
51
- },
52
- [saveSettings, settings]
53
- );
54
-
55
- useEffect(() => {
56
- const readSettings = getSettings();
57
- setSettings(readSettings);
58
- }, [getSettings]);
59
-
60
- const contextValue = useMemo(
61
- () => ({ settings, updateSettings }),
62
- [settings, updateSettings]
63
- );
64
-
65
- return (
66
- <SettingsContext.Provider value={contextValue}>
67
- {children}
68
- </SettingsContext.Provider>
69
- );
70
- };
1
+ import {
2
+ FC,
3
+ PropsWithChildren,
4
+ createContext,
5
+ useCallback,
6
+ useEffect,
7
+ useMemo,
8
+ useState,
9
+ } from 'react';
10
+
11
+ export type Settings = Record<string, string | undefined>;
12
+
13
+ export type SettingsContextProps = {
14
+ settings: Settings;
15
+ updateSettings: (partialSettings: Settings) => void;
16
+ };
17
+
18
+ export const SettingsContext = createContext<SettingsContextProps>({
19
+ settings: {},
20
+ updateSettings: () => {},
21
+ });
22
+
23
+ export const SettingsProvider: FC<PropsWithChildren> = ({ children }) => {
24
+ const [settings, setSettings] = useState({});
25
+ const getSettings = useCallback(() => {
26
+ try {
27
+ const settingsJson = localStorage.getItem('settings');
28
+ return settingsJson ? JSON.parse(settingsJson) : {};
29
+ } catch (error) {
30
+ console.warn('Settings load error', error);
31
+ return {};
32
+ }
33
+ }, []);
34
+
35
+ const saveSettings = useCallback((settingsToSave: Settings) => {
36
+ try {
37
+ localStorage.setItem('settings', JSON.stringify(settingsToSave));
38
+ } catch (error) {
39
+ console.error('Settings save error', error);
40
+ }
41
+ }, []);
42
+
43
+ const updateSettings = useCallback(
44
+ (partialSettings: Settings) => {
45
+ const newSettings = {
46
+ ...settings,
47
+ ...partialSettings,
48
+ };
49
+ setSettings(newSettings);
50
+ saveSettings(newSettings);
51
+ },
52
+ [saveSettings, settings]
53
+ );
54
+
55
+ useEffect(() => {
56
+ const readSettings = getSettings();
57
+ setSettings(readSettings);
58
+ }, [getSettings]);
59
+
60
+ const contextValue = useMemo(
61
+ () => ({ settings, updateSettings }),
62
+ [settings, updateSettings]
63
+ );
64
+
65
+ return (
66
+ <SettingsContext.Provider value={contextValue}>
67
+ {children}
68
+ </SettingsContext.Provider>
69
+ );
70
+ };
@@ -1,93 +1,93 @@
1
- import {
2
- CircleCheckIcon,
3
- CircleInfoIcon,
4
- CircleXMarkIcon,
5
- TriangleExclamationIcon,
6
- } from '@icons';
7
- import {
8
- Flip,
9
- ToastContainer,
10
- ToastContainerProps,
11
- TypeOptions,
12
- toast,
13
- } from 'react-toastify';
14
- import React, { ReactNode, createContext, useCallback, useMemo } from 'react';
15
-
16
- import { useMediaQuery } from '../../hooks/useMediaQuery';
17
-
18
- type ToastType = Exclude<TypeOptions, 'default'>;
19
-
20
- type ToastContextType = {
21
- toastSuccess: (message: string) => void;
22
- toastError: (message: string) => void;
23
- toastInfo: (message: string) => void;
24
- toastWarning: (message: string) => void;
25
- };
26
-
27
- const ToastContext = createContext<ToastContextType>({
28
- toastSuccess: () => {},
29
- toastError: () => {},
30
- toastInfo: () => {},
31
- toastWarning: () => {},
32
- });
33
-
34
- const iconMap: Record<TypeOptions, React.ReactNode> = {
35
- info: <CircleInfoIcon style={{ fill: 'var(--color-blue-500)' }} />,
36
- error: <CircleXMarkIcon style={{ fill: 'var(--color-red-500)' }} />,
37
- success: <CircleCheckIcon style={{ fill: 'var(--color-green-500)' }} />,
38
- warning: (
39
- <TriangleExclamationIcon style={{ fill: 'var(--color-yellow-500)' }} />
40
- ),
41
- default: null,
42
- };
43
-
44
- const toastOptions: ToastContainerProps = {
45
- autoClose: 5000,
46
- limit: 3,
47
- theme: 'light',
48
- hideProgressBar: false,
49
- closeButton: false,
50
- pauseOnHover: true,
51
- closeOnClick: false,
52
- draggable: true,
53
- stacked: true,
54
- transition: Flip,
55
- style: {
56
- margin: '0 auto',
57
- },
58
- };
59
-
60
- export const ToastProvider = ({ children }: { children: ReactNode }) => {
61
- const { isLgUp } = useMediaQuery();
62
-
63
- const showToast = useCallback((type: ToastType, message: string) => {
64
- toast(message, {
65
- ...toastOptions,
66
- type: type as TypeOptions,
67
- icon: () => iconMap[type],
68
- });
69
- }, []);
70
-
71
- const contextValue: ToastContextType = useMemo(
72
- () => ({
73
- toastSuccess: (msg: string) => showToast('success', msg),
74
- toastError: (msg: string) => showToast('error', msg),
75
- toastInfo: (msg: string) => showToast('info', msg),
76
- toastWarning: (msg: string) => showToast('warning', msg),
77
- }),
78
- [showToast]
79
- );
80
-
81
- return (
82
- <ToastContext.Provider value={contextValue}>
83
- {children}
84
- <ToastContainer
85
- icon={({ type }) => iconMap[type]}
86
- {...toastOptions}
87
- position={isLgUp ? 'bottom-right' : 'bottom-center'}
88
- />
89
- </ToastContext.Provider>
90
- );
91
- };
92
-
93
- export { ToastContext };
1
+ import {
2
+ CircleCheckIcon,
3
+ CircleInfoIcon,
4
+ CircleXMarkIcon,
5
+ TriangleExclamationIcon,
6
+ } from '@icons';
7
+ import {
8
+ Flip,
9
+ ToastContainer,
10
+ ToastContainerProps,
11
+ TypeOptions,
12
+ toast,
13
+ } from 'react-toastify';
14
+ import React, { ReactNode, createContext, useCallback, useMemo } from 'react';
15
+
16
+ import { useMediaQuery } from '../../hooks/useMediaQuery';
17
+
18
+ type ToastType = Exclude<TypeOptions, 'default'>;
19
+
20
+ type ToastContextType = {
21
+ toastSuccess: (message: string) => void;
22
+ toastError: (message: string) => void;
23
+ toastInfo: (message: string) => void;
24
+ toastWarning: (message: string) => void;
25
+ };
26
+
27
+ const ToastContext = createContext<ToastContextType>({
28
+ toastSuccess: () => {},
29
+ toastError: () => {},
30
+ toastInfo: () => {},
31
+ toastWarning: () => {},
32
+ });
33
+
34
+ const iconMap: Record<TypeOptions, React.ReactNode> = {
35
+ info: <CircleInfoIcon style={{ fill: 'var(--color-blue-500)' }} />,
36
+ error: <CircleXMarkIcon style={{ fill: 'var(--color-red-500)' }} />,
37
+ success: <CircleCheckIcon style={{ fill: 'var(--color-green-500)' }} />,
38
+ warning: (
39
+ <TriangleExclamationIcon style={{ fill: 'var(--color-yellow-500)' }} />
40
+ ),
41
+ default: null,
42
+ };
43
+
44
+ const toastOptions: ToastContainerProps = {
45
+ autoClose: 5000,
46
+ limit: 3,
47
+ theme: 'light',
48
+ hideProgressBar: false,
49
+ closeButton: false,
50
+ pauseOnHover: true,
51
+ closeOnClick: false,
52
+ draggable: true,
53
+ stacked: true,
54
+ transition: Flip,
55
+ style: {
56
+ margin: '0 auto',
57
+ },
58
+ };
59
+
60
+ export const ToastProvider = ({ children }: { children: ReactNode }) => {
61
+ const { isLgUp } = useMediaQuery();
62
+
63
+ const showToast = useCallback((type: ToastType, message: string) => {
64
+ toast(message, {
65
+ ...toastOptions,
66
+ type: type as TypeOptions,
67
+ icon: () => iconMap[type],
68
+ });
69
+ }, []);
70
+
71
+ const contextValue: ToastContextType = useMemo(
72
+ () => ({
73
+ toastSuccess: (msg: string) => showToast('success', msg),
74
+ toastError: (msg: string) => showToast('error', msg),
75
+ toastInfo: (msg: string) => showToast('info', msg),
76
+ toastWarning: (msg: string) => showToast('warning', msg),
77
+ }),
78
+ [showToast]
79
+ );
80
+
81
+ return (
82
+ <ToastContext.Provider value={contextValue}>
83
+ {children}
84
+ <ToastContainer
85
+ icon={({ type }) => iconMap[type]}
86
+ {...toastOptions}
87
+ position={isLgUp ? 'bottom-right' : 'bottom-center'}
88
+ />
89
+ </ToastContext.Provider>
90
+ );
91
+ };
92
+
93
+ export { ToastContext };
@@ -1,14 +1,14 @@
1
- import { useContext, useEffect } from 'react';
2
-
3
- import { TrackingContext } from '.';
4
- import { useLocation } from 'react-router-dom';
5
-
6
- export const useLocationTracking = () => {
7
- const { sendEvent } = useContext(TrackingContext);
8
- const { pathname, search } = useLocation();
9
- const pathWithSearch = `${pathname}${search}`;
10
-
11
- useEffect(() => {
12
- sendEvent('PageView', { path: pathWithSearch });
13
- }, [pathWithSearch, sendEvent]);
14
- };
1
+ import { useContext, useEffect } from 'react';
2
+
3
+ import { TrackingContext } from '.';
4
+ import { useLocation } from 'react-router-dom';
5
+
6
+ export const useLocationTracking = () => {
7
+ const { sendEvent } = useContext(TrackingContext);
8
+ const { pathname, search } = useLocation();
9
+ const pathWithSearch = `${pathname}${search}`;
10
+
11
+ useEffect(() => {
12
+ sendEvent('PageView', { path: pathWithSearch });
13
+ }, [pathWithSearch, sendEvent]);
14
+ };