@sendbird/uikit-react-native-foundation
Version:
A foundational UI kit for building chat-enabled React Native apps.
79 lines (78 loc) • 2.94 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _uikitUtils = require("@sendbird/uikit-utils");
var _useUIKitTheme = _interopRequireDefault(require("../../theme/useUIKitTheme"));
var _Box = _interopRequireDefault(require("../Box"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
const ProgressBar = ({
current = 100,
total = 100,
trackColor,
barColor,
overlay,
style
}) => {
const {
colors
} = (0, _useUIKitTheme.default)();
const uiColors = {
track: trackColor ?? colors.primary,
bar: barColor ?? colors.onBackground01
};
const progress = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
const percent = current / total;
const stopped = percent === 0;
(0, _react.useEffect)(() => {
if (!Number.isNaN(percent)) {
const animation = _reactNative.Animated.timing(progress, {
toValue: stopped ? 0 : percent,
duration: stopped ? 0 : 100,
useNativeDriver: false,
easing: _reactNative.Easing.linear
});
animation.start();
return () => animation.stop();
}
return _uikitUtils.NOOP;
}, [percent]);
const progressBarPosition = (() => {
if (_reactNative.I18nManager.isRTL && _reactNative.I18nManager.doLeftAndRightSwapInRTL) {
return {
right: 0
};
}
return {
left: 0
};
})();
return /*#__PURE__*/_react.default.createElement(_Box.default, {
height: 36,
flexDirection: 'row',
backgroundColor: uiColors.track,
alignItems: 'center',
overflow: 'hidden',
style: style
}, /*#__PURE__*/_react.default.createElement(_reactNative.Animated.View, {
style: [progressBarPosition, {
position: 'absolute',
width: progress.interpolate({
inputRange: [0, 1],
outputRange: ['0%', '100%'],
extrapolate: 'clamp'
}),
height: '100%',
opacity: 0.38,
backgroundColor: uiColors.bar
}]
}), /*#__PURE__*/_react.default.createElement(_Box.default, {
style: _reactNative.StyleSheet.absoluteFill
}, overlay));
};
var _default = exports.default = ProgressBar;
//# sourceMappingURL=index.js.map