contentoh-components-library 8.0.0 → 10.0.1

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 (408) hide show
  1. package/.env.development +20 -12
  2. package/.env.production +10 -2
  3. package/CHANGELOG.md +39 -0
  4. package/dist/assets/images/carouselImagesLogin/login2.svg +117 -0
  5. package/dist/assets/images/carouselImagesLogin/login3.svg +147 -0
  6. package/dist/assets/images/carouselImagesLogin/loginImage.svg +301 -0
  7. package/dist/assets/images/editField/showPassword.png +0 -0
  8. package/dist/assets/images/generalButton/downloadIcon.svg +3 -0
  9. package/dist/assets/images/genericModal/closeWhite.svg +3 -0
  10. package/dist/assets/images/genericModal/errorModal.svg +3 -0
  11. package/dist/assets/images/genericModal/yellowAlert.svg +12 -0
  12. package/dist/assets/images/sliderToolTip/infoIcon.svg +4 -0
  13. package/dist/assets/images/sliderToolTip/slide1.svg +5 -0
  14. package/dist/assets/images/sliderToolTip/slide2.svg +9 -0
  15. package/dist/assets/images/sliderToolTip/slide3.svg +9 -0
  16. package/dist/assets/images/sliderToolTip/slide4.svg +9 -0
  17. package/dist/assets/images/sliderToolTip/slide5.svg +40 -0
  18. package/dist/assets/images/verticalSideMenuMainPage/closeMenu.svg +4 -0
  19. package/dist/assets/images/verticalSideMenuMainPage/iconFAQS.svg +12 -0
  20. package/dist/assets/images/verticalSideMenuMainPage/iconGroup.svg +3 -0
  21. package/dist/assets/images/verticalSideMenuMainPage/iconLogo.svg +12 -0
  22. package/dist/assets/images/verticalSideMenuMainPage/iconLogoContentoh.svg +15 -0
  23. package/dist/assets/images/verticalSideMenuMainPage/iconProduct.svg +3 -0
  24. package/dist/assets/images/verticalSideMenuMainPage/iconSpeedometer.svg +12 -0
  25. package/dist/assets/images/verticalSideMenuMainPage/iconTask.svg +10 -0
  26. package/dist/assets/images/verticalSideMenuMainPage/openMenu.svg +4 -0
  27. package/dist/components/atoms/ActivedFilter/ActivedFilter.stories.js +7 -1
  28. package/dist/components/atoms/ActivedFilter/index.js +12 -4
  29. package/dist/components/atoms/AsignationOption/AsignationOptions.stories.js +7 -1
  30. package/dist/components/atoms/AsignationOption/index.js +52 -23
  31. package/dist/components/atoms/AsignationOption/styles.js +1 -1
  32. package/dist/components/atoms/AtomList/AtomList.stories.js +7 -1
  33. package/dist/components/atoms/AtomList/index.js +14 -9
  34. package/dist/components/atoms/Avatar/AsignationImage.stories.js +7 -1
  35. package/dist/components/atoms/Avatar/index.js +11 -8
  36. package/dist/components/atoms/Card/Card.stories.js +7 -1
  37. package/dist/components/atoms/Card/index.js +8 -4
  38. package/dist/components/atoms/CharCounter/CharCounter.stories.js +31 -0
  39. package/dist/components/atoms/CharCounter/index.js +22 -0
  40. package/dist/components/atoms/CharCounter/styles.js +20 -0
  41. package/dist/components/atoms/CheckBox/CheckBox.stories.js +7 -1
  42. package/dist/components/atoms/CheckBox/index.js +19 -13
  43. package/dist/components/atoms/Commentary/index.js +10 -2
  44. package/dist/components/atoms/Commentary/styles.js +4 -1
  45. package/dist/components/atoms/CustomerTypeImage/CustomerTypeImage.stories.js +7 -1
  46. package/dist/components/atoms/CustomerTypeImage/index.js +8 -6
  47. package/dist/components/atoms/DropDownButton/DropDownButton.stories.js +7 -1
  48. package/dist/components/atoms/DropDownButton/index.js +9 -6
  49. package/dist/components/atoms/DropDownButton/styles.js +1 -1
  50. package/dist/components/atoms/EditField/EditField.stories.js +7 -1
  51. package/dist/components/atoms/EditField/index.js +17 -10
  52. package/dist/components/atoms/FeatureTag/FeatureTag.stories.js +7 -1
  53. package/dist/components/atoms/FeatureTag/index.js +11 -5
  54. package/dist/components/atoms/GeneralButton/GeneralButton.stories.js +7 -1
  55. package/dist/components/atoms/GeneralButton/index.js +13 -7
  56. package/dist/components/atoms/GeneralButton/styles.js +4 -2
  57. package/dist/components/atoms/GeneralInput/GeneralInput.stories.js +7 -1
  58. package/dist/components/atoms/GeneralInput/index.js +128 -69
  59. package/dist/components/atoms/GeneralInput/styles.js +8 -2
  60. package/dist/components/atoms/GeneralTextBox/GeneralTextBox.stories.js +7 -1
  61. package/dist/components/atoms/GeneralTextBox/index.js +12 -7
  62. package/dist/components/atoms/GenericModal/GenericModal.stories.js +46 -59
  63. package/dist/components/atoms/GenericModal/index.js +15 -8
  64. package/dist/components/atoms/GenericModal/styles.js +1 -1
  65. package/dist/components/atoms/GradientPanel/GradientPanel.stories.js +85 -80
  66. package/dist/components/atoms/GradientPanel/index.js +11 -7
  67. package/dist/components/atoms/GradientPanel/styles.js +2 -2
  68. package/dist/components/atoms/Graphic/Graphic.stories.js +7 -1
  69. package/dist/components/atoms/Graphic/index.js +9 -5
  70. package/dist/components/atoms/Input/index.js +15 -8
  71. package/dist/components/atoms/Input/style.js +4 -4
  72. package/dist/components/atoms/InputFormatter/Wysiwyg.stories.js +30 -0
  73. package/dist/components/atoms/InputFormatter/index.js +187 -0
  74. package/dist/components/atoms/InputFormatter/styles.js +33 -0
  75. package/dist/components/atoms/LabelToInput/index.js +18 -13
  76. package/dist/components/atoms/LabelToInput/style.js +3 -3
  77. package/dist/components/atoms/LoadImageMenu/LoadImageMenu.stories.js +7 -1
  78. package/dist/components/atoms/LoadImageMenu/index.js +33 -22
  79. package/dist/components/atoms/Loading/Loading.stories.js +28 -0
  80. package/dist/components/atoms/Loading/index.js +27 -0
  81. package/dist/components/atoms/Loading/styles.js +22 -0
  82. package/dist/components/atoms/LogoImage/LogoImage.stories.js +7 -1
  83. package/dist/components/atoms/LogoImage/index.js +9 -6
  84. package/dist/components/atoms/MenuNotification/MenuNotification.stories.js +7 -1
  85. package/dist/components/atoms/MenuNotification/index.js +21 -15
  86. package/dist/components/atoms/MenuProfile/MenuProfile.stories.js +7 -1
  87. package/dist/components/atoms/MenuProfile/index.js +25 -15
  88. package/dist/components/atoms/Notification/Notification.stories.js +5 -1
  89. package/dist/components/atoms/Notification/index.js +15 -9
  90. package/dist/components/atoms/Percent/Percent.stories.js +7 -1
  91. package/dist/components/atoms/Percent/index.js +21 -14
  92. package/dist/components/atoms/PriorityFlag/PriorityFlag.stories.js +7 -1
  93. package/dist/components/atoms/PriorityFlag/index.js +8 -4
  94. package/dist/components/atoms/ProductImage/ProductImage.stories.js +7 -1
  95. package/dist/components/atoms/ProductImage/index.js +11 -8
  96. package/dist/components/atoms/ProductPercentCard/Percent.stories.js +41 -0
  97. package/dist/components/atoms/ProductPercentCard/index.js +45 -0
  98. package/dist/components/atoms/ProductPercentCard/styles.js +20 -0
  99. package/dist/components/atoms/ProgressBar/ProgressBar.stories.js +7 -1
  100. package/dist/components/atoms/ProgressBar/index.js +8 -3
  101. package/dist/components/atoms/ProgressBar/styles.js +1 -1
  102. package/dist/components/atoms/ScreenHeader/ScreenHeader.stories.js +7 -1
  103. package/dist/components/atoms/ScreenHeader/index.js +9 -3
  104. package/dist/components/atoms/ScreenHeader/styles.js +1 -1
  105. package/dist/components/atoms/Select/index.js +27 -20
  106. package/dist/components/atoms/Select/style.js +1 -1
  107. package/dist/components/atoms/SideMenuButton/SideMenuButton.stories.js +5 -1
  108. package/dist/components/atoms/SideMenuButton/index.js +10 -4
  109. package/dist/components/atoms/SliderToolTip/SliderToolTip.stories.js +47 -0
  110. package/dist/components/atoms/SliderToolTip/index.js +200 -0
  111. package/dist/components/atoms/SliderToolTip/styles.js +24 -0
  112. package/dist/components/atoms/StatusTag/StatusTag.stories.js +7 -1
  113. package/dist/components/atoms/StatusTag/index.js +43 -3
  114. package/dist/components/atoms/StatusTag/styles.js +1 -1
  115. package/dist/components/atoms/TabSection/TabSection.stories.js +7 -1
  116. package/dist/components/atoms/TabSection/index.js +8 -3
  117. package/dist/components/atoms/ValidationPanel/ValidationPanel.stories.js +7 -1
  118. package/dist/components/atoms/ValidationPanel/index.js +57 -34
  119. package/dist/components/atoms/ValidationPanel/styles.js +1 -1
  120. package/dist/components/atoms/VerticalSideMenuMainPage/VerticalSideMenuMainPage.stories.js +28 -0
  121. package/dist/components/atoms/VerticalSideMenuMainPage/index.js +98 -0
  122. package/dist/components/atoms/VerticalSideMenuMainPage/styles.js +24 -0
  123. package/dist/components/molecules/AddProvidersAndProducts/AddProvidersAndProducts.stories.js +5 -1
  124. package/dist/components/molecules/AddProvidersAndProducts/index.js +18 -12
  125. package/dist/components/molecules/AssignedWork/AssignedWork.stories.js +5 -1
  126. package/dist/components/molecules/AssignedWork/index.js +36 -30
  127. package/dist/components/molecules/AvatarAndValidation/AvatarAndValidation.stories.js +7 -1
  128. package/dist/components/molecules/AvatarAndValidation/index.js +33 -25
  129. package/dist/components/molecules/CarouselImagesLogin/CarouselImagesLogin.stories.js +37 -0
  130. package/dist/components/molecules/CarouselImagesLogin/index.js +92 -0
  131. package/dist/components/molecules/CarouselImagesLogin/styles.js +21 -0
  132. package/dist/components/molecules/EditionActiveImage/EditionActiveImage.stories.js +7 -1
  133. package/dist/components/molecules/EditionActiveImage/index.js +14 -10
  134. package/dist/components/molecules/EmailResetPasswordLogin/EmailResetPasswordLogin.stories.js +28 -0
  135. package/dist/components/molecules/EmailResetPasswordLogin/index.js +153 -0
  136. package/dist/components/molecules/EmailResetPasswordLogin/styles.js +20 -0
  137. package/dist/components/molecules/FeaturesBar/FeaturesBar.stories.js +7 -1
  138. package/dist/components/molecules/FeaturesBar/index.js +11 -9
  139. package/dist/components/molecules/GalleryElement/GalleryElement.stories.js +7 -1
  140. package/dist/components/molecules/GalleryElement/index.js +96 -57
  141. package/dist/components/molecules/GalleryHeader/GalleryHeader.stories.js +7 -1
  142. package/dist/components/molecules/GalleryHeader/index.js +46 -16
  143. package/dist/components/molecules/HeaderTop/HeaderTop.stories.js +7 -1
  144. package/dist/components/molecules/HeaderTop/index.js +10 -7
  145. package/dist/components/molecules/ImageSelector/ImageSelector.stories.js +7 -1
  146. package/dist/components/molecules/ImageSelector/index.js +15 -13
  147. package/dist/components/molecules/LoginPasswordStrength/LoginPasswordStrength.stories.js +28 -0
  148. package/dist/components/molecules/LoginPasswordStrength/index.js +126 -0
  149. package/dist/components/molecules/LoginPasswordStrength/styles.js +78 -0
  150. package/dist/components/molecules/LogoLoading/Loading.stories.js +28 -0
  151. package/dist/components/molecules/LogoLoading/index.js +22 -0
  152. package/dist/components/molecules/LogoLoading/styles.js +18 -0
  153. package/dist/components/molecules/ParentComponent/ParentComponent.stories.js +10 -2
  154. package/dist/components/molecules/ParentComponent/index.js +9 -5
  155. package/dist/components/molecules/PayMethod/PayMethod.stories.js +7 -1
  156. package/dist/components/molecules/PayMethod/index.js +38 -33
  157. package/dist/components/molecules/PlanSelection/PlanSelection.stories.js +7 -1
  158. package/dist/components/molecules/PlanSelection/index.js +14 -11
  159. package/dist/components/molecules/ProductNameHeader/ProductNameHeader.stories.js +7 -1
  160. package/dist/components/molecules/ProductNameHeader/index.js +18 -14
  161. package/dist/components/molecules/ProductNotification/ProductNotification.stories.js +7 -1
  162. package/dist/components/molecules/ProductNotification/index.js +12 -9
  163. package/dist/components/molecules/ProfileHeader/ProfileHeader.stories.js +5 -1
  164. package/dist/components/molecules/ProfileHeader/index.js +21 -15
  165. package/dist/components/molecules/RegistrationFirstStep/RegistrationFirstStep.stories.js +28 -0
  166. package/dist/components/molecules/RegistrationFirstStep/index.js +308 -0
  167. package/dist/components/molecules/RegistrationFirstStep/styles.js +20 -0
  168. package/dist/components/molecules/RegistrationSecondStep/RegistrationSecondStep.stories.js +28 -0
  169. package/dist/components/molecules/RegistrationSecondStep/index.js +172 -0
  170. package/dist/components/molecules/RegistrationSecondStep/styles.js +20 -0
  171. package/dist/components/molecules/RegistrationThirdStep/RegistrationThirdStep.stories.js +28 -0
  172. package/dist/components/molecules/RegistrationThirdStep/index.js +155 -0
  173. package/dist/components/molecules/RegistrationThirdStep/styles.js +20 -0
  174. package/dist/components/molecules/RetailerSelector/RetailerSelector.stories.js +7 -1
  175. package/dist/components/molecules/RetailerSelector/index.js +36 -25
  176. package/dist/components/molecules/RetailerSelector/styles.js +1 -1
  177. package/dist/components/molecules/SidebarNotification/SidebarNotification.stories.js +5 -1
  178. package/dist/components/molecules/SidebarNotification/index.js +43 -37
  179. package/dist/components/molecules/SignInLogin/SignInLogin.stories.js +28 -0
  180. package/dist/components/molecules/SignInLogin/index.js +315 -0
  181. package/dist/components/molecules/SignInLogin/styles.js +20 -0
  182. package/dist/components/molecules/StatusAsignationInfo/StatusAsignationInfo.stories.js +7 -1
  183. package/dist/components/molecules/StatusAsignationInfo/index.js +111 -98
  184. package/dist/components/molecules/StatusAsignationInfo/styles.js +1 -1
  185. package/dist/components/molecules/TableHeader/TableHeader.stories.js +7 -1
  186. package/dist/components/molecules/TableHeader/index.js +21 -9
  187. package/dist/components/molecules/TableHeader/styles.js +1 -1
  188. package/dist/components/molecules/TableRow/TableRow.stories.js +7 -1
  189. package/dist/components/molecules/TableRow/index.js +11 -7
  190. package/dist/components/molecules/TabsMenu/TabsMenu.stories.js +7 -1
  191. package/dist/components/molecules/TabsMenu/index.js +13 -10
  192. package/dist/components/molecules/TagAndInput/TagAndInput.stories.js +7 -1
  193. package/dist/components/molecules/TagAndInput/index.js +43 -23
  194. package/dist/components/molecules/TagAndInput/styles.js +10 -2
  195. package/dist/components/molecules/VerificationCodeResetPasswordLogin/VerificationCodeResetPasswordLogin.stories.js +28 -0
  196. package/dist/components/molecules/VerificationCodeResetPasswordLogin/index.js +211 -0
  197. package/dist/components/molecules/VerificationCodeResetPasswordLogin/styles.js +20 -0
  198. package/dist/components/molecules/VerificationCodeResetPasswordLogin/utils.js +69 -0
  199. package/dist/components/organisms/ChangePassword/ChangePassword.stories.js +28 -0
  200. package/dist/components/organisms/ChangePassword/index.js +124 -0
  201. package/dist/components/organisms/ChangePassword/styles.js +18 -0
  202. package/dist/components/organisms/FullProductNameHeader/FullProductNameHeader.stories.js +7 -1
  203. package/dist/components/organisms/FullProductNameHeader/index.js +70 -34
  204. package/dist/components/organisms/FullTabsMenu/FullTabsMenu.stories.js +7 -1
  205. package/dist/components/organisms/FullTabsMenu/index.js +30 -23
  206. package/dist/components/organisms/Fullplan/FullPlan.stories.js +7 -1
  207. package/dist/components/organisms/Fullplan/index.js +23 -15
  208. package/dist/components/organisms/GlobalModal/index.js +73 -0
  209. package/dist/components/organisms/GlobalModal/styles.js +66 -0
  210. package/dist/components/organisms/ImageDataTable/ImageDataTable.stories.js +7 -1
  211. package/dist/components/organisms/ImageDataTable/index.js +85 -62
  212. package/dist/components/organisms/ImagePreviewer/ImagePreviewer.stories.js +7 -1
  213. package/dist/components/organisms/ImagePreviewer/index.js +12 -8
  214. package/dist/components/organisms/ImagesGroup/index.js +5 -1
  215. package/dist/components/organisms/InputGroup/InputGroup.stories.js +7 -1
  216. package/dist/components/organisms/InputGroup/index.js +44 -37
  217. package/dist/components/organisms/InputGroup/styles.js +1 -1
  218. package/dist/components/organisms/ProductImageModal/ProductImageModal.stories.js +7 -1
  219. package/dist/components/organisms/ProductImageModal/index.js +49 -46
  220. package/dist/components/organisms/ProductImageModal/styles.js +1 -1
  221. package/dist/components/pages/ChangePasswordLogin/ChangePasswordLogin.stories.js +38 -0
  222. package/dist/components/pages/ChangePasswordLogin/index.js +108 -0
  223. package/dist/components/pages/ChangePasswordLogin/styles.js +18 -0
  224. package/dist/components/pages/CustomerLogin/CustomerLogin.stories.js +52 -47
  225. package/dist/components/pages/CustomerLogin/index.js +18 -12
  226. package/dist/components/pages/CustomerPayMethod/CustomerPayMethod.stories.js +36 -28
  227. package/dist/components/pages/CustomerPayMethod/index.js +18 -12
  228. package/dist/components/pages/CustomerType/CustomerType.stories.js +21 -22
  229. package/dist/components/pages/CustomerType/index.js +18 -12
  230. package/dist/components/pages/EmailResetPassword/EmailResetPassword.stories.js +37 -0
  231. package/dist/components/pages/EmailResetPassword/index.js +130 -0
  232. package/dist/components/pages/EmailResetPassword/styles.js +20 -0
  233. package/dist/components/pages/OnboardPlan/OnboardPlan.stories.js +12 -9
  234. package/dist/components/pages/OnboardPlan/index.js +18 -12
  235. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +186 -0
  236. package/dist/components/pages/ProviderProductEdition/index.js +1932 -0
  237. package/dist/components/pages/ProviderProductEdition/styles.js +23 -0
  238. package/dist/components/pages/RegistrationLoginFirstStep/RegistrationLoginFirstStep.stories.js +37 -0
  239. package/dist/components/pages/RegistrationLoginFirstStep/index.js +269 -0
  240. package/dist/components/pages/RegistrationLoginFirstStep/styles.js +20 -0
  241. package/dist/components/pages/RegistrationLoginSecondStep/RegistrationLoginSecondStep.stories.js +38 -0
  242. package/dist/components/pages/RegistrationLoginSecondStep/index.js +176 -0
  243. package/dist/components/pages/RegistrationLoginSecondStep/styles.js +20 -0
  244. package/dist/components/pages/RegistrationLoginThirdStep/RegistrationLoginThirdStep.stories.js +37 -0
  245. package/dist/components/pages/RegistrationLoginThirdStep/index.js +178 -0
  246. package/dist/components/pages/RegistrationLoginThirdStep/styles.js +20 -0
  247. package/dist/components/pages/RetailerPlan/RetailerPlan.stories.js +13 -10
  248. package/dist/components/pages/RetailerPlan/index.js +18 -12
  249. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +36 -72
  250. package/dist/components/pages/RetailerProductEdition/index.js +1295 -590
  251. package/dist/components/pages/RetailerProductEdition/styles.js +1 -1
  252. package/dist/components/pages/VerificationCodeResetPassword/VerificationCodeResetPassword.stories.js +37 -0
  253. package/dist/components/pages/VerificationCodeResetPassword/index.js +121 -0
  254. package/dist/components/pages/VerificationCodeResetPassword/styles.js +20 -0
  255. package/dist/components/pages/VerificationCodeResetPassword/utils.js +69 -0
  256. package/dist/global-files/data.js +104 -24
  257. package/dist/global-files/fonts.css +45 -0
  258. package/dist/global-files/global-styles.css +41 -0
  259. package/dist/index.js +316 -100
  260. package/package.json +28 -8
  261. package/src/assets/images/carouselImagesLogin/login2.svg +117 -0
  262. package/src/assets/images/carouselImagesLogin/login3.svg +147 -0
  263. package/src/assets/images/carouselImagesLogin/loginImage.svg +301 -0
  264. package/src/assets/images/editField/showPassword.png +0 -0
  265. package/src/assets/images/generalButton/downloadIcon.svg +3 -0
  266. package/src/assets/images/genericModal/closeWhite.svg +3 -0
  267. package/src/assets/images/genericModal/errorModal.svg +3 -0
  268. package/src/assets/images/genericModal/yellowAlert.svg +12 -0
  269. package/src/assets/images/sliderToolTip/infoIcon.svg +4 -0
  270. package/src/assets/images/sliderToolTip/slide1.svg +5 -0
  271. package/src/assets/images/sliderToolTip/slide2.svg +9 -0
  272. package/src/assets/images/sliderToolTip/slide3.svg +9 -0
  273. package/src/assets/images/sliderToolTip/slide4.svg +9 -0
  274. package/src/assets/images/sliderToolTip/slide5.svg +40 -0
  275. package/src/assets/images/verticalSideMenuMainPage/closeMenu.svg +4 -0
  276. package/src/assets/images/verticalSideMenuMainPage/iconFAQS.svg +12 -0
  277. package/src/assets/images/verticalSideMenuMainPage/iconGroup.svg +3 -0
  278. package/src/assets/images/verticalSideMenuMainPage/iconLogo.svg +12 -0
  279. package/src/assets/images/verticalSideMenuMainPage/iconLogoContentoh.svg +15 -0
  280. package/src/assets/images/verticalSideMenuMainPage/iconProduct.svg +3 -0
  281. package/src/assets/images/verticalSideMenuMainPage/iconSpeedometer.svg +12 -0
  282. package/src/assets/images/verticalSideMenuMainPage/iconTask.svg +10 -0
  283. package/src/assets/images/verticalSideMenuMainPage/openMenu.svg +4 -0
  284. package/src/components/atoms/AsignationOption/index.js +18 -1
  285. package/src/components/atoms/AsignationOption/styles.js +19 -1
  286. package/src/components/atoms/CharCounter/CharCounter.stories.js +11 -0
  287. package/src/components/atoms/CharCounter/index.js +13 -0
  288. package/src/components/atoms/CharCounter/styles.js +10 -0
  289. package/src/components/atoms/CheckBox/index.js +8 -2
  290. package/src/components/atoms/Commentary/index.js +2 -2
  291. package/src/components/atoms/Commentary/styles.js +2 -1
  292. package/src/components/atoms/DropDownButton/styles.js +6 -0
  293. package/src/components/atoms/GeneralButton/index.js +1 -0
  294. package/src/components/atoms/GeneralButton/styles.js +14 -0
  295. package/src/components/atoms/GeneralInput/index.js +109 -62
  296. package/src/components/atoms/GeneralInput/styles.js +35 -1
  297. package/src/components/atoms/GenericModal/index.js +2 -2
  298. package/src/components/atoms/GenericModal/styles.js +11 -3
  299. package/src/components/atoms/GradientPanel/styles.js +8 -1
  300. package/src/components/atoms/Input/index.js +2 -1
  301. package/src/components/atoms/Input/style.js +9 -5
  302. package/src/components/atoms/InputFormatter/Wysiwyg.stories.js +12 -0
  303. package/src/components/atoms/InputFormatter/index.js +146 -0
  304. package/src/components/atoms/InputFormatter/styles.js +41 -0
  305. package/src/components/atoms/LabelToInput/index.js +0 -1
  306. package/src/components/atoms/LabelToInput/style.js +15 -4
  307. package/src/components/atoms/Loading/Loading.stories.js +10 -0
  308. package/src/components/atoms/Loading/index.js +13 -0
  309. package/src/components/atoms/Loading/styles.js +57 -0
  310. package/src/components/atoms/LogoImage/index.js +1 -1
  311. package/src/components/atoms/ProductPercentCard/Percent.stories.js +41 -0
  312. package/src/components/atoms/ProductPercentCard/index.js +23 -0
  313. package/src/components/atoms/{Percent → ProductPercentCard}/styles.js +11 -7
  314. package/src/components/atoms/ProgressBar/styles.js +2 -1
  315. package/src/components/atoms/ScreenHeader/index.js +7 -3
  316. package/src/components/atoms/ScreenHeader/styles.js +14 -2
  317. package/src/components/atoms/Select/index.js +3 -1
  318. package/src/components/atoms/Select/style.js +1 -2
  319. package/src/components/atoms/SliderToolTip/SliderToolTip.stories.js +23 -0
  320. package/src/components/atoms/SliderToolTip/index.js +182 -0
  321. package/src/components/atoms/SliderToolTip/styles.js +168 -0
  322. package/src/components/atoms/StatusTag/index.js +30 -2
  323. package/src/components/atoms/StatusTag/styles.js +9 -4
  324. package/src/components/atoms/ValidationPanel/index.js +29 -17
  325. package/src/components/atoms/ValidationPanel/styles.js +6 -2
  326. package/src/components/atoms/VerticalSideMenuMainPage/VerticalSideMenuMainPage.stories.js +12 -0
  327. package/src/components/atoms/VerticalSideMenuMainPage/index.js +54 -0
  328. package/src/components/atoms/VerticalSideMenuMainPage/styles.js +45 -0
  329. package/src/components/molecules/AvatarAndValidation/index.js +20 -15
  330. package/src/components/molecules/CarouselImagesLogin/CarouselImagesLogin.stories.js +17 -0
  331. package/src/components/molecules/CarouselImagesLogin/index.js +65 -0
  332. package/src/components/molecules/CarouselImagesLogin/styles.js +60 -0
  333. package/src/components/molecules/EmailResetPasswordLogin/EmailResetPasswordLogin.stories.js +11 -0
  334. package/src/components/molecules/EmailResetPasswordLogin/index.js +85 -0
  335. package/src/components/molecules/EmailResetPasswordLogin/styles.js +23 -0
  336. package/src/components/molecules/GalleryElement/index.js +26 -6
  337. package/src/components/molecules/GalleryHeader/index.js +8 -2
  338. package/src/components/molecules/LoginPasswordStrength/LoginPasswordStrength.stories.js +8 -0
  339. package/src/components/molecules/LoginPasswordStrength/index.js +84 -0
  340. package/src/components/molecules/LoginPasswordStrength/styles.js +91 -0
  341. package/src/components/molecules/LogoLoading/Loading.stories.js +10 -0
  342. package/src/components/molecules/LogoLoading/index.js +12 -0
  343. package/src/components/molecules/LogoLoading/styles.js +16 -0
  344. package/src/components/molecules/RegistrationFirstStep/RegistrationFirstStep.stories.js +11 -0
  345. package/src/components/molecules/RegistrationFirstStep/index.js +227 -0
  346. package/src/components/molecules/RegistrationFirstStep/styles.js +87 -0
  347. package/src/components/molecules/RegistrationSecondStep/RegistrationSecondStep.stories.js +11 -0
  348. package/src/components/molecules/RegistrationSecondStep/index.js +135 -0
  349. package/src/components/molecules/RegistrationSecondStep/styles.js +64 -0
  350. package/src/components/molecules/RegistrationThirdStep/RegistrationThirdStep.stories.js +11 -0
  351. package/src/components/molecules/RegistrationThirdStep/index.js +130 -0
  352. package/src/components/molecules/RegistrationThirdStep/styles.js +44 -0
  353. package/src/components/molecules/RetailerSelector/index.js +7 -1
  354. package/src/components/molecules/RetailerSelector/styles.js +3 -0
  355. package/src/components/molecules/SignInLogin/SignInLogin.stories.js +11 -0
  356. package/src/components/molecules/SignInLogin/index.js +226 -0
  357. package/src/components/molecules/SignInLogin/styles.js +120 -0
  358. package/src/components/molecules/StatusAsignationInfo/index.js +60 -53
  359. package/src/components/molecules/StatusAsignationInfo/styles.js +8 -2
  360. package/src/components/molecules/TableHeader/index.js +14 -2
  361. package/src/components/molecules/TableHeader/styles.js +8 -0
  362. package/src/components/molecules/TagAndInput/index.js +19 -1
  363. package/src/components/molecules/TagAndInput/styles.js +28 -0
  364. package/src/components/molecules/VerificationCodeResetPasswordLogin/VerificationCodeResetPasswordLogin.stories.js +11 -0
  365. package/src/components/molecules/VerificationCodeResetPasswordLogin/index.js +171 -0
  366. package/src/components/molecules/VerificationCodeResetPasswordLogin/styles.js +54 -0
  367. package/src/components/molecules/VerificationCodeResetPasswordLogin/utils.js +54 -0
  368. package/src/components/organisms/ChangePassword/ChangePassword.stories.js +11 -0
  369. package/src/components/organisms/ChangePassword/index.js +77 -0
  370. package/src/components/organisms/ChangePassword/styles.js +13 -0
  371. package/src/components/organisms/FullProductNameHeader/index.js +53 -16
  372. package/src/components/organisms/FullTabsMenu/index.js +15 -12
  373. package/src/components/organisms/GlobalModal/index.js +68 -0
  374. package/src/components/organisms/GlobalModal/styles.js +113 -0
  375. package/src/components/organisms/ImageDataTable/index.js +29 -8
  376. package/src/components/organisms/InputGroup/index.js +28 -8
  377. package/src/components/organisms/InputGroup/styles.js +2 -2
  378. package/src/components/organisms/ProductImageModal/index.js +8 -9
  379. package/src/components/organisms/ProductImageModal/styles.js +3 -0
  380. package/src/components/pages/ChangePasswordLogin/ChangePasswordLogin.stories.js +18 -0
  381. package/src/components/pages/ChangePasswordLogin/index.js +77 -0
  382. package/src/components/pages/ChangePasswordLogin/styles.js +20 -0
  383. package/src/components/pages/EmailResetPassword/EmailResetPassword.stories.js +17 -0
  384. package/src/components/pages/EmailResetPassword/index.js +77 -0
  385. package/src/components/pages/EmailResetPassword/styles.js +27 -0
  386. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +186 -0
  387. package/src/components/pages/ProviderProductEdition/index.js +1400 -0
  388. package/src/components/pages/ProviderProductEdition/styles.js +118 -0
  389. package/src/components/pages/RegistrationLoginFirstStep/RegistrationLoginFirstStep.stories.js +17 -0
  390. package/src/components/pages/RegistrationLoginFirstStep/index.js +160 -0
  391. package/src/components/pages/RegistrationLoginFirstStep/styles.js +85 -0
  392. package/src/components/pages/RegistrationLoginSecondStep/RegistrationLoginSecondStep.stories.js +18 -0
  393. package/src/components/pages/RegistrationLoginSecondStep/index.js +111 -0
  394. package/src/components/pages/RegistrationLoginSecondStep/styles.js +64 -0
  395. package/src/components/pages/RegistrationLoginThirdStep/RegistrationLoginThirdStep.stories.js +17 -0
  396. package/src/components/pages/RegistrationLoginThirdStep/index.js +106 -0
  397. package/src/components/pages/RegistrationLoginThirdStep/styles.js +48 -0
  398. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +27 -63
  399. package/src/components/pages/RetailerProductEdition/index.js +1034 -442
  400. package/src/components/pages/RetailerProductEdition/styles.js +17 -3
  401. package/src/components/pages/VerificationCodeResetPassword/VerificationCodeResetPassword.stories.js +17 -0
  402. package/src/components/pages/VerificationCodeResetPassword/index.js +92 -0
  403. package/src/components/pages/VerificationCodeResetPassword/styles.js +54 -0
  404. package/src/components/pages/VerificationCodeResetPassword/utils.js +56 -0
  405. package/src/global-files/data.js +88 -28
  406. package/src/index.js +23 -8
  407. package/src/components/atoms/Percent/Percent.stories.js +0 -38
  408. package/src/components/atoms/Percent/index.js +0 -15
