contentoh-components-library 21.3.58 → 21.3.60

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 (40) hide show
  1. package/.env.development +2 -0
  2. package/dist/components/molecules/CarouselImagesLogin/index.js +1 -1
  3. package/dist/components/molecules/HeaderTop/index.js +68 -11
  4. package/dist/components/organisms/Chat/Chat.stories.js +21 -1
  5. package/dist/components/organisms/Chat/ContainerItems/index.js +19 -3
  6. package/dist/components/organisms/Chat/ContainerItems/styles.js +1 -1
  7. package/dist/components/organisms/Chat/ContentChat/index.js +343 -191
  8. package/dist/components/organisms/Chat/Footer/index.js +48 -39
  9. package/dist/components/organisms/Chat/index.js +48 -3
  10. package/dist/components/organisms/FullProductNameHeader/index.js +2 -2
  11. package/dist/components/organisms/SideModal/SideModal.stories.js +42 -0
  12. package/dist/components/organisms/SideModal/index.js +61 -0
  13. package/dist/components/organisms/SideModal/styles.js +18 -0
  14. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +172 -127
  15. package/dist/components/pages/ProviderProductEdition/index.js +188 -129
  16. package/dist/components/pages/ProviderProductEdition/styles.js +1 -1
  17. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +61 -71
  18. package/dist/components/pages/RetailerProductEdition/index.js +267 -274
  19. package/dist/components/pages/RetailerProductEdition/styles.js +1 -1
  20. package/dist/components/pages/RetailerProductEdition/utils.js +61 -2
  21. package/package.json +1 -1
  22. package/src/components/molecules/CarouselImagesLogin/index.js +1 -1
  23. package/src/components/molecules/HeaderTop/index.js +52 -6
  24. package/src/components/organisms/Chat/Chat.stories.js +21 -0
  25. package/src/components/organisms/Chat/ContainerItems/index.js +18 -2
  26. package/src/components/organisms/Chat/ContainerItems/styles.js +10 -2
  27. package/src/components/organisms/Chat/ContentChat/index.js +81 -6
  28. package/src/components/organisms/Chat/Footer/index.js +11 -0
  29. package/src/components/organisms/Chat/index.js +47 -3
  30. package/src/components/organisms/FullProductNameHeader/index.js +1 -1
  31. package/src/components/organisms/SideModal/SideModal.stories.js +23 -0
  32. package/src/components/organisms/SideModal/index.js +41 -0
  33. package/src/components/organisms/SideModal/styles.js +21 -0
  34. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +177 -130
  35. package/src/components/pages/ProviderProductEdition/index.js +105 -55
  36. package/src/components/pages/ProviderProductEdition/styles.js +5 -1
  37. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +6 -23
  38. package/src/components/pages/RetailerProductEdition/index.js +111 -135
  39. package/src/components/pages/RetailerProductEdition/styles.js +4 -0
  40. package/src/components/pages/RetailerProductEdition/utils.js +37 -0
@@ -0,0 +1,21 @@
1
+ import styled from "styled-components";
2
+
3
+ export const Container = styled.div`
4
+ width: 100vw;
5
+ height: 100vh;
6
+ position: fixed;
7
+ z-index: 9999999;
8
+ background-color: transparent;
9
+
10
+ .modal-container {
11
+ width: 600px;
12
+ height: 100%;
13
+ position: absolute;
14
+ right: -600px;
15
+ background-color: #fff;
16
+
17
+ &.shown {
18
+ right: 0;
19
+ }
20
+ }
21
+ `;
@@ -16,120 +16,194 @@ ProviderProductEditionDefault.args = {
16
16
  Imágenes: false,
17
17
  },
18
18
  token:
