kelt-ui-kit-react 1.2.4 → 1.2.6

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 (215) hide show
  1. package/README.md +46 -46
  2. package/dist/App.d.ts +3 -2
  3. package/dist/App.menu.d.ts +10 -10
  4. package/dist/App.routes.d.ts +1 -1
  5. package/dist/_core/hooks/ImageChecker.d.ts +6 -5
  6. package/dist/_core/hooks/useIsMobile.d.ts +1 -1
  7. package/dist/action/Action.view.d.ts +1 -1
  8. package/dist/action/ButtonAction.d.ts +9 -8
  9. package/dist/badge/Badge.d.ts +9 -8
  10. package/dist/badge/Badge.view.d.ts +1 -1
  11. package/dist/button/Button.d.ts +2 -1
  12. package/dist/button/Button.view.d.ts +1 -1
  13. package/dist/button/button.interface.d.ts +18 -17
  14. package/dist/button/buttonActions/ButtonActions.d.ts +11 -10
  15. package/dist/card/Card.d.ts +13 -12
  16. package/dist/card/Card.view.d.ts +1 -1
  17. package/dist/card/card.interface.d.ts +10 -10
  18. package/dist/card/cardAction/CardAction.d.ts +14 -13
  19. package/dist/card/cardAction.interface.d.ts +9 -8
  20. package/dist/card/hook/useCardInteractions.d.ts +8 -8
  21. package/dist/carousel/Carousel.d.ts +15 -14
  22. package/dist/carousel/Carousel.view.d.ts +1 -1
  23. package/dist/damier/Damier.d.ts +10 -9
  24. package/dist/damier/Damier.view.d.ts +1 -1
  25. package/dist/damier/damierCell/DamierCell.d.ts +7 -6
  26. package/dist/damier/damierCell/damierCell.interface.d.ts +6 -6
  27. package/dist/dataTable/DataTable.d.ts +18 -17
  28. package/dist/dataTable/DataTable.view.d.ts +1 -1
  29. package/dist/dataTable/dataTable.interface.d.ts +32 -30
  30. package/dist/datePicker/DatePicker.d.ts +8 -7
  31. package/dist/datePicker/DatePicker.view.d.ts +1 -1
  32. package/dist/expands/Expands.d.ts +10 -9
  33. package/dist/expands/Expands.view.d.ts +1 -1
  34. package/dist/expands/expand/expand.d.ts +9 -8
  35. package/dist/expands/expand/expand.interface.d.ts +9 -9
  36. package/dist/filAriane/FilAriane.d.ts +9 -8
  37. package/dist/filAriane/FilAriane.view.d.ts +1 -1
  38. package/dist/filAriane/filAriane.interface.d.ts +6 -6
  39. package/dist/form/Form.d.ts +24 -23
  40. package/dist/form/Form.view.d.ts +1 -1
  41. package/dist/form/form.enum.d.ts +11 -11
  42. package/dist/form/form.interface.d.ts +30 -29
  43. package/dist/form/textArea/TextArea.d.ts +13 -12
  44. package/dist/form/textArea/TextArea.view.d.ts +1 -1
  45. package/dist/grid/Grid.d.ts +8 -7
  46. package/dist/grid/Grid.view.d.ts +1 -1
  47. package/dist/grid/col/Col.d.ts +10 -10
  48. package/dist/grid/col/colStyled/ColStyled.d.ts +9 -9
  49. package/dist/grid/container/Container.d.ts +6 -5
  50. package/dist/grid/grid.interface.d.ts +8 -8
  51. package/dist/grid/row/Row.d.ts +8 -7
  52. package/dist/header/Header.d.ts +2 -1
  53. package/dist/header/Header.view.d.ts +1 -1
  54. package/dist/header/header.interface.d.ts +9 -9
  55. package/dist/home/Home.d.ts +1 -1
  56. package/dist/icon/Icon.d.ts +2 -1
  57. package/dist/icon/Icons.view.d.ts +1 -1
  58. package/dist/icon/icon.interface.d.ts +5 -4
  59. package/dist/icon/iconSize.enum.d.ts +7 -7
  60. package/dist/index.d.ts +32 -31
  61. package/dist/index.html +18 -18
  62. package/dist/index.js +66 -65
  63. package/dist/loader/Loader.d.ts +8 -7
  64. package/dist/loader/Loader.view.d.ts +1 -1
  65. package/dist/main.d.ts +1 -0
  66. package/dist/manifest.json +25 -25
  67. package/dist/menus/Menus.d.ts +6 -5
  68. package/dist/menus/Menus.view.d.ts +1 -1
  69. package/dist/menus/menu/Menu.d.ts +7 -6
  70. package/dist/menus/menu/menu.interface.d.ts +10 -10
  71. package/dist/modal/Modal.d.ts +13 -12
  72. package/dist/modal/Modal.view.d.ts +1 -1
  73. package/dist/notFound/NotFound.d.ts +1 -1
  74. package/dist/overlayPanel/OverlayPanel.d.ts +19 -18
  75. package/dist/overlayPanel/OverlayPanel.view.d.ts +1 -1
  76. package/dist/overlayPanel/overlay.context.d.ts +10 -9
  77. package/dist/overlayPanel/overlayPanelStyled/OverlayPanelStyled.d.ts +7 -7
  78. package/dist/quantity/Quantity.d.ts +11 -10
  79. package/dist/robots.txt +3 -3
  80. package/dist/search/Search.d.ts +22 -21
  81. package/dist/search/Search.view.d.ts +1 -1
  82. package/dist/select/Select.d.ts +14 -13
  83. package/dist/select/Select.view.d.ts +1 -1
  84. package/dist/select/selectOption.interface.d.ts +4 -4
  85. package/dist/sidebar/Sidebar.d.ts +13 -12
  86. package/dist/sidebar/Sidebar.view.d.ts +1 -1
  87. package/dist/sidebarData/SidebarData.d.ts +7 -6
  88. package/dist/sidebarData/SidebarData.view.d.ts +1 -1
  89. package/dist/style.css +1 -1
  90. package/dist/toaster/Toaster.d.ts +2 -1
  91. package/dist/toaster/Toaster.view.d.ts +1 -1
  92. package/dist/toaster/store/useToasterStore.d.ts +18 -18
  93. package/index.html +19 -19
  94. package/package.json +55 -55
  95. package/public/index.html +18 -18
  96. package/public/manifest.json +25 -25
  97. package/public/robots.txt +3 -3
  98. package/src/App.css +11 -11
  99. package/src/App.menu.tsx +209 -209
  100. package/src/App.routes.tsx +16 -16
  101. package/src/App.tsx +28 -28
  102. package/src/_core/hooks/ImageChecker.tsx +26 -26
  103. package/src/_core/hooks/useIsMobile.ts +18 -18
  104. package/src/action/Action.view.tsx +21 -21
  105. package/src/action/ButtonAction.tsx +32 -32
  106. package/src/action/action.css +20 -20
  107. package/src/badge/Badge.tsx +34 -34
  108. package/src/badge/Badge.view.tsx +15 -15
  109. package/src/badge/badge.css +55 -55
  110. package/src/button/Button.tsx +44 -44
  111. package/src/button/Button.view.tsx +61 -61
  112. package/src/button/button.css +53 -53
  113. package/src/button/button.interface.tsx +20 -20
  114. package/src/button/buttonActions/ButtonActions.tsx +101 -101
  115. package/src/card/Card.tsx +125 -125
  116. package/src/card/Card.view.tsx +73 -73
  117. package/src/card/card.css +145 -145
  118. package/src/card/card.interface.tsx +9 -9
  119. package/src/card/cardAction/CardAction.tsx +135 -135
  120. package/src/card/cardAction/cardAction.css +10 -10
  121. package/src/card/cardAction.interface.tsx +10 -10
  122. package/src/card/hook/useCardInteractions.tsx +30 -30
  123. package/src/carousel/Carousel.css +44 -44
  124. package/src/carousel/Carousel.tsx +115 -115
  125. package/src/carousel/Carousel.view.tsx +13 -13
  126. package/src/damier/Damier.tsx +55 -55
  127. package/src/damier/Damier.view.tsx +31 -31
  128. package/src/damier/damier.css +44 -44
  129. package/src/damier/damierCell/DamierCell.tsx +18 -18
  130. package/src/damier/damierCell/damierCell.interface.tsx +5 -5
  131. package/src/dataTable/DataTable.tsx +242 -241
  132. package/src/dataTable/DataTable.view.tsx +59 -59
  133. package/src/dataTable/dataTable.css +17 -17
  134. package/src/dataTable/dataTable.interface.ts +30 -29
  135. package/src/datePicker/DatePicker.tsx +110 -110
  136. package/src/datePicker/DatePicker.view.tsx +9 -9
  137. package/src/datePicker/datePicker.css +77 -77
  138. package/src/expands/Expands.tsx +42 -42
  139. package/src/expands/Expands.view.tsx +90 -90
  140. package/src/expands/expand/expand.interface.tsx +8 -8
  141. package/src/expands/expand/expand.tsx +75 -75
  142. package/src/expands/expands.css +97 -97
  143. package/src/filAriane/FilAriane.tsx +57 -57
  144. package/src/filAriane/FilAriane.view.tsx +28 -28
  145. package/src/filAriane/filAriane.css +22 -22
  146. package/src/filAriane/filAriane.interface.tsx +6 -6
  147. package/src/form/Form.tsx +175 -175
  148. package/src/form/Form.view.tsx +47 -47
  149. package/src/form/form.css +37 -37
  150. package/src/form/form.enum.ts +11 -11
  151. package/src/form/form.interface.tsx +31 -31
  152. package/src/form/textArea/TextArea.tsx +53 -53
  153. package/src/form/textArea/TextArea.view.tsx +34 -34
  154. package/src/form/textArea/textArea.css +9 -9
  155. package/src/grid/Grid.tsx +21 -21
  156. package/src/grid/Grid.view.tsx +24 -24
  157. package/src/grid/col/Col.tsx +15 -15
  158. package/src/grid/col/colStyled/ColStyled.tsx +41 -41
  159. package/src/grid/container/Container.tsx +8 -8
  160. package/src/grid/container/container.css +5 -5
  161. package/src/grid/grid.interface.tsx +7 -7
  162. package/src/grid/row/Row.tsx +12 -12
  163. package/src/grid/row/row.css +18 -18
  164. package/src/header/Header.tsx +51 -51
  165. package/src/header/Header.view.tsx +5 -5
  166. package/src/header/header.css +26 -26
  167. package/src/header/header.interface.tsx +8 -8
  168. package/src/home/Home.tsx +3 -3
  169. package/src/icon/Icon.tsx +6 -6
  170. package/src/icon/Icons.view.tsx +29 -29
  171. package/src/icon/icon.css +20 -20
  172. package/src/icon/icon.interface.tsx +6 -6
  173. package/src/icon/iconSize.enum.ts +7 -7
  174. package/src/index.css +502 -502
  175. package/src/index.ts +33 -33
  176. package/src/loader/Loader.tsx +37 -37
  177. package/src/loader/Loader.view.tsx +20 -20
  178. package/src/loader/loader.css +30 -30
  179. package/src/main.tsx +10 -10
  180. package/src/menus/Menus.tsx +42 -42
  181. package/src/menus/Menus.view.tsx +39 -39
  182. package/src/menus/menu/Menu.tsx +17 -17
  183. package/src/menus/menu/menu.interface.tsx +9 -9
  184. package/src/menus/menus.css +47 -47
  185. package/src/modal/Modal.tsx +53 -53
  186. package/src/modal/Modal.view.tsx +25 -25
  187. package/src/modal/modal.css +71 -70
  188. package/src/notFound/NotFound.tsx +3 -3
  189. package/src/overlayPanel/OverlayPanel.tsx +189 -189
  190. package/src/overlayPanel/OverlayPanel.view.tsx +25 -25
  191. package/src/overlayPanel/overlay.context.tsx +28 -28
  192. package/src/overlayPanel/overlayPanel.css +35 -35
  193. package/src/overlayPanel/overlayPanelStyled/OverlayPanelStyled.tsx +18 -18
  194. package/src/quantity/Quantity.tsx +103 -103
  195. package/src/quantity/quantity.css +26 -26
  196. package/src/search/Search.tsx +161 -161
  197. package/src/search/Search.view.tsx +14 -14
  198. package/src/search/search.css +59 -59
  199. package/src/select/Select.tsx +53 -53
  200. package/src/select/Select.view.tsx +71 -71
  201. package/src/select/select.css +51 -51
  202. package/src/select/selectOption.interface.ts +4 -4
  203. package/src/sidebar/Sidebar.tsx +111 -111
  204. package/src/sidebar/Sidebar.view.tsx +17 -17
  205. package/src/sidebar/sidebar.css +87 -87
  206. package/src/sidebarData/SidebarData.tsx +19 -19
  207. package/src/sidebarData/SidebarData.view.tsx +19 -19
  208. package/src/sidebarData/sidebarData.css +27 -27
  209. package/src/toaster/Toaster.tsx +47 -47
  210. package/src/toaster/Toaster.view.tsx +3 -3
  211. package/src/toaster/store/useToasterStore.tsx +39 -39
  212. package/src/toaster/toaster.css +57 -57
  213. package/tsconfig.json +28 -28
  214. package/vite.config.ts +20 -20
  215. package/vite.config.ts.timestamp-1733262892554-a13dfef6e8a29.mjs +24 -24