@@ -0,0 +1,1400 @@
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 {
12
+ getRetailerServices,
13
+ getPercentage,
14
+ fetchUsers,
15
+ } from "../../../global-files/data";
16
+ import { GalleryHeader } from "../../molecules/GalleryHeader";
17
+ import { ProductImageModal } from "../../organisms/ProductImageModal";
18
+ import { useDropzone } from "react-dropzone";
19
+ import axios from "axios";
20
+ import { v4 as uuidv4 } from "uuid";
21
+ import AWS from "aws-sdk";
22
+ import attributesSent from "../../../assets/images/modalsSVGs/attributesSent.svg";
23
+ import descriptionSent from "../../../assets/images/modalsSVGs/descriptionSent.svg";
24
+ import imagesSent from "../../../assets/images/modalsSVGs/uploadingImages.svg";
25
+ import { TagAndInput } from "../../molecules/TagAndInput/index";
26
+ import { Button } from "../../atoms/GeneralButton";
27
+ import { Commentary } from "../../atoms/Commentary";
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 { Link } from "react-router-dom";
33
+ import face from "../../../assets/images/defaultImages/defaultProfileImage.svg";
34
+ import errorModal from "../../../assets/images/genericModal/errorModal.svg";
35
+ import { GlobalModal } from "../../organisms/GlobalModal/index";
36
+
37
+ const reducerImages = (state, action) => {
38
+ let { values, attrForImgs } = state;
39
+ switch (action.action) {
40
+ case "init":
41
+ return action.init;
42
+ case "addImg":
43
+ values = [...values, action.img];
44
+ return { ...state, values };
45
+ case "changeImageInfo":
46
+ values[action.index][action.attribute] = action.value;
47
+ return { ...state, values };
48
+ case "changeAttrValue":
49
+ attrForImgs[action.retailer][action.index].value = action.value;
50
+ return { ...state, attrForImgs, values };
51
+ case "deleteImage":
52
+ values = values.filter(
53
+ (value) => action.selectedImages.indexOf(value) === -1
54
+ );
55
+ return { ...state, values };
56
+ default:
57
+ return state;
58
+ }
59
+ };
60
+
61
+ const S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
62
+ const REGION = "us-east-1";
63
+
64
+ AWS.config.update({
65
+ accessKeyId: process.env.REACT_APP_KEY_UPLOAD_TO_S3,
66
+ secretAccessKey: process.env.REACT_APP_ACCESS_KEY_UPLOAD_TO_S3,
67
+ });
68
+
69
+ const myBucket = new AWS.S3({
70
+ params: { Bucket: S3_BUCKET },
71
+ region: REGION,
72
+ });
73
+
74
+ export const ProviderProductEdition = ({
75
+ tabsSections,
76
+ productSelected = {},
77
+ productToEdit,
78
+ user = {},
79
+ location = {},
80
+ token,
81
+ revision = false,
82
+ setShowContentohRequestModal,
83
+ showSurvey,
84
+ }) => {
85
+ const [activeTab, setActiveTab] = useState("Descripción");
86
+ const [activeImage, setActiveImage] = useState();
87
+ const [imageLayout, setImageLayout] = useState(false);
88
+ const [headerTop, setHeaderTop] = useState(0);
89
+ const [descriptions, setDescriptions] = useState([]);
90
+ const [datasheets, setDatasheets] = useState([]);
91
+ const [images, setImages] = useReducer(reducerImages, {});
92
+ const [showModal, setShowModal] = useState(false);
93
+ const { getRootProps, getInputProps } = useDropzone({
94
+ accept: "image/*",
95
+ noKeyboard: true,
96
+ multiple: true,
97
+ noClick: true,
98
+ onDrop: (acceptedFiles) => {
99
+ const newImages = [];
100
+ acceptedFiles.map((file) => {
101
+ const reader = new FileReader();
102
+ reader.fileName = file.name;
103
+ reader.onload = async function (e) {
104
+ const ext = e.srcElement.fileName.split(".");
105
+ const img = new Image();
106
+ img.src = e.target.result;
107
+ setTimeout(() => {
108
+ const width = img.width;
109
+ const height = img.height;
110
+ const newImg = {
111
+ action: "addImg",
112
+ img: {
113
+ src: e.target.result,
114
+ name: e.target.fileName,
115
+ ext: ext[ext.length - 1],
116
+ width: width,
117
+ height: height,
118
+ },
119
+ };
120
+ setImages(newImg);
121
+ }, 500);
122
+ };
123
+ reader.onerror = function (error) {
124
+ console.log("dropzoneError: ", error);
125
+ };
126
+ reader.readAsDataURL(file);
127
+ return file;
128
+ });
129
+ },
130
+ });
131
+ const [updatedDatasheets, setUpdatedDatasheets] = useState([]);
132
+ const [updatedDescriptions, setUpdatedDescriptions] = useState([]);
133
+ const [imagesUploaded, setImagesUploaded] = useState(false);
134
+ const [dataImages, setDataImages] = useState();
135
+ const [percentages, setPercentages] = useState(
136
+ product?.retailers
137
+ ? new Array(product?.retailers?.length).fill({ percentage: 0 })
138
+ : new Array(product?.retailersAvailable?.length).fill({ percentage: 0 })
139
+ );
140
+ const [activePercentage, setActivePercentage] = useState(0);
141
+ const [activeRetailer, setActiveRetailer] = useState({});
142
+ const [services, setServices] = useState([]);
143
+ const [servicesData, setServicesData] = useState([]);
144
+ const [message, setMessage] = useState("");
145
+ const [product, setProduct] = useState(
146
+ JSON.parse(sessionStorage.getItem("productSelected"))
147
+ ? JSON.parse(sessionStorage.getItem("productSelected"))
148
+ : productSelected
149
+ );
150
+ const [productEdit, setProductEdit] = useState(
151
+ JSON.parse(sessionStorage.getItem("productEdit"))
152
+ ? JSON.parse(sessionStorage.getItem("productEdit"))
153
+ : productToEdit
154
+ );
155
+ const [icon, setIcon] = useState(null);
156
+ const [version, setVersion] = useState(product?.version);
157
+ const [comments, setComments] = useState({});
158
+ const [comment, setComment] = useState("");
159
+ const [requiredNull, setRequiredNull] = useState({
160
+ "Ficha técnica": 0,
161
+ Descripción: 0,
162
+ Imágenes: 0,
163
+ });
164
+ const [crossComment, setCrossComment] = useState(false);
165
+ const [userGroups, setUserGroups] = useState([]);
166
+ const [assig, setAssig] = useState({});
167
+ const [selectedImages, setSelectedImages] = useState([]);
168
+ const [componentsArray, setComponentsArray] = useState([]);
169
+ const [checkAll, setCheckAll] = useState(false);
170
+ const isRetailer = user?.is_retailer;
171
+ const [loading, setLoading] = useState(true);
172
+ const [statusArray, setStatusArray] = useState([]);
173
+
174
+ const originProp = location?.state?.origin;
175
+ const [origin, setOrigin] = useState({
176
+ "Ficha técnica": originProp,
177
+ Descripción: originProp,
178
+ Imágenes: originProp,
179
+ });
180
+ const [inCart, setInCart] = useState(false);
181
+ const [modalSent, setModalSent] = useState(false);
182
+ const [modalViewError, setModalViewError] = useState(false);
183
+ const [showGenericModal, setShowGenericModal] = useState(false);
184
+ const [dataGenericModal, setDataGenericModal] = useState({
185
+ message: "¿Estás seguro de continuar?",
186
+ detail: ` ${
187
+ user.is_retailer
188
+ ? "Asegurate de haber revisado las tres secciones"
189
+ : "Envíar el producto a la cadena"
190
+ }`,
191
+ button1: {
192
+ name: "Cerrar",
193
+ action: () => setModalViewTextArea(false),
194
+ },
195
+ button2: {
196
+ name: "Continuar",
197
+ action: () => evaluationToRetailer(false),
198
+ },
199
+ img: face,
200
+ });
201
+ const [modalViewTextArea, setModalViewTextArea] = useState(false);
202
+ const [socketType, setSocketType] = useState(null);
203
+ const [saving, setSaving] = useState(loading);
204
+
205
+ useEffect(() => {
206
+ checkAll && setSelectedImages(images.values);
207
+ }, [checkAll]);
208
+
209
+ const loadData = async () => {
210
+ const services = await getRetailerServices(
211
+ product?.id_article || product?.article?.id_article,
212
+ product?.article?.company_name || product?.categoryName,
213
+ parseInt(product?.article?.id_category || product?.id_category),
214
+ product?.version
215
+ );
216
+
217
+ //Converts the data inside the datasheets object to array
218
+ setServices(services);
219
+ getServices();
220
+
221
+ if (!originProp) {
222
+ setActiveRetailer(
223
+ product?.retailers
224
+ ? product?.retailers[0]
225
+ : product?.retailersAvailable[0]
226
+ );
227
+ }
228
+
229
+ //setActiveRetailer(product?.retailers[0]);
230
+ setImages({
231
+ action: "init",
232
+ init: services[2],
233
+ });
234
+ if (services[2]?.values?.length > 0) setActiveImage(0);
235
+
236
+ getPercentage({ data: [product] }).then((res) => setPercentages(res));
237
+ setLoading(false);
238
+ };
239
+
240
+ const getServices = async () => {
241
+ const productInOrder = product.id_order || product.orderId;
242
+ const idArticle = product?.id_article || product?.article?.id_article;
243
+ if (isRevision() || productInOrder) {
244
+ const servicesResponse = await axios.get(
245
+ `${
246
+ process.env.REACT_APP_SERVICES_ENDPOINT
247
+ }?articleId=${idArticle}&orderId=${
248
+ product?.id_order ?? product.orderId
249
+ }&end=true`
250
+ );
251
+ const parsedResponse = JSON.parse(servicesResponse?.data?.body).data;
252
+ let retailers = product.retailers || product.retailersAvailable;
253
+ let active = retailers?.filter((retailer) =>
254
+ parsedResponse?.map((srv) => srv.id_retailer).includes(retailer.id)
255
+ )[0];
256
+ !activeRetailer.id && setActiveRetailer(active ? active : retailers[0]);
257
+ setServicesData(parsedResponse);
258
+ }
259
+ };
260
+
261
+ const isRevision = () => {
262
+ if (productEdit) {
263
+ const concept = getConcept(activeTab);
264
+ const isRetailer = user.is_retailer === 1;
265
+ const currentService = productEdit?.product[`${concept}_status`];
266
+ const orgn = origin[activeTab];
267
+ const revision = [
268
+ "RequestWithContentoh",
269
+ "RequestWithoutContentoh",
270
+ "Contentoh",
271
+ ].includes(orgn);
272
+ if (isRetailer) {
273
+ if (revision && currentService === "AP") return true;
274
+ } else {
275
+ const { product } = productEdit;
276
+ if (
277
+ orgn === "Contentoh" ||
278
+ (["RECEIVED", "IN_PROGRESS"].includes(currentService) &&
279
+ orgn === "RequestWithoutContentoh") ||
280
+ (currentService === "AA" && orgn === "RequestWithContentoh") ||
281
+ (currentService === "RC" &&
282
+ orgn === "RequestWithoutContentoh" &&
283
+ (!product.id_order || !product.orderId))
284
+ )
285
+ return true;
286
+ }
287
+ }
288
+ return false;
289
+ };
290
+
291
+ const getCart = async () => {
292
+ const res = await axios.get(process.env.REACT_APP_CART, {
293
+ headers: {
294
+ Authorization: token,
295
+ },
296
+ });
297
+ const arr = JSON.parse(res.data.body).data.map((e) => e.article_id);
298
+ setInCart(arr.some((e) => e.articleId === product.id_article));
299
+ };
300
+
301
+ useEffect(async () => {
302
+ sessionStorage.setItem("user", JSON.stringify(user));
303
+ loadData();
304
+ getCart();
305
+ setUserGroups(await fetchUsers(token));
306
+ let arr = [];
307
+ switch (user.id_role) {
308
+ case 7:
309
+ case 8:
310
+ arr = ["IN_PROGRESS", "RF", "RA"];
311
+ break;
312
+ case 4:
313
+ case 5:
314
+ arr = ["RF", "AF", "AA", "AP", "AC"];
315
+ break;
316
+ case 6:
317
+ arr = ["RP", "RC", "AF"];
318
+ break;
319
+ default:
320
+ arr = [];
321
+ break;
322
+ }
323
+ setStatusArray(arr);
324
+ }, [product]);
325
+
326
+ const loadAssignations = (currentProduct) => {
327
+ setAssig(product?.asignations);
328
+ };
329
+
330
+ useEffect(() => {
331
+ loadAssignations(product);
332
+ }, [userGroups]);
333
+
334
+ useEffect(() => {
335
+ const productTemp = product;
336
+ const retailers = productTemp?.retailersAvailable || productTemp?.retailers;
337
+ retailers?.forEach((retailer) => {
338
+ retailer["percentage"] = percentages?.filter(
339
+ (percent) => retailer?.id === percent?.id_retailer
340
+ )[0]?.percentage;
341
+ });
342
+
343
+ setProduct(productTemp);
344
+ setActivePercentage(retailers[0]?.percentage);
345
+ }, [percentages]);
346
+
347
+ const loadInputs = () => {
348
+ if (services.length > 0) {
349
+ if (services[0][activeRetailer.id]?.data)
350
+ services[0][activeRetailer.id].data = Object.values(
351
+ services[0][activeRetailer.id].data
352
+ );
353
+ setActivePercentage(Math.round(activeRetailer?.percentage, 0));
354
+
355
+ const datagroups = services[0][activeRetailer.id];
356
+ const inputs = services[0]?.inputs;
357
+ const descriptions = services[1]?.filter(
358
+ (service) => service?.id === activeRetailer?.id
359
+ );
360
+ setDatasheets([datagroups, inputs]);
361
+ setDescriptions(descriptions);
362
+ }
363
+ };
364
+
365
+ useEffect(() => {
366
+ loadInputs();
367
+ }, [servicesData, activeRetailer, services]);
368
+
369
+ const thumbs = () => {
370
+ const imageInputs = socketType?.slice();
371
+ const imageType = images?.imageType?.map((e) => ({
372
+ value: e?.id,
373
+ name: e?.name,
374
+ }));
375
+ const imagePackagingType = images?.imagePackagingType?.map((e) => ({
376
+ value: e?.id,
377
+ name: e?.name,
378
+ }));
379
+ return images?.values?.map((image, index) => (
380
+ <GalleryElement
381
+ setCheckAll={setCheckAll}
382
+ key={index}
383
+ image={image}
384
+ gridLayout={imageLayout}
385
+ id={"gallery-element-" + index}
386
+ index={index + "-" + image.name}
387
+ number={index}
388
+ imageType={imageType}
389
+ imagePackagingType={imagePackagingType}
390
+ imageInputs={imageInputs}
391
+ changeImage={setImages}
392
+ selectedImages={selectedImages}
393
+ setSelectedImages={setSelectedImages}
394
+ />
395
+ ));
396
+ };
397
+
398
+ useEffect(() => {
399
+ const imageInputs = images?.inputs?.map((e) => ({
400
+ value: e?.id,
401
+ name: e?.name,
402
+ required: e?.required,
403
+ active: images?.values.some((value) => value?.image_id === e?.id),
404
+ }));
405
+ setSocketType(imageInputs);
406
+ }, [images]);
407
+
408
+ const saveDescriptions = async () => {
409
+ setLoading(true);
410
+ const dataObject = {
411
+ articleId: product?.id_article,
412
+ articleData: updatedDescriptions,
413
+ };
414
+ if (product?.orderId) dataObject["orderId"] = product?.orderId;
415
+ try {
416
+ await axios.put(
417
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?description=true&version=${version}`,
418
+ dataObject,
419
+ {
420
+ headers: {
421
+ Authorization: token,
422
+ },
423
+ }
424
+ );
425
+ setMessage("Descripciones guardadas con éxito");
426
+ loadData();
427
+ } catch (error) {
428
+ console.log(error);
429
+ }
430
+ };
431
+
432
+ const saveDatasheets = async () => {
433
+ setLoading(true);
434
+ const dataObject = {
435
+ articleId: product?.id_article,
436
+ articleData: updatedDatasheets,
437
+ };
438
+ if (product?.orderId) dataObject["orderId"] = product?.orderId;
439
+ try {
440
+ await axios.put(
441
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?datasheet=true&version=${version}`,
442
+ dataObject,
443
+ {
444
+ headers: {
445
+ Authorization: token,
446
+ },
447
+ }
448
+ );
449
+ setMessage("Fichas técnicas guardadas");
450
+ loadData();
451
+ } catch (error) {
452
+ console.log(error);
453
+ }
454
+ };
455
+
456
+ const updateImages = useCallback(async () => {
457
+ const imagesList = images?.values?.slice();
458
+ const imagesListTemp = imagesList?.reduce((acc, image) => {
459
+ acc[image?.image_id] = ++acc[image?.image_id] || 0;
460
+ return acc;
461
+ }, {});
462
+
463
+ const duplicated = imagesList?.filter((image) => {
464
+ return imagesListTemp[image?.image_id];
465
+ });
466
+
467
+ const attrForImgs = Object.values(images?.attrForImgs);
468
+ attrForImgs.pop();
469
+ const data = {
470
+ articleId: product?.id_article,
471
+ attrReqImgs: attrForImgs?.map((e) => ({
472
+ attrId: e[0]?.id,
473
+ value: e[0]?.value,
474
+ })),
475
+ articleData: imagesList?.filter((e) => !e.id),
476
+ updateImages: imagesList?.filter((e) => e.id),
477
+ };
478
+ if (product?.orderId) data["orderId"] = product?.orderId;
479
+ let valid =
480
+ data?.articleData?.length === 0
481
+ ? true
482
+ : data?.articleData?.every((e, i) => {
483
+ if (e?.image_id && e?.packing_type && e?.image_type) {
484
+ return true;
485
+ }
486
+ return false;
487
+ });
488
+ if (valid && data?.updateImages?.length > 0 && duplicated?.length === 0) {
489
+ valid = data?.updateImages?.every((e, i) => {
490
+ if (e?.image_id && e?.packing_type && e?.image_type) {
491
+ return true;
492
+ }
493
+ return false;
494
+ });
495
+ }
496
+ if (valid && duplicated?.length === 0) {
497
+ setLoading(true);
498
+ try {
499
+ data?.articleData?.forEach((e) => {
500
+ e.uuid = uuidv4();
501
+ });
502
+ setDataImages(data);
503
+ if (data?.articleData?.length > 0) {
504
+ setImagesUploaded(false);
505
+ const promiseArray = [];
506
+ data?.articleData?.forEach((e) => {
507
+ const file = Buffer.from(
508
+ e.src.replace(/^data:image\/\w+;base64,/, ""),
509
+ "base64"
510
+ );
511
+ const params = {
512
+ ACL: "public-read",
513
+ Body: file,
514
+ Bucket: S3_BUCKET,
515
+ Key: `id-${data.articleId}/${version}/${e?.image_id}-${e?.uuid}.${e?.ext}`,
516
+ };
517
+ promiseArray.push(myBucket.putObject(params).promise());
518
+ });
519
+ await Promise.all(promiseArray);
520
+ setImagesUploaded(true);
521
+ } else {
522
+ setImagesUploaded(true);
523
+ }
524
+ } catch (err) {
525
+ console.log(err);
526
+ // setMainLoading(false);
527
+ }
528
+ } else {
529
+ // setMainLoading(false);
530
+ setMessage(
531
+ "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."
532
+ );
533
+ }
534
+ // eslint-disable-next-line react-hooks/exhaustive-deps
535
+ }, [images, imagesUploaded]);
536
+
537
+ useEffect(async () => {
538
+ if (imagesUploaded) {
539
+ dataImages.articleData = dataImages?.articleData.map((e) => {
540
+ delete e.src;
541
+ e.imageID = e.image_id;
542
+ e.packingType = e.packing_type;
543
+ e.imageType = e.image_type;
544
+ if (product?.orderId) e["orderId"] = product?.orderId;
545
+ return e;
546
+ });
547
+ try {
548
+ await axios.put(
549
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
550
+ dataImages,
551
+ {
552
+ headers: {
553
+ Authorization: token,
554
+ },
555
+ }
556
+ );
557
+ setMessage("Imágenes guardadas con éxito");
558
+ sessionStorage.removeItem("imagesList");
559
+ loadData();
560
+ } catch (error) {
561
+ console.log(error);
562
+ }
563
+ }
564
+ }, [dataImages, imagesUploaded]);
565
+
566
+ const getConcept = (tab) => {
567
+ switch (tab) {
568
+ case "Descripción":
569
+ return "description";
570
+ case "Ficha técnica":
571
+ return "datasheet";
572
+ case "Imágenes":
573
+ return "images";
574
+ }
575
+ };
576
+
577
+ const getSectionIcon = () => {
578
+ switch (activeTab) {
579
+ case "Ficha técnica":
580
+ setIcon(attributesSent);
581
+ break;
582
+ case "Descripción":
583
+ setIcon(descriptionSent);
584
+ break;
585
+ case "Imágenes0,,":
586
+ setIcon(imagesSent);
587
+ break;
588
+ default:
589
+ break;
590
+ }
591
+ };
592
+
593
+ const createComment = async (e, body, tab) => {
594
+ let concept = "";
595
+ switch (activeTab) {
596
+ case "Ficha técnica":
597
+ concept = "datasheet";
598
+ break;
599
+ case "Imágenes":
600
+ concept = "images";
601
+ break;
602
+
603
+ default:
604
+ concept = "description";
605
+ break;
606
+ }
607
+ const data = {
608
+ articleId: product?.id_article,
609
+ orderId: product?.orderId,
610
+ message: body,
611
+ concept: concept,
612
+ version: version,
613
+ };
614
+ await axios.post(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
615
+ headers: {
616
+ Authorization: token,
617
+ },
618
+ });
619
+ };
620
+
621
+ useEffect(() => {
622
+ setComment(comments[activeTab]);
623
+ }, [activeTab]);
624
+
625
+ const commentRevised = async () => {
626
+ const data = {
627
+ commentId: comment.id,
628
+ };
629
+ await axios.put(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
630
+ headers: {
631
+ Authorization: token,
632
+ },
633
+ });
634
+ setCrossComment(false);
635
+ };
636
+
637
+ const setAssignation = async (assignationType, assignationId) => {
638
+ let concept = "";
639
+ switch (activeTab) {
640
+ case "Ficha técnica":
641
+ concept = "datasheet";
642
+ break;
643
+ case "Imágenes":
644
+ concept = "images";
645
+ break;
646
+
647
+ default:
648
+ concept = "description";
649
+ break;
650
+ }
651
+ const productTemp = product;
652
+ productTemp.article[`id_${concept}_${assignationType}`] = assignationId;
653
+ const data = {
654
+ articleList: [
655
+ {
656
+ orderId: product.orderId,
657
+ articleId: product?.id_article,
658
+ },
659
+ ],
660
+ concept: concept,
661
+ [`${assignationType}Id`]: assignationId,
662
+ };
663
+ axios({
664
+ method: "post",
665
+ url: process.env.REACT_APP_ASSIGNATIONS_ENDPOINT,
666
+ data: data,
667
+ headers: {
668
+ Authorization: token,
669
+ },
670
+ });
671
+ loadAssignations(productTemp);
672
+ sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
673
+ };
674
+
675
+ const evaluationComplete = (tab) => {
676
+ const concept = getConcept(tab);
677
+ let serv = servicesData.filter((item) => item.service === concept);
678
+ if (
679
+ ["RequestWithContentoh", "RequestWithoutContentoh"].includes(origin[tab])
680
+ ) {
681
+ serv = serv.filter((f) => f.id_retailer === activeRetailer.id);
682
+ }
683
+ const statusArray =
684
+ user.is_retailer === 1 ? ["AC", "RC"] : ["AP", "RP", "AC"];
685
+ return (
686
+ serv.length > 0 && serv.every((item) => statusArray.includes(item.status))
687
+ );
688
+ };
689
+
690
+ const downloadImages = () => {
691
+ selectedImages.length > 0
692
+ ? selectedImages.forEach((e) => {
693
+ if (e.id) {
694
+ saveAs(
695
+ `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
696
+ `${product.upc || product.article.upc}_${e.name}.${e.ext}`
697
+ );
698
+ }
699
+ })
700
+ : images?.values?.forEach((e) => {
701
+ if (e.id) {
702
+ saveAs(
703
+ `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
704
+ `${product.upc || product.article.upc}_${e.name}.${e.ext}`
705
+ );
706
+ }
707
+ });
708
+ };
709
+
710
+ const deleteImages = () => {
711
+ setLoading(true);
712
+ const { values } = images;
713
+ const imgsInBack = [];
714
+
715
+ selectedImages.forEach((selectedImg) => {
716
+ if (selectedImg.id) imgsInBack.push(selectedImg);
717
+ });
718
+
719
+ const imgsLeft = values.filter(
720
+ (value) => selectedImages.indexOf(value) === -1
721
+ );
722
+
723
+ if (imgsInBack.length > 0) {
724
+ const data = {
725
+ articleId: product?.id_article || product?.article?.id_article,
726
+ deleteImages: imgsInBack,
727
+ };
728
+ try {
729
+ axios.put(
730
+ `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
731
+ data,
732
+ {
733
+ headers: { Authorization: token },
734
+ }
735
+ );
736
+ } catch (err) {
737
+ console.log(err);
738
+ }
739
+ }
740
+
741
+ setImages({
742
+ action: "deleteImage",
743
+ selectedImages,
744
+ });
745
+
746
+ setTimeout(() => {
747
+ setLoading(false);
748
+ }, 500);
749
+
750
+ setMessage("");
751
+ setComponentsArray([]);
752
+ };
753
+
754
+ const askToDeleteImages = () => {
755
+ if (selectedImages.length > 0) {
756
+ setMessage("¿Está seguro de eliminar las imágenes seleccionadas?");
757
+ setComponentsArray([
758
+ <ScreenHeader
759
+ key={"1"}
760
+ text={"¿Está seguro de eliminar las imágenes seleccionadas?"}
761
+ headerType="retailer-name-header"
762
+ color={"white"}
763
+ />,
764
+ <Button
765
+ key={"2"}
766
+ buttonType="general-white-button"
767
+ label={"Cancelar"}
768
+ onClick={() => setMessage("")}
769
+ />,
770
+ <Button
771
+ key={"3"}
772
+ buttonType="general-button-default"
773
+ label={"Aceptar"}
774
+ onClick={() => {
775
+ setMessage("");
776
+ deleteImages();
777
+ }}
778
+ />,
779
+ ]);
780
+ }
781
+ };
782
+
783
+ const confirmStatusComplete = () => {
784
+ const { datasheet_status, description_status, images_status } = product;
785
+ const completionStates =
786
+ user.is_retailer === 1
787
+ ? ["AC", "Evaluated", "NS"]
788
+ : ["AP", "Evaluated", "NS"];
789
+ const dsEvaluated = completionStates.includes(datasheet_status);
790
+ const descsEvaluated = completionStates.includes(description_status);
791
+ const imgsEvaluated = completionStates.includes(images_status);
792
+
793
+ const AllEvaluated = dsEvaluated && descsEvaluated && imgsEvaluated;
794
+
795
+ return AllEvaluated;
796
+ };
797
+
798
+ const sendEvaluation = async (result) => {
799
+ setLoading(true);
800
+ let data = {};
801
+ const retailerId = activeRetailer?.id;
802
+ if (result) {
803
+ data = {
804
+ articleId: product.id_article,
805
+ orderId: product.id_order ?? product.orderId,
806
+ concept: getConcept(activeTab),
807
+ result: result,
808
+ retailerId,
809
+ };
810
+ await axios.put(`${process.env.REACT_APP_EVALUATION_ENDPOINT}`, data, {
811
+ headers: {
812
+ Authorization: token,
813
+ },
814
+ });
815
+ } else {
816
+ const productTemp = product;
817
+ const concept = getConcept(activeTab);
818
+ productTemp[`${concept}_status`] = "Evaluated";
819
+ data = {
820
+ articleId: product.id_article,
821
+ orderId: product.id_order ?? product.orderId,
822
+ concept,
823
+ };
824
+ axios.put(`${process.env.REACT_APP_SEND_EVAL}`, data, {
825
+ headers: {
826
+ Authorization: token,
827
+ },
828
+ });
829
+ setProduct(productTemp);
830
+ sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
831
+ setProductEdit({
832
+ ArticleId: productTemp.id_article,
833
+ idCategory: productTemp.article.id_category,
834
+ product: productTemp,
835
+ });
836
+ sessionStorage.setItem(
837
+ "productEdit",
838
+ JSON.stringify({
839
+ ArticleId: productTemp.id_article,
840
+ idCategory: productTemp.article.id_category,
841
+ product: productTemp,
842
+ })
843
+ );
844
+ setOrigin((prev) => ({ ...prev, [concept]: "Evaluated" }));
845
+ }
846
+ loadData();
847
+ showSurvey && showSurvey(confirmStatusComplete());
848
+ };
849
+
850
+ const validateAll = async (result) => {
851
+ try {
852
+ setLoading(true);
853
+ const evaluationArray = [];
854
+ const sendAll = [];
855
+ const conceptArray = ["description", "datasheet", "images"];
856
+
857
+ servicesData?.forEach((ret) => {
858
+ let data = {
859
+ articleId: product.id_article,
860
+ orderId: product.id_order ?? product.orderId,
861
+ concept: ret.service,
862
+ result: result,
863
+ retailerId: ret.id_retailer,
864
+ };
865
+ evaluationArray.push(
866
+ axios.put(`${process.env.REACT_APP_EVALUATION_ENDPOINT}`, data, {
867
+ headers: {
868
+ Authorization: token,
869
+ },
870
+ })
871
+ );
872
+ });
873
+
874
+ await Promise.all(evaluationArray);
875
+
876
+ conceptArray?.forEach((concept) => {
877
+ let data = {
878
+ articleId: product.id_article,
879
+ orderId: product.id_order ?? product.orderId,
880
+ concept,
881
+ };
882
+ sendAll.push(
883
+ axios.put(`${process.env.REACT_APP_SEND_EVAL}`, data, {
884
+ headers: {
885
+ Authorization: token,
886
+ },
887
+ })
888
+ );
889
+ });
890
+
891
+ await Promise.all(sendAll);
892
+ const productTemp = product;
893
+ productTemp.article_status = `${result}C`;
894
+ productTemp.datasheet_status =
895
+ productTemp.datasheet_status === "NA" ? "NA" : `${result}C`;
896
+ productTemp.description_status =
897
+ productTemp.description_status === "NA" ? "NA" : `${result}C`;
898
+ productTemp.images_status =
899
+ productTemp.images_status === "NA" ? "NA" : `${result}C`;
900
+ setProduct(productTemp);
901
+ sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
902
+ setProductEdit({
903
+ ArticleId: productTemp.id_article,
904
+ idCategory: productTemp.article.id_category,
905
+ product: productTemp,
906
+ });
907
+ sessionStorage.setItem(
908
+ "productEdit",
909
+ JSON.stringify({
910
+ ArticleId: productTemp.id_article,
911
+ idCategory: productTemp.article.id_category,
912
+ product: productTemp,
913
+ })
914
+ );
915
+
916
+ loadData();
917
+ } catch (error) {
918
+ console.log(error);
919
+ }
920
+ };
921
+
922
+ const evaluationToRetailer = async (result) => {
923
+ const data = {
924
+ articleId: product.id_article,
925
+ companyId: user.is_retailer
926
+ ? product.provider_company_id
927
+ : product.retailer_company_id,
928
+ versionId: product.version,
929
+ status: result,
930
+ };
931
+ await axios.put(`${process.env.REACT_APP_RETAILER_REQUEST}`, data, {
932
+ headers: {
933
+ Authorization: token,
934
+ },
935
+ });
936
+ const prod = productEdit;
937
+ const statusComplete = user.is_retailer ? `${result}C` : `${result}P`;
938
+ prod.product.datasheet_status = statusComplete;
939
+ prod.product.description_status = statusComplete;
940
+ prod.product.images_status = statusComplete;
941
+ prod.product.article_status = statusComplete;
942
+ prod.product.services_status = `["${statusComplete}","${statusComplete}","${statusComplete}"]`;
943
+ sessionStorage.setItem("productEdit", JSON.stringify(prod));
944
+ setProduct(prod);
945
+ setShowGenericModal && setShowGenericModal(false);
946
+ loadData();
947
+ };
948
+
949
+ const getSectionStatus = () => {
950
+ const concept = getConcept(activeTab);
951
+ return ["AA", "AP", "RECEIVED", "IN_PROGRESS", "RC"].includes(
952
+ productEdit.product[`${concept}_status`]
953
+ );
954
+ };
955
+
956
+ const enableActions = (versionStatus) => {
957
+ try {
958
+ const userIsRetailer = user.is_retailer;
959
+
960
+ if (userIsRetailer) return false;
961
+
962
+ if (versionStatus) {
963
+ return ["AP", "AC", "RC", null].includes(versionStatus);
964
+ }
965
+ return true;
966
+ } catch (err) {
967
+ console.log(err, "Unable de check if user is retailer");
968
+ return false;
969
+ }
970
+ };
971
+
972
+ useEffect(() => {
973
+ setSaving(loading);
974
+ }, [loading]);
975
+
976
+ return (
977
+ <Container headerTop={headerTop}>
978
+ <HeaderTop setHeaderTop={setHeaderTop} />
979
+ <div className="data-container">
980
+ <div className="image-data-panel">
981
+ <ImagePreviewer
982
+ activeImage={images?.values ? images?.values[activeImage] : {}}
983
+ imagesArray={images}
984
+ setActiveImage={setActiveImage}
985
+ setShowModal={setShowModal}
986
+ />
987
+ <ImageDataTable
988
+ lists={images}
989
+ activeImage={images?.values ? images?.values[activeImage] : {}}
990
+ retailerSelected={activeRetailer?.id}
991
+ setImages={setImages}
992
+ assignationsImages={assig}
993
+ imagesStatus={product?.images_status}
994
+ setAssignation={setAssignation}
995
+ isRetailer={isRetailer}
996
+ onClickSave={() =>
997
+ product?.services?.images === 1 && updateImages()
998
+ }
999
+ />
1000
+ </div>
1001
+ <div className="product-information">
1002
+ <FullProductNameHeader
1003
+ headerData={product}
1004
+ percent={activePercentage}
1005
+ activeRetailer={activeRetailer}
1006
+ setActiveRetailer={setActiveRetailer}
1007
+ showValidationButtons={isRevision() && getSectionStatus()}
1008
+ servicesData={servicesData ? servicesData : null}
1009
+ showApproveRejectAll={isRevision() && getSectionStatus()}
1010
+ approveAll={() => {
1011
+ if (
1012
+ originProp === "RequestWithoutContentoh" &&
1013
+ !user.is_retailer &&
1014
+ (!product.id_order || !product.orderId)
1015
+ ) {
1016
+ setDataGenericModal((prev) => ({
1017
+ ...prev,
1018
+ button2: {
1019
+ name: "Continuar",
1020
+ action: () => evaluationToRetailer("A"),
1021
+ },
1022
+ }));
1023
+ setShowGenericModal(true);
1024
+ } else {
1025
+ if (user.is_retailer) {
1026
+ if (product.id_order || product.orderId) {
1027
+ validateAll("A");
1028
+ } else {
1029
+ setDataGenericModal((prev) => ({
1030
+ ...prev,
1031
+ button2: {
1032
+ name: "Continuar",
1033
+ action: () => evaluationToRetailer("A"),
1034
+ },
1035
+ }));
1036
+ setShowGenericModal(true);
1037
+ }
1038
+ } else {
1039
+ validateAll("A");
1040
+ }
1041
+ }
1042
+ }}
1043
+ rejectAll={() => {
1044
+ if (
1045
+ originProp === "RequestWithoutContentoh" &&
1046
+ !user.is_retailer &&
1047
+ (!product.id_order || !product.orderId)
1048
+ ) {
1049
+ return;
1050
+ } else {
1051
+ if (user.is_retailer) {
1052
+ if (product.id_order || product.orderId) {
1053
+ validateAll("R");
1054
+ setModalViewError(true);
1055
+ } else {
1056
+ setDataGenericModal((prev) => ({
1057
+ ...prev,
1058
+ button2: {
1059
+ name: "Continuar",
1060
+ action: () => evaluationToRetailer("R"),
1061
+ },
1062
+ }));
1063
+ setShowGenericModal(true);
1064
+ }
1065
+ } else {
1066
+ validateAll("R");
1067
+ setModalViewError(true);
1068
+ }
1069
+ }
1070
+ }}
1071
+ approve={() => {
1072
+ if (
1073
+ origin[activeTab] === "RequestWithoutContentoh" &&
1074
+ !user.is_retailer &&
1075
+ (!product.id_order || !product.orderId)
1076
+ ) {
1077
+ setDataGenericModal((prev) => ({
1078
+ ...prev,
1079
+ button2: {
1080
+ name: "Continuar",
1081
+ action: () => evaluationToRetailer("A"),
1082
+ },
1083
+ }));
1084
+ setShowGenericModal(true);
1085
+ } else {
1086
+ if (user.is_retailer) {
1087
+ if (product.id_order || product.orderId) {
1088
+ sendEvaluation("A");
1089
+ } else {
1090
+ setDataGenericModal((prev) => ({
1091
+ ...prev,
1092
+ button2: {
1093
+ name: "Continuar",
1094
+ action: () => evaluationToRetailer("A"),
1095
+ },
1096
+ }));
1097
+ setShowGenericModal(true);
1098
+ }
1099
+ } else {
1100
+ sendEvaluation("A");
1101
+ }
1102
+ }
1103
+ }}
1104
+ reject={() => {
1105
+ if (
1106
+ origin[activeTab] === "RequestWithoutContentoh" &&
1107
+ !user.is_retailer &&
1108
+ (!product.id_order || !product.orderId)
1109
+ ) {
1110
+ return;
1111
+ } else {
1112
+ if (user.is_retailer) {
1113
+ if (product.id_order || product.orderId) {
1114
+ sendEvaluation("R");
1115
+ setModalViewError(true);
1116
+ } else {
1117
+ setDataGenericModal((prev) => ({
1118
+ ...prev,
1119
+ button2: {
1120
+ name: "Continuar",
1121
+ action: () => evaluationToRetailer("R"),
1122
+ },
1123
+ }));
1124
+ setShowGenericModal(true);
1125
+ }
1126
+ } else {
1127
+ sendEvaluation("R");
1128
+ setModalViewError(true);
1129
+ }
1130
+ }
1131
+ }}
1132
+ />
1133
+ <FullTabsMenu
1134
+ tabsSections={tabsSections}
1135
+ status={
1136
+ product[`${getConcept(activeTab)}_status`] ||
1137
+ product?.version_status
1138
+ }
1139
+ activeTab={activeTab}
1140
+ setActiveTab={setActiveTab}
1141
+ setImageLayout={setImageLayout}
1142
+ downloadImages={downloadImages}
1143
+ askToDeleteImages={askToDeleteImages}
1144
+ assig={assig}
1145
+ setAssignation={setAssignation}
1146
+ isRetailer={isRetailer}
1147
+ showSaveButton={enableActions(product.version_status)}
1148
+ onClickSave={() => {
1149
+ switch (activeTab) {
1150
+ case "Descripción":
1151
+ !saving && saveDescriptions();
1152
+ break;
1153
+ case "Ficha técnica":
1154
+ !saving && saveDatasheets();
1155
+ break;
1156
+ case "Imágenes":
1157
+ !saving && updateImages();
1158
+ break;
1159
+ default:
1160
+ break;
1161
+ }
1162
+ }}
1163
+ />
1164
+ <div
1165
+ className={
1166
+ "services-information-container " +
1167
+ (imageLayout && activeTab === "Imágenes" ? "image-services" : "")
1168
+ }
1169
+ >
1170
+ {loading ? (
1171
+ <Loading />
1172
+ ) : (
1173
+ <>
1174
+ {!imageLayout && activeTab === "Imágenes" && (
1175
+ <GalleryHeader
1176
+ setSelectedImages={setSelectedImages}
1177
+ checkAll={checkAll}
1178
+ setCheckAll={setCheckAll}
1179
+ />
1180
+ )}
1181
+ {activeTab === "Ficha técnica" &&
1182
+ (product?.datasheet_status !== "NS" ? (
1183
+ datasheets[0]?.data?.map((dataGroup, index) => (
1184
+ <InputGroup
1185
+ key={index + "-" + activeRetailer.name}
1186
+ articleId={product.id_article}
1187
+ version={version}
1188
+ activeSection={activeTab}
1189
+ inputGroup={dataGroup}
1190
+ dataInputs={datasheets[1]}
1191
+ updatedDatasheets={updatedDatasheets}
1192
+ setUpdatedDatasheets={setUpdatedDatasheets}
1193
+ //enableActions={enableActions(product.version_status)} ADD THIS VALIDATION
1194
+ />
1195
+ ))
1196
+ ) : (
1197
+ <ScreenHeader
1198
+ text={"No cuentas con este servicio"}
1199
+ headerType={"input-name-header"}
1200
+ />
1201
+ ))}
1202
+ {activeTab === "Descripción" &&
1203
+ (product?.description_status !== "NS" ? (
1204
+ <InputGroup
1205
+ activeSection={activeTab}
1206
+ inputGroup={descriptions[0]}
1207
+ updatedDescriptions={updatedDescriptions}
1208
+ setUpdatedDescriptions={setUpdatedDescriptions}
1209
+ articleId={product?.id_article}
1210
+ version={version}
1211
+ dinamicHeight={true}
1212
+ />
1213
+ ) : (
1214
+ <ScreenHeader
1215
+ text={"No cuentas con este servicio"}
1216
+ headerType={"input-name-header"}
1217
+ />
1218
+ ))}
1219
+
1220
+ {activeTab === "Imágenes" &&
1221
+ (product?.images_status !== "NS" ? (
1222
+ <section className="container">
1223
+ <div {...getRootProps({ className: "dropzone" })}>
1224
+ <input {...getInputProps()} />
1225
+ <aside>{thumbs()}</aside>
1226
+ </div>
1227
+ </section>
1228
+ ) : (
1229
+ <ScreenHeader
1230
+ text={"No cuentas con este servicio"}
1231
+ headerType={"input-name-header"}
1232
+ />
1233
+ ))}
1234
+ </>
1235
+ )}
1236
+ </div>
1237
+ {isRevision() && getSectionStatus() ? (
1238
+ <div className="commentary-box">
1239
+ {!comment ? (
1240
+ <div className="commentary">
1241
+ <TagAndInput
1242
+ label={"Caja de Comentario"}
1243
+ inputType={"textarea"}
1244
+ inputCols={80}
1245
+ inputRows={4}
1246
+ inputId={"commentary-box"}
1247
+ index={0}
1248
+ />
1249
+ <div className="buttons-box">
1250
+ <Button
1251
+ buttonType={"general-transparent-button"}
1252
+ label={"Enviar comentario"}
1253
+ onClick={(e) =>
1254
+ createComment(
1255
+ e,
1256
+ document.querySelector(
1257
+ "#description-commentary-box-0 .ql-container .ql-editor > p"
1258
+ ).innerHTML,
1259
+ activeTab
1260
+ )
1261
+ }
1262
+ />
1263
+ </div>
1264
+ </div>
1265
+ ) : (
1266
+ <div className="feedback-box">
1267
+ <Commentary
1268
+ comment={comment.message}
1269
+ reviewed={crossComment}
1270
+ />
1271
+ <Button
1272
+ buttonType={"circular-button accept-button"}
1273
+ onClick={async () => {
1274
+ setCrossComment(true);
1275
+ commentRevised();
1276
+ }}
1277
+ />
1278
+ </div>
1279
+ )}
1280
+ <Button
1281
+ buttonType={
1282
+ evaluationComplete(activeTab) &&
1283
+ (productEdit.product.id_order || productEdit.product.orderId)
1284
+ ? "general-green-button"
1285
+ : "general-button-disabled"
1286
+ }
1287
+ label={"Enviar evaluación"}
1288
+ onClick={() => {
1289
+ //setModalSent(true);
1290
+ sendEvaluation();
1291
+ setMessage(`¡Evaluación de ${activeTab} completada!`);
1292
+ }}
1293
+ />
1294
+ </div>
1295
+ ) : revision ? null : (
1296
+ <div className="required-inputs-message">
1297
+ <div>
1298
+ <p>
1299
+ Los atributos son requeridos por las plataformas de las
1300
+ cadenas, es muy importante completar los campos requeridos ya
1301
+ que pueden rechazar el producto por falta de información.
1302
+ </p>
1303
+ </div>
1304
+ {inCart ? (
1305
+ <button type="button">
1306
+ <Link to="/checkout">
1307
+ <p>Articulo en carrito</p>
1308
+ <p>Ir a checkout</p>
1309
+ </Link>
1310
+ </button>
1311
+ ) : (
1312
+ <Button
1313
+ onClick={() => {
1314
+ setShowContentohRequestModal &&
1315
+ setShowContentohRequestModal(true);
1316
+ }}
1317
+ buttonType="general-default-button"
1318
+ label="Enviar a Content-oh!"
1319
+ />
1320
+ )}
1321
+ </div>
1322
+ )}
1323
+ </div>
1324
+ </div>
1325
+ {showModal && (
1326
+ <ProductImageModal images={images} setShowModal={setShowModal} />
1327
+ )}
1328
+ {message.length > 0 && !showSurvey && (
1329
+ <GenericModal
1330
+ buttonType={componentsArray.length > 0 && "delete-product"}
1331
+ componentsArray={
1332
+ componentsArray.length > 0
1333
+ ? componentsArray
1334
+ : [
1335
+ <img key="1" src={succes} alt="success icon" />,
1336
+ <ScreenHeader
1337
+ key="2"
1338
+ headerType={"retailer-name-header"}
1339
+ text={message}
1340
+ color={"white"}
1341
+ />,
1342
+ ]
1343
+ }
1344
+ onClick={() => setMessage("")}
1345
+ />
1346
+ )}
1347
+ {modalSent && (
1348
+ <GlobalModal
1349
+ close={() => setModalSent(false)}
1350
+ message={message}
1351
+ detail={""}
1352
+ bold={!evaluationComplete(activeTab) && "Aprueba / Rechaza"}
1353
+ widthImg={!evaluationComplete(activeTab) ? "160px" : "354px"}
1354
+ heightImg={!evaluationComplete(activeTab) ? "84px" : "354px"}
1355
+ img={getSectionIcon()}
1356
+ />
1357
+ )}
1358
+ {modalViewError && (
1359
+ <GlobalModal
1360
+ close={() => setModalViewError(false)}
1361
+ message={`${activeTab} rechazada`}
1362
+ detail={"Agrega tu comentarios para enviar el rechazo"}
1363
+ button1={{
1364
+ name: "Enviar",
1365
+ action: (e) => {
1366
+ createComment(e, document.querySelector("#area").value);
1367
+ setModalViewError(false);
1368
+ setModalViewTextArea(true);
1369
+ },
1370
+ }}
1371
+ img={errorModal}
1372
+ textArea={true}
1373
+ />
1374
+ )}
1375
+ {showGenericModal && (
1376
+ <GlobalModal
1377
+ close={() => setShowGenericModal(false)}
1378
+ message={dataGenericModal.message}
1379
+ detail={dataGenericModal.detail}
1380
+ button1={dataGenericModal.button1}
1381
+ button2={dataGenericModal.button2}
1382
+ img={dataGenericModal.img}
1383
+ />
1384
+ )}
1385
+ {modalViewTextArea && (
1386
+ <GlobalModal
1387
+ close={() => setModalViewTextArea(false)}
1388
+ message={`Gracias, tus comentarios fueron entregados.`}
1389
+ detail={"Trabajaremos en conjunto para resolverlo."}
1390
+ button1={{
1391
+ name: "Cerrar",
1392
+ action: () => setModalViewTextArea(false),
1393
+ }}
1394
+ img={face}
1395
+ textArea={false}
1396
+ />
1397
+ )}
1398
+ </Container>
1399
+ );
1400
+ };