contentoh-components-library 21.6.57 → 21.6.58

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm test *)"
5
+ ]
6
+ }
7
+ }
@@ -266,7 +266,8 @@ ProviderProductEditionFromProducts.args = {
266
266
  },
267
267
  showSurvey: function showSurvey(v) {
268
268
  return v && alert("se muestra");
269
- }
269
+ },
270
+ enableDigitalAssets: true
270
271
  };
271
272
  var ProviderProductEditionFromTasks = Template.bind({});
272
273
  exports.ProviderProductEditionFromTasks = ProviderProductEditionFromTasks;
@@ -41,6 +41,10 @@ var _awsSdk = _interopRequireDefault(require("aws-sdk"));
41
41
 
42
42
  var _uuid = require("uuid");
43
43
 
44
+ var _assets = require("../../../../global-files/digital-assets/assets.adapter");
45
+
46
+ var _assets2 = require("../../../../global-files/digital-assets/assets.reducer");
47
+
44
48
  var _jsxRuntime = require("react/jsx-runtime");
45
49
 
46
50
  var S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
@@ -585,25 +589,334 @@ var ProviderProductEditionProvider = function ProviderProductEditionProvider(_re
585
589
  return _ref5.apply(this, arguments);
586
590
  };
587
591
  }();
592
+ /*
593
+ Registra en la base los activos que ACABAN de subirse, sin esperar a que el
594
+ usuario guarde.
595
+ Es una corrección de expectativa, no una comodidad: al ver la barra de
596
+ progreso llegar al final, cualquiera da por hecho que el activo ya quedó
597
+ ligado al producto. Si entonces cierra la ficha, el archivo se queda en S3
598
+ sin fila en la base —invisible y sin forma de recuperarlo desde la
599
+ pantalla—.
600
+ Manda SOLO las altas recién subidas, con `updateAssets` y `deleteAssets`
601
+ vacíos. Un reetiquetado o un borrado que el usuario todavía no confirmó no
602
+ se aplica por haber soltado otro archivo: el botón de guardar sigue siendo
603
+ quien decide sobre esos.
604
+ */
588
605
 
