* Show image paste menu * Get pasted image * Add more info for file * Add custom text input and add extension * Dismiss contextual menu after paste image * Group image info together * Add max file check * Fix max file size text * Add PropTypes * Add support for gif and tiff * add onchange null check * Use onPaste event * Move get image info logic * Clean up listener when no observer * Add android upload * Copy file from google docs * Clean up file after upload * Prevent text pasted in textbox if it's content uri * Rename paste file thread * Move on paste listener logic * Remove the redundant data in ios * Get realpath of item * Clean up * Only download for image * Rename to custom text input * Update RNPasteableEditTextOnPasteListener.java * Handle for download image failed * Fix eslint * Fix test * Allow multiple images to be pasted * Remove additional null check * Add managed control for Android * Disable only copy, cut and paste * Accept image in Android edit text * Add comment for custom text input * Do not upload when more than max file * Stop uplaod when exceed file size * Fix crash when clip data is null * Return error to JS * Move download file logic * Remove console * Add some tests * Add test for handleUploadImages * Add test for file_upload_item * Use ImageCacheManager to cache remote images * Fix crashes from one note * Remove commented code * Update test
53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import {TextInput, NativeEventEmitter, NativeModules} from 'react-native';
|
|
import CustomTextInput from './custom_text_input';
|
|
|
|
const {OnPasteEventManager} = NativeModules;
|
|
const OnPasteEventEmitter = new NativeEventEmitter(OnPasteEventManager);
|
|
|
|
export class PasteableTextInput extends React.Component {
|
|
static propTypes = {
|
|
...TextInput.PropTypes,
|
|
onPaste: PropTypes.func,
|
|
forwardRef: PropTypes.any,
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.subscription = OnPasteEventEmitter.addListener('onPaste', this.onPaste);
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
if (this.subscription) {
|
|
this.subscription.remove();
|
|
}
|
|
}
|
|
|
|
onPaste = (event) => {
|
|
const {onPaste} = this.props;
|
|
return onPaste?.(null, event);
|
|
}
|
|
|
|
render() {
|
|
const {forwardRef, ...props} = this.props;
|
|
|
|
return (
|
|
<CustomTextInput
|
|
{...props}
|
|
ref={forwardRef}
|
|
/>
|
|
);
|
|
}
|
|
}
|
|
|
|
const WrappedPasteableTextInput = (props, ref) => (
|
|
<PasteableTextInput
|
|
{...props}
|
|
forwardRef={ref}
|
|
/>
|
|
);
|
|
|
|
export default React.forwardRef(WrappedPasteableTextInput);
|