@sendbird/uikit-react-native-foundation
Version:
A foundational UI kit for building chat-enabled React Native apps.
80 lines (79 loc) • 3.11 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 _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
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