contentoh-components-library 19.0.0 → 20.0.18

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 (309) hide show
  1. package/.env.development +3 -18
  2. package/.env.production +1 -16
  3. package/CHANGELOG.md +3 -31
  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/components/atoms/ActivedFilter/ActivedFilter.stories.js +1 -7
  8. package/dist/components/atoms/ActivedFilter/index.js +4 -12
  9. package/dist/components/atoms/AsignationOption/AsignationOptions.stories.js +1 -7
  10. package/dist/components/atoms/AsignationOption/index.js +21 -33
  11. package/dist/components/atoms/AsignationOption/styles.js +1 -1
  12. package/dist/components/atoms/AtomList/AtomList.stories.js +1 -7
  13. package/dist/components/atoms/AtomList/index.js +9 -14
  14. package/dist/components/atoms/Avatar/AsignationImage.stories.js +1 -7
  15. package/dist/components/atoms/Avatar/index.js +8 -11
  16. package/dist/components/atoms/Card/Card.stories.js +1 -7
  17. package/dist/components/atoms/Card/index.js +4 -8
  18. package/dist/components/atoms/CheckBox/CheckBox.stories.js +1 -7
  19. package/dist/components/atoms/CheckBox/index.js +13 -19
  20. package/dist/components/atoms/CustomerTypeImage/CustomerTypeImage.stories.js +1 -7
  21. package/dist/components/atoms/CustomerTypeImage/index.js +6 -8
  22. package/dist/components/atoms/DropDownButton/DropDownButton.stories.js +1 -7
  23. package/dist/components/atoms/DropDownButton/index.js +6 -9
  24. package/dist/components/atoms/EditField/EditField.stories.js +1 -7
  25. package/dist/components/atoms/EditField/index.js +10 -17
  26. package/dist/components/atoms/FeatureTag/FeatureTag.stories.js +1 -7
  27. package/dist/components/atoms/FeatureTag/index.js +5 -11
  28. package/dist/components/atoms/GeneralButton/GeneralButton.stories.js +1 -7
  29. package/dist/components/atoms/GeneralButton/index.js +6 -13
  30. package/dist/components/atoms/GeneralButton/styles.js +2 -4
  31. package/dist/components/atoms/GeneralInput/GeneralInput.stories.js +1 -7
  32. package/dist/components/atoms/GeneralInput/index.js +35 -59
  33. package/dist/components/atoms/GeneralInput/styles.js +1 -4
  34. package/dist/components/atoms/GeneralTextBox/GeneralTextBox.stories.js +1 -7
  35. package/dist/components/atoms/GeneralTextBox/index.js +7 -12
  36. package/dist/components/atoms/GenericModal/GenericModal.stories.js +59 -46
  37. package/dist/components/atoms/GenericModal/index.js +8 -15
  38. package/dist/components/atoms/GenericModal/styles.js +1 -1
  39. package/dist/components/atoms/GradientPanel/GradientPanel.stories.js +80 -85
  40. package/dist/components/atoms/GradientPanel/index.js +7 -11
  41. package/dist/components/atoms/GradientPanel/styles.js +2 -2
  42. package/dist/components/atoms/Graphic/Graphic.stories.js +1 -7
  43. package/dist/components/atoms/Graphic/index.js +5 -9
  44. package/dist/components/atoms/ListCommercialRetailers/ListCommercialRetailers.stories.js +36 -0
  45. package/dist/components/atoms/ListCommercialRetailers/index.js +64 -0
  46. package/dist/components/atoms/ListCommercialRetailers/styles.js +20 -0
  47. package/dist/components/atoms/LoadImageMenu/LoadImageMenu.stories.js +1 -7
  48. package/dist/components/atoms/LoadImageMenu/index.js +22 -33
  49. package/dist/components/atoms/LogoImage/LogoImage.stories.js +1 -7
  50. package/dist/components/atoms/LogoImage/index.js +6 -8
  51. package/dist/components/atoms/MenuCommercialRetailers/MenuCommercialRetailers.stories.js +37 -0
  52. package/dist/components/atoms/MenuCommercialRetailers/index.js +25 -0
  53. package/dist/components/{molecules/RetailerSelector → atoms/MenuCommercialRetailers}/styles.js +1 -1
  54. package/dist/components/atoms/MenuNotification/MenuNotification.stories.js +1 -7
  55. package/dist/components/atoms/MenuNotification/index.js +15 -21
  56. package/dist/components/atoms/MenuProductImage/MenuProductImage.stories.js +28 -0
  57. package/dist/components/atoms/MenuProductImage/index.js +88 -0
  58. package/dist/components/atoms/MenuProductImage/styles.js +20 -0
  59. package/dist/components/atoms/MenuProfile/MenuProfile.stories.js +1 -7
  60. package/dist/components/atoms/MenuProfile/index.js +15 -25
  61. package/dist/components/atoms/Notification/Notification.stories.js +1 -5
  62. package/dist/components/atoms/Notification/index.js +9 -15
  63. package/dist/components/atoms/PriorityFlag/PriorityFlag.stories.js +1 -7
  64. package/dist/components/atoms/PriorityFlag/index.js +5 -9
  65. package/dist/components/atoms/ProductImage/ProductImage.stories.js +1 -7
  66. package/dist/components/atoms/ProductImage/index.js +8 -11
  67. package/dist/components/atoms/ProductImage/styles.js +1 -1
  68. package/dist/components/atoms/ProductPercentCard/Percent.stories.js +1 -7
  69. package/dist/components/atoms/ProductPercentCard/index.js +14 -21
  70. package/dist/components/atoms/ProgressBar/ProgressBar.stories.js +1 -7
  71. package/dist/components/atoms/ProgressBar/index.js +4 -9
  72. package/dist/components/atoms/ProgressBar/styles.js +5 -3
  73. package/dist/components/atoms/ScreenHeader/ScreenHeader.stories.js +1 -7
  74. package/dist/components/atoms/ScreenHeader/index.js +3 -9
  75. package/dist/components/atoms/SideMenuButton/SideMenuButton.stories.js +1 -5
  76. package/dist/components/atoms/SideMenuButton/index.js +4 -10
  77. package/dist/components/atoms/StatusTag/StatusTag.stories.js +1 -7
  78. package/dist/components/atoms/StatusTag/index.js +3 -8
  79. package/dist/components/atoms/StatusTag/styles.js +1 -1
  80. package/dist/components/atoms/TabSection/TabSection.stories.js +1 -7
  81. package/dist/components/atoms/TabSection/index.js +3 -8
  82. package/dist/components/atoms/ValidationPanel/ValidationPanel.stories.js +1 -7
  83. package/dist/components/atoms/ValidationPanel/index.js +28 -41
  84. package/dist/components/atoms/VerticalSideMenuMainPage/VerticalSideMenuMainPage.stories.js +22 -0
  85. package/dist/components/atoms/VerticalSideMenuMainPage/index.js +49 -0
  86. package/dist/components/atoms/{Commentary → VerticalSideMenuMainPage}/styles.js +1 -6
  87. package/dist/components/molecules/AddProvidersAndProducts/AddProvidersAndProducts.stories.js +1 -5
  88. package/dist/components/molecules/AddProvidersAndProducts/index.js +12 -18
  89. package/dist/components/molecules/ApproveRejetPanel/ApproveRejetPanel.stories.js +25 -0
  90. package/dist/components/molecules/ApproveRejetPanel/index.js +49 -0
  91. package/dist/components/molecules/ApproveRejetPanel/styles.js +18 -0
  92. package/dist/components/molecules/AssignedWork/AssignedWork.stories.js +1 -5
  93. package/dist/components/molecules/AssignedWork/index.js +30 -36
  94. package/dist/components/molecules/AvatarAndValidation/AvatarAndValidation.stories.js +1 -7
  95. package/dist/components/molecules/AvatarAndValidation/index.js +17 -32
  96. package/dist/components/molecules/AvatarAndValidation/styles.js +1 -1
  97. package/dist/components/molecules/CarouselImagesLogin/CarouselImagesLogin.stories.js +33 -0
  98. package/dist/components/molecules/CarouselImagesLogin/index.js +90 -0
  99. package/dist/components/molecules/CarouselImagesLogin/styles.js +21 -0
  100. package/dist/components/molecules/EditionActiveImage/EditionActiveImage.stories.js +1 -7
  101. package/dist/components/molecules/EditionActiveImage/index.js +10 -14
  102. package/dist/components/molecules/FeaturesBar/FeaturesBar.stories.js +1 -7
  103. package/dist/components/molecules/FeaturesBar/index.js +9 -11
  104. package/dist/components/molecules/GalleryElement/GalleryElement.stories.js +1 -7
  105. package/dist/components/molecules/GalleryElement/index.js +32 -99
  106. package/dist/components/molecules/GalleryElement/styles.js +1 -1
  107. package/dist/components/molecules/GalleryHeader/GalleryHeader.stories.js +1 -7
  108. package/dist/components/molecules/GalleryHeader/index.js +6 -46
  109. package/dist/components/molecules/GalleryHeader/styles.js +1 -1
  110. package/dist/components/molecules/HeaderTop/HeaderTop.stories.js +1 -7
  111. package/dist/components/molecules/HeaderTop/index.js +7 -10
  112. package/dist/components/molecules/ImageSelector/ImageSelector.stories.js +1 -7
  113. package/dist/components/molecules/ImageSelector/index.js +14 -14
  114. package/dist/components/molecules/LoginPasswordStrength/LoginPasswordStrength.stories.js +22 -0
  115. package/dist/components/molecules/LoginPasswordStrength/index.js +109 -0
  116. package/dist/components/molecules/LoginPasswordStrength/styles.js +78 -0
  117. package/dist/components/molecules/ParentComponent/ParentComponent.stories.js +2 -10
  118. package/dist/components/molecules/ParentComponent/index.js +5 -9
  119. package/dist/components/molecules/PayMethod/PayMethod.stories.js +1 -7
  120. package/dist/components/molecules/PayMethod/index.js +33 -38
  121. package/dist/components/molecules/PlanSelection/PlanSelection.stories.js +1 -7
  122. package/dist/components/molecules/PlanSelection/index.js +11 -14
  123. package/dist/components/molecules/ProductNameHeader/ProductNameHeader.stories.js +1 -7
  124. package/dist/components/molecules/ProductNameHeader/index.js +15 -18
  125. package/dist/components/molecules/ProductNotification/ProductNotification.stories.js +1 -7
  126. package/dist/components/molecules/ProductNotification/index.js +9 -12
  127. package/dist/components/molecules/ProfileHeader/ProfileHeader.stories.js +1 -5
  128. package/dist/components/molecules/ProfileHeader/index.js +15 -21
  129. package/dist/components/molecules/SidebarNotification/SidebarNotification.stories.js +1 -5
  130. package/dist/components/molecules/SidebarNotification/index.js +37 -43
  131. package/dist/components/molecules/StatusAsignationInfo/StatusAsignationInfo.stories.js +1 -7
  132. package/dist/components/molecules/StatusAsignationInfo/index.js +76 -113
  133. package/dist/components/molecules/StatusAsignationInfo/styles.js +1 -1
  134. package/dist/components/molecules/TableHeader/TableHeader.stories.js +1 -7
  135. package/dist/components/molecules/TableHeader/index.js +10 -21
  136. package/dist/components/molecules/TableRow/TableRow.stories.js +1 -7
  137. package/dist/components/molecules/TableRow/index.js +7 -11
  138. package/dist/components/molecules/TabsMenu/TabsMenu.stories.js +1 -7
  139. package/dist/components/molecules/TabsMenu/index.js +10 -13
  140. package/dist/components/molecules/TagAndInput/TagAndInput.stories.js +1 -7
  141. package/dist/components/molecules/TagAndInput/index.js +12 -36
  142. package/dist/components/organisms/FullProductNameHeader/FullProductNameHeader.stories.js +1 -7
  143. package/dist/components/organisms/FullProductNameHeader/index.js +16 -45
  144. package/dist/components/organisms/FullTabsMenu/FullTabsMenu.stories.js +1 -7
  145. package/dist/components/organisms/FullTabsMenu/index.js +13 -30
  146. package/dist/components/organisms/Fullplan/FullPlan.stories.js +1 -7
  147. package/dist/components/organisms/Fullplan/index.js +15 -23
  148. package/dist/components/organisms/ImageDataTable/ImageDataTable.stories.js +1 -7
  149. package/dist/components/organisms/ImageDataTable/index.js +18 -96
  150. package/dist/components/organisms/ImagePreviewer/ImagePreviewer.stories.js +1 -7
  151. package/dist/components/organisms/ImagePreviewer/index.js +8 -12
  152. package/dist/components/organisms/ImagesGroup/index.js +1 -5
  153. package/dist/components/organisms/InputGroup/InputGroup.stories.js +1 -7
  154. package/dist/components/organisms/InputGroup/index.js +26 -47
  155. package/dist/components/organisms/InputGroup/styles.js +1 -1
  156. package/dist/components/organisms/ProductImageModal/ProductImageModal.stories.js +1 -7
  157. package/dist/components/organisms/ProductImageModal/index.js +41 -55
  158. package/dist/components/organisms/ProductImageModal/styles.js +1 -1
  159. package/dist/components/pages/ChangePasswordLogin/ChangePasswordLogin.stories.js +34 -0
  160. package/dist/components/pages/ChangePasswordLogin/index.js +128 -0
  161. package/dist/components/pages/ChangePasswordLogin/styles.js +18 -0
  162. package/dist/components/pages/CustomerLogin/CustomerLogin.stories.js +47 -52
  163. package/dist/components/pages/CustomerLogin/index.js +12 -18
  164. package/dist/components/pages/CustomerPayMethod/CustomerPayMethod.stories.js +28 -36
  165. package/dist/components/pages/CustomerPayMethod/index.js +12 -18
  166. package/dist/components/pages/CustomerType/CustomerType.stories.js +22 -21
  167. package/dist/components/pages/CustomerType/index.js +12 -18
  168. package/dist/components/pages/EmailResetPassword/EmailResetPassword.stories.js +33 -0
  169. package/dist/components/pages/EmailResetPassword/index.js +120 -0
  170. package/dist/components/pages/EmailResetPassword/styles.js +20 -0
  171. package/dist/components/pages/OnboardPlan/OnboardPlan.stories.js +9 -12
  172. package/dist/components/pages/OnboardPlan/index.js +12 -18
  173. package/dist/components/pages/RegistrationLoginFirstStep/RegistrationLoginFirstStep.stories.js +33 -0
  174. package/dist/components/pages/RegistrationLoginFirstStep/index.js +218 -0
  175. package/dist/components/pages/RegistrationLoginFirstStep/styles.js +20 -0
  176. package/dist/components/pages/RegistrationLoginSecondStep/RegistrationLoginSecondStep.stories.js +34 -0
  177. package/dist/components/pages/RegistrationLoginSecondStep/index.js +165 -0
  178. package/dist/components/pages/RegistrationLoginSecondStep/styles.js +20 -0
  179. package/dist/components/pages/RegistrationLoginThirdStep/RegistrationLoginThirdStep.stories.js +33 -0
  180. package/dist/components/pages/RegistrationLoginThirdStep/index.js +164 -0
  181. package/dist/components/pages/RegistrationLoginThirdStep/styles.js +20 -0
  182. package/dist/components/pages/RetailerPlan/RetailerPlan.stories.js +10 -13
  183. package/dist/components/pages/RetailerPlan/index.js +12 -18
  184. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +311 -98
  185. package/dist/components/pages/RetailerProductEdition/index.js +80 -1516
  186. package/dist/components/pages/RetailerProductEdition/styles.js +1 -1
  187. package/dist/components/pages/VerificationCodeResetPassword/VerificationCodeResetPassword.stories.js +33 -0
  188. package/dist/components/pages/VerificationCodeResetPassword/index.js +110 -0
  189. package/dist/components/pages/VerificationCodeResetPassword/styles.js +20 -0
  190. package/dist/components/pages/VerificationCodeResetPassword/utils.js +69 -0
  191. package/dist/global-files/data.js +53 -190
  192. package/dist/global-files/global-styles.css +0 -1
  193. package/dist/global-files/variables.js +0 -1
  194. package/package.json +7 -20
  195. package/src/assets/images/carouselImagesLogin/login2.svg +117 -0
  196. package/src/assets/images/carouselImagesLogin/login3.svg +147 -0
  197. package/src/assets/images/carouselImagesLogin/loginImage.svg +301 -0
  198. package/src/components/atoms/AsignationOption/index.js +5 -7
  199. package/src/components/atoms/AsignationOption/styles.js +1 -9
  200. package/src/components/atoms/CheckBox/index.js +2 -8
  201. package/src/components/atoms/GeneralButton/index.js +2 -9
  202. package/src/components/atoms/GeneralButton/styles.js +0 -23
  203. package/src/components/atoms/GeneralInput/index.js +30 -56
  204. package/src/components/atoms/GeneralInput/styles.js +1 -2
  205. package/src/components/atoms/GenericModal/index.js +2 -2
  206. package/src/components/atoms/GenericModal/styles.js +0 -3
  207. package/src/components/atoms/GradientPanel/styles.js +7 -1
  208. package/src/components/atoms/PriorityFlag/index.js +1 -1
  209. package/src/components/atoms/ProductImage/styles.js +1 -1
  210. package/src/components/atoms/ProgressBar/index.js +2 -2
  211. package/src/components/atoms/ProgressBar/styles.js +3 -53
  212. package/src/components/atoms/StatusTag/styles.js +1 -9
  213. package/src/components/atoms/ValidationPanel/index.js +3 -3
  214. package/src/components/molecules/AvatarAndValidation/index.js +6 -24
  215. package/src/components/molecules/AvatarAndValidation/styles.js +1 -1
  216. package/src/components/molecules/CarouselImagesLogin/CarouselImagesLogin.stories.js +17 -0
  217. package/src/components/molecules/CarouselImagesLogin/index.js +68 -0
  218. package/src/components/molecules/CarouselImagesLogin/styles.js +60 -0
  219. package/src/components/molecules/FeaturesBar/index.js +7 -10
  220. package/src/components/molecules/GalleryElement/index.js +36 -75
  221. package/src/components/molecules/GalleryElement/styles.js +11 -38
  222. package/src/components/molecules/GalleryHeader/index.js +8 -14
  223. package/src/components/molecules/GalleryHeader/styles.js +0 -16
  224. package/src/components/molecules/ImageSelector/index.js +3 -2
  225. package/src/components/molecules/LoginPasswordStrength/LoginPasswordStrength.stories.js +8 -0
  226. package/src/components/molecules/LoginPasswordStrength/index.js +89 -0
  227. package/src/components/molecules/LoginPasswordStrength/styles.js +87 -0
  228. package/src/components/molecules/ProductNameHeader/index.js +2 -1
  229. package/src/components/molecules/StatusAsignationInfo/index.js +38 -62
  230. package/src/components/molecules/StatusAsignationInfo/styles.js +2 -12
  231. package/src/components/molecules/TableHeader/index.js +3 -16
  232. package/src/components/molecules/TagAndInput/index.js +0 -22
  233. package/src/components/organisms/FullProductNameHeader/index.js +7 -28
  234. package/src/components/organisms/FullTabsMenu/index.js +4 -16
  235. package/src/components/organisms/ImageDataTable/index.js +11 -78
  236. package/src/components/organisms/InputGroup/index.js +5 -23
  237. package/src/components/organisms/InputGroup/styles.js +0 -3
  238. package/src/components/organisms/ProductImageModal/index.js +12 -22
  239. package/src/components/organisms/ProductImageModal/styles.js +0 -3
  240. package/src/components/pages/ChangePasswordLogin/ChangePasswordLogin.stories.js +18 -0
  241. package/src/components/pages/ChangePasswordLogin/index.js +78 -0
  242. package/src/components/pages/ChangePasswordLogin/styles.js +20 -0
  243. package/src/components/pages/EmailResetPassword/EmailResetPassword.stories.js +17 -0
  244. package/src/components/pages/EmailResetPassword/index.js +77 -0
  245. package/src/components/pages/EmailResetPassword/styles.js +27 -0
  246. package/src/components/pages/RegistrationLoginFirstStep/RegistrationLoginFirstStep.stories.js +17 -0
  247. package/src/components/pages/RegistrationLoginFirstStep/index.js +160 -0
  248. package/src/components/pages/RegistrationLoginFirstStep/styles.js +85 -0
  249. package/src/components/pages/RegistrationLoginSecondStep/RegistrationLoginSecondStep.stories.js +18 -0
  250. package/src/components/pages/RegistrationLoginSecondStep/index.js +111 -0
  251. package/src/components/pages/RegistrationLoginSecondStep/styles.js +64 -0
  252. package/src/components/pages/RegistrationLoginThirdStep/RegistrationLoginThirdStep.stories.js +17 -0
  253. package/src/components/pages/RegistrationLoginThirdStep/index.js +106 -0
  254. package/src/components/pages/RegistrationLoginThirdStep/styles.js +48 -0
  255. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +315 -96
  256. package/src/components/pages/RetailerProductEdition/index.js +39 -1090
  257. package/src/components/pages/RetailerProductEdition/styles.js +4 -67
  258. package/src/components/pages/VerificationCodeResetPassword/VerificationCodeResetPassword.stories.js +17 -0
  259. package/src/components/pages/VerificationCodeResetPassword/index.js +92 -0
  260. package/src/components/pages/VerificationCodeResetPassword/styles.js +54 -0
  261. package/src/components/pages/VerificationCodeResetPassword/utils.js +56 -0
  262. package/src/global-files/data.js +57 -138
  263. package/src/global-files/global-styles.css +0 -1
  264. package/src/global-files/variables.js +0 -1
  265. package/src/index.js +16 -1
  266. package/dist/assets/images/generalButton/downloadIcon.svg +0 -3
  267. package/dist/assets/images/modalsSVGs/attributesSent.svg +0 -208
  268. package/dist/assets/images/modalsSVGs/descriptionSent.svg +0 -237
  269. package/dist/assets/images/modalsSVGs/providerSent.svg +0 -445
  270. package/dist/assets/images/modalsSVGs/uploadingImages.svg +0 -148
  271. package/dist/components/atoms/Commentary/Commentary.stories.js +0 -1
  272. package/dist/components/atoms/Commentary/index.js +0 -23
  273. package/dist/components/atoms/Input/index.js +0 -26
  274. package/dist/components/atoms/Input/style.js +0 -26
  275. package/dist/components/atoms/InputFormatter/Wysiwyg.stories.js +0 -30
  276. package/dist/components/atoms/InputFormatter/index.js +0 -119
  277. package/dist/components/atoms/InputFormatter/styles.js +0 -33
  278. package/dist/components/atoms/LabelToInput/index.js +0 -54
  279. package/dist/components/atoms/LabelToInput/style.js +0 -22
  280. package/dist/components/atoms/Percent/Percent.stories.js +0 -39
  281. package/dist/components/atoms/Percent/index.js +0 -39
  282. package/dist/components/atoms/Percent/styles.js +0 -20
  283. package/dist/components/atoms/Select/index.js +0 -37
  284. package/dist/components/atoms/Select/style.js +0 -32
  285. package/dist/components/molecules/RetailerSelector/RetailerSelector.stories.js +0 -48
  286. package/dist/components/molecules/RetailerSelector/index.js +0 -74
  287. package/dist/components/molecules/TextAndGradient/TextAndGradient.stories.js +0 -31
  288. package/dist/components/molecules/TextAndGradient/index.js +0 -36
  289. package/dist/components/molecules/TextAndGradient/styles.js +0 -18
  290. package/src/assets/images/generalButton/downloadIcon.svg +0 -3
  291. package/src/assets/images/modalsSVGs/attributesSent.svg +0 -208
  292. package/src/assets/images/modalsSVGs/descriptionSent.svg +0 -237
  293. package/src/assets/images/modalsSVGs/providerSent.svg +0 -445
  294. package/src/assets/images/modalsSVGs/uploadingImages.svg +0 -148
  295. package/src/components/atoms/Commentary/Commentary.stories.js +0 -0
  296. package/src/components/atoms/Commentary/index.js +0 -9
  297. package/src/components/atoms/Commentary/styles.js +0 -16
  298. package/src/components/atoms/Input/index.js +0 -15
  299. package/src/components/atoms/Input/style.js +0 -31
  300. package/src/components/atoms/InputFormatter/Wysiwyg.stories.js +0 -12
  301. package/src/components/atoms/InputFormatter/index.js +0 -76
  302. package/src/components/atoms/InputFormatter/styles.js +0 -34
  303. package/src/components/atoms/LabelToInput/index.js +0 -27
  304. package/src/components/atoms/LabelToInput/style.js +0 -38
  305. package/src/components/atoms/Select/index.js +0 -33
  306. package/src/components/atoms/Select/style.js +0 -77
  307. package/src/components/molecules/RetailerSelector/RetailerSelector.stories.js +0 -35
  308. package/src/components/molecules/RetailerSelector/index.js +0 -63
  309. package/src/components/molecules/RetailerSelector/styles.js +0 -18
