import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { is, fromJS } from 'immutable'
|
import { Radio, Icon, Modal } from 'antd'
|
|
import InputForm from './inputform'
|
import './index.scss'
|
|
class CopyComponent extends Component {
|
static propTpyes = {
|
type: PropTypes.string,
|
placement: PropTypes.any,
|
onChange: PropTypes.func
|
}
|
|
state = {
|
url: '',
|
visible: ''
|
}
|
|
UNSAFE_componentWillMount () {
|
const { value } = this.props
|
let val = ''
|
|
if (value) {
|
val = value
|
} else if (this.props['data-__meta']) {
|
val = this.props['data-__meta'].initialValue || ''
|
}
|
|
this.setState({
|
url: val,
|
})
|
}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.state), fromJS(nextState))
|
}
|
|
deleteUrl = () => {
|
this.setState({url: ''})
|
this.props.onChange('')
|
}
|
|
handleChange = (key) => {
|
this.setState({visible: key})
|
}
|
|
popSubmit = () => {
|
let url = ''
|
if (this.inputWrap && this.inputWrap.state.url) {
|
url = this.inputWrap.state.url
|
}
|
|
this.setState({visible: '', url})
|
this.props.onChange(url)
|
}
|
|
render () {
|
const { url, visible } = this.state
|
const { type } = this.props
|
let name = url ? url.slice(url.lastIndexOf('/') + 1) : ''
|
|
return (
|
<div className="mk-source-wrap">
|
{!url ? <Radio.Group>
|
<Radio.Button value="input" size="small" onClick={() => this.handleChange('input')}>输入</Radio.Button>
|
<Radio.Button value="upload" size="small" onClick={() => this.handleChange('upload')}>上传</Radio.Button>
|
<Radio.Button value="system" size="small" onClick={() => this.handleChange('system')}>系统</Radio.Button>
|
</Radio.Group> : null}
|
{url ? <div className="mk-source-item-info">
|
<Icon type="paper-clip" />
|
<a target="_blank" rel="noopener noreferrer" href={url}>{name}</a>
|
<Icon title="删除文件" type="delete" onClick={this.deleteUrl}/>
|
</div> : null}
|
<Modal
|
visible={!!visible}
|
width={visible !== 'system' ? 600 : 1000}
|
closable={false}
|
maskClosable={false}
|
okText="确定"
|
cancelText="取消"
|
onOk={this.popSubmit}
|
onCancel={() => {this.setState({visible: ''})}}
|
destroyOnClose
|
>
|
<InputForm type={type === 'picture' ? 'image' : type} keyword={visible} ref={dom => { this.inputWrap = dom }} />
|
</Modal>
|
</div>
|
)
|
}
|
}
|
|
export default CopyComponent
|