UNPKG

@wordpress/edit-post

Version:
178 lines (140 loc) 5.09 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 _reactNativeSafeArea = _interopRequireDefault(require("react-native-safe-area")); var _data = require("@wordpress/data"); var _blockEditor = require("@wordpress/block-editor"); var _compose = require("@wordpress/compose"); var _components = require("@wordpress/components"); var _editor = require("@wordpress/editor"); var _reactNativeBridge = require("@wordpress/react-native-bridge"); var _style = _interopRequireDefault(require("./style.scss")); var _style2 = _interopRequireDefault(require("../header/header-toolbar/style.scss")); var _header = _interopRequireDefault(require("../header")); var _visualEditor = _interopRequireDefault(require("../visual-editor")); var _store = require("../../store"); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ class Layout extends _element.Component { constructor() { super(...arguments); this.onSafeAreaInsetsUpdate = this.onSafeAreaInsetsUpdate.bind(this); this.onRootViewLayout = this.onRootViewLayout.bind(this); this.state = { rootViewHeight: 0, safeAreaInsets: { top: 0, bottom: 0, right: 0, left: 0 } }; _reactNativeSafeArea.default.getSafeAreaInsetsForRootView().then(this.onSafeAreaInsetsUpdate); } componentDidMount() { this._isMounted = true; _reactNativeSafeArea.default.addEventListener('safeAreaInsetsForRootViewDidChange', this.onSafeAreaInsetsUpdate); } componentWillUnmount() { _reactNativeSafeArea.default.removeEventListener('safeAreaInsetsForRootViewDidChange', this.onSafeAreaInsetsUpdate); this._isMounted = false; } onSafeAreaInsetsUpdate(result) { const { safeAreaInsets } = result; if (this._isMounted) { this.setState({ safeAreaInsets }); } } onRootViewLayout(event) { if (this._isMounted) { this.setHeightState(event); } } setHeightState(event) { const { height } = event.nativeEvent.layout; if (height !== this.state.rootViewHeight) { this.setState({ rootViewHeight: height }, _reactNativeBridge.sendNativeEditorDidLayout); } } renderHTML() { return (0, _element.createElement)(_components.HTMLTextInput, { parentHeight: this.state.rootViewHeight }); } renderVisual() { const { isReady } = this.props; if (!isReady) { return null; } return (0, _element.createElement)(_visualEditor.default, { setTitleRef: this.props.setTitleRef }); } render() { const { getStylesFromColorScheme, mode } = this.props; const isHtmlView = mode === 'text'; // add a margin view at the bottom for the header const marginBottom = _reactNative.Platform.OS === 'android' && !isHtmlView ? _style2.default.container.height : 0; const toolbarKeyboardAvoidingViewStyle = { ..._style.default.toolbarKeyboardAvoidingView, left: this.state.safeAreaInsets.left, right: this.state.safeAreaInsets.right, bottom: this.state.safeAreaInsets.bottom }; return (0, _element.createElement)(_reactNative.SafeAreaView, { style: getStylesFromColorScheme(_style.default.container, _style.default.containerDark), onLayout: this.onRootViewLayout }, (0, _element.createElement)(_editor.AutosaveMonitor, { disableIntervalChecks: true }), (0, _element.createElement)(_reactNative.View, { style: getStylesFromColorScheme(_style.default.background, _style.default.backgroundDark) }, isHtmlView ? this.renderHTML() : this.renderVisual(), !isHtmlView && _reactNative.Platform.OS === 'android' && (0, _element.createElement)(_blockEditor.FloatingToolbar, null), (0, _element.createElement)(_components.NoticeList, null)), (0, _element.createElement)(_reactNative.View, { style: { flex: 0, flexBasis: marginBottom, height: marginBottom } }), !isHtmlView && (0, _element.createElement)(_components.KeyboardAvoidingView, { parentHeight: this.state.rootViewHeight, style: toolbarKeyboardAvoidingViewStyle, withAnimatedHeight: true }, _reactNative.Platform.OS === 'ios' && (0, _element.createElement)(_blockEditor.FloatingToolbar, null), (0, _element.createElement)(_header.default, null), (0, _element.createElement)(_blockEditor.BottomSheetSettings, null))); } } var _default = (0, _compose.compose)([(0, _data.withSelect)(select => { const { __unstableIsEditorReady: isEditorReady } = select('core/editor'); const { getEditorMode } = select(_store.store); return { isReady: isEditorReady(), mode: getEditorMode() }; }), _compose.withPreferredColorScheme])(Layout); exports.default = _default; //# sourceMappingURL=index.native.js.map