Files
mattermost-mobile/app/components/post_draft/post_draft.js
Mattermost Build d4259e7f16 MM-31510 fix: last message is rendered behind the input box on iPad (#5365) (#5369)
(cherry picked from commit d42aba8287)

Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
2021-05-03 17:24:49 -04:00

132 lines
3.9 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {Platform} from 'react-native';
import {KeyboardTrackingView} from 'react-native-keyboard-tracking-view';
import {DeviceTypes} from '@constants';
import {UPDATE_NATIVE_SCROLLVIEW} from '@constants/post_draft';
import EventEmitter from '@mm-redux/utils/event_emitter';
import Archived from './archived';
import DraftInput from './draft_input';
import ReadOnly from './read_only';
export default class PostDraft extends PureComponent {
static propTypes = {
testID: PropTypes.string,
accessoriesContainerID: PropTypes.string,
canPost: PropTypes.bool.isRequired,
channelId: PropTypes.string.isRequired,
channelIsArchived: PropTypes.bool,
channelIsReadOnly: PropTypes.bool.isRequired,
cursorPositionEvent: PropTypes.string,
deactivatedChannel: PropTypes.bool.isRequired,
registerTypingAnimation: PropTypes.func.isRequired,
rootId: PropTypes.string,
screenId: PropTypes.string.isRequired,
scrollViewNativeID: PropTypes.string,
valueEvent: PropTypes.string,
theme: PropTypes.object.isRequired,
};
draftInput = React.createRef();
keyboardTracker = React.createRef();
componentDidMount() {
EventEmitter.on(UPDATE_NATIVE_SCROLLVIEW, this.updateNativeScrollView);
}
componentWillUnmount() {
EventEmitter.off(UPDATE_NATIVE_SCROLLVIEW, this.updateNativeScrollView);
}
handleInputQuickAction = (value) => {
if (this.draftInput?.current) {
this.draftInput.current.handleInputQuickAction(value);
}
};
updateNativeScrollView = (scrollViewNativeID) => {
if (this.keyboardTracker?.current) {
this.keyboardTracker.current.resetScrollView(scrollViewNativeID);
}
};
render = () => {
const {
testID,
accessoriesContainerID,
canPost,
channelId,
channelIsArchived,
channelIsReadOnly,
cursorPositionEvent,
deactivatedChannel,
registerTypingAnimation,
rootId,
screenId,
scrollViewNativeID,
theme,
valueEvent,
} = this.props;
if (channelIsArchived || deactivatedChannel) {
const archivedTestID = `${testID}.archived`;
return (
<Archived
testID={archivedTestID}
defactivated={deactivatedChannel}
rootId={rootId}
theme={theme}
/>
);
}
const readonly = channelIsReadOnly || !canPost;
if (readonly) {
const readOnlyTestID = `${testID}.read_only`;
return (
<ReadOnly
testID={readOnlyTestID}
theme={theme}
/>
);
}
const draftInput = (
<DraftInput
testID={testID}
ref={this.draftInput}
channelId={channelId}
cursorPositionEvent={cursorPositionEvent}
registerTypingAnimation={registerTypingAnimation}
rootId={rootId}
screenId={screenId}
theme={theme}
valueEvent={valueEvent}
/>
);
if (Platform.OS === 'android') {
return draftInput;
}
return (
<KeyboardTrackingView
accessoriesContainerID={accessoriesContainerID}
ref={this.keyboardTracker}
scrollViewNativeID={scrollViewNativeID}
inverted={DeviceTypes.IS_TABLET}
>
{draftInput}
</KeyboardTrackingView>
);
};
}