UNPKG

10.3 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _react = _interopRequireWildcard(require("react"));
9
10var _Grid = _interopRequireDefault(require("@material-ui/core/Grid"));
11
12var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
13
14var _withStyles = _interopRequireDefault(require("@material-ui/core/styles/withStyles"));
15
16var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
17
18var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
19
20var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
21
22var _reactImageLightbox = _interopRequireDefault(require("react-image-lightbox"));
23
24var _propTypes = _interopRequireDefault(require("prop-types"));
25
26function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
27
28function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
29
30function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
31
32function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
33
34function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
35
36function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
37
38function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
39
40function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
41
42function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
43
44var PicturesJSX = function PicturesJSX(_ref) {
45 var css = _ref.classes,
46 _ref$moreLabel = _ref.moreLabel,
47 moreLabel = _ref$moreLabel === void 0 ? 'more' : _ref$moreLabel,
48 shortLabel = _ref.shortLabel,
49 _ref$pictures = _ref.pictures,
50 pictures = _ref$pictures === void 0 ? [] : _ref$pictures,
51 limit = _ref.limit,
52 deletable = _ref.deletable,
53 handleDelete = _ref.handleDelete,
54 spaced = _ref.spaced,
55 _ref$justify = _ref.justify,
56 justify = _ref$justify === void 0 ? 'flex-start' : _ref$justify,
57 _ref$maxImagesInARow = _ref.maxImagesInARow,
58 maxImagesInARow = _ref$maxImagesInARow === void 0 ? 3 : _ref$maxImagesInARow,
59 _ref$contrast = _ref.contrast,
60 contrast = _ref$contrast === void 0 ? 'dark' : _ref$contrast,
61 rest = _objectWithoutProperties(_ref, ["classes", "moreLabel", "shortLabel", "pictures", "limit", "deletable", "handleDelete", "spaced", "justify", "maxImagesInARow", "contrast"]);
62
63 var _useState = (0, _react.useState)(false),
64 _useState2 = _slicedToArray(_useState, 2),
65 isOpen = _useState2[0],
66 setIsOpen = _useState2[1];
67
68 var _useState3 = (0, _react.useState)(0),
69 _useState4 = _slicedToArray(_useState3, 2),
70 index = _useState4[0],
71 setIndex = _useState4[1];
72
73 var thumbnails = limit && limit > 0 ? pictures.slice(0, limit) : pictures;
74 return _react["default"].createElement(_Grid["default"], _extends({
75 container: true,
76 direction: "row",
77 justify: justify,
78 alignItems: "center",
79 spacing: 16
80 }, rest), thumbnails.map(function (_ref2, i) {
81 var name = _ref2.name,
82 src = _ref2.src;
83 return _react["default"].createElement(_Grid["default"], {
84 item: true,
85 key: name,
86 className: css.wrapper,
87 xs: Math.trunc(12 / maxImagesInARow),
88 container: true,
89 justify: "center"
90 }, _react["default"].createElement("div", {
91 className: deletable ? css["infoWrapper_".concat(contrast)] : css.silentWrapper
92 }, _react["default"].createElement("a", {
93 href: src,
94 onClick: function onClick(e) {
95 e.preventDefault();
96 setIndex(i);
97 setIsOpen(true);
98 },
99 className: deletable ? css.imageContainerDeletable : css.imageContainer
100 }, _react["default"].createElement("img", _extends({
101 src: src
102 }, {
103 alt: name,
104 className: css.picture
105 })), thumbnails.length - 1 === i && pictures.length > i + 1 && _react["default"].createElement("div", {
106 className: css.overlay
107 }, shortLabel ? "+ ".concat(pictures.length - thumbnails.length) : "".concat(pictures.length - thumbnails.length, " ").concat(moreLabel)))), deletable && _react["default"].createElement(_Typography["default"], {
108 variant: "body1",
109 component: "div",
110 className: css["infoZone_".concat(contrast)]
111 }, i + 1, "/", thumbnails.length, _react["default"].createElement(_IconButton["default"], {
112 className: css["noPaddingButton_".concat(contrast)],
113 onClick: function onClick() {
114 return handleDelete && handleDelete(i);
115 }
116 }, _react["default"].createElement(_Delete["default"], {
117 fontSize: "small"
118 }))));
119 }), isOpen && _react["default"].createElement(_reactImageLightbox["default"], {
120 imageTitle: pictures[index].name,
121 imageCaption: pictures[index].caption,
122 mainSrc: pictures[index].src,
123 nextSrc: pictures[(index + 1) % pictures.length].src,
124 prevSrc: pictures[(index + pictures.length - 1) % pictures.length].src,
125 onMoveNextRequest: function onMoveNextRequest() {
126 return setIndex((index + 1) % pictures.length);
127 },
128 onMovePrevRequest: function onMovePrevRequest() {
129 return setIndex((index + pictures.length - 1) % pictures.length);
130 },
131 onCloseRequest: function onCloseRequest() {
132 return setIsOpen(false);
133 },
134 toolbarButtons: [deletable && handleDelete && _react["default"].createElement(_Button["default"], {
135 onClick: function onClick() {
136 setIsOpen(false);
137 handleDelete(index);
138 },
139 style: {
140 color: '#fff',
141 opacity: 0.7
142 }
143 }, _react["default"].createElement(_Delete["default"], null))],
144 animationOnKeyInput: true,
145 reactModalStyle: {
146 overlay: {
147 zIndex: 1200
148 }
149 }
150 }));
151};
152
153PicturesJSX.propTypes = {
154 classes: _propTypes["default"].object.isRequired,
155 moreLabel: _propTypes["default"].string,
156 shortLabel: _propTypes["default"].bool,
157 pictures: _propTypes["default"].arrayOf(_propTypes["default"].object.isRequired).isRequired,
158 limit: _propTypes["default"].number,
159 deletable: _propTypes["default"].bool,
160 handleDelete: _propTypes["default"].func,
161 spaced: _propTypes["default"].bool,
162 justify: _propTypes["default"].string,
163 centered: _propTypes["default"].bool,
164 maxImagesInARow: _propTypes["default"].number,
165 contrast: _propTypes["default"].oneOf(["dark", "light"])
166};
167var Pictures = (0, _withStyles["default"])(function (theme) {
168 return {
169 picture: {
170 height: '100%',
171 display: 'block'
172 },
173 wrapper: {
174 position: 'relative',
175 display: 'flex',
176 '&:before': {
177 content: "''",
178 paddingTop: '100%'
179 }
180 },
181 overlay: {
182 backgroundColor: '#6667',
183 width: '100%',
184 height: '100%',
185 position: 'absolute',
186 display: 'flex',
187 justifyContent: 'center',
188 alignItems: 'center',
189 color: '#fff'
190 },
191 imageContainer: {
192 width: 'calc(100% - 16px)',
193 height: 'calc(100% - 16px)',
194 position: 'absolute',
195 overflow: 'hidden',
196 display: 'flex',
197 justifyContent: 'center',
198 alignItems: 'center'
199 },
200 imageContainerDeletable: {
201 extend: 'imageContainer',
202 width: 'calc(100% - 20px)',
203 height: 'calc(100% - 20px)',
204 borderRadius: 3
205 },
206 infoWrapper: {
207 position: 'relative',
208 width: '100%',
209 display: 'flex',
210 flexDirection: 'column',
211 justifyContent: 'center',
212 alignItems: 'center',
213 borderTopRightRadius: 8,
214 borderTopLeftRadius: 8
215 },
216 infoWrapper_dark: {
217 extend: 'infoWrapper',
218 background: theme.palette.secondary.dark
219 },
220 infoWrapper_light: {
221 extend: 'infoWrapper',
222 background: 'transparent'
223 },
224 silentWrapper: {
225 width: '100%'
226 },
227 infoZone: {
228 position: 'relative',
229 top: -5,
230 borderBottomRightRadius: 8,
231 borderBottomLeftRadius: 8,
232 padding: '0 10px 10px 10px',
233 width: '100%',
234 display: 'flex',
235 flexDirection: 'row',
236 justifyContent: 'space-between',
237 alignItems: 'center'
238 },
239 infoZone_dark: {
240 extend: 'infoZone',
241 background: theme.palette.secondary.dark,
242 color: 'white'
243 },
244 infoZone_light: {
245 extend: 'infoZone',
246 background: 'transparent',
247 color: theme.palette.secondary.dark
248 },
249 noPaddingButton_dark: {
250 padding: 0,
251 color: 'white'
252 },
253 noPaddingButton_light: {
254 padding: 0,
255 color: theme.palette.secondary.dark
256 }
257 };
258})(PicturesJSX);
259var _default = Pictures;
260exports["default"] = _default;
\No newline at end of file