import React from 'react'; import { Form, Button, Checkbox, Divider } from 'antd'; import { FormComponentProps } from 'antd/lib/form'; import { EmailSubscriptions } from 'types'; import { groupEmailSubscriptionsByCategory } from 'utils/email'; import './EmailSubscriptionsForm.less'; interface OwnProps { emailSubscriptions: EmailSubscriptions; loading: boolean; onSubmit: (settings: EmailSubscriptions) => void; } type Props = OwnProps & FormComponentProps; class EmailSubscriptionsForm extends React.Component { componentDidMount() { this.props.form.setFieldsValue(this.props.emailSubscriptions); } render() { const { emailSubscriptions, loading } = this.props; const { getFieldDecorator } = this.props.form; const groupedSubs = groupEmailSubscriptionsByCategory(emailSubscriptions); const fields = Object.entries(this.props.form.getFieldsValue()); const numChecked = fields.map(([_, v]) => v).filter(v => v).length; const numUnchecked = fields.map(([_, v]) => v).filter(v => !v).length; const indeterminate = numChecked !== 0 && numUnchecked !== 0; const isAllChecked = numChecked === fields.length; return (
{groupedSubs.map(gs => (
{gs.category.description} {gs.subscriptionSettings.map(ss => (
{getFieldDecorator(ss.key, { valuePropName: 'checked', })({ss.description})}
))}
))}
{isAllChecked ? 'uncheck all' : 'check all'}
); } private handleCheckAll = () => { const fields = Object.entries(this.props.form.getFieldsValue()); const numChecked = fields.map(([_, v]) => v).filter(v => v).length; const checked = numChecked !== fields.length; const newSettings = fields.reduce((a: any, [k, _]) => { a[k] = checked; return a; }, {}); this.props.form.setFieldsValue(newSettings); }; private handleSubmit = (ev: React.FormEvent) => { ev.preventDefault(); this.props.onSubmit(this.props.form.getFieldsValue() as EmailSubscriptions); }; } const FormWrappedEmailSubscriptionsForm = Form.create()(EmailSubscriptionsForm); export default FormWrappedEmailSubscriptionsForm;