contentoh-components-library 21.1.55 → 21.1.59

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 (29) hide show
  1. package/dist/components/atoms/GeneralInput/index.js +1 -0
  2. package/dist/components/molecules/HeaderTop/index.js +1 -4
  3. package/dist/components/molecules/RetailerSelector/index.js +0 -32
  4. package/dist/components/molecules/StatusAsignationInfo/index.js +2 -3
  5. package/dist/components/organisms/FullProductNameHeader/index.js +1 -1
  6. package/dist/components/organisms/FullTabsMenu/index.js +1 -3
  7. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +64 -122
  8. package/dist/components/pages/ProviderProductEdition/index.js +348 -330
  9. package/dist/components/pages/RegistrationLoginFirstStep/RegistrationLoginFirstStep.stories.js +37 -0
  10. package/dist/components/pages/RegistrationLoginFirstStep/index.js +269 -0
  11. package/dist/components/pages/RegistrationLoginFirstStep/styles.js +20 -0
  12. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +86 -41
  13. package/dist/components/pages/RetailerProductEdition/index.js +210 -198
  14. package/dist/components/pages/RetailerProductEdition/styles.js +1 -1
  15. package/dist/global-files/data.js +2 -1
  16. package/package.json +1 -1
  17. package/src/components/atoms/GeneralInput/index.js +1 -0
  18. package/src/components/atoms/ValidationPanel/index.js +1 -1
  19. package/src/components/molecules/HeaderTop/index.js +1 -6
  20. package/src/components/molecules/RetailerSelector/index.js +0 -15
  21. package/src/components/molecules/StatusAsignationInfo/index.js +2 -3
  22. package/src/components/organisms/FullProductNameHeader/index.js +1 -1
  23. package/src/components/organisms/FullTabsMenu/index.js +0 -2
  24. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +70 -140
  25. package/src/components/pages/ProviderProductEdition/index.js +170 -172
  26. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +87 -38
  27. package/src/components/pages/RetailerProductEdition/index.js +140 -166
  28. package/src/components/pages/RetailerProductEdition/styles.js +1 -1
  29. package/src/global-files/data.js +2 -1
