contentoh-components-library 21.5.34 → 21.5.36

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 (989) hide show
  1. package/.storybook/main.js +10 -10
  2. package/.storybook/preview-head.html +4 -4
  3. package/.storybook/preview.js +9 -9
  4. package/CHANGELOG.md +115 -115
  5. package/README.md +70 -70
  6. package/dist/assets/fonts/avenirnext/AvenirNextLTPro-Bold.otf +0 -0
  7. package/dist/assets/fonts/avenirnext/AvenirNextLTPro-It.otf +0 -0
  8. package/dist/assets/fonts/avenirnext/AvenirNextLTPro-Regular.otf +0 -0
  9. package/dist/assets/fonts/lato/Lato-Bold.ttf +0 -0
  10. package/dist/assets/fonts/lato/Lato-Italic.ttf +0 -0
  11. package/dist/assets/fonts/lato/Lato-Light.ttf +0 -0
  12. package/dist/assets/fonts/lato/Lato-Regular.ttf +0 -0
  13. package/dist/assets/fonts/lato/Lato-Thin.ttf +0 -0
  14. package/dist/assets/fonts/lato/OFL.txt +93 -0
  15. package/dist/assets/fonts/raleway/Raleway-Black.ttf +0 -0
  16. package/dist/assets/fonts/raleway/Raleway-Bold.ttf +0 -0
  17. package/dist/assets/fonts/raleway/Raleway-ExtraBold.ttf +0 -0
  18. package/dist/assets/fonts/raleway/Raleway-Italic.ttf +0 -0
  19. package/dist/assets/fonts/raleway/Raleway-Medium.ttf +0 -0
  20. package/dist/assets/fonts/raleway/Raleway-Regular.ttf +0 -0
  21. package/dist/assets/fonts/raleway/Raleway-SemiBold.ttf +0 -0
  22. package/dist/assets/fonts/roboto/Roboto-Black.ttf +0 -0
  23. package/dist/assets/fonts/roboto/Roboto-BlackItalic.ttf +0 -0
  24. package/dist/assets/fonts/roboto/Roboto-Bold.ttf +0 -0
  25. package/dist/assets/fonts/roboto/Roboto-BoldItalic.ttf +0 -0
  26. package/dist/assets/fonts/roboto/Roboto-Italic.ttf +0 -0
  27. package/dist/assets/fonts/roboto/Roboto-Light.ttf +0 -0
  28. package/dist/assets/fonts/roboto/Roboto-LightItalic.ttf +0 -0
  29. package/dist/assets/fonts/roboto/Roboto-Medium.ttf +0 -0
  30. package/dist/assets/fonts/roboto/Roboto-MediumItalic.ttf +0 -0
  31. package/dist/assets/fonts/roboto/Roboto-Regular.ttf +0 -0
  32. package/dist/assets/fonts/roboto/Roboto-Thin.ttf +0 -0
  33. package/dist/assets/fonts/roboto/Roboto-ThinItalic.ttf +0 -0
  34. package/dist/assets/images/Icons/DownloadIcon.svg +4 -0
  35. package/dist/assets/images/Icons/Spinner.gif +0 -0
  36. package/dist/assets/images/Icons/addv2.svg +8 -0
  37. package/dist/assets/images/Icons/beenhere.svg +9 -0
  38. package/dist/assets/images/Icons/checkv2.svg +8 -0
  39. package/dist/assets/images/Icons/close-magenta.svg +9 -0
  40. package/dist/assets/images/Icons/close.svg +8 -0
  41. package/dist/assets/images/Icons/closeCircle.svg +8 -0
  42. package/dist/assets/images/Icons/delete-forever-red.svg +9 -0
  43. package/dist/assets/images/Icons/delete-forever-white.svg +10 -0
  44. package/dist/assets/images/Icons/edit.svg +8 -0
  45. package/dist/assets/images/Icons/fullscreen.svg +3 -0
  46. package/dist/assets/images/Icons/info.svg +8 -0
  47. package/dist/assets/images/Icons/infoNR.svg +8 -0
  48. package/dist/assets/images/Icons/options.svg +3 -0
  49. package/dist/assets/images/Icons/save-white-gray.svg +9 -0
  50. package/dist/assets/images/Icons/save-white.svg +9 -0
  51. package/dist/assets/images/Icons/save.svg +8 -0
  52. package/dist/assets/images/Icons/search.svg +3 -0
  53. package/dist/assets/images/Icons/settings.svg +8 -0
  54. package/dist/assets/images/Icons/trash.svg +8 -0
  55. package/dist/assets/images/Icons/undo.svg +8 -0
  56. package/dist/assets/images/Icons/upload-file-white.svg +4 -0
  57. package/dist/assets/images/Icons/upload-file.svg +10 -0
  58. package/dist/assets/images/Icons/upload_file.svg +10 -0
  59. package/dist/assets/images/Icons/warningv2.svg +3 -0
  60. package/dist/assets/images/activedFilter/removeFilter.svg +3 -0
  61. package/dist/assets/images/arrow/arrowIcon.svg +3 -0
  62. package/dist/assets/images/arrow/polygon.svg +3 -0
  63. package/dist/assets/images/asignationOptions/availableIcon.svg +3 -0
  64. package/dist/assets/images/asignationOptions/removeAsigned.svg +4 -0
  65. package/dist/assets/images/asignationOptions/requestToProvider.svg +3 -0
  66. package/dist/assets/images/asignationOptions/requestToTeam.svg +3 -0
  67. package/dist/assets/images/card/masterCardIcon.svg +5 -0
  68. package/dist/assets/images/carouselImagesLogin/login2.svg +117 -0
  69. package/dist/assets/images/carouselImagesLogin/login3.svg +147 -0
  70. package/dist/assets/images/carouselImagesLogin/loginImage.svg +301 -0
  71. package/dist/assets/images/checkBox/checked.svg +3 -0
  72. package/dist/assets/images/checkBox/checkrosa.svg +3 -0
  73. package/dist/assets/images/checkBox/checkverde.svg +3 -0
  74. package/dist/assets/images/checkBox/unchecked.svg +3 -0
  75. package/dist/assets/images/componentAssigned/assignedImage1.svg +9 -0
  76. package/dist/assets/images/componentAssigned/assignedImage2.svg +9 -0
  77. package/dist/assets/images/componentAssigned/clock.svg +4 -0
  78. package/dist/assets/images/componentAssigned/flag.svg +3 -0
  79. package/dist/assets/images/customSelect/searchIcon.png +0 -0
  80. package/dist/assets/images/customSelect/starIcon.svg +14 -0
  81. package/dist/assets/images/defaultImages/Spinner.gif +0 -0
  82. package/dist/assets/images/defaultImages/check_circle.svg +10 -0
  83. package/dist/assets/images/defaultImages/defaultProductImage.png +0 -0
  84. package/dist/assets/images/defaultImages/defaultProfileImage.svg +13 -0
  85. package/dist/assets/images/defaultImages/defaultUpdate.png +0 -0
  86. package/dist/assets/images/defaultImages/notFound.svg +124 -0
  87. package/dist/assets/images/dropDownButton/dropDownArrowButton.svg +3 -0
  88. package/dist/assets/images/editField/editField.svg +3 -0
  89. package/dist/assets/images/editField/showPassword.png +0 -0
  90. package/dist/assets/images/flags/highPriority.svg +3 -0
  91. package/dist/assets/images/flags/lowPriority.svg +3 -0
  92. package/dist/assets/images/flags/mediumPriority.svg +3 -0
  93. package/dist/assets/images/flags/noPriority.svg +3 -0
  94. package/dist/assets/images/flagsv2/highPriority.svg +3 -0
  95. package/dist/assets/images/flagsv2/lowPriority.svg +3 -0
  96. package/dist/assets/images/flagsv2/mediumPriority.svg +3 -0
  97. package/dist/assets/images/flagsv2/noPriority.svg +3 -0
  98. package/dist/assets/images/generalButton/Icono AB.svg +14 -0
  99. package/dist/assets/images/generalButton/acceptIcon.svg +3 -0
  100. package/dist/assets/images/generalButton/closeIcon.svg +4 -0
  101. package/dist/assets/images/generalButton/closeIconWhite.svg +4 -0
  102. package/dist/assets/images/generalButton/closeIconv2.svg +4 -0
  103. package/dist/assets/images/generalButton/deleteIcon.svg +13 -0
  104. package/dist/assets/images/generalButton/deleteIconHover.svg +13 -0
  105. package/dist/assets/images/generalButton/downloadIcon.svg +3 -0
  106. package/dist/assets/images/generalButton/gridLayout.svg +3 -0
  107. package/dist/assets/images/generalButton/nullIcon.svg +3 -0
  108. package/dist/assets/images/generalButton/openModal.svg +3 -0
  109. package/dist/assets/images/generalButton/rejectIcon.svg +3 -0
  110. package/dist/assets/images/generalButton/rowLayout.svg +3 -0
  111. package/dist/assets/images/generalButton/saveIcon.svg +3 -0
  112. package/dist/assets/images/generalButton/saveIconHover.svg +3 -0
  113. package/dist/assets/images/generalButton/saveIconpink.svg +3 -0
  114. package/dist/assets/images/generalImage/assigned.svg +14 -0
  115. package/dist/assets/images/generalImage/bags.svg +25 -0
  116. package/dist/assets/images/generalImage/clock.svg +4 -0
  117. package/dist/assets/images/generalImage/flag.svg +3 -0
  118. package/dist/assets/images/genericModal/closeWhite.svg +3 -0
  119. package/dist/assets/images/genericModal/errorModal.svg +3 -0
  120. package/dist/assets/images/genericModal/genericModalCheck.svg +3 -0
  121. package/dist/assets/images/genericModal/genericModalClose.svg +3 -0
  122. package/dist/assets/images/genericModal/genericModalDown.svg +3 -0
  123. package/dist/assets/images/genericModal/genericModalUp.svg +3 -0
  124. package/dist/assets/images/genericModal/genericModalWarning.svg +12 -0
  125. package/dist/assets/images/genericModal/yellowAlert.svg +12 -0
  126. package/dist/assets/images/logo/logoLogin.svg +15 -0
  127. package/dist/assets/images/menuNotification/menuNotificationComment.svg +3 -0
  128. package/dist/assets/images/menuNotification/menuNotificationProduct.svg +3 -0
  129. package/dist/assets/images/menuProfile/logOut.svg +3 -0
  130. package/dist/assets/images/menuProfile/myAccount.svg +3 -0
  131. package/dist/assets/images/menuProfile/settings.svg +3 -0
  132. package/dist/assets/images/modalsSVGs/attributesSent.svg +208 -0
  133. package/dist/assets/images/modalsSVGs/descriptionSent.svg +237 -0
  134. package/dist/assets/images/modalsSVGs/providerSent.svg +445 -0
  135. package/dist/assets/images/modalsSVGs/uploadingImages.svg +148 -0
  136. package/dist/assets/images/productImage/openModal.svg +3 -0
  137. package/dist/assets/images/productNotification/productNotification.svg +3 -0
  138. package/dist/assets/images/profileHeader/profilePicture.svg +9 -0
  139. package/dist/assets/images/providerAndCadena/Cadena.svg +188 -0
  140. package/dist/assets/images/providerAndCadena/LoginContentoh.svg +15 -0
  141. package/dist/assets/images/providerAndCadena/Proveedor.svg +231 -0
  142. package/dist/assets/images/sideMenuButton/contenoh.svg +5 -0
  143. package/dist/assets/images/sideMenuButton/dashboard.svg +5 -0
  144. package/dist/assets/images/sideMenuButton/products.svg +10 -0
  145. package/dist/assets/images/sideMenuButton/providers.svg +10 -0
  146. package/dist/assets/images/sideMenuButton/tasks.svg +3 -0
  147. package/dist/assets/images/sliderToolTip/infoIcon.svg +4 -0
  148. package/dist/assets/images/sliderToolTip/slide1.svg +5 -0
  149. package/dist/assets/images/sliderToolTip/slide2.svg +9 -0
  150. package/dist/assets/images/sliderToolTip/slide21.svg +9 -0
  151. package/dist/assets/images/sliderToolTip/slide22.svg +9 -0
  152. package/dist/assets/images/sliderToolTip/slide23.svg +9 -0
  153. package/dist/assets/images/sliderToolTip/slide3.svg +9 -0
  154. package/dist/assets/images/sliderToolTip/slide4.svg +9 -0
  155. package/dist/assets/images/sliderToolTip/slide5.svg +40 -0
  156. package/dist/assets/images/versionSelector/acceptIcon.svg +3 -0
  157. package/dist/assets/images/versionSelector/addVersion.svg +5 -0
  158. package/dist/assets/images/versionSelector/closeVersionSelector.svg +4 -0
  159. package/dist/assets/images/versionSelector/createVersion.svg +3 -0
  160. package/dist/assets/images/versionSelector/nullIcon.svg +3 -0
  161. package/dist/assets/images/versionSelector/versionSelected.svg +3 -0
  162. package/dist/assets/images/verticalSideMenuMainPage/closeMenu.svg +4 -0
  163. package/dist/assets/images/verticalSideMenuMainPage/iconFAQS.svg +12 -0
  164. package/dist/assets/images/verticalSideMenuMainPage/iconGroup.svg +3 -0
  165. package/dist/assets/images/verticalSideMenuMainPage/iconLogo.svg +12 -0
  166. package/dist/assets/images/verticalSideMenuMainPage/iconLogoContentoh.svg +15 -0
  167. package/dist/assets/images/verticalSideMenuMainPage/iconProduct.svg +3 -0
  168. package/dist/assets/images/verticalSideMenuMainPage/iconSpeedometer.svg +12 -0
  169. package/dist/assets/images/verticalSideMenuMainPage/iconTask.svg +10 -0
  170. package/dist/assets/images/verticalSideMenuMainPage/openMenu.svg +4 -0
  171. package/dist/assets/sounds/newMessage.mp3 +0 -0
  172. package/dist/components/atoms/Image/index.js +5 -5
  173. package/dist/components/atoms/ImageLink/index.js +5 -5
  174. package/dist/components/molecules/Dropdown/index.js +1 -1
  175. package/dist/components/molecules/StripeCardForm/paymentForm.js +5 -5
  176. package/dist/components/molecules/VerificationCodeResetPasswordLogin/utils.js +19 -19
  177. package/dist/components/organisms/Chat/Chat.stories.js +8 -8
  178. package/dist/components/organisms/Chat/ContainerItems/index.js +18 -18
  179. package/dist/components/organisms/Chat/ContentChat/ContentChat.stories.js +6 -6
  180. package/dist/components/organisms/Chat/ContentChat/index.js +26 -26
  181. package/dist/components/organisms/Chatv2/Chatv2.stories.js +8 -8
  182. package/dist/components/organisms/Chatv2/ContainerItems/index.js +18 -18
  183. package/dist/components/organisms/Chatv2/ContentChat/ContentChat.stories.js +6 -6
  184. package/dist/components/organisms/Chatv2/ContentChat/index.js +26 -26
  185. package/dist/components/organisms/GlobalModal/index.js +9 -9
  186. package/dist/components/organisms/TableResizable/index.js +3 -3
  187. package/dist/components/pages/MultipleEdition/utils.js +14 -14
  188. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +61 -63
  189. package/dist/components/pages/ProviderProductEdition/index.js +5 -5
  190. package/dist/components/pages/RetailerProductEdition/index.js +6 -2
  191. package/dist/components/pages/VerificationCodeResetPassword/utils.js +19 -19
  192. package/dist/global-files/data.js +6 -6
  193. package/dist/global-files/fonts.css +69 -0
  194. package/dist/global-files/global-styles.css +42 -0
  195. package/dist/global-files/handle_http.js +42 -42
  196. package/dist/global-files/utils.js +95 -95
  197. package/package.json +116 -116
  198. package/src/_utils/helper.js +23 -23
  199. package/src/assets/images/Icons/DownloadIcon.svg +4 -4
  200. package/src/assets/images/Icons/addv2.svg +8 -8
  201. package/src/assets/images/Icons/beenhere.svg +9 -9
  202. package/src/assets/images/Icons/checkv2.svg +8 -8
  203. package/src/assets/images/Icons/close-magenta.svg +9 -9
  204. package/src/assets/images/Icons/close.svg +8 -8
  205. package/src/assets/images/Icons/closeCircle.svg +7 -7
  206. package/src/assets/images/Icons/delete-forever-red.svg +9 -9
  207. package/src/assets/images/Icons/delete-forever-white.svg +10 -10
  208. package/src/assets/images/Icons/edit.svg +8 -8
  209. package/src/assets/images/Icons/fullscreen.svg +2 -2
  210. package/src/assets/images/Icons/info.svg +8 -8
  211. package/src/assets/images/Icons/infoNR.svg +8 -8
  212. package/src/assets/images/Icons/options.svg +3 -3
  213. package/src/assets/images/Icons/save-white-gray.svg +9 -9
  214. package/src/assets/images/Icons/save-white.svg +9 -9
  215. package/src/assets/images/Icons/save.svg +8 -8
  216. package/src/assets/images/Icons/search.svg +3 -3
  217. package/src/assets/images/Icons/settings.svg +8 -8
  218. package/src/assets/images/Icons/trash.svg +8 -8
  219. package/src/assets/images/Icons/undo.svg +8 -8
  220. package/src/assets/images/Icons/upload-file-white.svg +3 -3
  221. package/src/assets/images/Icons/upload-file.svg +10 -10
  222. package/src/assets/images/Icons/upload_file.svg +10 -10
  223. package/src/assets/images/Icons/warningv2.svg +3 -3
  224. package/src/assets/images/activedFilter/removeFilter.svg +3 -3
  225. package/src/assets/images/arrow/arrowIcon.svg +3 -3
  226. package/src/assets/images/arrow/polygon.svg +3 -3
  227. package/src/assets/images/asignationOptions/availableIcon.svg +3 -3
  228. package/src/assets/images/asignationOptions/removeAsigned.svg +4 -4
  229. package/src/assets/images/asignationOptions/requestToProvider.svg +3 -3
  230. package/src/assets/images/asignationOptions/requestToTeam.svg +3 -3
  231. package/src/assets/images/card/masterCardIcon.svg +5 -5
  232. package/src/assets/images/checkBox/checked.svg +3 -3
  233. package/src/assets/images/checkBox/checkrosa.svg +3 -3
  234. package/src/assets/images/checkBox/checkverde.svg +3 -3
  235. package/src/assets/images/checkBox/unchecked.svg +3 -3
  236. package/src/assets/images/componentAssigned/assignedImage1.svg +9 -9
  237. package/src/assets/images/componentAssigned/assignedImage2.svg +9 -9
  238. package/src/assets/images/componentAssigned/clock.svg +4 -4
  239. package/src/assets/images/componentAssigned/flag.svg +3 -3
  240. package/src/assets/images/customSelect/starIcon.svg +14 -14
  241. package/src/assets/images/defaultImages/check_circle.svg +10 -10
  242. package/src/assets/images/defaultImages/defaultProfileImage.svg +13 -13
  243. package/src/assets/images/dropDownButton/dropDownArrowButton.svg +3 -3
  244. package/src/assets/images/editField/editField.svg +3 -3
  245. package/src/assets/images/flags/highPriority.svg +3 -3
  246. package/src/assets/images/flags/lowPriority.svg +3 -3
  247. package/src/assets/images/flags/mediumPriority.svg +3 -3
  248. package/src/assets/images/flags/noPriority.svg +3 -3
  249. package/src/assets/images/flagsv2/highPriority.svg +2 -2
  250. package/src/assets/images/flagsv2/lowPriority.svg +3 -3
  251. package/src/assets/images/flagsv2/mediumPriority.svg +2 -2
  252. package/src/assets/images/flagsv2/noPriority.svg +3 -3
  253. package/src/assets/images/generalButton/Icono AB.svg +14 -14
  254. package/src/assets/images/generalButton/acceptIcon.svg +3 -3
  255. package/src/assets/images/generalButton/closeIcon.svg +4 -4
  256. package/src/assets/images/generalButton/closeIconWhite.svg +4 -4
  257. package/src/assets/images/generalButton/closeIconv2.svg +4 -4
  258. package/src/assets/images/generalButton/deleteIcon.svg +13 -13
  259. package/src/assets/images/generalButton/deleteIconHover.svg +13 -13
  260. package/src/assets/images/generalButton/downloadIcon.svg +3 -3
  261. package/src/assets/images/generalButton/gridLayout.svg +3 -3
  262. package/src/assets/images/generalButton/nullIcon.svg +3 -3
  263. package/src/assets/images/generalButton/openModal.svg +3 -3
  264. package/src/assets/images/generalButton/rejectIcon.svg +3 -3
  265. package/src/assets/images/generalButton/rowLayout.svg +3 -3
  266. package/src/assets/images/generalButton/saveIcon.svg +3 -3
  267. package/src/assets/images/generalButton/saveIconHover.svg +3 -3
  268. package/src/assets/images/generalButton/saveIconpink.svg +3 -3
  269. package/src/assets/images/generalImage/assigned.svg +14 -14
  270. package/src/assets/images/generalImage/bags.svg +25 -25
  271. package/src/assets/images/generalImage/clock.svg +4 -4
  272. package/src/assets/images/generalImage/flag.svg +3 -3
  273. package/src/assets/images/genericModal/errorModal.svg +3 -3
  274. package/src/assets/images/genericModal/genericModalCheck.svg +3 -3
  275. package/src/assets/images/genericModal/genericModalClose.svg +3 -3
  276. package/src/assets/images/genericModal/genericModalDown.svg +3 -3
  277. package/src/assets/images/genericModal/genericModalUp.svg +3 -3
  278. package/src/assets/images/genericModal/genericModalWarning.svg +12 -12
  279. package/src/assets/images/genericModal/yellowAlert.svg +12 -12
  280. package/src/assets/images/logo/logoLogin.svg +15 -15
  281. package/src/assets/images/menuNotification/menuNotificationComment.svg +3 -3
  282. package/src/assets/images/menuNotification/menuNotificationProduct.svg +3 -3
  283. package/src/assets/images/menuProfile/logOut.svg +3 -3
  284. package/src/assets/images/menuProfile/myAccount.svg +3 -3
  285. package/src/assets/images/menuProfile/settings.svg +3 -3
  286. package/src/assets/images/modalsSVGs/attributesSent.svg +208 -208
  287. package/src/assets/images/modalsSVGs/descriptionSent.svg +237 -237
  288. package/src/assets/images/modalsSVGs/providerSent.svg +445 -445
  289. package/src/assets/images/modalsSVGs/uploadingImages.svg +148 -148
  290. package/src/assets/images/productImage/openModal.svg +3 -3
  291. package/src/assets/images/productNotification/productNotification.svg +3 -3
  292. package/src/assets/images/profileHeader/profilePicture.svg +9 -9
  293. package/src/assets/images/providerAndCadena/Cadena.svg +188 -188
  294. package/src/assets/images/providerAndCadena/LoginContentoh.svg +15 -15
  295. package/src/assets/images/providerAndCadena/Proveedor.svg +231 -231
  296. package/src/assets/images/sideMenuButton/contenoh.svg +5 -5
  297. package/src/assets/images/sideMenuButton/dashboard.svg +5 -5
  298. package/src/assets/images/sideMenuButton/products.svg +10 -10
  299. package/src/assets/images/sideMenuButton/providers.svg +10 -10
  300. package/src/assets/images/sideMenuButton/tasks.svg +3 -3
  301. package/src/assets/images/sliderToolTip/infoIcon.svg +4 -4
  302. package/src/assets/images/sliderToolTip/slide1.svg +5 -5
  303. package/src/assets/images/sliderToolTip/slide2.svg +9 -9
  304. package/src/assets/images/sliderToolTip/slide21.svg +9 -9
  305. package/src/assets/images/sliderToolTip/slide22.svg +9 -9
  306. package/src/assets/images/sliderToolTip/slide23.svg +9 -9
  307. package/src/assets/images/sliderToolTip/slide3.svg +9 -9
  308. package/src/assets/images/sliderToolTip/slide4.svg +9 -9
  309. package/src/assets/images/sliderToolTip/slide5.svg +40 -40
  310. package/src/assets/images/versionSelector/acceptIcon.svg +3 -3
  311. package/src/assets/images/versionSelector/addVersion.svg +5 -5
  312. package/src/assets/images/versionSelector/closeVersionSelector.svg +4 -4
  313. package/src/assets/images/versionSelector/createVersion.svg +3 -3
  314. package/src/assets/images/versionSelector/nullIcon.svg +3 -3
  315. package/src/assets/images/versionSelector/versionSelected.svg +3 -3
  316. package/src/assets/images/verticalSideMenuMainPage/closeMenu.svg +4 -4
  317. package/src/assets/images/verticalSideMenuMainPage/iconFAQS.svg +12 -12
  318. package/src/assets/images/verticalSideMenuMainPage/iconGroup.svg +3 -3
  319. package/src/assets/images/verticalSideMenuMainPage/iconLogo.svg +12 -12
  320. package/src/assets/images/verticalSideMenuMainPage/iconLogoContentoh.svg +15 -15
  321. package/src/assets/images/verticalSideMenuMainPage/iconProduct.svg +3 -3
  322. package/src/assets/images/verticalSideMenuMainPage/iconSpeedometer.svg +12 -12
  323. package/src/assets/images/verticalSideMenuMainPage/iconTask.svg +10 -10
  324. package/src/assets/images/verticalSideMenuMainPage/openMenu.svg +4 -4
  325. package/src/components/atoms/ActivedFilter/ActivedFilter.stories.js +13 -13
  326. package/src/components/atoms/ActivedFilter/index.js +13 -13
  327. package/src/components/atoms/ActivedFilter/styles.js +36 -36
  328. package/src/components/atoms/AsignationOption/AsignationOptions.stories.js +20 -20
  329. package/src/components/atoms/AsignationOption/index.js +60 -60
  330. package/src/components/atoms/AsignationOption/styles.js +69 -69
  331. package/src/components/atoms/AtomList/AtomList.stories.js +15 -15
  332. package/src/components/atoms/AtomList/index.js +14 -14
  333. package/src/components/atoms/AtomList/styles.js +17 -17
  334. package/src/components/atoms/Avatar/AsignationImage.stories.js +27 -27
  335. package/src/components/atoms/Avatar/index.js +22 -22
  336. package/src/components/atoms/Avatar/styles.js +34 -34
  337. package/src/components/atoms/Button/index.js +16 -16
  338. package/src/components/atoms/Button/styles.js +38 -38
  339. package/src/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +47 -47
  340. package/src/components/atoms/ButtonFileChooser/index.js +68 -68
  341. package/src/components/atoms/ButtonFileChooser/styles.js +4 -4
  342. package/src/components/atoms/ButtonV2/ButtonV2.stories.js +54 -54
  343. package/src/components/atoms/ButtonV2/index.js +86 -86
  344. package/src/components/atoms/ButtonV2/styles.js +233 -233
  345. package/src/components/atoms/Card/Card.stories.js +12 -12
  346. package/src/components/atoms/Card/index.js +42 -42
  347. package/src/components/atoms/Card/styles.js +44 -44
  348. package/src/components/atoms/CharCounter/CharCounter.stories.js +11 -11
  349. package/src/components/atoms/CharCounter/index.js +13 -13
  350. package/src/components/atoms/CharCounter/styles.js +10 -10
  351. package/src/components/atoms/CharsMissing/Wysiwyg.stories.js +12 -12
  352. package/src/components/atoms/CharsMissing/index.js +60 -60
  353. package/src/components/atoms/CharsMissing/styles.js +44 -44
  354. package/src/components/atoms/CheckBox/CheckBox.stories.js +25 -25
  355. package/src/components/atoms/CheckBox/index.js +33 -33
  356. package/src/components/atoms/CheckBox/styles.js +57 -57
  357. package/src/components/atoms/Commentary/index.js +9 -9
  358. package/src/components/atoms/Commentary/styles.js +15 -15
  359. package/src/components/atoms/CustomChip/CustomChip.stories.js +15 -15
  360. package/src/components/atoms/CustomChip/index.js +34 -34
  361. package/src/components/atoms/CustomChip/styles.js +5 -5
  362. package/src/components/atoms/CustomIcon/CustomIcon.stories.js +36 -36
  363. package/src/components/atoms/CustomIcon/index.js +41 -41
  364. package/src/components/atoms/CustomIcon/styles.js +85 -85
  365. package/src/components/atoms/CustomSelectItem/CustomSelectItem.stories.js +410 -410
  366. package/src/components/atoms/CustomSelectItem/index.js +150 -150
  367. package/src/components/atoms/CustomSelectItem/styles.js +32 -32
  368. package/src/components/atoms/CustomerTypeImage/CustomerTypeImage.stories.js +10 -10
  369. package/src/components/atoms/CustomerTypeImage/index.js +14 -14
  370. package/src/components/atoms/CustomerTypeImage/styles.js +14 -14
  371. package/src/components/atoms/DropDownButton/DropDownButton.stories.js +20 -20
  372. package/src/components/atoms/DropDownButton/index.js +10 -10
  373. package/src/components/atoms/DropDownButton/styles.js +19 -19
  374. package/src/components/atoms/EditField/EditField.stories.js +13 -13
  375. package/src/components/atoms/EditField/index.js +15 -15
  376. package/src/components/atoms/EditField/styles.js +35 -35
  377. package/src/components/atoms/FeatureTag/FeatureTag.stories.js +16 -16
  378. package/src/components/atoms/FeatureTag/index.js +10 -10
  379. package/src/components/atoms/FeatureTag/styles.js +43 -43
  380. package/src/components/atoms/FeatureTagv2/FeatureTagv2.stories.js +16 -16
  381. package/src/components/atoms/FeatureTagv2/index.js +10 -10
  382. package/src/components/atoms/FeatureTagv2/styles.js +56 -56
  383. package/src/components/atoms/GeneralButton/GeneralButton.stories.js +76 -76
  384. package/src/components/atoms/GeneralButton/index.js +34 -34
  385. package/src/components/atoms/GeneralButton/styles.js +235 -235
  386. package/src/components/atoms/GeneralInput/GeneralInput.stories.js +33 -33
  387. package/src/components/atoms/GeneralInput/index.js +159 -159
  388. package/src/components/atoms/GeneralInput/styles.js +86 -86
  389. package/src/components/atoms/GeneralInputv2/GeneralInputv2.stories.js +33 -33
  390. package/src/components/atoms/GeneralInputv2/index.js +155 -155
  391. package/src/components/atoms/GeneralInputv2/styles.js +67 -67
  392. package/src/components/atoms/GeneralTextBox/GeneralTextBox.stories.js +13 -13
  393. package/src/components/atoms/GeneralTextBox/index.js +10 -10
  394. package/src/components/atoms/GeneralTextBox/styles.js +35 -35
  395. package/src/components/atoms/GenericModal/GenericModal.stories.js +140 -140
  396. package/src/components/atoms/GenericModal/index.js +12 -12
  397. package/src/components/atoms/GenericModal/styles.js +134 -134
  398. package/src/components/atoms/GradientPanel/GradientPanel.stories.js +134 -134
  399. package/src/components/atoms/GradientPanel/index.js +15 -15
  400. package/src/components/atoms/GradientPanel/styles.js +139 -139
  401. package/src/components/atoms/Graphic/Graphic.stories.js +29 -29
  402. package/src/components/atoms/Graphic/index.js +43 -43
  403. package/src/components/atoms/Graphic/styles.js +3 -3
  404. package/src/components/atoms/IconFile/IconFile.stories.js +35 -35
  405. package/src/components/atoms/IconFile/index.js +119 -119
  406. package/src/components/atoms/IconFile/styles.js +67 -67
  407. package/src/components/atoms/Image/Image.stories.js +51 -51
  408. package/src/components/atoms/Image/index.js +55 -55
  409. package/src/components/atoms/Image/styles.js +34 -34
  410. package/src/components/atoms/ImageCarousel/ImgeSlider.stories.js +76 -76
  411. package/src/components/atoms/ImageCarousel/index.js +103 -103
  412. package/src/components/atoms/ImageCarousel/styles.js +79 -79
  413. package/src/components/atoms/ImageLink/ImageLink.stories.js +43 -43
  414. package/src/components/atoms/ImageLink/index.js +57 -57
  415. package/src/components/atoms/ImageLink/styles.js +30 -30
  416. package/src/components/atoms/ImagePreview/ImagePreview.stories.js +52 -52
  417. package/src/components/atoms/ImagePreview/index.js +178 -178
  418. package/src/components/atoms/ImagePreview/styles.js +77 -77
  419. package/src/components/atoms/Input/index.js +15 -15
  420. package/src/components/atoms/Input/style.js +31 -31
  421. package/src/components/atoms/InputFormatter/Wysiwyg.stories.js +12 -12
  422. package/src/components/atoms/InputFormatter/index.js +152 -152
  423. package/src/components/atoms/InputFormatter/styles.js +46 -46
  424. package/src/components/atoms/InputFormatterv2/Wysiwyg.stories.js +12 -12
  425. package/src/components/atoms/InputFormatterv2/index.js +148 -148
  426. package/src/components/atoms/InputFormatterv2/styles.js +39 -39
  427. package/src/components/atoms/InputImages/InputImages.stories.js +19 -19
  428. package/src/components/atoms/InputImages/index.js +25 -25
  429. package/src/components/atoms/InputImages/styles.js +17 -17
  430. package/src/components/atoms/InputText/InputText.stories.js +39 -39
  431. package/src/components/atoms/InputText/index.js +61 -61
  432. package/src/components/atoms/InputText/styles.js +89 -89
  433. package/src/components/atoms/LabelToInput/index.js +26 -26
  434. package/src/components/atoms/LabelToInput/style.js +41 -41
  435. package/src/components/atoms/LoadImageMenu/LoadImageMenu.stories.js +17 -17
  436. package/src/components/atoms/LoadImageMenu/index.js +58 -58
  437. package/src/components/atoms/LoadImageMenu/styles.js +72 -72
  438. package/src/components/atoms/Loading/Loading.stories.js +9 -9
  439. package/src/components/atoms/Loading/index.js +13 -13
  440. package/src/components/atoms/Loading/styles.js +57 -57
  441. package/src/components/atoms/LogoImage/LogoImage.stories.js +9 -9
  442. package/src/components/atoms/LogoImage/index.js +10 -10
  443. package/src/components/atoms/LogoImage/styles.js +11 -11
  444. package/src/components/atoms/MenuNotification/MenuNotification.stories.js +17 -17
  445. package/src/components/atoms/MenuNotification/index.js +30 -30
  446. package/src/components/atoms/MenuNotification/styles.js +50 -50
  447. package/src/components/atoms/MenuProfile/MenuProfile.stories.js +13 -13
  448. package/src/components/atoms/MenuProfile/index.js +31 -31
  449. package/src/components/atoms/MenuProfile/styles.js +57 -57
  450. package/src/components/atoms/MetricCard/MetricCard.stories.js +14 -14
  451. package/src/components/atoms/MetricCard/index.js +10 -10
  452. package/src/components/atoms/MetricCard/styles.js +30 -30
  453. package/src/components/atoms/MetricSelect/MetricSelect.stories.js +37 -37
  454. package/src/components/atoms/MetricSelect/index.js +22 -22
  455. package/src/components/atoms/MetricSelect/styles.js +20 -20
  456. package/src/components/atoms/Multiselect/Multiselect.stories.js +364 -364
  457. package/src/components/atoms/Multiselect/index.js +351 -351
  458. package/src/components/atoms/Multiselect/styles.js +33 -33
  459. package/src/components/atoms/NotFound/NotFound.stories.js +19 -19
  460. package/src/components/atoms/NotFound/index.js +52 -52
  461. package/src/components/atoms/NotFound/styles.js +55 -55
  462. package/src/components/atoms/Notification/Notification.stories.js +16 -16
  463. package/src/components/atoms/Notification/index.js +20 -20
  464. package/src/components/atoms/Notification/styles.js +42 -42
  465. package/src/components/atoms/NumberMandatory/NumberMandatory.stories.js +19 -19
  466. package/src/components/atoms/NumberMandatory/index.js +16 -16
  467. package/src/components/atoms/NumberMandatory/styles.js +11 -11
  468. package/src/components/atoms/ObservationFlag/ObservationFlag.stories.js +20 -20
  469. package/src/components/atoms/ObservationFlag/index.js +167 -167
  470. package/src/components/atoms/ObservationFlag/styles.js +104 -104
  471. package/src/components/atoms/PercentTag/PercentTag.stories.js +7 -7
  472. package/src/components/atoms/PercentTag/index.js +9 -9
  473. package/src/components/atoms/PercentTag/styles.js +69 -69
  474. package/src/components/atoms/PriorityFlag/PriorityFlag.stories.js +20 -20
  475. package/src/components/atoms/PriorityFlag/index.js +20 -20
  476. package/src/components/atoms/PriorityFlag/styles.js +3 -3
  477. package/src/components/atoms/PriorityFlagv2/PriorityFlagv2.stories.js +20 -20
  478. package/src/components/atoms/PriorityFlagv2/index.js +20 -20
  479. package/src/components/atoms/PriorityFlagv2/styles.js +6 -6
  480. package/src/components/atoms/ProductImage/ProductImage.stories.js +28 -28
  481. package/src/components/atoms/ProductImage/index.js +29 -29
  482. package/src/components/atoms/ProductImage/styles.js +69 -69
  483. package/src/components/atoms/ProductImagev2/ProductImagev2.stories.js +28 -28
  484. package/src/components/atoms/ProductImagev2/index.js +16 -16
  485. package/src/components/atoms/ProductImagev2/styles.js +62 -62
  486. package/src/components/atoms/ProductPercentCard/Percent.stories.js +40 -40
  487. package/src/components/atoms/ProductPercentCard/index.js +23 -23
  488. package/src/components/atoms/ProductPercentCard/styles.js +83 -83
  489. package/src/components/atoms/Progress/Progress.stories.js +25 -25
  490. package/src/components/atoms/Progress/index.js +74 -74
  491. package/src/components/atoms/Progress/styles.js +98 -98
  492. package/src/components/atoms/ProgressBar/ProgressBar.stories.js +25 -25
  493. package/src/components/atoms/ProgressBar/index.js +53 -53
  494. package/src/components/atoms/ProgressBar/styles.js +94 -94
  495. package/src/components/atoms/RatingStars/RatingStars.stories.js +10 -10
  496. package/src/components/atoms/RatingStars/index.js +31 -31
  497. package/src/components/atoms/RatingStars/styles.js +28 -28
  498. package/src/components/atoms/RetailerCatalog/RetailerCatalog.stories.js +36 -36
  499. package/src/components/atoms/RetailerCatalog/index.js +49 -49
  500. package/src/components/atoms/RetailerCatalog/styles.js +30 -30
  501. package/src/components/atoms/RetailerOption/RetailerOption.stories.js +15 -15
  502. package/src/components/atoms/RetailerOption/index.js +53 -53
  503. package/src/components/atoms/RetailerOption/styles.js +41 -41
  504. package/src/components/atoms/RetailersList/RetailersList.stories.js +33 -33
  505. package/src/components/atoms/RetailersList/index.js +20 -20
  506. package/src/components/atoms/RetailersList/styles.js +19 -19
  507. package/src/components/atoms/ScreenHeader/ScreenHeader.stories.js +52 -52
  508. package/src/components/atoms/ScreenHeader/index.js +29 -29
  509. package/src/components/atoms/ScreenHeader/styles.js +90 -90
  510. package/src/components/atoms/ScreenHeaderv2/ScreenHeaderv2.stories.js +52 -52
  511. package/src/components/atoms/ScreenHeaderv2/index.js +134 -134
  512. package/src/components/atoms/ScreenHeaderv2/styles.js +103 -103
  513. package/src/components/atoms/Select/VersionSelect.js +27 -27
  514. package/src/components/atoms/Select/index.js +35 -35
  515. package/src/components/atoms/Select/style.js +95 -95
  516. package/src/components/atoms/SelectItemV2/SelectItemV2.stories.js +26 -26
  517. package/src/components/atoms/SelectItemV2/index.js +61 -61
  518. package/src/components/atoms/SelectItemV2/styles.js +90 -90
  519. package/src/components/atoms/Selectv2/VersionSelect.js +27 -27
  520. package/src/components/atoms/Selectv2/index.js +35 -35
  521. package/src/components/atoms/Selectv2/style.js +93 -93
  522. package/src/components/atoms/SideMenuButton/SideMenuButton.stories.js +16 -16
  523. package/src/components/atoms/SideMenuButton/index.js +10 -10
  524. package/src/components/atoms/SideMenuButton/styles.js +28 -28
  525. package/src/components/atoms/SliderToolTip/SliderToolTip.stories.js +89 -89
  526. package/src/components/atoms/SliderToolTip/index.js +110 -110
  527. package/src/components/atoms/SliderToolTip/styles.js +197 -197
  528. package/src/components/atoms/Status/Status.stories.js +14 -14
  529. package/src/components/atoms/Status/index.js +13 -13
  530. package/src/components/atoms/Status/styles.js +78 -78
  531. package/src/components/atoms/TabSection/TabSection.stories.js +25 -25
  532. package/src/components/atoms/TabSection/index.js +9 -9
  533. package/src/components/atoms/TabSection/styles.js +19 -19
  534. package/src/components/atoms/TabSectionv2/TabSection.stories.js +25 -25
  535. package/src/components/atoms/TabSectionv2/index.js +9 -9
  536. package/src/components/atoms/TabSectionv2/styles.js +20 -20
  537. package/src/components/atoms/Tooltip/Tooltip.stories.js +51 -51
  538. package/src/components/atoms/Tooltip/index.js +59 -59
  539. package/src/components/atoms/Tooltip/styles.js +42 -42
  540. package/src/components/atoms/TooltipLight/Tooltip.stories.js +20 -20
  541. package/src/components/atoms/TooltipLight/index.js +46 -46
  542. package/src/components/atoms/TooltipLight/styles.js +65 -65
  543. package/src/components/atoms/UserCatalog/UserCatalog.stories.js +67 -67
  544. package/src/components/atoms/UserCatalog/index.js +100 -100
  545. package/src/components/atoms/UserCatalog/styles.js +24 -24
  546. package/src/components/atoms/UserOption/UserOption.stories.js +25 -25
  547. package/src/components/atoms/UserOption/index.js +95 -95
  548. package/src/components/atoms/UserOption/styles.js +61 -61
  549. package/src/components/atoms/UserSelector/UserSelector.stories.js +25 -25
  550. package/src/components/atoms/UserSelector/index.js +92 -92
  551. package/src/components/atoms/UserSelector/styles.js +55 -55
  552. package/src/components/atoms/ValidationPanel/ValidationPanel.stories.js +10 -10
  553. package/src/components/atoms/ValidationPanel/index.js +59 -59
  554. package/src/components/atoms/ValidationPanel/styles.js +44 -44
  555. package/src/components/atoms/VerticalSideMenuMainPage/VerticalSideMenuMainPage.stories.js +39 -39
  556. package/src/components/atoms/VerticalSideMenuMainPage/index.js +59 -59
  557. package/src/components/atoms/VerticalSideMenuMainPage/styles.js +187 -187
  558. package/src/components/atoms/WordsMissing/Wysiwyg.stories.js +12 -12
  559. package/src/components/atoms/WordsMissing/index.js +60 -60
  560. package/src/components/atoms/WordsMissing/styles.js +10 -10
  561. package/src/components/molecules/AddGroup/AddGroup.stories.js +14 -14
  562. package/src/components/molecules/AddGroup/index.js +84 -84
  563. package/src/components/molecules/AddGroup/styles.js +141 -141
  564. package/src/components/molecules/AddProvidersAndProducts/AddProvidersAndProducts.stories.js +15 -15
  565. package/src/components/molecules/AddProvidersAndProducts/index.js +19 -19
  566. package/src/components/molecules/AddProvidersAndProducts/styles.js +22 -22
  567. package/src/components/molecules/AsignationInfo/AsignationInfo.stories.js +17 -17
  568. package/src/components/molecules/AsignationInfo/index.js +108 -108
  569. package/src/components/molecules/AsignationInfo/styles.js +86 -86
  570. package/src/components/molecules/AssignedWork/AssignedWork.stories.js +41 -41
  571. package/src/components/molecules/AssignedWork/index.js +40 -40
  572. package/src/components/molecules/AssignedWork/styles.js +110 -110
  573. package/src/components/molecules/AvatarAndValidation/AvatarAndValidation.stories.js +12 -12
  574. package/src/components/molecules/AvatarAndValidation/index.js +75 -75
  575. package/src/components/molecules/AvatarAndValidation/styles.js +15 -15
  576. package/src/components/molecules/BoxAttribute/BoxAttribute.stories.js +15 -15
  577. package/src/components/molecules/BoxAttribute/index.js +78 -78
  578. package/src/components/molecules/BoxAttribute/styles.js +38 -38
  579. package/src/components/molecules/BoxButtons/BoxButtons.stories.js +14 -14
  580. package/src/components/molecules/BoxButtons/index.js +29 -29
  581. package/src/components/molecules/BoxButtons/styles.js +43 -43
  582. package/src/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +54 -54
  583. package/src/components/molecules/ButtonDownloadFile/index.js +109 -109
  584. package/src/components/molecules/ButtonDownloadFile/styles.js +66 -66
  585. package/src/components/molecules/CarouselImagesLogin/CarouselImagesLogin.stories.js +17 -17
  586. package/src/components/molecules/CarouselImagesLogin/index.js +65 -65
  587. package/src/components/molecules/CarouselImagesLogin/styles.js +60 -60
  588. package/src/components/molecules/CustomSelect/CustomSelect.stories.js +35 -35
  589. package/src/components/molecules/CustomSelect/SelectItem.js +104 -104
  590. package/src/components/molecules/CustomSelect/index.js +194 -194
  591. package/src/components/molecules/CustomSelect/styles.js +126 -126
  592. package/src/components/molecules/Dropdown/Dropdown.stories.js +103 -103
  593. package/src/components/molecules/Dropdown/index.js +150 -150
  594. package/src/components/molecules/Dropdown/styles.js +75 -75
  595. package/src/components/molecules/EditionActiveImage/EditionActiveImage.stories.js +12 -12
  596. package/src/components/molecules/EditionActiveImage/index.js +15 -15
  597. package/src/components/molecules/EditionActiveImage/styles.js +7 -7
  598. package/src/components/molecules/EditionActiveImagev2/EditionActiveImagev2.stories.js +12 -12
  599. package/src/components/molecules/EditionActiveImagev2/index.js +15 -15
  600. package/src/components/molecules/EditionActiveImagev2/styles.js +7 -7
  601. package/src/components/molecules/EditionTabs/EditionTabs.stories.js +12 -12
  602. package/src/components/molecules/EditionTabs/index.js +33 -33
  603. package/src/components/molecules/EditionTabs/styles.js +23 -23
  604. package/src/components/molecules/EmailResetPasswordLogin/EmailResetPasswordLogin.stories.js +11 -11
  605. package/src/components/molecules/EmailResetPasswordLogin/index.js +85 -85
  606. package/src/components/molecules/EmailResetPasswordLogin/styles.js +23 -23
  607. package/src/components/molecules/FeaturesBar/FeaturesBar.stories.js +20 -20
  608. package/src/components/molecules/FeaturesBar/index.js +30 -30
  609. package/src/components/molecules/FeaturesBar/styles.js +16 -16
  610. package/src/components/molecules/FeaturesBarv2/FeaturesBarv2.stories.js +20 -20
  611. package/src/components/molecules/FeaturesBarv2/index.js +32 -32
  612. package/src/components/molecules/FeaturesBarv2/styles.js +17 -17
  613. package/src/components/molecules/GalleryElement/GalleryElement.stories.js +30 -30
  614. package/src/components/molecules/GalleryElement/index.js +225 -225
  615. package/src/components/molecules/GalleryElement/styles.js +125 -125
  616. package/src/components/molecules/GalleryElementv2/GalleryElementv2.stories.js +30 -30
  617. package/src/components/molecules/GalleryElementv2/index.js +142 -142
  618. package/src/components/molecules/GalleryElementv2/styles.js +119 -119
  619. package/src/components/molecules/GalleryHeader/GalleryHeader.stories.js +10 -10
  620. package/src/components/molecules/GalleryHeader/index.js +27 -27
  621. package/src/components/molecules/GalleryHeader/styles.js +49 -49
  622. package/src/components/molecules/GalleryHeaderv2/GalleryHeaderv2.stories.js +10 -10
  623. package/src/components/molecules/GalleryHeaderv2/index.js +25 -25
  624. package/src/components/molecules/GalleryHeaderv2/styles.js +47 -47
  625. package/src/components/molecules/GridItem/GridItem.stories.js +126 -126
  626. package/src/components/molecules/GridItem/index.js +128 -128
  627. package/src/components/molecules/GridItem/styles.js +129 -129
  628. package/src/components/molecules/GroupSelect/GroupSelect.stories.js +35 -35
  629. package/src/components/molecules/GroupSelect/SelectItem.js +105 -105
  630. package/src/components/molecules/GroupSelect/index.js +190 -190
  631. package/src/components/molecules/GroupSelect/styles.js +124 -124
  632. package/src/components/molecules/HeaderItem/ColumnItem.js +9 -9
  633. package/src/components/molecules/HeaderItem/HeaderItem.stories.js +24 -24
  634. package/src/components/molecules/HeaderItem/index.js +26 -26
  635. package/src/components/molecules/HeaderItem/styles.js +27 -27
  636. package/src/components/molecules/HeaderTop/HeaderTop.stories.js +10 -10
  637. package/src/components/molecules/HeaderTop/index.js +106 -106
  638. package/src/components/molecules/HeaderTop/styles.js +33 -33
  639. package/src/components/molecules/HeaderTopv2/HeaderTopv2.stories.js +10 -10
  640. package/src/components/molecules/HeaderTopv2/index.js +100 -100
  641. package/src/components/molecules/HeaderTopv2/styles.js +33 -33
  642. package/src/components/molecules/ImageSelector/ImageSelector.stories.js +46 -46
  643. package/src/components/molecules/ImageSelector/index.js +22 -22
  644. package/src/components/molecules/ImageSelector/styles.js +13 -13
  645. package/src/components/molecules/ImageSelectorv2/ImageSelectorv2.stories.js +46 -46
  646. package/src/components/molecules/ImageSelectorv2/index.js +22 -22
  647. package/src/components/molecules/ImageSelectorv2/styles.js +15 -15
  648. package/src/components/molecules/ImageTooltip/ImageTooltip.stories.js +68 -68
  649. package/src/components/molecules/ImageTooltip/index.js +53 -53
  650. package/src/components/molecules/ImageTooltip/styles.js +18 -18
  651. package/src/components/molecules/LoginPasswordStrength/LoginPasswordStrength.stories.js +8 -8
  652. package/src/components/molecules/LoginPasswordStrength/index.js +84 -84
  653. package/src/components/molecules/LoginPasswordStrength/styles.js +91 -91
  654. package/src/components/molecules/LogoLoading/Loading.stories.js +9 -9
  655. package/src/components/molecules/LogoLoading/index.js +12 -12
  656. package/src/components/molecules/LogoLoading/styles.js +16 -16
  657. package/src/components/molecules/ParentComponent/ParentComponent.stories.js +18 -18
  658. package/src/components/molecules/ParentComponent/index.js +66 -66
  659. package/src/components/molecules/ParentComponent/styles.js +7 -7
  660. package/src/components/molecules/PayMethod/PayMethod.stories.js +12 -12
  661. package/src/components/molecules/PayMethod/index.js +46 -46
  662. package/src/components/molecules/PayMethod/styles.js +31 -31
  663. package/src/components/molecules/Phase/Phase.stories.js +107 -107
  664. package/src/components/molecules/Phase/index.js +391 -391
  665. package/src/components/molecules/Phase/styles.js +97 -97
  666. package/src/components/molecules/PlanSelection/PlanSelection.stories.js +19 -19
  667. package/src/components/molecules/PlanSelection/index.js +25 -25
  668. package/src/components/molecules/PlanSelection/styles.js +14 -14
  669. package/src/components/molecules/ProductNameHeader/ProductNameHeader.stories.js +37 -37
  670. package/src/components/molecules/ProductNameHeader/index.js +45 -45
  671. package/src/components/molecules/ProductNameHeader/styles.js +10 -10
  672. package/src/components/molecules/ProductNameHeaderv2/ProductNameHeaderv2.stories.js +37 -37
  673. package/src/components/molecules/ProductNameHeaderv2/index.js +12 -12
  674. package/src/components/molecules/ProductNameHeaderv2/styles.js +10 -10
  675. package/src/components/molecules/ProductNotification/ProductNotification.stories.js +13 -13
  676. package/src/components/molecules/ProductNotification/index.js +53 -53
  677. package/src/components/molecules/ProductNotification/styles.js +37 -37
  678. package/src/components/molecules/ProductSkuStatus/ProductSkuStatus.stories.js +37 -37
  679. package/src/components/molecules/ProductSkuStatus/index.js +26 -26
  680. package/src/components/molecules/ProductSkuStatus/styles.js +7 -7
  681. package/src/components/molecules/ProfileHeader/ProfileHeader.stories.js +16 -16
  682. package/src/components/molecules/ProfileHeader/index.js +54 -54
  683. package/src/components/molecules/ProfileHeader/styles.js +30 -30
  684. package/src/components/molecules/RegistrationFirstStep/RegistrationFirstStep.stories.js +11 -11
  685. package/src/components/molecules/RegistrationFirstStep/index.js +227 -227
  686. package/src/components/molecules/RegistrationFirstStep/styles.js +87 -87
  687. package/src/components/molecules/RegistrationSecondStep/RegistrationSecondStep.stories.js +11 -11
  688. package/src/components/molecules/RegistrationSecondStep/index.js +135 -135
  689. package/src/components/molecules/RegistrationSecondStep/styles.js +64 -64
  690. package/src/components/molecules/RegistrationThirdStep/RegistrationThirdStep.stories.js +11 -11
  691. package/src/components/molecules/RegistrationThirdStep/index.js +130 -130
  692. package/src/components/molecules/RegistrationThirdStep/styles.js +44 -44
  693. package/src/components/molecules/RetailerSelector/RetailerSelector.stories.js +35 -35
  694. package/src/components/molecules/RetailerSelector/index.js +81 -81
  695. package/src/components/molecules/RetailerSelector/styles.js +21 -21
  696. package/src/components/molecules/RetailerSelectorv2/RetailerSelectorv2.stories.js +35 -35
  697. package/src/components/molecules/RetailerSelectorv2/index.js +80 -80
  698. package/src/components/molecules/RetailerSelectorv2/styles.js +21 -21
  699. package/src/components/molecules/RowItem/ColumnItem.js +9 -9
  700. package/src/components/molecules/RowItem/RowItem.stories.js +5660 -5660
  701. package/src/components/molecules/RowItem/index.js +45 -45
  702. package/src/components/molecules/RowItem/styles.js +41 -41
  703. package/src/components/molecules/SelectV2/SelectV2.stories.js +115 -115
  704. package/src/components/molecules/SelectV2/index.js +357 -357
  705. package/src/components/molecules/SelectV2/styles.js +105 -105
  706. package/src/components/molecules/SelectV2/test.js +60 -60
  707. package/src/components/molecules/SelectV2/test.stories.js +10 -10
  708. package/src/components/molecules/ServiceDataValidator/ServiceDataValidator.stories.js +89 -89
  709. package/src/components/molecules/ServiceDataValidator/index.js +49 -49
  710. package/src/components/molecules/ServiceDataValidator/styles.js +36 -36
  711. package/src/components/molecules/SidebarNotification/SidebarNotification.stories.js +101 -101
  712. package/src/components/molecules/SidebarNotification/index.js +95 -95
  713. package/src/components/molecules/SidebarNotification/styles.js +63 -63
  714. package/src/components/molecules/SignInLogin/SignInLogin.stories.js +11 -11
  715. package/src/components/molecules/SignInLogin/index.js +244 -244
  716. package/src/components/molecules/SignInLogin/styles.js +111 -111
  717. package/src/components/molecules/StatusAsignationInfo/FinancedCompanies.js +44 -44
  718. package/src/components/molecules/StatusAsignationInfo/StatusAsignationInfo.stories.js +17 -17
  719. package/src/components/molecules/StatusAsignationInfo/index.js +197 -197
  720. package/src/components/molecules/StatusAsignationInfo/styles.js +82 -82
  721. package/src/components/molecules/StatusRetailer/StatusAsignationInfo.stories.js +17 -17
  722. package/src/components/molecules/StatusRetailer/index.js +55 -55
  723. package/src/components/molecules/StatusRetailer/styles.js +85 -85
  724. package/src/components/molecules/StripeCardForm/StripeCardForm.stories.js +14 -14
  725. package/src/components/molecules/StripeCardForm/index.js +45 -45
  726. package/src/components/molecules/StripeCardForm/paymentForm.js +126 -126
  727. package/src/components/molecules/StripeCardForm/styles.js +84 -84
  728. package/src/components/molecules/StripeCardSelector/CardSelector.stories.js +12 -12
  729. package/src/components/molecules/StripeCardSelector/index.js +59 -59
  730. package/src/components/molecules/StripeCardSelector/styles.js +15 -15
  731. package/src/components/molecules/StripeCardSelector/utils.js +17 -17
  732. package/src/components/molecules/TableHeader/TableHeader.stories.js +20 -20
  733. package/src/components/molecules/TableHeader/index.js +36 -36
  734. package/src/components/molecules/TableHeader/styles.js +30 -30
  735. package/src/components/molecules/TableRow/TableRow.stories.js +18 -18
  736. package/src/components/molecules/TableRow/index.js +14 -14
  737. package/src/components/molecules/TableRow/styles.js +11 -11
  738. package/src/components/molecules/TabsMenu/TabsMenu.stories.js +19 -19
  739. package/src/components/molecules/TabsMenu/index.js +110 -110
  740. package/src/components/molecules/TabsMenu/styles.js +5 -5
  741. package/src/components/molecules/TabsMenuv2/TabsMenuv2.stories.js +19 -19
  742. package/src/components/molecules/TabsMenuv2/index.js +112 -112
  743. package/src/components/molecules/TabsMenuv2/styles.js +19 -19
  744. package/src/components/molecules/TagAndInput/TagAndInput.stories.js +24 -24
  745. package/src/components/molecules/TagAndInput/index.js +120 -120
  746. package/src/components/molecules/TagAndInput/styles.js +36 -36
  747. package/src/components/molecules/TagAndInputv2/TagAndInputv2.stories.js +24 -24
  748. package/src/components/molecules/TagAndInputv2/index.js +86 -86
  749. package/src/components/molecules/TagAndInputv2/styles.js +35 -35
  750. package/src/components/molecules/Validation/Validation.stories.js +12 -12
  751. package/src/components/molecules/Validation/index.js +77 -77
  752. package/src/components/molecules/Validation/styles.js +19 -19
  753. package/src/components/molecules/VerificationCodeResetPasswordLogin/VerificationCodeResetPasswordLogin.stories.js +11 -11
  754. package/src/components/molecules/VerificationCodeResetPasswordLogin/index.js +171 -171
  755. package/src/components/molecules/VerificationCodeResetPasswordLogin/styles.js +54 -54
  756. package/src/components/molecules/VerificationCodeResetPasswordLogin/utils.js +54 -54
  757. package/src/components/molecules/VersionItem/VersionItem.stories.js +14 -14
  758. package/src/components/molecules/VersionItem/index.js +55 -55
  759. package/src/components/molecules/VersionItem/styles.js +32 -32
  760. package/src/components/molecules/VersionItemv2/VersionItemv2.stories.js +14 -14
  761. package/src/components/molecules/VersionItemv2/index.js +59 -59
  762. package/src/components/molecules/VersionItemv2/styles.js +47 -47
  763. package/src/components/organisms/BarButtons/BarButtons.stories.js +12 -12
  764. package/src/components/organisms/BarButtons/index.js +150 -150
  765. package/src/components/organisms/BarButtons/styles.js +54 -54
  766. package/src/components/organisms/Box/Box.stories.js +16 -16
  767. package/src/components/organisms/Box/index.js +103 -103
  768. package/src/components/organisms/Box/styles.js +47 -47
  769. package/src/components/organisms/BoxOnboarding/BoxOnboarding.stories.js +16 -16
  770. package/src/components/organisms/BoxOnboarding/index.js +59 -59
  771. package/src/components/organisms/BoxOnboarding/styles.js +44 -44
  772. package/src/components/organisms/Calendar/Calendar.stories.js +10 -10
  773. package/src/components/organisms/Calendar/index.js +17 -17
  774. package/src/components/organisms/Calendar/styles.js +853 -853
  775. package/src/components/organisms/ChangePassword/ChangePassword.stories.js +11 -11
  776. package/src/components/organisms/ChangePassword/index.js +77 -77
  777. package/src/components/organisms/ChangePassword/styles.js +13 -13
  778. package/src/components/organisms/Chat/Chat.stories.js +184 -184
  779. package/src/components/organisms/Chat/ChatLists/ChatLists.stories.js +65 -65
  780. package/src/components/organisms/Chat/ChatLists/index.js +141 -141
  781. package/src/components/organisms/Chat/ChatLists/styles.js +162 -162
  782. package/src/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +142 -142
  783. package/src/components/organisms/Chat/ContainerItems/index.js +538 -538
  784. package/src/components/organisms/Chat/ContainerItems/styles.js +360 -360
  785. package/src/components/organisms/Chat/ContentChat/ContentChat.stories.js +102 -102
  786. package/src/components/organisms/Chat/ContentChat/index.js +1016 -1016
  787. package/src/components/organisms/Chat/ContentChat/styles.js +44 -44
  788. package/src/components/organisms/Chat/Footer/Footer.stories.js +22 -22
  789. package/src/components/organisms/Chat/Footer/index.js +668 -668
  790. package/src/components/organisms/Chat/Footer/styles.js +290 -290
  791. package/src/components/organisms/Chat/Header/Header.stories.js +66 -66
  792. package/src/components/organisms/Chat/Header/index.js +93 -93
  793. package/src/components/organisms/Chat/Header/styles.js +49 -49
  794. package/src/components/organisms/Chat/index.js +282 -282
  795. package/src/components/organisms/Chat/styles.js +50 -50
  796. package/src/components/organisms/Chatv2/ChatLists/ChatLists.stories.js +65 -65
  797. package/src/components/organisms/Chatv2/ChatLists/index.js +141 -141
  798. package/src/components/organisms/Chatv2/ChatLists/styles.js +162 -162
  799. package/src/components/organisms/Chatv2/Chatv2.stories.js +184 -184
  800. package/src/components/organisms/Chatv2/ContainerItems/ContainerItems.stories.js +142 -142
  801. package/src/components/organisms/Chatv2/ContainerItems/index.js +538 -538
  802. package/src/components/organisms/Chatv2/ContainerItems/styles.js +360 -360
  803. package/src/components/organisms/Chatv2/ContentChat/ContentChat.stories.js +102 -102
  804. package/src/components/organisms/Chatv2/ContentChat/index.js +1016 -1016
  805. package/src/components/organisms/Chatv2/ContentChat/styles.js +44 -44
  806. package/src/components/organisms/Chatv2/Footer/Footer.stories.js +22 -22
  807. package/src/components/organisms/Chatv2/Footer/index.js +668 -668
  808. package/src/components/organisms/Chatv2/Footer/styles.js +290 -290
  809. package/src/components/organisms/Chatv2/Header/Header.stories.js +66 -66
  810. package/src/components/organisms/Chatv2/Header/index.js +93 -93
  811. package/src/components/organisms/Chatv2/Header/styles.js +49 -49
  812. package/src/components/organisms/Chatv2/index.js +281 -281
  813. package/src/components/organisms/Chatv2/styles.js +85 -85
  814. package/src/components/organisms/CompleteServices/CompleteServices.stories.js +90 -90
  815. package/src/components/organisms/CompleteServices/index.js +82 -82
  816. package/src/components/organisms/CompleteServices/styles.js +35 -35
  817. package/src/components/organisms/CreateVersion/CreateVersion.stories.js +14 -14
  818. package/src/components/organisms/CreateVersion/RenderChilds.js +131 -131
  819. package/src/components/organisms/CreateVersion/index.js +68 -68
  820. package/src/components/organisms/CreateVersion/styles.js +79 -79
  821. package/src/components/organisms/DashboardMetric/DashboardMetric.stories.js +28 -28
  822. package/src/components/organisms/DashboardMetric/dashboardMetricUtils.js +130 -130
  823. package/src/components/organisms/DashboardMetric/index.js +120 -120
  824. package/src/components/organisms/DashboardMetric/styles.js +91 -91
  825. package/src/components/organisms/DragAndDropPhases/DragAndDropPhases.stories.js +12 -12
  826. package/src/components/organisms/DragAndDropPhases/index.js +336 -336
  827. package/src/components/organisms/DragAndDropPhases/styles.js +107 -107
  828. package/src/components/organisms/DragPrueba/DragPrueba.stories.js +11 -11
  829. package/src/components/organisms/DragPrueba/index.js +57 -57
  830. package/src/components/organisms/DragPrueba/styles.js +8 -8
  831. package/src/components/organisms/EditGroup/EditGroup.stories.js +19 -19
  832. package/src/components/organisms/EditGroup/index.js +321 -321
  833. package/src/components/organisms/EditGroup/styles.js +206 -206
  834. package/src/components/organisms/FullProductNameHeader/FullProductNameHeader.stories.js +28 -28
  835. package/src/components/organisms/FullProductNameHeader/index.js +102 -102
  836. package/src/components/organisms/FullProductNameHeader/styles.js +12 -12
  837. package/src/components/organisms/FullProductNamev2/FullProductNamev2.stories.js +28 -28
  838. package/src/components/organisms/FullProductNamev2/index.js +101 -101
  839. package/src/components/organisms/FullProductNamev2/styles.js +49 -49
  840. package/src/components/organisms/FullTabsMenu/FullTabsMenu.stories.js +22 -22
  841. package/src/components/organisms/FullTabsMenu/index.js +69 -69
  842. package/src/components/organisms/FullTabsMenu/styles.js +10 -10
  843. package/src/components/organisms/FullTabsMenuv2/FullTabsMenuv2.stories.js +22 -22
  844. package/src/components/organisms/FullTabsMenuv2/index.js +142 -142
  845. package/src/components/organisms/FullTabsMenuv2/styles.js +47 -47
  846. package/src/components/organisms/Fullplan/FullPlan.stories.js +21 -21
  847. package/src/components/organisms/Fullplan/index.js +34 -34
  848. package/src/components/organisms/Fullplan/styles.js +26 -26
  849. package/src/components/organisms/GlobalModal/index.js +68 -68
  850. package/src/components/organisms/GlobalModal/styles.js +123 -123
  851. package/src/components/organisms/GridProducts/GridProducts.stories.js +5853 -5853
  852. package/src/components/organisms/GridProducts/index.js +50 -50
  853. package/src/components/organisms/GridProducts/styles.js +15 -15
  854. package/src/components/organisms/GridProducts/utils.js +111 -111
  855. package/src/components/organisms/ImageDataTable/ImageDataTable.stories.js +24 -24
  856. package/src/components/organisms/ImageDataTable/index.js +124 -124
  857. package/src/components/organisms/ImageDataTable/styles.js +17 -17
  858. package/src/components/organisms/ImageDataTablev2/ImageDataTablev2.stories.js +24 -24
  859. package/src/components/organisms/ImageDataTablev2/index.js +124 -124
  860. package/src/components/organisms/ImageDataTablev2/styles.js +18 -18
  861. package/src/components/organisms/ImagePreviewer/ImagePreviewer.stories.js +38 -38
  862. package/src/components/organisms/ImagePreviewer/index.js +21 -21
  863. package/src/components/organisms/ImagePreviewer/styles.js +7 -7
  864. package/src/components/organisms/ImagePreviewerv2/ImagePreviewerv2.stories.js +38 -38
  865. package/src/components/organisms/ImagePreviewerv2/index.js +22 -22
  866. package/src/components/organisms/ImagePreviewerv2/styles.js +7 -7
  867. package/src/components/organisms/ImageUploader/ImageUploader.stories.js +15 -15
  868. package/src/components/organisms/ImageUploader/index.js +62 -62
  869. package/src/components/organisms/ImageUploader/styles.js +29 -29
  870. package/src/components/organisms/ImageVisor/ImageVisor.stories.js +15 -15
  871. package/src/components/organisms/ImageVisor/index.js +143 -143
  872. package/src/components/organisms/ImageVisor/styles.js +106 -106
  873. package/src/components/organisms/ImagesGroup/index.js +10 -10
  874. package/src/components/organisms/ImagesGroup/styles.js +3 -3
  875. package/src/components/organisms/InputGroup/InputGroup.stories.js +31 -31
  876. package/src/components/organisms/InputGroup/index.js +439 -439
  877. package/src/components/organisms/InputGroup/styles.js +87 -87
  878. package/src/components/organisms/InputGroupv2/InputGroupv2.stories.js +31 -31
  879. package/src/components/organisms/InputGroupv2/index.js +296 -296
  880. package/src/components/organisms/InputGroupv2/styles.js +90 -90
  881. package/src/components/organisms/MandatoryBar/MandatoryBar.stories.js +18 -18
  882. package/src/components/organisms/MandatoryBar/index.js +31 -31
  883. package/src/components/organisms/MandatoryBar/styles.js +12 -12
  884. package/src/components/organisms/Modal/Modal.stories.js +56 -56
  885. package/src/components/organisms/Modal/index.js +104 -104
  886. package/src/components/organisms/Modal/styles.js +110 -110
  887. package/src/components/organisms/OrderDetail/OrderDetail.stories.js +87 -87
  888. package/src/components/organisms/OrderDetail/index.js +216 -216
  889. package/src/components/organisms/OrderDetail/styles.js +122 -122
  890. package/src/components/organisms/OrderDetail/utils/ImageGroup/index.js +34 -34
  891. package/src/components/organisms/OrderDetail/utils/ImageGroup/styles.js +46 -46
  892. package/src/components/organisms/OrderDetail/utils/Table/index.js +133 -133
  893. package/src/components/organisms/OrderDetail/utils/Table/styles.js +74 -74
  894. package/src/components/organisms/OrderDetail/utils/Table/utils.js +32 -32
  895. package/src/components/organisms/PanelLayout/PanelLayout.stories.js +63 -63
  896. package/src/components/organisms/PanelLayout/index.js +11 -11
  897. package/src/components/organisms/PanelLayout/styles.js +39 -39
  898. package/src/components/organisms/ProductImageModal/ProductImageModal.stories.js +90 -90
  899. package/src/components/organisms/ProductImageModal/index.js +98 -98
  900. package/src/components/organisms/ProductImageModal/styles.js +60 -60
  901. package/src/components/organisms/ProductImageModalv2/ProductImageModalv2.stories.js +90 -90
  902. package/src/components/organisms/ProductImageModalv2/index.js +105 -105
  903. package/src/components/organisms/ProductImageModalv2/styles.js +71 -71
  904. package/src/components/organisms/RangeCalendar/RangeCalendar.stories.js +16 -16
  905. package/src/components/organisms/RangeCalendar/index.js +121 -121
  906. package/src/components/organisms/RangeCalendar/styles.js +883 -883
  907. package/src/components/organisms/RenameImagesBar/RenameImagesBar.stories.js +18 -18
  908. package/src/components/organisms/RenameImagesBar/index.js +30 -30
  909. package/src/components/organisms/RenameImagesBar/styles.js +12 -12
  910. package/src/components/organisms/SideModal/SideModal.stories.js +23 -23
  911. package/src/components/organisms/SideModal/index.js +50 -50
  912. package/src/components/organisms/SideModal/styles.js +30 -30
  913. package/src/components/organisms/Table/Table.stories.js +609 -609
  914. package/src/components/organisms/Table/index.js +84 -84
  915. package/src/components/organisms/Table/styles.js +119 -119
  916. package/src/components/organisms/TableResizable/TableResizable.stories.js +17 -17
  917. package/src/components/organisms/TableResizable/index.js +119 -119
  918. package/src/components/organisms/TableResizable/styles.js +133 -133
  919. package/src/components/organisms/TableResizable/utils.js +46 -46
  920. package/src/components/organisms/VersionSelector/VersionSelector.stories.js +15 -15
  921. package/src/components/organisms/VersionSelector/index.js +106 -106
  922. package/src/components/organisms/VersionSelector/styles.js +29 -29
  923. package/src/components/organisms/VersionSelectorv2/VersionSelectorv2.stories.js +15 -15
  924. package/src/components/organisms/VersionSelectorv2/index.js +105 -105
  925. package/src/components/organisms/VersionSelectorv2/styles.js +45 -45
  926. package/src/components/pages/ChangePasswordLogin/ChangePasswordLogin.stories.js +18 -18
  927. package/src/components/pages/ChangePasswordLogin/index.js +77 -77
  928. package/src/components/pages/ChangePasswordLogin/styles.js +20 -20
  929. package/src/components/pages/CustomerLogin/CustomerLogin.stories.js +78 -78
  930. package/src/components/pages/CustomerLogin/index.js +22 -22
  931. package/src/components/pages/CustomerLogin/styles.js +12 -12
  932. package/src/components/pages/CustomerPayMethod/CustomerPayMethod.stories.js +56 -56
  933. package/src/components/pages/CustomerPayMethod/index.js +23 -23
  934. package/src/components/pages/CustomerPayMethod/styles.js +21 -21
  935. package/src/components/pages/CustomerType/CustomerType.stories.js +33 -33
  936. package/src/components/pages/CustomerType/index.js +22 -22
  937. package/src/components/pages/CustomerType/styles.js +21 -21
  938. package/src/components/pages/Dashboard/Dashboard.stories.js +62 -62
  939. package/src/components/pages/Dashboard/dashboardUtils.js +74 -74
  940. package/src/components/pages/Dashboard/index.js +382 -382
  941. package/src/components/pages/Dashboard/styles.js +37 -37
  942. package/src/components/pages/EmailResetPassword/EmailResetPassword.stories.js +17 -17
  943. package/src/components/pages/EmailResetPassword/index.js +77 -77
  944. package/src/components/pages/EmailResetPassword/styles.js +27 -27
  945. package/src/components/pages/MultipleEdition/MultipleEdition.stories.js +16 -16
  946. package/src/components/pages/MultipleEdition/components/ImageUploader.js +62 -62
  947. package/src/components/pages/MultipleEdition/components/ImageUploaderStyles.js +29 -29
  948. package/src/components/pages/MultipleEdition/components/ImageVisor.js +143 -143
  949. package/src/components/pages/MultipleEdition/components/styles.js +106 -106
  950. package/src/components/pages/MultipleEdition/index.js +248 -248
  951. package/src/components/pages/MultipleEdition/saveData.js +92 -92
  952. package/src/components/pages/MultipleEdition/styles.js +197 -197
  953. package/src/components/pages/MultipleEdition/utils.js +1074 -1074
  954. package/src/components/pages/OnboardPlan/OnboardPlan.stories.js +51 -51
  955. package/src/components/pages/OnboardPlan/index.js +22 -22
  956. package/src/components/pages/OnboardPlan/styles.js +33 -33
  957. package/src/components/pages/ProductEditionv2/ProductEditionv2.stories.js +213 -213
  958. package/src/components/pages/ProductEditionv2/index.js +1758 -1758
  959. package/src/components/pages/ProductEditionv2/styles.js +154 -154
  960. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +139 -139
  961. package/src/components/pages/ProviderProductEdition/index.js +1779 -1779
  962. package/src/components/pages/ProviderProductEdition/styles.js +122 -122
  963. package/src/components/pages/RegistrationLoginSecondStep/RegistrationLoginSecondStep.stories.js +18 -18
  964. package/src/components/pages/RegistrationLoginSecondStep/index.js +111 -111
  965. package/src/components/pages/RegistrationLoginSecondStep/styles.js +64 -64
  966. package/src/components/pages/RegistrationLoginThirdStep/RegistrationLoginThirdStep.stories.js +17 -17
  967. package/src/components/pages/RegistrationLoginThirdStep/index.js +105 -105
  968. package/src/components/pages/RegistrationLoginThirdStep/styles.js +48 -48
  969. package/src/components/pages/RetailerPlan/RetailerPlan.stories.js +49 -49
  970. package/src/components/pages/RetailerPlan/index.js +24 -24
  971. package/src/components/pages/RetailerPlan/styles.js +26 -26
  972. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +119 -119
  973. package/src/components/pages/RetailerProductEdition/generateThumnail.js +20 -20
  974. package/src/components/pages/RetailerProductEdition/index.js +1838 -1838
  975. package/src/components/pages/RetailerProductEdition/styles.js +104 -104
  976. package/src/components/pages/RetailerProductEdition/utils.js +71 -71
  977. package/src/components/pages/VerificationCodeResetPassword/VerificationCodeResetPassword.stories.js +17 -17
  978. package/src/components/pages/VerificationCodeResetPassword/index.js +92 -92
  979. package/src/components/pages/VerificationCodeResetPassword/styles.js +54 -54
  980. package/src/components/pages/VerificationCodeResetPassword/utils.js +56 -56
  981. package/src/global-files/customHooks.js +24 -24
  982. package/src/global-files/data.js +186 -186
  983. package/src/global-files/fonts.css +69 -69
  984. package/src/global-files/global-styles.css +42 -42
  985. package/src/global-files/handle_http.js +224 -224
  986. package/src/global-files/handle_userTech.js +7 -7
  987. package/src/global-files/utils.js +330 -330
  988. package/src/global-files/variables.js +56 -56
  989. package/src/index.js +113 -113
