contentoh-components-library 20.0.0 → 20.0.17

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 +1 -35
  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 -1521
  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 +2 -6
  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 +2 -12
  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 -1100
  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 +6 -0
  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,1163 +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
- setMessage("Descripciones guardadas con éxito");
359
- } catch (error) {
360
- console.log(error);
361
- }
362
- };
363
-
364
- const saveDatasheets = async () => {
365
- const dataObject = {
366
- articleId: productSelected?.article?.id_article,
367
- articleData: updatedDatasheets,
368
- };
369
- try {
370
- await axios.put(
371
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?datasheet=true&version=${version}`,
372
- dataObject,
373
- {
374
- headers: {
375
- Authorization: token,
376
- },
377
- }
378
- );
379
- setMessage("Fichas técnicas guardadas con éxito");
380
- } catch (error) {
381
- console.log(error);
382
- }
383
- };
384
-
385
- const updateImages = useCallback(async () => {
386
- const imagesList = images?.values?.slice();
387
- const imagesListTemp = imagesList?.reduce((acc, image) => {
388
- acc[image?.image_id] = ++acc[image?.image_id] || 0;
389
- return acc;
390
- }, {});
391
-
392
- const duplicated = imagesList?.filter((image) => {
393
- return imagesListTemp[image?.image_id];
394
- });
395
-
396
- const attrForImgs = Object.values(images?.attrForImgs);
397
- attrForImgs.pop();
398
- const data = {
399
- articleId: product?.article?.id_article,
400
- attrReqImgs: attrForImgs?.map((e) => ({
401
- attrId: e[0]?.id,
402
- value: e[0]?.value,
403
- })),
404
- articleData: imagesList?.filter((e) => !e.id),
405
- updateImages: imagesList?.filter((e) => e.id),
406
- };
407
- let valid =
408
- data?.articleData?.length === 0
409
- ? true
410
- : data?.articleData?.every((e, i) => {
411
- if (e?.image_id && e?.packing_type && e?.image_type) {
412
- return true;
413
- }
414
- return false;
415
- });
416
- if (valid && data?.updateImages?.length > 0 && duplicated?.length === 0) {
417
- valid = data?.updateImages?.every((e, i) => {
418
- if (e?.image_id && e?.packing_type && e?.image_type) {
419
- return true;
420
- }
421
- return false;
422
- });
423
- }
424
- if (valid && duplicated?.length === 0) {
425
- try {
426
- data?.articleData?.forEach((e) => {
427
- e.uuid = uuidv4();
428
- });
429
- setDataImages(data);
430
- if (data?.articleData?.length > 0) {
431
- setImagesUploaded(false);
432
- const promiseArray = [];
433
- data?.articleData?.forEach((e) => {
434
- const file = Buffer.from(
435
- e.src.replace(/^data:image\/\w+;base64,/, ""),
436
- "base64"
437
- );
438
- const params = {
439
- ACL: "public-read",
440
- Body: file,
441
- Bucket: S3_BUCKET,
442
- Key: `id-${data.articleId}/${version}/${e?.image_id}-${e?.uuid}.${e?.ext}`,
443
- };
444
- promiseArray.push(myBucket.putObject(params).promise());
445
- });
446
- await Promise.all(promiseArray);
447
- setImagesUploaded(true);
448
- } else {
449
- setImagesUploaded(true);
450
- }
451
- } catch (err) {
452
- console.log(err);
453
- // setMainLoading(false);
454
- }
455
- } else {
456
- // setMainLoading(false);
457
- setMessage(
458
- "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."
459
- );
460
- }
461
- // eslint-disable-next-line react-hooks/exhaustive-deps
462
- }, [images, imagesUploaded]);
463
-
464
- useEffect(async () => {
465
- if (imagesUploaded) {
466
- dataImages.articleData = dataImages?.articleData.map((e) => {
467
- delete e.src;
468
- e.imageID = e.image_id;
469
- e.packingType = e.packing_type;
470
- e.imageType = e.image_type;
471
- return e;
472
- });
473
- try {
474
- await axios.put(
475
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
476
- dataImages,
477
- {
478
- headers: {
479
- Authorization: token,
480
- },
481
- }
482
- );
483
- setMessage("Imágenes guardadas con éxito");
484
- } catch (error) {
485
- console.log(error);
486
- }
487
- }
488
- }, [dataImages, imagesUploaded]);
489
-
490
- const approveRejectButtons = (action) => {
491
- let concept = "";
492
- switch (activeTab) {
493
- case "Descripción":
494
- concept = "description";
495
- break;
496
- case "Ficha técnica":
497
- concept = "datasheet";
498
- break;
499
- case "Imágenes":
500
- concept = "images";
501
- break;
502
- default:
503
- break;
504
- }
505
- concept = action ? action : concept;
506
- return (
507
- (productSelected[`${concept}_status`] === "QF" &&
508
- (user?.id_role === 1 || user?.id_role === 4 || user?.id_role === 5)) ||
509
- (productSelected[`${concept}_status`] === "AF" &&
510
- (user?.id_role === 1 || user?.id_role === 6)) ||
511
- (productSelected[`${concept}_status`] === "RP" &&
512
- (user?.id_role === 1 || user?.id_role === 6))
513
- );
514
- };
515
-
516
- const getSectionIcon = () => {
517
- switch (activeTab) {
518
- case "Ficha técnica":
519
- setIcon(attributesSent);
520
- break;
521
- case "Descripción":
522
- setIcon(descriptionSent);
523
- break;
524
- case "Imágenes0,,":
525
- setIcon(imagesSent);
526
- break;
527
- default:
528
- break;
529
- }
530
- };
531
-
532
- const updateCompaniesList = (status, result, retailerId, concept) => {
533
- let serv = servicesData.slice();
534
- let item = serv?.find(
535
- (item) => item.id_retailer === retailerId && item.service === concept
536
- );
537
- let index = serv.indexOf(item);
538
- if (
539
- status === "IN_PROGRESS" ||
540
- status === "QF" ||
541
- status === "RF" ||
542
- status === "RA"
543
- ) {
544
- if (result === "A") {
545
- if (activeTab === "Imágenes") {
546
- serv.map((item) => {
547
- item.status = "AF";
548
- });
549
- } else {
550
- serv[index].status = "AF";
551
- }
552
- } else if (result === "R") {
553
- if (activeTab === "Imágenes") {
554
- serv.map((item) => {
555
- item.status = "RF";
556
- });
557
- } else {
558
- serv[index].status = "RF";
559
- }
560
- } else {
561
- if (status === "IN_PROGRESS" || status === "ASSIGNED") {
562
- serv.map((item) => {
563
- item.status = "QF";
564
- });
565
- } else {
566
- serv.map((item) => {
567
- if (item.status === "RF" || item.status === "RA") {
568
- item.status = "QF";
569
- }
570
- return item;
571
- });
572
- }
573
- }
574
- } else if (status === "AF" || status === "RP") {
575
- if (result === "A") {
576
- if (activeTab === "Imágenes") {
577
- serv.map((item) => {
578
- item.status = "AA";
579
- });
580
- } else {
581
- serv[index].status = "AA";
582
- }
583
- } else {
584
- if (activeTab === "Imágenes") {
585
- serv.map((item) => {
586
- item.status = "RA";
587
- });
588
- } else {
589
- serv[index].status = "RA";
590
- }
591
- }
592
- }
593
- setServicesData(serv);
594
- };
595
-
596
- const sendToFacilitator = async (result) => {
597
- let concept = "";
598
- switch (activeTab) {
599
- case "Descripción":
600
- concept = "description";
601
- break;
602
- case "Ficha técnica":
603
- concept = "datasheet";
604
- break;
605
- case "Imágenes":
606
- concept = "images";
607
- break;
608
- default:
609
- break;
610
- }
611
- let evalStatus = "";
612
- let productTemp = { ...productSelected };
613
- evalStatus = productSelected[`${concept}_status`];
614
- const specialistDone =
615
- evalStatus === "RF" ||
616
- evalStatus === "RA" ||
617
- evalStatus === "IN_PROGRESS";
618
-
619
- if (specialistDone) {
620
- setMessage(`${activeTab} enviada a facilitador`);
621
- getSectionIcon();
622
- productTemp[`${concept}_status`] = "QF";
623
- } else if (evalStatus === "QF") {
624
- setMessage("Evaluación enviada");
625
- getSectionIcon();
626
- productTemp[`${concept}_status`] = "AF";
627
- } else if (evalStatus === "AF") {
628
- setMessage("Evaluación enviada");
629
- getSectionIcon();
630
- productTemp[`${concept}_status`] = "AA";
631
- } else if (evalStatus === "RP") {
632
- setMessage("Evaluación enviada");
633
- getSectionIcon();
634
- productTemp[`${concept}_status`] = "AA";
635
- }
636
- let data = {};
637
- if (result) {
638
- updateCompaniesList(evalStatus, result, activeRetailer.id, concept);
639
- data = {
640
- articleId: productSelected.article.id_article,
641
- orderId: productSelected.orderId,
642
- concept: concept,
643
- result: result,
644
- evalStatus: evalStatus,
645
- retailerId: activeRetailer.id,
646
- };
647
- await axios.put(`${process.env.REACT_APP_EVALUATION_ENDPOINT}`, data, {
648
- headers: {
649
- Authorization: token,
650
- },
651
- });
652
- } else {
653
- if (specialistDone) {
654
- updateCompaniesList(evalStatus, result, activeRetailer.id);
655
- }
656
- data = {
657
- articleId: productSelected.article.id_article,
658
- orderId: productSelected.orderId,
659
- concept: concept,
660
- evalStatus: evalStatus,
661
- retailerId: activeRetailer.id,
662
- };
663
-
664
- switch (user.id_role) {
665
- case 7:
666
- case 8:
667
- data.especialist = true;
668
- break;
669
- case 4:
670
- case 5:
671
- data.facilitator = true;
672
- break;
673
- default:
674
- break;
675
- }
676
-
677
- axios.put(`${process.env.REACT_APP_SEND_EVAL}`, data, {
678
- headers: {
679
- Authorization: token,
680
- },
681
- });
682
- setProduct(productTemp);
683
- setModalSent(true);
684
- }
685
- };
686
-
687
- const userAssigned = (tab, rol) => {
688
- let concept = "";
689
- switch (tab) {
690
- case "Ficha técnica":
691
- concept = "datasheet";
692
- break;
693
- case "Imágenes":
694
- concept = "images";
695
- break;
696
-
697
- default:
698
- concept = "description";
699
- break;
700
- }
701
-
702
- const allowedRoles = [1, 4, 5, 6, 7, 8];
703
-
704
- const validUser = allowedRoles.indexOf(user?.id_role) !== -1;
705
-
706
- return (
707
- productSelected.article[`id_${concept}_${rol}`] === user.id_user &&
708
- validUser
709
- );
710
- };
711
-
712
- const auditorAssigned = () => {
713
- return productSelected?.article[`id_auditor`] === user.id_user;
714
- };
715
-
716
- function specialistValid(tab) {
717
- let concept = "";
718
- switch (tab) {
719
- case "Ficha técnica":
720
- concept = "datasheet";
721
- break;
722
- case "Imágenes":
723
- concept = "images";
724
- break;
725
-
726
- default:
727
- concept = "description";
728
- break;
729
- }
730
- return (
731
- product[`${concept}_status`] === "IN_PROGRESS" ||
732
- product[`${concept}_status`] === "RF" ||
733
- product[`${concept}_status`] === "RA"
734
- );
735
- }
736
-
737
- function versionMatch() {
738
- return productSelected?.version === version;
739
- }
740
-
741
- const createComment = async (e, body, tab) => {
742
- let concept = "";
743
- switch (activeTab) {
744
- case "Ficha técnica":
745
- concept = "datasheet";
746
- break;
747
- case "Imágenes":
748
- concept = "images";
749
- break;
750
-
751
- default:
752
- concept = "description";
753
- break;
754
- }
755
- const data = {
756
- articleId: product?.article?.id_article,
757
- orderId: product?.orderId,
758
- message: body,
759
- concept: concept,
760
- version: version,
761
- };
762
- await axios.post(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
763
- headers: {
764
- Authorization: token,
765
- },
766
- });
767
- await getComments(tab);
768
- };
769
-
770
- useEffect(async () => {
771
- setComment(comments[activeTab]);
772
- }, [activeTab]);
773
-
774
- const commentRevised = async () => {
775
- const data = {
776
- commentId: comment.id,
777
- };
778
- await axios.put(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
779
- headers: {
780
- Authorization: sessionStorage.getItem("jwt"),
781
- },
782
- });
783
- setCrossComment(false);
784
- await getComments();
785
- };
786
-
787
- const setAssignation = async (assignationType, assignationId) => {
788
- let concept = "";
789
- switch (activeTab) {
790
- case "Ficha técnica":
791
- concept = "datasheet";
792
- break;
793
- case "Imágenes":
794
- concept = "images";
795
- break;
796
-
797
- default:
798
- concept = "description";
799
- break;
800
- }
801
- const productTemp = productSelected;
802
- productTemp.article[`id_${concept}_${assignationType}`] = assignationId;
803
- const data = {
804
- articleList: [
805
- {
806
- orderId: product.orderId,
807
- articleId: product?.article?.id_article,
808
- },
809
- ],
810
- concept: concept,
811
- [`${assignationType}Id`]: assignationId,
812
- };
813
- axios({
814
- method: "post",
815
- url: process.env.REACT_APP_ASSIGNATIONS_ENDPOINT,
816
- data: data,
817
- headers: {
818
- Authorization: token,
819
- },
820
- });
821
- loadAssignations(productTemp);
822
- sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
823
- };
824
-
825
- const evaluationComplete = (tab) => {
826
- let concept = "";
827
- switch (tab) {
828
- case "Ficha técnica":
829
- concept = "datasheet";
830
- break;
831
- case "Imágenes":
832
- concept = "images";
833
- break;
834
-
835
- default:
836
- concept = "description";
837
- break;
838
- }
839
- let serv = servicesData.filter((item) => item.service === concept);
840
- let approved = "";
841
- let rejected = "";
842
- if (
843
- product.status === "IN_PROGRESS" ||
844
- product.status === "QF" ||
845
- product.status === "RF"
846
- ) {
847
- approved = "AF";
848
- rejected = "RF";
849
- if (product.status === "QF") {
850
- return (
851
- serv.filter(
852
- (item) =>
853
- item.status === approved ||
854
- item.status === rejected ||
855
- item.status === "AA" ||
856
- item.status === "AP"
857
- ).length === serv.length
858
- );
859
- }
860
- } else if (
861
- product.status === "AF" ||
862
- product.status === "RA" ||
863
- product.status === "RP"
864
- ) {
865
- approved = "AA";
866
- rejected = "RA";
867
-
868
- if (product.status === "RP" || product.status === "AF") {
869
- return (
870
- serv.filter(
871
- (item) =>
872
- item.status === approved ||
873
- item.status === rejected ||
874
- item.status === "AP"
875
- ).length === serv.length
876
- );
877
- }
878
- } else if (product.status === "RC") {
879
- approved = "AP";
880
- rejected = "RA";
881
- return (
882
- serv.filter(
883
- (item) => item.status === approved || item.status === rejected
884
- ).length === serv.length
885
- );
886
- }
887
- return (
888
- serv.filter(
889
- (item) => item.status === approved || item.status === rejected
890
- ).length === serv.length
891
- );
892
- };
893
-
894
- const downloadImages = () => {
895
- selectedImages.forEach((e) => {
896
- if (e.id) {
897
- saveAs(
898
- `https://${process.env.REACT_APP_IMAGES_BUCKET}.s3.amazonaws.com/${e.srcDB}`,
899
- `${product.article.upc}_${e.name}.${e.ext}`
900
- );
901
- }
902
- });
903
- };
904
-
905
- const deleteImages = () => {
906
- const data = {
907
- articleId: product.article.id_article,
908
- deleteImages: selectedImages,
909
- };
910
- try {
911
- axios.put(
912
- `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
913
- data,
914
- {
915
- headers: { Authorization: token },
916
- }
917
- );
918
- } catch (err) {
919
- console.log(err);
920
- }
921
- setMessage("");
922
- };
923
-
924
- const askToDeleteImages = () => {
925
- if (selectedImages.length > 0) {
926
- setMessage("¿Está seguro de eliminar las imágenes seleccionadas?");
927
- setComponentsArray([
928
- <ScreenHeader
929
- key={"1"}
930
- text={"¿Está seguro de eliminar las imágenes seleccionadas?"}
931
- headerType="retailer-name-header"
932
- color={"white"}
933
- />,
934
- <Button
935
- key={"2"}
936
- buttonType="general-white-button"
937
- label={"Cancelar"}
938
- onClick={() => setMessage("")}
939
- />,
940
- <Button
941
- key={"3"}
942
- buttonType="general-button-default"
943
- label={"Aceptar"}
944
- onClick={() => deleteImages()}
945
- />,
946
- ]);
947
- }
948
- };
949
-
950
42
  return (
951
43
  <Container headerTop={headerTop}>
952
44
  <HeaderTop setHeaderTop={setHeaderTop} />
953
45
  <div className="data-container">
954
46
  <div className="image-data-panel">
955
47
  <ImagePreviewer
956
- activeImage={images?.values ? images?.values[activeImage] : {}}
48
+ activeImage={activeImage}
957
49
  imagesArray={images}
958
50
  setActiveImage={setActiveImage}
959
51
  setShowModal={setShowModal}
960
52
  />
961
53
  <ImageDataTable
962
- lists={images}
963
- activeImage={images?.values ? images?.values[activeImage] : {}}
964
- retailerSelected={activeRetailer.id}
965
- setImages={setImages}
966
- assignationsImages={assig["Imágenes"]}
967
- imagesStatus={productSelected?.images_status}
968
- setAssignation={setAssignation}
969
- isRetailer={isRetailer}
970
- onClickSave={() => updateImages()}
54
+ imageData={activeImage?.data}
55
+ activeImage={activeImage}
971
56
  />
972
57
  </div>
973
58
  <div className="product-information">
974
- <FullProductNameHeader
975
- headerData={product}
976
- percent={activePercentage}
977
- activeRetailer={activeRetailer}
978
- setActiveRetailer={setActiveRetailer}
979
- approveRejectButtons={approveRejectButtons}
980
- sendToFacilitator={sendToFacilitator}
981
- auditorAssigned={auditorAssigned}
982
- userAssigned={userAssigned(activeTab, "facilitator")}
983
- />
59
+ <FullProductNameHeader headerData={productData.headerData} />
984
60
  <FullTabsMenu
985
61
  tabsSections={tabsSections}
986
- status={{
987
- Descripción: servicesData.filter(
988
- (service) =>
989
- service.id_retailer === activeRetailer?.id &&
990
- service.service === "description"
991
- )[0]?.status,
992
- "Ficha técnica": servicesData.filter(
993
- (service) =>
994
- service.id_retailer === activeRetailer?.id &&
995
- service.service === "datasheet"
996
- )[0]?.status,
997
- Imágenes: product?.images_status,
998
- }}
999
- activeTab={activeTab}
62
+ status={productData.status}
63
+ profileImage={productData.asigned}
1000
64
  setActiveTab={setActiveTab}
1001
65
  setImageLayout={setImageLayout}
1002
- downloadImages={downloadImages}
1003
- askToDeleteImages={askToDeleteImages}
1004
- assig={assig[activeTab]}
1005
- setAssignation={setAssignation}
1006
- isRetailer={isRetailer}
1007
- onClickSave={() => {
1008
- switch (activeTab) {
1009
- case "Descripción":
1010
- saveDescriptions();
1011
- break;
1012
- case "Ficha técnica":
1013
- saveDatasheets();
1014
- break;
1015
- case "Imágenes":
1016
- updateImages();
1017
- break;
1018
-
1019
- default:
1020
- break;
1021
- }
1022
- }}
1023
66
  />
1024
67
  <div
1025
68
  className={
1026
69
  "services-information-container " +
1027
- (imageLayout && activeTab === "Imágenes" ? "image-services" : "")
70
+ (imageLayout && activeTab === "Imágenes" && "image-services")
1028
71
  }
1029
72
  >
1030
- {!imageLayout && activeTab === "Imágenes" && (
1031
- <GalleryHeader
1032
- setSelectedImages={setSelectedImages}
1033
- checkAll={checkAll}
1034
- setCheckAll={setCheckAll}
1035
- />
1036
- )}
73
+ {!imageLayout && <GalleryHeader />}
1037
74
  {activeTab === "Ficha técnica" &&
1038
- (product?.services?.datasheets === 1 ? (
1039
- datasheets[0]?.data?.map((dataGroup, index) => (
1040
- <InputGroup
1041
- key={index + "-" + activeRetailer.name}
1042
- articleId={productSelected.article.id_article}
1043
- version={version}
1044
- activeSection={activeTab}
1045
- inputGroup={dataGroup}
1046
- dataInputs={datasheets[1]}
1047
- updatedDatasheets={updatedDatasheets}
1048
- setUpdatedDatasheets={setUpdatedDatasheets}
1049
- />
1050
- ))
1051
- ) : (
1052
- <p>no tienes este servicio</p>
1053
- ))}
1054
- {activeTab === "Descripción" &&
1055
- (product?.services?.descriptions === 1 ? (
75
+ datasheets[0]?.data?.map((dataGroup, index) => (
1056
76
  <InputGroup
77
+ key={index}
1057
78
  activeSection={activeTab}
1058
- inputGroup={descriptions[0]}
1059
- updatedDescriptions={updatedDescriptions}
1060
- setUpdatedDescriptions={setUpdatedDescriptions}
1061
- articleId={product?.article?.id_article}
1062
- version={version}
1063
- dinamicHeight={true}
79
+ inputGroup={dataGroup}
80
+ dataInputs={datasheets[1]}
1064
81
  />
1065
- ) : (
1066
- <p>no tienes este servicio</p>
1067
82
  ))}
83
+ {activeTab === "Descripción" && (
84
+ <InputGroup
85
+ activeSection={activeTab}
86
+ inputGroup={descriptions[0]}
87
+ />
88
+ )}
1068
89
 
1069
90
  {activeTab === "Imágenes" &&
1070
- (product?.services?.images === 1 ? (
1071
- <section className="container">
1072
- <div {...getRootProps({ className: "dropzone" })}>
1073
- <input {...getInputProps()} />
1074
- <aside>{thumbs()}</aside>
1075
- </div>
1076
- </section>
1077
- ) : (
1078
- <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
+ />
1079
98
  ))}
1080
99
  </div>
1081
- {(userAssigned(activeTab, "especialist" || "facilitator") ||
1082
- auditorAssigned()) && (
1083
- <div className="commentary-box">
1084
- {!comment ? (
1085
- <div className="commentary">
1086
- <TagAndInput
1087
- label={"Caja de Comentario"}
1088
- inputType={"textarea"}
1089
- inputCols={80}
1090
- inputRows={4}
1091
- inputId={"commentary-box"}
1092
- index={0}
1093
- />
1094
- <div className="buttons-box">
1095
- <Button
1096
- buttonType={"general-transparent-button"}
1097
- label={"Enviar comentario"}
1098
- onClick={(e) =>
1099
- createComment(
1100
- e,
1101
- document.querySelector(
1102
- "#description-commentary-box-0 .ql-container .ql-editor > p"
1103
- ).innerHTML,
1104
- activeTab
1105
- )
1106
- }
1107
- />
1108
- </div>
1109
- </div>
1110
- ) : (
1111
- <div className="feedback-box">
1112
- <Commentary
1113
- comment={comment.message}
1114
- reviewed={crossComment}
1115
- />
1116
- <Button
1117
- buttonType={"circular-button accept-button"}
1118
- onClick={async () => {
1119
- setCrossComment(true);
1120
- commentRevised();
1121
- }}
1122
- />
1123
- </div>
1124
- )}
1125
- <Button
1126
- buttonType={
1127
- !requiredNull[activeTab] === 0 ||
1128
- !approveRejectButtons() ||
1129
- !evaluationComplete(activeTab)
1130
- ? "general-button-disabled"
1131
- : "general-green-button"
1132
- }
1133
- label={"Enviar evaluación"}
1134
- onClick={() => sendToFacilitator()}
1135
- />
1136
- </div>
1137
- )}
1138
100
  </div>
1139
101
  </div>
1140
102
  {showModal && (
1141
- <ProductImageModal
1142
- images={images}
1143
- setShowModal={setShowModal}
1144
- sendToFacilitator={sendToFacilitator}
1145
- approveRejectButtons={approveRejectButtons}
1146
- />
1147
- )}
1148
- {message.length > 0 && (
1149
- <GenericModal
1150
- buttonType={"delete-product"}
1151
- componentsArray={
1152
- componentsArray.length > 0
1153
- ? componentsArray
1154
- : [
1155
- <ScreenHeader
1156
- key="1"
1157
- headerType={"retailer-name-header"}
1158
- text={message}
1159
- color={"white"}
1160
- />,
1161
- ]
1162
- }
1163
- onClick={() => setMessage("")}
1164
- />
103
+ <ProductImageModal images={images} setShowModal={setShowModal} />
1165
104
  )}
1166
105
  </Container>
1167
106
  );