contentoh-components-library 21.6.50 → 21.6.52

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 (90) 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/organisms/PropagateChangesModal/index.js +6 -1
  15. package/dist/components/pages/ProviderProductEdition/context/provider-product-edition.context.js +10 -8
  16. package/dist/components/pages/ProviderProductEdition/index.js +189 -72
  17. package/dist/components/pages/RetailerProductEdition/context/provider-product-edition.context.js +25 -338
  18. package/dist/components/pages/RetailerProductEdition/context/provider-product-edition.reducer.js +2 -12
  19. package/dist/components/pages/RetailerProductEdition/index.js +579 -631
  20. package/dist/components/pages/RetailerProductEdition/stories/ImageEditor.stories.js +0 -1
  21. package/dist/components/pages/RetailerProductEdition/stories/TextEditor.stories.js +145 -45
  22. package/dist/global-files/data.js +3 -16
  23. package/dist/index.js +90 -142
  24. package/package.json +1 -1
  25. package/src/components/atoms/IconFile/index.js +1 -28
  26. package/src/components/atoms/IconFile/styles.js +0 -8
  27. package/src/components/atoms/ProductImage/ProductImage.stories.js +0 -38
  28. package/src/components/atoms/ProductImage/index.js +20 -95
  29. package/src/components/atoms/ProductImage/styles.js +7 -92
  30. package/src/components/molecules/EditionActiveImage/index.js +2 -2
  31. package/src/components/molecules/GalleryElement/index.js +0 -9
  32. package/src/components/molecules/GalleryHeader/index.js +13 -65
  33. package/src/components/molecules/GalleryHeader/styles.js +1 -2
  34. package/src/components/molecules/ImageSelector/index.js +0 -1
  35. package/src/components/organisms/ImagePreviewer/index.js +0 -1
  36. package/src/components/organisms/ProductImageModal/index.js +0 -1
  37. package/src/components/organisms/PropagateChangesModal/index.js +10 -3
  38. package/src/components/pages/ProviderProductEdition/context/provider-product-edition.context.jsx +2 -1
  39. package/src/components/pages/ProviderProductEdition/index.js +111 -6
  40. package/src/components/pages/RetailerProductEdition/context/provider-product-edition.context.jsx +2 -202
  41. package/src/components/pages/RetailerProductEdition/context/provider-product-edition.reducer.js +0 -12
  42. package/src/components/pages/RetailerProductEdition/index.js +258 -363
  43. package/src/components/pages/RetailerProductEdition/stories/ImageEditor.stories.js +0 -1
  44. package/src/components/pages/RetailerProductEdition/stories/TextEditor.stories.js +104 -51
  45. package/src/global-files/data.js +2 -17
  46. package/src/index.js +0 -4
  47. package/.claude/launch.json +0 -14
  48. package/dist/ai/prompts/attribute.prompt.js +0 -28
  49. package/dist/ai/prompts/description.prompt.js +0 -33
  50. package/dist/ai/schemas/attribute.schema.js +0 -35
  51. package/dist/ai/schemas/description.schema.js +0 -27
  52. package/dist/components/atoms/AssetPreview/AssetPreview.stories.js +0 -118
  53. package/dist/components/atoms/AssetPreview/index.js +0 -150
  54. package/dist/components/atoms/AssetPreview/styles.js +0 -28
  55. package/dist/components/molecules/GalleryAssetElement/GalleryAssetElement.stories.js +0 -147
  56. package/dist/components/molecules/GalleryAssetElement/index.js +0 -178
  57. package/dist/components/molecules/GalleryAssetElement/styles.js +0 -26
  58. package/dist/components/molecules/GalleryTrayTabs/GalleryTrayTabs.stories.js +0 -56
  59. package/dist/components/molecules/GalleryTrayTabs/index.js +0 -60
  60. package/dist/components/molecules/GalleryTrayTabs/styles.js +0 -20
  61. package/dist/components/organisms/DigitalAssetsTray/DigitalAssetsTray.stories.js +0 -171
  62. package/dist/components/organisms/DigitalAssetsTray/index.js +0 -211
  63. package/dist/components/organisms/DigitalAssetsTray/styles.js +0 -22
  64. package/dist/global-files/digital-assets/assetTypes.js +0 -480
  65. package/dist/global-files/digital-assets/assets.actions.js +0 -64
  66. package/dist/global-files/digital-assets/assets.adapter.js +0 -304
  67. package/dist/global-files/digital-assets/assets.mock.js +0 -136
  68. package/dist/global-files/digital-assets/assets.reducer.js +0 -220
  69. package/dist/global-files/digital-assets/uploadAssets.js +0 -179
  70. package/dist/global-files/digital-assets/useDigitalAssets.js +0 -522
  71. package/docs/activos-digitales.md +0 -273
  72. package/src/components/atoms/AssetPreview/AssetPreview.stories.js +0 -78
  73. package/src/components/atoms/AssetPreview/index.js +0 -119
  74. package/src/components/atoms/AssetPreview/styles.js +0 -190
  75. package/src/components/molecules/GalleryAssetElement/GalleryAssetElement.stories.js +0 -102
  76. package/src/components/molecules/GalleryAssetElement/index.js +0 -162
  77. package/src/components/molecules/GalleryAssetElement/styles.js +0 -159
  78. package/src/components/molecules/GalleryTrayTabs/GalleryTrayTabs.stories.js +0 -32
  79. package/src/components/molecules/GalleryTrayTabs/index.js +0 -41
  80. package/src/components/molecules/GalleryTrayTabs/styles.js +0 -52
  81. package/src/components/organisms/DigitalAssetsTray/DigitalAssetsTray.stories.js +0 -101
  82. package/src/components/organisms/DigitalAssetsTray/index.js +0 -189
  83. package/src/components/organisms/DigitalAssetsTray/styles.js +0 -183
  84. package/src/global-files/digital-assets/assetTypes.js +0 -419
  85. package/src/global-files/digital-assets/assets.actions.js +0 -50
  86. package/src/global-files/digital-assets/assets.adapter.js +0 -229
  87. package/src/global-files/digital-assets/assets.mock.js +0 -122
  88. package/src/global-files/digital-assets/assets.reducer.js +0 -197
  89. package/src/global-files/digital-assets/uploadAssets.js +0 -109
  90. package/src/global-files/digital-assets/useDigitalAssets.js +0 -329
