@wordpress/edit-post
Version:
Edit Post module for WordPress.
178 lines (140 loc) • 5.09 kB
JavaScript
"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