19
- "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI1ODg0YWUzNC01OWQ2LTQ0NTQtYjk4ZS04MjE1MThiY2MzYTciLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6IjU4ODRhZTM0LTU5ZDYtNDQ1NC1iOThlLTgyMTUxOGJjYzNhNyIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiJjOWRjOWE1OS0xNTAxLTQyOTgtODRjMi03MDM4NzRhNzIxMTEiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY4MjQ2Mjc4NCwibmFtZSI6IkNhZGVuYSBJc21hZWwiLCJwaG9uZV9udW1iZXIiOiIrNTIzMTExMzY2MzM2IiwiZXhwIjoxNjgyNDY2Mzg0LCJpYXQiOjE2ODI0NjI3ODQsImVtYWlsIjoiY2FkZW5hLmlzbWFlbEBhbGxmcmVlbWFpbC5uZXQifQ.ebKSsnTxKoNfWDoKGFJRlLWgNulGj4KrDe0EgsqLEIVx3Qu0lgmg43UY5tZ3FUlRE8XO2UGq0XxEgdbGOe_4nbTRYigdvxP3bh3cPQ0s68hlTDfhPRvxVJYlaO4s0rhk9rt_VVteTyLfhPHFCymrkFYYDB8bVvKnxUUCX_nJvqGQkl48JiYgvYVLpuus5FvRkGwi1u-jTtMoKiUK-jw9MxI18hD0FWXVnJr-q9ftf2d0bv4JRv4XJ_tRh1N6jps5n3c_KKZswqRfGLU-8MS2X3DU6pDqEP2BZAGXksiFYXYH_uHE6BKJAl7EEhkDTqZsx_jWtVSXTdDg_QDKrOw0Kg",
19
+ "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJmNTkyN2Y4ZS1jYmY3LTQ5MjItOWUwOS1lNjllYzBiMjczMWEiLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6ImY1OTI3ZjhlLWNiZjctNDkyMi05ZTA5LWU2OWVjMGIyNzMxYSIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiIyM2Q1NTlmYi1jMzIwLTRhMjItYjJmNy1lOThhYTFhZGEyNmYiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY4MzkyNjgyMSwibmFtZSI6IklzbWFlbCBMb3BleiIsInBob25lX251bWJlciI6Iis1MjMxMTEzNjYzMzYiLCJleHAiOjE2ODM5MzA0MjEsImlhdCI6MTY4MzkyNjgyMSwiZW1haWwiOiJpbG9wZXpAY29udGVudG9oLmNvbSJ9.TvCoaKoctj5mypXWMz3NyV1Vm1ToBV0vJmpVyZSQw4-ikTChkxcZ5tFYvqhk1GdvNCFttfSQIqM-14dAYYBc28YwwKP86gqOuzB1fG41rN5x1Yx3tkJq6hiVRgiBbSHWtThA9c8VnxNQbrJiaRTvvkDiM5KNTEst1oxQHL5Ct9_iKQMJMRFie7Xv0xnyS0qZ6QHK4Q2A9OHsnDkAuumALZJcE19Zh6VgSitgWrZiz3x5Text4Q-U-R48NUAzUFirAzYZzJN_fCme5pGf1AnUaZjeUjPsmrV5TBVzPEYwXO0KG8lYjL8id80D7tbGs28ZIK6B4rf3-eqI_ngmBB4CjQ",
20
20
  articleId: 238,
21
21
  category: 846,
22
22
  version: 2,
