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