react-flip-toolkit
Version:
Configurable FLIP animation helpers for React
107 lines (91 loc) • 3.88 kB
JavaScript
;
exports.__esModule = true;
var _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; };
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _Flipper = require("./Flipper");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
var propTypes = {
children: _propTypes2.default.node.isRequired,
flipId: _propTypes2.default.string,
inverseFlipId: _propTypes2.default.string,
opacity: _propTypes2.default.bool,
translateX: _propTypes2.default.bool,
translateY: _propTypes2.default.bool,
translate: _propTypes2.default.bool,
scaleX: _propTypes2.default.bool,
scaleY: _propTypes2.default.bool,
scale: _propTypes2.default.bool,
transformOrigin: _propTypes2.default.string,
ease: _propTypes2.default.string,
duration: _propTypes2.default.number,
onStart: _propTypes2.default.func,
onComplete: _propTypes2.default.func,
componentIdFilter: _propTypes2.default.string,
componentId: _propTypes2.default.string
// This wrapper creates child components for the main Flipper component
};function Flipped(_ref) {
var children = _ref.children,
flipId = _ref.flipId,
onStart = _ref.onStart,
onComplete = _ref.onComplete,
rest = _objectWithoutProperties(_ref, ["children", "flipId", "onStart", "onComplete"]);
var child = void 0;
try {
child = _react.Children.only(children);
} catch (e) {
throw new Error("Each Flipped element must wrap a single child");
}
// if nothing is being transformed, assume everything is being animated
if (!rest.scale && !rest.translate && !rest.translateX && !rest.translateY && !rest.scaleX && !rest.opacity && !rest.scaleY) {
rest.all = true;
}
// allow some shorthands for convenience
if (rest.all) {
delete rest.all;
Object.assign(rest, {
translateX: true,
translateY: true,
scaleX: true,
scaleY: true,
opacity: true
});
} else if (rest.scale) {
delete rest.scale;
Object.assign(rest, {
scaleX: true,
scaleY: true
});
} else if (rest.translate) {
delete rest.translate;
Object.assign(rest, {
translateX: true,
translateY: true
});
}
// turn props into DOM data attributes
var props = Object.entries(rest).map(function (r) {
return [r[0].replace("translate", "data-translate-").replace("scale", "data-scale-").replace("opacity", "data-opacity").replace("inverseFlipId", "data-inverse-flip-id").replace("transformOrigin", "data-transform-origin").replace("componentIdFilter", "data-flip-component-id-filter").replace("componentId", "data-flip-component-id").replace("ease", "data-flip-ease").replace("duration", "data-flip-duration").toLowerCase(), r[1]];
}).reduce(function (acc, curr) {
var _extends2;
return _extends({}, acc, (_extends2 = {}, _extends2[curr[0]] = curr[1], _extends2));
}, {});
if (flipId) props["data-flip-id"] = flipId;
return _react2.default.createElement(
_Flipper.FlipContext.Consumer,
null,
function (data) {
data[flipId] = {
onStart: onStart,
onComplete: onComplete
};
return (0, _react.cloneElement)(child, props);
}
);
}
Flipped.propTypes = process.env.NODE_ENV !== "production" ? propTypes : {};
exports.default = Flipped;
module.exports = exports["default"];