@@ -177,6 +177,7 @@ export const ProviderProductEdition = ({
177
177
  const isRetailer = user?.is_retailer;
178
178
  const [loading, setLoading] = useState(true);
179
179
  const [statusArray, setStatusArray] = useState([]);
180
+ console.log(retailerStatus, "retailerStatus");
180
181
 
181
182
  const originProp = location?.state?.origin;
182
183
  const [origin, setOrigin] = useState({
@@ -208,6 +209,9 @@ export const ProviderProductEdition = ({
208
209
  const [modalViewTextArea, setModalViewTextArea] = useState(false);
209
210
  const [socketType, setSocketType] = useState(null);
210
211
  const [saving, setSaving] = useState(loading);
212
+ const [retailerStatus, setRetailerStatus] = useState(
213
+ product.statusByRetailer
214
+ );
211
215
 
212
216
  useEffect(() => {
213
217
  checkAll && setSelectedImages(images.values);
@@ -233,11 +237,8 @@ export const ProviderProductEdition = ({
233
237
  );
234
238
  }
235
239
 
236
- //setActiveRetailer(product?.retailers[0]);
237
- setImages({
238
- action: "init",
239
- init: services[2],
240
- });
240
+ // setActiveRetailer(product?.retailers[0]);
241
+ setImages({ action: "init", init: services[2] });
241
242
  if (services[2]?.values?.length > 0) setActiveImage(0);
242
243
 
243
244
  getPercentage({ data: [product] }).then((res) => setPercentages(res));
@@ -256,10 +257,11 @@ export const ProviderProductEdition = ({
256
257
  }&end=true`
257
258
  );
258
259
  const parsedResponse = JSON.parse(servicesResponse?.data?.body).data;
260
+ const retailerResponse = parsedResponse?.map((srv) => srv.id_retailer);
259
261
  let retailers = product.retailers || product.retailersAvailable;
260
- let active = retailers?.filter((retailer) =>
261
- parsedResponse?.map((srv) => srv.id_retailer).includes(retailer.id)
262
- )[0];
262
+ let active = retailers?.find((retailer) =>
263
+ retailerResponse.includes(retailer.id)
264
+ );
263
265
  !activeRetailer.id && setActiveRetailer(active ? active : retailers[0]);
264
266
  setServicesData(parsedResponse);
265
267
  }
@@ -280,15 +282,15 @@ export const ProviderProductEdition = ({
280
282
  if (revision && currentService === "AP") return true;
281
283
  } else {
282
284
  const { product } = productEdit;
283
- if (
284
- orgn === "Contentoh" ||
285
- (["RECEIVED", "IN_PROGRESS"].includes(currentService) &&
286
- orgn === "RequestWithoutContentoh") ||
287
- (currentService === "AA" && orgn === "RequestWithContentoh") ||
288
- (currentService === "RC" &&
289
- orgn === "RequestWithoutContentoh" &&
290
- (!product.id_order || !product.orderId))
291
- )
285
+ const isRequestWithoutContentoh =
286
+ orgn === "RequestWithoutContentoh" &&
287
+ (["R", "CA"].includes(currentService) ||
288
+ (currentService === "RCA" &&
289
+ (!product.id_order || !product.orderId)));
290
+ const isRequestWithContentoh =
291
+ orgn === "RequestWithContentoh" && currentService === "AA";
292
+ const isContentoh = orgn === "Contentoh" && currentService === "AA";
293
+ if (isContentoh || isRequestWithoutContentoh || isRequestWithContentoh)
292
294
  return true;
293
295
  }
294
296
  }
@@ -305,26 +307,26 @@ export const ProviderProductEdition = ({
305
307
  setInCart(arr.some((e) => e.articleId === product.id_article));
306
308
  };
307
309
 
308
- useEffect(async () => {
310
+ useEffect(() => {
309
311
  sessionStorage.setItem("user", JSON.stringify(user));
310
312
  loadData();
311
313
  getCart();
312
- setUserGroups(await fetchUsers(token));
314
+ fetchUsers(token).then((res) => setUserGroups(res));
313
315
  let arr = [];
316
+ // ?? Que sentido tiene verificar los roles de colaborador en la app de proveedor
314
317
  switch (user.id_role) {
315
318
  case 7:
316
319
  case 8:
317
- arr = ["IN_PROGRESS", "RF", "RA"];
320
+ arr = ["CA", "RC", "RA"];
318
321
  break;
319
322
  case 4:
320
323
  case 5:
321
- arr = ["RF", "AF", "AA", "AP", "AC"];
324
+ arr = ["RC", "AC", "AA", "AP", "ACA"];
322
325
  break;
323
326
  case 6:
324
- arr = ["RP", "RC", "AF"];
327
+ arr = ["RP", "RCA", "AC"];
325
328
  break;
326
329
  default:
327
- arr = [];
328
330
  break;
329
331
  }
330
332
  setStatusArray(arr);
@@ -342,9 +344,9 @@ export const ProviderProductEdition = ({
342
344
  const productTemp = product;
343
345
  const retailers = productTemp?.retailersAvailable || productTemp?.retailers;
344
346
  retailers?.forEach((retailer) => {
345
- retailer["percentage"] = percentages?.filter(
347
+ retailer["percentage"] = percentages?.find(
346
348
  (percent) => retailer?.id === percent?.id_retailer
347
- )[0]?.percentage;
349
+ )?.percentage;
348
350
  });
349
351
 
350
352
  setProduct(productTemp);
@@ -420,7 +422,7 @@ export const ProviderProductEdition = ({
420
422
  };
421
423
  if (product?.orderId) dataObject["orderId"] = product?.orderId;
422
424
  try {
423
- await axios.put(
425
+ const res = await axios.put(
424
426
  `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?description=true&version=${version}`,
425
427
  dataObject,
426
428
  {
@@ -429,8 +431,10 @@ export const ProviderProductEdition = ({
429
431
  },
430
432
  }
431
433
  );
432
- setMessage("Descripciones guardadas con éxito");
433
- loadData();
434
+ if (res.data.statusCode === 200) {
435
+ setMessage("Descripciones guardadas con éxito");
436
+ await loadData();
437
+ }
434
438
  } catch (error) {
435
439
  console.log(error);
436
440
  }
@@ -453,8 +457,10 @@ export const ProviderProductEdition = ({
453
457
  },
454
458
  }
455
459
  );
456
- setMessage("Fichas técnicas guardadas");
457
- loadData();
460
+ if (res.data.statusCode === 200) {
461
+ setMessage("Fichas técnicas guardadas");
462
+ await loadData();
463
+ }
458
464
  } catch (error) {
459
465
  console.log(error);
460
466
  }
@@ -552,7 +558,7 @@ export const ProviderProductEdition = ({
552
558
  return e;
553
559
  });
554
560
  try {
555
- await axios.put(
561
+ const res = await axios.put(
556
562
  `${process.env.REACT_APP_ARTICLE_DATA_ENDPOINT}?image=true&version=${version}`,
557
563
  dataImages,
558
564
  {
@@ -561,9 +567,11 @@ export const ProviderProductEdition = ({
561
567
  },
562
568
  }
563
569
  );
564
- setMessage("Imágenes guardadas con éxito");
565
- sessionStorage.removeItem("imagesList");
566
- loadData();
570
+ if (res.data.statusCode === 200) {
571
+ setMessage("Imágenes guardadas con éxito");
572
+ sessionStorage.removeItem("imagesList");
573
+ await loadData();
574
+ }
567
575
  } catch (error) {
568
576
  console.log(error);
569
577
  }
@@ -665,12 +673,12 @@ export const ProviderProductEdition = ({
665
673
  },
666
674
  ],
667
675
  concept: concept,
668
- [`${assignationType}Id`]: assignationId,
676
+ userId: assignationId,
669
677
  };
670
- axios({
678
+ await axios({
671
679
  method: "post",
672
680
  url: process.env.REACT_APP_ASSIGNATIONS_ENDPOINT,
673
- data: data,
681
+ data,
674
682
  headers: {
675
683
  Authorization: token,
676
684
  },
@@ -688,7 +696,7 @@ export const ProviderProductEdition = ({
688
696
  serv = serv.filter((f) => f.id_retailer === activeRetailer.id);
689
697
  }
690
698
  const statusArray =
691
- user.is_retailer === 1 ? ["AC", "RC"] : ["AP", "RP", "AC"];
699
+ user.is_retailer === 1 ? ["ACA", "RCA"] : ["AP", "RP", "ACA"];
692
700
  return (
693
701
  serv.length > 0 && serv.every((item) => statusArray.includes(item.status))
694
702
  );
@@ -787,18 +795,11 @@ export const ProviderProductEdition = ({
787
795
  }
788
796
  };
789
797
 
790
- const getSectionStatus = () => {
791
- const concept = getConcept(activeTab);
792
- return ["AA", "AP", "R", "CA", "RCA"].includes(
793
- productEdit.product[`${concept}_status`]
794
- );
795
- };
796
-
797
798
  const confirmStatusComplete = () => {
798
799
  const { datasheet_status, description_status, images_status } = product;
799
800
  const completionStates =
800
801
  user.is_retailer === 1
801
- ? ["AC", "Evaluated", "NS"]
802
+ ? ["ACA", "Evaluated", "NS"]
802
803
  : ["AP", "Evaluated", "NS"];
803
804
  const dsEvaluated = completionStates.includes(datasheet_status);
804
805
  const descsEvaluated = completionStates.includes(description_status);
@@ -843,7 +844,8 @@ export const ProviderProductEdition = ({
843
844
  const newProductEdit = productEdit;
844
845
  newProductEdit.product[sectionStatusKey] = serviceStatus;
845
846
  setProductEdit(newProductEdit);
846
- showSurvey && showSurvey(orderStatus[orderId] === "AP");
847
+ showSurvey &&
848
+ showSurvey(!user.is_retailer && orderStatus[orderId] === "AP");
847
849
  } else {
848
850
  res = await axios.put(`${process.env.REACT_APP_SEND_EVAL}`, data, {
849
851
  headers: {
@@ -868,13 +870,11 @@ export const ProviderProductEdition = ({
868
870
  setProduct(productTemp);
869
871
  sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
870
872
  setOrigin((prev) => ({ ...prev, [concept]: status }));
871
- await loadData();
872
873
  }
873
874
  } catch (err) {
874
875
  console.log(err);
875
876
  }
876
877
  loadData();
877
- showSurvey && showSurvey(confirmStatusComplete());
878
878
  };
879
879
 
880
880
  const validateAll = async (result) => {
@@ -920,13 +920,24 @@ export const ProviderProductEdition = ({
920
920
 
921
921
  await Promise.all(sendAll);
922
922
  const productTemp = product;
923
- productTemp.article_status = `${result}C`;
923
+ productTemp.article_status = `${result}CA`;
924
924
  productTemp.datasheet_status =
925
- productTemp.datasheet_status === "NA" ? "NA" : `${result}C`;
925
+ productTemp.datasheet_status === "NA" ? "NA" : `${result}CA`;
926
926
  productTemp.description_status =
927
- productTemp.description_status === "NA" ? "NA" : `${result}C`;
927
+ productTemp.description_status === "NA" ? "NA" : `${result}CA`;
928
928
  productTemp.images_status =
929
- productTemp.images_status === "NA" ? "NA" : `${result}C`;
929
+ productTemp.images_status === "NA" ? "NA" : `${result}CA`;
930
+
931
+ const retailerStatusCopy = { ...retailerStatus };
932
+ Object.keys(retailerStatusCopy).forEach((key) => {
933
+ conceptArray.forEach((concept) => {
934
+ if (retailerStatusCopy[key][concept]) {
935
+ retailerStatusCopy[key][concept] = `${result}CA`;
936
+ }
937
+ });
938
+ });
939
+ setRetailerStatus(retailerStatusCopy);
940
+ productTemp.statusByRetailer = retailerStatusCopy;
930
941
  setProduct(productTemp);
931
942
  sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
932
943
  setProductEdit({
@@ -943,7 +954,7 @@ export const ProviderProductEdition = ({
943
954
  })
944
955
  );
945
956
 
946
- loadData();
957
+ await loadData();
947
958
  } catch (error) {
948
959
  console.log(error);
949
960
  }
@@ -964,7 +975,7 @@ export const ProviderProductEdition = ({
964
975
  },
965
976
  });
966
977
  const prod = productEdit;
967
- const statusComplete = user.is_retailer ? `${result}C` : `${result}P`;
978
+ const statusComplete = user.is_retailer ? `${result}CA` : `${result}P`;
968
979
  prod.product.datasheet_status = statusComplete;
969
980
  prod.product.description_status = statusComplete;
970
981
  prod.product.images_status = statusComplete;
@@ -973,17 +984,22 @@ export const ProviderProductEdition = ({
973
984
  sessionStorage.setItem("productEdit", JSON.stringify(prod));
974
985
  setProduct(prod);
975
986
  setShowGenericModal && setShowGenericModal(false);
976
- loadData();
987
+ await loadData();
988
+ };
989
+
990
+ const getSectionStatus = () => {
991
+ const concept = getConcept(activeTab);
992
+ return ["AA", "AP", "R", "CA", "RCA"].includes(
993
+ productEdit.product[`${concept}_status`]
994
+ );
977
995
  };
978
996
 
979
997
  const enableActions = (versionStatus) => {
980
998
  try {
981
- const userIsRetailer = user.is_retailer;
982
-
983
- if (userIsRetailer) return false;
999
+ if (user.is_retailer) return false;
984
1000
 
985
1001
  if (versionStatus) {
986
- return ["AP", "AC", "RC", null].includes(versionStatus);
1002
+ return ["AP", "ACA", "RCA", null].includes(versionStatus);
987
1003
  }
988
1004
  return true;
989
1005
  } catch (err) {
@@ -1073,23 +1089,21 @@ export const ProviderProductEdition = ({
1073
1089
  },
1074
1090
  }));
1075
1091
  setShowGenericModal(true);
1076
- } else {
1077
- if (user.is_retailer) {
1078
- if (product.id_order || product.orderId) {
1079
- validateAll("A");
1080
- } else {
1081
- setDataGenericModal((prev) => ({
1082
- ...prev,
1083
- button2: {
1084
- name: "Continuar",
1085
- action: () => evaluationToRetailer("A"),
1086
- },
1087
- }));
1088
- setShowGenericModal(true);
1089
- }
1090
- } else {
1092
+ } else if (user.is_retailer) {
1093
+ if (product.id_order || product.orderId) {
1091
1094
  validateAll("A");
1095
+ } else {
1096
+ setDataGenericModal((prev) => ({
1097
+ ...prev,
1098
+ button2: {
1099
+ name: "Continuar",
1100
+ action: () => evaluationToRetailer("A"),
1101
+ },
1102
+ }));
1103
+ setShowGenericModal(true);
1092
1104
  }
1105
+ } else {
1106
+ validateAll("A");
1093
1107
  }
1094
1108
  }}
1095
1109
  rejectAll={() => {
@@ -1099,25 +1113,23 @@ export const ProviderProductEdition = ({
1099
1113
  (!product.id_order || !product.orderId)
1100
1114
  ) {
1101
1115
  return;
1102
- } else {
1103
- if (user.is_retailer) {
1104
- if (product.id_order || product.orderId) {
1105
- validateAll("R");
1106
- setModalViewError(true);
1107
- } else {
1108
- setDataGenericModal((prev) => ({
1109
- ...prev,
1110
- button2: {
1111
- name: "Continuar",
1112
- action: () => evaluationToRetailer("R"),
1113
- },
1114
- }));
1115
- setShowGenericModal(true);
1116
- }
1117
- } else {
1116
+ } else if (user.is_retailer) {
1117
+ if (product.id_order || product.orderId) {
1118
1118
  validateAll("R");
1119
1119
  setModalViewError(true);
1120
+ } else {
1121
+ setDataGenericModal((prev) => ({
1122
+ ...prev,
1123
+ button2: {
1124
+ name: "Continuar",
1125
+ action: () => evaluationToRetailer("R"),
1126
+ },
1127
+ }));
1128
+ setShowGenericModal(true);
1120
1129
  }
1130
+ } else {
1131
+ validateAll("R");
1132
+ setModalViewError(true);
1121
1133
  }
1122
1134
  }}
1123
1135
  approve={() => {
@@ -1134,23 +1146,21 @@ export const ProviderProductEdition = ({
1134
1146
  },
1135
1147
  }));
1136
1148
  setShowGenericModal(true);
1137
- } else {
1138
- if (user.is_retailer) {
1139
- if (product.id_order || product.orderId) {
1140
- sendEvaluation("A");
1141
- } else {
1142
- setDataGenericModal((prev) => ({
1143
- ...prev,
1144
- button2: {
1145
- name: "Continuar",
1146
- action: () => evaluationToRetailer("A"),
1147
- },
1148
- }));
1149
- setShowGenericModal(true);
1150
- }
1151
- } else {
1149
+ } else if (user.is_retailer) {
1150
+ if (product.id_order || product.orderId) {
1152
1151
  sendEvaluation("A");
1152
+ } else {
1153
+ setDataGenericModal((prev) => ({
1154
+ ...prev,
1155
+ button2: {
1156
+ name: "Continuar",
1157
+ action: () => evaluationToRetailer("A"),
1158
+ },
1159
+ }));
1160
+ setShowGenericModal(true);
1153
1161
  }
1162
+ } else {
1163
+ sendEvaluation("A");
1154
1164
  }
1155
1165
  }}
1156
1166
  reject={() => {
@@ -1160,33 +1170,33 @@ export const ProviderProductEdition = ({
1160
1170
  (!product.id_order || !product.orderId)
1161
1171
  ) {
1162
1172
  return;
1163
- } else {
1164
- if (user.is_retailer) {
1165
- if (product.id_order || product.orderId) {
1166
- sendEvaluation("R");
1167
- setModalViewError(true);
1168
- } else {
1169
- setDataGenericModal((prev) => ({
1170
- ...prev,
1171
- button2: {
1172
- name: "Continuar",
1173
- action: () => evaluationToRetailer("R"),
1174
- },
1175
- }));
1176
- setShowGenericModal(true);
1177
- }
1178
- } else {
1173
+ } else if (user.is_retailer) {
1174
+ if (product.id_order || product.orderId) {
1179
1175
  sendEvaluation("R");
1180
1176
  setModalViewError(true);
1177
+ } else {
1178
+ setDataGenericModal((prev) => ({
1179
+ ...prev,
1180
+ button2: {
1181
+ name: "Continuar",
1182
+ action: () => evaluationToRetailer("R"),
1183
+ },
1184
+ }));
1185
+ setShowGenericModal(true);
1181
1186
  }
1187
+ } else {
1188
+ sendEvaluation("R");
1189
+ setModalViewError(true);
1182
1190
  }
1183
1191
  }}
1184
1192
  />
1185
1193
  <FullTabsMenu
1186
1194
  tabsSections={tabsSections}
1187
1195
  status={
1188
- product[`${getConcept(activeTab)}_status`] ||
1189
- product?.version_status
1196
+ activeRetailer.id && retailerStatus
1197
+ ? retailerStatus[activeRetailer?.id][getConcept(activeTab)] ||
1198
+ "NS"
1199
+ : "-"
1190
1200
  }
1191
1201
  activeTab={activeTab}
1192
1202
  setActiveTab={setActiveTab}
@@ -1329,56 +1339,44 @@ export const ProviderProductEdition = ({
1329
1339
  />
1330
1340
  </div>
1331
1341
  )}
1332
- <Button
1333
- buttonType={
1334
- evaluationComplete(activeTab) &&
1335
- (productEdit.product.id_order || productEdit.product.orderId)
1336
- ? "general-green-button"
1337
- : "general-button-disabled"
1338
- }
1339
- label={"Enviar evaluación"}
1340
- onClick={() => {
1341
- //setModalSent(true);
1342
- sendEvaluation();
1343
- setMessage(`¡Evaluación de ${activeTab} completada!`);
1344
- }}
1345
- />
1346
1342
  </div>
1347
- ) : revision ? null : (
1348
- <div className="required-inputs-message">
1349
- <div>
1350
- <p>
1351
- Los atributos son requeridos por las plataformas de las
1352
- cadenas, es muy importante completar los campos requeridos ya
1353
- que pueden rechazar el producto por falta de información.
1354
- </p>
1343
+ ) : (
1344
+ !revision && (
1345
+ <div className="required-inputs-message">
1346
+ <div>
1347
+ <p>
1348
+ Los atributos son requeridos por las plataformas de las
1349
+ cadenas, es muy importante completar los campos requeridos
1350
+ ya que pueden rechazar el producto por falta de información.
1351
+ </p>
1352
+ </div>
1353
+ {inCart ? (
1354
+ <button type="button">
1355
+ <Link to="/checkout">
1356
+ <p>Articulo en carrito</p>
1357
+ <p>Ir a checkout</p>
1358
+ </Link>
1359
+ </button>
1360
+ ) : (
1361
+ <>
1362
+ <SliderToolTip
1363
+ infoIcon={InfoIcon}
1364
+ slidefront={slidefront}
1365
+ iconSize={"big-image"}
1366
+ slidePosition={"top-slide"}
1367
+ />
1368
+ <Button
1369
+ onClick={() => {
1370
+ setShowContentohRequestModal &&
1371
+ setShowContentohRequestModal(true);
1372
+ }}
1373
+ buttonType="general-default-button"
1374
+ label="Enviar a Content-oh!"
1375
+ />
1376
+ </>
1377
+ )}
1355
1378
  </div>
1356
- {inCart ? (
1357
- <button type="button">
1358
- <Link to="/checkout">
1359
- <p>Articulo en carrito</p>
1360
- <p>Ir a checkout</p>
1361
- </Link>
1362
- </button>
1363
- ) : (
1364
- <>
1365
- <SliderToolTip
1366
- infoIcon={InfoIcon}
1367
- slidefront={slidefront}
1368
- iconSize={"big-image"}
1369
- slidePosition={"top-slide"}
1370
- ></SliderToolTip>
1371
- <Button
1372
- onClick={() => {
1373
- setShowContentohRequestModal &&
1374
- setShowContentohRequestModal(true);
1375
- }}
1376
- buttonType="general-default-button"
1377
- label="Enviar a Content-oh!"
1378
- />
1379
- </>
1380
- )}
1381
- </div>
1379
+ )
1382
1380
  )}
1383
1381
  </div>
1384
1382
  </div>