@@ -1,101 +1,101 @@
1
- import { useCallback, useMemo, useRef, useState } from "react";
2
- import { Icon } from "../../icon/Icon";
3
- import { IconSizeEnum } from "../../icon/iconSize.enum";
4
- import { MenuInterface } from "../../menus/menu/menu.interface";
5
- import { Menus } from "../../menus/Menus";
6
- import { OverlayPanel, PositionOverlay } from "../../overlayPanel/OverlayPanel";
7
- import { Button } from "../Button";
8
- import { buttonActionInterface } from "../button.interface";
9
-
10
- export type ButtonActionsProps = {
11
- className?: string;
12
- onClick?: (e: React.MouseEvent) => void;
13
- title: string;
14
- actions?: buttonActionInterface[];
15
- classIcon?: string;
16
- positionActions?: PositionOverlay;
17
- disabled?: boolean;
18
- };
19
- export const ButtonActions = ({
20
- className,
21
- onClick,
22
- title,
23
- actions,
24
- positionActions = "topRight",
25
- disabled = false,
26
- }: ButtonActionsProps) => {
27
- const handleClick = (e: React.MouseEvent) => {
28
- e.preventDefault();
29
- if (onClick) {
30
- onClick(e);
31
- }
32
- };
33
- const refButton = useRef<HTMLDivElement>(null);
34
- const [openOverlay, setOpenOverlay] = useState(false);
35
- const onClickActions = useCallback(
36
- (e: React.MouseEvent) => {
37
- e.stopPropagation();
38
- if (actions) setOpenOverlay(!openOverlay);
39
- },
40
- [openOverlay, setOpenOverlay]
41
- );
42
- const overlayMenu: MenuInterface[] = useMemo(() => {
43
- if (!actions) return [];
44
- return actions.map((a, index) => {
45
- return {
46
- id: a.id ?? index,
47
- icon: a.icon,
48
- name: a.label,
49
- children: (
50
- <Button
51
- key={index}
52
- classIcon={a.icon}
53
- sizeIcon={IconSizeEnum.LARGE}
54
- onClick={(e) => {
55
- e.stopPropagation();
56
- closeOverlay();
57
- a.onClick && a.onClick(a);
58
- }}
59
- title={a.label || ""}
60
- />
61
- ),
62
- };
63
- }) as MenuInterface[];
64
- }, [actions]);
65
- const closeOverlay = useCallback(() => {
66
- setOpenOverlay(false);
67
- }, [setOpenOverlay]);
68
- return (
69
- <>
70
- <button
71
- disabled={disabled}
72
- type="submit"
73
- onClick={(e) => handleClick(e)}
74
- className={` ${className} button-actions`}
75
- >
76
- <span className="mr-2 flex-1">{title}</span>
77
-
78
- <span
79
- className="ml-2"
80
- ref={refButton}
81
- onClick={(e) => onClickActions(e)}
82
- >
83
- <Icon classIcon="bi-chevron-up" />
84
- </span>
85
- </button>
86
- {actions && openOverlay && refButton.current && (
87
- <OverlayPanel
88
- show={openOverlay}
89
- position={positionActions}
90
- closeOverlay={setOpenOverlay}
91
- referenceElement={refButton.current}
92
- children={
93
- <div>
94
- <Menus className="card-action-menu" items={overlayMenu} />
95
- </div>
96
- }
97
- />
98
- )}
99
- </>
100
- );
101
- };
1
+ import { useCallback, useMemo, useRef, useState } from "react";
2
+ import { Icon } from "../../icon/Icon";
3
+ import { IconSizeEnum } from "../../icon/iconSize.enum";
4
+ import { MenuInterface } from "../../menus/menu/menu.interface";
5
+ import { Menus } from "../../menus/Menus";
6
+ import { OverlayPanel, PositionOverlay } from "../../overlayPanel/OverlayPanel";
7
+ import { Button } from "../Button";
8
+ import { buttonActionInterface } from "../button.interface";
9
+
10
+ export type ButtonActionsProps = {
11
+ className?: string;
12
+ onClick?: (e: React.MouseEvent) => void;
13
+ title: string;
14
+ actions?: buttonActionInterface[];
15
+ classIcon?: string;
16
+ positionActions?: PositionOverlay;
17
+ disabled?: boolean;
18
+ };
19
+ export const ButtonActions = ({
20
+ className,
21
+ onClick,
22
+ title,
23
+ actions,
24
+ positionActions = "topRight",
25
+ disabled = false,
26
+ }: ButtonActionsProps) => {
27
+ const handleClick = (e: React.MouseEvent) => {
28
+ e.preventDefault();
29
+ if (onClick) {
30
+ onClick(e);
31
+ }
32
+ };
33
+ const refButton = useRef<HTMLDivElement>(null);
34
+ const [openOverlay, setOpenOverlay] = useState(false);
35
+ const onClickActions = useCallback(
36
+ (e: React.MouseEvent) => {
37
+ e.stopPropagation();
38
+ if (actions) setOpenOverlay(!openOverlay);
39
+ },
40
+ [openOverlay, setOpenOverlay]
41
+ );
42
+ const overlayMenu: MenuInterface[] = useMemo(() => {
43
+ if (!actions) return [];
44
+ return actions.map((a, index) => {
45
+ return {
46
+ id: a.id ?? index,
47
+ icon: a.icon,
48
+ name: a.label,
49
+ children: (
50
+ <Button
51
+ key={index}
52
+ classIcon={a.icon}
53
+ sizeIcon={IconSizeEnum.LARGE}
54
+ onClick={(e) => {
55
+ e.stopPropagation();
56
+ closeOverlay();
57
+ a.onClick && a.onClick(a);
58
+ }}
59
+ title={a.label || ""}
60
+ />
61
+ ),
62
+ };
63
+ }) as MenuInterface[];
64
+ }, [actions]);
65
+ const closeOverlay = useCallback(() => {
66
+ setOpenOverlay(false);
67
+ }, [setOpenOverlay]);
68
+ return (
69
+ <>
70
+ <button
71
+ disabled={disabled}
72
+ type="submit"
73
+ onClick={(e) => handleClick(e)}
74
+ className={` ${className} button-actions`}
75
+ >
76
+ <span className="mr-2 flex-1">{title}</span>
77
+
78
+ <span
79
+ className="ml-2"
80
+ ref={refButton}
81
+ onClick={(e) => onClickActions(e)}
82
+ >
83
+ <Icon classIcon="bi-chevron-up" />
84
+ </span>
85
+ </button>
86
+ {actions && openOverlay && refButton.current && (
87
+ <OverlayPanel
88
+ show={openOverlay}
89
+ position={positionActions}
90
+ closeOverlay={setOpenOverlay}
91
+ referenceElement={refButton.current}
92
+ children={
93
+ <div>
94
+ <Menus className="card-action-menu" items={overlayMenu} />
95
+ </div>
96
+ }
97
+ />
98
+ )}
99
+ </>
100
+ );
101
+ };
package/src/card/Card.tsx CHANGED
@@ -1,125 +1,125 @@
1
- import { useCallback, useState } from "react";
2
- import { Icon } from "../icon/Icon";
3
- import { PositionOverlay } from "../overlayPanel/OverlayPanel";
4
- import "./card.css";
5
- import { CardInterface } from "./card.interface";
6
- import { CardActionInterface } from "./cardAction.interface";
7
- import { CardAction } from "./cardAction/CardAction";
8
- type CardProps = {
9
- item: CardInterface;
10
- actions?: CardActionInterface[];
11
- className?: string;
12
- handleClick?: (item: CardInterface) => void;
13
- onClose?: (item: CardInterface) => void;
14
- children?: JSX.Element;
15
- customAction?: JSX.Element;
16
- positionOverlay?: PositionOverlay;
17
- };
18
-
19
- // Composant Card modifié
20
- export const Card = ({
21
- item,
22
- actions,
23
- className,
24
- handleClick,
25
- onClose,
26
- customAction,
27
- positionOverlay,
28
- children,
29
- }: CardProps): JSX.Element => {
30
- const [cliqueAction, setCliqueAction] = useState(false);
31
- const [openActions, setOpenActions] = useState(false);
32
- const [positions, setPositions] = useState<{ top: number; left: number }>();
33
- const onClickClose = (e: React.MouseEvent, item: CardInterface) => {
34
- e.stopPropagation();
35
- if (onClose) {
36
- onClose(item);
37
- }
38
- };
39
- const onClickCard = useCallback(
40
- (e: React.MouseEvent, item: CardInterface) => {
41
- e.stopPropagation();
42
- if (openActions) {
43
- setPositions(undefined);
44
- return setOpenActions(false);
45
- }
46
- if (
47
- (e.target as HTMLElement).closest(".qte") ||
48
- (e.target as HTMLElement).closest(".card-action-menu button") ||
49
- (e.target as HTMLElement).closest(".card-actions")
50
- ) {
51
- return; // Ne propage pas l'événement si le clic est dans Quantity
52
- }
53
-
54
- setCliqueAction(!cliqueAction);
55
-
56
- if (handleClick && e.button !== 2) {
57
- handleClick(item);
58
- } else {
59
- setPositions({ top: e.clientY, left: e.clientX });
60
- setOpenActions(true);
61
- }
62
- },
63
- [
64
- setCliqueAction,
65
- setPositions,
66
- handleClick,
67
- openActions,
68
- setOpenActions,
69
- cliqueAction,
70
- ]
71
- );
72
-
73
- return (
74
- <div
75
- onContextMenu={(e) => e.preventDefault()}
76
- onMouseDown={(e) => onClickCard(e, item)}
77
- className={`card ${className ?? ""} ${
78
- cliqueAction ? "card--active" : ""
79
- } `}
80
- >
81
- {children}
82
- {!children && (
83
- <>
84
- <div className="card-text d-flex">
85
- {item.image && (
86
- <div className="card-img">
87
- <img src={item.image} alt={"card-image"} />
88
- </div>
89
- )}
90
- {item.title && <div className="card-title">{item.title}</div>}
91
- {item.description && (
92
- <div className="card-content">{item.description}</div>
93
- )}
94
- </div>
95
- <div className="card-footer">
96
- {customAction && (
97
- <div className="card-custom-action">{customAction}</div>
98
- )}
99
- <div className="d-flex flex-1 align-items-center">
100
- {item.prix && <div className="card-prix">{item.prix}</div>}
101
- </div>
102
- </div>
103
- {onClose && (
104
- <div
105
- className="ml-2 cursor-pointer"
106
- onClick={(e) => onClickClose(e, item)}
107
- >
108
- <Icon classIcon="bi-trash3" />
109
- </div>
110
- )}
111
- {actions && (
112
- <CardAction
113
- openActions={openActions}
114
- setOpenActions={setOpenActions}
115
- actions={actions}
116
- item={item}
117
- positions={positions}
118
- positionOverlay={positionOverlay}
119
- />
120
- )}
121
- </>
122
- )}
123
- </div>
124
- );
125
- };
1
+ import { useCallback, useState } from "react";
2
+ import { Icon } from "../icon/Icon";
3
+ import { PositionOverlay } from "../overlayPanel/OverlayPanel";
4
+ import "./card.css";
5
+ import { CardInterface } from "./card.interface";
6
+ import { CardActionInterface } from "./cardAction.interface";
7
+ import { CardAction } from "./cardAction/CardAction";
8
+ type CardProps = {
9
+ item: CardInterface;
10
+ actions?: CardActionInterface[];
11
+ className?: string;
12
+ handleClick?: (item: CardInterface) => void;
13
+ onClose?: (item: CardInterface) => void;
14
+ children?: JSX.Element;
15
+ customAction?: JSX.Element;
16
+ positionOverlay?: PositionOverlay;
17
+ };
18
+
19
+ // Composant Card modifié
20
+ export const Card = ({
21
+ item,
22
+ actions,
23
+ className,
24
+ handleClick,
25
+ onClose,
26
+ customAction,
27
+ positionOverlay,
28
+ children,
29
+ }: CardProps): JSX.Element => {
30
+ const [cliqueAction, setCliqueAction] = useState(false);
31
+ const [openActions, setOpenActions] = useState(false);
32
+ const [positions, setPositions] = useState<{ top: number; left: number }>();
33
+ const onClickClose = (e: React.MouseEvent, item: CardInterface) => {
34
+ e.stopPropagation();
35
+ if (onClose) {
36
+ onClose(item);
37
+ }
38
+ };
39
+ const onClickCard = useCallback(
40
+ (e: React.MouseEvent, item: CardInterface) => {
41
+ e.stopPropagation();
42
+ if (openActions) {
43
+ setPositions(undefined);
44
+ return setOpenActions(false);
45
+ }
46
+ if (
47
+ (e.target as HTMLElement).closest(".qte") ||
48
+ (e.target as HTMLElement).closest(".card-action-menu button") ||
49
+ (e.target as HTMLElement).closest(".card-actions")
50
+ ) {
51
+ return; // Ne propage pas l'événement si le clic est dans Quantity
52
+ }
53
+
54
+ setCliqueAction(!cliqueAction);
55
+
56
+ if (handleClick && e.button !== 2) {
57
+ handleClick(item);
58
+ } else {
59
+ setPositions({ top: e.clientY, left: e.clientX });
60
+ setOpenActions(true);
61
+ }
62
+ },
63
+ [
64
+ setCliqueAction,
65
+ setPositions,
66
+ handleClick,
67
+ openActions,
68
+ setOpenActions,
69
+ cliqueAction,
70
+ ]
71
+ );
72
+
73
+ return (
74
+ <div
75
+ onContextMenu={(e) => e.preventDefault()}
76
+ onMouseDown={(e) => onClickCard(e, item)}
77
+ className={`card ${className ?? ""} ${
78
+ cliqueAction ? "card--active" : ""
79
+ } `}
80
+ >
81
+ {children}
82
+ {!children && (
83
+ <>
84
+ <div className="card-text d-flex">
85
+ {item.image && (
86
+ <div className="card-img">
87
+ <img src={item.image} alt={"card-image"} />
88
+ </div>
89
+ )}
90
+ {item.title && <div className="card-title">{item.title}</div>}
91
+ {item.description && (
92
+ <div className="card-content">{item.description}</div>
93
+ )}
94
+ </div>
95
+ <div className="card-footer">
96
+ {customAction && (
97
+ <div className="card-custom-action">{customAction}</div>
98
+ )}
99
+ <div className="d-flex flex-1 align-items-center">
100
+ {item.prix && <div className="card-prix">{item.prix}</div>}
101
+ </div>
102
+ </div>
103
+ {onClose && (
104
+ <div
105
+ className="ml-2 cursor-pointer"
106
+ onClick={(e) => onClickClose(e, item)}
107
+ >
108
+ <Icon classIcon="bi-trash3" />
109
+ </div>
110
+ )}
111
+ {actions && (
112
+ <CardAction
113
+ openActions={openActions}
114
+ setOpenActions={setOpenActions}
115
+ actions={actions}
116
+ item={item}
117
+ positions={positions}
118
+ positionOverlay={positionOverlay}
119
+ />
120
+ )}
121
+ </>
122
+ )}
123
+ </div>
124
+ );
125
+ };
@@ -1,73 +1,73 @@
1
- import { useCallback, useEffect, useMemo, useState } from "react";
2
- import { Grid } from "../grid/Grid";
3
- import { GridInterface } from "../grid/grid.interface";
4
- import { Quantity } from "../quantity/Quantity";
5
- import { Card } from "./Card";
6
- import { CardInterface } from "./card.interface";
7
- import { CardActionInterface } from "./cardAction.interface";
8
- export const CardView = (): JSX.Element => {
9
- const [actions, setActions] = useState<GridInterface[]>([]);
10
- const mockItems: CardInterface[] = [
11
- {
12
- title: "Client",
13
- image:
14
- "https://www.papapiqueetmamancoud.fr/media/cache/app_product_small_thumbnail_listing_cropped/41/a2/e90184ab12b765859580b529d2ec.jpg",
15
- description: "Description 1",
16
- prix: "59.18 €",
17
- quantity: 12,
18
- },
19
- {
20
- title: "Produits",
21
- prix: "59.18 €",
22
- quantity: 1,
23
- },
24
- {
25
- title: "Total",
26
- description: "Description 3",
27
- quantity: 1,
28
- },
29
- ];
30
- const actionsCard: CardActionInterface[] = useMemo(() => {
31
- return [
32
- {
33
- icon: "bi-trash3",
34
- label: "Supprimer la transaction",
35
- type: "menu",
36
- onClick: (item: CardInterface) => console.log(item),
37
- },
38
- {
39
- icon: "bi-trash3",
40
- label: "Editer la transaction",
41
- type: "menu",
42
- onClick: (item: CardInterface) => console.log(item),
43
- },
44
- {
45
- icon: "bi-pencil",
46
- label: "Editer",
47
- onClick: (item: CardInterface) => console.log(item),
48
- },
49
- ];
50
- }, []);
51
-
52
- const setQuantity = useCallback((item: CardInterface, qte: number) => {
53
- console.log(qte, item);
54
- }, []);
55
- useEffect(() => {
56
- const initActions: GridInterface[] = mockItems.map((item) => {
57
- return {
58
- children: (
59
- <Card
60
- className="card--horizontal"
61
- item={item}
62
- actions={actionsCard}
63
- customAction={
64
- <Quantity pas={1} item={item} setQuantity={setQuantity} />
65
- }
66
- />
67
- ),
68
- };
69
- });
70
- setActions(initActions);
71
- }, [setActions, setQuantity]);
72
- return <Grid items={actions} />;
73
- };
1
+ import { useCallback, useEffect, useMemo, useState } from "react";
2
+ import { Grid } from "../grid/Grid";
3
+ import { GridInterface } from "../grid/grid.interface";
4
+ import { Quantity } from "../quantity/Quantity";
5
+ import { Card } from "./Card";
6
+ import { CardInterface } from "./card.interface";
7
+ import { CardActionInterface } from "./cardAction.interface";
8
+ export const CardView = (): JSX.Element => {
9
+ const [actions, setActions] = useState<GridInterface[]>([]);
10
+ const mockItems: CardInterface[] = [
11
+ {
12
+ title: "Client",
13
+ image:
14
+ "https://www.papapiqueetmamancoud.fr/media/cache/app_product_small_thumbnail_listing_cropped/41/a2/e90184ab12b765859580b529d2ec.jpg",
15
+ description: "Description 1",
16
+ prix: "59.18 €",
17
+ quantity: 12,
18
+ },
19
+ {
20
+ title: "Produits",
21
+ prix: "59.18 €",
22
+ quantity: 1,
23
+ },
24
+ {
25
+ title: "Total",
26
+ description: "Description 3",
27
+ quantity: 1,
28
+ },
29
+ ];
30
+ const actionsCard: CardActionInterface[] = useMemo(() => {
31
+ return [
32
+ {
33
+ icon: "bi-trash3",
34
+ label: "Supprimer la transaction",
35
+ type: "menu",
36
+ onClick: (item: CardInterface) => console.log(item),
37
+ },
38
+ {
39
+ icon: "bi-trash3",
40
+ label: "Editer la transaction",
41
+ type: "menu",
42
+ onClick: (item: CardInterface) => console.log(item),
43
+ },
44
+ {
45
+ icon: "bi-pencil",
46
+ label: "Editer",
47
+ onClick: (item: CardInterface) => console.log(item),
48
+ },
49
+ ];
50
+ }, []);
51
+
52
+ const setQuantity = useCallback((item: CardInterface, qte: number) => {
53
+ console.log(qte, item);
54
+ }, []);
55
+ useEffect(() => {
56
+ const initActions: GridInterface[] = mockItems.map((item) => {
57
+ return {
58
+ children: (
59
+ <Card
60
+ className="card--horizontal"
61
+ item={item}
62
+ actions={actionsCard}
63
+ customAction={
64
+ <Quantity pas={1} item={item} setQuantity={setQuantity} />
65
+ }
66
+ />
67
+ ),
68
+ };
69
+ });
70
+ setActions(initActions);
71
+ }, [setActions, setQuantity]);
72
+ return <Grid items={actions} />;
73
+ };