UNPKG

cspace-ui

Version:
146 lines (122 loc) 3.89 kB
import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import Immutable from 'immutable'; import { components as inputComponents } from 'cspace-input'; import FieldInput from './input/FieldInput'; import styles from '../../../styles/cspace-ui/ExportFieldEditor.css'; import { getRecordFieldOptionListName, getRecordGroupOptionListName, } from '../../helpers/configHelpers'; const propTypes = { config: PropTypes.shape({ locale: PropTypes.string, }).isRequired, includeFields: PropTypes.instanceOf(Immutable.List), recordType: PropTypes.string, buildRecordFieldOptionLists: PropTypes.func, deleteOptionList: PropTypes.func, onIncludeFieldsAddInstance: PropTypes.func, onIncludeFieldsCommit: PropTypes.func, onIncludeFieldsMoveInstance: PropTypes.func, onIncludeFieldsRemoveInstance: PropTypes.func, }; const { RepeatingInput } = inputComponents; const messages = defineMessages({ prompt: { id: 'exportFieldEditor.prompt', description: 'Prompt message in the field editor for exports.', defaultMessage: 'Select fields to include.', }, }); export default class ExportFieldEditor extends Component { constructor(props) { super(props); this.handleIncludeFieldsAddInstance = this.handleIncludeFieldsAddInstance.bind(this); this.handleIncludeFieldsCommit = this.handleIncludeFieldsCommit.bind(this); this.handleIncludeFieldsMoveInstance = this.handleIncludeFieldsMoveInstance.bind(this); this.handleIncludeFieldsRemoveInstance = this.handleIncludeFieldsRemoveInstance.bind(this); } componentDidMount() { const { config, recordType, buildRecordFieldOptionLists, } = this.props; if (buildRecordFieldOptionLists) { // Converter doesn't support importing struct date parts, so set the includeStructDateFields // arg to false. buildRecordFieldOptionLists(config, recordType, undefined, false); } } componentWillUnmount() { const { recordType, deleteOptionList, } = this.props; if (deleteOptionList) { deleteOptionList(getRecordFieldOptionListName(recordType)); deleteOptionList(getRecordGroupOptionListName(recordType)); } } handleIncludeFieldsAddInstance(path, position) { const { onIncludeFieldsAddInstance, } = this.props; if (onIncludeFieldsAddInstance) { onIncludeFieldsAddInstance(position); } } handleIncludeFieldsCommit(path, value) { const { onIncludeFieldsCommit, } = this.props; if (onIncludeFieldsCommit) { onIncludeFieldsCommit(path[0], value); } } handleIncludeFieldsMoveInstance(path, newPosition) { const { onIncludeFieldsMoveInstance, } = this.props; if (onIncludeFieldsMoveInstance) { onIncludeFieldsMoveInstance(path[1], newPosition); } } handleIncludeFieldsRemoveInstance(path) { const { onIncludeFieldsRemoveInstance, } = this.props; if (onIncludeFieldsRemoveInstance) { onIncludeFieldsRemoveInstance(path[1]); } } render() { const { config, includeFields, recordType, } = this.props; return ( <div className={styles.common}> <p><FormattedMessage {...messages.prompt} /></p> <RepeatingInput name="includeFields" value={includeFields} onAddInstance={this.handleIncludeFieldsAddInstance} onCommit={this.handleIncludeFieldsCommit} onMoveInstance={this.handleIncludeFieldsMoveInstance} onRemoveInstance={this.handleIncludeFieldsRemoveInstance} > <FieldInput config={config} embedded recordType={recordType} /> </RepeatingInput> </div> ); } } ExportFieldEditor.propTypes = propTypes;