1 | "use strict";
|
2 |
|
3 | var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
4 |
|
5 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
6 |
|
7 | Object.defineProperty(exports, "__esModule", {
|
8 | value: true
|
9 | });
|
10 | exports.default = exports.styles = void 0;
|
11 |
|
12 | var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
13 |
|
14 | var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
15 |
|
16 | var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
17 |
|
18 | var React = _interopRequireWildcard(require("react"));
|
19 |
|
20 | var _propTypes = _interopRequireDefault(require("prop-types"));
|
21 |
|
22 | var _clsx = _interopRequireDefault(require("clsx"));
|
23 |
|
24 | var _debounce = _interopRequireDefault(require("../utils/debounce"));
|
25 |
|
26 | var _withStyles = _interopRequireDefault(require("../styles/withStyles"));
|
27 |
|
28 | var _isMuiElement = _interopRequireDefault(require("../utils/isMuiElement"));
|
29 |
|
30 | var styles = {
|
31 |
|
32 | root: {
|
33 | boxSizing: 'border-box',
|
34 | flexShrink: 0
|
35 | },
|
36 |
|
37 |
|
38 | item: {
|
39 | position: 'relative',
|
40 | display: 'block',
|
41 |
|
42 | height: '100%',
|
43 | overflow: 'hidden'
|
44 | },
|
45 |
|
46 |
|
47 | imgFullHeight: {
|
48 | height: '100%',
|
49 | transform: 'translateX(-50%)',
|
50 | position: 'relative',
|
51 | left: '50%'
|
52 | },
|
53 |
|
54 |
|
55 | imgFullWidth: {
|
56 | width: '100%',
|
57 | position: 'relative',
|
58 | transform: 'translateY(-50%)',
|
59 | top: '50%'
|
60 | }
|
61 | };
|
62 | exports.styles = styles;
|
63 |
|
64 | var fit = function fit(imgEl, classes) {
|
65 | if (!imgEl || !imgEl.complete) {
|
66 | return;
|
67 | }
|
68 |
|
69 | if (imgEl.width / imgEl.height > imgEl.parentElement.offsetWidth / imgEl.parentElement.offsetHeight) {
|
70 | var _imgEl$classList, _imgEl$classList2;
|
71 |
|
72 | (_imgEl$classList = imgEl.classList).remove.apply(_imgEl$classList, (0, _toConsumableArray2.default)(classes.imgFullWidth.split(' ')));
|
73 |
|
74 | (_imgEl$classList2 = imgEl.classList).add.apply(_imgEl$classList2, (0, _toConsumableArray2.default)(classes.imgFullHeight.split(' ')));
|
75 | } else {
|
76 | var _imgEl$classList3, _imgEl$classList4;
|
77 |
|
78 | (_imgEl$classList3 = imgEl.classList).remove.apply(_imgEl$classList3, (0, _toConsumableArray2.default)(classes.imgFullHeight.split(' ')));
|
79 |
|
80 | (_imgEl$classList4 = imgEl.classList).add.apply(_imgEl$classList4, (0, _toConsumableArray2.default)(classes.imgFullWidth.split(' ')));
|
81 | }
|
82 | };
|
83 |
|
84 | function ensureImageCover(imgEl, classes) {
|
85 | if (!imgEl) {
|
86 | return;
|
87 | }
|
88 |
|
89 | if (imgEl.complete) {
|
90 | fit(imgEl, classes);
|
91 | } else {
|
92 | imgEl.addEventListener('load', function () {
|
93 | fit(imgEl, classes);
|
94 | });
|
95 | }
|
96 | }
|
97 |
|
98 | var ImageListItem = React.forwardRef(function ImageListItem(props, ref) {
|
99 |
|
100 | var children = props.children,
|
101 | classes = props.classes,
|
102 | className = props.className,
|
103 | _props$cols = props.cols,
|
104 | cols = _props$cols === void 0 ? 1 : _props$cols,
|
105 | _props$component = props.component,
|
106 | Component = _props$component === void 0 ? 'li' : _props$component,
|
107 | _props$rows = props.rows,
|
108 | rows = _props$rows === void 0 ? 1 : _props$rows,
|
109 | other = (0, _objectWithoutProperties2.default)(props, ["children", "classes", "className", "cols", "component", "rows"]);
|
110 | var imgRef = React.useRef(null);
|
111 | React.useEffect(function () {
|
112 | ensureImageCover(imgRef.current, classes);
|
113 | });
|
114 | React.useEffect(function () {
|
115 | var handleResize = (0, _debounce.default)(function () {
|
116 | fit(imgRef.current, classes);
|
117 | });
|
118 | window.addEventListener('resize', handleResize);
|
119 | return function () {
|
120 | handleResize.clear();
|
121 | window.removeEventListener('resize', handleResize);
|
122 | };
|
123 | }, [classes]);
|
124 | return React.createElement(Component, (0, _extends2.default)({
|
125 | className: (0, _clsx.default)(classes.root, className),
|
126 | ref: ref
|
127 | }, other), React.createElement("div", {
|
128 | className: classes.item
|
129 | }, React.Children.map(children, function (child) {
|
130 | if (! React.isValidElement(child)) {
|
131 | return null;
|
132 | }
|
133 |
|
134 | if (child.type === 'img' || (0, _isMuiElement.default)(child, ['Image'])) {
|
135 | return React.cloneElement(child, {
|
136 | ref: imgRef
|
137 | });
|
138 | }
|
139 |
|
140 | return child;
|
141 | })));
|
142 | });
|
143 | process.env.NODE_ENV !== "production" ? ImageListItem.propTypes = {
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 | |
150 |
|
151 |
|
152 | children: _propTypes.default.node,
|
153 |
|
154 | |
155 |
|
156 |
|
157 |
|
158 | classes: _propTypes.default.object,
|
159 |
|
160 | |
161 |
|
162 |
|
163 | className: _propTypes.default.string,
|
164 |
|
165 | |
166 |
|
167 |
|
168 | cols: _propTypes.default.number,
|
169 |
|
170 | |
171 |
|
172 |
|
173 |
|
174 | component: _propTypes.default
|
175 |
|
176 | .elementType,
|
177 |
|
178 | |
179 |
|
180 |
|
181 | rows: _propTypes.default.number
|
182 | } : void 0;
|
183 |
|
184 | var _default = (0, _withStyles.default)(styles, {
|
185 | name: 'MuiImageListItem'
|
186 | })(ImageListItem);
|
187 |
|
188 | exports.default = _default; |
\ | No newline at end of file |