23
23
  productSelected: {
24
- orderId: 15165,
25
- article_status: "AAC",
26
- datasheet_status: "AAC",
27
- description_status: "FAP",
28
- images_status: "FAP",
24
+ orderId: 15142,
25
+ status: "AA",
26
+ datasheet_status: "AA",
29
27
  prio: "none",
30
28
  version: 3,
31
- brand: null,
29
+ description_status: "AA",
30
+ images_status: "AA",
31
+ brand: "Garnier",
32
+ retailerOrder: 0,
33
+ missing: {
34
+ datasheet: null,
35
+ descriptions: null,
36
+ images: null,
37
+ },
38
+ services: {
39
+ datasheets: 1,
40
+ descriptions: 1,
41
+ images: 1,
42
+ },
32
43
  article: {
33
- category: "Puertas y Ventanas|Molduras|Molduras Madera Blanda",
34
- company_name: "Demo",
35
- id_company: 923,
44
+ category:
45
+ "Salud y Belleza|Cuidado del Cabello|Shampoos y Acondicionadores",
46
+ company_name: "GRUPO BRAHMA",
36
47
  country: "México",
37
- id_category: "2366",
38
- id_article: 39336,
39
- name: "Prueba Auditoria",
40
- upc: "100030124",
48
+ id_category: "697",
49
+ id_datasheet_especialist: 54,
50
+ id_datasheet_facilitator: 52,
51
+ id_description_especialist: 54,
52
+ id_description_facilitator: 52,
53
+ id_images_especialist: 55,
54
+ id_images_facilitator: 53,
55
+ id_order: 15142,
56
+ id_article: 39270,
57
+ id_auditor: 37,
58
+ name: "Acondicionador Garnier Fructis 650 ml",
59
+ timestamp: "2023-03-27T18:37:48.000Z",
60
+ upc: "750955287656712",
41
61
  },
42
62
  retailers: [
43
63
  {
44
- id: 58,
45
- name: "The Home Depot Golden",
64
+ id: 12,
65
+ name: "La Comer",
46
66
  },
47
67
  {
48
- id: 68,
49
- name: "The Home Depot Dropship",
68
+ id: 29,
69
+ name: "Farmacias del Ahorro",
70
+ },
71
+ {
72
+ id: 63,
73
+ name: "DAX",
50
74
  },
51
75
  ],
52
- services: {
53
- datasheets: 1,
54
- descriptions: 1,
55
- images: 1,
56
- },
57
76
  statusByRetailer: {
58
- 58: {
59
- datasheet: "AAC",
60
- description: "FAP",
61
- images: "FAP",
77
+ 12: {
78
+ datasheet: "AA",
79
+ description: "AA",
80
+ images: "AA",
81
+ },
82
+ 29: {
83
+ datasheet: "AA",
84
+ description: "AA",
85
+ images: "AA",
86
+ },
87
+ 63: {
88
+ datasheet: "AA",
89
+ description: "AA",
90
+ images: "AA",
62
91
  },
63
92
  },
64
- retailersWithService: ["58"],
65
- id_article: 39336,
93
+ checked: false,
66
94
  retailersAvailable: [
67
95
  {
68
- id: 58,
69
- name: "The Home Depot Golden",
96
+ id: 12,
97
+ name: "La Comer",
98
+ },
99
+ {
100
+ id: 29,
101
+ name: "Farmacias del Ahorro",
70
102
  },
71
103
  {
72
- id: 68,
73
- name: "The Home Depot Dropship",
104
+ id: 63,
105
+ name: "DAX",
74
106
  },
75
107
  ],
108
+ categoryName:
109
+ "Salud y Belleza|Cuidado del Cabello|Shampoos y Acondicionadores",
110
+ upc: "750955287656712",
111
+ id_article: 39270,
112
+ id_order: 15142,
76
113
  },
77
114
  productToEdit: {
78
- ArticleId: 39336,
79
- idCategory: "2366",
115
+ ArticleId: 39270,
116
+ idCategory: "697",
80
117
  product: {
81
- orderId: 15165,
82
- article_status: "AAC",
83
- datasheet_status: "AAC",
84
- description_status: "FAP",
85
- images_status: "FAP",
118
+ orderId: 15142,
119
+ status: "AA",
120
+ datasheet_status: "AA",
86
121
  prio: "none",
87
122
  version: 3,
88
- brand: null,
123
+ description_status: "AA",
124
+ images_status: "AA",
125
+ brand: "Garnier",
126
+ retailerOrder: 0,
127
+ missing: {
128
+ datasheet: null,
129
+ descriptions: null,
130
+ images: null,
131
+ },
132
+ services: {
133
+ datasheets: 1,
134
+ descriptions: 1,
135
+ images: 1,
136
+ },
89
137
  article: {
90
- category: "Puertas y Ventanas|Molduras|Molduras Madera Blanda",
91
- company_name: "Demo",
92
- id_company: 923,
138
+ category:
139
+ "Salud y Belleza|Cuidado del Cabello|Shampoos y Acondicionadores",
140
+ company_name: "GRUPO BRAHMA",
93
141
  country: "México",
94
- id_category: "2366",
95
- id_article: 39336,
96
- name: "Prueba Auditoria",
97
- upc: "100030124",
142
+ id_category: "697",
143
+ id_datasheet_especialist: 54,
144
+ id_datasheet_facilitator: 52,
145
+ id_description_especialist: 54,
146
+ id_description_facilitator: 52,
147
+ id_images_especialist: 55,
148
+ id_images_facilitator: 53,
149
+ id_order: 15142,
150
+ id_article: 39270,
151
+ id_auditor: 37,
152
+ name: "Acondicionador Garnier Fructis 650 ml",
153
+ timestamp: "2023-03-27T18:37:48.000Z",
154
+ upc: "750955287656712",
98
155
  },
99
156
  retailers: [
100
157
  {
101
- id: 58,
102
- name: "The Home Depot Golden",
158
+ id: 12,
159
+ name: "La Comer",
103
160
  },
104
161
  {
105
- id: 68,
106
- name: "The Home Depot Dropship",
162
+ id: 29,
163
+ name: "Farmacias del Ahorro",
164
+ },
165
+ {
166
+ id: 63,
167
+ name: "DAX",
107
168
  },
108
169
  ],
109
- services: {
110
- datasheets: 1,
111
- descriptions: 1,
112
- images: 1,
113
- },
114
170
  statusByRetailer: {
115
- 58: {
116
- datasheet: "AAC",
117
- description: "FAP",
118
- images: "FAP",
171
+ 12: {
172
+ datasheet: "AA",
173
+ description: "AA",
174
+ images: "AA",
175
+ },
176
+ 29: {
177
+ datasheet: "AA",
178
+ description: "AA",
179
+ images: "AA",
180
+ },
181
+ 63: {
182
+ datasheet: "AA",
183
+ description: "AA",
184
+ images: "AA",
119
185
  },
120
186
  },
121
- retailersWithService: ["58"],
122
- id_article: 39336,
187
+ checked: false,
123
188
  retailersAvailable: [
124
189
  {
125
- id: 58,
126
- name: "The Home Depot Golden",
190
+ id: 12,
191
+ name: "La Comer",
127
192
  },
128
193
  {
129
- id: 68,
130
- name: "The Home Depot Dropship",
194
+ id: 29,
195
+ name: "Farmacias del Ahorro",
196
+ },
197
+ {
198
+ id: 63,
199
+ name: "DAX",
131
200
  },
132
201
  ],
202
+ categoryName:
203
+ "Salud y Belleza|Cuidado del Cabello|Shampoos y Acondicionadores",
204
+ upc: "750955287656712",
205
+ id_article: 39270,
206
+ id_order: 15142,
133
207
  },
134
208
  },
135
209
  location: {
@@ -138,90 +212,63 @@ ProviderProductEditionDefault.args = {
138
212
  hash: "",
139
213
  state: {
140
214
  withChat: true,
215
+ chatType: "product_status",
216
+ origin: "RequestWithContentoh",
141
217
  },
142
218
  key: "24vwut",
143
219
  },
144
220
  user: {
145
- id_user: 59,
146
- name: "Cadena",
147
- last_name: "Comercial",
148
- email: "cadena.ismael@allfreemail.net",
149
- position: "Admin",
221
+ id_user: 28,
222
+ name: "Ismael",
223
+ last_name: "López",
224
+ email: "ilopez@contentoh.com",
225
+ position: "Test States",
150
226
  telephone: "+523111366336",
151
227
  country: "México",
152
- id_company: 817,
153
- id_cognito: "5884ae34-59d6-4454-b98e-821518bcc3a7",
228
+ id_company: 1,
229
+ id_cognito: "f5927f8e-cbf7-4922-9e09-e69ec0b2731a",
154
230
  birth_Date: null,
155
231
  about_me: "",
156
232
  zip_code: "",
157
233
  address: "",
158
234
  job: "",
159
- id_stripe: "",
235
+ id_stripe: "cus_KuEt6R6vwmN09f",
160
236
  id_role: 0,
161
237
  active: 1,
162
- is_retailer: 1,
163
- email_notify: 0,
164
- is_user_tech: null,
238
+ is_retailer: 0,
239
+ email_notify: 1,
240
+ is_user_tech: "ADMIN-AS",
165
241
  membership: {
166
- id: 47,
167
- start_date: "2022-05-25T14:31:12.000Z",
168
- end_date: "2023-05-25T14:31:12.000Z",
169
- planID: 5,
170
- plan: "prod_Ktl6B5Ou2gqTB2",
242
+ id: 76,
243
+ start_date: "2022-01-18T17:25:35.000Z",
244
+ end_date: "2023-01-18T17:25:35.000Z",
245
+ planID: 8,
246
+ plan: "prod_KtlhECVSFG2iro",
171
247
  name: "Plan Pro",
172
- user_limit: "5",
173
- products_limit: "500",
174
- type: "PyMES",
248
+ user_limit: "20",
249
+ products_limit: "5000",
250
+ type: "Enterprise",
175
251
  },
176
- src: "https://content-management-profile.s3.amazonaws.com/id-59/59.png?1682462786497",
252
+ src: "https://content-management-profile.s3.amazonaws.com/id-28/28.png?1683926822779",
177
253
  },
178
254
  company: {
179
- id_company: 817,
180
- trade_name: "Retailer acc",
181
- company_name: "Retailer acc",
182
- rfc: "ASER12345",
183
- adress: "Av. Insurgentes",
184
- about_company: null,
185
- telephone: null,
186
- web_site: null,
187
- zip_code: null,
255
+ id_company: 1,
256
+ trade_name: "GRUPO BRAHMA",
257
+ company_name: "GRUPO BRAHMA",
258
+ rfc: "XAXX010101000",
259
+ adress: "AA",
260
+ about_company: "",
261
+ telephone: "",
262
+ web_site: "",
263
+ zip_code: "",
188
264
  email: null,
189
- social_link: null,
190
- is_retailer: 1,
191
- financedRetailers: [
192
- {
193
- id: 68,
194
- name: "The Home Depot Dropship",
195
- country: "México",
196
- id_region: 1,
197
- active: 1,
198
- },
199
- ],
265
+ social_link: "",
266
+ is_retailer: 0,
200
267
  retailers: [
201
268
  {
202
- id: 59,
203
- name: "The Home Depot Platinum",
204
- country: "México",
205
- },
206
- {
207
- id: 60,
208
- name: "The Home Depot Resizing",
209
- country: "México",
210
- },
211
- {
212
- id: 61,
213
- name: "Home Depot TAB",
214
- country: "México",
215
- },
216
- {
217
- id: 68,
218
- name: "The Home Depot Dropship",
219
- country: "México",
220
- },
221
- {
222
- id: 58,
223
- name: "The Home Depot Golden",
224
- country: "México",
269
+ id: null,
270
+ name: null,
271
+ country: null,
225
272
  },
226
273
  ],
227
274
  },
@@ -39,6 +39,9 @@ import Slide1_4 from "../../../assets/images/sliderToolTip/slide4.svg";
39
39
  import Slide1_5 from "../../../assets/images/sliderToolTip/slide5.svg";
40
40
  import { VersionSelector } from "../../organisms/VersionSelector";
41
41
  import { useCloseModal } from "../../../global-files/customHooks";
42
+ import { createMessage, sendMessage } from "../RetailerProductEdition/utils";
43
+ import { Modal } from "../../organisms/Modal";
44
+ import { ButtonV2 } from "../../atoms/ButtonV2";
42
45
 
43
46
  const reducerImages = (state, action) => {
44
47
  let { values, attrForImgs, inputsByRetailer } = state;
@@ -214,6 +217,7 @@ export const ProviderProductEdition = ({
214
217
  const isRetailer = user?.is_retailer;
215
218
  const [loading, setLoading] = useState(true);
216
219
  const [validatedAll, setValidatedAll] = useState(false);
220
+ const [showRejectModal, setShowRejectModal] = useState(false);
217
221
 
218
222
  const originProp = location?.state?.origin;
219
223
  const [origin, setOrigin] = useState({
@@ -343,28 +347,6 @@ export const ProviderProductEdition = ({
343
347
  (type) => {
344
348
  const formatter = new Intl.ListFormat("es", { type: "conjunction" });
345
349
  switch (type) {
346
- case "error":
347
- setGlobalModal({
348
- message: `${activeTab} rechazada`,
349
- detail: "Agrega tu comentarios para enviar el rechazo",
350
- img: errorModal,
351
- textArea: true,
352
- button1: {
353
- name: "Enviar",
354
- action: (e) => {
355
- const textArea = document.querySelector("#area");
356
- if (textArea.value) {
357
- textArea.style.border = "none";
358
- createComment(e, textArea.value);
359
- showGlobalModal("commentsSent");
360
- validatedAll ? validateAll("R") : sendEvaluation("R");
361
- } else {
362
- textArea.style.border = "2px solid red";
363
- }
364
- },
365
- },
366
- });
367
- break;
368
350
  case "generic":
369
351
  setGlobalModal(dataGenericModal);
370
352
  break;
@@ -516,7 +498,9 @@ export const ProviderProductEdition = ({
516
498
  );
517
499
  setServicesData(parsedResponse);
518
500
  }
519
- !activeRetailer.id && setActiveRetailer(active ? active : retailers[0]);
501
+ retailers &&
502
+ !activeRetailer.id &&
503
+ setActiveRetailer(active ? active : retailers[0]);
520
504
  };
521
505
 
522
506
  const isRevision = () => {
@@ -592,7 +576,7 @@ export const ProviderProductEdition = ({
592
576
  });
593
577
  }
594
578
  setProduct(productTemp);
595
- setActivePercentage(retailers[0]?.percentage);
579
+ retailers && setActivePercentage(retailers[0]?.percentage);
596
580
  }, [percentages]);
597
581
 
598
582
  const loadInputs = () => {
@@ -833,32 +817,19 @@ export const ProviderProductEdition = ({
833
817
  }
834
818
  };
835
819
 
836
- const createComment = async (e, body, tab) => {
837
- let concept = "";
838
- switch (activeTab) {
839
- case "Ficha técnica":
840
- concept = "datasheet";
841
- break;
842
- case "Imágenes":
843
- concept = "images";
844
- break;
845
-
846
- default:
847
- concept = "description";
848
- break;
849
- }
820
+ const createComment = async (messages = [], retailerId) => {
850
821
  const data = {
851
- articleId: product?.id_article,
852
- orderId: product?.orderId,
853
- message: body,
854
- concept: concept,
855
- version: version,
856
- };
857
- await axios.post(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
858
- headers: {
859
- Authorization: token,
822
+ paramsBody: {
823
+ id: product.article.id_article || productEdit.ArticleId,
824
+ version: version,
825
+ items: messages,
826
+ retailerId: retailerId,
827
+ status: product.status || productEdit.product.status,
860
828
  },
861
- });
829
+ paramsHeader: { Authorization: token },
830
+ };
831
+ setMessage("");
832
+ return sendMessage(data);
862
833
  };
863
834
 
864
835
  useEffect(() => {
@@ -1058,6 +1029,27 @@ export const ProviderProductEdition = ({
1058
1029
  const { newArticleStatus, newServiceStatus, newStatus } = JSON.parse(
1059
1030
  res.data.body
1060
1031
  );
1032
+
1033
+ const message = createMessage(
1034
+ product.retailers || product.retailersAvailable,
1035
+ activeRetailer.id,
1036
+ product[sectionStatusKey],
1037
+ newStatus,
1038
+ activeTab
1039
+ );
1040
+
1041
+ const messageData = {
1042
+ paramsBody: {
1043
+ id: product.article.id_article || productEdit.ArticleId,
1044
+ version: version,
1045
+ items: [{ type: "status", value: message }],
1046
+ retailerId: activeRetailer.id,
1047
+ status: product.status || productEdit.product.status,
1048
+ },
1049
+ paramsHeader: { Authorization: token },
1050
+ };
1051
+ await sendMessage(messageData);
1052
+
1061
1053
  if (newArticleStatus) productTemp.status = newArticleStatus[articleId];
1062
1054
  const retailerStatusCopy = { ...retailerStatus };
1063
1055
  retailerStatusCopy[activeRetailer.id][concept] = newStatus;
@@ -1089,6 +1081,7 @@ export const ProviderProductEdition = ({
1089
1081
  result,
1090
1082
  isAproved: result === "A",
1091
1083
  };
1084
+ const messages = [];
1092
1085
  servicesData?.forEach((ret) => {
1093
1086
  const { service, id_retailer } = ret;
1094
1087
  let data = {};
@@ -1105,6 +1098,18 @@ export const ProviderProductEdition = ({
1105
1098
  },
1106
1099
  })
1107
1100
  );
1101
+ if (product[`${ret.service}_status`] !== "NS") {
1102
+ const message = createMessage(
1103
+ product.retailers,
1104
+ ret.id_retailer,
1105
+ product[`${ret.service}_status`],
1106
+ `${result}A`,
1107
+ ret.service
1108
+ );
1109
+ messages.push(
1110
+ createComment([{ type: "status", value: message }], ret.id_retailer)
1111
+ );
1112
+ }
1108
1113
  });
1109
1114
  await Promise.all(evaluationArray);
1110
1115
  const userType = user.is_retailer === 1 ? "CA" : "P";
@@ -1144,6 +1149,7 @@ export const ProviderProductEdition = ({
1144
1149
  product: productTemp,
1145
1150
  })
1146
1151
  );
1152
+ await Promise.all(messages);
1147
1153
 
1148
1154
  await loadData();
1149
1155
  } catch (error) {
@@ -1271,8 +1277,7 @@ export const ProviderProductEdition = ({
1271
1277
  return;
1272
1278
  } else if (user.is_retailer) {
1273
1279
  if (product.id_order || product.orderId) {
1274
- setValidatedAll(true);
1275
- showGlobalModal("error");
1280
+ sendEvaluation("R");
1276
1281
  } else {
1277
1282
  setDataGenericModal((prev) => ({
1278
1283
  ...prev,
@@ -1284,8 +1289,7 @@ export const ProviderProductEdition = ({
1284
1289
  showGlobalModal("generic");
1285
1290
  }
1286
1291
  } else {
1287
- setValidatedAll(true);
1288
- showGlobalModal("error");
1292
+ sendEvaluation("R");
1289
1293
  }
1290
1294
  }
1291
1295
  };
@@ -1294,6 +1298,7 @@ export const ProviderProductEdition = ({
1294
1298
  <HeaderTop
1295
1299
  setHeaderTop={setHeaderTop}
1296
1300
  withChat={location?.state?.withChat}
1301
+ chatType={location?.state?.chatType}
1297
1302
  productSelected={productSelected}
1298
1303
  token={token}
1299
1304
  activeRetailer={activeRetailer}
@@ -1372,7 +1377,7 @@ export const ProviderProductEdition = ({
1372
1377
  } else if (user.is_retailer) {
1373
1378
  if (product.id_order || product.orderId) {
1374
1379
  setValidatedAll(true);
1375
- showGlobalModal("error");
1380
+ setShowRejectModal(true);
1376
1381
  } else {
1377
1382
  setDataGenericModal((prev) => ({
1378
1383
  ...prev,
@@ -1384,12 +1389,14 @@ export const ProviderProductEdition = ({
1384
1389
  showGlobalModal("generic");
1385
1390
  }
1386
1391
  } else {
1392
+ setShowRejectModal(true);
1387
1393
  setValidatedAll(true);
1388
- showGlobalModal("error");
1389
1394
  }
1390
1395
  }}
1391
1396
  approve={() => sendToEvaluation("A")}
1392
- reject={() => sendToEvaluation("R")}
1397
+ reject={() => {
1398
+ setShowRejectModal(true);
1399
+ }}
1393
1400
  />
1394
1401
  <FullTabsMenu
1395
1402
  tabsSections={tabsSections}
@@ -1624,6 +1631,49 @@ export const ProviderProductEdition = ({
1624
1631
  jwt={token}
1625
1632
  />
1626
1633
  )}
1634
+ {showRejectModal && (
1635
+ <Modal
1636
+ title={"Agregar mensaje de rechazo"}
1637
+ show={showRejectModal}
1638
+ customComponent={
1639
+ <TagAndInput
1640
+ label={"Caja de Comentario"}
1641
+ inputType={"textarea"}
1642
+ inputId={"modal-message-box"}
1643
+ index={0}
1644
+ color={"white"}
1645
+ />
1646
+ }
1647
+ buttons={[
1648
+ <ButtonV2
1649
+ key={"btn-Cancelar"}
1650
+ type={"white"}
1651
+ label={"Cancelar"}
1652
+ size={12}
1653
+ onClick={() => {
1654
+ setShowRejectModal(false);
1655
+ }}
1656
+ />,
1657
+ <ButtonV2
1658
+ key={"btn-Aceptar"}
1659
+ type={"pink"}
1660
+ label={"Aceptar"}
1661
+ size={12}
1662
+ onClick={async () => {
1663
+ const body = document.querySelector(
1664
+ "#modal-message-box .ql-container .ql-editor > p"
1665
+ ).innerHTML;
1666
+ const messages = [
1667
+ { type: "message", value: body?.replace(/<.*?\/?>/gm, "") },
1668
+ ];
1669
+ await createComment(messages, activeRetailer.id);
1670
+ validatedAll ? validateAll("R") : sendToEvaluation("R");
1671
+ setShowRejectModal(false);
1672
+ }}
1673
+ />,
1674
+ ]}
1675
+ />
1676
+ )}
1627
1677
  </Container>
1628
1678
  );
1629
1679
  };