UNPKG

@cbinsights/fds

Version:
123 lines (107 loc) 4.65 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getCircleInfo = exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _reactTransitionGroup = require("react-transition-group"); var _styleConstants = _interopRequireDefault(require("../../../dictionary/js/styleConstants")); var _IconButton = _interopRequireDefault(require("../../IconButton")); var _DenyIcon = _interopRequireDefault(require("../../../icons/react/DenyIcon")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } /** * * @param {Number} circleSize bounding box size of circle in px * @param {Number} strokeWidth width of circle stroke */ var getCircleInfo = function getCircleInfo(circleSize, strokeWidth) { var radius = (circleSize - strokeWidth) / 2; return { radius: radius, circumference: Math.PI * radius * 2, centerOffset: circleSize / 2 }; }; exports.getCircleInfo = getCircleInfo; var CountdownButton = function CountdownButton(_ref) { var _ref$label = _ref.label, label = _ref$label === void 0 ? 'Close' : _ref$label, _ref$Icon = _ref.Icon, Icon = _ref$Icon === void 0 ? _DenyIcon.default : _ref$Icon, duration = _ref.duration, onClick = _ref.onClick; var circleSize = 34; var strokeWidth = 2; var _getCircleInfo = getCircleInfo(circleSize, strokeWidth), radius = _getCircleInfo.radius, circumference = _getCircleInfo.circumference, centerOffset = _getCircleInfo.centerOffset; var defaultCircleStyle = { // strokeDasharray sets up a dashed line in which each dash is equal to // the circumference of the circle. // // We offset the dash by 0 to start to create a full circle strokeDasharray: circumference, strokeDashoffset: 0, transition: "all ".concat(duration, "ms linear"), // start the countdown at "midnight" position of circle transformOrigin: 'center center', transform: 'rotate(-90deg)' }; var transitionStyles = { entering: { strokeDashoffset: 0 }, // offsetting the dash by the exact circle circumference lines up // the empty part of the dashed stroke with the circle circumference entered: { strokeDashoffset: circumference }, exiting: undefined, exited: undefined, unmounted: undefined }; return /*#__PURE__*/_react.default.createElement("div", { className: "countdownButton", style: { width: "".concat(circleSize, "px"), height: "".concat(circleSize, "px") } }, /*#__PURE__*/_react.default.createElement("div", { className: "countdownButton-button" }, /*#__PURE__*/_react.default.createElement(_IconButton.default, { onClick: onClick, radius: "circle", Icon: Icon, label: label })), /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.Transition, { in: true, appear: true, timeout: { appear: 1, enter: duration }, mountOnEnter: true }, function (state) { return /*#__PURE__*/_react.default.createElement("svg", { className: "countdownButton-animation", width: circleSize, height: circleSize, viewBox: "0 0 ".concat(circleSize, " ").concat(circleSize) }, /*#__PURE__*/_react.default.createElement("circle", { role: "alert", cx: centerOffset, cy: centerOffset, r: radius, strokeWidth: strokeWidth, fill: "transparent", stroke: _styleConstants.default.FONT_COLOR_HINT, style: _objectSpread(_objectSpread({}, defaultCircleStyle), transitionStyles[state]) })); })); }; var _default = CountdownButton; exports.default = _default;