import React from 'react'; import { Row, Col, Icon, Input, Checkbox, Tooltip, } from 'antd'; import Form, { FormComponentProps } from 'antd/lib/form/Form'; import Text from 'antd/lib/typography/Text'; import patterns from '../../utils/validation-patterns'; export interface AdvancedConfiguration { bugTracker?: string; zOrder: boolean; imageQuality?: number; overlapSize?: number; segmentSize?: number; startFrame?: number; stopFrame?: number; frameFilter?: string; lfs: boolean; repository?: string; } type Props = FormComponentProps & { onSubmit(values: AdvancedConfiguration): void installedGit: boolean; }; class AdvancedConfigurationForm extends React.PureComponent { public submit() { return new Promise((resolve, reject) => { this.props.form.validateFields((error, values) => { if (!error) { const filteredValues = { ...values }; delete filteredValues.frameStep; this.props.onSubmit({ ...values, frameFilter: values.frameStep ? `step=${values.frameStep}` : undefined, }); resolve(); } else { reject(); } }); }) } public resetFields() { this.props.form.resetFields(); } private renderZOrder() { return ( {this.props.form.getFieldDecorator('zOrder', { initialValue: false, valuePropName: 'checked', })( Z-order )} ); } private renderImageQuality() { return ( {this.props.form.getFieldDecorator('imageQuality', { initialValue: 70, rules: [{ required: true, message: 'This field is required' }], })( } /> )} ); } private renderOverlap() { return ( {this.props.form.getFieldDecorator('overlapSize')( )} ); } private renderSegmentSize() { return ( {this.props.form.getFieldDecorator('segmentSize')( )} ); } private renderStartFrame() { return ( {this.props.form.getFieldDecorator('startFrame')( )} ); } private renderStopFrame() { return ( {this.props.form.getFieldDecorator('stopFrame')( )} ); } private renderFrameStep() { return ( {this.props.form.getFieldDecorator('frameStep')( )} ); } private renderGitLFSBox() { return ( {this.props.form.getFieldDecorator('lfs', { valuePropName: 'checked', initialValue: false, })( Use LFS (Large File Support): )} ); } private renderGitRepositoryURL() { return ( {this.props.form.getFieldDecorator('repository', { rules: [{ validator: (_, value, callback) => { if (!value) { callback(); } else { const [url, path] = value.split(/\s+/); if (!patterns.validateURL.pattern.test(url)) { callback('Git URL is not a valid'); } if (path && !patterns.validatePath.pattern.test(path)) { callback('Git path is not a valid'); } callback(); } } }] })( )} ); } private renderGit() { return ( <> {this.renderGitRepositoryURL()} {this.renderGitLFSBox()} ); } private renderBugTracker() { return ( {this.props.form.getFieldDecorator('bugTracker', { rules: [{ validator: (_, value, callback) => { if (value && !patterns.validateURL.pattern.test(value)) { callback('Issue tracker must be URL'); } else { callback(); } } }] })( )} ) } public render() { return (
{this.renderZOrder()} {this.renderImageQuality()} {this.renderOverlap()} {this.renderSegmentSize()} {this.renderStartFrame()} {this.renderStopFrame()} {this.renderFrameStep()} { this.props.installedGit ? this.renderGit() : null} {this.renderBugTracker()}
); } } export default Form.create()(AdvancedConfigurationForm);