UNPKG

tuya-panel-kit

Version:

a functional component library for developing tuya device panels!

368 lines (307 loc) 12.8 kB
Object.defineProperty(exports, "__esModule", { value: true }); var _jsxFileName = 'src/components/layout/offline-view/index.js'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactNative = require('react-native'); var _TYNativeApi = require('../../../TYNativeApi'); var _TYText = require('../../TYText'); var _TYText2 = _interopRequireDefault(_TYText); var _utils = require('../../../utils'); var _bleOfflineView = require('./ble-offline-view'); var _bleOfflineView2 = _interopRequireDefault(_bleOfflineView); var _newOfflineView = require('./new-offline-view'); var _newOfflineView2 = _interopRequireDefault(_newOfflineView); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var TYMobile = _TYNativeApi.TYSdk.mobile; var TYNative = _TYNativeApi.TYSdk.native; var TYDevice = _TYNativeApi.TYSdk.device; var TYEvent = _TYNativeApi.TYSdk.event; var convert = _utils.RatioUtils.convert, isIos = _utils.RatioUtils.isIos; var compareVersion = _utils.CoreUtils.compareVersion, get = _utils.CoreUtils.get; var OFFLINE_API_SUPPORT = TYMobile.verSupported('2.91'); var Res = { offline: require('../../res/offline.png') }; var requireRnVersion = '5.23'; var requireWifiRnVersion = '5.30'; var jumpToRequireRnVersion = '5.54'; var OfflineView = function (_Component) { _inherits(OfflineView, _Component); function OfflineView() { var _ref; var _temp, _this, _ret; _classCallCheck(this, OfflineView); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = OfflineView.__proto__ || Object.getPrototypeOf(OfflineView)).call.apply(_ref, [this].concat(args))), _this), _this.state = { bluetoothStatus: null, show: true }, _this.bluetoothChangeHandle = function (bluetoothStatus) { _this.setState({ bluetoothStatus: bluetoothStatus }); }, _this._handleLinkPress = function () { var devId = _TYNativeApi.TYSdk.devInfo.devId; var isJumpToWifi = _this._handleVersionToJump(); if (isJumpToWifi) { if (isIos) { TYMobile.back(); TYNative.jumpTo('tuyaSmart://device_offline_reconnect?device_id=' + devId); } else { TYNative.jumpTo('tuyaSmart://device_offline_reconnect?device_id=' + devId); TYMobile.back(); } } }, _this._handleVersionToJump = function () { var appRnVersion = get(TYNative, 'mobileInfo.appRnVersion'); var role = get(_TYNativeApi.TYSdk, 'devInfo.role'); var isGreater = appRnVersion && compareVersion(appRnVersion, requireWifiRnVersion); var isJumpToWifi = isGreater === 0 || isGreater === 1; return isJumpToWifi && (role === 1 || role === 2); }, _this._handleVersionJumpToKnowledge = function () { var appRnVersion = get(TYNative, 'mobileInfo.appRnVersion'); var isGreater = appRnVersion && compareVersion(appRnVersion, jumpToRequireRnVersion); var isAllowJumpTo = isGreater === 0 || isGreater === 1; return isAllowJumpTo; }, _this._handleMoreHelp = function () { var reconnectTextStyle = _this.props.reconnectTextStyle; var isJumpToWifi = _this._handleVersionToJump(); var isAllowJumpTo = _this._handleVersionJumpToKnowledge(); var linkJumpStyle = void 0; if (isJumpToWifi) { linkJumpStyle = [{ color: '#FF4800', textDecorationLine: 'underline' }, reconnectTextStyle]; } else { linkJumpStyle = { textDecorationLine: 'none', color: '#999' }; } if (isAllowJumpTo) { TYNative.getContentRouter().then(function (result) { var devId = _TYNativeApi.TYSdk.devInfo.devId; var href = result.href; TYNative.jumpTo(href + '?type=net_set&deviceId=' + devId); }).catch(function () { TYMobile.jumpSubPage({ uiId: '000000cg8b' }, { textLinkStyle: linkJumpStyle }); }); } else { TYMobile.jumpSubPage({ uiId: '000000cg8b' }, { textLinkStyle: linkJumpStyle }); } }, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(OfflineView, [{ key: 'componentDidMount', value: function componentDidMount() { var bluetoothStatus; return regeneratorRuntime.async(function componentDidMount$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; if (!OFFLINE_API_SUPPORT) { _context.next = 6; break; } _context.next = 4; return regeneratorRuntime.awrap(TYDevice.getBleManagerState()); case 4: bluetoothStatus = _context.sent; this.setState({ bluetoothStatus: bluetoothStatus }); case 6: _context.next = 10; break; case 8: _context.prev = 8; _context.t0 = _context['catch'](0); case 10: TYEvent.on('bluetoothChange', this.bluetoothChangeHandle); case 11: case 'end': return _context.stop(); } } }, null, this, [[0, 8]]); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { TYEvent.off('bluetoothChange', this.bluetoothChangeHandle); } }, { key: 'renderBleView', value: function renderBleView() { var _props = this.props, deviceOnline = _props.deviceOnline, capability = _props.capability, isBleOfflineOverlay = _props.isBleOfflineOverlay, renderBleOfflineView = _props.renderBleOfflineView; var isJumpToWifi = this._handleVersionToJump(); var isAllowJumpTo = this._handleVersionJumpToKnowledge(); if (typeof this.state.bluetoothStatus !== 'boolean') { return null; } if (renderBleOfflineView) { return renderBleOfflineView(); } return _react2.default.createElement(_bleOfflineView2.default, { bluetoothValue: this.state.bluetoothStatus, deviceOnline: deviceOnline, capability: capability, isBleOfflineOverlay: isBleOfflineOverlay, isJumpToWifi: isJumpToWifi, isAllowJumpTo: isAllowJumpTo, onLinkPress: this._handleLinkPress, __source: { fileName: _jsxFileName, lineNumber: 176 } }); } }, { key: 'renderOldView', value: function renderOldView() { var _props2 = this.props, showDeviceImg = _props2.showDeviceImg, maskColor = _props2.maskColor, renderWifiOfflineView = _props2.renderWifiOfflineView, reconnectTextStyle = _props2.reconnectTextStyle; var show = this.state.show; if (renderWifiOfflineView) { return renderWifiOfflineView(); } var appRnVersion = get(TYNative, 'mobileInfo.appRnVersion'); var isGreater = appRnVersion && compareVersion(appRnVersion, requireRnVersion); var isShowNewOffline = isGreater === 0 || isGreater === 1; var showOldOffline = get(_TYNativeApi.TYSdk, 'devInfo.panelConfig.fun.showOldOffline', false); var isJumpToWifi = this._handleVersionToJump(); var isAllowJumpTo = this._handleVersionJumpToKnowledge(); return !showOldOffline && isShowNewOffline ? _react2.default.createElement(_newOfflineView2.default, { show: show, showDeviceImg: showDeviceImg, onLinkPress: this._handleLinkPress, onConfirm: this._handleConfirm, onHelpPress: this._handleMoreHelp, maskColor: maskColor, isJumpToWifi: isJumpToWifi, isAllowJumpTo: isAllowJumpTo, reconnectTextStyle: reconnectTextStyle, __source: { fileName: _jsxFileName, lineNumber: 202 } }) : _react2.default.createElement( _reactNative.View, { accessibilityLabel: 'OfflineView_Wifi', style: [styles.container, this.props.style], __source: { fileName: _jsxFileName, lineNumber: 214 } }, _react2.default.createElement(_reactNative.Image, { style: styles.icon, source: Res.offline, __source: { fileName: _jsxFileName, lineNumber: 215 } }), _react2.default.createElement( _TYText2.default, { style: [styles.tip, this.props.textStyle], __source: { fileName: _jsxFileName, lineNumber: 216 } }, this.props.text ) ); } }, { key: 'render', value: function render() { var _props3 = this.props, appOnline = _props3.appOnline, deviceOnline = _props3.deviceOnline, capability = _props3.capability; var isBle = !!_utils.NumberUtils.getBitValue(capability, 10); var isBleMesh = !!_utils.NumberUtils.getBitValue(capability, 11); var isSigMesh = !!_utils.NumberUtils.getBitValue(capability, 15); var isBleBeacon = !!_utils.NumberUtils.getBitValue(capability, 21); var isBleDevice = isBle || isBleMesh || isSigMesh || isBleBeacon; if (deviceOnline && isBleDevice) { return null; } if (appOnline && OFFLINE_API_SUPPORT && _TYNativeApi.TYSdk.Navigator && _TYNativeApi.TYSdk.Navigator.push) { var isWifiDevice = capability === 1; if (isWifiDevice || !appOnline) { return this.renderOldView(); } if (isBleDevice) { return this.renderBleView(); } } return this.renderOldView(); } }]); return OfflineView; }(_react.Component); OfflineView.propTypes = { style: _reactNative.ViewPropTypes.style, textStyle: _reactNative.ViewPropTypes.style, text: _propTypes2.default.string, appOnline: _propTypes2.default.bool, deviceOnline: _propTypes2.default.bool, capability: _propTypes2.default.number, isBleOfflineOverlay: _propTypes2.default.bool, showDeviceImg: _propTypes2.default.bool, maskColor: _reactNative.ColorPropType, renderWifiOfflineView: _propTypes2.default.func, renderBleOfflineView: _propTypes2.default.func, reconnectTextStyle: _reactNative.Text.propTypes.style }; OfflineView.defaultProps = { style: null, textStyle: null, text: null, appOnline: true, deviceOnline: true, capability: 1, isBleOfflineOverlay: true, showDeviceImg: true, maskColor: 'rgba(0, 0, 0, 0.8)', renderWifiOfflineView: null, renderBleOfflineView: null, reconnectTextStyle: null }; exports.default = OfflineView; var styles = _reactNative.StyleSheet.create({ container: { alignItems: 'center', alignSelf: 'center', backgroundColor: 'rgba(0, 0, 0, 0.8)', justifyContent: 'center' }, icon: { height: convert(81), resizeMode: 'stretch', width: convert(121) }, tip: { color: 'white', fontSize: 16, marginTop: convert(14), textAlign: 'center' } });