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: cs.MsgPosition, message: "Template added", description: `"${values["name"]}" added` }); this.props.fetchRecords(); this.props.onClose(); this.setState({ modalWaiting: false }); }) .catch(e => { notification["error"]({ placement: cs.MsgPosition, 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: cs.MsgPosition, message: "Template updated", description: `"${values["name"]}" modified` }); this.props.fetchRecords(); this.props.onClose(); this.setState({ modalWaiting: false }); }) .catch(e => { notification["error"]({ placement: cs.MsgPosition, 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.{" "} Learn more . .
{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.props.pageTitle("Templates"); 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: cs.MsgPosition, 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: cs.MsgPosition, message: "Template updated", description: `"${record.name}" set as default` }); // Reload the table. this.fetchRecords(); }) .catch(e => { notification["error"]({ placement: cs.MsgPosition, 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;