import React from "react" import { Link } from "react-router-dom" import { Row, Col, Modal, Form, Input, Select, Button, Table, Icon, Tooltip, Tag, Popconfirm, Spin, notification } from "antd" import Utils from "./utils" import * as cs from "./constants" class CreateFormDef extends React.PureComponent { state = { confirmDirty: false, modalWaiting: false } // 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.ModelLists, cs.Routes.CreateList, cs.MethodPost, values).then(() => { notification["success"]({ placement: "topRight", message: "List created", description: `"${values["name"]}" created` }) 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.ModelLists, cs.Routes.UpdateList, cs.MethodPut, { ...values, id: this.props.record.id }).then(() => { notification["success"]({ placement: "topRight", message: "List modified", 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 }) }) } }) } 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("type", { initialValue: record.type ? record.type : "private", rules: [{ required: true }] })( )} {getFieldDecorator("tags", { initialValue: record.tags })( )}
) } } const CreateForm = Form.create()(CreateFormDef) class Lists extends React.PureComponent { state = { formType: null, record: {} } constructor(props) { super(props) this.columns = [{ title: "Name", dataIndex: "name", sorter: true, width: "50%", render: (text, record) => { const out = []; out.push(
{ text }
) if(record.tags.length > 0) { for (let i = 0; i < record.tags.length; i++) { out.push({ record.tags[i] }); } } return out } }, { title: "Type", dataIndex: "type", width: "5%", render: (type, _) => { let color = type === "private" ? "orange" : "green" return {type} } }, { title: "Subscribers", dataIndex: "subscriber_count", width: "10%", align: "center" }, { 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: "10%", render: (text, record) => { return (
this.handleShowEditForm(record)}> this.deleteRecord(record)}>
) } }] } componentDidMount() { this.fetchRecords() } fetchRecords = () => { this.props.modelRequest(cs.ModelLists, cs.Routes.GetLists, cs.MethodGet) } deleteRecord = (record) => { this.props.modelRequest(cs.ModelLists, cs.Routes.DeleteList, cs.MethodDelete, { id: record.id }) .then(() => { notification["success"]({ placement: "topRight", message: "List deleted", description: `"${record.name}" deleted` }) // Reload the table. this.fetchRecords() }).catch(e => { notification["error"]({ message: "Error", description: e.message }) }) } handleHideForm = () => { this.setState({ formType: null }) } handleShowCreateForm = () => { this.setState({ formType: cs.FormCreate, record: {} }) } handleShowEditForm = (record) => { this.setState({ formType: cs.FormEdit, record: record }) } render() { return (

Lists ({this.props.data[cs.ModelLists].length})


record.uuid } dataSource={ this.props.data[cs.ModelLists] } loading={ this.props.reqStates[cs.ModelLists] !== cs.StateDone } pagination={ false } /> ) } } export default Lists