@@ -5,1153 +5,102 @@ import { ImageDataTable } from "../../organisms/ImageDataTable";
5
5
  import { FullProductNameHeader } from "../../organisms/FullProductNameHeader";
6
6
  import { FullTabsMenu } from "../../organisms/FullTabsMenu";
7
7
  import { InputGroup } from "../../organisms/InputGroup";
8
- import { useEffect, useReducer, useState, useCallback } from "react";
8
+ import { useEffect, useState } from "react";
9
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";
10
+ import { getRetailerServices, getImage } from "../../../global-files/data";
16
11
  import { GalleryHeader } from "../../molecules/GalleryHeader";
17
12
  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
13
 
31
- const reducerImages = (state, action) => {
32
- let { values, attrForImgs } = state;
33
- switch (action.action) {
34
- case "init":
35
- return action.init;
36
- case "addImg":
37
- values = [...values, action.img];
38
- return { ...state, values };
39
- case "changeImageInfo":
40
- values[action.index][action.attribute] = action.value;
41
- return { ...state, values };
42
- case "changeAttrValue":
43
- attrForImgs[action.retailer][action.index].value = action.value;
44
- return { ...state, attrForImgs, values };
45
- default:
46
- return state;
47
- }
48
- };
49
-
50
- const S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
51
- const REGION = "us-east-1";
52
-
53
- AWS.config.update({
54
- accessKeyId: process.env.REACT_APP_KEY_UPLOAD_TO_S3,
55
- secretAccessKey: process.env.REACT_APP_ACCESS_KEY_UPLOAD_TO_S3,
56
- });
57
-
58
- const myBucket = new AWS.S3({
59
- params: { Bucket: S3_BUCKET },
60
- region: REGION,
61
- });
62
-
63
- export const RetailerProductEdition = ({
64
- tabsSections,
65
- productSelected = {},
66
- user = {},
67
- token,
68
- }) => {
14
+ export const RetailerProductEdition = ({ productData, tabsSections }) => {
69
15
  const [activeTab, setActiveTab] = useState("Descripción");
70
16
  const [activeImage, setActiveImage] = useState();
71
- const [imageLayout, setImageLayout] = useState(false);
17
+ const [imageLayout, setImageLayout] = useState(true);
72
18
  const [headerTop, setHeaderTop] = useState(0);
73
19
  const [descriptions, setDescriptions] = useState([]);
74
- const [datasheets, setDatasheets] = useState([]);
75
- const [images, setImages] = useReducer(reducerImages, {});
20
+ const [datasheets, setDatasheets] = useState({});
21
+ const [images, setImages] = useState({});
76
22
  const [showModal, setShowModal] = useState(false);
77
- const { getRootProps, getInputProps } = useDropzone({
78
- accept: "image/*",
79
- noKeyboard: true,
80
- multiple: true,
81
- noClick: true,
82
- onDrop: (acceptedFiles) => {
83
- const newImages = [];
84
- acceptedFiles.map((file) => {
85
- const reader = new FileReader();
86
- reader.fileName = file.name;
87
- reader.onload = async function (e) {
88
- const ext = e.srcElement.fileName.split(".");
89
- const img = new Image();
90
- img.src = e.target.result;
91
- const width = img.width;
92
- const height = img.height;
93
- const newImg = {
94
- action: "addImg",
95
- img: {
96
- src: e.target.result,
97
- name: e.target.fileName,
98
- ext: ext[ext.length - 1],
99
- width: width,
100
- height: width,
101
- },
102
- };
103
- setImages(newImg);
104
- };
105
- reader.onerror = function (error) {
106
- console.log("dropzoneError: ", error);
107
- };
108
- reader.readAsDataURL(file);
109
- return file;
110
- });
111
- },
112
- });
113
- const [updatedDatasheets, setUpdatedDatasheets] = useState([]);
114
- const [updatedDescriptions, setUpdatedDescriptions] = useState([]);
115
- const [imagesUploaded, setImagesUploaded] = useState(false);
116
- const [dataImages, setDataImages] = useState();
117
- const [percentages, setPercentages] = useState(
118
- new Array(productSelected?.retailers?.length).fill({ percentage: 0 })
119
- );
120
- const [activePercentage, setActivePercentage] = useState(0);
121
- const [activeRetailer, setActiveRetailer] = useState({});
122
- const [services, setServices] = useState([]);
123
- const [servicesData, setServicesData] = useState([]);
124
- const [message, setMessage] = useState("");
125
- const [product, setProduct] = useState({});
126
- const [icon, setIcon] = useState(null);
127
- const [version, setVersion] = useState(productSelected?.version);
128
- const [comments, setComments] = useState({});
129
- const [comment, setComment] = useState("");
130
- const [requiredNull, setRequiredNull] = useState(0);
131
- const [crossComment, setCrossComment] = useState(false);
132
- const [userGroups, setUserGroups] = useState([]);
133
- const [assig, setAssig] = useState({});
134
- const [selectedImages, setSelectedImages] = useState([]);
135
- const [componentsArray, setComponentsArray] = useState([]);
136
- const [checkAll, setCheckAll] = useState(false);
137
- const isRetailer = user?.is_retailer;
138
- useEffect(() => {
139
- checkAll && setSelectedImages(images.values);
140
- }, [checkAll]);
141
23
 
142
24
  const loadData = async () => {
143
- const services = await getRetailerServices(
144
- productSelected?.article?.id_article,
145
- parseInt(productSelected?.article?.id_category),
146
- productSelected?.version
147
- );
25
+ const services = await getRetailerServices();
148
26
 
149
27
  //Converts the data inside the datasheets object to array
150
- setServices(services);
151
- setActiveRetailer(productSelected?.retailers[0]);
152
- setImages({
153
- action: "init",
154
- init: services[2],
155
- });
156
- if (services[2]?.values?.length > 0) setActiveImage(0);
157
- setProduct(productSelected);
158
- };
159
-
160
- const getServices = async (tab) => {
161
- let serviceActive = "";
162
- switch (tab) {
163
- case "Ficha técnica":
164
- serviceActive = "datasheet";
165
- break;
166
- case "Imágenes":
167
- serviceActive = "images";
168
- break;
169
- default:
170
- serviceActive = "description";
171
- break;
172
- }
173
- const selected = productSelected;
174
- const servicesResponse = await axios.get(
175
- `${process.env.REACT_APP_SERVICES_ENDPOINT}?articleId=${selected?.article?.id_article}&orderId=${selected?.article?.id_order}&end=true`
28
+ Object.values(services[0])[0].data = Object.values(
29
+ Object.values(services[0])[0].data
176
30
  );
177
- const parsedResponse = JSON.parse(servicesResponse?.data?.body).data;
178
- setServicesData(parsedResponse);
179
- };
180
31
 
181
- const translateConcept = (concept) => {
182
- let translation = "";
183
- if (concept === "datasheet") {
184
- translation = "Ficha técnica";
185
- } else if (concept === "description") {
186
- translation = "Descripción";
187
- } else if (concept === "images") {
188
- translation = "Imágenes";
189
- }
190
- return translation;
191
- };
192
-
193
- const getComments = async (tab = "Descripción") => {
194
- const commentsResponse = await Promise.all([
195
- axios.get(
196
- `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${productSelected?.article?.id_article}&concept=description&orderIdColab=${productSelected?.orderId}&version=${version}`
197
- ),
198
- axios.get(
199
- `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${productSelected?.article?.id_article}&concept=datasheet&orderIdColab=${productSelected?.orderId}&version=${version}`
200
- ),
201
- axios.get(
202
- `${process.env.REACT_APP_COMMENTS_ENDPOINT}?articleId=${productSelected?.article?.id_article}&concept=images&orderIdColab=${productSelected?.orderId}&version=${version}`
203
- ),
204
- ]);
205
-
206
- let comments = {};
207
- commentsResponse.forEach(
208
- (comment) =>
209
- JSON.parse(comment?.data?.body).data[0] &&
210
- (comments[
211
- translateConcept(JSON.parse(comment?.data?.body)?.data[0]?.concept)
212
- ] = JSON.parse(comment?.data?.body).data[0])
213
- );
214
- setComment(comments[tab]);
215
- setComments(comments);
32
+ setDatasheets(Object.values(services[0]));
33
+ setDescriptions(services[1]);
34
+ setImages(services[2]);
35
+ setActiveImage(getImage(services[2]?.values[0], 340, 295));
216
36
  };
217
37
 
218
38
  useEffect(async () => {
219
39
  loadData();
220
- getPercentage({ data: [productSelected] }).then((res) =>
221
- setPercentages(res)
222
- );
223
- getServices();
224
- getComments();
225
- setUserGroups(await fetchUsers(token));
226
40
  }, []);
227
41
 
228
- const loadAssignations = (currentProduct) => {
229
- setAssig({
230
- Descripción: {
231
- assignations: [
232
- {
233
- collaboratorType: "especialist",
234
- id: currentProduct?.article?.id_description_especialist,
235
- },
236
- {
237
- collaboratorType: "facilitator",
238
- id: currentProduct?.article?.id_description_facilitator,
239
- },
240
- ],
241
- collaborators: {
242
- especialist: userGroups[0] || [],
243
- facilitator: userGroups[2] || [],
244
- },
245
- },
246
- "Ficha técnica": {
247
- assignations: [
248
- {
249
- collaboratorType: "especialist",
250
- id: currentProduct?.article?.id_datasheet_especialist,
251
- },
252
- {
253
- collaboratorType: "facilitator",
254
- id: currentProduct?.article?.id_datasheet_facilitator,
255
- },
256
- ],
257
- collaborators: {
258
- especialist: userGroups[0] || [],
259
- facilitator: userGroups[2] || [],
260
- },
261
- },
262
- Imágenes: {
263
- assignations: [
264
- {
265
- collaboratorType: "especialist",
266
- id: currentProduct?.article?.id_images_especialist,
267
- },
268
- {
269
- collaboratorType: "facilitator",
270
- id: currentProduct?.article?.id_images_facilitator,
271
- },
272
- ],
273
- collaborators: {
274
- especialist: userGroups[1] || [],
275
- facilitator: userGroups[3] || [],
276
- },
277
- },
278
- });
279
- };
280
-
281
- useEffect(() => {
282
- loadAssignations(productSelected);
283
- }, [userGroups]);
284
-
285
- useEffect(() => {
286
- productSelected?.retailers?.forEach((retailer) => {
287
- retailer["percentage"] = percentages?.filter(
288
- (percent) => retailer?.id === percent?.id_retailer
289
- )[0]?.percentage;
290
- });
291
- setActivePercentage(productSelected?.retailers[0]?.percentage);
292
- }, [percentages]);
293
-
294
- useEffect(() => {
295
- const required = {};
296
- if (services.length > 0) {
297
- services[0][activeRetailer.id].data = Object.values(
298
- services[0][activeRetailer.id].data
299
- );
300
- setActivePercentage(Math.round(activeRetailer?.percentage, 0));
301
- const datagroups = services[0][activeRetailer?.id];
302
- const inputs = services[0]?.inputs;
303
- const descriptions = services[1]?.filter(
304
- (service) => service?.id === activeRetailer?.id
305
- );
306
- setRequiredNull(required);
307
- setDatasheets([datagroups, inputs]);
308
- setDescriptions(descriptions);
309
- }
310
- }, [activeRetailer]);
311
-
312
- const thumbs = () => {
313
- const imageInputs = images?.inputs?.map((e) => ({
314
- value: e?.id,
315
- name: e?.name,
316
- }));
317
- const imageType = images?.imageType?.map((e) => ({
318
- value: e?.id,
319
- name: e?.name,
320
- }));
321
- const imagePackagingType = images?.imagePackagingType?.map((e) => ({
322
- value: e?.id,
323
- name: e?.name,
324
- }));
325
- return images?.values?.map((image, index) => (
326
- <GalleryElement
327
- setCheckAll={setCheckAll}
328
- key={index}
329
- image={image}
330
- gridLayout={imageLayout}
331
- id={"gallery-element-" + index}
332
- index={index}
333
- imageType={imageType}
334
- imagePackagingType={imagePackagingType}
335
- imageInputs={imageInputs}
336
- changeImage={setImages}
337
- selectedImages={selectedImages}
338
- setSelectedImages={setSelectedImages}
339
- />
340
- ));
341
- };
342
-
343
- const saveDescriptions = async () => {
344
- const dataObject = {
345
- articleId: productSelected?.article?.id_article,
346
- articleData: updatedDescriptions,
347
- };
348
- try {
349
- await axios.put(
350
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?description=true&version=${version}`,
351
- dataObject,
352
- {
353
- headers: {
354
- Authorization: token,
355
- },
356
- }
357
- );
358
- } catch (error) {
359
- console.log(error);
360
- }
361
- };
362
-
363
- const saveDatasheets = async () => {
364
- const dataObject = {
365
- articleId: productSelected?.article?.id_article,
366
- articleData: updatedDatasheets,
367
- };
368
- try {
369
- await axios.put(
370
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?datasheet=true&version=${version}`,
371
- dataObject,
372
- {
373
- headers: {
374
- Authorization: token,
375
- },
376
- }
377
- );
378
- } catch (error) {
379
- console.log(error);
380
- }
381
- };
382
-
383
- const updateImages = useCallback(async () => {
384
- const imagesList = images?.values?.slice();
385
- const imagesListTemp = imagesList?.reduce((acc, image) => {
386
- acc[image?.image_id] = ++acc[image?.image_id] || 0;
387
- return acc;
388
- }, {});
389
-
390
- const duplicated = imagesList?.filter((image) => {
391
- return imagesListTemp[image?.image_id];
392
- });
393
-
394
- const attrForImgs = Object.values(images?.attrForImgs);
395
- attrForImgs.pop();
396
- const data = {
397
- articleId: product?.article?.id_article,
398
- attrReqImgs: attrForImgs?.map((e) => ({
399
- attrId: e[0]?.id,
400
- value: e[0]?.value,
401
- })),
402
- articleData: imagesList?.filter((e) => !e.id),
403
- updateImages: imagesList?.filter((e) => e.id),
404
- };
405
- let valid =
406
- data?.articleData?.length === 0
407
- ? true
408
- : data?.articleData?.every((e, i) => {
409
- if (e?.image_id && e?.packing_type && e?.image_type) {
410
- return true;
411
- }
412
- return false;
413
- });
414
- if (valid && data?.updateImages?.length > 0 && duplicated?.length === 0) {
415
- valid = data?.updateImages?.every((e, i) => {
416
- if (e?.image_id && e?.packing_type && e?.image_type) {
417
- return true;
418
- }
419
- return false;
420
- });
421
- }
422
- if (valid && duplicated?.length === 0) {
423
- try {
424
- data?.articleData?.forEach((e) => {
425
- e.uuid = uuidv4();
426
- });
427
- setDataImages(data);
428
- if (data?.articleData?.length > 0) {
429
- setImagesUploaded(false);
430
- const promiseArray = [];
431
- data?.articleData?.forEach((e) => {
432
- const file = Buffer.from(
433
- e.src.replace(/^data:image\/\w+;base64,/, ""),
434
- "base64"
435
- );
436
- const params = {
437
- ACL: "public-read",
438
- Body: file,
439
- Bucket: S3_BUCKET,
440
- Key: `id-${data.articleId}/${version}/${e?.image_id}-${e?.uuid}.${e?.ext}`,
441
- };
442
- promiseArray.push(myBucket.putObject(params).promise());
443
- });
444
- await Promise.all(promiseArray);
445
- setImagesUploaded(true);
446
- } else {
447
- setImagesUploaded(true);
448
- }
449
- } catch (err) {
450
- console.log(err);
451
- // setMainLoading(false);
452
- }
453
- } else {
454
- // setMainLoading(false);
455
- setMessage(
456
- "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."
457
- );
458
- }
459
- // eslint-disable-next-line react-hooks/exhaustive-deps
460
- }, [images, imagesUploaded]);
461
-
462
- useEffect(async () => {
463
- if (imagesUploaded) {
464
- dataImages.articleData = dataImages?.articleData.map((e) => {
465
- delete e.src;
466
- e.imageID = e.image_id;
467
- e.packingType = e.packing_type;
468
- e.imageType = e.image_type;
469
- return e;
470
- });
471
- try {
472
- await axios.put(
473
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
474
- dataImages,
475
- {
476
- headers: {
477
- Authorization: token,
478
- },
479
- }
480
- );
481
- setMessage("Imágenes guardadas con éxito");
482
- } catch (error) {
483
- console.log(error);
484
- }
485
- }
486
- }, [dataImages, imagesUploaded]);
487
-
488
- const approveRejectButtons = (action) => {
489
- let concept = "";
490
- switch (activeTab) {
491
- case "Descripción":
492
- concept = "description";
493
- break;
494
- case "Ficha técnica":
495
- concept = "datasheet";
496
- break;
497
- case "Imágenes":
498
- concept = "images";
499
- break;
500
- default:
501
- break;
502
- }
503
- concept = action ? action : concept;
504
- return (
505
- (productSelected[`${concept}_status`] === "QF" &&
506
- (user?.id_role === 1 || user?.id_role === 4 || user?.id_role === 5)) ||
507
- (productSelected[`${concept}_status`] === "AF" &&
508
- (user?.id_role === 1 || user?.id_role === 6)) ||
509
- (productSelected[`${concept}_status`] === "RP" &&
510
- (user?.id_role === 1 || user?.id_role === 6))
511
- );
512
- };
513
-
514
- const getSectionIcon = () => {
515
- switch (activeTab) {
516
- case "Ficha técnica":
517
- setIcon(attributesSent);
518
- break;
519
- case "Descripción":
520
- setIcon(descriptionSent);
521
- break;
522
- case "Imágenes0,,":
523
- setIcon(imagesSent);
524
- break;
525
- default:
526
- break;
527
- }
528
- };
529
-
530
- const updateCompaniesList = (status, result, retailerId, concept) => {
531
- let serv = servicesData.slice();
532
- let item = serv?.find(
533
- (item) => item.id_retailer === retailerId && item.service === concept
534
- );
535
- let index = serv.indexOf(item);
536
- if (
537
- status === "IN_PROGRESS" ||
538
- status === "QF" ||
539
- status === "RF" ||
540
- status === "RA"
541
- ) {
542
- if (result === "A") {
543
- if (activeTab === "Imágenes") {
544
- serv.map((item) => {
545
- item.status = "AF";
546
- });
547
- } else {
548
- serv[index].status = "AF";
549
- }
550
- } else if (result === "R") {
551
- if (activeTab === "Imágenes") {
552
- serv.map((item) => {
553
- item.status = "RF";
554
- });
555
- } else {
556
- serv[index].status = "RF";
557
- }
558
- } else {
559
- if (status === "IN_PROGRESS" || status === "ASSIGNED") {
560
- serv.map((item) => {
561
- item.status = "QF";
562
- });
563
- } else {
564
- serv.map((item) => {
565
- if (item.status === "RF" || item.status === "RA") {
566
- item.status = "QF";
567
- }
568
- return item;
569
- });
570
- }
571
- }
572
- } else if (status === "AF" || status === "RP") {
573
- if (result === "A") {
574
- if (activeTab === "Imágenes") {
575
- serv.map((item) => {
576
- item.status = "AA";
577
- });
578
- } else {
579
- serv[index].status = "AA";
580
- }
581
- } else {
582
- if (activeTab === "Imágenes") {
583
- serv.map((item) => {
584
- item.status = "RA";
585
- });
586
- } else {
587
- serv[index].status = "RA";
588
- }
589
- }
590
- }
591
- setServicesData(serv);
592
- };
593
-
594
- const sendToFacilitator = async (result) => {
595
- let concept = "";
596
- switch (activeTab) {
597
- case "Descripción":
598
- concept = "description";
599
- break;
600
- case "Ficha técnica":
601
- concept = "datasheet";
602
- break;
603
- case "Imágenes":
604
- concept = "images";
605
- break;
606
- default:
607
- break;
608
- }
609
- let evalStatus = "";
610
- let productTemp = { ...productSelected };
611
- evalStatus = productSelected[`${concept}_status`];
612
- const specialistDone =
613
- evalStatus === "RF" ||
614
- evalStatus === "RA" ||
615
- evalStatus === "IN_PROGRESS";
616
-
617
- if (specialistDone) {
618
- setMessage(`${activeTab} enviada a facilitador`);
619
- getSectionIcon();
620
- productTemp[`${concept}_status`] = "QF";
621
- } else if (evalStatus === "QF") {
622
- setMessage("Evaluación enviada");
623
- getSectionIcon();
624
- productTemp[`${concept}_status`] = "AF";
625
- } else if (evalStatus === "AF") {
626
- setMessage("Evaluación enviada");
627
- getSectionIcon();
628
- productTemp[`${concept}_status`] = "AA";
629
- } else if (evalStatus === "RP") {
630
- setMessage("Evaluación enviada");
631
- getSectionIcon();
632
- productTemp[`${concept}_status`] = "AA";
633
- }
634
- let data = {};
635
- if (result) {
636
- updateCompaniesList(evalStatus, result, activeRetailer.id, concept);
637
- data = {
638
- articleId: productSelected.article.id_article,
639
- orderId: productSelected.orderId,
640
- concept: concept,
641
- result: result,
642
- evalStatus: evalStatus,
643
- retailerId: activeRetailer.id,
644
- };
645
- await axios.put(`${process.env.REACT_APP_EVALUATION_ENDPOINT}`, data, {
646
- headers: {
647
- Authorization: token,
648
- },
649
- });
650
- } else {
651
- if (specialistDone) {
652
- updateCompaniesList(evalStatus, result, activeRetailer.id);
653
- }
654
- data = {
655
- articleId: productSelected.article.id_article,
656
- orderId: productSelected.orderId,
657
- concept: concept,
658
- evalStatus: evalStatus,
659
- retailerId: activeRetailer.id,
660
- };
661
-
662
- switch (user.id_role) {
663
- case 7:
664
- case 8:
665
- data.especialist = true;
666
- break;
667
- case 4:
668
- case 5:
669
- data.facilitator = true;
670
- break;
671
- default:
672
- break;
673
- }
674
-
675
- axios.put(`${process.env.REACT_APP_SEND_EVAL}`, data, {
676
- headers: {
677
- Authorization: token,
678
- },
679
- });
680
- setProduct(productTemp);
681
- setModalSent(true);
682
- }
683
- };
684
-
685
- const userAssigned = (tab, rol) => {
686
- let concept = "";
687
- switch (tab) {
688
- case "Ficha técnica":
689
- concept = "datasheet";
690
- break;
691
- case "Imágenes":
692
- concept = "images";
693
- break;
694
-
695
- default:
696
- concept = "description";
697
- break;
698
- }
699
-
700
- const allowedRoles = [1, 4, 5, 6, 7, 8];
701
-
702
- const validUser = allowedRoles.indexOf(user?.id_role) !== -1;
703
-
704
- return (
705
- productSelected.article[`id_${concept}_${rol}`] === user.id_user &&
706
- validUser
707
- );
708
- };
709
-
710
- const auditorAssigned = () => {
711
- return productSelected?.article[`id_auditor`] === user.id_user;
712
- };
713
-
714
- function specialistValid(tab) {
715
- let concept = "";
716
- switch (tab) {
717
- case "Ficha técnica":
718
- concept = "datasheet";
719
- break;
720
- case "Imágenes":
721
- concept = "images";
722
- break;
723
-
724
- default:
725
- concept = "description";
726
- break;
727
- }
728
- return (
729
- product[`${concept}_status`] === "IN_PROGRESS" ||
730
- product[`${concept}_status`] === "RF" ||
731
- product[`${concept}_status`] === "RA"
732
- );
733
- }
734
-
735
- function versionMatch() {
736
- return productSelected?.version === version;
737
- }
738
-
739
- const createComment = async (e, body, tab) => {
740
- let concept = "";
741
- switch (activeTab) {
742
- case "Ficha técnica":
743
- concept = "datasheet";
744
- break;
745
- case "Imágenes":
746
- concept = "images";
747
- break;
748
-
749
- default:
750
- concept = "description";
751
- break;
752
- }
753
- const data = {
754
- articleId: product?.article?.id_article,
755
- orderId: product?.orderId,
756
- message: body,
757
- concept: concept,
758
- version: version,
759
- };
760
- await axios.post(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
761
- headers: {
762
- Authorization: token,
763
- },
764
- });
765
- await getComments(tab);
766
- };
767
-
768
- useEffect(async () => {
769
- setComment(comments[activeTab]);
770
- }, [activeTab]);
771
-
772
- const commentRevised = async () => {
773
- const data = {
774
- commentId: comment.id,
775
- };
776
- await axios.put(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
777
- headers: {
778
- Authorization: sessionStorage.getItem("jwt"),
779
- },
780
- });
781
- setCrossComment(false);
782
- await getComments();
783
- };
784
-
785
- const setAssignation = async (assignationType, assignationId) => {
786
- let concept = "";
787
- switch (activeTab) {
788
- case "Ficha técnica":
789
- concept = "datasheet";
790
- break;
791
- case "Imágenes":
792
- concept = "images";
793
- break;
794
-
795
- default:
796
- concept = "description";
797
- break;
798
- }
799
- const productTemp = productSelected;
800
- productTemp.article[`id_${concept}_${assignationType}`] = assignationId;
801
- const data = {
802
- articleList: [
803
- {
804
- orderId: product.orderId,
805
- articleId: product?.article?.id_article,
806
- },
807
- ],
808
- concept: concept,
809
- [`${assignationType}Id`]: assignationId,
810
- };
811
- axios({
812
- method: "post",
813
- url: process.env.REACT_APP_ASSIGNATIONS_ENDPOINT,
814
- data: data,
815
- headers: {
816
- Authorization: token,
817
- },
818
- });
819
- loadAssignations(productTemp);
820
- sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
821
- };
822
-
823
- const evaluationComplete = (tab) => {
824
- let concept = "";
825
- switch (tab) {
826
- case "Ficha técnica":
827
- concept = "datasheet";
828
- break;
829
- case "Imágenes":
830
- concept = "images";
831
- break;
832
-
833
- default:
834
- concept = "description";
835
- break;
836
- }
837
- let serv = servicesData.filter((item) => item.service === concept);
838
- let approved = "";
839
- let rejected = "";
840
- if (
841
- product.status === "IN_PROGRESS" ||
842
- product.status === "QF" ||
843
- product.status === "RF"
844
- ) {
845
- approved = "AF";
846
- rejected = "RF";
847
- if (product.status === "QF") {
848
- return (
849
- serv.filter(
850
- (item) =>
851
- item.status === approved ||
852
- item.status === rejected ||
853
- item.status === "AA" ||
854
- item.status === "AP"
855
- ).length === serv.length
856
- );
857
- }
858
- } else if (
859
- product.status === "AF" ||
860
- product.status === "RA" ||
861
- product.status === "RP"
862
- ) {
863
- approved = "AA";
864
- rejected = "RA";
865
-
866
- if (product.status === "RP" || product.status === "AF") {
867
- return (
868
- serv.filter(
869
- (item) =>
870
- item.status === approved ||
871
- item.status === rejected ||
872
- item.status === "AP"
873
- ).length === serv.length
874
- );
875
- }
876
- } else if (product.status === "RC") {
877
- approved = "AP";
878
- rejected = "RA";
879
- return (
880
- serv.filter(
881
- (item) => item.status === approved || item.status === rejected
882
- ).length === serv.length
883
- );
884
- }
885
- return (
886
- serv.filter(
887
- (item) => item.status === approved || item.status === rejected
888
- ).length === serv.length
889
- );
890
- };
891
-
892
- const downloadImages = () => {
893
- selectedImages.forEach((e) => {
894
- if (e.id) {
895
- saveAs(
896
- `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
897
- `${product.article.upc}_${e.name}.${e.ext}`
898
- );
899
- }
900
- });
901
- };
902
-
903
- const deleteImages = () => {
904
- const data = {
905
- articleId: product.article.id_article,
906
- deleteImages: selectedImages,
907
- };
908
- try {
909
- axios.put(
910
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
911
- data,
912
- {
913
- headers: { Authorization: token },
914
- }
915
- );
916
- } catch (err) {
917
- console.log(err);
918
- }
919
- setMessage("");
920
- };
921
-
922
- const askToDeleteImages = () => {
923
- if (selectedImages.length > 0) {
924
- setMessage("¿Está seguro de eliminar las imágenes seleccionadas?");
925
- setComponentsArray([
926
- <ScreenHeader
927
- key={"1"}
928
- text={""}
929
- Paragraph={"¿Está seguro de eliminar las imágenes seleccionadas?"}
930
- headerType="header-and-paragraph"
931
- />,
932
- <Button
933
- key={"2"}
934
- buttonType="general-white-button"
935
- label={"Cancelar"}
936
- onClick={() => setMessage("")}
937
- />,
938
- <Button
939
- key={"3"}
940
- buttonType="general-button-default"
941
- label={"Aceptar"}
942
- onClick={() => deleteImages()}
943
- />,
944
- ]);
945
- }
946
- };
947
-
948
42
  return (
949
43
  <Container headerTop={headerTop}>
950
44
  <HeaderTop setHeaderTop={setHeaderTop} />
951
45
  <div className="data-container">
952
46
  <div className="image-data-panel">
953
47
  <ImagePreviewer
954
- activeImage={images?.values ? images?.values[activeImage] : {}}
48
+ activeImage={activeImage}
955
49
  imagesArray={images}
956
50
  setActiveImage={setActiveImage}
957
51
  setShowModal={setShowModal}
958
52
  />
959
53
  <ImageDataTable
960
- lists={images}
961
- activeImage={images?.values ? images?.values[activeImage] : {}}
962
- retailerSelected={activeRetailer.id}
963
- setImages={setImages}
964
- assignationsImages={assig["Imágenes"]}
965
- imagesStatus={productSelected?.images_status}
966
- setAssignation={setAssignation}
967
- isRetailer={isRetailer}
968
- onClickSave={() => updateImages()}
54
+ imageData={activeImage?.data}
55
+ activeImage={activeImage}
969
56
  />
970
57
  </div>
971
58
  <div className="product-information">
972
- <FullProductNameHeader
973
- headerData={product}
974
- percent={activePercentage}
975
- activeRetailer={activeRetailer}
976
- setActiveRetailer={setActiveRetailer}
977
- approveRejectButtons={approveRejectButtons}
978
- sendToFacilitator={sendToFacilitator}
979
- auditorAssigned={auditorAssigned}
980
- userAssigned={userAssigned(activeTab, "facilitator")}
981
- />
59
+ <FullProductNameHeader headerData={productData.headerData} />
982
60
  <FullTabsMenu
983
61
  tabsSections={tabsSections}
984
- status={{
985
- Descripción: servicesData.filter(
986
- (service) =>
987
- service.id_retailer === activeRetailer?.id &&
988
- service.service === "description"
989
- )[0]?.status,
990
- "Ficha técnica": servicesData.filter(
991
- (service) =>
992
- service.id_retailer === activeRetailer?.id &&
993
- service.service === "datasheet"
994
- )[0]?.status,
995
- Imágenes: product?.images_status,
996
- }}
997
- activeTab={activeTab}
62
+ status={productData.status}
63
+ profileImage={productData.asigned}
998
64
  setActiveTab={setActiveTab}
999
65
  setImageLayout={setImageLayout}
1000
- downloadImages={downloadImages}
1001
- askToDeleteImages={askToDeleteImages}
1002
- assig={assig[activeTab]}
1003
- setAssignation={setAssignation}
1004
- isRetailer={isRetailer}
1005
- onClickSave={() => {
1006
- switch (activeTab) {
1007
- case "Descripción":
1008
- saveDescriptions();
1009
- break;
1010
- case "Ficha técnica":
1011
- saveDatasheets();
1012
- break;
1013
- case "Imágenes":
1014
- updateImages();
1015
- break;
1016
-
1017
- default:
1018
- break;
1019
- }
1020
- }}
1021
66
  />
1022
67
  <div
1023
68
  className={
1024
69
  "services-information-container " +
1025
- (imageLayout && activeTab === "Imágenes" ? "image-services" : "")
70
+ (imageLayout && activeTab === "Imágenes" && "image-services")
1026
71
  }
1027
72
  >
1028
- {!imageLayout && activeTab === "Imágenes" && (
1029
- <GalleryHeader
1030
- setSelectedImages={setSelectedImages}
1031
- checkAll={checkAll}
1032
- setCheckAll={setCheckAll}
1033
- />
1034
- )}
73
+ {!imageLayout && <GalleryHeader />}
1035
74
  {activeTab === "Ficha técnica" &&
1036
- (product?.services?.datasheets === 1 ? (
1037
- datasheets[0]?.data?.map((dataGroup, index) => (
1038
- <InputGroup
1039
- key={index + "-" + activeRetailer.name}
1040
- articleId={productSelected.article.id_article}
1041
- version={version}
1042
- activeSection={activeTab}
1043
- inputGroup={dataGroup}
1044
- dataInputs={datasheets[1]}
1045
- updatedDatasheets={updatedDatasheets}
1046
- setUpdatedDatasheets={setUpdatedDatasheets}
1047
- />
1048
- ))
1049
- ) : (
1050
- <p>no tienes este servicio</p>
1051
- ))}
1052
- {activeTab === "Descripción" &&
1053
- (product?.services?.descriptions === 1 ? (
75
+ datasheets[0]?.data?.map((dataGroup, index) => (
1054
76
  <InputGroup
77
+ key={index}
1055
78
  activeSection={activeTab}
1056
- inputGroup={descriptions[0]}
1057
- updatedDescriptions={updatedDescriptions}
1058
- setUpdatedDescriptions={setUpdatedDescriptions}
1059
- articleId={product?.article?.id_article}
1060
- version={version}
1061
- dinamicHeight={true}
79
+ inputGroup={dataGroup}
80
+ dataInputs={datasheets[1]}
1062
81
  />
1063
- ) : (
1064
- <p>no tienes este servicio</p>
1065
82
  ))}
83
+ {activeTab === "Descripción" && (
84
+ <InputGroup
85
+ activeSection={activeTab}
86
+ inputGroup={descriptions[0]}
87
+ />
88
+ )}
1066
89
 
1067
90
  {activeTab === "Imágenes" &&
1068
- (product?.services?.images === 1 ? (
1069
- <section className="container">
1070
- <div {...getRootProps({ className: "dropzone" })}>
1071
- <input {...getInputProps()} />
1072
- <aside>{thumbs()}</aside>
1073
- </div>
1074
- </section>
1075
- ) : (
1076
- <p>no tienes este servicio</p>
91
+ images?.values?.map((image, index) => (
92
+ <GalleryElement
93
+ key={index}
94
+ image={getImage(image, 179, 179)}
95
+ gridLayout={imageLayout}
96
+ id={"gallery-element-" + index}
97
+ />
1077
98
  ))}
1078
99
  </div>
1079
- {(userAssigned(activeTab, "especialist" || "facilitator") ||
1080
- auditorAssigned()) && (
1081
- <div className="commentary-box">
1082
- {!comment ? (
1083
- <div className="commentary">
1084
- <TagAndInput
1085
- label={"Caja de Comentario"}
1086
- inputType={"textarea"}
1087
- inputCols={80}
1088
- inputRows={4}
1089
- inputId={"commentary-box"}
1090
- index={0}
1091
- />
1092
- <div className="buttons-box">
1093
- <Button
1094
- buttonType={"general-transparent-button"}
1095
- label={"Enviar comentario"}
1096
- onClick={(e) =>
1097
- createComment(
1098
- e,
1099
- document.querySelector(
1100
- "#description-commentary-box-0 .ql-container .ql-editor > p"
1101
- ).innerHTML,
1102
- activeTab
1103
- )
1104
- }
1105
- />
1106
- </div>
1107
- </div>
1108
- ) : (
1109
- <div className="feedback-box">
1110
- <Commentary
1111
- comment={comment.message}
1112
- reviewed={crossComment}
1113
- />
1114
- <Button
1115
- buttonType={"circular-button accept-button"}
1116
- onClick={async () => {
1117
- setCrossComment(true);
1118
- commentRevised();
1119
- }}
1120
- />
1121
- </div>
1122
- )}
1123
- <Button
1124
- buttonType={
1125
- !requiredNull[activeTab] === 0 ||
1126
- !approveRejectButtons() ||
1127
- !evaluationComplete(activeTab)
1128
- ? "general-button-disabled"
1129
- : "general-green-button"
1130
- }
1131
- label={"Enviar evaluación"}
1132
- onClick={() => sendToFacilitator()}
1133
- />
1134
- </div>
1135
- )}
1136
100
  </div>
1137
101
  </div>
1138
102
  {showModal && (
1139
- <ProductImageModal
1140
- images={images}
1141
- setShowModal={setShowModal}
1142
- sendToFacilitator={sendToFacilitator}
1143
- approveRejectButtons={approveRejectButtons}
1144
- />
1145
- )}
1146
- {message.length > 0 && (
1147
- <GenericModal
1148
- componentsArray={
1149
- componentsArray.length > 0
1150
- ? componentsArray
1151
- : [<ScreenHeader key="1" text={message} />]
1152
- }
1153
- onClick={() => setMessage("")}
1154
- />
103
+ <ProductImageModal images={images} setShowModal={setShowModal} />
1155
104
  )}
1156
105
  </Container>
1157
106
  );