import React, { Component } from 'react'; import { View, Text, StyleSheet, Image, ScrollView, TouchableHighlight } from 'react-native'; import PropTypes from 'prop-types'; import Modal from 'react-native-modal'; import { responsive } from 'react-native-responsive-ui'; import equal from 'deep-equal'; import TextInput from '../TextInput'; import Button from '../Button'; import I18n from '../../i18n'; import sharedStyles from '../../views/Styles'; import { isIOS, isTablet } from '../../utils/deviceInfo'; import { COLOR_PRIMARY, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE } from '../../constants/colors'; import { CustomIcon } from '../../lib/Icons'; import { withSplit } from '../../split'; const cancelButtonColor = COLOR_BACKGROUND_CONTAINER; const styles = StyleSheet.create({ modal: { width: '100%', alignItems: 'center', margin: 0 }, titleContainer: { flexDirection: 'row', paddingHorizontal: 16, paddingTop: 16 }, title: { fontSize: 14, ...sharedStyles.textColorTitle, ...sharedStyles.textBold }, container: { height: 430, backgroundColor: COLOR_WHITE, flexDirection: 'column' }, scrollView: { flex: 1, padding: 16 }, image: { height: 150, flex: 1, marginBottom: 16, resizeMode: 'contain' }, bigPreview: { height: 250 }, buttonContainer: { flexDirection: 'row', justifyContent: 'space-between', padding: 16, backgroundColor: COLOR_BACKGROUND_CONTAINER }, button: { marginBottom: 0 }, androidButton: { paddingHorizontal: 15, justifyContent: 'center', height: 48, borderRadius: 2 }, androidButtonText: { fontSize: 18, textAlign: 'center' }, fileIcon: { color: COLOR_PRIMARY, margin: 20, flex: 1, textAlign: 'center' }, video: { flex: 1, borderRadius: 4, height: 150, backgroundColor: '#1f2329', marginBottom: 6, alignItems: 'center', justifyContent: 'center' } }); class UploadModal extends Component { static propTypes = { isVisible: PropTypes.bool, file: PropTypes.object, close: PropTypes.func, submit: PropTypes.func, window: PropTypes.object, split: PropTypes.bool } state = { name: '', description: '', file: {} }; static getDerivedStateFromProps(props, state) { if (!equal(props.file, state.file) && props.file && props.file.path) { return { file: props.file, name: props.file.filename || 'Filename', description: '' }; } return null; } shouldComponentUpdate(nextProps, nextState) { const { name, description, file } = this.state; const { window, isVisible, split } = this.props; if (nextState.name !== name) { return true; } if (nextProps.split !== split) { return true; } if (nextState.description !== description) { return true; } if (nextProps.isVisible !== isVisible) { return true; } if (nextProps.window.width !== window.width) { return true; } if (!equal(nextState.file, file)) { return true; } return false; } submit = () => { const { file, submit } = this.props; const { name, description } = this.state; submit({ ...file, name, description }); } renderButtons = () => { const { close } = this.props; if (isIOS) { return (