contentoh-components-library 21.6.50 → 21.6.51

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 (86) hide show
  1. package/.env.test +0 -1
  2. package/dist/components/atoms/IconFile/index.js +2 -85
  3. package/dist/components/atoms/IconFile/styles.js +1 -1
  4. package/dist/components/atoms/ProductImage/ProductImage.stories.js +2 -70
  5. package/dist/components/atoms/ProductImage/index.js +27 -100
  6. package/dist/components/atoms/ProductImage/styles.js +1 -3
  7. package/dist/components/molecules/EditionActiveImage/index.js +2 -4
  8. package/dist/components/molecules/GalleryElement/index.js +4 -13
  9. package/dist/components/molecules/GalleryHeader/index.js +24 -96
  10. package/dist/components/molecules/GalleryHeader/styles.js +1 -4
  11. package/dist/components/molecules/ImageSelector/index.js +0 -1
  12. package/dist/components/organisms/ImagePreviewer/index.js +0 -1
  13. package/dist/components/organisms/ProductImageModal/index.js +2 -3
  14. package/dist/components/pages/ProviderProductEdition/index.js +78 -53
  15. package/dist/components/pages/RetailerProductEdition/context/provider-product-edition.context.js +15 -330
  16. package/dist/components/pages/RetailerProductEdition/context/provider-product-edition.reducer.js +2 -12
  17. package/dist/components/pages/RetailerProductEdition/index.js +445 -603
  18. package/dist/components/pages/RetailerProductEdition/stories/ImageEditor.stories.js +0 -1
  19. package/dist/components/pages/RetailerProductEdition/stories/TextEditor.stories.js +145 -45
  20. package/dist/global-files/data.js +3 -16
  21. package/dist/index.js +90 -142
  22. package/package.json +1 -1
  23. package/src/components/atoms/IconFile/index.js +1 -28
  24. package/src/components/atoms/IconFile/styles.js +0 -8
  25. package/src/components/atoms/ProductImage/ProductImage.stories.js +0 -38
  26. package/src/components/atoms/ProductImage/index.js +20 -95
  27. package/src/components/atoms/ProductImage/styles.js +7 -92
  28. package/src/components/molecules/EditionActiveImage/index.js +2 -2
  29. package/src/components/molecules/GalleryElement/index.js +0 -9
  30. package/src/components/molecules/GalleryHeader/index.js +13 -65
  31. package/src/components/molecules/GalleryHeader/styles.js +1 -2
  32. package/src/components/molecules/ImageSelector/index.js +0 -1
  33. package/src/components/organisms/ImagePreviewer/index.js +0 -1
  34. package/src/components/organisms/ProductImageModal/index.js +0 -1
  35. package/src/components/pages/ProviderProductEdition/index.js +36 -3
  36. package/src/components/pages/RetailerProductEdition/context/provider-product-edition.context.jsx +0 -201
  37. package/src/components/pages/RetailerProductEdition/context/provider-product-edition.reducer.js +0 -12
  38. package/src/components/pages/RetailerProductEdition/index.js +179 -360
  39. package/src/components/pages/RetailerProductEdition/stories/ImageEditor.stories.js +0 -1
  40. package/src/components/pages/RetailerProductEdition/stories/TextEditor.stories.js +104 -51
  41. package/src/global-files/data.js +2 -17
  42. package/src/index.js +0 -4
  43. package/.claude/launch.json +0 -14
  44. package/dist/ai/prompts/attribute.prompt.js +0 -28
  45. package/dist/ai/prompts/description.prompt.js +0 -33
  46. package/dist/ai/schemas/attribute.schema.js +0 -35
  47. package/dist/ai/schemas/description.schema.js +0 -27
  48. package/dist/components/atoms/AssetPreview/AssetPreview.stories.js +0 -118
  49. package/dist/components/atoms/AssetPreview/index.js +0 -150
  50. package/dist/components/atoms/AssetPreview/styles.js +0 -28
  51. package/dist/components/molecules/GalleryAssetElement/GalleryAssetElement.stories.js +0 -147
  52. package/dist/components/molecules/GalleryAssetElement/index.js +0 -178
  53. package/dist/components/molecules/GalleryAssetElement/styles.js +0 -26
  54. package/dist/components/molecules/GalleryTrayTabs/GalleryTrayTabs.stories.js +0 -56
  55. package/dist/components/molecules/GalleryTrayTabs/index.js +0 -60
  56. package/dist/components/molecules/GalleryTrayTabs/styles.js +0 -20
  57. package/dist/components/organisms/DigitalAssetsTray/DigitalAssetsTray.stories.js +0 -171
  58. package/dist/components/organisms/DigitalAssetsTray/index.js +0 -211
  59. package/dist/components/organisms/DigitalAssetsTray/styles.js +0 -22
  60. package/dist/global-files/digital-assets/assetTypes.js +0 -480
  61. package/dist/global-files/digital-assets/assets.actions.js +0 -64
  62. package/dist/global-files/digital-assets/assets.adapter.js +0 -304
  63. package/dist/global-files/digital-assets/assets.mock.js +0 -136
  64. package/dist/global-files/digital-assets/assets.reducer.js +0 -220
  65. package/dist/global-files/digital-assets/uploadAssets.js +0 -179
  66. package/dist/global-files/digital-assets/useDigitalAssets.js +0 -522
  67. package/docs/activos-digitales.md +0 -273
  68. package/src/components/atoms/AssetPreview/AssetPreview.stories.js +0 -78
  69. package/src/components/atoms/AssetPreview/index.js +0 -119
  70. package/src/components/atoms/AssetPreview/styles.js +0 -190
  71. package/src/components/molecules/GalleryAssetElement/GalleryAssetElement.stories.js +0 -102
  72. package/src/components/molecules/GalleryAssetElement/index.js +0 -162
  73. package/src/components/molecules/GalleryAssetElement/styles.js +0 -159
  74. package/src/components/molecules/GalleryTrayTabs/GalleryTrayTabs.stories.js +0 -32
  75. package/src/components/molecules/GalleryTrayTabs/index.js +0 -41
  76. package/src/components/molecules/GalleryTrayTabs/styles.js +0 -52
  77. package/src/components/organisms/DigitalAssetsTray/DigitalAssetsTray.stories.js +0 -101
  78. package/src/components/organisms/DigitalAssetsTray/index.js +0 -189
  79. package/src/components/organisms/DigitalAssetsTray/styles.js +0 -183
  80. package/src/global-files/digital-assets/assetTypes.js +0 -419
  81. package/src/global-files/digital-assets/assets.actions.js +0 -50
  82. package/src/global-files/digital-assets/assets.adapter.js +0 -229
  83. package/src/global-files/digital-assets/assets.mock.js +0 -122
  84. package/src/global-files/digital-assets/assets.reducer.js +0 -197
  85. package/src/global-files/digital-assets/uploadAssets.js +0 -109
  86. package/src/global-files/digital-assets/useDigitalAssets.js +0 -329
