@quintoandar-tokko/gridimagepicker 1.0.19 → 1.0.24
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/lib/ImageItem.js +38 -11
- package/lib/hooks/useGridImagePicker.js +6 -6
- package/lib/index.js +8 -3
- package/lib/utils/manageListOfItems.js +8 -6
- package/package.json +2 -2
- package/styles/ImageItemSwitch.css +44 -0
package/lib/ImageItem.js
CHANGED
|
@@ -19,6 +19,7 @@ require("../styles/ImageItemBlanket.css");
|
|
|
19
19
|
require("../styles/ImageItemCover.css");
|
|
20
20
|
require("../styles/ImageItemSmallElements.css");
|
|
21
21
|
require("../styles/ImageItemTooltip.css");
|
|
22
|
+
require("../styles/ImageItemSwitch.css");
|
|
22
23
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
23
24
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
24
25
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
@@ -34,6 +35,7 @@ var ImageItem = function ImageItem(_ref) {
|
|
|
34
35
|
handleClick = _ref.handleClick,
|
|
35
36
|
handleUpdateItem = _ref.handleUpdateItem,
|
|
36
37
|
onEdit = _ref.onEdit,
|
|
38
|
+
onSwitchChange = _ref.onSwitchChange,
|
|
37
39
|
status = _ref.status,
|
|
38
40
|
config = _ref.config,
|
|
39
41
|
texts = _ref.texts,
|
|
@@ -46,12 +48,17 @@ var ImageItem = function ImageItem(_ref) {
|
|
|
46
48
|
setNodeRef = _useSortable.setNodeRef,
|
|
47
49
|
transform = _useSortable.transform,
|
|
48
50
|
transition = _useSortable.transition;
|
|
49
|
-
var
|
|
51
|
+
var _useState = (0, _react.useState)(true),
|
|
52
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
53
|
+
isEditedActive = _useState2[0],
|
|
54
|
+
setIsEditedActive = _useState2[1];
|
|
55
|
+
var displaySrc = isEditedActive && item.editedSrc ? item.editedSrc : item.src;
|
|
56
|
+
var _useSize = (0, _useSize3["default"])(displaySrc, sizeFetcher),
|
|
50
57
|
_useSize2 = _slicedToArray(_useSize, 3),
|
|
51
58
|
size = _useSize2[0],
|
|
52
59
|
isLoadingSize = _useSize2[1],
|
|
53
60
|
isErrorSize = _useSize2[2];
|
|
54
|
-
var _useAspectRatio = (0, _useAspectRatio3["default"])(
|
|
61
|
+
var _useAspectRatio = (0, _useAspectRatio3["default"])(displaySrc),
|
|
55
62
|
_useAspectRatio2 = _slicedToArray(_useAspectRatio, 5),
|
|
56
63
|
height = _useAspectRatio2[0],
|
|
57
64
|
width = _useAspectRatio2[1],
|
|
@@ -59,17 +66,17 @@ var ImageItem = function ImageItem(_ref) {
|
|
|
59
66
|
isLoadingAspectRatio = _useAspectRatio2[3],
|
|
60
67
|
isErrorAspectRatio = _useAspectRatio2[4];
|
|
61
68
|
var wrapperRef = (0, _react.useRef)(null);
|
|
62
|
-
var
|
|
69
|
+
var _useState3 = (0, _react.useState)({
|
|
63
70
|
left: 0,
|
|
64
71
|
top: 0
|
|
65
72
|
}),
|
|
66
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
67
|
-
tooltipPosition = _useState2[0],
|
|
68
|
-
setTooltipPosition = _useState2[1];
|
|
69
|
-
var _useState3 = (0, _react.useState)(false),
|
|
70
73
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
tooltipPosition = _useState4[0],
|
|
75
|
+
setTooltipPosition = _useState4[1];
|
|
76
|
+
var _useState5 = (0, _react.useState)(false),
|
|
77
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
78
|
+
isTooltipShowable = _useState6[0],
|
|
79
|
+
setIsTooltipShowable = _useState6[1];
|
|
73
80
|
var isDraggingActive = status.isDraggingActive,
|
|
74
81
|
isMaxSelectableReached = status.isMaxSelectableReached,
|
|
75
82
|
itemsAreReady = status.itemsAreReady;
|
|
@@ -80,7 +87,7 @@ var ImageItem = function ImageItem(_ref) {
|
|
|
80
87
|
var isError = item.sizeError || item.aspectRatioError || item.fetchError;
|
|
81
88
|
var isFizableError = !item.fetchError && onEdit;
|
|
82
89
|
var tooltipErrorText = (0, _getTooltipErrorText.getTooltipErrorText)(item, texts, onEdit);
|
|
83
|
-
var backgroundImage = item.loading || item.fetchError ? '' : "url(".concat(
|
|
90
|
+
var backgroundImage = item.loading || item.fetchError ? '' : "url(".concat(displaySrc, ")");
|
|
84
91
|
var unclickable = !(0, _manageItem.isItemClickable)(item, isMaxSelectableReached, itemsAreReady);
|
|
85
92
|
var disabled = (0, _manageItem.isDisabledCheckbox)(item, isMaxSelectableReached);
|
|
86
93
|
(0, _react.useEffect)(function () {
|
|
@@ -189,7 +196,27 @@ var ImageItem = function ImageItem(_ref) {
|
|
|
189
196
|
}, /*#__PURE__*/_react["default"].createElement(_icons.Icon, {
|
|
190
197
|
icon: "icon-editar",
|
|
191
198
|
className: "imageItemIconEdit"
|
|
192
|
-
}))
|
|
199
|
+
})), /*#__PURE__*/_react["default"].createElement(_box.Box, {
|
|
200
|
+
className: "imageItemSwitch",
|
|
201
|
+
"data-visible": item.isEdited && itemsAreReady && (!isError || !!item.editedSrc),
|
|
202
|
+
"data-cover": item.position === 1
|
|
203
|
+
}, /*#__PURE__*/_react["default"].createElement(_box.Box, {
|
|
204
|
+
className: "imageItemSwitchOption",
|
|
205
|
+
"data-active": !isEditedActive,
|
|
206
|
+
onClick: function onClick(e) {
|
|
207
|
+
e.stopPropagation();
|
|
208
|
+
setIsEditedActive(false);
|
|
209
|
+
onSwitchChange === null || onSwitchChange === void 0 || onSwitchChange(item, false);
|
|
210
|
+
}
|
|
211
|
+
}, texts === null || texts === void 0 ? void 0 : texts.original), /*#__PURE__*/_react["default"].createElement(_box.Box, {
|
|
212
|
+
className: "imageItemSwitchOption",
|
|
213
|
+
"data-active": isEditedActive,
|
|
214
|
+
onClick: function onClick(e) {
|
|
215
|
+
e.stopPropagation();
|
|
216
|
+
setIsEditedActive(true);
|
|
217
|
+
onSwitchChange === null || onSwitchChange === void 0 || onSwitchChange(item, true);
|
|
218
|
+
}
|
|
219
|
+
}, texts === null || texts === void 0 ? void 0 : texts.edited))), /*#__PURE__*/_react["default"].createElement(_box.Box, {
|
|
193
220
|
className: "imageItemTooltip",
|
|
194
221
|
"data-showable": isTooltipShowable,
|
|
195
222
|
__css: {
|
|
@@ -24,7 +24,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
24
24
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
25
25
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
26
26
|
function useGridImagePicker(_ref) {
|
|
27
|
-
var
|
|
27
|
+
var listOfImages = _ref.listOfImages,
|
|
28
28
|
maxSelectablePreferenceByUser = _ref.maxSelectablePreferenceByUser,
|
|
29
29
|
maxSizeInMB = _ref.maxSizeInMB,
|
|
30
30
|
minAspectRatio = _ref.minAspectRatio,
|
|
@@ -34,7 +34,7 @@ function useGridImagePicker(_ref) {
|
|
|
34
34
|
_useState2 = _slicedToArray(_useState, 2),
|
|
35
35
|
isDraggingActive = _useState2[0],
|
|
36
36
|
setIsDraggingActive = _useState2[1];
|
|
37
|
-
var _useState3 = (0, _react.useState)(
|
|
37
|
+
var _useState3 = (0, _react.useState)(listOfImages),
|
|
38
38
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
39
39
|
initialUrlList = _useState4[0],
|
|
40
40
|
setInitialUrlList = _useState4[1];
|
|
@@ -43,20 +43,20 @@ function useGridImagePicker(_ref) {
|
|
|
43
43
|
itemNewUrl = _useState6[0],
|
|
44
44
|
setItemNewUrl = _useState6[1];
|
|
45
45
|
var _useState7 = (0, _react.useState)(function () {
|
|
46
|
-
return (0, _manageListOfItems.getItemsInitialState)(
|
|
46
|
+
return (0, _manageListOfItems.getItemsInitialState)(listOfImages);
|
|
47
47
|
}),
|
|
48
48
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
49
49
|
items = _useState8[0],
|
|
50
50
|
setItems = _useState8[1];
|
|
51
51
|
(0, _react.useEffect)(function () {
|
|
52
|
-
setItemNewUrl((0, _manageListOfItems.getItemChanged)(initialUrlList,
|
|
53
|
-
}, [
|
|
52
|
+
setItemNewUrl((0, _manageListOfItems.getItemChanged)(initialUrlList, listOfImages));
|
|
53
|
+
}, [listOfImages]);
|
|
54
54
|
(0, _react.useEffect)(function () {
|
|
55
55
|
if (!itemNewUrl) return;
|
|
56
56
|
setItems(function (prevItems) {
|
|
57
57
|
return (0, _manageListOfItems.getItemsWithNewUrl)(prevItems, itemNewUrl);
|
|
58
58
|
});
|
|
59
|
-
setInitialUrlList(
|
|
59
|
+
setInitialUrlList(listOfImages);
|
|
60
60
|
setItemNewUrl(null);
|
|
61
61
|
}, [itemNewUrl]);
|
|
62
62
|
var maxSelectable = Math.min(maxSelectablePreferenceByUser, items.filter(function (item) {
|
package/lib/index.js
CHANGED
|
@@ -16,7 +16,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default":
|
|
|
16
16
|
* A grid-based image picker component with sortable and selectable images.
|
|
17
17
|
*
|
|
18
18
|
* @param {Object} props - The props for GridImagePicker.
|
|
19
|
-
* @param {string
|
|
19
|
+
* @param {Array<{src: string, isEdited: boolean}>} props.listOfImages - Array of image objects to display in the grid.
|
|
20
20
|
* @param {number} [props.maxSelectablePreferenceByUser=10] - Maximum number of images that can be selected by the user.
|
|
21
21
|
* Default is 10. This value is a preference; if there are fewer images available than this number, it will adjust accordingly.
|
|
22
22
|
* @param {number} [props.maxSizeInMB=8] - Maximum size in megabytes for each image. Default is 8 MB. Images exceeding this limit will be marked as an error.
|
|
@@ -24,11 +24,12 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default":
|
|
|
24
24
|
* @param {number} [props.maxAspectRatio] - Maximum aspect ratio allowed for the images. Images that exceed this ratio will be marked as an error.
|
|
25
25
|
* @param {Function} [props.onChange] - Optional callback function invoked whenever the internal state of images changes.
|
|
26
26
|
* Called with the updated list of items as `(items) => onChange(items)`.
|
|
27
|
+
* @param {Function} [props.onSwitchChange] - Optional callback invoked when the user toggles the Original/Editada switch. Called with `(item, isEditedActive)`.
|
|
27
28
|
* @param {Function} [props.sizeFetcher] - Optional fetch function to get the size of the images. Default: (src) => fetch(src)
|
|
28
29
|
* @param {Object} props.texts - Nested texts
|
|
29
30
|
*/
|
|
30
31
|
var GridImagePicker = exports.GridImagePicker = function GridImagePicker(_ref) {
|
|
31
|
-
var
|
|
32
|
+
var listOfImages = _ref.listOfImages,
|
|
32
33
|
_ref$maxSelectablePre = _ref.maxSelectablePreferenceByUser,
|
|
33
34
|
maxSelectablePreferenceByUser = _ref$maxSelectablePre === void 0 ? 10 : _ref$maxSelectablePre,
|
|
34
35
|
_ref$maxSizeInMB = _ref.maxSizeInMB,
|
|
@@ -38,10 +39,11 @@ var GridImagePicker = exports.GridImagePicker = function GridImagePicker(_ref) {
|
|
|
38
39
|
onChange = _ref.onChange,
|
|
39
40
|
_ref$onEdit = _ref.onEdit,
|
|
40
41
|
onEdit = _ref$onEdit === void 0 ? null : _ref$onEdit,
|
|
42
|
+
_onSwitchChange = _ref.onSwitchChange,
|
|
41
43
|
texts = _ref.texts,
|
|
42
44
|
sizeFetcher = _ref.sizeFetcher;
|
|
43
45
|
var _useGridImagePicker = (0, _useGridImagePicker2["default"])({
|
|
44
|
-
|
|
46
|
+
listOfImages: listOfImages,
|
|
45
47
|
maxSelectablePreferenceByUser: maxSelectablePreferenceByUser,
|
|
46
48
|
maxSizeInMB: maxSizeInMB,
|
|
47
49
|
minAspectRatio: minAspectRatio,
|
|
@@ -98,6 +100,9 @@ var GridImagePicker = exports.GridImagePicker = function GridImagePicker(_ref) {
|
|
|
98
100
|
config: config,
|
|
99
101
|
handleClick: handleClickItem,
|
|
100
102
|
onEdit: onEdit,
|
|
103
|
+
onSwitchChange: function onSwitchChange(item) {
|
|
104
|
+
return _onSwitchChange(item);
|
|
105
|
+
},
|
|
101
106
|
handleUpdateItem: handleUpdateItem,
|
|
102
107
|
texts: texts,
|
|
103
108
|
sizeFetcher: sizeFetcher
|
|
@@ -17,11 +17,13 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
17
17
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
18
18
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
19
19
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
20
|
-
var getItemsInitialState = exports.getItemsInitialState = function getItemsInitialState(
|
|
21
|
-
var initializedItem =
|
|
20
|
+
var getItemsInitialState = exports.getItemsInitialState = function getItemsInitialState(listOfImages) {
|
|
21
|
+
var initializedItem = listOfImages.map(function (image, index) {
|
|
22
22
|
return {
|
|
23
23
|
id: index + 1,
|
|
24
|
-
src: src,
|
|
24
|
+
src: image.src,
|
|
25
|
+
editedSrc: image.editedSrc,
|
|
26
|
+
isEdited: image.isEdited,
|
|
25
27
|
checked: false,
|
|
26
28
|
position: 0,
|
|
27
29
|
height: 0,
|
|
@@ -180,10 +182,10 @@ var getDeselectAllItems = exports.getDeselectAllItems = function getDeselectAllI
|
|
|
180
182
|
var getItemChanged = exports.getItemChanged = function getItemChanged(originalList, newList) {
|
|
181
183
|
var length = Math.min(originalList.length, newList.length);
|
|
182
184
|
for (var i = 0; i < length; i++) {
|
|
183
|
-
if (originalList[i] !== newList[i]) {
|
|
185
|
+
if (originalList[i].src !== newList[i].src) {
|
|
184
186
|
return {
|
|
185
|
-
oldUrl: originalList[i],
|
|
186
|
-
newUrl: newList[i]
|
|
187
|
+
oldUrl: originalList[i].src,
|
|
188
|
+
newUrl: newList[i].src
|
|
187
189
|
};
|
|
188
190
|
}
|
|
189
191
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quintoandar-tokko/gridimagepicker",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"module": "src/index.js",
|
|
6
6
|
"files": [
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "25f60fb626bac68e2d2599d2354dd5157d7371ab"
|
|
27
27
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
.imageItemSwitch {
|
|
2
|
+
align-items: center;
|
|
3
|
+
background-color: #EAF3F6;
|
|
4
|
+
border-radius: 100px;
|
|
5
|
+
bottom: 8px;
|
|
6
|
+
box-shadow: 0 1px 6px rgba(29, 35, 39, 0.20);
|
|
7
|
+
display: none;
|
|
8
|
+
grid-template-columns: repeat(2, 1fr);
|
|
9
|
+
left: 50%;
|
|
10
|
+
max-width: min(110px, 96%);
|
|
11
|
+
padding: 2px;
|
|
12
|
+
pointer-events: auto;
|
|
13
|
+
position: absolute;
|
|
14
|
+
transform: translateX(-50%);
|
|
15
|
+
width: 100%;
|
|
16
|
+
z-index: 2;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.imageItemSwitch[data-visible="true"] {
|
|
20
|
+
display: grid;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.imageItemSwitch[data-visible="true"][data-cover="true"] {
|
|
24
|
+
bottom: 28px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.imageItemSwitchOption {
|
|
28
|
+
border-radius: 100px;
|
|
29
|
+
color: #1B90D2;
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
font-family: "Nunito Sans", sans-serif;
|
|
32
|
+
font-size: 11px;
|
|
33
|
+
font-weight: 600;
|
|
34
|
+
line-height: 1;
|
|
35
|
+
padding: 2px 6px;
|
|
36
|
+
pointer-events: auto;
|
|
37
|
+
transition: background-color 100ms linear, color 100ms linear;
|
|
38
|
+
white-space: nowrap;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.imageItemSwitchOption[data-active="true"] {
|
|
42
|
+
background-color: #1B90D2;
|
|
43
|
+
color: #F2F8FA;
|
|
44
|
+
}
|