@@ -96,6 +96,17 @@ const ProviderProductEditionView = ({
96
96
  const [variantGroup, setVariantGroup] = useState(null);
97
97
  const [showGroup, setShowGroup] = useState(false);
98
98
  const [showGroupModal, setShowGroupModal] = useState(false);
99
+
100
+ /*
101
+ Un hijo no se agrupa como variante (decisión de producto, 2026-09-25).
102
+
103
+ Agrupar declara «estos son el mismo producto en otra presentación», y un
104
+ hijo ya declaró de dónde deriva; tener las dos cosas lo dejaba con dos
105
+ respuestas distintas a la misma pregunta. El servidor lo rechaza con
106
+ VARIANT_GROUP_NOT_FOR_CHILD, así que ofrecer el botón aquí sería ofrecer
107
+ algo que siempre falla.
108
+ */
109
+ const puedeAgruparse = !state.product?.parentArticleId;
99
110
  const [pendingPropagation, setPendingPropagation] = useState(null);
100
111
  const [preparandoPropagacion, setPreparandoPropagacion] = useState(false);
101
112
  const [preparandoEdicionMultiple, setPreparandoEdicionMultiple] =
@@ -731,14 +742,64 @@ const ProviderProductEditionView = ({
731
742
  return soloPropagables(cambios);
732
743
  };
733
744
 
745
+ /*
746
+ Lo que se acaba de editar en la pestaña de descripciones.
747
+
748
+ Va aparte de `cambiosDeFichaTecnica` porque son tablas distintas y el
749
+ endpoint recibe una lista o la otra. Aquí NO se filtran UPC ni SKU: esos son
750
+ atributos de ficha técnica y no aparecen en esta pestaña.
751
+ */
752
+ const cambiosDeDescripciones = () => {
753
+ const retailerId = state.active_retailer?.id_retailer;
754
+ const inputs = state.services?.descriptions?.inputs ?? {};
755
+
756
+ return (state.updated_descriptions_inputs ?? []).map((item) => {
757
+ const input = inputs[`${item.attributeId}_${retailerId}`];
758
+ return {
759
+ id: Number(item.attributeId),
760
+ name: input?.name ?? `Descripción ${item.attributeId}`,
761
+ value: item.value,
762
+ };
763
+ });
764
+ };
765
+
766
+ /*
767
+ Destinos posibles para lo que se guarde en este producto: sus hijos y sus
768
+ compañeras de grupo. Un hijo no propaga a nadie.
769
+ */
770
+ const destinosPosibles = () => {
771
+ if (state.product?.parentArticleId) return 0;
772
+ const companeras = (variantGroup?.members ?? []).filter((m) => !m.isCurrent);
773
+ return (state.product?.variantsCount ?? 0) + companeras.length;
774
+ };
775
+
734
776
  const handleOnClickSave = () => {
735
777
  // `preparandoPropagacion` cubre la ventana entre el clic y la apertura del
736
778
  // diálogo: sin esto, dos clics seguidos lanzan dos consultas de familia.
737
779
  if (state.saving || preparandoPropagacion) return;
738
780
  switch (state.active_tab) {
739
- case "Descripción":
781
+ case "Descripción": {
782
+ /*
783
+ Guardar una descripción en un padre también abre la decisión de
784
+ propagar. Sin esto, el hijo heredaba la descripción al ligarse y se
785
+ quedaba con la versión vieja en cuanto el padre la corregía, sin que
786
+ nadie lo notara.
787
+ */
788
+ const cambiosDesc = cambiosDeDescripciones();
789
+
790
+ if (destinosPosibles() > 0 && cambiosDesc.length > 0) {
791
+ setPreparandoPropagacion(true);
792
+ loadFamily()
793
+ .then(() =>
794
+ setPendingPropagation({ cambios: cambiosDesc, kind: "description" })
795
+ )
796
+ .finally(() => setPreparandoPropagacion(false));
797
+ return;
798
+ }
799
+
740
800
  saveDescriptions(token);
741
801
  break;
802
+ }
742
803
  case "Ficha técnica": {
743
804
  // Guardar un padre con hijos abre la decisión de propagar. Sin este
744
805
  // paso el cambio se queda solo en el padre y los hijos se van
@@ -751,8 +812,24 @@ const ProviderProductEditionView = ({
751
812
  const companeras = (variantGroup?.members ?? []).filter(
752
813
  (m) => !m.isCurrent
753
814
  );
815
+ /*
816
+ Un HIJO no propaga a nadie, y hay que decirlo explícitamente.
817
+
818
+ Sin este corte el diálogo se abría desde la ficha de un hijo y le
819
+ ofrecía a sus HERMANOS como si fueran sus hijos: `family.variants`
820
+ mira la familia desde el padre —eso es lo correcto para navegar entre
821
+ hermanos— pero aquí se estaba leyendo como «los destinos de este
822
+ producto». El servidor resolvía los destinos por su cuenta y no
823
+ escribía nada, así que el usuario elegía hermanos, guardaba, y no
824
+ pasaba nada: un no-operativo silencioso.
825
+
826
+ Un hijo tampoco puede estar agrupado desde 2026-09-25, así que para
827
+ él no queda ningún destino posible.
828
+ */
829
+ const esHijo = !!state.product?.parentArticleId;
754
830
  const hayDestinos =
755
- state.product?.variantsCount > 0 || companeras.length > 0;
831
+ !esHijo &&
832
+ (state.product?.variantsCount > 0 || companeras.length > 0);
756
833
  const cambios = cambiosDeFichaTecnica();
757
834
 
758
835
  if (hayDestinos && cambios.length > 0) {
@@ -761,7 +838,7 @@ const ProviderProductEditionView = ({
761
838
  // justo lo contrario de lo que va a preguntar.
762
839
  setPreparandoPropagacion(true);
763
840
  loadFamily()
764
- .then(() => setPendingPropagation({ cambios }))
841
+ .then(() => setPendingPropagation({ cambios, kind: "datasheet" }))
765
842
  .finally(() => setPreparandoPropagacion(false));
766
843
  return;
767
844
  }
@@ -1659,7 +1736,12 @@ const ProviderProductEditionView = ({
1659
1736
  {pendingPropagation && (
1660
1737
  <PropagateChangesModal
1661
1738
  changedAttributes={pendingPropagation.cambios}
1662
- variants={(family?.variants ?? []).filter((v) => !v.isCurrent)}
1739
+ kind={pendingPropagation.kind ?? "datasheet"}
1740
+ variants={
1741
+ state.product?.parentArticleId
1742
+ ? []
1743
+ : (family?.variants ?? []).filter((v) => !v.isCurrent)
1744
+ }
1663
1745
  groupMembers={(variantGroup?.members ?? []).filter(
1664
1746
  (m) => !m.isCurrent
1665
1747
  )}
@@ -1667,8 +1749,29 @@ const ProviderProductEditionView = ({
1667
1749
  saving={state.saving}
1668
1750
  onCancel={() => setPendingPropagation(null)}
1669
1751
  onConfirm={(propagation) => {
1752
+ const esDescripcion = pendingPropagation.kind === "description";
1670
1753
  setPendingPropagation(null);
1671
- saveDatasheets(token, propagation ?? undefined);
1754
+
1755
+ if (!propagation) {
1756
+ // Guardar sin propagar: el producto se guarda solo.
1757
+ if (esDescripcion) saveDescriptions(token);
1758
+ else saveDatasheets(token);
1759
+ return;
1760
+ }
1761
+
1762
+ /*
1763
+ El diálogo habla de «atributos» porque es el mismo componente
1764
+ para las dos pestañas. Al guardar hay que ponerlo en la lista
1765
+ que corresponde: el servidor recibe `attributes` o
1766
+ `descriptions`, nunca una por la otra.
1767
+ */
1768
+ const { attributes, ...destinos } = propagation;
1769
+
1770
+ if (esDescripcion) {
1771
+ saveDescriptions(token, { ...destinos, descriptions: attributes });
1772
+ } else {
1773
+ saveDatasheets(token, propagation);
1774
+ }
1672
1775
  }}
1673
1776
  />
1674
1777
  )}
@@ -2067,6 +2170,7 @@ const ProviderProductEditionView = ({
2067
2170
  código compartido que dice "estos son el mismo producto en
2068
2171
  otra presentación". Mezclarlos en una sola caja haría creer
2069
2172
  que agrupar hereda algo, que es justo lo que no pasa. */}
2173
+ {puedeAgruparse && (
2070
2174
  <div className="variants-actions">
2071
2175
  <button
2072
2176
  type="button"
@@ -2088,8 +2192,9 @@ const ProviderProductEditionView = ({
2088
2192
  </button>
2089
2193
  )}
2090
2194
  </div>
2195
+ )}
2091
2196
 
2092
- {showGroup && variantGroup?.group && (
2197
+ {puedeAgruparse && showGroup && variantGroup?.group && (
2093
2198
  <div className="variants-family">
2094
2199
  {/* Los hermanos de grupo NO se listan como padre/hijo: aquí
2095
2200
  nadie hereda de nadie, así que no hay rol que mostrar,
@@ -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";
@@ -41,7 +34,7 @@ const ProductEditionContext = createContext();
41
34
  export const ProviderProductEditionProvider = ({ children }) => {
42
35
  const [state, dispatch] = useReducer(productEditionReducer, initialState);
43
36
 
44
- const saveDescriptions = async (token) => {
37
+ const saveDescriptions = async (token, propagation) => {
45
38
  if (state.updated_descriptions_inputs.length === 0) return;
46
39
 
47
40
  dispatch({ type: "SET_SAVING", payload: true });
@@ -49,6 +42,7 @@ export const ProviderProductEditionProvider = ({ children }) => {
49
42
  const dataObject = {
50
43
  articleId: state.product?.id_article,
51
44
  articleData: state.updated_descriptions_inputs,
45
+ ...(propagation ? { propagation } : {}),
52
46
  };
53
47
 
54
48
  // console.log({dataObject});
@@ -561,198 +555,6 @@ export const ProviderProductEditionProvider = ({ children }) => {
561
555
  dispatch({ type: "SET_SAVING", payload: false });
562
556
  };
563
557
 
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
558
  const createComment = async (body, token) => {
757
559
  const concept = getConceptByTab(state.active_tab);
758
560
  const data = {
@@ -781,8 +583,6 @@ export const ProviderProductEditionProvider = ({ children }) => {
781
583
  updateImages,
782
584
  saveImageAttrs,
783
585
  deleteImages,
784
- saveAssets,
785
- registerUploadedAssets,
786
586
  handleOnDownloadImages,
787
587
  createComment,
788
588
  };
@@ -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
  };