UNPKG

react-ladda-button

Version:
178 lines (154 loc) 5.56 kB
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var spin_js = require('spin.js'); function _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); } function _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; } var XS = 'xs'; var S = 's'; var L = 'l'; var XL = 'xl'; var SIZES = [XS, S, L, XL]; var CONTRACT = 'contract'; var CONTRACT_OVERLAY = 'contract-overlay'; var EXPAND_LEFT = 'expand-left'; var EXPAND_RIGHT = 'expand-right'; var EXPAND_UP = 'expand-up'; var EXPAND_DOWN = 'expand-down'; var SLIDE_LEFT = 'slide-left'; var SLIDE_RIGHT = 'slide-right'; var SLIDE_UP = 'slide-up'; var SLIDE_DOWN = 'slide-down'; var ZOOM_IN = 'zoom-in'; var ZOOM_OUT = 'zoom-out'; var STYLES = [EXPAND_LEFT, EXPAND_RIGHT, EXPAND_UP, EXPAND_DOWN, CONTRACT, CONTRACT_OVERLAY, ZOOM_IN, ZOOM_OUT, SLIDE_LEFT, SLIDE_RIGHT, SLIDE_UP, SLIDE_DOWN]; var LaddaButton = React__default.memo(function (_ref) { var _buttonRef$current2; var className = _ref.className, children = _ref.children, disabled = _ref.disabled, loading = _ref.loading, progress = _ref.progress, restProps = _objectWithoutPropertiesLoose(_ref, ["className", "children", "disabled", "loading", "progress"]); var buttonRef = React.useRef(null); var spinner = React.useRef(); var timer = React.useRef(); React.useEffect(function () { if (loading) { var _spinner$current, _buttonRef$current; timer.current && clearTimeout(timer.current); var createSpinner = function createSpinner() { var height = buttonRef.current ? buttonRef.current.offsetHeight : 0, spinnerColor, spinnerLines; if (height === 0) { if (buttonRef.current) height = parseFloat(window.getComputedStyle(buttonRef.current).height); } if (height > 32) { height *= 0.8; } if (restProps["data-spinner-size"]) { height = restProps["data-spinner-size"] || 10; } if (restProps['data-spinner-color']) { spinnerColor = restProps['data-spinner-color']; } if (restProps['data-spinner-lines']) { spinnerLines = restProps['data-spinner-lines'] || 12; } var radius = height * 0.2, length = radius * 0.6, width = radius < 7 ? 2 : 3; return new spin_js.Spinner({ color: spinnerColor || '#fff', lines: spinnerLines || 12, radius: radius, length: length, width: width, animation: 'ladda-spinner-line-fade', top: 'auto', left: 'auto', className: '' }); }; if (!spinner.current) spinner.current = createSpinner(); (_spinner$current = spinner.current) === null || _spinner$current === void 0 ? void 0 : _spinner$current.spin(((_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 ? void 0 : _buttonRef$current.querySelector('.ladda-spinner')) || undefined); } else { if (spinner) { var tv = timer.current = setTimeout(function () { var _spinner$current2; (_spinner$current2 = spinner.current) === null || _spinner$current2 === void 0 ? void 0 : _spinner$current2.stop(); }, 1000); return function () { return clearTimeout(tv); }; } } return undefined; }, [loading]); var dloadingProp = loading ? { 'data-loading': '' } : {}; restProps = _extends({}, restProps, { 'data-style': restProps['data-style'] || EXPAND_LEFT }); return React__default.createElement("button", Object.assign({}, dloadingProp, restProps, { className: "ladda-button " + (className || ''), ref: buttonRef, disabled: disabled || loading }), React__default.createElement("span", { className: "ladda-label" }, children), React__default.createElement("span", { className: "ladda-spinner" }), !!progress && React__default.createElement("div", { className: "ladda-progress", style: { width: Math.max(Math.min(progress || 0, 1), 0) * (((_buttonRef$current2 = buttonRef.current) === null || _buttonRef$current2 === void 0 ? void 0 : _buttonRef$current2.offsetWidth) || 0) + 'px' } })); }); exports.CONTRACT = CONTRACT; exports.CONTRACT_OVERLAY = CONTRACT_OVERLAY; exports.EXPAND_DOWN = EXPAND_DOWN; exports.EXPAND_LEFT = EXPAND_LEFT; exports.EXPAND_RIGHT = EXPAND_RIGHT; exports.EXPAND_UP = EXPAND_UP; exports.L = L; exports.LaddaButton = LaddaButton; exports.S = S; exports.SIZES = SIZES; exports.SLIDE_DOWN = SLIDE_DOWN; exports.SLIDE_LEFT = SLIDE_LEFT; exports.SLIDE_RIGHT = SLIDE_RIGHT; exports.SLIDE_UP = SLIDE_UP; exports.STYLES = STYLES; exports.XL = XL; exports.XS = XS; exports.ZOOM_IN = ZOOM_IN; exports.ZOOM_OUT = ZOOM_OUT; exports.default = LaddaButton; //# sourceMappingURL=index.js.map