contentoh-components-library 21.3.5 → 21.3.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 (186) hide show
  1. package/.env.development +3 -0
  2. package/dist/assets/images/customSelect/starIcon.svg +14 -0
  3. package/dist/assets/images/defaultImages/Spinner.gif +0 -0
  4. package/dist/assets/images/defaultImages/notFound.svg +124 -0
  5. package/dist/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +72 -0
  6. package/dist/components/atoms/ButtonFileChooser/index.js +118 -0
  7. package/dist/components/atoms/ButtonFileChooser/styles.js +20 -0
  8. package/dist/components/atoms/ButtonV2/ButtonV2.stories.js +66 -0
  9. package/dist/components/atoms/ButtonV2/index.js +110 -0
  10. package/dist/components/atoms/ButtonV2/styles.js +53 -0
  11. package/dist/components/atoms/CustomIcon/CustomIcon.stories.js +50 -0
  12. package/dist/components/atoms/CustomIcon/index.js +40 -0
  13. package/dist/components/atoms/CustomIcon/styles.js +33 -0
  14. package/dist/components/atoms/IconFile/IconFile.stories.js +48 -0
  15. package/dist/components/atoms/IconFile/index.js +249 -0
  16. package/dist/components/atoms/IconFile/styles.js +23 -0
  17. package/dist/components/atoms/Image/Image.stories.js +73 -0
  18. package/dist/components/atoms/Image/index.js +76 -0
  19. package/dist/components/atoms/Image/styles.js +43 -0
  20. package/dist/components/atoms/ImageLink/ImageLink.stories.js +63 -0
  21. package/dist/components/atoms/ImageLink/index.js +77 -0
  22. package/dist/components/atoms/ImageLink/styles.js +40 -0
  23. package/dist/components/atoms/ImagePreview/ImagePreview.stories.js +70 -0
  24. package/dist/components/atoms/ImagePreview/index.js +222 -0
  25. package/dist/components/atoms/ImagePreview/styles.js +44 -0
  26. package/dist/components/atoms/InputText/InputText.stories.js +60 -0
  27. package/dist/components/atoms/InputText/index.js +66 -0
  28. package/dist/components/atoms/InputText/styles.js +32 -0
  29. package/dist/components/atoms/NotFound/NotFound.stories.js +36 -0
  30. package/dist/components/atoms/NotFound/index.js +75 -0
  31. package/dist/components/atoms/NotFound/styles.js +20 -0
  32. package/dist/components/atoms/ProgressBar/index.js +36 -6
  33. package/dist/components/atoms/ProgressBar/styles.js +11 -3
  34. package/dist/components/atoms/SelectItemV2/SelectItemV2.stories.js +45 -0
  35. package/dist/components/atoms/SelectItemV2/index.js +57 -0
  36. package/dist/components/atoms/SelectItemV2/styles.js +30 -0
  37. package/dist/components/atoms/Tooltip/Tooltip.stories.js +66 -0
  38. package/dist/components/atoms/Tooltip/index.js +72 -0
  39. package/dist/components/atoms/Tooltip/styles.js +20 -0
  40. package/dist/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +66 -0
  41. package/dist/components/molecules/ButtonDownloadFile/index.js +179 -0
  42. package/dist/components/molecules/ButtonDownloadFile/styles.js +23 -0
  43. package/dist/components/molecules/CustomSelect/CustomSelect.stories.js +21 -22
  44. package/dist/components/molecules/CustomSelect/SelectItem.js +10 -1
  45. package/dist/components/molecules/Dropdown/Dropdown.stories.js +98 -0
  46. package/dist/components/molecules/Dropdown/index.js +150 -0
  47. package/dist/components/molecules/Dropdown/styles.js +26 -0
  48. package/dist/components/molecules/HeaderTop/index.js +10 -5
  49. package/dist/components/molecules/HeaderTop/styles.js +1 -1
  50. package/dist/components/molecules/ImageTooltip/ImageTooltip.stories.js +82 -0
  51. package/dist/components/molecules/ImageTooltip/index.js +85 -0
  52. package/dist/components/molecules/ImageTooltip/styles.js +33 -0
  53. package/dist/components/molecules/ProductNameHeader/index.js +5 -3
  54. package/dist/components/molecules/SelectV2/SelectV2.stories.js +119 -0
  55. package/dist/components/molecules/SelectV2/index.js +306 -0
  56. package/dist/components/molecules/SelectV2/styles.js +42 -0
  57. package/dist/components/molecules/SelectV2/test.js +95 -0
  58. package/dist/components/molecules/SelectV2/test.stories.js +27 -0
  59. package/dist/components/organisms/Chat/Chat.stories.js +215 -0
  60. package/dist/components/organisms/Chat/ChatLists/ChatLists.stories.js +83 -0
  61. package/dist/components/organisms/Chat/ChatLists/index.js +160 -0
  62. package/dist/components/organisms/Chat/ChatLists/styles.js +29 -0
  63. package/dist/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +176 -0
  64. package/dist/components/organisms/Chat/ContainerItems/index.js +569 -0
  65. package/dist/components/organisms/Chat/ContainerItems/styles.js +20 -0
  66. package/dist/components/organisms/Chat/ContentChat/ContentChat.stories.js +142 -0
  67. package/dist/components/organisms/Chat/ContentChat/index.js +1422 -0
  68. package/dist/components/organisms/Chat/ContentChat/styles.js +20 -0
  69. package/dist/components/organisms/Chat/Footer/Footer.stories.js +43 -0
  70. package/dist/components/organisms/Chat/Footer/index.js +984 -0
  71. package/dist/components/organisms/Chat/Footer/styles.js +32 -0
  72. package/dist/components/organisms/Chat/Header/Header.stories.js +96 -0
  73. package/dist/components/organisms/Chat/Header/index.js +84 -0
  74. package/dist/components/organisms/Chat/Header/styles.js +20 -0
  75. package/dist/components/organisms/Chat/index.js +327 -0
  76. package/dist/components/organisms/Chat/styles.js +29 -0
  77. package/dist/components/organisms/FullProductNameHeader/index.js +1 -0
  78. package/dist/components/organisms/Modal/Modal.stories.js +66 -0
  79. package/dist/components/organisms/Modal/index.js +95 -0
  80. package/dist/components/organisms/Modal/styles.js +20 -0
  81. package/dist/components/organisms/RangeCalendar/RangeCalendar.stories.js +33 -0
  82. package/dist/components/organisms/RangeCalendar/index.js +148 -0
  83. package/dist/components/organisms/RangeCalendar/styles.js +27 -0
  84. package/dist/components/pages/ProviderProductEdition/index.js +8 -8
  85. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +60 -86
  86. package/dist/components/pages/RetailerProductEdition/index.js +13 -12
  87. package/dist/global-files/fonts.css +6 -0
  88. package/dist/global-files/handle_http.js +383 -0
  89. package/dist/global-files/utils.js +484 -0
  90. package/dist/global-files/variables.js +2 -0
  91. package/dist/index.js +267 -46
  92. package/package.json +12 -1
  93. package/src/assets/images/customSelect/starIcon.svg +14 -0
  94. package/src/assets/images/defaultImages/Spinner.gif +0 -0
  95. package/src/assets/images/defaultImages/notFound.svg +124 -0
  96. package/src/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +47 -0
  97. package/src/components/atoms/ButtonFileChooser/index.js +69 -0
  98. package/src/components/atoms/ButtonFileChooser/styles.js +4 -0
  99. package/src/components/atoms/ButtonV2/ButtonV2.stories.js +53 -0
  100. package/src/components/atoms/ButtonV2/index.js +85 -0
  101. package/src/components/atoms/ButtonV2/styles.js +217 -0
  102. package/src/components/atoms/CustomIcon/CustomIcon.stories.js +36 -0
  103. package/src/components/atoms/CustomIcon/index.js +41 -0
  104. package/src/components/atoms/CustomIcon/styles.js +85 -0
  105. package/src/components/atoms/IconFile/IconFile.stories.js +35 -0
  106. package/src/components/atoms/IconFile/index.js +119 -0
  107. package/src/components/atoms/IconFile/styles.js +67 -0
  108. package/src/components/atoms/Image/Image.stories.js +51 -0
  109. package/src/components/atoms/Image/index.js +55 -0
  110. package/src/components/atoms/Image/styles.js +34 -0
  111. package/src/components/atoms/ImageLink/ImageLink.stories.js +43 -0
  112. package/src/components/atoms/ImageLink/index.js +57 -0
  113. package/src/components/atoms/ImageLink/styles.js +30 -0
  114. package/src/components/atoms/ImagePreview/ImagePreview.stories.js +52 -0
  115. package/src/components/atoms/ImagePreview/index.js +191 -0
  116. package/src/components/atoms/ImagePreview/styles.js +77 -0
  117. package/src/components/atoms/InputText/InputText.stories.js +39 -0
  118. package/src/components/atoms/InputText/index.js +61 -0
  119. package/src/components/atoms/InputText/styles.js +89 -0
  120. package/src/components/atoms/NotFound/NotFound.stories.js +19 -0
  121. package/src/components/atoms/NotFound/index.js +52 -0
  122. package/src/components/atoms/NotFound/styles.js +55 -0
  123. package/src/components/atoms/ProgressBar/index.js +40 -5
  124. package/src/components/atoms/ProgressBar/styles.js +24 -0
  125. package/src/components/atoms/SelectItemV2/SelectItemV2.stories.js +26 -0
  126. package/src/components/atoms/SelectItemV2/index.js +61 -0
  127. package/src/components/atoms/SelectItemV2/styles.js +90 -0
  128. package/src/components/atoms/Tooltip/Tooltip.stories.js +51 -0
  129. package/src/components/atoms/Tooltip/index.js +59 -0
  130. package/src/components/atoms/Tooltip/styles.js +42 -0
  131. package/src/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +54 -0
  132. package/src/components/molecules/ButtonDownloadFile/index.js +111 -0
  133. package/src/components/molecules/ButtonDownloadFile/styles.js +66 -0
  134. package/src/components/molecules/CustomSelect/CustomSelect.stories.js +20 -12
  135. package/src/components/molecules/CustomSelect/SelectItem.js +7 -0
  136. package/src/components/molecules/Dropdown/Dropdown.stories.js +103 -0
  137. package/src/components/molecules/Dropdown/index.js +150 -0
  138. package/src/components/molecules/Dropdown/styles.js +75 -0
  139. package/src/components/molecules/HeaderTop/index.js +11 -6
  140. package/src/components/molecules/HeaderTop/styles.js +4 -0
  141. package/src/components/molecules/ImageTooltip/ImageTooltip.stories.js +68 -0
  142. package/src/components/molecules/ImageTooltip/index.js +63 -0
  143. package/src/components/molecules/ImageTooltip/styles.js +18 -0
  144. package/src/components/molecules/ProductNameHeader/index.js +6 -1
  145. package/src/components/molecules/SelectV2/SelectV2.stories.js +114 -0
  146. package/src/components/molecules/SelectV2/index.js +350 -0
  147. package/src/components/molecules/SelectV2/styles.js +105 -0
  148. package/src/components/molecules/SelectV2/test.js +61 -0
  149. package/src/components/molecules/SelectV2/test.stories.js +10 -0
  150. package/src/components/organisms/Chat/Chat.stories.js +199 -0
  151. package/src/components/organisms/Chat/ChatLists/ChatLists.stories.js +65 -0
  152. package/src/components/organisms/Chat/ChatLists/Rotoplas.jpeg +0 -0
  153. package/src/components/organisms/Chat/ChatLists/THD.png +0 -0
  154. package/src/components/organisms/Chat/ChatLists/index.js +141 -0
  155. package/src/components/organisms/Chat/ChatLists/styles.js +162 -0
  156. package/src/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +142 -0
  157. package/src/components/organisms/Chat/ContainerItems/index.js +549 -0
  158. package/src/components/organisms/Chat/ContainerItems/styles.js +328 -0
  159. package/src/components/organisms/Chat/ContentChat/ContentChat.stories.js +102 -0
  160. package/src/components/organisms/Chat/ContentChat/Rotoplas.jpeg +0 -0
  161. package/src/components/organisms/Chat/ContentChat/THD.png +0 -0
  162. package/src/components/organisms/Chat/ContentChat/index.js +900 -0
  163. package/src/components/organisms/Chat/ContentChat/styles.js +41 -0
  164. package/src/components/organisms/Chat/Footer/Footer.stories.js +22 -0
  165. package/src/components/organisms/Chat/Footer/index.js +669 -0
  166. package/src/components/organisms/Chat/Footer/styles.js +286 -0
  167. package/src/components/organisms/Chat/Header/Header.stories.js +66 -0
  168. package/src/components/organisms/Chat/Header/index.js +94 -0
  169. package/src/components/organisms/Chat/Header/styles.js +49 -0
  170. package/src/components/organisms/Chat/index.js +294 -0
  171. package/src/components/organisms/Chat/styles.js +42 -0
  172. package/src/components/organisms/FullProductNameHeader/index.js +1 -0
  173. package/src/components/organisms/Modal/Modal.stories.js +55 -0
  174. package/src/components/organisms/Modal/index.js +97 -0
  175. package/src/components/organisms/Modal/styles.js +103 -0
  176. package/src/components/organisms/RangeCalendar/RangeCalendar.stories.js +16 -0
  177. package/src/components/organisms/RangeCalendar/index.js +121 -0
  178. package/src/components/organisms/RangeCalendar/styles.js +883 -0
  179. package/src/components/pages/ProviderProductEdition/index.js +9 -6
  180. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +62 -85
  181. package/src/components/pages/RetailerProductEdition/index.js +12 -10
  182. package/src/global-files/fonts.css +6 -0
  183. package/src/global-files/handle_http.js +231 -0
  184. package/src/global-files/utils.js +309 -0
  185. package/src/global-files/variables.js +2 -0
  186. package/src/index.js +17 -0