589
- var createComment = /*#__PURE__*/function () {
590
- var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(body, token) {
606
+
607
+ var registerUploadedAssets = /*#__PURE__*/function () {
608
+ var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(token) {
591
609
  var _state$product14, _state$product15, _state$product16;
592
610
 
593
- var concept, data;
611
+ var uploaded,
612
+ listos,
613
+ data,
614
+ _state$product17,
615
+ _state$product18,
616
+ _body$assets,
617
+ res,
618
+ body,
619
+ guardados,
620
+ _args5 = arguments;
621
+
594
622
  return _regenerator.default.wrap(function _callee5$(_context5) {
595
623
  while (1) {
596
624
  switch (_context5.prev = _context5.next) {
597
625
  case 0:
598
- concept = (0, _utils.getConceptByTab)(state.active_tab);
626
+ uploaded = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : [];
627
+ listos = uploaded.filter(function (asset) {
628
+ return asset.src && !(0, _assets.isPersisted)(asset);
629
+ });
630
+
631
+ if (!(listos.length === 0)) {
632
+ _context5.next = 4;
633
+ break;
634
+ }
635
+
636
+ return _context5.abrupt("return");
637
+
638
+ case 4:
599
639
  data = {
600
640
  articleId: (_state$product14 = state.product) === null || _state$product14 === void 0 ? void 0 : _state$product14.id_article,
601
- orderId: ((_state$product15 = state.product) === null || _state$product15 === void 0 ? void 0 : _state$product15.orderId) || ((_state$product16 = state.product) === null || _state$product16 === void 0 ? void 0 : _state$product16.id_order),
641
+ newAssets: listos.map(_assets.toPayload),
642
+ updateAssets: [],
643
+ deleteAssets: []
644
+ };
645
+
646
+ if ((_state$product15 = state.product) !== null && _state$product15 !== void 0 && _state$product15.orderId || (_state$product16 = state.product) !== null && _state$product16 !== void 0 && _state$product16.id_order) {
647
+ data.orderId = ((_state$product17 = state.product) === null || _state$product17 === void 0 ? void 0 : _state$product17.orderId) || ((_state$product18 = state.product) === null || _state$product18 === void 0 ? void 0 : _state$product18.id_order);
648
+ }
649
+
650
+ _context5.prev = 6;
651
+ _context5.next = 9;
652
+ return _axios.default.put(process.env.REACT_APP_ARTICLE_DATA_ENDPOINT, data, {
653
+ params: {
654
+ asset: true
655
+ },
656
+ headers: {
657
+ Authorization: token
658
+ }
659
+ });
660
+
661
+ case 9:
662
+ res = _context5.sent;
663
+
664
+ if (!(res.data.statusCode !== 200)) {
665
+ _context5.next = 12;
666
+ break;
667
+ }
668
+
669
+ throw new Error("Respuesta inesperada");
670
+
671
+ case 12:
672
+ body = JSON.parse(res.data.body);
673
+ guardados = (_body$assets = body.assets) !== null && _body$assets !== void 0 ? _body$assets : [];
674
+ /*
675
+ Se le pone a cada activo el id que le tocó, emparejando por la clave de
676
+ S3, que es única.
677
+ A propósito NO se reemplaza la lista entera con lo que devolvió el
678
+ backend: eso borraría el rastro de lo que el usuario cambió o borró y
679
+ todavía no ha guardado. Aquí solo se completa lo que faltaba.
680
+ */
681
+
682
+ listos.forEach(function (asset) {
683
+ var fila = guardados.find(function (row) {
684
+ return row.src === asset.src;
685
+ });
686
+ if (!fila) return;
687
+ dispatch({
688
+ type: "PATCH_ASSET",
689
+ payload: {
690
+ key: (0, _assets.assetKey)(asset),
691
+ changes: {
692
+ id: fila.id,
693
+ url: fila.url
694
+ }
695
+ }
696
+ });
697
+ });
698
+ _context5.next = 21;
699
+ break;
700
+
701
+ case 17:
702
+ _context5.prev = 17;
703
+ _context5.t0 = _context5["catch"](6);
704
+ console.log("Error registering assets:", _context5.t0);
705
+ /*
706
+ El archivo SÍ está en S3; lo que falló es la fila. Se marca en el activo
707
+ y no en un modal porque el usuario puede estar soltando más archivos:
708
+ interrumpirlo con un diálogo por cada fallo sería peor que dejarlo
709
+ señalado en su renglón, donde además se ve cuál falló.
710
+ */
711
+
712
+ listos.forEach(function (asset) {
713
+ return dispatch({
714
+ type: "PATCH_ASSET",
715
+ payload: {
716
+ key: (0, _assets.assetKey)(asset),
717
+ changes: {
718
+ status: "error",
719
+ error: "Se subió el archivo pero no se pudo guardar. Usa el botón de guardar."
720
+ }
721
+ }
722
+ });
723
+ });
724
+
725
+ case 21:
726
+ case "end":
727
+ return _context5.stop();
728
+ }
729
+ }
730
+ }, _callee5, null, [[6, 17]]);
731
+ }));
732
+
733
+ return function registerUploadedAssets(_x7) {
734
+ return _ref6.apply(this, arguments);
735
+ };
736
+ }();
737
+ /*
738
+ Guarda los activos digitales: registra los nuevos, manda los cambios y pide
739
+ las bajas.
740
+ Va aparte de `updateImages` y no dentro, aunque las dos bandejas vivan en la
741
+ misma pestaña. Un activo no pasa por ninguna de las reglas de una imagen —ni
742
+ tipo de toma, ni obligatoriedad, ni cupo por cadena— y el backend los escribe
743
+ en otra tabla. Mezclarlos obligaría a partir en dos cada validación de
744
+ `updateImages`, que ya es la función más delicada de este archivo.
745
+ Igual que con las imágenes, aquí NO viaja ningún binario: el archivo ya está
746
+ en S3 y esto solo registra metadatos. Mandar el archivo en el cuerpo devuelve
747
+ 413.
748
+ */
749
+
750
+
751
+ var saveAssets = /*#__PURE__*/function () {
752
+ var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(token) {
753
+ var _state$product19, _state$product20, _state$product21;
754
+
755
+ var payload, newAssets, updateAssets, deleteAssets, sinSubir, data, _state$product22, _state$product23, res;
756
+
757
+ return _regenerator.default.wrap(function _callee6$(_context6) {
758
+ while (1) {
759
+ switch (_context6.prev = _context6.next) {
760
+ case 0:
761
+ payload = (0, _assets.buildSavePayload)((0, _assets2.selectAssetsToSave)(state));
762
+ newAssets = payload.newAssets, updateAssets = payload.updateAssets, deleteAssets = payload.deleteAssets;
763
+
764
+ if (!(!newAssets.length && !updateAssets.length && !deleteAssets.length)) {
765
+ _context6.next = 4;
766
+ break;
767
+ }
768
+
769
+ return _context6.abrupt("return", false);
770
+
771
+ case 4:
772
+ /*
773
+ Un activo nuevo sin `key` es un archivo que todavía no llegó a S3.
774
+ Registrarlo crearía una fila apuntando a un objeto que no existe: la
775
+ bandeja lo mostraría y al descargarlo daría 404, sin forma de saber por qué.
776
+ Mejor no guardar nada y decirlo.
777
+ */
778
+ sinSubir = newAssets.filter(function (asset) {
779
+ return !asset.key;
780
+ });
781
+
782
+ if (!(sinSubir.length > 0)) {
783
+ _context6.next = 8;
784
+ break;
785
+ }
786
+
787
+ dispatch({
788
+ type: "SET_MODAL",
789
+ payload: {
790
+ show: true,
791
+ title: "Faltan archivos por subir",
792
+ message: "".concat(sinSubir.length, " activo(s) todav\xEDa no se han subido. Espera a que termine la carga e intenta de nuevo."),
793
+ image: _genericModalWarning.default
794
+ }
795
+ });
796
+ return _context6.abrupt("return", false);
797
+
798
+ case 8:
799
+ dispatch({
800
+ type: "SET_SAVING",
801
+ payload: true
802
+ }); // Sin `version`: un activo general es el mismo para todas las versiones del
803
+ // producto, así que ni la fila ni la clave de S3 la llevan.
804
+
805
+ data = {
806
+ articleId: (_state$product19 = state.product) === null || _state$product19 === void 0 ? void 0 : _state$product19.id_article,
807
+ newAssets: newAssets,
808
+ updateAssets: updateAssets,
809
+ deleteAssets: deleteAssets
810
+ };
811
+
812
+ if ((_state$product20 = state.product) !== null && _state$product20 !== void 0 && _state$product20.orderId || (_state$product21 = state.product) !== null && _state$product21 !== void 0 && _state$product21.id_order) {
813
+ data.orderId = ((_state$product22 = state.product) === null || _state$product22 === void 0 ? void 0 : _state$product22.orderId) || ((_state$product23 = state.product) === null || _state$product23 === void 0 ? void 0 : _state$product23.id_order);
814
+ }
815
+
816
+ _context6.prev = 11;
817
+ _context6.next = 14;
818
+ return _axios.default.put(process.env.REACT_APP_ARTICLE_DATA_ENDPOINT, data, {
819
+ params: {
820
+ asset: true
821
+ },
822
+ headers: {
823
+ Authorization: token
824
+ }
825
+ });
826
+
827
+ case 14:
828
+ res = _context6.sent;
829
+
830
+ if (!(res.data.statusCode === 200)) {
831
+ _context6.next = 19;
832
+ break;
833
+ }
834
+
835
+ // Se olvida qué cambió y qué se borró: lo que hay en pantalla ya es lo
836
+ // que hay en la base. Sin esto, el siguiente guardado reenviaría todo.
837
+ dispatch({
838
+ type: "CLEAR_ASSETS_TRACKING"
839
+ });
840
+ dispatch({
841
+ type: "SET_MODAL",
842
+ payload: {
843
+ show: true,
844
+ title: "",
845
+ message: "Activos digitales guardados con éxito",
846
+ image: _genericModalCheck.default
847
+ }
848
+ });
849
+ /*
850
+ Devuelve `true` para que quien llama recargue.
851
+ Es imprescindible, no cortesía: los activos recién creados siguen en
852
+ memoria con su id temporal y sin el id de la base. Sin recargar, el
853
+ siguiente guardado los volvería a mandar como nuevos y se duplicarían.
854
+ Es exactamente el problema que ya tuvieron las imágenes.
855
+ */
856
+
857
+ return _context6.abrupt("return", true);
858
+
859
+ case 19:
860
+ return _context6.abrupt("return", false);
861
+
862
+ case 22:
863
+ _context6.prev = 22;
864
+ _context6.t0 = _context6["catch"](11);
865
+ console.log("Error saving assets:", _context6.t0);
866
+ dispatch({
867
+ type: "SET_ERRORS",
868
+ payload: [].concat((0, _toConsumableArray2.default)(state.errors), [_context6.t0])
869
+ });
870
+ dispatch({
871
+ type: "SET_MODAL",
872
+ payload: {
873
+ show: true,
874
+ title: "Error",
875
+ message: "Hubo un error al guardar los activos digitales",
876
+ image: _errorModal.default
877
+ }
878
+ });
879
+ return _context6.abrupt("return", false);
880
+
881
+ case 28:
882
+ _context6.prev = 28;
883
+ dispatch({
884
+ type: "SET_SAVING",
885
+ payload: false
886
+ });
887
+ return _context6.finish(28);
888
+
889
+ case 31:
890
+ case "end":
891
+ return _context6.stop();
892
+ }
893
+ }
894
+ }, _callee6, null, [[11, 22, 28, 31]]);
895
+ }));
896
+
897
+ return function saveAssets(_x8) {
898
+ return _ref7.apply(this, arguments);
899
+ };
900
+ }();
901
+
902
+ var createComment = /*#__PURE__*/function () {
903
+ var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(body, token) {
904
+ var _state$product24, _state$product25, _state$product26;
905
+
906
+ var concept, data;
907
+ return _regenerator.default.wrap(function _callee7$(_context7) {
908
+ while (1) {
909
+ switch (_context7.prev = _context7.next) {
910
+ case 0:
911
+ concept = (0, _utils.getConceptByTab)(state.active_tab);
912
+ data = {
913
+ articleId: (_state$product24 = state.product) === null || _state$product24 === void 0 ? void 0 : _state$product24.id_article,
914
+ orderId: ((_state$product25 = state.product) === null || _state$product25 === void 0 ? void 0 : _state$product25.orderId) || ((_state$product26 = state.product) === null || _state$product26 === void 0 ? void 0 : _state$product26.id_order),
602
915
  message: body,
603
916
  concept: concept,
604
917
  version: state.product.version
605
918
  };
606
- _context5.next = 4;
919
+ _context7.next = 4;
607
920
  return _axios.default.post("".concat(process.env.REACT_APP_COMMENTS_ENDPOINT), data, {
608
921
  headers: {
609
922
  Authorization: token
@@ -612,14 +925,14 @@ var ProviderProductEditionProvider = function ProviderProductEditionProvider(_re
612
925
 
613
926
  case 4:
614
927
  case "end":
615
- return _context5.stop();
928
+ return _context7.stop();
616
929
  }
617
930
  }
618
- }, _callee5);
931
+ }, _callee7);
619
932
  }));
620
933
 
621
- return function createComment(_x7, _x8) {
622
- return _ref6.apply(this, arguments);
934
+ return function createComment(_x9, _x10) {
935
+ return _ref8.apply(this, arguments);
623
936
  };
624
937
  }();
625
938
 
@@ -630,6 +943,8 @@ var ProviderProductEditionProvider = function ProviderProductEditionProvider(_re
630
943
  saveDescriptions: saveDescriptions,
631
944
  updateImages: updateImages,
632
945
  deleteImages: deleteImages,
946
+ saveAssets: saveAssets,
947
+ registerUploadedAssets: registerUploadedAssets,
633
948
  handleOnDownloadImages: handleOnDownloadImages,
634
949
  createComment: createComment
635
950
  };
@@ -17,11 +17,15 @@ var _inputs = require("./reducers/inputs");
17
17
 
18
18
  var _activeState = require("./reducers/active-state");
19
19
 
20
+ var _assets = require("../../../../global-files/digital-assets/assets.actions");
21
+
22
+ var _assets2 = require("../../../../global-files/digital-assets/assets.reducer");
23
+
20
24
  // Initial state
21
- var initialState = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, _system.systemInitialState), _product.productInitialState), _inputs.inputsInitialState), _activeState.activeStateInitialState); // Action types
25
+ var initialState = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, _system.systemInitialState), _product.productInitialState), _inputs.inputsInitialState), _activeState.activeStateInitialState), _assets2.assetsInitialState); // Action types
22
26
 
23
27
  exports.initialState = initialState;
24
- var ACTIONS = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, _system.SYSTEM_ACTIONS), _product.PRODUCT_ACTIONS), _inputs.INPUTS_ACTIONS), _activeState.ACTIVE_STATE_ACTIONS); // Reducer function
28
+ var ACTIONS = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, _system.SYSTEM_ACTIONS), _product.PRODUCT_ACTIONS), _inputs.INPUTS_ACTIONS), _activeState.ACTIVE_STATE_ACTIONS), _assets.ASSET_ACTIONS); // Reducer function
25
29
 
26
30
  exports.ACTIONS = ACTIONS;
27
31
 
@@ -51,6 +55,12 @@ var productEditionReducer = function productEditionReducer(state, action) {
51
55
  return activeStateResult;
52
56
  }
53
57
 
58
+ var assetsResult = (0, _assets2.assetsReducer)(state, action);
59
+
60
+ if (assetsResult !== null) {
61
+ return assetsResult;
62
+ }
63
+
54
64
  return state;
55
65
  };
56
66