@@ -13,13 +13,6 @@ import successIcon from "../../../../assets/images/genericModal/genericModalChec
13
13
  import errorIcon from "../../../../assets/images/genericModal/errorModal.svg";
14
14
  import warningIcon from "../../../../assets/images/genericModal/genericModalWarning.svg";
15
15
  import { getConceptByTab } from "../utils";
16
- import {
17
- assetKey,
18
- buildSavePayload,
19
- isPersisted,
20
- toPayload,
21
- } from "../../../../global-files/digital-assets/assets.adapter";
22
- import { selectAssetsToSave } from "../../../../global-files/digital-assets/assets.reducer";
23
16
 
24
17
  const S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
25
18
  const REGION = "us-east-1";
@@ -561,198 +554,6 @@ export const ProviderProductEditionProvider = ({ children }) => {
561
554
  dispatch({ type: "SET_SAVING", payload: false });
562
555
  };
563
556
 
564
- /*
565
- Registra en la base los activos que ACABAN de subirse, sin esperar a que el
566
- usuario guarde.
567
-
568
- Es una corrección de expectativa, no una comodidad: al ver la barra de
569
- progreso llegar al final, cualquiera da por hecho que el activo ya quedó
570
- ligado al producto. Si entonces cierra la ficha, el archivo se queda en S3
571
- sin fila en la base —invisible y sin forma de recuperarlo desde la
572
- pantalla—.
573
-
574
- Manda SOLO las altas recién subidas, con `updateAssets` y `deleteAssets`
575
- vacíos. Un reetiquetado o un borrado que el usuario todavía no confirmó no
576
- se aplica por haber soltado otro archivo: el botón de guardar sigue siendo
577
- quien decide sobre esos.
578
- */
579
- const registerUploadedAssets = async (token, uploaded = []) => {
580
- const listos = uploaded.filter((asset) => asset.src && !isPersisted(asset));
581
- if (listos.length === 0) return;
582
-
583
- const data = {
584
- articleId: state.product?.id_article,
585
- newAssets: listos.map(toPayload),
586
- updateAssets: [],
587
- deleteAssets: [],
588
- };
589
-
590
- if (state.product?.orderId || state.product?.id_order) {
591
- data.orderId = state.product?.orderId || state.product?.id_order;
592
- }
593
-
594
- try {
595
- const res = await axios.put(
596
- process.env.REACT_APP_ARTICLE_DATA_ENDPOINT,
597
- data,
598
- { params: { asset: true }, headers: { Authorization: token } },
599
- );
600
-
601
- if (res.data.statusCode !== 200) throw new Error("Respuesta inesperada");
602
-
603
- const body = JSON.parse(res.data.body);
604
- const guardados = body.assets ?? [];
605
-
606
- /*
607
- Se le pone a cada activo el id que le tocó, emparejando por la clave de
608
- S3, que es única.
609
-
610
- A propósito NO se reemplaza la lista entera con lo que devolvió el
611
- backend: eso borraría el rastro de lo que el usuario cambió o borró y
612
- todavía no ha guardado. Aquí solo se completa lo que faltaba.
613
- */
614
- listos.forEach((asset) => {
615
- const fila = guardados.find((row) => row.src === asset.src);
616
- if (!fila) return;
617
- dispatch({
618
- type: "PATCH_ASSET",
619
- payload: { key: assetKey(asset), changes: { id: fila.id, url: fila.url } },
620
- });
621
- });
622
- } catch (error) {
623
- console.log("Error registering assets:", error);
624
- /*
625
- El archivo SÍ está en S3; lo que falló es la fila. Se marca en el activo
626
- y no en un modal porque el usuario puede estar soltando más archivos:
627
- interrumpirlo con un diálogo por cada fallo sería peor que dejarlo
628
- señalado en su renglón, donde además se ve cuál falló.
629
- */
630
- listos.forEach((asset) => dispatch({
631
- type: "PATCH_ASSET",
632
- payload: {
633
- key: assetKey(asset),
634
- changes: {
635
- status: "error",
636
- error: "Se subió el archivo pero no se pudo guardar. Usa el botón de guardar.",
637
- },
638
- },
639
- }));
640
- }
641
- };
642
-
643
- /*
644
- Guarda los activos digitales: registra los nuevos, manda los cambios y pide
645
- las bajas.
646
-
647
- Va aparte de `updateImages` y no dentro, aunque las dos bandejas vivan en la
648
- misma pestaña. Un activo no pasa por ninguna de las reglas de una imagen —ni
649
- tipo de toma, ni obligatoriedad, ni cupo por cadena— y el backend los escribe
650
- en otra tabla. Mezclarlos obligaría a partir en dos cada validación de
651
- `updateImages`, que ya es la función más delicada de este archivo.
652
-
653
- Igual que con las imágenes, aquí NO viaja ningún binario: el archivo ya está
654
- en S3 y esto solo registra metadatos. Mandar el archivo en el cuerpo devuelve
655
- 413.
656
- */
657
- const saveAssets = async (token) => {
658
- const payload = buildSavePayload(selectAssetsToSave(state));
659
- const { newAssets, updateAssets, deleteAssets } = payload;
660
-
661
- if (!newAssets.length && !updateAssets.length && !deleteAssets.length) {
662
- return false;
663
- }
664
-
665
- /*
666
- Un activo nuevo sin `key` es un archivo que todavía no llegó a S3.
667
- Registrarlo crearía una fila apuntando a un objeto que no existe: la
668
- bandeja lo mostraría y al descargarlo daría 404, sin forma de saber por qué.
669
- Mejor no guardar nada y decirlo.
670
- */
671
- const sinSubir = newAssets.filter((asset) => !asset.key);
672
- if (sinSubir.length > 0) {
673
- dispatch({
674
- type: "SET_MODAL",
675
- payload: {
676
- show: true,
677
- title: "Faltan archivos por subir",
678
- message: `${sinSubir.length} activo(s) todavía no se han subido. Espera a que termine la carga e intenta de nuevo.`,
679
- image: warningIcon,
680
- },
681
- });
682
- return false;
683
- }
684
-
685
- dispatch({ type: "SET_SAVING", payload: true });
686
-
687
- // Sin `version`: un activo general es el mismo para todas las versiones del
688
- // producto, así que ni la fila ni la clave de S3 la llevan.
689
- const data = {
690
- articleId: state.product?.id_article,
691
- newAssets,
692
- updateAssets,
693
- deleteAssets,
694
- };
695
-
696
- if (state.product?.orderId || state.product?.id_order) {
697
- data.orderId = state.product?.orderId || state.product?.id_order;
698
- }
699
-
700
- try {
701
- const res = await axios.put(
702
- process.env.REACT_APP_ARTICLE_DATA_ENDPOINT,
703
- data,
704
- {
705
- params: { asset: true },
706
- headers: { Authorization: token },
707
- },
708
- );
709
-
710
- if (res.data.statusCode === 200) {
711
- // Se olvida qué cambió y qué se borró: lo que hay en pantalla ya es lo
712
- // que hay en la base. Sin esto, el siguiente guardado reenviaría todo.
713
- dispatch({ type: "CLEAR_ASSETS_TRACKING" });
714
- dispatch({
715
- type: "SET_MODAL",
716
- payload: {
717
- show: true,
718
- title: "",
719
- message: "Activos digitales guardados con éxito",
720
- image: successIcon,
721
- },
722
- });
723
- /*
724
- Devuelve `true` para que quien llama recargue.
725
-
726
- Es imprescindible, no cortesía: los activos recién creados siguen en
727
- memoria con su id temporal y sin el id de la base. Sin recargar, el
728
- siguiente guardado los volvería a mandar como nuevos y se duplicarían.
729
- Es exactamente el problema que ya tuvieron las imágenes.
730
- */
731
- return true;
732
- }
733
-
734
- return false;
735
- } catch (error) {
736
- console.log("Error saving assets:", error);
737
- dispatch({
738
- type: "SET_ERRORS",
739
- payload: [...state.errors, error],
740
- });
741
- dispatch({
742
- type: "SET_MODAL",
743
- payload: {
744
- show: true,
745
- title: "Error",
746
- message: "Hubo un error al guardar los activos digitales",
747
- image: errorIcon,
748
- },
749
- });
750
- return false;
751
- } finally {
752
- dispatch({ type: "SET_SAVING", payload: false });
753
- }
754
- };
755
-
756
557
  const createComment = async (body, token) => {
757
558
  const concept = getConceptByTab(state.active_tab);
758
559
  const data = {
@@ -781,8 +582,6 @@ export const ProviderProductEditionProvider = ({ children }) => {
781
582
  updateImages,
782
583
  saveImageAttrs,
783
584
  deleteImages,
784
- saveAssets,
785
- registerUploadedAssets,
786
585
  handleOnDownloadImages,
787
586
  createComment,
788
587
  };
@@ -18,11 +18,6 @@ import {
18
18
  activeStateInitialState,
19
19
  activeStateReducer,
20
20
  } from "./reducers/active-state";
21
- import { ASSET_ACTIONS } from "../../../../global-files/digital-assets/assets.actions";
22
- import {
23
- assetsInitialState,
24
- assetsReducer,
25
- } from "../../../../global-files/digital-assets/assets.reducer";
26
21
 
27
22
  // Initial state
28
23
  export const initialState = {
@@ -30,7 +25,6 @@ export const initialState = {
30
25
  ...productInitialState,
31
26
  ...inputsInitialState,
32
27
  ...activeStateInitialState,
33
- ...assetsInitialState,
34
28
  };
35
29
 
36
30
  // Action types
@@ -39,7 +33,6 @@ export const ACTIONS = {
39
33
  ...PRODUCT_ACTIONS,
40
34
  ...INPUTS_ACTIONS,
41
35
  ...ACTIVE_STATE_ACTIONS,
42
- ...ASSET_ACTIONS,
43
36
  };
44
37
 
45
38
  // Reducer function
@@ -65,10 +58,5 @@ export const productEditionReducer = (state, action) => {
65
58
  return activeStateResult;
66
59
  }
67
60
 
68
- const assetsResult = assetsReducer(state, action);
69
- if (assetsResult !== null) {
70
- return assetsResult;
71
- }
72
-
73
61
  return state;
74
62
  };