@canner/antd-array-table
Version:
array table
101 lines (90 loc) • 2.34 kB
JavaScript
// @flow
import React, { Component } from "react";
import { Modal } from "antd";
import { FormattedMessage } from "react-intl";
import defaultMessage from "@canner/antd-locales";
import {Item, ConfirmButton, ResetButton} from 'canner-helpers';
import type {FieldId} from 'types/DefaultProps';
type Props = {
updateShowModal: (showModal: boolean) => void,
onChange: (refId: FieldId | {[string]: FieldId}, type: string, value?: any) => Promise<void>
| (Array<{
refId: FieldId | {[string]: FieldId},
type: string,
value?: any
}>) => Promise<void>,
updateKeys?: Array<string>,
refId: FieldId,
reset: Function
}
type State = {
visible: boolean,
order: number
}
export default class EditModal extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
visible: false,
order: 0,
};
}
showModal = (i: number) => {
const {updateShowModal} = this.props;
this.setState({
visible: true,
order: i
});
updateShowModal(true);
}
closeModalAndReset = () => {
const {updateShowModal} = this.props;
const {reset, refId} = this.props;
this.setState({
visible: false
}, () => {
reset(refId);
updateShowModal(false);
});
}
handleCancel = () => {
this.closeModalAndReset();
}
render() {
const { visible, order } = this.state;
const { updateKeys, refId } = this.props;
const footer = (
<div>
<ConfirmButton
text={<FormattedMessage
id="array.table.modal.okText"
defaultMessage={defaultMessage.en["array.table.modal.okText"]}
/>}
callback={this.closeModalAndReset}
/>
<ResetButton
text={<FormattedMessage
id="array.table.modal.cancelText"
defaultMessage={defaultMessage.en["array.table.modal.cancelText"]}
/>}
callback={this.closeModalAndReset}
/>
</div>
);
return (
<Modal
width="80%"
visible={visible}
onCancel={this.handleCancel}
footer={footer}
>
{visible && (
<Item
refId={refId.child(order)}
filter={updateKeys && (child => updateKeys.indexOf(child.name) !== -1)}
/>
)}
</Modal>
);
}
}