contentoh-components-library 21.6.53 → 21.6.54
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.
- package/dist/ai/prompts/attribute.prompt.js +28 -0
- package/dist/ai/prompts/description.prompt.js +33 -0
- package/dist/ai/schemas/attribute.schema.js +35 -0
- package/dist/ai/schemas/description.schema.js +27 -0
- package/dist/components/atoms/AssetPreview/AssetPreview.stories.js +118 -0
- package/dist/components/atoms/AssetPreview/index.js +150 -0
- package/dist/components/atoms/AssetPreview/styles.js +28 -0
- package/dist/components/molecules/GalleryAssetElement/GalleryAssetElement.stories.js +147 -0
- package/dist/components/molecules/GalleryAssetElement/index.js +178 -0
- package/dist/components/molecules/GalleryAssetElement/styles.js +26 -0
- package/dist/components/molecules/GalleryTrayTabs/GalleryTrayTabs.stories.js +56 -0
- package/dist/components/molecules/GalleryTrayTabs/index.js +60 -0
- package/dist/components/molecules/GalleryTrayTabs/styles.js +20 -0
- package/dist/components/organisms/DigitalAssetsTray/DigitalAssetsTray.stories.js +171 -0
- package/dist/components/organisms/DigitalAssetsTray/index.js +211 -0
- package/dist/components/organisms/DigitalAssetsTray/styles.js +22 -0
- package/dist/components/pages/RetailerProductEdition/index.js +12 -4
- package/dist/components/pages/RetailerProductEdition/stories/TextEditor.stories.js +45 -135
- package/dist/components/pages/RetailerProductEdition/utils.js +1 -1
- package/dist/global-files/digital-assets/assetTypes.js +480 -0
- package/dist/global-files/digital-assets/assets.actions.js +64 -0
- package/dist/global-files/digital-assets/assets.adapter.js +304 -0
- package/dist/global-files/digital-assets/assets.mock.js +136 -0
- package/dist/global-files/digital-assets/assets.reducer.js +220 -0
- package/dist/global-files/digital-assets/uploadAssets.js +179 -0
- package/dist/global-files/digital-assets/useDigitalAssets.js +522 -0
- package/package.json +1 -1
- package/src/components/pages/RetailerProductEdition/index.js +15 -5
- package/src/components/pages/RetailerProductEdition/stories/TextEditor.stories.js +54 -95
- package/src/components/pages/RetailerProductEdition/utils.js +1 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.GalleryAssetElement = void 0;
|
|
9
|
+
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
11
|
+
|
|
12
|
+
var _styles = require("./styles");
|
|
13
|
+
|
|
14
|
+
var _AssetPreview = require("../../atoms/AssetPreview");
|
|
15
|
+
|
|
16
|
+
var _CheckBox = require("../../atoms/CheckBox");
|
|
17
|
+
|
|
18
|
+
var _Select = _interopRequireDefault(require("../../atoms/Select"));
|
|
19
|
+
|
|
20
|
+
var _assetTypes = require("../../../global-files/digital-assets/assetTypes");
|
|
21
|
+
|
|
22
|
+
var _assets = require("../../../global-files/digital-assets/assets.adapter");
|
|
23
|
+
|
|
24
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
Fila de un activo digital en la bandeja.
|
|
28
|
+
|
|
29
|
+
Es un componente aparte de `GalleryElement` a propósito, no una bifurcación
|
|
30
|
+
dentro de él. Un activo no comparte casi nada con una imagen de producto: no
|
|
31
|
+
tiene tipo de toma, ni leyenda, ni panel de validación, ni comparación contra
|
|
32
|
+
la versión auditable. Meterlo en el mismo archivo habría partido su render en
|
|
33
|
+
dos mitades y puesto en riesgo la bandeja de imágenes, que ya funciona.
|
|
34
|
+
|
|
35
|
+
Lo que sí comparte —rejilla, tamaños, colores— vive en los estilos, calcados
|
|
36
|
+
de `GalleryElement` para que las dos listas se vean como una sola tabla.
|
|
37
|
+
*/
|
|
38
|
+
var GalleryAssetElement = function GalleryAssetElement(_ref) {
|
|
39
|
+
var _asset$progress;
|
|
40
|
+
|
|
41
|
+
var _ref$asset = _ref.asset,
|
|
42
|
+
asset = _ref$asset === void 0 ? {} : _ref$asset,
|
|
43
|
+
_ref$index = _ref.index,
|
|
44
|
+
index = _ref$index === void 0 ? 0 : _ref$index,
|
|
45
|
+
_ref$gridLayout = _ref.gridLayout,
|
|
46
|
+
gridLayout = _ref$gridLayout === void 0 ? false : _ref$gridLayout,
|
|
47
|
+
id = _ref.id,
|
|
48
|
+
label = _ref.label,
|
|
49
|
+
_ref$selectedAssets = _ref.selectedAssets,
|
|
50
|
+
selectedAssets = _ref$selectedAssets === void 0 ? [] : _ref$selectedAssets,
|
|
51
|
+
setSelectedAssets = _ref.setSelectedAssets,
|
|
52
|
+
setCheckAll = _ref.setCheckAll,
|
|
53
|
+
changeAsset = _ref.changeAsset,
|
|
54
|
+
onRemove = _ref.onRemove,
|
|
55
|
+
_ref$readOnly = _ref.readOnly,
|
|
56
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
57
|
+
_ref$checkAllId = _ref.checkAllId,
|
|
58
|
+
checkAllId = _ref$checkAllId === void 0 ? "check-all-assets" : _ref$checkAllId,
|
|
59
|
+
_ref$itemSelector = _ref.itemSelector,
|
|
60
|
+
itemSelector = _ref$itemSelector === void 0 ? "[id^='gallery-asset-']" : _ref$itemSelector;
|
|
61
|
+
var elementId = id || "gallery-asset-".concat(index);
|
|
62
|
+
var key = (0, _assets.assetKey)(asset);
|
|
63
|
+
var isUploading = asset.status === _assets.ASSET_STATUS.UPLOADING;
|
|
64
|
+
var hasError = asset.status === _assets.ASSET_STATUS.ERROR;
|
|
65
|
+
|
|
66
|
+
var checkOnChange = function checkOnChange(e) {
|
|
67
|
+
var chkGlobal = document.getElementById(checkAllId);
|
|
68
|
+
var checkboxList = document.querySelectorAll(itemSelector);
|
|
69
|
+
var temp = selectedAssets.slice(); // Se compara por `assetKey` y no por `id`: un activo recién soltado todavía
|
|
70
|
+
// no tiene id del backend, y comparando por id todos los pendientes serían
|
|
71
|
+
// "el mismo" y se quitarían juntos de la selección.
|
|
72
|
+
|
|
73
|
+
temp = e.target.checked ? [].concat((0, _toConsumableArray2.default)(temp), [asset]) : temp.filter(function (item) {
|
|
74
|
+
return (0, _assets.assetKey)(item) !== key;
|
|
75
|
+
});
|
|
76
|
+
var counter = 0;
|
|
77
|
+
checkboxList === null || checkboxList === void 0 ? void 0 : checkboxList.forEach(function (chk) {
|
|
78
|
+
return chk.checked && counter++;
|
|
79
|
+
});
|
|
80
|
+
if (chkGlobal) chkGlobal.checked = checkboxList.length === counter;
|
|
81
|
+
setCheckAll === null || setCheckAll === void 0 ? void 0 : setCheckAll(checkboxList.length === counter);
|
|
82
|
+
setSelectedAssets === null || setSelectedAssets === void 0 ? void 0 : setSelectedAssets(temp);
|
|
83
|
+
};
|
|
84
|
+
/*
|
|
85
|
+
Abrir el activo en otra pestaña.
|
|
86
|
+
Sirve para TODOS los tipos y por eso se prefiere a un visor propio: un video
|
|
87
|
+
se reproduce con el reproductor del navegador, un PDF se abre, y un .psd se
|
|
88
|
+
descarga. Sin esto, la bandeja mostraba el archivo pero no había forma de
|
|
89
|
+
verlo — un video quedaba como un fotograma fijo sin botón de reproducir.
|
|
90
|
+
Solo cuando ya está en S3: un activo recién soltado apunta al archivo del
|
|
91
|
+
disco del usuario y abrirlo no le diría nada nuevo.
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
var abrir = function abrir() {
|
|
96
|
+
if (!asset.id || !asset.url) return;
|
|
97
|
+
window.open(asset.url, "_blank", "noopener,noreferrer");
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
var onChangeType = function onChangeType(e) {
|
|
101
|
+
changeAsset === null || changeAsset === void 0 ? void 0 : changeAsset({
|
|
102
|
+
action: "changeAssetInfo",
|
|
103
|
+
attribute: "assetType",
|
|
104
|
+
value: e.target.value,
|
|
105
|
+
index: index
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_styles.Container, {
|
|
110
|
+
className: "".concat(gridLayout ? "grid-gallery" : "row-gallery", " ").concat(hasError ? "asset-error" : "").trim(),
|
|
111
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
112
|
+
className: "buttons-container",
|
|
113
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckBox.CheckBox, {
|
|
114
|
+
id: elementId,
|
|
115
|
+
label: label,
|
|
116
|
+
onChange: checkOnChange
|
|
117
|
+
})
|
|
118
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
119
|
+
className: "asset-container",
|
|
120
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_AssetPreview.AssetPreview, {
|
|
121
|
+
asset: asset,
|
|
122
|
+
size: "catalogue-image-".concat(gridLayout ? "big" : "small", "-size")
|
|
123
|
+
/*
|
|
124
|
+
En cuadrícula hay sitio para el reproductor; en la fila, de 60px,
|
|
125
|
+
los controles no caben y estorban al clic.
|
|
126
|
+
*/
|
|
127
|
+
,
|
|
128
|
+
controls: gridLayout && (0, _assetTypes.resolvePreviewKind)(asset) === _assetTypes.ASSET_PREVIEW.VIDEO,
|
|
129
|
+
onClick: abrir
|
|
130
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
131
|
+
className: "information-container",
|
|
132
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
133
|
+
className: asset.id ? "asset-name asset-link" : "asset-name",
|
|
134
|
+
title: asset.id ? "Abrir ".concat(asset.name) : asset.name,
|
|
135
|
+
onClick: abrir,
|
|
136
|
+
children: asset.name
|
|
137
|
+
}), !gridLayout && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
138
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
139
|
+
className: "asset-weight",
|
|
140
|
+
children: (0, _assetTypes.formatBytes)(asset.sizeBytes)
|
|
141
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
142
|
+
className: "asset-format",
|
|
143
|
+
children: (asset.ext || "").toUpperCase()
|
|
144
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, {
|
|
145
|
+
width: "100%",
|
|
146
|
+
placeholder: "Tipo de activo",
|
|
147
|
+
options: (0, _assetTypes.assetTypeOptions)(),
|
|
148
|
+
valueSelected: asset.assetType,
|
|
149
|
+
onChange: onChangeType,
|
|
150
|
+
className: readOnly ? "disabled" : ""
|
|
151
|
+
})]
|
|
152
|
+
})]
|
|
153
|
+
})]
|
|
154
|
+
}), isUploading && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
155
|
+
className: "asset-progress",
|
|
156
|
+
"aria-label": "Subiendo activo",
|
|
157
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
158
|
+
className: "asset-progress-fill",
|
|
159
|
+
style: {
|
|
160
|
+
width: "".concat(Math.min(100, Math.max(0, (_asset$progress = asset.progress) !== null && _asset$progress !== void 0 ? _asset$progress : 0)), "%")
|
|
161
|
+
}
|
|
162
|
+
})
|
|
163
|
+
}), hasError && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
164
|
+
className: "asset-error-message",
|
|
165
|
+
children: asset.error
|
|
166
|
+
}), onRemove && !readOnly && /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
167
|
+
type: "button",
|
|
168
|
+
className: "asset-remove",
|
|
169
|
+
onClick: function onClick() {
|
|
170
|
+
return onRemove(asset);
|
|
171
|
+
},
|
|
172
|
+
title: "Quitar activo",
|
|
173
|
+
children: "\xD7"
|
|
174
|
+
})]
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
exports.GalleryAssetElement = GalleryAssetElement;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.Container = void 0;
|
|
9
|
+
|
|
10
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/taggedTemplateLiteral"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _variables = require("../../../global-files/variables");
|
|
15
|
+
|
|
16
|
+
var _templateObject;
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
Calcado de `GalleryElement/styles.js` para que imágenes y activos se lean como
|
|
20
|
+
una sola tabla. Cambia solo la rejilla de la fila —cuatro columnas en vez de
|
|
21
|
+
cinco, porque un activo no tiene leyenda— y lo propio de un archivo que se
|
|
22
|
+
está subiendo: barra de progreso, mensaje de error y botón de quitar.
|
|
23
|
+
*/
|
|
24
|
+
var Container = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n position: relative;\n\n &.grid-gallery {\n width: 179px;\n border-radius: 3px;\n overflow: hidden;\n\n .buttons-container {\n position: absolute;\n top: 5px;\n left: 5px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .asset-container {\n border: 1px solid #f0eef2;\n\n .information-container {\n background-color: ", ";\n display: flex;\n justify-content: space-between;\n padding: 0 2px;\n\n p {\n font-family: ", ";\n color: ", ";\n font-size: 11px;\n line-height: 17px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n }\n }\n\n &.row-gallery {\n width: 100%;\n display: grid;\n grid-template-columns: 0.05fr 1fr;\n align-items: center;\n padding-right: 10px;\n\n .buttons-container {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .asset-container {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n flex: 1;\n\n .information-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n align-items: center;\n\n p {\n font-family: ", ";\n color: ", ";\n font-size: 14px;\n line-height: 17px;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n & > * {\n flex: 1;\n padding: 5px;\n }\n }\n }\n }\n\n /* El nombre es el sitio donde uno intenta hacer clic para abrir un archivo. */\n .asset-link {\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: 2px;\n\n &:hover {\n color: ", ";\n }\n }\n\n &.asset-error {\n border: 1px solid ", ";\n border-radius: 3px;\n }\n\n /* Progreso de subida. Ocupa el borde inferior de la fila para no empujar el\n resto del contenido mientras aparece y desaparece. */\n .asset-progress {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 3px;\n background: ", ";\n border-radius: 2px;\n overflow: hidden;\n }\n\n .asset-progress-fill {\n height: 100%;\n background: ", ";\n transition: width 0.2s ease-out;\n }\n\n .asset-error-message {\n margin: 2px 0 0;\n padding: 0 8px;\n font-family: ", ";\n font-size: 11px;\n line-height: 15px;\n color: ", ";\n }\n\n .asset-remove {\n position: absolute;\n top: 4px;\n right: 6px;\n width: 18px;\n height: 18px;\n display: grid;\n place-items: center;\n padding: 0;\n border: none;\n border-radius: 50%;\n background: ", ";\n color: ", ";\n font-size: 14px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n background: ", ";\n }\n }\n"])), _variables.GlobalColors.s2, _variables.FontFamily.Lato, _variables.GlobalColors.s4, _variables.FontFamily.Lato, _variables.GlobalColors.s4, _variables.GlobalColors.color_purple, _variables.GlobalColors.secondary_magenta, _variables.GlobalColors.s3, _variables.GlobalColors.color_purple, _variables.FontFamily.Lato, _variables.GlobalColors.secondary_magenta, _variables.GlobalColors.s2, _variables.GlobalColors.s5, _variables.GlobalColors.s3);
|
|
25
|
+
|
|
26
|
+
exports.Container = Container;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = exports.SinActivos = exports.Interactivo = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var _index = require("./index");
|
|
15
|
+
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
|
|
18
|
+
var _default = {
|
|
19
|
+
title: "Components/molecules/GalleryTrayTabs",
|
|
20
|
+
component: _index.GalleryTrayTabs
|
|
21
|
+
};
|
|
22
|
+
exports.default = _default;
|
|
23
|
+
|
|
24
|
+
var Interactivo = function Interactivo() {
|
|
25
|
+
var _useState = (0, _react.useState)(_index.TRAYS.IMAGES),
|
|
26
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
27
|
+
tray = _useState2[0],
|
|
28
|
+
setTray = _useState2[1];
|
|
29
|
+
|
|
30
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GalleryTrayTabs, {
|
|
31
|
+
activeTray: tray,
|
|
32
|
+
setActiveTray: setTray,
|
|
33
|
+
imagesCount: 8,
|
|
34
|
+
assetsCount: 3
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
/** Estado real hasta que exista el backend: la bandeja de activos en cero. */
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
exports.Interactivo = Interactivo;
|
|
41
|
+
|
|
42
|
+
var SinActivos = function SinActivos() {
|
|
43
|
+
var _useState3 = (0, _react.useState)(_index.TRAYS.IMAGES),
|
|
44
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
45
|
+
tray = _useState4[0],
|
|
46
|
+
setTray = _useState4[1];
|
|
47
|
+
|
|
48
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GalleryTrayTabs, {
|
|
49
|
+
activeTray: tray,
|
|
50
|
+
setActiveTray: setTray,
|
|
51
|
+
imagesCount: 8,
|
|
52
|
+
assetsCount: 0
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
exports.SinActivos = SinActivos;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TRAYS = exports.GalleryTrayTabs = void 0;
|
|
7
|
+
|
|
8
|
+
var _styles = require("./styles");
|
|
9
|
+
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
|
|
12
|
+
var TRAYS = {
|
|
13
|
+
IMAGES: "images",
|
|
14
|
+
ASSETS: "assets"
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Selector entre las dos bandejas de la pestaña Imágenes.
|
|
18
|
+
*
|
|
19
|
+
* Los activos viven aquí y no en una pestaña propia porque es lo que pide la
|
|
20
|
+
* tarea —"dentro de las bandejas de imágenes"— y porque así comparten
|
|
21
|
+
* selección, descarga y permisos con las fotos en vez de duplicarlos.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
exports.TRAYS = TRAYS;
|
|
25
|
+
|
|
26
|
+
var GalleryTrayTabs = function GalleryTrayTabs(_ref) {
|
|
27
|
+
var _ref$activeTray = _ref.activeTray,
|
|
28
|
+
activeTray = _ref$activeTray === void 0 ? TRAYS.IMAGES : _ref$activeTray,
|
|
29
|
+
setActiveTray = _ref.setActiveTray,
|
|
30
|
+
_ref$imagesCount = _ref.imagesCount,
|
|
31
|
+
imagesCount = _ref$imagesCount === void 0 ? 0 : _ref$imagesCount,
|
|
32
|
+
_ref$assetsCount = _ref.assetsCount,
|
|
33
|
+
assetsCount = _ref$assetsCount === void 0 ? 0 : _ref$assetsCount;
|
|
34
|
+
var trays = [{
|
|
35
|
+
id: TRAYS.IMAGES,
|
|
36
|
+
label: "Imágenes",
|
|
37
|
+
count: imagesCount
|
|
38
|
+
}, {
|
|
39
|
+
id: TRAYS.ASSETS,
|
|
40
|
+
label: "Activos digitales",
|
|
41
|
+
count: assetsCount
|
|
42
|
+
}];
|
|
43
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_styles.Container, {
|
|
44
|
+
children: trays.map(function (tray) {
|
|
45
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("button", {
|
|
46
|
+
type: "button",
|
|
47
|
+
className: tray.id === activeTray ? "tray-tab active" : "tray-tab",
|
|
48
|
+
onClick: function onClick() {
|
|
49
|
+
return setActiveTray === null || setActiveTray === void 0 ? void 0 : setActiveTray(tray.id);
|
|
50
|
+
},
|
|
51
|
+
children: [tray.label, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
52
|
+
className: "tray-count",
|
|
53
|
+
children: tray.count
|
|
54
|
+
})]
|
|
55
|
+
}, tray.id);
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
exports.GalleryTrayTabs = GalleryTrayTabs;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.Container = void 0;
|
|
9
|
+
|
|
10
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/taggedTemplateLiteral"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _variables = require("../../../global-files/variables");
|
|
15
|
+
|
|
16
|
+
var _templateObject;
|
|
17
|
+
|
|
18
|
+
var Container = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 0 0;\n\n .tray-tab {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: none;\n border-bottom: 2px solid transparent;\n background: none;\n cursor: pointer;\n font-family: ", ";\n font-size: 14px;\n line-height: 21px;\n letter-spacing: -0.015em;\n color: ", ";\n\n &:hover {\n color: ", ";\n }\n\n &.active {\n color: ", ";\n font-weight: 600;\n border-bottom-color: ", ";\n }\n }\n\n .tray-count {\n min-width: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: ", ";\n color: ", ";\n font-family: ", ";\n font-size: 11px;\n line-height: 18px;\n text-align: center;\n }\n\n .active .tray-count {\n background: ", ";\n color: ", ";\n }\n"])), _variables.FontFamily.AvenirNext, _variables.GlobalColors.s4, _variables.GlobalColors.s5, _variables.GlobalColors.s5, _variables.GlobalColors.color_purple, _variables.GlobalColors.s2, _variables.GlobalColors.s5, _variables.FontFamily.Lato, _variables.GlobalColors.color_purple, _variables.GlobalColors.white);
|
|
19
|
+
|
|
20
|
+
exports.Container = Container;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = exports.Vacia = exports.SoloLectura = exports.PayloadDeGuardado = exports.Cuadricula = exports.ConActivos = void 0;
|
|
9
|
+
|
|
10
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _react = require("react");
|
|
15
|
+
|
|
16
|
+
var _index = require("./index");
|
|
17
|
+
|
|
18
|
+
var _useDigitalAssets = require("../../../global-files/digital-assets/useDigitalAssets");
|
|
19
|
+
|
|
20
|
+
var _assets = require("../../../global-files/digital-assets/assets.reducer");
|
|
21
|
+
|
|
22
|
+
var _assets2 = require("../../../global-files/digital-assets/assets.adapter");
|
|
23
|
+
|
|
24
|
+
var _assets3 = require("../../../global-files/digital-assets/assets.mock");
|
|
25
|
+
|
|
26
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
27
|
+
|
|
28
|
+
var _default = {
|
|
29
|
+
title: "Components/organisms/DigitalAssetsTray",
|
|
30
|
+
component: _index.DigitalAssetsTray
|
|
31
|
+
};
|
|
32
|
+
/*
|
|
33
|
+
Las historias usan EL MISMO reducer que la ficha, no un estado de juguete.
|
|
34
|
+
Así lo que se ve aquí es el comportamiento real: qué queda marcado para
|
|
35
|
+
guardar, qué se anota para borrar y qué payload saldría hacia el backend.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
exports.default = _default;
|
|
39
|
+
|
|
40
|
+
var Demo = function Demo(_ref) {
|
|
41
|
+
var _ref$initialAssets = _ref.initialAssets,
|
|
42
|
+
initialAssets = _ref$initialAssets === void 0 ? [] : _ref$initialAssets,
|
|
43
|
+
_ref$gridLayout = _ref.gridLayout,
|
|
44
|
+
gridLayout = _ref$gridLayout === void 0 ? false : _ref$gridLayout,
|
|
45
|
+
_ref$readOnly = _ref.readOnly,
|
|
46
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
47
|
+
_ref$showPayload = _ref.showPayload,
|
|
48
|
+
showPayload = _ref$showPayload === void 0 ? false : _ref$showPayload;
|
|
49
|
+
|
|
50
|
+
var _useReducer = (0, _react.useReducer)(_assets.assetsReducer, _assets.assetsInitialState),
|
|
51
|
+
_useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2),
|
|
52
|
+
state = _useReducer2[0],
|
|
53
|
+
dispatch = _useReducer2[1];
|
|
54
|
+
|
|
55
|
+
var _useState = (0, _react.useState)([]),
|
|
56
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
57
|
+
notices = _useState2[0],
|
|
58
|
+
setNotices = _useState2[1];
|
|
59
|
+
|
|
60
|
+
var tray = (0, _useDigitalAssets.useDigitalAssets)({
|
|
61
|
+
assets: state.assets_values,
|
|
62
|
+
dispatch: dispatch,
|
|
63
|
+
notices: notices,
|
|
64
|
+
setNotices: setNotices
|
|
65
|
+
}); // Carga inicial simulando la respuesta del backend, una sola vez.
|
|
66
|
+
|
|
67
|
+
var _useState3 = (0, _react.useState)(false),
|
|
68
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
69
|
+
loaded = _useState4[0],
|
|
70
|
+
setLoaded = _useState4[1];
|
|
71
|
+
|
|
72
|
+
if (!loaded && initialAssets.length) {
|
|
73
|
+
tray.replaceAll(initialAssets);
|
|
74
|
+
setLoaded(true);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var payload = (0, _assets2.buildSavePayload)((0, _assets.selectAssetsToSave)(state));
|
|
78
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
79
|
+
style: {
|
|
80
|
+
width: 960
|
|
81
|
+
},
|
|
82
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.DigitalAssetsTray, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, tray), {}, {
|
|
83
|
+
unsaved: (0, _assets.countUnsavedAssets)(state),
|
|
84
|
+
gridLayout: gridLayout,
|
|
85
|
+
readOnly: readOnly,
|
|
86
|
+
selectedAssets: state.selected_assets,
|
|
87
|
+
setSelectedAssets: function setSelectedAssets(assets) {
|
|
88
|
+
return dispatch({
|
|
89
|
+
type: "SET_SELECTED_ASSETS",
|
|
90
|
+
payload: assets
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
setCheckAll: function setCheckAll(checked) {
|
|
94
|
+
return dispatch({
|
|
95
|
+
type: "TOGGLE_CHECK_ALL_ASSETS",
|
|
96
|
+
payload: checked
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
})), /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
|
|
100
|
+
style: {
|
|
101
|
+
fontFamily: "Lato",
|
|
102
|
+
fontSize: 12
|
|
103
|
+
},
|
|
104
|
+
children: ["Seleccionados: ", state.selected_assets.length, " \xB7 Sin subir: ", tray.pending.length, " \xB7 Marcados para actualizar: ", state.updated_assets.length, " \xB7 Para borrar:", " ", state.deleted_assets.length, " \xB7 \xBFHay cambios sin guardar?", " ", (0, _assets.hasUnsavedAssets)(state) ? "sí" : "no"]
|
|
105
|
+
}), showPayload && /*#__PURE__*/(0, _jsxRuntime.jsx)("pre", {
|
|
106
|
+
style: {
|
|
107
|
+
fontSize: 11,
|
|
108
|
+
background: "#f7f7fc",
|
|
109
|
+
padding: 12,
|
|
110
|
+
borderRadius: 6,
|
|
111
|
+
maxHeight: 280,
|
|
112
|
+
overflow: "auto"
|
|
113
|
+
},
|
|
114
|
+
children: JSON.stringify(payload, null, 2)
|
|
115
|
+
})]
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Estado real de hoy: sin backend, la bandeja arranca vacía. Arrastrar un mp4,
|
|
120
|
+
* un gif, un PDF, un xlsx o un psd lo valida y lo agrega; cualquier otra cosa se
|
|
121
|
+
* rechaza con su motivo. Nada se sube.
|
|
122
|
+
*/
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
var Vacia = function Vacia() {
|
|
126
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {});
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
exports.Vacia = Vacia;
|
|
130
|
+
|
|
131
|
+
var ConActivos = function ConActivos() {
|
|
132
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
|
|
133
|
+
initialAssets: _assets3.backendAssetsMock
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
exports.ConActivos = ConActivos;
|
|
138
|
+
|
|
139
|
+
var Cuadricula = function Cuadricula() {
|
|
140
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
|
|
141
|
+
initialAssets: _assets3.backendAssetsMock,
|
|
142
|
+
gridLayout: true
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
exports.Cuadricula = Cuadricula;
|
|
147
|
+
|
|
148
|
+
var SoloLectura = function SoloLectura() {
|
|
149
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
|
|
150
|
+
initialAssets: _assets3.backendAssetsMock,
|
|
151
|
+
readOnly: true
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Lo que se le enviaría al backend, actualizándose en vivo. Cambia el tipo de un
|
|
156
|
+
* activo y aparece en `updateAssets`; bórralo y su id pasa a `deleteAssets`;
|
|
157
|
+
* suelta un archivo nuevo y aparece en `newAssets` sin `key`, porque todavía no
|
|
158
|
+
* se ha subido a S3.
|
|
159
|
+
*/
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
exports.SoloLectura = SoloLectura;
|
|
163
|
+
|
|
164
|
+
var PayloadDeGuardado = function PayloadDeGuardado() {
|
|
165
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
|
|
166
|
+
initialAssets: _assets3.backendAssetsMock,
|
|
167
|
+
showPayload: true
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
exports.PayloadDeGuardado = PayloadDeGuardado;
|