UNPKG

@wordpress/components

Version:
115 lines (100 loc) 3.38 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _element = require("@wordpress/element"); var _reactNative = require("react-native"); var _blur = require("@react-native-community/blur"); var _compose = require("@wordpress/compose"); var _style = _interopRequireDefault(require("./style.scss")); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const HIDE_TIMER = 3000; const Notice = _ref => { let { onNoticeHidden, content, id, status } = _ref; const { width } = (0, _reactNative.useWindowDimensions)(); const animationValue = (0, _element.useRef)(new _reactNative.Animated.Value(0)).current; const timer = (0, _element.useRef)(null); (0, _element.useEffect)(() => { // start animation _reactNative.Animated.timing(animationValue, { toValue: 1, duration: 300, useNativeDriver: true, easing: _reactNative.Easing.out(_reactNative.Easing.quad) }).start(_ref2 => { let { finished } = _ref2; if (finished && onNoticeHidden) { timer.current = setTimeout(() => { onHide(); }, HIDE_TIMER); } }); return () => { clearTimeout(timer === null || timer === void 0 ? void 0 : timer.current); }; }, [animationValue, onHide, onNoticeHidden]); const onHide = (0, _element.useCallback)(() => { _reactNative.Animated.timing(animationValue, { toValue: 0, duration: 150, useNativeDriver: true, easing: _reactNative.Easing.out(_reactNative.Easing.quad) }).start(_ref3 => { let { finished } = _ref3; if (finished && onNoticeHidden) { onNoticeHidden(id); } }); }, [animationValue, onNoticeHidden, id]); const noticeSolidStyles = (0, _compose.usePreferredColorSchemeStyle)(_style.default.noticeSolid, _style.default.noticeSolidDark); const successTextStyles = (0, _compose.usePreferredColorSchemeStyle)(_style.default.successText, _style.default.successTextDark); const errorTextStyles = (0, _compose.usePreferredColorSchemeStyle)(_style.default.errorText, _style.default.errorTextDark); const textStyles = [status === 'success' && successTextStyles, status === 'error' && errorTextStyles]; const containerStyles = [_style.default.notice, !_element.Platform.isIOS && noticeSolidStyles, { width, transform: [{ translateY: animationValue.interpolate({ inputRange: [0, 1], outputRange: [-24, 0] }) }] }]; return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_reactNative.Animated.View, { style: containerStyles }, (0, _element.createElement)(_reactNative.TouchableWithoutFeedback, { onPress: onHide }, (0, _element.createElement)(_reactNative.View, { style: _style.default.noticeContent }, (0, _element.createElement)(_reactNative.Text, { numberOfLines: 3, style: textStyles }, content))), _element.Platform.isIOS && (0, _element.createElement)(_blur.BlurView, { style: _style.default.blurBackground, blurType: "prominent", blurAmount: 10 }))); }; var _default = Notice; exports.default = _default; //# sourceMappingURL=index.native.js.map