@@ -0,0 +1,350 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+ import {
3
+ ClickAwayListener,
4
+ Fade,
5
+ Grow,
6
+ Popper,
7
+ Tooltip as TooltipMUI,
8
+ Zoom,
9
+ } from "@mui/material";
10
+ import { Container, ContainerSelect } from "./styles";
11
+ import React from "react";
12
+ import { ButtonV2 } from "../../atoms/ButtonV2";
13
+ import {
14
+ faCaretDown as IconDownArrow,
15
+ faSearch as IconSearch,
16
+ } from "@fortawesome/free-solid-svg-icons";
17
+ import {
18
+ isArrayEmpty,
19
+ isObject,
20
+ isStringEmpty,
21
+ } from "../../../global-files/utils";
22
+ import { SelectItemV2 } from "../../atoms/SelectItemV2";
23
+ import { InputText } from "../../atoms/InputText";
24
+
25
+ export const SelectV2 = (props) => {
26
+ const {
27
+ items /* [
28
+ {
29
+ label: string,
30
+ value: string | number,
31
+ } ,
32
+ ...
33
+ ] */,
34
+ initialSelectedItems, // { value: null , ... } -> value = string | number
35
+ triggerType, // (string) "hover" | "click"
36
+ selectButton /* {
37
+ className: string,
38
+ type: (string) tipos validos de ButtonV2,
39
+ transparent: boolean,
40
+ disabled: boolean,
41
+ label: string ,
42
+ size: number ,
43
+ } */,
44
+ defaultItem /* {
45
+ label: string,
46
+ itemType: (string) "checkbox" | "marginCheckbox" | "labelOnly"
47
+ showLabelInSelect: boolean, cuando esta seleccionado ver label en el btnSelect??
48
+ } */,
49
+ inputSearch /* {
50
+ className: string,
51
+ defaultText: string ,
52
+ } */,
53
+ maxWidthSelect, // string
54
+ maxWidthDropdown, // string
55
+ maxHeightDropdown, // string
56
+ maxWidthItems, // string
57
+ alignmentItemsOverflow, // (string) "columns" | "rows" -> por default "rows"
58
+ typeSelectItems, // (string) "checkbox" | "marginCheckbox" | "labelOnly"
59
+ multiple, // (boolean) se permite multiple seleccion??
60
+ borderType, // (string) "rectangle" | "oval" -> por default oval
61
+ classNameSelect, // (string) clase del container select
62
+ classNameDropdown, // (string) clase del contenedor tooltip
63
+ positionDropdown, // (string) posicion del contenedor tooltip (values en object positions)
64
+ onChange, // (selectedItems: {}) = {} obj con los values de los items seleccionados
65
+ } = props;
66
+ const positions = {
67
+ topStart: "top-start",
68
+ topEnd: "top-end",
69
+ topCenter: "top",
70
+
71
+ rightStart: "right-start",
72
+ rightEnd: "right-end",
73
+ rightCenter: "right",
74
+
75
+ bottomStart: "bottom-start",
76
+ bottomEnd: "bottom-end",
77
+ bottomCenter: "bottom",
78
+
79
+ leftStart: "left-start",
80
+ leftEnd: "left-end",
81
+ leftCenter: "left",
82
+ };
83
+ const [selectedItems, setSelectedItems] = useState(); // { .. }
84
+ const [customItems, setCustomItems] = useState([]);
85
+ const [showDropdown, setShowDropdown] = useState(false);
86
+ const [labelSelect, setLabelSelect] = useState("Sin titulo");
87
+ const [textInputSearch, setTextInputSearch] = useState("");
88
+
89
+ const refInputTextSearch = useRef();
90
+
91
+ // cada que cambie la lista de items
92
+ useEffect(() => {
93
+ if (isArrayEmpty(items) || !isObject(initialSelectedItems)) {
94
+ setSelectedItems({});
95
+ renderItems();
96
+ renderLabelSelect();
97
+ return;
98
+ }
99
+ // items iniciales seleccionados
100
+ if (!multiple) {
101
+ const values = Object.keys(initialSelectedItems);
102
+ if (values.length) setSelectedItems({ [values[0]]: null });
103
+ else setSelectedItems({});
104
+ } else {
105
+ setSelectedItems(initialSelectedItems);
106
+ }
107
+ renderItems();
108
+ renderLabelSelect();
109
+ }, [items]);
110
+
111
+ // cada que cambien los items seleccionados
112
+ useEffect(() => {
113
+ if (!isObject(selectedItems)) return;
114
+ renderItems();
115
+ renderLabelSelect();
116
+ }, [selectedItems]);
117
+
118
+ // evento click de cada item de la lista
119
+ const onClickItem = (isSelected, value) => {
120
+ let selectedItemsCopy = { ...selectedItems };
121
+ if (isSelected) {
122
+ multiple
123
+ ? (selectedItemsCopy[value] = null)
124
+ : (selectedItemsCopy = { [value]: null });
125
+ } else delete selectedItemsCopy[value];
126
+ setSelectedItems(selectedItemsCopy);
127
+ onChange && onChange(selectedItemsCopy);
128
+ };
129
+
130
+ const onClickSearch = () => {
131
+ setTextInputSearch(textInputSearch.trim());
132
+ refInputTextSearch?.current && refInputTextSearch.current.blur();
133
+ renderItems(textInputSearch.trim());
134
+ };
135
+
136
+ const renderLabelSelect = () => {
137
+ if (!isObject(selectedItems)) return;
138
+ const selectedItemsCopy = Object.keys(selectedItems);
139
+ if (selectedItemsCopy.length > 1) {
140
+ setLabelSelect("Personalizado");
141
+ } else if (selectedItemsCopy.length === 1) {
142
+ let labelItem = undefined;
143
+ for (const item of items) {
144
+ if (item.value == selectedItemsCopy[0]) {
145
+ labelItem = item.label;
146
+ break;
147
+ }
148
+ }
149
+ !isStringEmpty(labelItem)
150
+ ? setLabelSelect(labelItem)
151
+ : setLabelSelect("Sin titulo");
152
+ } else {
153
+ if (
154
+ !isStringEmpty(defaultItem?.label) &&
155
+ defaultItem?.showLabelInSelect
156
+ ) {
157
+ setLabelSelect(defaultItem.label);
158
+ } else if (!isStringEmpty(selectButton?.label)) {
159
+ setLabelSelect(selectButton.label);
160
+ } else {
161
+ setLabelSelect("Sin titulo");
162
+ }
163
+ }
164
+ };
165
+
166
+ const renderItems = (textSearch = "") => {
167
+ if (isArrayEmpty(items)) setCustomItems([]);
168
+ setCustomItems(
169
+ items.map((item, index) => {
170
+ if (
171
+ !isStringEmpty(textSearch) &&
172
+ !item.label
173
+ .trim()
174
+ .toLowerCase()
175
+ .includes(textSearch.trim().toLowerCase())
176
+ ) {
177
+ return null;
178
+ }
179
+ return (
180
+ <SelectItemV2
181
+ key={classNameSelect + "_item" + index}
182
+ label={item.label}
183
+ value={item.value}
184
+ checkbox={
185
+ typeSelectItems === "checkbox"
186
+ ? true
187
+ : typeSelectItems === "marginCheckbox"
188
+ ? false
189
+ : undefined
190
+ }
191
+ selected={
192
+ isObject(selectedItems) && selectedItems[item.value] !== undefined
193
+ ? true
194
+ : false
195
+ }
196
+ onClick={onClickItem}
197
+ />
198
+ );
199
+ })
200
+ );
201
+ };
202
+
203
+ return (
204
+ <ClickAwayListener
205
+ onClickAway={(event) => {
206
+ if (triggerType !== "hover") setShowDropdown(false);
207
+ }}
208
+ >
209
+ <Container
210
+ className={!isStringEmpty(classNameSelect) ? classNameSelect : ""}
211
+ borderType={borderType}
212
+ maxWidthSelect={maxWidthSelect}
213
+ >
214
+ <TooltipMUI
215
+ placement={positions[positionDropdown] ?? positions.bottomCenter}
216
+ open={triggerType !== "hover" ? showDropdown : undefined}
217
+ arrow={false}
218
+ componentsProps={{
219
+ tooltip: {
220
+ className:
221
+ "dropdownSelect" +
222
+ (isStringEmpty(classNameDropdown)
223
+ ? ""
224
+ : " " + classNameDropdown),
225
+ },
226
+ popper: { disablePortal: true },
227
+ transition: { timeout: 300 },
228
+ }}
229
+ TransitionComponent={Fade}
230
+ enterDelay={100}
231
+ followCursor={false}
232
+ disableFocusListener
233
+ disableTouchListener
234
+ disableHoverListener={
235
+ triggerType !== "hover" || selectButton?.disabled
236
+ }
237
+ title={
238
+ <>
239
+ {/* input search */}
240
+ {inputSearch && (
241
+ <div
242
+ className={
243
+ "container-inputSearch" +
244
+ (!isStringEmpty(inputSearch?.className)
245
+ ? " " + inputSearch.className
246
+ : "")
247
+ }
248
+ >
249
+ <ButtonV2
250
+ className="buttonSearch"
251
+ type={"gray"}
252
+ transparent
253
+ size={14}
254
+ icon={IconSearch}
255
+ onClick={(event) => {
256
+ if (
257
+ isStringEmpty(textInputSearch) &&
258
+ refInputTextSearch?.current
259
+ ) {
260
+ setTextInputSearch("");
261
+ refInputTextSearch.current.focus();
262
+ } else {
263
+ onClickSearch();
264
+ }
265
+ }}
266
+ />
267
+
268
+ <InputText
269
+ className="inputSearch"
270
+ type="black"
271
+ transparent
272
+ size={12}
273
+ placeHolder={
274
+ isStringEmpty(inputSearch?.defaultText)
275
+ ? "Texto a buscar"
276
+ : inputSearch.defaultText
277
+ }
278
+ text={textInputSearch}
279
+ onChangeText={(newValue) => setTextInputSearch(newValue)}
280
+ onEnter={(event) => onClickSearch()}
281
+ refInputText={refInputTextSearch}
282
+ />
283
+ </div>
284
+ )}
285
+
286
+ {/* item por default */}
287
+ {defaultItem && (
288
+ <SelectItemV2
289
+ label={defaultItem.label}
290
+ value={null}
291
+ checkbox={
292
+ defaultItem.itemType === "checkbox"
293
+ ? true
294
+ : defaultItem.itemType === "marginCheckbox"
295
+ ? false
296
+ : undefined
297
+ }
298
+ selected={
299
+ isObject(selectedItems) && Object.keys(selectedItems).length
300
+ ? false
301
+ : true
302
+ }
303
+ onClick={(isSelected, value) => {
304
+ if (
305
+ isObject(selectedItems) &&
306
+ Object.keys(selectedItems).length
307
+ ) {
308
+ setSelectedItems({});
309
+ onChange && onChange({});
310
+ }
311
+ }}
312
+ />
313
+ )}
314
+
315
+ {/* lista de items */}
316
+ <div className="container-items">{customItems}</div>
317
+ </>
318
+ }
319
+ >
320
+ <ContainerSelect
321
+ className={"container-buttonSelect"}
322
+ maxWidthDropdown={maxWidthDropdown}
323
+ maxHeightDropdown={maxHeightDropdown}
324
+ alignmentItemsOverflow={alignmentItemsOverflow}
325
+ maxWidthItems={maxWidthItems}
326
+ >
327
+ <ButtonV2
328
+ className={
329
+ "buttonSelect" +
330
+ (!isStringEmpty(selectButton?.className)
331
+ ? " " + selectButton.className
332
+ : "")
333
+ }
334
+ disabled={selectButton?.disabled}
335
+ type={selectButton?.type}
336
+ transparent={selectButton?.transparent}
337
+ label={labelSelect}
338
+ size={selectButton?.size}
339
+ icon={IconDownArrow}
340
+ iconPosition="end"
341
+ onClick={(event) => {
342
+ if (triggerType !== "hover") setShowDropdown((prev) => !prev);
343
+ }}
344
+ />
345
+ </ContainerSelect>
346
+ </TooltipMUI>
347
+ </Container>
348
+ </ClickAwayListener>
349
+ );
350
+ };
@@ -0,0 +1,105 @@
1
+ import { FontFamily } from "../../../global-files/variables";
2
+ import styled from "styled-components";
3
+
4
+ export const Container = styled.div`
5
+ width: fit-content;
6
+ max-width: ${({ maxWidthSelect }) =>
7
+ maxWidthSelect ? maxWidthSelect : "unset"};
8
+ //border: 1px solid red;
9
+ border-radius: ${({ borderType }) => {
10
+ return borderType?.toLowerCase() === "rectangle"
11
+ ? "6px"
12
+ : borderType?.toLowerCase() === "oval"
13
+ ? "17px"
14
+ : "0px"; // default none
15
+ }};
16
+ `;
17
+
18
+ export const ContainerSelect = styled.div`
19
+ width: 100%;
20
+ border-radius: inherit;
21
+
22
+ .buttonSelect {
23
+ width: 100%;
24
+ border-radius: inherit;
25
+
26
+ .button {
27
+ padding: 10px 16px;
28
+ gap: 10px;
29
+ .icon {
30
+ font-size: 13px;
31
+ }
32
+ }
33
+ }
34
+
35
+ + .MuiTooltip-popper {
36
+ background-color: transparent;
37
+
38
+ .dropdownSelect {
39
+ --background: white;
40
+ box-shadow: 0px 0px 10px 1px gray;
41
+ background-color: var(--background);
42
+ padding: 0px 0px;
43
+ border-radius: 7px;
44
+ display: flex;
45
+ flex-direction: column;
46
+ gap: 0px;
47
+ overflow: hidden;
48
+ max-width: ${({ maxWidthDropdown }) =>
49
+ maxWidthDropdown ? maxWidthDropdown : "400px"};
50
+ max-height: ${({ maxHeightDropdown }) =>
51
+ maxHeightDropdown ? maxHeightDropdown : "80vh"};
52
+
53
+ .container-inputSearch {
54
+ width: 100%;
55
+ display: flex;
56
+ flex-direction: row;
57
+ flex-wrap: nowrap;
58
+ align-items: center;
59
+ gap: 0px;
60
+ padding: 0px 10px 8px 10px;
61
+ border-bottom: 1px solid #f0f0f0;
62
+
63
+ .inputSearch {
64
+ padding-left: 8px;
65
+ flex-grow: 2;
66
+ }
67
+ }
68
+
69
+ .selectItemV2 {
70
+ width: 100%;
71
+
72
+ .button {
73
+ justify-content: flex-start;
74
+ }
75
+ }
76
+
77
+ .container-items {
78
+ flex-grow: 2;
79
+ display: flex;
80
+ flex-direction: column;
81
+ flex-wrap: ${({ alignmentItemsOverflow }) =>
82
+ alignmentItemsOverflow === "columns" ? "wrap" : "nowrap"};
83
+ overflow: auto;
84
+
85
+ .selectItemV2 {
86
+ width: ${({ maxWidthItems }) =>
87
+ maxWidthItems ? maxWidthItems : "100%"};
88
+ }
89
+ }
90
+ }
91
+
92
+ &[data-popper-placement*="bottom"] .dropdownSelect {
93
+ margin-top: 10px;
94
+ }
95
+ &[data-popper-placement*="top"] .dropdownSelect {
96
+ margin-bottom: 10px;
97
+ }
98
+ &[data-popper-placement*="left"] .dropdownSelect {
99
+ margin-right: 10px;
100
+ }
101
+ &[data-popper-placement*="right"] .dropdownSelect {
102
+ margin-left: 10px;
103
+ }
104
+ }
105
+ `;
@@ -0,0 +1,61 @@
1
+ import { useEffect, useState } from "react";
2
+ import { SelectV2 } from ".";
3
+
4
+ export const TestSelectV2 = () => {
5
+ const [items, setItems] = useState([
6
+ { label: "item 1", value: 1 },
7
+ { label: "item 2", value: 2 },
8
+ { label: "item 3", value: 3 },
9
+ { label: "item 4", value: 4 },
10
+ ]);
11
+ const [selected, setSelected] = useState({
12
+ 2: null,
13
+ 4: null,
14
+ });
15
+
16
+ return (
17
+ <>
18
+ <SelectV2
19
+ items={items}
20
+ initialSelectedItems={undefined}
21
+ triggerType={"hover"}
22
+ selectButton={{
23
+ type: "whiteS3",
24
+ transparent: true,
25
+ disabled: false,
26
+ label: "Prueba select",
27
+ size: 12,
28
+ }}
29
+ defaultItem={{
30
+ label: "default opcion",
31
+ itemType: "labelOnly",
32
+ showLabelInSelect: true,
33
+ }}
34
+ inputSearch={{
35
+ defaultText: "Buscar",
36
+ }}
37
+ typeSelectItems={"checkbox"}
38
+ multiple={false}
39
+ borderType={"oval"}
40
+ onChange={(selectedItems) => {
41
+ console.log("onChange:", selectedItems);
42
+ setSelected(selectedItems);
43
+ }}
44
+ />
45
+
46
+ <button
47
+ onClick={(event) => {
48
+ setItems([
49
+ { label: "item 1", value: 1 },
50
+ { label: "item 2", value: 2 },
51
+ { label: "item 3", value: 3 },
52
+ { label: "item 4", value: 4 },
53
+ { label: "item 5", value: 5 },
54
+ ]);
55
+ }}
56
+ >
57
+ Refresh lista
58
+ </button>
59
+ </>
60
+ );
61
+ };
@@ -0,0 +1,10 @@
1
+ import { TestSelectV2 } from "./test";
2
+
3
+ export default {
4
+ title: "Components/molecules/SelectV2/TestSelectV2",
5
+ component: TestSelectV2,
6
+ };
7
+
8
+ const Template = (args) => <TestSelectV2 {...args} />;
9
+
10
+ export const Test = Template.bind({});