@@ -1,1838 +1,1838 @@
1
- import { Container } from "./styles";
2
- import { HeaderTop } from "../../molecules/HeaderTop";
3
- import { ImagePreviewer } from "../../organisms/ImagePreviewer";
4
- import { ImageDataTable } from "../../organisms/ImageDataTable";
5
- import { FullProductNameHeader } from "../../organisms/FullProductNameHeader";
6
- import { FullTabsMenu } from "../../organisms/FullTabsMenu";
7
- import { InputGroup } from "../../organisms/InputGroup";
8
- import { useEffect, useReducer, useState, useCallback } from "react";
9
- import { GalleryElement } from "../../molecules/GalleryElement";
10
- import { saveAs } from "file-saver";
11
- import { Commentary } from "../../atoms/Commentary";
12
- import {
13
- getRetailerServices,
14
- getPercentage,
15
- fetchUsers,
16
- } from "../../../global-files/data";
17
- import { GalleryHeader } from "../../molecules/GalleryHeader";
18
- import { ProductImageModal } from "../../organisms/ProductImageModal";
19
- import { useDropzone } from "react-dropzone";
20
- import axios from "axios";
21
- import { v4 as uuidv4 } from "uuid";
22
- import AWS from "aws-sdk";
23
- import attributesSent from "../../../assets/images/modalsSVGs/attributesSent.svg";
24
- import descriptionSent from "../../../assets/images/modalsSVGs/descriptionSent.svg";
25
- import imagesSent from "../../../assets/images/modalsSVGs/uploadingImages.svg";
26
- import { TagAndInput } from "../../molecules/TagAndInput/index";
27
- import { Button } from "../../atoms/GeneralButton";
28
- import { GenericModal } from "../../atoms/GenericModal";
29
- import { ScreenHeader } from "../../atoms/ScreenHeader";
30
- import { Loading } from "../../atoms/Loading";
31
- import succes from "../../../assets/images/genericModal/genericModalCheck.svg";
32
- import { VersionSelector } from "../../organisms/VersionSelector";
33
- import { useCloseModal } from "../../../global-files/customHooks";
34
- import {
35
- getAuditVersion,
36
- getInputsData,
37
- createMessage,
38
- sendMessage,
39
- } from "./utils";
40
- import { Modal } from "../../organisms/Modal";
41
- import { ButtonV2 } from "../../atoms/ButtonV2";
42
- import generateThumbnail from "./generateThumnail";
43
-
44
- const reducerImages = (state, action) => {
45
- let { values, attrForImgs, inputsByRetailer } = state;
46
- switch (action.action) {
47
- case "init":
48
- const newInputsByRetailer = {};
49
- action?.init?.inputsByRetailer?.forEach((inputs) => {
50
- inputs?.forEach((input) => {
51
- if (!newInputsByRetailer[`${input.id_retailer}`])
52
- newInputsByRetailer[`${input.id_retailer}`] = [];
53
- newInputsByRetailer[`${input.id_retailer}`].push(input);
54
- });
55
- });
56
- inputsByRetailer = newInputsByRetailer;
57
- return {
58
- ...action.init,
59
- inputsByRetailer,
60
- valuesInitial: action.init.values,
61
- inputsInitial: action.init.inputs,
62
- };
63
- case "addImg":
64
- values = [...values, action.img];
65
- return { ...state, values };
66
- case "changeImageInfo":
67
- values[action.index][action.attribute] = action.value;
68
- return { ...state, values };
69
- case "changeShotType":
70
- values[action.index][action.attribute] = action.value;
71
- return { ...state, values };
72
-
73
- case "changeAttrValue":
74
- const index = attrForImgs.general.findIndex((f) => f.id === action.id);
75
- if (index !== -1) {
76
- attrForImgs.general[index].value = action.value;
77
- }
78
-
79
- return { ...state, attrForImgs, values };
80
- case "deleteImage":
81
- values = values.filter(
82
- (value) => action.selectedImages.indexOf(value) === -1
83
- );
84
- return { ...state, values };
85
- case "orderImages": {
86
- let { inputsByRetailer, valuesInitial, inputsInitial, inputs } = state;
87
- try {
88
- const orderedImages = [];
89
- const imageIdArray = [];
90
- if (action?.retailerId && !inputsByRetailer[action.retailerId]) {
91
- inputsByRetailer[action.retailerId] = [];
92
- }
93
- action.retailerId &&
94
- inputsByRetailer[action.retailerId]?.filter((input) => {
95
- imageIdArray.push(input.id_image);
96
- valuesInitial.forEach(async (value) => {
97
- if (value.ext == "mp4") {
98
- convertirVideoABase64(
99
- "https://" +
100
- process.env.REACT_APP_IMAGES_BUCKET +
101
- ".s3.amazonaws.com/" +
102
- value.srcDB
103
- )
104
- .then(async (base64) => {
105
- const videoSrc =
106
- "data:video/mp4;base64," + base64.split(",")[1]; // Añade el tipo MIME adecuado
107
- value.src = await generateThumbnail(videoSrc, 2);
108
- })
109
- .catch((error) => {
110
- console.error("Error:", error);
111
- });
112
- }
113
- if (value.image_id === input.id_image) orderedImages.push(value);
114
- });
115
- });
116
- inputs = inputsInitial?.filter((input) =>
117
- imageIdArray.includes(input.id)
118
- );
119
- values = orderedImages.length > 0 ? orderedImages : [];
120
- } catch (error) {
121
- console.log(error);
122
- }
123
- return { ...state, values, inputs };
124
- }
125
- default:
126
- return state;
127
- }
128
- };
129
-
130
- const S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
131
- const REGION = "us-east-1";
132
-
133
- function convertirVideoABase64(url) {
134
- return new Promise((resolve, reject) => {
135
- const xhr = new XMLHttpRequest();
136
- xhr.open("GET", url, true);
137
- xhr.responseType = "blob";
138
- xhr.onload = function () {
139
- if (xhr.status === 200) {
140
- const blob = xhr.response;
141
- const reader = new FileReader();
142
- reader.onloadend = function () {
143
- resolve(reader.result);
144
- };
145
- reader.readAsDataURL(blob);
146
- } else {
147
- reject(new Error("Error al cargar el video"));
148
- }
149
- };
150
- xhr.onerror = function () {
151
- reject(new Error("Error de red al cargar el video"));
152
- };
153
- xhr.send();
154
- });
155
- }
156
-
157
- function obtenerDuracionVideoBase64(base64Data) {
158
- return new Promise((resolve, reject) => {
159
- const video = document.createElement("video");
160
- video.src = base64Data;
161
- video.addEventListener("loadedmetadata", () => {
162
- resolve(video.duration);
163
- });
164
- video.addEventListener("error", reject);
165
- });
166
- }
167
-
168
- AWS.config.update({
169
- accessKeyId: process.env.REACT_APP_KUTS3,
170
- secretAccessKey: process.env.REACT_APP_AKUTS3,
171
- });
172
-
173
- const myBucket = new AWS.S3({
174
- params: { Bucket: S3_BUCKET },
175
- region: REGION,
176
- });
177
-
178
- export const RetailerProductEdition = ({
179
- tabsSections,
180
- productSelected = {},
181
- user = {},
182
- token,
183
- location,
184
- }) => {
185
- const [activeTab, setActiveTab] = useState("Descripción");
186
- const [activeImage, setActiveImage] = useState();
187
- const [imageLayout, setImageLayout] = useState(false);
188
- const [headerTop, setHeaderTop] = useState(0);
189
- const [descriptions, setDescriptions] = useState([]);
190
- const [datasheets, setDatasheets] = useState([]);
191
- const [images, setImages] = useReducer(reducerImages, {});
192
- const [showModal, setShowModal] = useState(false);
193
- const [showRejectModal, setShowRejectModal] = useState(false);
194
- const { getRootProps, getInputProps } = useDropzone({
195
- accept: "image/*, video/mp4",
196
- noKeyboard: true,
197
- multiple: true,
198
- noClick: true,
199
- onDrop: (acceptedFiles) => {
200
- const newImages = [];
201
- acceptedFiles.map((file) => {
202
- const reader = new FileReader();
203
- reader.fileName = file.name;
204
- reader.onload = async function (e) {
205
- const ext = e.srcElement.fileName.split(".");
206
- const img = new Image();
207
- if (ext[ext.length - 1] == "mp4") {
208
- obtenerDuracionVideoBase64(e.target.result)
209
- .then(async (duracion) => {
210
- if (duracion > 15 && duracion < 600) {
211
- img.src = await generateThumbnail(e.target.result, 2);
212
- setTimeout(() => {
213
- const width = img.width;
214
- const height = img.height;
215
- const newImg = {
216
- action: "addImg",
217
- img: {
218
- src: img.src, //e.target.result,
219
- name: e.target.fileName,
220
- ext: ext[ext.length - 1],
221
- width: width,
222
- height: height,
223
- video_src:
224
- ext[ext.length - 1] == "mp4" ? e.target.result : "",
225
- },
226
- };
227
- setImages(newImg);
228
- }, 500);
229
- } else {
230
- setModalAlert({
231
- show: true,
232
- title: "Hubo un error al subir el video",
233
- message:
234
- "Los videos deben durar entre 15 segundos y 10 minutos",
235
- });
236
- }
237
- })
238
- .catch((error) => {
239
- console.error("Error al obtener la duración del video:", error);
240
- });
241
- } else {
242
- img.src = e.target.result;
243
- setTimeout(() => {
244
- const width = img.width;
245
- const height = img.height;
246
- const newImg = {
247
- action: "addImg",
248
- img: {
249
- src: img.src, //e.target.result,
250
- name: e.target.fileName,
251
- ext: ext[ext.length - 1],
252
- width: width,
253
- height: height,
254
- video_src:
255
- ext[ext.length - 1] == "mp4" ? e.target.result : "",
256
- },
257
- };
258
- setImages(newImg);
259
- }, 500);
260
- }
261
- };
262
- reader.onerror = function (error) {
263
- console.log("dropzoneError: ", error);
264
- };
265
- reader.readAsDataURL(file);
266
- return file;
267
- });
268
- },
269
- });
270
- const [updatedDatasheets, setUpdatedDatasheets] = useState([]);
271
- const [updatedDescriptions, setUpdatedDescriptions] = useState([]);
272
- const [imagesUploaded, setImagesUploaded] = useState(false);
273
- const [dataImages, setDataImages] = useState();
274
- const [percentages, setPercentages] = useState(
275
- new Array(product?.retailers?.length).fill({ percentage: 0 })
276
- );
277
- // const [percentages, setPercentages] = useState([{ retailers: {} }]);
278
- const [activePercentage, setActivePercentage] = useState(0);
279
- const [activeRetailer, setActiveRetailer] = useState({});
280
- const [services, setServices] = useState([]);
281
- const [servicesData, setServicesData] = useState([]);
282
- const [message, setMessage] = useState("");
283
- const [product, setProduct] = useState(
284
- JSON.parse(sessionStorage.getItem("productSelected"))
285
- ? JSON.parse(sessionStorage.getItem("productSelected"))
286
- : productSelected
287
- );
288
- const [icon, setIcon] = useState(null);
289
- const [version, setVersion] = useState(product?.version);
290
- const [comments, setComments] = useState({});
291
- const [comment, setComment] = useState("");
292
- const [requiredNull, setRequiredNull] = useState({
293
- "Ficha técnica": 0,
294
- Descripción: 0,
295
- Imágenes: 0,
296
- });
297
- const [crossComment, setCrossComment] = useState(false);
298
- const [userGroups, setUserGroups] = useState([]);
299
- const [assig, setAssig] = useState({});
300
- const [selectedImages, setSelectedImages] = useState([]);
301
- const [componentsArray, setComponentsArray] = useState([]);
302
- const [checkAll, setCheckAll] = useState(false);
303
- const isRetailer = user?.is_retailer;
304
- const [loading, setLoading] = useState(true);
305
- const [retailerStatus, setRetailerStatus] = useState("-");
306
- const [statusArray, setStatusArray] = useState([]);
307
- const [socketType, setSocketType] = useState(null);
308
- const [saving, setSaving] = useState(loading);
309
- const [showVersionSelector, setShowVersionSelector] =
310
- useCloseModal("version-selector");
311
- const shotThd = [58, 59, 60, 61].includes(activeRetailer.id);
312
- const [auditableVersion, setAuditableVersion] = useState(null);
313
- const [auditServices, setAuditServices] = useState([]);
314
- const [auditDatasheets, setAuditDatasheets] = useState([]);
315
- const [auditDescriptions, setAuditDescriptions] = useState([]);
316
- const [auditImages, setAuditImages] = useState([]);
317
- const [compare, setCompare] = useState(false);
318
- const [observation, setObservation] = useState();
319
- const [valRejAll, setValRejAll] = useState(false);
320
- const [modalAlert, setModalAlert] = useState({
321
- show: false,
322
- title: "",
323
- message: "",
324
- errorInputMessage: false,
325
- });
326
-
327
- const [desc, setDesc] = useState([]);
328
- const [fich, setFich] = useState([]);
329
- const [imag, setImag] = useState([]);
330
-
331
- const [isObservationVisible, setObservationVisible] = useState(false);
332
-
333
- const toggleObservation = () => {
334
- setObservationVisible(!isObservationVisible);
335
- };
336
- // const handleClickOutside = (event) => {
337
- // if (
338
- // isObservationVisible &&
339
- // !event.target.closest(".Observation") &&
340
- // !event.target.closest(".Container")
341
- // ) {
342
- // hideObservation();
343
- // }
344
- // };
345
-
346
- // useEffect(() => {
347
- // document.addEventListener("click", handleClickOutside);
348
- // return () => {
349
- // document.removeEventListener("click", handleClickOutside);
350
- // };
351
- // }, [isObservationVisible]);
352
-
353
- const hideObservation = () => {
354
- setObservationVisible(false);
355
- };
356
-
357
- const handleCommentSubmit = (e) => {
358
- e.preventDefault();
359
- const commentText = document.querySelector(
360
- "#commentary-box .ql-container .ql-editor > p"
361
- ).innerHTML;
362
- createComment(e, commentText, activeTab);
363
- };
364
-
365
-
366
- useEffect(async () => {
367
- const { id_article } = product?.article || {};
368
- if (id_article)
369
- await getAuditVersion(id_article, setAuditableVersion, token);
370
- }, []);
371
-
372
- const loadAuditableData = async () => {
373
- if (auditableVersion) {
374
- const auditServices = await getRetailerServices(
375
- product?.article?.id_article,
376
- product?.article?.category,
377
- parseInt(product?.article?.id_category),
378
- auditableVersion.version,
379
- token
380
- );
381
- getInputsData(
382
- auditServices,
383
- activeRetailer,
384
- setAuditDatasheets,
385
- setAuditDescriptions
386
- );
387
- setAuditServices(auditServices);
388
- setAuditImages(auditServices[2]);
389
- }
390
- };
391
-
392
- useEffect(() => {
393
- if (auditableVersion) {
394
- loadAuditableData();
395
- }
396
- }, [auditableVersion]);
397
-
398
- useEffect(() => {
399
- checkAll && setSelectedImages(images.values);
400
- }, [checkAll]);
401
-
402
- const loadData = async () => {
403
- try {
404
- const services = await getRetailerServices(
405
- product?.article?.id_article,
406
- product?.article?.category,
407
- parseInt(product?.article?.id_category),
408
- version,
409
- token
410
- );
411
- if (auditableVersion) {
412
- loadAuditableData();
413
- }
414
- //Converts the data inside the datasheets object to array
415
- setServices(services);
416
- getServices();
417
- setImages({ action: "init", init: services[2] });
418
- if (services[2]?.values?.length > 0) setActiveImage(0);
419
- const data = [
420
- {
421
- id_article: product.article.id_article,
422
- id_category: product.article.id_category,
423
- version: product.version,
424
- id_retailer_array: (
425
- product.retailersAvailable ?? product.retailers
426
- ).map(({ id }) => id),
427
- },
428
- ];
429
- const headers = { Authorization: token };
430
- getPercentage({ data, headers }).then((res) => {
431
- setPercentages(res[0]);
432
- });
433
- setLoading(false);
434
- } catch (error) {
435
- console.log(error);
436
- }
437
- };
438
-
439
- const getServices = async () => {
440
- const servicesResponse = await axios.get(
441
- `${process.env.REACT_APP_SERVICES_ENDPOINT}?articleId=${
442
- product?.article?.id_article
443
- }&orderId=${product?.article?.id_order || product.orderId}&end=true`
444
- );
445
- const parsedResponse = JSON.parse(servicesResponse?.data?.body).data;
446
-
447
- const retailers = product.retailers || product.retailersAvailable;
448
- const retailerResponse = parsedResponse?.map((srv) => srv.id_retailer);
449
- const active = retailers?.find((retailer) =>
450
- retailerResponse.includes(retailer.id)
451
- );
452
- !activeRetailer.id && setActiveRetailer(active ? active : retailers[0]);
453
- setServicesData(parsedResponse);
454
- };
455
-
456
- const translateConcept = (concept) => {
457
- const translation = {
458
- datasheet: "Ficha técnica",
459
- description: "Descripción",
460
- images: "Imágenes",
461
- };
462
- return translation[concept];
463
- };
464
-
465
- const getComments = async (tab = "Descripción") => {
466
- const commentsResponse = await Promise.all([
467
- axios.get(
468
- `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${product?.article?.id_article}&concept=description&orderIdColab=${product?.orderId}&version=${version}`
469
- ),
470
- axios.get(
471
- `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${product?.article?.id_article}&concept=datasheet&orderIdColab=${product?.orderId}&version=${version}`
472
- ),
473
- axios.get(
474
- `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${product?.article?.id_article}&concept=images&orderIdColab=${product?.orderId}&version=${version}`
475
- ),
476
- ]);
477
-
478
- let comments = {};
479
- commentsResponse.forEach(
480
- (comment) =>
481
- JSON.parse(comment?.data?.body).data[0] &&
482
- (comments[
483
- translateConcept(JSON.parse(comment?.data?.body)?.data[0]?.concept)
484
- ] = JSON.parse(comment?.data?.body).data[0])
485
- );
486
- setComment(comments[tab]);
487
- setComments(comments);
488
- };
489
-
490
- useEffect(async () => {
491
- setLoading(true);
492
- loadData();
493
- getComments();
494
- setUserGroups(await fetchUsers(token));
495
- let arr = [];
496
- switch (user.id_role) {
497
- case 7:
498
- case 8:
499
- arr = ["PA", "AS", "CA", "RC", "RA", "RP", "RCA"];
500
- break;
501
- case 4:
502
- case 5:
503
- arr = ["RC", "AC", "AA", "AP", "ACA"];
504
- break;
505
- case 6:
506
- arr = ["RP", "RCA", "AC", "RA"];
507
- break;
508
- default:
509
- arr = [];
510
- break;
511
- }
512
- setStatusArray(arr);
513
- }, [product, version]);
514
-
515
- const loadAssignations = (currentProduct) => {
516
- setAssig({
517
- Descripción: {
518
- assignations: [
519
- {
520
- collaboratorType: "especialist",
521
- id: currentProduct?.article?.id_description_especialist,
522
- },
523
- {
524
- collaboratorType: "facilitator",
525
- id: currentProduct?.article?.id_description_facilitator,
526
- },
527
- ],
528
- collaborators: {
529
- especialist: userGroups[0] || [],
530
- facilitator: userGroups[2] || [],
531
- },
532
- },
533
- "Ficha técnica": {
534
- assignations: [
535
- {
536
- collaboratorType: "especialist",
537
- id: currentProduct?.article?.id_datasheet_especialist,
538
- },
539
- {
540
- collaboratorType: "facilitator",
541
- id: currentProduct?.article?.id_datasheet_facilitator,
542
- },
543
- ],
544
- collaborators: {
545
- especialist: userGroups[0] || [],
546
- facilitator: userGroups[2] || [],
547
- },
548
- },
549
- Imágenes: {
550
- assignations: [
551
- {
552
- collaboratorType: "especialist",
553
- id: currentProduct?.article?.id_images_especialist,
554
- },
555
- {
556
- collaboratorType: "facilitator",
557
- id: currentProduct?.article?.id_images_facilitator,
558
- },
559
- ],
560
- collaborators: {
561
- especialist: userGroups[1] || [],
562
- facilitator: userGroups[3] || [],
563
- },
564
- },
565
- });
566
- };
567
-
568
- useEffect(() => {
569
- loadAssignations(product);
570
- }, [userGroups]);
571
-
572
- useEffect(() => {
573
- const retailers = product?.retailersAvailable || product?.retailers;
574
- if (
575
- Object.keys(percentages[product.article.id_article] ?? {})?.length > 0
576
- ) {
577
- retailers?.forEach((retailer, index) => {
578
- retailer["percentage"] = Number(
579
- percentages[product.article.id_article][retailer.id]
580
- ?.percentageRequired
581
- );
582
- });
583
- }
584
- setActivePercentage(retailers[0]?.percentage);
585
- }, [percentages]);
586
-
587
- useEffect(() => {
588
- getInputsData(services, activeRetailer, setDatasheets, setDescriptions);
589
- auditableVersion && loadAuditableData();
590
- setActivePercentage(Math.round(activeRetailer?.percentage, 0));
591
- activeRetailer?.id &&
592
- setImages({ action: "orderImages", retailerId: activeRetailer.id });
593
- }, [activeRetailer, services]);
594
-
595
- const thumbs = () => {
596
- const imageInputs = socketType?.slice();
597
- const imageType = images?.imageType?.map((e) => ({
598
- value: e?.id,
599
- name: e?.name,
600
- }));
601
- const imagePackagingType = images?.imagePackagingType?.map((e) => ({
602
- value: e?.id,
603
- name: e?.name,
604
- }));
605
- const imageShotType = images?.imageShotType?.map((e) => ({
606
- value: e?.id,
607
- name: e?.type_shot,
608
- }));
609
- return images?.values?.map((image, index) => (
610
- <GalleryElement
611
- setCheckAll={setCheckAll}
612
- key={index + "-" + image.name}
613
- image={image}
614
- gridLayout={imageLayout}
615
- id={"gallery-element-" + index}
616
- index={index + "-" + image.name + "-" + compare}
617
- number={index}
618
- imageType={imageType}
619
- imagePackagingType={imagePackagingType}
620
- imageInputs={imageInputs}
621
- imageShotType={imageShotType}
622
- setSocketType={setSocketType}
623
- changeImage={setImages}
624
- selectedImages={selectedImages}
625
- setSelectedImages={setSelectedImages}
626
- auditImages={auditImages}
627
- compare={compare}
628
- />
629
- ));
630
- };
631
-
632
- const saveDescriptions = async () => {
633
- const dataClean = updatedDescriptions;//.filter((f) => f.value !== "");
634
- if (dataClean.length > 0) {
635
- setLoading(true);
636
- const productTemp = product;
637
- const articleId = product?.article?.id_article;
638
- const dataObject = {
639
- articleId,
640
- articleData: dataClean,
641
- };
642
- if (product?.orderId) dataObject["orderId"] = product?.orderId;
643
- try {
644
- const res = await axios.put(
645
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?description=true&version=${version}`,
646
- dataObject,
647
- {
648
- headers: {
649
- Authorization: token,
650
- },
651
- }
652
- );
653
- if (res.data.statusCode === 200) {
654
- const { newStatus, newArticleStatus } = JSON.parse(res.data.body);
655
- if (newArticleStatus)
656
- productTemp.status = newArticleStatus[articleId];
657
- if (newStatus) productTemp.description_status = newStatus;
658
- setProduct(productTemp);
659
- sessionStorage.setItem(
660
- "productSelected",
661
- JSON.stringify(productTemp)
662
- );
663
-
664
- setUpdatedDescriptions([]);
665
- setMessage("Descripciones guardadas con éxito");
666
- await loadData();
667
- }
668
- } catch (error) {
669
- console.log(error);
670
- }
671
- }
672
- };
673
-
674
- const saveDatasheets = async () => {
675
- const dataClean = updatedDatasheets;//.filter((f) => f.value !== "");
676
- if (dataClean.length > 0) {
677
- setLoading(true);
678
- const productTemp = product;
679
- const articleId = product?.article?.id_article;
680
- const dataObject = {
681
- articleId,
682
- articleData: dataClean,
683
- };
684
- if (product?.orderId) dataObject["orderId"] = product?.orderId;
685
- try {
686
- const res = await axios.put(
687
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?datasheet=true&version=${version}`,
688
- dataObject,
689
- {
690
- headers: {
691
- Authorization: token,
692
- },
693
- }
694
- );
695
- if (res.data.statusCode === 200) {
696
- const { newStatus, newArticleStatus } = JSON.parse(res.data.body);
697
- if (newArticleStatus)
698
- productTemp.status = newArticleStatus[articleId];
699
- if (newStatus) productTemp.datasheet_status = newStatus;
700
- setProduct(productTemp);
701
- sessionStorage.setItem(
702
- "productSelected",
703
- JSON.stringify(productTemp)
704
- );
705
- setUpdatedDatasheets([]);
706
- setMessage("Fichas técnicas guardadas");
707
- await loadData();
708
- }
709
- } catch (error) {
710
- console.log(error);
711
- }
712
- }
713
- };
714
-
715
- useEffect(() => {
716
- const imageInputs = images?.inputs?.map((e) => ({
717
- value: e?.id,
718
- name: e?.name,
719
- required: e?.required,
720
- active: images?.values?.some((value) => value?.image_id === e?.id),
721
- }));
722
- setSocketType(imageInputs);
723
- }, [images]);
724
-
725
- const updateImages = useCallback(async () => {
726
- const imagesList = images?.values?.slice();
727
- const imagesListTemp = imagesList?.reduce((acc, image) => {
728
- acc[image?.image_id] = ++acc[image?.image_id] || 0;
729
- return acc;
730
- }, {});
731
-
732
- const duplicated = imagesList?.filter((image) => {
733
- return imagesListTemp[image?.image_id];
734
- });
735
-
736
- const attrForImgs = Object.values(images?.attrForImgs ?? {}).pop();
737
- const data = {
738
- articleId: product?.article?.id_article,
739
- attrReqImgs: attrForImgs?.map((e) => ({
740
- attrId: e.id,
741
- value: e.value ?? "-",
742
- })),
743
- articleData: imagesList?.filter((e) => !e.id),
744
- updateImages: imagesList?.filter((e) => e.id),
745
- };
746
- if (product?.orderId) data["orderId"] = product?.orderId;
747
- let valid =
748
- data?.articleData?.length === 0
749
- ? true
750
- : data?.articleData?.every((e, i) => {
751
- if (e?.image_id && e?.packing_type && e?.image_type) {
752
- return true;
753
- }
754
- return false;
755
- });
756
- if (valid && data?.updateImages?.length > 0 && duplicated?.length === 0) {
757
- valid = data?.updateImages?.every((e, i) => {
758
- if (e?.image_id && e?.packing_type && e?.image_type) {
759
- return true;
760
- }
761
- return false;
762
- });
763
- }
764
- if (valid && duplicated?.length === 0) {
765
- setLoading(true);
766
- try {
767
- data?.articleData?.forEach((e) => {
768
- e.uuid = uuidv4();
769
- });
770
- setDataImages(data);
771
- if (data?.articleData?.length > 0) {
772
- setImagesUploaded(false);
773
- const promiseArray = [];
774
- data?.articleData?.forEach((e) => {
775
- let file;
776
- if (e.ext == "mp4") {
777
- file = Buffer.from(
778
- e.video_src.replace(/^data:video\/\w+;base64,/, ""),
779
- "base64"
780
- );
781
- e.video_src = "";
782
- } else {
783
- file = Buffer.from(
784
- e.src.replace(/^data:image\/\w+;base64,/, ""),
785
- "base64"
786
- );
787
- }
788
- const params = {
789
- ACL: "public-read",
790
- Body: file,
791
- Bucket: S3_BUCKET,
792
- Key: `id-${data.articleId}/${version}/${e?.image_id}-${e?.uuid}.${e?.ext}`,
793
- };
794
- promiseArray.push(myBucket.putObject(params).promise());
795
- });
796
- await Promise.all(promiseArray);
797
- setImagesUploaded(true);
798
- } else {
799
- setImagesUploaded(true);
800
- }
801
- } catch (err) {
802
- console.log(err);
803
- // setMainLoading(false);
804
- }
805
- } else {
806
- // setMainLoading(false);
807
- setMessage(
808
- "Completa los campos que solicita cada una de la imágenes o hay imágenes con el mismo tipo de toma.\nRecuerda hay campos obligatorios y no podras avanzar si no estan completos."
809
- );
810
- }
811
- // eslint-disable-next-line react-hooks/exhaustive-deps
812
- }, [images, imagesUploaded]);
813
-
814
- useEffect(async () => {
815
- if (imagesUploaded) {
816
- dataImages.articleData = dataImages?.articleData.map((e) => {
817
- delete e.src;
818
- e.imageID = e.image_id;
819
- e.packingType = e.packing_type;
820
- e.imageType = e.image_type;
821
- if (product?.orderId) e["orderId"] = product?.orderId;
822
- return e;
823
- });
824
- try {
825
- const res = await axios.put(
826
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
827
- dataImages,
828
- {
829
- headers: {
830
- Authorization: token,
831
- },
832
- }
833
- );
834
- if (res.data.statusCode === 200) {
835
- let productTemp = product;
836
- const { newStatus, newArticleStatus } = JSON.parse(res.data.body);
837
- if (newArticleStatus)
838
- productTemp.status = newArticleStatus[product?.article?.id_article];
839
- if (newStatus) productTemp.images_status = newStatus;
840
- setProduct(productTemp);
841
- sessionStorage.setItem(
842
- "productSelected",
843
- JSON.stringify(productTemp)
844
- );
845
- setImages({});
846
- setMessage("Imágenes guardadas con éxito");
847
- sessionStorage.removeItem("imagesList");
848
- await loadData();
849
- }
850
- } catch (error) {
851
- console.log(error);
852
- }
853
- }
854
- }, [dataImages, imagesUploaded]);
855
-
856
- const evaluationFinished = (userId, tab, statusArray) => {
857
- const srv = servicesData.filter((serv) => serv.service === getConcept(tab));
858
- const srvActive = srv
859
- .find((serv) => serv.id_retailer === activeRetailer?.id)
860
- ?.status?.replace(/.*\//, "");
861
- const currStatus = product[`${getConcept(tab)}_status`]?.replace(
862
- /.*\//,
863
- ""
864
- );
865
- const unvalidated = ["IE", "CA"].includes(currStatus);
866
-
867
- const auditorUnvalidated = !["RA", "AA", "ACA", "AP"].includes(currStatus);
868
-
869
- switch (userId) {
870
- case 7:
871
- case 8:
872
- return (
873
- (statusArray.includes(srvActive) &&
874
- statusArray.includes(product?.status)) ||
875
- srv.filter((serv) =>
876
- statusArray.includes(serv.status?.replace(/.*\//, ""))
877
- ).length === srv.length
878
- );
879
- case 4:
880
- case 5:
881
- return (
882
- unvalidated &&
883
- ["CA", "IE"].includes(product.status) && // "RC", "AC", "AA", "AP", "ACA"
884
- srv.filter((serv) => statusArray.includes(serv.status)).length ===
885
- srv.length
886
- );
887
- case 6:
888
- return (
889
- statusArray.includes(product.status) && // RP, RCA, AC, RA true
890
- srv.every((serv) =>
891
- ["RA", "AA", "AP", "ACA"].includes(serv.status)
892
- ) &&
893
- auditorUnvalidated
894
- );
895
- default:
896
- break;
897
- }
898
- };
899
-
900
- const getConcept = (tab) => {
901
- switch (tab) {
902
- case "Descripción":
903
- return "description";
904
- case "Ficha técnica":
905
- return "datasheet";
906
- case "Imágenes":
907
- return "images";
908
- }
909
- };
910
-
911
- const approveRejectButtons = (action) => {
912
- let concept = getConcept(action || activeTab);
913
-
914
- const retailerStatus = servicesData
915
- .find(
916
- (srv) =>
917
- srv.id_retailer === activeRetailer?.id && srv.service === concept
918
- )
919
- ?.status?.replace(/.*\//, "");
920
-
921
- //sessionStorage product
922
- const adminFacilitatorCanEvaluate =
923
- retailerStatus === "IE" && [1, 4, 5].includes(user.id_role);
924
- const adminAuditorCanEvaluate =
925
- ["AC", "RP", "RCA", "SAC"].includes(retailerStatus) &&
926
- [1, 6].includes(user.id_role);
927
- return adminFacilitatorCanEvaluate || adminAuditorCanEvaluate;
928
- };
929
-
930
- const approveRejectAllButtons = () => {
931
- let concepts = [];
932
- switch (user.id_role) {
933
- case 4:
934
- concepts = ["description", "datasheet"];
935
- break;
936
- case 5:
937
- concepts = ["images"];
938
- break;
939
-
940
- default:
941
- concepts = ["description", "datasheet", "images"];
942
- break;
943
- }
944
-
945
- const services = servicesData.filter(({ service }) =>
946
- concepts.includes(service)
947
- );
948
-
949
- const adminFacilitatorCanEvaluate =
950
- services.every((srv) => srv?.status?.replace(/.*\//, "") === "IE") &&
951
- [1, 4, 5].includes(user.id_role);
952
-
953
- //sessionStorage product
954
- const adminAuditorCanEvaluate =
955
- servicesData.every((srv) =>
956
- ["AC", "RP", "RCA"].includes(srv?.status?.replace(/.*\//, ""))
957
- ) && [1, 6].includes(user.id_role);
958
- return adminFacilitatorCanEvaluate || adminAuditorCanEvaluate;
959
- };
960
-
961
- const getSectionIcon = () => {
962
- switch (activeTab) {
963
- case "Ficha técnica":
964
- setIcon(attributesSent);
965
- break;
966
- case "Descripción":
967
- setIcon(descriptionSent);
968
- break;
969
- case "Imágenes":
970
- setIcon(imagesSent);
971
- break;
972
- default:
973
- break;
974
- }
975
- };
976
-
977
- const sendToFacilitator = async (result) => {
978
- setLoading(true);
979
- try {
980
- let concept = getConcept(activeTab);
981
-
982
- const productTemp = { ...product };
983
- const evalStatus = retailerStatus;
984
- const articleId = product.article.id_article;
985
- const orderId = product.orderId;
986
-
987
- let data = {
988
- articleId,
989
- orderId,
990
- concept,
991
- evalStatus,
992
- retailerId: activeRetailer.id,
993
- };
994
- let res;
995
- let message;
996
- if (result) {
997
- data.result = result;
998
- res = await axios.put(
999
- `${process.env.REACT_APP_EVALUATION_ENDPOINT}`,
1000
- data,
1001
- {
1002
- headers: {
1003
- Authorization: token,
1004
- },
1005
- }
1006
- );
1007
- getServices();
1008
- } else {
1009
- const specialistDone = ["RC", "RA", "CA"].includes(evalStatus);
1010
-
1011
- if (specialistDone) {
1012
- message = `${activeTab} enviada a facilitador`;
1013
- getSectionIcon();
1014
- } else if (["IE", "AC", "RP", "RCA"].includes(evalStatus)) {
1015
- message = "Evaluación enviada";
1016
- getSectionIcon();
1017
- }
1018
- res = await axios.put(`${process.env.REACT_APP_SEND_EVAL}`, data, {
1019
- headers: {
1020
- Authorization: token,
1021
- },
1022
- });
1023
- }
1024
- if (res.data.statusCode === 200) {
1025
- const { newStatus, newOrderStatus, newArticleStatus } = JSON.parse(
1026
- res.data.body
1027
- );
1028
- const messageToChat = createMessage(
1029
- product.retailers,
1030
- activeRetailer.id,
1031
- evalStatus,
1032
- newStatus,
1033
- activeTab
1034
- );
1035
-
1036
- const data = {
1037
- paramsBody: {
1038
- id: product.article.id_article,
1039
- version: version,
1040
- items: [{ type: "status", value: messageToChat }],
1041
- retailerId: activeRetailer.id,
1042
- status: product.status,
1043
- },
1044
- paramsHeader: { Authorization: token },
1045
- };
1046
- await sendMessage(data);
1047
- if (newOrderStatus) productTemp.status = newArticleStatus[articleId];
1048
- productTemp[`${concept}_status`] = newStatus;
1049
- await loadData();
1050
- if (message) setMessage(message);
1051
- sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
1052
- setProduct(productTemp);
1053
- }
1054
- } catch (error) {
1055
- console.log(error);
1056
- }
1057
- setLoading(false);
1058
- };
1059
-
1060
- const userAssigned = (tab, rol) => {
1061
- let concept = getConcept(activeTab);
1062
-
1063
- const allowedRoles = [1, 4, 5, 6, 7, 8];
1064
- const validUser = allowedRoles.includes(user?.id_role);
1065
-
1066
- if (!rol) {
1067
- switch (user.id_role) {
1068
- case 4:
1069
- case 5:
1070
- rol = "facilitator";
1071
- break;
1072
- case 7:
1073
- case 8:
1074
- rol = "especialist";
1075
- break;
1076
- }
1077
- }
1078
-
1079
- return (
1080
- user.id_role === 1 ||
1081
- (product.article[`id_${concept}_${rol}`] === user.id_user && validUser)
1082
- );
1083
- };
1084
-
1085
- const auditorAssigned = () => {
1086
- return product?.article[`id_auditor`] === user.id_user;
1087
- };
1088
-
1089
- const createComment = async (e, body, tab) => {
1090
- let concept = "";
1091
- switch (activeTab) {
1092
- case "Ficha técnica":
1093
- concept = "datasheet";
1094
- break;
1095
- case "Imágenes":
1096
- concept = "images";
1097
- break;
1098
-
1099
- default:
1100
- concept = "description";
1101
- break;
1102
- }
1103
- const data = {
1104
- articleId: product?.article?.id_article,
1105
- orderId: product?.orderId,
1106
- message: body?.replace(/<.*?\/?>/gm, ""),
1107
- concept: concept,
1108
- version: version,
1109
- };
1110
- await axios.post(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
1111
- headers: {
1112
- Authorization: token,
1113
- },
1114
- });
1115
- await getComments(tab);
1116
- setMessage("");
1117
- setComponentsArray([]);
1118
- };
1119
-
1120
- const getRequired = (services) => {
1121
- try {
1122
- const objetcTemp = {};
1123
- const datasheetServicesArray = Object.values(services[0]);
1124
- const dsInputs = datasheetServicesArray.pop();
1125
- const descriptionsServicesArray = services[1];
1126
-
1127
- let dsInputsRequired = [];
1128
- let desInputsRequired = 0;
1129
- datasheetServicesArray?.forEach((datasheet) => {
1130
- const [requested] = servicesData?.filter(
1131
- (srv) =>
1132
- srv.id_retailer === datasheet.retailer.id &&
1133
- srv.service === getConcept(activeTab)
1134
- );
1135
- requested &&
1136
- datasheet?.data &&
1137
- Object.values(datasheet?.data).forEach((dataGroup) =>
1138
- dsInputsRequired.push(
1139
- ...dataGroup.inputs.filter(
1140
- (input) =>
1141
- dsInputs[input].required &&
1142
- (dsInputs[input].value === undefined ||
1143
- !dsInputs[input].value)
1144
- )
1145
- )
1146
- );
1147
- });
1148
-
1149
- objetcTemp["Ficha técnica"] = dsInputsRequired.length;
1150
-
1151
- const regex = /(<\/?p>)|(<\/?strong>)|(<br>)/gm;
1152
- descriptionsServicesArray.forEach((description) => {
1153
- const [requested] = servicesData.filter(
1154
- (srv) =>
1155
- srv.id_retailer === description.id &&
1156
- srv.service === getConcept(activeTab)
1157
- );
1158
- if (requested) {
1159
- description.inputs.forEach((input) => {
1160
- if (
1161
- input.required &&
1162
- (!input.value || input.value?.replace(regex, "") === "")
1163
- ) {
1164
- desInputsRequired++;
1165
- }
1166
- });
1167
- }
1168
- });
1169
-
1170
- objetcTemp["Descripción"] = desInputsRequired;
1171
-
1172
- const retailersRequested = [];
1173
- services[2]?.retailerMandatories?.forEach((retMan) =>
1174
- retMan.forEach((rm) => retailersRequested.push(rm))
1175
- );
1176
- const requiredImages = services[2]?.inputs?.filter(
1177
- (e) =>
1178
- e.required === 1 &&
1179
- retailersRequested.filter(
1180
- (ret) =>
1181
- ret.id_image === e.id &&
1182
- servicesData.filter((srv) => srv.id_retailer === ret.id_retailer)
1183
- .length > 0
1184
- ).length > 0
1185
- );
1186
-
1187
- let requiredCounter = 0;
1188
- requiredImages?.forEach(
1189
- (req) =>
1190
- services[2].values.filter((img) => img.image_id === req.id).length ===
1191
- 0 && requiredCounter++
1192
- );
1193
- objetcTemp["Imágenes"] = requiredCounter;
1194
- setRequiredNull(objetcTemp);
1195
- } catch (error) {
1196
- console.log(error);
1197
- }
1198
- };
1199
-
1200
- useEffect(() => {
1201
- setComment(comments[activeTab]);
1202
- }, [activeTab]);
1203
-
1204
- const commentRevised = async () => {
1205
- const data = {
1206
- commentId: comment.id,
1207
- };
1208
- await axios.put(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
1209
- headers: {
1210
- Authorization: sessionStorage.getItem("jwt"),
1211
- },
1212
- });
1213
- setCrossComment(false);
1214
- await getComments();
1215
- };
1216
-
1217
- const setAssignation = async (assignationType, assignationId) => {
1218
- let concept = "";
1219
- switch (activeTab) {
1220
- case "Ficha técnica":
1221
- concept = "datasheet";
1222
- break;
1223
- case "Imágenes":
1224
- concept = "images";
1225
- break;
1226
-
1227
- default:
1228
- concept = "description";
1229
- break;
1230
- }
1231
- const productTemp = product;
1232
- productTemp.article[`id_${concept}_${assignationType}`] = assignationId;
1233
- const data = {
1234
- articleList: [
1235
- {
1236
- orderId: product.orderId,
1237
- articleId: product?.article?.id_article,
1238
- },
1239
- ],
1240
- concept: concept,
1241
- userId: assignationId,
1242
- };
1243
- await axios({
1244
- method: "post",
1245
- url: process.env.REACT_APP_ASSIGNATIONS_ENDPOINT,
1246
- data,
1247
- headers: {
1248
- Authorization: token,
1249
- },
1250
- });
1251
- loadAssignations(productTemp);
1252
- sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
1253
- };
1254
-
1255
- const downloadImages = () => {
1256
- selectedImages.length > 0
1257
- ? selectedImages.forEach((e) => {
1258
- if (e.id) {
1259
- saveAs(
1260
- `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
1261
- `${product.article.upc}_${e.name}.${e.ext}`
1262
- );
1263
- }
1264
- })
1265
- : images?.values?.forEach((e) => {
1266
- if (e.id) {
1267
- saveAs(
1268
- `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
1269
- `${product.article.upc}_${e.name}.${e.ext}`
1270
- );
1271
- }
1272
- });
1273
- };
1274
-
1275
- const deleteImages = () => {
1276
- setLoading(true);
1277
- const { values } = images;
1278
- const imgsInBack = [];
1279
-
1280
- selectedImages.forEach((selectedImg) => {
1281
- if (selectedImg.id) imgsInBack.push(selectedImg);
1282
- });
1283
-
1284
- const imgsLeft = values.filter(
1285
- (value) => selectedImages.indexOf(value) === -1
1286
- );
1287
-
1288
- if (imgsInBack.length > 0) {
1289
- const data = {
1290
- articleId: product.article.id_article,
1291
- deleteImages: imgsInBack,
1292
- orderId: product.orderId,
1293
- };
1294
- try {
1295
- axios.put(
1296
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
1297
- data,
1298
- {
1299
- headers: { Authorization: token },
1300
- }
1301
- );
1302
- } catch (err) {
1303
- console.log(err);
1304
- }
1305
- }
1306
-
1307
- setImages({
1308
- action: "deleteImage",
1309
- selectedImages,
1310
- });
1311
-
1312
- getRequired([
1313
- services[0],
1314
- services[1],
1315
- { ...services[2], values: imgsLeft },
1316
- ]);
1317
-
1318
- setTimeout(() => {
1319
- setLoading(false);
1320
- }, 500);
1321
-
1322
- setMessage("");
1323
- setComponentsArray([]);
1324
- };
1325
-
1326
- const askToDeleteImages = () => {
1327
- if (selectedImages.length > 0) {
1328
- setMessage("¿Está seguro de eliminar las imágenes seleccionadas?");
1329
- setComponentsArray([
1330
- <ScreenHeader
1331
- key={"1"}
1332
- text={"¿Está seguro de eliminar las imágenes seleccionadas?"}
1333
- headerType="retailer-name-header"
1334
- color={"white"}
1335
- />,
1336
- <Button
1337
- key={"2"}
1338
- buttonType="general-white-button"
1339
- label={"Cancelar"}
1340
- onClick={() => setMessage("")}
1341
- />,
1342
- <Button
1343
- key={"3"}
1344
- buttonType="general-button-default"
1345
- label={"Aceptar"}
1346
- onClick={() => {
1347
- setMessage("");
1348
- deleteImages();
1349
- }}
1350
- />,
1351
- ]);
1352
- }
1353
- };
1354
-
1355
- const getRetailerStatus = (servicesData, tab) => {
1356
- const arr = servicesData?.slice();
1357
- let concept = getConcept(tab);
1358
-
1359
- let retailerService = {};
1360
- [retailerService] = arr?.filter(
1361
- (service) =>
1362
- service.id_retailer === activeRetailer?.id &&
1363
- service.service === concept
1364
- );
1365
- return retailerService ? retailerService.status : "NS";
1366
- };
1367
-
1368
- useEffect(() => {
1369
- let status = getRetailerStatus(servicesData, activeTab);
1370
- setRetailerStatus(status);
1371
- }, [activeTab, servicesData, activeRetailer]);
1372
-
1373
- useEffect(() => {
1374
- services.length > 0 && getRequired(services);
1375
- }, [services, servicesData, activeTab]);
1376
-
1377
- useEffect(() => {
1378
- setSaving(loading);
1379
- }, [loading]);
1380
-
1381
- const validateAll = async (result) => {
1382
- try {
1383
- setLoading(true);
1384
- const evaluationArray = [];
1385
- let conceptArray = [];
1386
- switch (user.id_role) {
1387
- case 4:
1388
- conceptArray = ["description", "datasheet"];
1389
- break;
1390
- case 5:
1391
- conceptArray = ["images"];
1392
- break;
1393
-
1394
- default:
1395
- conceptArray = ["description", "datasheet", "images"];
1396
- break;
1397
- }
1398
-
1399
- const messages = [];
1400
-
1401
- servicesData?.forEach((ret) => {
1402
- if (conceptArray.includes(ret.service)) {
1403
- let data = {
1404
- articleId: product.article.id_article,
1405
- orderId: product.id_order ?? product.orderId,
1406
- concept: ret.service,
1407
- result: result,
1408
- evalStatus: ret.status,
1409
- retailerId: ret.id_retailer,
1410
- };
1411
- evaluationArray.push(
1412
- axios.put(`${process.env.REACT_APP_EVALUATION_ENDPOINT}`, data, {
1413
- headers: {
1414
- Authorization: token,
1415
- },
1416
- })
1417
- );
1418
- }
1419
- });
1420
- await Promise.all(evaluationArray);
1421
-
1422
- const productTemp = product;
1423
- productTemp.status = `${result}A`;
1424
- productTemp.datasheet_status =
1425
- productTemp.datasheet_status === "NS" ? "NS" : `${result}A`;
1426
- productTemp.description_status =
1427
- productTemp.description_status === "NS" ? "NS" : `${result}A`;
1428
- productTemp.images_status =
1429
- productTemp.images_status === "NS" ? "NS" : `${result}A`;
1430
- sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
1431
- setProduct(productTemp);
1432
- const messagesResponse = await Promise.all(messages);
1433
-
1434
- await loadData();
1435
- } catch (error) {
1436
- console.log(error);
1437
- }
1438
- };
1439
-
1440
- const getObservation = async () => {
1441
- const response = await axios.get(
1442
- `${process.env.REACT_APP_READ_OBSERVATION}?articleId=${product.article.id_article}&orderId=${product?.orderId}`,
1443
- {
1444
- headers: {
1445
- Authorization: sessionStorage.getItem("jwt"),
1446
- },
1447
- }
1448
- );
1449
- const parseData = JSON.parse(response.data.body).data[0];
1450
- setObservation(parseData.observations);
1451
- };
1452
- useEffect(() => {
1453
- getObservation();
1454
- }, []);
1455
- return (
1456
- <Container headerTop={headerTop}>
1457
- <HeaderTop
1458
- setHeaderTop={setHeaderTop}
1459
- auditableVersion={auditableVersion}
1460
- setCompare={setCompare}
1461
- isAuditor={[1, 6].includes(user.id_role)}
1462
- withChat={location?.state?.withChat}
1463
- chatType={location?.state?.chatType}
1464
- productSelected={product}
1465
- token={token}
1466
- activeRetailer={activeRetailer}
1467
- />
1468
- <div className="data-container">
1469
- <div className="image-data-panel">
1470
- <ImagePreviewer
1471
- activeImage={images?.values ? images?.values[activeImage] : {}}
1472
- imagesArray={images}
1473
- setActiveImage={setActiveImage}
1474
- setShowModal={setShowModal}
1475
- />
1476
- <ImageDataTable
1477
- lists={images}
1478
- activeImage={images?.values ? images?.values[activeImage] : {}}
1479
- retailerSelected={activeRetailer?.id}
1480
- setImages={setImages}
1481
- assignationsImages={assig["Imágenes"]}
1482
- imagesStatus={product?.images_status}
1483
- setAssignation={setAssignation}
1484
- isRetailer={isRetailer}
1485
- onClickSave={() =>
1486
- product?.services?.images === 1 && updateImages()
1487
- }
1488
- showSaveButton={auditorAssigned() || userAssigned()}
1489
- setShowVersionSelector={setShowVersionSelector}
1490
- version={version}
1491
- shotThd={shotThd}
1492
- />
1493
- </div>
1494
- <div className="product-information">
1495
- <FullProductNameHeader
1496
- headerData={product}
1497
- productObservation={observation}
1498
- percent={activePercentage}
1499
- activeRetailer={activeRetailer}
1500
- servicesData={servicesData}
1501
- setActiveRetailer={setActiveRetailer}
1502
- sendToFacilitator={sendToFacilitator}
1503
- approve={() => {
1504
- sendToFacilitator("A");
1505
- }}
1506
- reject={() => {
1507
- setShowRejectModal(true);
1508
- }}
1509
- showApproveRejectAll={
1510
- approveRejectAllButtons() && (auditorAssigned() || userAssigned())
1511
- }
1512
- showValidationButtons={
1513
- approveRejectButtons() && (auditorAssigned() || userAssigned())
1514
- }
1515
- approveAll={() => validateAll("A")}
1516
- rejectAll={() => {
1517
- setShowRejectModal(true);
1518
- setValRejAll(true);
1519
- }}
1520
- isObservationVisible={isObservationVisible}
1521
- toggleObservation={toggleObservation}
1522
- // handleClickOutside={handleClickOutside}
1523
- hideObservation={hideObservation}
1524
- />
1525
- <FullTabsMenu
1526
- tabsSections={tabsSections}
1527
- status={retailerStatus}
1528
- activeTab={activeTab}
1529
- setActiveTab={setActiveTab}
1530
- setImageLayout={setImageLayout}
1531
- downloadImages={downloadImages}
1532
- askToDeleteImages={askToDeleteImages}
1533
- assig={assig[activeTab]}
1534
- setAssignation={setAssignation}
1535
- isRetailer={isRetailer}
1536
- showSaveButton={auditorAssigned() || userAssigned()}
1537
- version={version}
1538
- desc={desc}
1539
- setDesc={setDesc}
1540
- fich={fich}
1541
- setFich={setFich}
1542
- imag={imag}
1543
- setImag={setImag}
1544
- updatedDescriptions={updatedDescriptions}
1545
- setUpdatedDescriptions={setUpdatedDescriptions}
1546
- updatedDatasheets={updatedDatasheets}
1547
- setUpdatedDatasheets={setUpdatedDatasheets}
1548
- images={images}
1549
- setImages={setImages}
1550
- selectedImages={selectedImages}
1551
- setSelectedImages={setSelectedImages}
1552
- setShowVersionSelector={setShowVersionSelector}
1553
- onClickSave={() => {
1554
- switch (activeTab) {
1555
- case "Descripción":
1556
- !saving &&
1557
- product?.description_status !== "NS" &&
1558
- saveDescriptions();
1559
- break;
1560
- case "Ficha técnica":
1561
- !saving &&
1562
- product?.datasheet_status !== "NS" &&
1563
- saveDatasheets();
1564
- break;
1565
- case "Imágenes":
1566
- !saving && product?.images_status !== "NS" && updateImages();
1567
- break;
1568
-
1569
- default:
1570
- break;
1571
- }
1572
- }}
1573
- canAssign={![7, 8].includes(user.id_role)}
1574
- />
1575
- <div
1576
- className={
1577
- "services-information-container " +
1578
- (imageLayout && activeTab === "Imágenes" ? "image-services" : "")
1579
- }
1580
- >
1581
- {loading ? (
1582
- <Loading />
1583
- ) : (
1584
- <>
1585
- {!imageLayout &&
1586
- activeTab === "Imágenes" &&
1587
- product?.services?.images === 1 && (
1588
- <GalleryHeader
1589
- setSelectedImages={setSelectedImages}
1590
- checkAll={checkAll}
1591
- setCheckAll={setCheckAll}
1592
- shotThd={shotThd}
1593
- />
1594
- )}
1595
-
1596
- {activeTab === "Ficha técnica" &&
1597
- (product?.datasheet_status !== "NS" ? (
1598
- datasheets[0]?.data?.map((dataGroup, index) => (
1599
- <InputGroup
1600
- key={index + "-" + activeRetailer.name}
1601
- articleId={product.article.id_article}
1602
- version={version}
1603
- activeSection={activeTab}
1604
- inputGroup={dataGroup}
1605
- dataInputs={datasheets[1]}
1606
- auditInputs={auditDatasheets[1]}
1607
- updatedDatasheets={updatedDatasheets}
1608
- setUpdatedDatasheets={setUpdatedDatasheets}
1609
- compare={compare}
1610
- />
1611
- ))
1612
- ) : (
1613
- <ScreenHeader
1614
- text={"No cuentas con este servicio"}
1615
- headerType={"input-name-header"}
1616
- />
1617
- ))}
1618
- {activeTab === "Descripción" &&
1619
- (product?.description_status !== "NS" ? (
1620
- <InputGroup
1621
- activeSection={activeTab}
1622
- inputGroup={descriptions[0]}
1623
- auditInputGroup={auditDescriptions[0]}
1624
- updatedDescriptions={updatedDescriptions}
1625
- setUpdatedDescriptions={setUpdatedDescriptions}
1626
- articleId={product?.article?.id_article}
1627
- version={version}
1628
- dinamicHeight={true}
1629
- compare={compare}
1630
- />
1631
- ) : (
1632
- <ScreenHeader
1633
- text={"No cuentas con este servicio"}
1634
- headerType={"input-name-header"}
1635
- />
1636
- ))}
1637
-
1638
- {activeTab === "Imágenes" &&
1639
- (product?.images_status !== "NS" ? (
1640
- <section className="container">
1641
- <div {...getRootProps({ className: "dropzone" })}>
1642
- <input {...getInputProps()} />
1643
- <aside>{thumbs()}</aside>
1644
- </div>
1645
- </section>
1646
- ) : (
1647
- <ScreenHeader
1648
- text={"No cuentas con este servicio"}
1649
- headerType={"input-name-header"}
1650
- />
1651
- ))}
1652
- </>
1653
- )}
1654
- </div>
1655
- {/* {(userAssigned(activeTab) || auditorAssigned()) &&
1656
- product[`${getConcept(activeTab)}_status`] !== "NS" && (
1657
- <div className="commentary-box">
1658
- {[7, 8].includes(user.id_role) && (
1659
- <Button
1660
- buttonType={
1661
- evaluationFinished(
1662
- user.id_role,
1663
- activeTab,
1664
- statusArray
1665
- ) && requiredNull[activeTab] === 0
1666
- ? "general-green-button"
1667
- : "general-button-disabled"
1668
- }
1669
- label={"Enviar evaluación"}
1670
- onClick={() => sendToFacilitator()}
1671
- />
1672
- )}
1673
- </div>
1674
- )} */}
1675
-
1676
- {(userAssigned(activeTab) || auditorAssigned()) &&
1677
- product[`${getConcept(activeTab)}_status`] !== "NS" && (
1678
- <div className="commentary-box">
1679
- {!comment ? (
1680
- <div className="commentary">
1681
- <TagAndInput
1682
- label={"Caja de Comentario"}
1683
- inputType={"textarea"}
1684
- inputCols={80}
1685
- inputRows={4}
1686
- inputId={"commentary-box"}
1687
- index={0}
1688
- />
1689
- <div className="buttons-box">
1690
- <Button
1691
- buttonType={"general-transparent-button"}
1692
- label={"Enviar comentario"}
1693
- onClick={handleCommentSubmit}
1694
- />
1695
- </div>
1696
- </div>
1697
- ) : (
1698
- <div className="feedback-box">
1699
- <Commentary
1700
- comment={comment?.message?.replace(/<.*?\/?>/gm, "")}
1701
- reviewed={crossComment}
1702
- />
1703
- <Button
1704
- buttonType={"circular-button accept-button"}
1705
- onClick={async () => {
1706
- setCrossComment(true);
1707
- commentRevised();
1708
- }}
1709
- />
1710
- </div>
1711
- )}
1712
- {[7, 8].includes(user.id_role) && (
1713
- <Button
1714
- buttonType={
1715
- evaluationFinished(
1716
- user.id_role,
1717
- activeTab,
1718
- statusArray
1719
- ) && requiredNull[activeTab] === 0
1720
- ? "general-green-button"
1721
- : "general-button-disabled"
1722
- }
1723
- label={"Enviar evaluación"}
1724
- onClick={() => sendToFacilitator()}
1725
- />
1726
- )}
1727
- </div>
1728
- )}
1729
- </div>
1730
- </div>
1731
- {showModal && (
1732
- <ProductImageModal
1733
- images={images}
1734
- setShowModal={setShowModal}
1735
- sendToFacilitator={sendToFacilitator}
1736
- approveRejectButtons={approveRejectButtons()}
1737
- />
1738
- )}
1739
- {message.length > 0 && (
1740
- <GenericModal
1741
- buttonType={componentsArray.length > 0 && "delete-product"}
1742
- componentsArray={
1743
- componentsArray.length > 0
1744
- ? componentsArray
1745
- : [
1746
- <img key="1" src={succes} alt="success icon" />,
1747
- <ScreenHeader
1748
- key="2"
1749
- headerType={"retailer-name-header"}
1750
- text={message}
1751
- color={"white"}
1752
- />,
1753
- ]
1754
- }
1755
- onClick={() => setMessage("")}
1756
- />
1757
- )}
1758
- {showVersionSelector && (
1759
- <VersionSelector
1760
- modalId={"version-selector"}
1761
- articleId={product.article.id_article}
1762
- setVersion={setVersion}
1763
- companyName={product.article.company_name}
1764
- currentVersion={version}
1765
- setShowVersionSelector={setShowVersionSelector}
1766
- jwt={token}
1767
- />
1768
- )}
1769
- {showRejectModal && (
1770
- <Modal
1771
- title={`Agregar mensaje de rechazo para ${activeTab?.toLowerCase()}`}
1772
- show={showRejectModal}
1773
- customComponent={
1774
- <TagAndInput
1775
- inputType={"textarea"}
1776
- inputId={"modal-message-box"}
1777
- index={0}
1778
- color={"white"}
1779
- />
1780
- }
1781
- buttons={[
1782
- <ButtonV2
1783
- key={"btn-Cancelar"}
1784
- type={"white"}
1785
- label={"Cancelar"}
1786
- size={12}
1787
- onClick={() => {
1788
- setShowRejectModal(false);
1789
- }}
1790
- />,
1791
- <ButtonV2
1792
- key={"btn-Aceptar"}
1793
- type={"pink"}
1794
- label={"Aceptar"}
1795
- size={12}
1796
- onClick={async (e) => {
1797
- const element = document.querySelector(
1798
- "#modal-message-box .ql-container .ql-editor > p"
1799
- );
1800
-
1801
- if (!element) {
1802
- console.error("Elemento no encontrado");
1803
- return;
1804
- }
1805
-
1806
- const body = element.innerHTML;
1807
-
1808
- if (typeof body !== "string") {
1809
- console.error("El contenido de body no es una cadena", body);
1810
- return;
1811
- }
1812
-
1813
- await createComment(e, body, activeTab);
1814
- valRejAll ? validateAll("R") : sendToFacilitator("R");
1815
- setMessage("Rechazado");
1816
- setShowRejectModal(false);
1817
- }}
1818
- />,
1819
- ]}
1820
- />
1821
- )}
1822
- <Modal
1823
- className="container-modalAlert"
1824
- show={modalAlert.show}
1825
- title={modalAlert.title}
1826
- message={modalAlert.message}
1827
- icon={"info"}
1828
- onClickBtnDefault={(event) => {
1829
- setModalAlert((prev) => ({
1830
- ...prev,
1831
- show: false,
1832
- errorInputMessage: false,
1833
- }));
1834
- }}
1835
- />
1836
- </Container>
1837
- );
1838
- };
1
+ import { Container } from "./styles";
2
+ import { HeaderTop } from "../../molecules/HeaderTop";
3
+ import { ImagePreviewer } from "../../organisms/ImagePreviewer";
4
+ import { ImageDataTable } from "../../organisms/ImageDataTable";
5
+ import { FullProductNameHeader } from "../../organisms/FullProductNameHeader";
6
+ import { FullTabsMenu } from "../../organisms/FullTabsMenu";
7
+ import { InputGroup } from "../../organisms/InputGroup";
8
+ import { useEffect, useReducer, useState, useCallback } from "react";
9
+ import { GalleryElement } from "../../molecules/GalleryElement";
10
+ import { saveAs } from "file-saver";
11
+ import { Commentary } from "../../atoms/Commentary";
12
+ import {
13
+ getRetailerServices,
14
+ getPercentage,
15
+ fetchUsers,
16
+ } from "../../../global-files/data";
17
+ import { GalleryHeader } from "../../molecules/GalleryHeader";
18
+ import { ProductImageModal } from "../../organisms/ProductImageModal";
19
+ import { useDropzone } from "react-dropzone";
20
+ import axios from "axios";
21
+ import { v4 as uuidv4 } from "uuid";
22
+ import AWS from "aws-sdk";
23
+ import attributesSent from "../../../assets/images/modalsSVGs/attributesSent.svg";
24
+ import descriptionSent from "../../../assets/images/modalsSVGs/descriptionSent.svg";
25
+ import imagesSent from "../../../assets/images/modalsSVGs/uploadingImages.svg";
26
+ import { TagAndInput } from "../../molecules/TagAndInput/index";
27
+ import { Button } from "../../atoms/GeneralButton";
28
+ import { GenericModal } from "../../atoms/GenericModal";
29
+ import { ScreenHeader } from "../../atoms/ScreenHeader";
30
+ import { Loading } from "../../atoms/Loading";
31
+ import succes from "../../../assets/images/genericModal/genericModalCheck.svg";
32
+ import { VersionSelector } from "../../organisms/VersionSelector";
33
+ import { useCloseModal } from "../../../global-files/customHooks";
34
+ import {
35
+ getAuditVersion,
36
+ getInputsData,
37
+ createMessage,
38
+ sendMessage,
39
+ } from "./utils";
40
+ import { Modal } from "../../organisms/Modal";
41
+ import { ButtonV2 } from "../../atoms/ButtonV2";
42
+ import generateThumbnail from "./generateThumnail";
43
+
44
+ const reducerImages = (state, action) => {
45
+ let { values, attrForImgs, inputsByRetailer } = state;
46
+ switch (action.action) {
47
+ case "init":
48
+ const newInputsByRetailer = {};
49
+ action?.init?.inputsByRetailer?.forEach((inputs) => {
50
+ inputs?.forEach((input) => {
51
+ if (!newInputsByRetailer[`${input.id_retailer}`])
52
+ newInputsByRetailer[`${input.id_retailer}`] = [];
53
+ newInputsByRetailer[`${input.id_retailer}`].push(input);
54
+ });
55
+ });
56
+ inputsByRetailer = newInputsByRetailer;
57
+ return {
58
+ ...action.init,
59
+ inputsByRetailer,
60
+ valuesInitial: action.init.values,
61
+ inputsInitial: action.init.inputs,
62
+ };
63
+ case "addImg":
64
+ values = [...values, action.img];
65
+ return { ...state, values };
66
+ case "changeImageInfo":
67
+ values[action.index][action.attribute] = action.value;
68
+ return { ...state, values };
69
+ case "changeShotType":
70
+ values[action.index][action.attribute] = action.value;
71
+ return { ...state, values };
72
+
73
+ case "changeAttrValue":
74
+ const index = attrForImgs.general.findIndex((f) => f.id === action.id);
75
+ if (index !== -1) {
76
+ attrForImgs.general[index].value = action.value;
77
+ }
78
+
79
+ return { ...state, attrForImgs, values };
80
+ case "deleteImage":
81
+ values = values.filter(
82
+ (value) => action.selectedImages.indexOf(value) === -1
83
+ );
84
+ return { ...state, values };
85
+ case "orderImages": {
86
+ let { inputsByRetailer, valuesInitial, inputsInitial, inputs } = state;
87
+ try {
88
+ const orderedImages = [];
89
+ const imageIdArray = [];
90
+ if (action?.retailerId && !inputsByRetailer[action.retailerId]) {
91
+ inputsByRetailer[action.retailerId] = [];
92
+ }
93
+ action.retailerId &&
94
+ inputsByRetailer[action.retailerId]?.filter((input) => {
95
+ imageIdArray.push(input.id_image);
96
+ valuesInitial.forEach(async (value) => {
97
+ if (value.ext == "mp4") {
98
+ convertirVideoABase64(
99
+ "https://" +
100
+ process.env.REACT_APP_IMAGES_BUCKET +
101
+ ".s3.amazonaws.com/" +
102
+ value.srcDB
103
+ )
104
+ .then(async (base64) => {
105
+ const videoSrc =
106
+ "data:video/mp4;base64," + base64.split(",")[1]; // Añade el tipo MIME adecuado
107
+ value.src = await generateThumbnail(videoSrc, 2);
108
+ })
109
+ .catch((error) => {
110
+ console.error("Error:", error);
111
+ });
112
+ }
113
+ if (value.image_id === input.id_image) orderedImages.push(value);
114
+ });
115
+ });
116
+ inputs = inputsInitial?.filter((input) =>
117
+ imageIdArray.includes(input.id)
118
+ );
119
+ values = orderedImages.length > 0 ? orderedImages : [];
120
+ } catch (error) {
121
+ console.log(error);
122
+ }
123
+ return { ...state, values, inputs };
124
+ }
125
+ default:
126
+ return state;
127
+ }
128
+ };
129
+
130
+ const S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
131
+ const REGION = "us-east-1";
132
+
133
+ function convertirVideoABase64(url) {
134
+ return new Promise((resolve, reject) => {
135
+ const xhr = new XMLHttpRequest();
136
+ xhr.open("GET", url, true);
137
+ xhr.responseType = "blob";
138
+ xhr.onload = function () {
139
+ if (xhr.status === 200) {
140
+ const blob = xhr.response;
141
+ const reader = new FileReader();
142
+ reader.onloadend = function () {
143
+ resolve(reader.result);
144
+ };
145
+ reader.readAsDataURL(blob);
146
+ } else {
147
+ reject(new Error("Error al cargar el video"));
148
+ }
149
+ };
150
+ xhr.onerror = function () {
151
+ reject(new Error("Error de red al cargar el video"));
152
+ };
153
+ xhr.send();
154
+ });
155
+ }
156
+
157
+ function obtenerDuracionVideoBase64(base64Data) {
158
+ return new Promise((resolve, reject) => {
159
+ const video = document.createElement("video");
160
+ video.src = base64Data;
161
+ video.addEventListener("loadedmetadata", () => {
162
+ resolve(video.duration);
163
+ });
164
+ video.addEventListener("error", reject);
165
+ });
166
+ }
167
+
168
+ AWS.config.update({
169
+ accessKeyId: process.env.REACT_APP_KUTS3,
170
+ secretAccessKey: process.env.REACT_APP_AKUTS3,
171
+ });
172
+
173
+ const myBucket = new AWS.S3({
174
+ params: { Bucket: S3_BUCKET },
175
+ region: REGION,
176
+ });
177
+
178
+ export const RetailerProductEdition = ({
179
+ tabsSections,
180
+ productSelected = {},
181
+ user = {},
182
+ token,
183
+ location,
184
+ }) => {
185
+ const [activeTab, setActiveTab] = useState("Descripción");
186
+ const [activeImage, setActiveImage] = useState();
187
+ const [imageLayout, setImageLayout] = useState(false);
188
+ const [headerTop, setHeaderTop] = useState(0);
189
+ const [descriptions, setDescriptions] = useState([]);
190
+ const [datasheets, setDatasheets] = useState([]);
191
+ const [images, setImages] = useReducer(reducerImages, {});
192
+ const [showModal, setShowModal] = useState(false);
193
+ const [showRejectModal, setShowRejectModal] = useState(false);
194
+ const { getRootProps, getInputProps } = useDropzone({
195
+ accept: "image/*, video/mp4",
196
+ noKeyboard: true,
197
+ multiple: true,
198
+ noClick: true,
199
+ onDrop: (acceptedFiles) => {
200
+ const newImages = [];
201
+ acceptedFiles.map((file) => {
202
+ const reader = new FileReader();
203
+ reader.fileName = file.name;
204
+ reader.onload = async function (e) {
205
+ const ext = e.srcElement.fileName.split(".");
206
+ const img = new Image();
207
+ if (ext[ext.length - 1] == "mp4") {
208
+ obtenerDuracionVideoBase64(e.target.result)
209
+ .then(async (duracion) => {
210
+ if (duracion > 15 && duracion < 600) {
211
+ img.src = await generateThumbnail(e.target.result, 2);
212
+ setTimeout(() => {
213
+ const width = img.width;
214
+ const height = img.height;
215
+ const newImg = {
216
+ action: "addImg",
217
+ img: {
218
+ src: img.src, //e.target.result,
219
+ name: e.target.fileName,
220
+ ext: ext[ext.length - 1],
221
+ width: width,
222
+ height: height,
223
+ video_src:
224
+ ext[ext.length - 1] == "mp4" ? e.target.result : "",
225
+ },
226
+ };
227
+ setImages(newImg);
228
+ }, 500);
229
+ } else {
230
+ setModalAlert({
231
+ show: true,
232
+ title: "Hubo un error al subir el video",
233
+ message:
234
+ "Los videos deben durar entre 15 segundos y 10 minutos",
235
+ });
236
+ }
237
+ })
238
+ .catch((error) => {
239
+ console.error("Error al obtener la duración del video:", error);
240
+ });
241
+ } else {
242
+ img.src = e.target.result;
243
+ setTimeout(() => {
244
+ const width = img.width;
245
+ const height = img.height;
246
+ const newImg = {
247
+ action: "addImg",
248
+ img: {
249
+ src: img.src, //e.target.result,
250
+ name: e.target.fileName,
251
+ ext: ext[ext.length - 1],
252
+ width: width,
253
+ height: height,
254
+ video_src:
255
+ ext[ext.length - 1] == "mp4" ? e.target.result : "",
256
+ },
257
+ };
258
+ setImages(newImg);
259
+ }, 500);
260
+ }
261
+ };
262
+ reader.onerror = function (error) {
263
+ console.log("dropzoneError: ", error);
264
+ };
265
+ reader.readAsDataURL(file);
266
+ return file;
267
+ });
268
+ },
269
+ });
270
+ const [updatedDatasheets, setUpdatedDatasheets] = useState([]);
271
+ const [updatedDescriptions, setUpdatedDescriptions] = useState([]);
272
+ const [imagesUploaded, setImagesUploaded] = useState(false);
273
+ const [dataImages, setDataImages] = useState();
274
+ const [percentages, setPercentages] = useState(
275
+ new Array(product?.retailers?.length).fill({ percentage: 0 })
276
+ );
277
+ // const [percentages, setPercentages] = useState([{ retailers: {} }]);
278
+ const [activePercentage, setActivePercentage] = useState(0);
279
+ const [activeRetailer, setActiveRetailer] = useState({});
280
+ const [services, setServices] = useState([]);
281
+ const [servicesData, setServicesData] = useState([]);
282
+ const [message, setMessage] = useState("");
283
+ const [product, setProduct] = useState(
284
+ JSON.parse(sessionStorage.getItem("productSelected"))
285
+ ? JSON.parse(sessionStorage.getItem("productSelected"))
286
+ : productSelected
287
+ );
288
+ const [icon, setIcon] = useState(null);
289
+ const [version, setVersion] = useState(product?.version);
290
+ const [comments, setComments] = useState({});
291
+ const [comment, setComment] = useState("");
292
+ const [requiredNull, setRequiredNull] = useState({
293
+ "Ficha técnica": 0,
294
+ Descripción: 0,
295
+ Imágenes: 0,
296
+ });
297
+ const [crossComment, setCrossComment] = useState(false);
298
+ const [userGroups, setUserGroups] = useState([]);
299
+ const [assig, setAssig] = useState({});
300
+ const [selectedImages, setSelectedImages] = useState([]);
301
+ const [componentsArray, setComponentsArray] = useState([]);
302
+ const [checkAll, setCheckAll] = useState(false);
303
+ const isRetailer = user?.is_retailer;
304
+ const [loading, setLoading] = useState(true);
305
+ const [retailerStatus, setRetailerStatus] = useState("-");
306
+ const [statusArray, setStatusArray] = useState([]);
307
+ const [socketType, setSocketType] = useState(null);
308
+ const [saving, setSaving] = useState(loading);
309
+ const [showVersionSelector, setShowVersionSelector] =
310
+ useCloseModal("version-selector");
311
+ const shotThd = [58, 59, 60, 61].includes(activeRetailer.id);
312
+ const [auditableVersion, setAuditableVersion] = useState(null);
313
+ const [auditServices, setAuditServices] = useState([]);
314
+ const [auditDatasheets, setAuditDatasheets] = useState([]);
315
+ const [auditDescriptions, setAuditDescriptions] = useState([]);
316
+ const [auditImages, setAuditImages] = useState([]);
317
+ const [compare, setCompare] = useState(false);
318
+ const [observation, setObservation] = useState();
319
+ const [valRejAll, setValRejAll] = useState(false);
320
+ const [modalAlert, setModalAlert] = useState({
321
+ show: false,
322
+ title: "",
323
+ message: "",
324
+ errorInputMessage: false,
325
+ });
326
+
327
+ const [desc, setDesc] = useState([]);
328
+ const [fich, setFich] = useState([]);
329
+ const [imag, setImag] = useState([]);
330
+
331
+ const [isObservationVisible, setObservationVisible] = useState(false);
332
+
333
+ const toggleObservation = () => {
334
+ setObservationVisible(!isObservationVisible);
335
+ };
336
+ // const handleClickOutside = (event) => {
337
+ // if (
338
+ // isObservationVisible &&
339
+ // !event.target.closest(".Observation") &&
340
+ // !event.target.closest(".Container")
341
+ // ) {
342
+ // hideObservation();
343
+ // }
344
+ // };
345
+
346
+ // useEffect(() => {
347
+ // document.addEventListener("click", handleClickOutside);
348
+ // return () => {
349
+ // document.removeEventListener("click", handleClickOutside);
350
+ // };
351
+ // }, [isObservationVisible]);
352
+
353
+ const hideObservation = () => {
354
+ setObservationVisible(false);
355
+ };
356
+
357
+ const handleCommentSubmit = (e) => {
358
+ e.preventDefault();
359
+ const commentText = document.querySelector(
360
+ "#commentary-box .ql-container .ql-editor > p"
361
+ ).innerHTML;
362
+ createComment(e, commentText, activeTab);
363
+ };
364
+
365
+
366
+ useEffect(async () => {
367
+ const { id_article } = product?.article || {};
368
+ if (id_article)
369
+ await getAuditVersion(id_article, setAuditableVersion, token);
370
+ }, []);
371
+
372
+ const loadAuditableData = async () => {
373
+ if (auditableVersion) {
374
+ const auditServices = await getRetailerServices(
375
+ product?.article?.id_article,
376
+ product?.article?.category,
377
+ parseInt(product?.article?.id_category),
378
+ auditableVersion.version,
379
+ token
380
+ );
381
+ getInputsData(
382
+ auditServices,
383
+ activeRetailer,
384
+ setAuditDatasheets,
385
+ setAuditDescriptions
386
+ );
387
+ setAuditServices(auditServices);
388
+ setAuditImages(auditServices[2]);
389
+ }
390
+ };
391
+
392
+ useEffect(() => {
393
+ if (auditableVersion) {
394
+ loadAuditableData();
395
+ }
396
+ }, [auditableVersion]);
397
+
398
+ useEffect(() => {
399
+ checkAll && setSelectedImages(images.values);
400
+ }, [checkAll]);
401
+
402
+ const loadData = async () => {
403
+ try {
404
+ const services = await getRetailerServices(
405
+ product?.article?.id_article,
406
+ product?.article?.category,
407
+ parseInt(product?.article?.id_category),
408
+ version,
409
+ token
410
+ );
411
+ if (auditableVersion) {
412
+ loadAuditableData();
413
+ }
414
+ //Converts the data inside the datasheets object to array
415
+ setServices(services);
416
+ getServices();
417
+ setImages({ action: "init", init: services[2] });
418
+ if (services[2]?.values?.length > 0) setActiveImage(0);
419
+ const data = [
420
+ {
421
+ id_article: product.article.id_article,
422
+ id_category: product.article.id_category,
423
+ version: product.version,
424
+ id_retailer_array: (
425
+ product.retailersAvailable ?? product.retailers
426
+ ).map(({ id }) => id),
427
+ },
428
+ ];
429
+ const headers = { Authorization: token };
430
+ getPercentage({ data, headers }).then((res) => {
431
+ setPercentages(res[0]);
432
+ });
433
+ setLoading(false);
434
+ } catch (error) {
435
+ console.log(error);
436
+ }
437
+ };
438
+
439
+ const getServices = async () => {
440
+ const servicesResponse = await axios.get(
441
+ `${process.env.REACT_APP_SERVICES_ENDPOINT}?articleId=${
442
+ product?.article?.id_article
443
+ }&orderId=${product?.article?.id_order || product.orderId}&end=true`
444
+ );
445
+ const parsedResponse = JSON.parse(servicesResponse?.data?.body).data;
446
+
447
+ const retailers = product.retailers || product.retailersAvailable;
448
+ const retailerResponse = parsedResponse?.map((srv) => srv.id_retailer);
449
+ const active = retailers?.find((retailer) =>
450
+ retailerResponse.includes(retailer.id)
451
+ );
452
+ !activeRetailer.id && setActiveRetailer(active ? active : retailers[0]);
453
+ setServicesData(parsedResponse);
454
+ };
455
+
456
+ const translateConcept = (concept) => {
457
+ const translation = {
458
+ datasheet: "Ficha técnica",
459
+ description: "Descripción",
460
+ images: "Imágenes",
461
+ };
462
+ return translation[concept];
463
+ };
464
+
465
+ const getComments = async (tab = "Descripción") => {
466
+ const commentsResponse = await Promise.all([
467
+ axios.get(
468
+ `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${product?.article?.id_article}&concept=description&orderIdColab=${product?.orderId}&version=${version}`
469
+ ),
470
+ axios.get(
471
+ `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${product?.article?.id_article}&concept=datasheet&orderIdColab=${product?.orderId}&version=${version}`
472
+ ),
473
+ axios.get(
474
+ `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${product?.article?.id_article}&concept=images&orderIdColab=${product?.orderId}&version=${version}`
475
+ ),
476
+ ]);
477
+
478
+ let comments = {};
479
+ commentsResponse.forEach(
480
+ (comment) =>
481
+ JSON.parse(comment?.data?.body).data[0] &&
482
+ (comments[
483
+ translateConcept(JSON.parse(comment?.data?.body)?.data[0]?.concept)
484
+ ] = JSON.parse(comment?.data?.body).data[0])
485
+ );
486
+ setComment(comments[tab]);
487
+ setComments(comments);
488
+ };
489
+
490
+ useEffect(async () => {
491
+ setLoading(true);
492
+ loadData();
493
+ getComments();
494
+ setUserGroups(await fetchUsers(token));
495
+ let arr = [];
496
+ switch (user.id_role) {
497
+ case 7:
498
+ case 8:
499
+ arr = ["PA", "AS", "CA", "RC", "RA", "RP", "RCA"];
500
+ break;
501
+ case 4:
502
+ case 5:
503
+ arr = ["RC", "AC", "AA", "AP", "ACA"];
504
+ break;
505
+ case 6:
506
+ arr = ["RP", "RCA", "AC", "RA"];
507
+ break;
508
+ default:
509
+ arr = [];
510
+ break;
511
+ }
512
+ setStatusArray(arr);
513
+ }, [product, version]);
514
+
515
+ const loadAssignations = (currentProduct) => {
516
+ setAssig({
517
+ Descripción: {
518
+ assignations: [
519
+ {
520
+ collaboratorType: "especialist",
521
+ id: currentProduct?.article?.id_description_especialist,
522
+ },
523
+ {
524
+ collaboratorType: "facilitator",
525
+ id: currentProduct?.article?.id_description_facilitator,
526
+ },
527
+ ],
528
+ collaborators: {
529
+ especialist: userGroups[0] || [],
530
+ facilitator: userGroups[2] || [],
531
+ },
532
+ },
533
+ "Ficha técnica": {
534
+ assignations: [
535
+ {
536
+ collaboratorType: "especialist",
537
+ id: currentProduct?.article?.id_datasheet_especialist,
538
+ },
539
+ {
540
+ collaboratorType: "facilitator",
541
+ id: currentProduct?.article?.id_datasheet_facilitator,
542
+ },
543
+ ],
544
+ collaborators: {
545
+ especialist: userGroups[0] || [],
546
+ facilitator: userGroups[2] || [],
547
+ },
548
+ },
549
+ Imágenes: {
550
+ assignations: [
551
+ {
552
+ collaboratorType: "especialist",
553
+ id: currentProduct?.article?.id_images_especialist,
554
+ },
555
+ {
556
+ collaboratorType: "facilitator",
557
+ id: currentProduct?.article?.id_images_facilitator,
558
+ },
559
+ ],
560
+ collaborators: {
561
+ especialist: userGroups[1] || [],
562
+ facilitator: userGroups[3] || [],
563
+ },
564
+ },
565
+ });
566
+ };
567
+
568
+ useEffect(() => {
569
+ loadAssignations(product);
570
+ }, [userGroups]);
571
+
572
+ useEffect(() => {
573
+ const retailers = product?.retailersAvailable || product?.retailers;
574
+ if (
575
+ Object.keys(percentages[product.article.id_article] ?? {})?.length > 0
576
+ ) {
577
+ retailers?.forEach((retailer, index) => {
578
+ retailer["percentage"] = Number(
579
+ percentages[product.article.id_article][retailer.id]
580
+ ?.percentageRequired
581
+ );
582
+ });
583
+ }
584
+ setActivePercentage(retailers[0]?.percentage);
585
+ }, [percentages]);
586
+
587
+ useEffect(() => {
588
+ getInputsData(services, activeRetailer, setDatasheets, setDescriptions);
589
+ auditableVersion && loadAuditableData();
590
+ setActivePercentage(Math.round(activeRetailer?.percentage, 0));
591
+ activeRetailer?.id &&
592
+ setImages({ action: "orderImages", retailerId: activeRetailer.id });
593
+ }, [activeRetailer, services]);
594
+
595
+ const thumbs = () => {
596
+ const imageInputs = socketType?.slice();
597
+ const imageType = images?.imageType?.map((e) => ({
598
+ value: e?.id,
599
+ name: e?.name,
600
+ }));
601
+ const imagePackagingType = images?.imagePackagingType?.map((e) => ({
602
+ value: e?.id,
603
+ name: e?.name,
604
+ }));
605
+ const imageShotType = images?.imageShotType?.map((e) => ({
606
+ value: e?.id,
607
+ name: e?.type_shot,
608
+ }));
609
+ return images?.values?.map((image, index) => (
610
+ <GalleryElement
611
+ setCheckAll={setCheckAll}
612
+ key={index + "-" + image.name}
613
+ image={image}
614
+ gridLayout={imageLayout}
615
+ id={"gallery-element-" + index}
616
+ index={index + "-" + image.name + "-" + compare}
617
+ number={index}
618
+ imageType={imageType}
619
+ imagePackagingType={imagePackagingType}
620
+ imageInputs={imageInputs}
621
+ imageShotType={imageShotType}
622
+ setSocketType={setSocketType}
623
+ changeImage={setImages}
624
+ selectedImages={selectedImages}
625
+ setSelectedImages={setSelectedImages}
626
+ auditImages={auditImages}
627
+ compare={compare}
628
+ />
629
+ ));
630
+ };
631
+
632
+ const saveDescriptions = async () => {
633
+ const dataClean = updatedDescriptions.filter((f) => f.value !== "");
634
+ if (dataClean.length > 0) {
635
+ setLoading(true);
636
+ const productTemp = product;
637
+ const articleId = product?.article?.id_article;
638
+ const dataObject = {
639
+ articleId,
640
+ articleData: dataClean,
641
+ };
642
+ if (product?.orderId) dataObject["orderId"] = product?.orderId;
643
+ try {
644
+ const res = await axios.put(
645
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?description=true&version=${version}`,
646
+ dataObject,
647
+ {
648
+ headers: {
649
+ Authorization: token,
650
+ },
651
+ }
652
+ );
653
+ if (res.data.statusCode === 200) {
654
+ const { newStatus, newArticleStatus } = JSON.parse(res.data.body);
655
+ if (newArticleStatus)
656
+ productTemp.status = newArticleStatus[articleId];
657
+ if (newStatus) productTemp.description_status = newStatus;
658
+ setProduct(productTemp);
659
+ sessionStorage.setItem(
660
+ "productSelected",
661
+ JSON.stringify(productTemp)
662
+ );
663
+
664
+ setUpdatedDescriptions([]);
665
+ setMessage("Descripciones guardadas con éxito");
666
+ await loadData();
667
+ }
668
+ } catch (error) {
669
+ console.log(error);
670
+ }
671
+ }
672
+ };
673
+
674
+ const saveDatasheets = async () => {
675
+ const dataClean = updatedDatasheets.filter((f) => f.value !== "");
676
+ if (dataClean.length > 0) {
677
+ setLoading(true);
678
+ const productTemp = product;
679
+ const articleId = product?.article?.id_article;
680
+ const dataObject = {
681
+ articleId,
682
+ articleData: dataClean,
683
+ };
684
+ if (product?.orderId) dataObject["orderId"] = product?.orderId;
685
+ try {
686
+ const res = await axios.put(
687
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?datasheet=true&version=${version}`,
688
+ dataObject,
689
+ {
690
+ headers: {
691
+ Authorization: token,
692
+ },
693
+ }
694
+ );
695
+ if (res.data.statusCode === 200) {
696
+ const { newStatus, newArticleStatus } = JSON.parse(res.data.body);
697
+ if (newArticleStatus)
698
+ productTemp.status = newArticleStatus[articleId];
699
+ if (newStatus) productTemp.datasheet_status = newStatus;
700
+ setProduct(productTemp);
701
+ sessionStorage.setItem(
702
+ "productSelected",
703
+ JSON.stringify(productTemp)
704
+ );
705
+ setUpdatedDatasheets([]);
706
+ setMessage("Fichas técnicas guardadas");
707
+ await loadData();
708
+ }
709
+ } catch (error) {
710
+ console.log(error);
711
+ }
712
+ }
713
+ };
714
+
715
+ useEffect(() => {
716
+ const imageInputs = images?.inputs?.map((e) => ({
717
+ value: e?.id,
718
+ name: e?.name,
719
+ required: e?.required,
720
+ active: images?.values?.some((value) => value?.image_id === e?.id),
721
+ }));
722
+ setSocketType(imageInputs);
723
+ }, [images]);
724
+
725
+ const updateImages = useCallback(async () => {
726
+ const imagesList = images?.values?.slice();
727
+ const imagesListTemp = imagesList?.reduce((acc, image) => {
728
+ acc[image?.image_id] = ++acc[image?.image_id] || 0;
729
+ return acc;
730
+ }, {});
731
+
732
+ const duplicated = imagesList?.filter((image) => {
733
+ return imagesListTemp[image?.image_id];
734
+ });
735
+
736
+ const attrForImgs = Object.values(images?.attrForImgs ?? {}).pop();
737
+ const data = {
738
+ articleId: product?.article?.id_article,
739
+ attrReqImgs: attrForImgs?.map((e) => ({
740
+ attrId: e.id,
741
+ value: e.value ?? "-",
742
+ })),
743
+ articleData: imagesList?.filter((e) => !e.id),
744
+ updateImages: imagesList?.filter((e) => e.id),
745
+ };
746
+ if (product?.orderId) data["orderId"] = product?.orderId;
747
+ let valid =
748
+ data?.articleData?.length === 0
749
+ ? true
750
+ : data?.articleData?.every((e, i) => {
751
+ if (e?.image_id && e?.packing_type && e?.image_type) {
752
+ return true;
753
+ }
754
+ return false;
755
+ });
756
+ if (valid && data?.updateImages?.length > 0 && duplicated?.length === 0) {
757
+ valid = data?.updateImages?.every((e, i) => {
758
+ if (e?.image_id && e?.packing_type && e?.image_type) {
759
+ return true;
760
+ }
761
+ return false;
762
+ });
763
+ }
764
+ if (valid && duplicated?.length === 0) {
765
+ setLoading(true);
766
+ try {
767
+ data?.articleData?.forEach((e) => {
768
+ e.uuid = uuidv4();
769
+ });
770
+ setDataImages(data);
771
+ if (data?.articleData?.length > 0) {
772
+ setImagesUploaded(false);
773
+ const promiseArray = [];
774
+ data?.articleData?.forEach((e) => {
775
+ let file;
776
+ if (e.ext == "mp4") {
777
+ file = Buffer.from(
778
+ e.video_src.replace(/^data:video\/\w+;base64,/, ""),
779
+ "base64"
780
+ );
781
+ e.video_src = "";
782
+ } else {
783
+ file = Buffer.from(
784
+ e.src.replace(/^data:image\/\w+;base64,/, ""),
785
+ "base64"
786
+ );
787
+ }
788
+ const params = {
789
+ ACL: "public-read",
790
+ Body: file,
791
+ Bucket: S3_BUCKET,
792
+ Key: `id-${data.articleId}/${version}/${e?.image_id}-${e?.uuid}.${e?.ext}`,
793
+ };
794
+ promiseArray.push(myBucket.putObject(params).promise());
795
+ });
796
+ await Promise.all(promiseArray);
797
+ setImagesUploaded(true);
798
+ } else {
799
+ setImagesUploaded(true);
800
+ }
801
+ } catch (err) {
802
+ console.log(err);
803
+ // setMainLoading(false);
804
+ }
805
+ } else {
806
+ // setMainLoading(false);
807
+ setMessage(
808
+ "Completa los campos que solicita cada una de la imágenes o hay imágenes con el mismo tipo de toma.\nRecuerda hay campos obligatorios y no podras avanzar si no estan completos."
809
+ );
810
+ }
811
+ // eslint-disable-next-line react-hooks/exhaustive-deps
812
+ }, [images, imagesUploaded]);
813
+
814
+ useEffect(async () => {
815
+ if (imagesUploaded) {
816
+ dataImages.articleData = dataImages?.articleData.map((e) => {
817
+ delete e.src;
818
+ e.imageID = e.image_id;
819
+ e.packingType = e.packing_type;
820
+ e.imageType = e.image_type;
821
+ if (product?.orderId) e["orderId"] = product?.orderId;
822
+ return e;
823
+ });
824
+ try {
825
+ const res = await axios.put(
826
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
827
+ dataImages,
828
+ {
829
+ headers: {
830
+ Authorization: token,
831
+ },
832
+ }
833
+ );
834
+ if (res.data.statusCode === 200) {
835
+ let productTemp = product;
836
+ const { newStatus, newArticleStatus } = JSON.parse(res.data.body);
837
+ if (newArticleStatus)
838
+ productTemp.status = newArticleStatus[product?.article?.id_article];
839
+ if (newStatus) productTemp.images_status = newStatus;
840
+ setProduct(productTemp);
841
+ sessionStorage.setItem(
842
+ "productSelected",
843
+ JSON.stringify(productTemp)
844
+ );
845
+ setImages({});
846
+ setMessage("Imágenes guardadas con éxito");
847
+ sessionStorage.removeItem("imagesList");
848
+ await loadData();
849
+ }
850
+ } catch (error) {
851
+ console.log(error);
852
+ }
853
+ }
854
+ }, [dataImages, imagesUploaded]);
855
+
856
+ const evaluationFinished = (userId, tab, statusArray) => {
857
+ const srv = servicesData.filter((serv) => serv.service === getConcept(tab));
858
+ const srvActive = srv
859
+ .find((serv) => serv.id_retailer === activeRetailer?.id)
860
+ ?.status?.replace(/.*\//, "");
861
+ const currStatus = product[`${getConcept(tab)}_status`]?.replace(
862
+ /.*\//,
863
+ ""
864
+ );
865
+ const unvalidated = ["IE", "CA"].includes(currStatus);
866
+
867
+ const auditorUnvalidated = !["RA", "AA", "ACA", "AP"].includes(currStatus);
868
+
869
+ switch (userId) {
870
+ case 7:
871
+ case 8:
872
+ return (
873
+ (statusArray.includes(srvActive) &&
874
+ statusArray.includes(product?.status)) ||
875
+ srv.filter((serv) =>
876
+ statusArray.includes(serv.status?.replace(/.*\//, ""))
877
+ ).length === srv.length
878
+ );
879
+ case 4:
880
+ case 5:
881
+ return (
882
+ unvalidated &&
883
+ ["CA", "IE"].includes(product.status) && // "RC", "AC", "AA", "AP", "ACA"
884
+ srv.filter((serv) => statusArray.includes(serv.status)).length ===
885
+ srv.length
886
+ );
887
+ case 6:
888
+ return (
889
+ statusArray.includes(product.status) && // RP, RCA, AC, RA true
890
+ srv.every((serv) =>
891
+ ["RA", "AA", "AP", "ACA"].includes(serv.status)
892
+ ) &&
893
+ auditorUnvalidated
894
+ );
895
+ default:
896
+ break;
897
+ }
898
+ };
899
+
900
+ const getConcept = (tab) => {
901
+ switch (tab) {
902
+ case "Descripción":
903
+ return "description";
904
+ case "Ficha técnica":
905
+ return "datasheet";
906
+ case "Imágenes":
907
+ return "images";
908
+ }
909
+ };
910
+
911
+ const approveRejectButtons = (action) => {
912
+ let concept = getConcept(action || activeTab);
913
+
914
+ const retailerStatus = servicesData
915
+ .find(
916
+ (srv) =>
917
+ srv.id_retailer === activeRetailer?.id && srv.service === concept
918
+ )
919
+ ?.status?.replace(/.*\//, "");
920
+
921
+ //sessionStorage product
922
+ const adminFacilitatorCanEvaluate =
923
+ retailerStatus === "IE" && [1, 4, 5].includes(user.id_role);
924
+ const adminAuditorCanEvaluate =
925
+ ["AC", "RP", "RCA", "SAC"].includes(retailerStatus) &&
926
+ [1, 6].includes(user.id_role);
927
+ return adminFacilitatorCanEvaluate || adminAuditorCanEvaluate;
928
+ };
929
+
930
+ const approveRejectAllButtons = () => {
931
+ let concepts = [];
932
+ switch (user.id_role) {
933
+ case 4:
934
+ concepts = ["description", "datasheet"];
935
+ break;
936
+ case 5:
937
+ concepts = ["images"];
938
+ break;
939
+
940
+ default:
941
+ concepts = ["description", "datasheet", "images"];
942
+ break;
943
+ }
944
+
945
+ const services = servicesData.filter(({ service }) =>
946
+ concepts.includes(service)
947
+ );
948
+
949
+ const adminFacilitatorCanEvaluate =
950
+ services.every((srv) => srv?.status?.replace(/.*\//, "") === "IE") &&
951
+ [1, 4, 5].includes(user.id_role);
952
+
953
+ //sessionStorage product
954
+ const adminAuditorCanEvaluate =
955
+ servicesData.every((srv) =>
956
+ ["AC", "RP", "RCA"].includes(srv?.status?.replace(/.*\//, ""))
957
+ ) && [1, 6].includes(user.id_role);
958
+ return adminFacilitatorCanEvaluate || adminAuditorCanEvaluate;
959
+ };
960
+
961
+ const getSectionIcon = () => {
962
+ switch (activeTab) {
963
+ case "Ficha técnica":
964
+ setIcon(attributesSent);
965
+ break;
966
+ case "Descripción":
967
+ setIcon(descriptionSent);
968
+ break;
969
+ case "Imágenes":
970
+ setIcon(imagesSent);
971
+ break;
972
+ default:
973
+ break;
974
+ }
975
+ };
976
+
977
+ const sendToFacilitator = async (result) => {
978
+ setLoading(true);
979
+ try {
980
+ let concept = getConcept(activeTab);
981
+
982
+ const productTemp = { ...product };
983
+ const evalStatus = retailerStatus;
984
+ const articleId = product.article.id_article;
985
+ const orderId = product.orderId;
986
+
987
+ let data = {
988
+ articleId,
989
+ orderId,
990
+ concept,
991
+ evalStatus,
992
+ retailerId: activeRetailer.id,
993
+ };
994
+ let res;
995
+ let message;
996
+ if (result) {
997
+ data.result = result;
998
+ res = await axios.put(
999
+ `${process.env.REACT_APP_EVALUATION_ENDPOINT}`,
1000
+ data,
1001
+ {
1002
+ headers: {
1003
+ Authorization: token,
1004
+ },
1005
+ }
1006
+ );
1007
+ getServices();
1008
+ } else {
1009
+ const specialistDone = ["RC", "RA", "CA"].includes(evalStatus);
1010
+
1011
+ if (specialistDone) {
1012
+ message = `${activeTab} enviada a facilitador`;
1013
+ getSectionIcon();
1014
+ } else if (["IE", "AC", "RP", "RCA"].includes(evalStatus)) {
1015
+ message = "Evaluación enviada";
1016
+ getSectionIcon();
1017
+ }
1018
+ res = await axios.put(`${process.env.REACT_APP_SEND_EVAL}`, data, {
1019
+ headers: {
1020
+ Authorization: token,
1021
+ },
1022
+ });
1023
+ }
1024
+ if (res.data.statusCode === 200) {
1025
+ const { newStatus, newOrderStatus, newArticleStatus } = JSON.parse(
1026
+ res.data.body
1027
+ );
1028
+ const messageToChat = createMessage(
1029
+ product.retailers,
1030
+ activeRetailer.id,
1031
+ evalStatus,
1032
+ newStatus,
1033
+ activeTab
1034
+ );
1035
+
1036
+ const data = {
1037
+ paramsBody: {
1038
+ id: product.article.id_article,
1039
+ version: version,
1040
+ items: [{ type: "status", value: messageToChat }],
1041
+ retailerId: activeRetailer.id,
1042
+ status: product.status,
1043
+ },
1044
+ paramsHeader: { Authorization: token },
1045
+ };
1046
+ await sendMessage(data);
1047
+ if (newOrderStatus) productTemp.status = newArticleStatus[articleId];
1048
+ productTemp[`${concept}_status`] = newStatus;
1049
+ await loadData();
1050
+ if (message) setMessage(message);
1051
+ sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
1052
+ setProduct(productTemp);
1053
+ }
1054
+ } catch (error) {
1055
+ console.log(error);
1056
+ }
1057
+ setLoading(false);
1058
+ };
1059
+
1060
+ const userAssigned = (tab, rol) => {
1061
+ let concept = getConcept(activeTab);
1062
+
1063
+ const allowedRoles = [1, 4, 5, 6, 7, 8];
1064
+ const validUser = allowedRoles.includes(user?.id_role);
1065
+
1066
+ if (!rol) {
1067
+ switch (user.id_role) {
1068
+ case 4:
1069
+ case 5:
1070
+ rol = "facilitator";
1071
+ break;
1072
+ case 7:
1073
+ case 8:
1074
+ rol = "especialist";
1075
+ break;
1076
+ }
1077
+ }
1078
+
1079
+ return (
1080
+ user.id_role === 1 ||
1081
+ (product.article[`id_${concept}_${rol}`] === user.id_user && validUser)
1082
+ );
1083
+ };
1084
+
1085
+ const auditorAssigned = () => {
1086
+ return product?.article[`id_auditor`] === user.id_user;
1087
+ };
1088
+
1089
+ const createComment = async (e, body, tab) => {
1090
+ let concept = "";
1091
+ switch (activeTab) {
1092
+ case "Ficha técnica":
1093
+ concept = "datasheet";
1094
+ break;
1095
+ case "Imágenes":
1096
+ concept = "images";
1097
+ break;
1098
+
1099
+ default:
1100
+ concept = "description";
1101
+ break;
1102
+ }
1103
+ const data = {
1104
+ articleId: product?.article?.id_article,
1105
+ orderId: product?.orderId,
1106
+ message: body?.replace(/<.*?\/?>/gm, ""),
1107
+ concept: concept,
1108
+ version: version,
1109
+ };
1110
+ await axios.post(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
1111
+ headers: {
1112
+ Authorization: token,
1113
+ },
1114
+ });
1115
+ await getComments(tab);
1116
+ setMessage("");
1117
+ setComponentsArray([]);
1118
+ };
1119
+
1120
+ const getRequired = (services) => {
1121
+ try {
1122
+ const objetcTemp = {};
1123
+ const datasheetServicesArray = Object.values(services[0]);
1124
+ const dsInputs = datasheetServicesArray.pop();
1125
+ const descriptionsServicesArray = services[1];
1126
+
1127
+ let dsInputsRequired = [];
1128
+ let desInputsRequired = 0;
1129
+ datasheetServicesArray?.forEach((datasheet) => {
1130
+ const [requested] = servicesData?.filter(
1131
+ (srv) =>
1132
+ srv.id_retailer === datasheet.retailer.id &&
1133
+ srv.service === getConcept(activeTab)
1134
+ );
1135
+ requested &&
1136
+ datasheet?.data &&
1137
+ Object.values(datasheet?.data).forEach((dataGroup) =>
1138
+ dsInputsRequired.push(
1139
+ ...dataGroup.inputs.filter(
1140
+ (input) =>
1141
+ dsInputs[input].required &&
1142
+ (dsInputs[input].value === undefined ||
1143
+ !dsInputs[input].value)
1144
+ )
1145
+ )
1146
+ );
1147
+ });
1148
+
1149
+ objetcTemp["Ficha técnica"] = dsInputsRequired.length;
1150
+
1151
+ const regex = /(<\/?p>)|(<\/?strong>)|(<br>)/gm;
1152
+ descriptionsServicesArray.forEach((description) => {
1153
+ const [requested] = servicesData.filter(
1154
+ (srv) =>
1155
+ srv.id_retailer === description.id &&
1156
+ srv.service === getConcept(activeTab)
1157
+ );
1158
+ if (requested) {
1159
+ description.inputs.forEach((input) => {
1160
+ if (
1161
+ input.required &&
1162
+ (!input.value || input.value?.replace(regex, "") === "")
1163
+ ) {
1164
+ desInputsRequired++;
1165
+ }
1166
+ });
1167
+ }
1168
+ });
1169
+
1170
+ objetcTemp["Descripción"] = desInputsRequired;
1171
+
1172
+ const retailersRequested = [];
1173
+ services[2]?.retailerMandatories?.forEach((retMan) =>
1174
+ retMan.forEach((rm) => retailersRequested.push(rm))
1175
+ );
1176
+ const requiredImages = services[2]?.inputs?.filter(
1177
+ (e) =>
1178
+ e.required === 1 &&
1179
+ retailersRequested.filter(
1180
+ (ret) =>
1181
+ ret.id_image === e.id &&
1182
+ servicesData.filter((srv) => srv.id_retailer === ret.id_retailer)
1183
+ .length > 0
1184
+ ).length > 0
1185
+ );
1186
+
1187
+ let requiredCounter = 0;
1188
+ requiredImages?.forEach(
1189
+ (req) =>
1190
+ services[2].values.filter((img) => img.image_id === req.id).length ===
1191
+ 0 && requiredCounter++
1192
+ );
1193
+ objetcTemp["Imágenes"] = requiredCounter;
1194
+ setRequiredNull(objetcTemp);
1195
+ } catch (error) {
1196
+ console.log(error);
1197
+ }
1198
+ };
1199
+
1200
+ useEffect(() => {
1201
+ setComment(comments[activeTab]);
1202
+ }, [activeTab]);
1203
+
1204
+ const commentRevised = async () => {
1205
+ const data = {
1206
+ commentId: comment.id,
1207
+ };
1208
+ await axios.put(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
1209
+ headers: {
1210
+ Authorization: sessionStorage.getItem("jwt"),
1211
+ },
1212
+ });
1213
+ setCrossComment(false);
1214
+ await getComments();
1215
+ };
1216
+
1217
+ const setAssignation = async (assignationType, assignationId) => {
1218
+ let concept = "";
1219
+ switch (activeTab) {
1220
+ case "Ficha técnica":
1221
+ concept = "datasheet";
1222
+ break;
1223
+ case "Imágenes":
1224
+ concept = "images";
1225
+ break;
1226
+
1227
+ default:
1228
+ concept = "description";
1229
+ break;
1230
+ }
1231
+ const productTemp = product;
1232
+ productTemp.article[`id_${concept}_${assignationType}`] = assignationId;
1233
+ const data = {
1234
+ articleList: [
1235
+ {
1236
+ orderId: product.orderId,
1237
+ articleId: product?.article?.id_article,
1238
+ },
1239
+ ],
1240
+ concept: concept,
1241
+ userId: assignationId,
1242
+ };
1243
+ await axios({
1244
+ method: "post",
1245
+ url: process.env.REACT_APP_ASSIGNATIONS_ENDPOINT,
1246
+ data,
1247
+ headers: {
1248
+ Authorization: token,
1249
+ },
1250
+ });
1251
+ loadAssignations(productTemp);
1252
+ sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
1253
+ };
1254
+
1255
+ const downloadImages = () => {
1256
+ selectedImages.length > 0
1257
+ ? selectedImages.forEach((e) => {
1258
+ if (e.id) {
1259
+ saveAs(
1260
+ `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
1261
+ `${product.article.upc}_${e.name}.${e.ext}`
1262
+ );
1263
+ }
1264
+ })
1265
+ : images?.values?.forEach((e) => {
1266
+ if (e.id) {
1267
+ saveAs(
1268
+ `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
1269
+ `${product.article.upc}_${e.name}.${e.ext}`
1270
+ );
1271
+ }
1272
+ });
1273
+ };
1274
+
1275
+ const deleteImages = () => {
1276
+ setLoading(true);
1277
+ const { values } = images;
1278
+ const imgsInBack = [];
1279
+
1280
+ selectedImages.forEach((selectedImg) => {
1281
+ if (selectedImg.id) imgsInBack.push(selectedImg);
1282
+ });
1283
+
1284
+ const imgsLeft = values.filter(
1285
+ (value) => selectedImages.indexOf(value) === -1
1286
+ );
1287
+
1288
+ if (imgsInBack.length > 0) {
1289
+ const data = {
1290
+ articleId: product.article.id_article,
1291
+ deleteImages: imgsInBack,
1292
+ orderId: product.orderId,
1293
+ };
1294
+ try {
1295
+ axios.put(
1296
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
1297
+ data,
1298
+ {
1299
+ headers: { Authorization: token },
1300
+ }
1301
+ );
1302
+ } catch (err) {
1303
+ console.log(err);
1304
+ }
1305
+ }
1306
+
1307
+ setImages({
1308
+ action: "deleteImage",
1309
+ selectedImages,
1310
+ });
1311
+
1312
+ getRequired([
1313
+ services[0],
1314
+ services[1],
1315
+ { ...services[2], values: imgsLeft },
1316
+ ]);
1317
+
1318
+ setTimeout(() => {
1319
+ setLoading(false);
1320
+ }, 500);
1321
+
1322
+ setMessage("");
1323
+ setComponentsArray([]);
1324
+ };
1325
+
1326
+ const askToDeleteImages = () => {
1327
+ if (selectedImages.length > 0) {
1328
+ setMessage("¿Está seguro de eliminar las imágenes seleccionadas?");
1329
+ setComponentsArray([
1330
+ <ScreenHeader
1331
+ key={"1"}
1332
+ text={"¿Está seguro de eliminar las imágenes seleccionadas?"}
1333
+ headerType="retailer-name-header"
1334
+ color={"white"}
1335
+ />,
1336
+ <Button
1337
+ key={"2"}
1338
+ buttonType="general-white-button"
1339
+ label={"Cancelar"}
1340
+ onClick={() => setMessage("")}
1341
+ />,
1342
+ <Button
1343
+ key={"3"}
1344
+ buttonType="general-button-default"
1345
+ label={"Aceptar"}
1346
+ onClick={() => {
1347
+ setMessage("");
1348
+ deleteImages();
1349
+ }}
1350
+ />,
1351
+ ]);
1352
+ }
1353
+ };
1354
+
1355
+ const getRetailerStatus = (servicesData, tab) => {
1356
+ const arr = servicesData?.slice();
1357
+ let concept = getConcept(tab);
1358
+
1359
+ let retailerService = {};
1360
+ [retailerService] = arr?.filter(
1361
+ (service) =>
1362
+ service.id_retailer === activeRetailer?.id &&
1363
+ service.service === concept
1364
+ );
1365
+ return retailerService ? retailerService.status : "NS";
1366
+ };
1367
+
1368
+ useEffect(() => {
1369
+ let status = getRetailerStatus(servicesData, activeTab);
1370
+ setRetailerStatus(status);
1371
+ }, [activeTab, servicesData, activeRetailer]);
1372
+
1373
+ useEffect(() => {
1374
+ services.length > 0 && getRequired(services);
1375
+ }, [services, servicesData, activeTab]);
1376
+
1377
+ useEffect(() => {
1378
+ setSaving(loading);
1379
+ }, [loading]);
1380
+
1381
+ const validateAll = async (result) => {
1382
+ try {
1383
+ setLoading(true);
1384
+ const evaluationArray = [];
1385
+ let conceptArray = [];
1386
+ switch (user.id_role) {
1387
+ case 4:
1388
+ conceptArray = ["description", "datasheet"];
1389
+ break;
1390
+ case 5:
1391
+ conceptArray = ["images"];
1392
+ break;
1393
+
1394
+ default:
1395
+ conceptArray = ["description", "datasheet", "images"];
1396
+ break;
1397
+ }
1398
+
1399
+ const messages = [];
1400
+
1401
+ servicesData?.forEach((ret) => {
1402
+ if (conceptArray.includes(ret.service)) {
1403
+ let data = {
1404
+ articleId: product.article.id_article,
1405
+ orderId: product.id_order ?? product.orderId,
1406
+ concept: ret.service,
1407
+ result: result,
1408
+ evalStatus: ret.status,
1409
+ retailerId: ret.id_retailer,
1410
+ };
1411
+ evaluationArray.push(
1412
+ axios.put(`${process.env.REACT_APP_EVALUATION_ENDPOINT}`, data, {
1413
+ headers: {
1414
+ Authorization: token,
1415
+ },
1416
+ })
1417
+ );
1418
+ }
1419
+ });
1420
+ await Promise.all(evaluationArray);
1421
+
1422
+ const productTemp = product;
1423
+ productTemp.status = `${result}A`;
1424
+ productTemp.datasheet_status =
1425
+ productTemp.datasheet_status === "NS" ? "NS" : `${result}A`;
1426
+ productTemp.description_status =
1427
+ productTemp.description_status === "NS" ? "NS" : `${result}A`;
1428
+ productTemp.images_status =
1429
+ productTemp.images_status === "NS" ? "NS" : `${result}A`;
1430
+ sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
1431
+ setProduct(productTemp);
1432
+ const messagesResponse = await Promise.all(messages);
1433
+
1434
+ await loadData();
1435
+ } catch (error) {
1436
+ console.log(error);
1437
+ }
1438
+ };
1439
+
1440
+ const getObservation = async () => {
1441
+ const response = await axios.get(
1442
+ `${process.env.REACT_APP_READ_OBSERVATION}?articleId=${product.article.id_article}&orderId=${product?.orderId}`,
1443
+ {
1444
+ headers: {
1445
+ Authorization: sessionStorage.getItem("jwt"),
1446
+ },
1447
+ }
1448
+ );
1449
+ const parseData = JSON.parse(response.data.body).data[0];
1450
+ setObservation(parseData.observations);
1451
+ };
1452
+ useEffect(() => {
1453
+ getObservation();
1454
+ }, []);
1455
+ return (
1456
+ <Container headerTop={headerTop}>
1457
+ <HeaderTop
1458
+ setHeaderTop={setHeaderTop}
1459
+ auditableVersion={auditableVersion}
1460
+ setCompare={setCompare}
1461
+ isAuditor={[1, 6].includes(user.id_role)}
1462
+ withChat={location?.state?.withChat}
1463
+ chatType={location?.state?.chatType}
1464
+ productSelected={product}
1465
+ token={token}
1466
+ activeRetailer={activeRetailer}
1467
+ />
1468
+ <div className="data-container">
1469
+ <div className="image-data-panel">
1470
+ <ImagePreviewer
1471
+ activeImage={images?.values ? images?.values[activeImage] : {}}
1472
+ imagesArray={images}
1473
+ setActiveImage={setActiveImage}
1474
+ setShowModal={setShowModal}
1475
+ />
1476
+ <ImageDataTable
1477
+ lists={images}
1478
+ activeImage={images?.values ? images?.values[activeImage] : {}}
1479
+ retailerSelected={activeRetailer?.id}
1480
+ setImages={setImages}
1481
+ assignationsImages={assig["Imágenes"]}
1482
+ imagesStatus={product?.images_status}
1483
+ setAssignation={setAssignation}
1484
+ isRetailer={isRetailer}
1485
+ onClickSave={() =>
1486
+ product?.services?.images === 1 && updateImages()
1487
+ }
1488
+ showSaveButton={auditorAssigned() || userAssigned()}
1489
+ setShowVersionSelector={setShowVersionSelector}
1490
+ version={version}
1491
+ shotThd={shotThd}
1492
+ />
1493
+ </div>
1494
+ <div className="product-information">
1495
+ <FullProductNameHeader
1496
+ headerData={product}
1497
+ productObservation={observation}
1498
+ percent={activePercentage}
1499
+ activeRetailer={activeRetailer}
1500
+ servicesData={servicesData}
1501
+ setActiveRetailer={setActiveRetailer}
1502
+ sendToFacilitator={sendToFacilitator}
1503
+ approve={() => {
1504
+ sendToFacilitator("A");
1505
+ }}
1506
+ reject={() => {
1507
+ setShowRejectModal(true);
1508
+ }}
1509
+ showApproveRejectAll={
1510
+ approveRejectAllButtons() && (auditorAssigned() || userAssigned())
1511
+ }
1512
+ showValidationButtons={
1513
+ approveRejectButtons() && (auditorAssigned() || userAssigned())
1514
+ }
1515
+ approveAll={() => validateAll("A")}
1516
+ rejectAll={() => {
1517
+ setShowRejectModal(true);
1518
+ setValRejAll(true);
1519
+ }}
1520
+ isObservationVisible={isObservationVisible}
1521
+ toggleObservation={toggleObservation}
1522
+ // handleClickOutside={handleClickOutside}
1523
+ hideObservation={hideObservation}
1524
+ />
1525
+ <FullTabsMenu
1526
+ tabsSections={tabsSections}
1527
+ status={retailerStatus}
1528
+ activeTab={activeTab}
1529
+ setActiveTab={setActiveTab}
1530
+ setImageLayout={setImageLayout}
1531
+ downloadImages={downloadImages}
1532
+ askToDeleteImages={askToDeleteImages}
1533
+ assig={assig[activeTab]}
1534
+ setAssignation={setAssignation}
1535
+ isRetailer={isRetailer}
1536
+ showSaveButton={auditorAssigned() || userAssigned()}
1537
+ version={version}
1538
+ desc={desc}
1539
+ setDesc={setDesc}
1540
+ fich={fich}
1541
+ setFich={setFich}
1542
+ imag={imag}
1543
+ setImag={setImag}
1544
+ updatedDescriptions={updatedDescriptions}
1545
+ setUpdatedDescriptions={setUpdatedDescriptions}
1546
+ updatedDatasheets={updatedDatasheets}
1547
+ setUpdatedDatasheets={setUpdatedDatasheets}
1548
+ images={images}
1549
+ setImages={setImages}
1550
+ selectedImages={selectedImages}
1551
+ setSelectedImages={setSelectedImages}
1552
+ setShowVersionSelector={setShowVersionSelector}
1553
+ onClickSave={() => {
1554
+ switch (activeTab) {
1555
+ case "Descripción":
1556
+ !saving &&
1557
+ product?.description_status !== "NS" &&
1558
+ saveDescriptions();
1559
+ break;
1560
+ case "Ficha técnica":
1561
+ !saving &&
1562
+ product?.datasheet_status !== "NS" &&
1563
+ saveDatasheets();
1564
+ break;
1565
+ case "Imágenes":
1566
+ !saving && product?.images_status !== "NS" && updateImages();
1567
+ break;
1568
+
1569
+ default:
1570
+ break;
1571
+ }
1572
+ }}
1573
+ canAssign={![7, 8].includes(user.id_role)}
1574
+ />
1575
+ <div
1576
+ className={
1577
+ "services-information-container " +
1578
+ (imageLayout && activeTab === "Imágenes" ? "image-services" : "")
1579
+ }
1580
+ >
1581
+ {loading ? (
1582
+ <Loading />
1583
+ ) : (
1584
+ <>
1585
+ {!imageLayout &&
1586
+ activeTab === "Imágenes" &&
1587
+ product?.services?.images === 1 && (
1588
+ <GalleryHeader
1589
+ setSelectedImages={setSelectedImages}
1590
+ checkAll={checkAll}
1591
+ setCheckAll={setCheckAll}
1592
+ shotThd={shotThd}
1593
+ />
1594
+ )}
1595
+
1596
+ {activeTab === "Ficha técnica" &&
1597
+ (product?.datasheet_status !== "NS" ? (
1598
+ datasheets[0]?.data?.map((dataGroup, index) => (
1599
+ <InputGroup
1600
+ key={index + "-" + activeRetailer.name}
1601
+ articleId={product.article.id_article}
1602
+ version={version}
1603
+ activeSection={activeTab}
1604
+ inputGroup={dataGroup}
1605
+ dataInputs={datasheets[1]}
1606
+ auditInputs={auditDatasheets[1]}
1607
+ updatedDatasheets={updatedDatasheets}
1608
+ setUpdatedDatasheets={setUpdatedDatasheets}
1609
+ compare={compare}
1610
+ />
1611
+ ))
1612
+ ) : (
1613
+ <ScreenHeader
1614
+ text={"No cuentas con este servicio"}
1615
+ headerType={"input-name-header"}
1616
+ />
1617
+ ))}
1618
+ {activeTab === "Descripción" &&
1619
+ (product?.description_status !== "NS" ? (
1620
+ <InputGroup
1621
+ activeSection={activeTab}
1622
+ inputGroup={descriptions[0]}
1623
+ auditInputGroup={auditDescriptions[0]}
1624
+ updatedDescriptions={updatedDescriptions}
1625
+ setUpdatedDescriptions={setUpdatedDescriptions}
1626
+ articleId={product?.article?.id_article}
1627
+ version={version}
1628
+ dinamicHeight={true}
1629
+ compare={compare}
1630
+ />
1631
+ ) : (
1632
+ <ScreenHeader
1633
+ text={"No cuentas con este servicio"}
1634
+ headerType={"input-name-header"}
1635
+ />
1636
+ ))}
1637
+
1638
+ {activeTab === "Imágenes" &&
1639
+ (product?.images_status !== "NS" ? (
1640
+ <section className="container">
1641
+ <div {...getRootProps({ className: "dropzone" })}>
1642
+ <input {...getInputProps()} />
1643
+ <aside>{thumbs()}</aside>
1644
+ </div>
1645
+ </section>
1646
+ ) : (
1647
+ <ScreenHeader
1648
+ text={"No cuentas con este servicio"}
1649
+ headerType={"input-name-header"}
1650
+ />
1651
+ ))}
1652
+ </>
1653
+ )}
1654
+ </div>
1655
+ {/* {(userAssigned(activeTab) || auditorAssigned()) &&
1656
+ product[`${getConcept(activeTab)}_status`] !== "NS" && (
1657
+ <div className="commentary-box">
1658
+ {[7, 8].includes(user.id_role) && (
1659
+ <Button
1660
+ buttonType={
1661
+ evaluationFinished(
1662
+ user.id_role,
1663
+ activeTab,
1664
+ statusArray
1665
+ ) && requiredNull[activeTab] === 0
1666
+ ? "general-green-button"
1667
+ : "general-button-disabled"
1668
+ }
1669
+ label={"Enviar evaluación"}
1670
+ onClick={() => sendToFacilitator()}
1671
+ />
1672
+ )}
1673
+ </div>
1674
+ )} */}
1675
+
1676
+ {(userAssigned(activeTab) || auditorAssigned()) &&
1677
+ product[`${getConcept(activeTab)}_status`] !== "NS" && (
1678
+ <div className="commentary-box">
1679
+ {!comment ? (
1680
+ <div className="commentary">
1681
+ <TagAndInput
1682
+ label={"Caja de Comentario"}
1683
+ inputType={"textarea"}
1684
+ inputCols={80}
1685
+ inputRows={4}
1686
+ inputId={"commentary-box"}
1687
+ index={0}
1688
+ />
1689
+ <div className="buttons-box">
1690
+ <Button
1691
+ buttonType={"general-transparent-button"}
1692
+ label={"Enviar comentario"}
1693
+ onClick={handleCommentSubmit}
1694
+ />
1695
+ </div>
1696
+ </div>
1697
+ ) : (
1698
+ <div className="feedback-box">
1699
+ <Commentary
1700
+ comment={comment?.message?.replace(/<.*?\/?>/gm, "")}
1701
+ reviewed={crossComment}
1702
+ />
1703
+ <Button
1704
+ buttonType={"circular-button accept-button"}
1705
+ onClick={async () => {
1706
+ setCrossComment(true);
1707
+ commentRevised();
1708
+ }}
1709
+ />
1710
+ </div>
1711
+ )}
1712
+ {[7, 8].includes(user.id_role) && (
1713
+ <Button
1714
+ buttonType={
1715
+ evaluationFinished(
1716
+ user.id_role,
1717
+ activeTab,
1718
+ statusArray
1719
+ ) && requiredNull[activeTab] === 0
1720
+ ? "general-green-button"
1721
+ : "general-button-disabled"
1722
+ }
1723
+ label={"Enviar evaluación"}
1724
+ onClick={() => sendToFacilitator()}
1725
+ />
1726
+ )}
1727
+ </div>
1728
+ )}
1729
+ </div>
1730
+ </div>
1731
+ {showModal && (
1732
+ <ProductImageModal
1733
+ images={images}
1734
+ setShowModal={setShowModal}
1735
+ sendToFacilitator={sendToFacilitator}
1736
+ approveRejectButtons={approveRejectButtons()}
1737
+ />
1738
+ )}
1739
+ {message.length > 0 && (
1740
+ <GenericModal
1741
+ buttonType={componentsArray.length > 0 && "delete-product"}
1742
+ componentsArray={
1743
+ componentsArray.length > 0
1744
+ ? componentsArray
1745
+ : [
1746
+ <img key="1" src={succes} alt="success icon" />,
1747
+ <ScreenHeader
1748
+ key="2"
1749
+ headerType={"retailer-name-header"}
1750
+ text={message}
1751
+ color={"white"}
1752
+ />,
1753
+ ]
1754
+ }
1755
+ onClick={() => setMessage("")}
1756
+ />
1757
+ )}
1758
+ {showVersionSelector && (
1759
+ <VersionSelector
1760
+ modalId={"version-selector"}
1761
+ articleId={product.article.id_article}
1762
+ setVersion={setVersion}
1763
+ companyName={product.article.company_name}
1764
+ currentVersion={version}
1765
+ setShowVersionSelector={setShowVersionSelector}
1766
+ jwt={token}
1767
+ />
1768
+ )}
1769
+ {showRejectModal && (
1770
+ <Modal
1771
+ title={`Agregar mensaje de rechazo para ${activeTab?.toLowerCase()}`}
1772
+ show={showRejectModal}
1773
+ customComponent={
1774
+ <TagAndInput
1775
+ inputType={"textarea"}
1776
+ inputId={"modal-message-box"}
1777
+ index={0}
1778
+ color={"white"}
1779
+ />
1780
+ }
1781
+ buttons={[
1782
+ <ButtonV2
1783
+ key={"btn-Cancelar"}
1784
+ type={"white"}
1785
+ label={"Cancelar"}
1786
+ size={12}
1787
+ onClick={() => {
1788
+ setShowRejectModal(false);
1789
+ }}
1790
+ />,
1791
+ <ButtonV2
1792
+ key={"btn-Aceptar"}
1793
+ type={"pink"}
1794
+ label={"Aceptar"}
1795
+ size={12}
1796
+ onClick={async (e) => {
1797
+ const element = document.querySelector(
1798
+ "#modal-message-box .ql-container .ql-editor > p"
1799
+ );
1800
+
1801
+ if (!element) {
1802
+ console.error("Elemento no encontrado");
1803
+ return;
1804
+ }
1805
+
1806
+ const body = element.innerHTML;
1807
+
1808
+ if (typeof body !== "string") {
1809
+ console.error("El contenido de body no es una cadena", body);
1810
+ return;
1811
+ }
1812
+
1813
+ await createComment(e, body, activeTab);
1814
+ valRejAll ? validateAll("R") : sendToFacilitator("R");
1815
+ setMessage("Rechazado");
1816
+ setShowRejectModal(false);
1817
+ }}
1818
+ />,
1819
+ ]}
1820
+ />
1821
+ )}
1822
+ <Modal
1823
+ className="container-modalAlert"
1824
+ show={modalAlert.show}
1825
+ title={modalAlert.title}
1826
+ message={modalAlert.message}
1827
+ icon={"info"}
1828
+ onClickBtnDefault={(event) => {
1829
+ setModalAlert((prev) => ({
1830
+ ...prev,
1831
+ show: false,
1832
+ errorInputMessage: false,
1833
+ }));
1834
+ }}
1835
+ />
1836
+ </Container>
1837
+ );
1838
+ };