import React from "react" import { Row, Col, Modal, Form, Input, Button, Table, Icon, Tooltip, Tag, Popconfirm, Spin, notification } from "antd" import ModalPreview from "./ModalPreview" import Utils from "./utils" import * as cs from "./constants" class CreateFormDef extends React.PureComponent { state = { confirmDirty: false, modalWaiting: false, previewName: "", previewBody: "" } // Handle create / edit form submission. handleSubmit = (e) => { e.preventDefault() this.props.form.validateFields((err, values) => { if (err) { return } this.setState({ modalWaiting: true }) if (this.props.formType === cs.FormCreate) { // Create a new list. this.props.modelRequest(cs.ModelTemplates, cs.Routes.CreateTemplate, cs.MethodPost, values).then(() => { notification["success"]({ placement: "topRight", message: "Template added", description: `"${values["name"]}" added` }) this.props.fetchRecords() this.props.onClose() this.setState({ modalWaiting: false }) }).catch(e => { notification["error"]({ message: "Error", description: e.message }) this.setState({ modalWaiting: false }) }) } else { // Edit a list. this.props.modelRequest(cs.ModelTemplates, cs.Routes.UpdateTemplate, cs.MethodPut, { ...values, id: this.props.record.id }).then(() => { notification["success"]({ placement: "topRight", message: "Template updated", description: `"${values["name"]}" modified` }) this.props.fetchRecords() this.props.onClose() this.setState({ modalWaiting: false }) }).catch(e => { notification["error"]({ message: "Error", description: e.message }) this.setState({ modalWaiting: false }) }) } }) } handleConfirmBlur = (e) => { const value = e.target.value this.setState({ confirmDirty: this.state.confirmDirty || !!value }) } handlePreview = (name, body) => { this.setState({ previewName: name, previewBody: body }) } render() { const { formType, record, onClose } = this.props const { getFieldDecorator } = this.props.form const formItemLayout = { labelCol: { xs: { span: 16 }, sm: { span: 4 } }, wrapperCol: { xs: { span: 16 }, sm: { span: 18 } } } if (formType === null) { return null } return (
{getFieldDecorator("name", { initialValue: record.name, rules: [{ required: true }] })()} {getFieldDecorator("body", { initialValue: record.body ? record.body : "", rules: [{ required: true }] })( )} { this.props.form.getFieldValue("body") !== "" && }
The placeholder {'{'}{'{'} template "content" . {'}'}{'}'} should appear in the template. Read more on templating.
{ this.state.previewBody && { this.setState({ previewBody: null, previewName: null }) }} /> }
) } } const CreateForm = Form.create()(CreateFormDef) class Templates extends React.PureComponent { state = { formType: null, record: {}, previewRecord: null } constructor(props) { super(props) this.columns = [{ title: "Name", dataIndex: "name", sorter: true, width: "50%", render: (text, record) => { return (
this.handleShowEditForm(record)}>{ text } { record.is_default &&
Default
}
) } }, { title: "Created", dataIndex: "created_at", render: (date, _) => { return Utils.DateString(date) } }, { title: "Updated", dataIndex: "updated_at", render: (date, _) => { return Utils.DateString(date) } }, { title: "", dataIndex: "actions", width: "20%", className: "actions", render: (text, record) => { return (
this.handlePreview(record)}> { !record.is_default && this.handleSetDefault(record)}> } this.handleShowEditForm(record)}> { record.id !== 1 && this.handleDeleteRecord(record)}> }
) } }] } componentDidMount() { this.fetchRecords() } fetchRecords = () => { this.props.modelRequest(cs.ModelTemplates, cs.Routes.GetTemplates, cs.MethodGet) } handleDeleteRecord = (record) => { this.props.modelRequest(cs.ModelTemplates, cs.Routes.DeleteTemplate, cs.MethodDelete, { id: record.id }) .then(() => { notification["success"]({ placement: "topRight", message: "Template deleted", description: `"${record.name}" deleted` }) // Reload the table. this.fetchRecords() }).catch(e => { notification["error"]({ message: "Error", description: e.message }) }) } handleSetDefault = (record) => { this.props.modelRequest(cs.ModelTemplates, cs.Routes.SetDefaultTemplate, cs.MethodPut, { id: record.id }) .then(() => { notification["success"]({ placement: "topRight", message: "Template updated", description: `"${record.name}" set as default` }) // Reload the table. this.fetchRecords() }).catch(e => { notification["error"]({ message: "Error", description: e.message }) }) } handlePreview = (record) => { this.setState({ previewRecord: record }) } hideForm = () => { this.setState({ formType: null }) } handleShowCreateForm = () => { this.setState({ formType: cs.FormCreate, record: {} }) } handleShowEditForm = (record) => { this.setState({ formType: cs.FormEdit, record: record }) } render() { return (

Templates ({this.props.data[cs.ModelTemplates].length})


record.id } dataSource={ this.props.data[cs.ModelTemplates] } loading={ this.props.reqStates[cs.ModelTemplates] !== cs.StateDone } pagination={ false } /> { this.state.previewRecord && { this.setState({ previewRecord: null }) }} /> } ) } } export default Templates