import * as React from 'react'; import { connect } from 'react-redux'; import Grid, { GridItem } from 'mineral-ui/Grid'; import Card, { CardTitle, CardBlock, CardDivider } from 'mineral-ui/Card'; import Text from 'mineral-ui/Text'; import { FormField } from 'mineral-ui/Form'; import TextInput from 'mineral-ui/TextInput'; import Select from 'mineral-ui/Select'; import Checkbox from 'mineral-ui/Checkbox'; import Button from 'mineral-ui/Button'; import { mapStateToProps, mapDispatchToProps, IReduxDispatchProps, IReduxExternalProps, IReduxStateProps, } from './ReduxContainer'; import { ISelectOption } from '../ExtendedMappingEditor/FieldsFilterDisplay'; interface IQuicksearchFieldConfigEditorExternalProps extends IReduxExternalProps { field: string; } export default connect( mapStateToProps, mapDispatchToProps, )( ( props: IReduxStateProps & IReduxDispatchProps & IReduxExternalProps & IQuicksearchFieldConfigEditorExternalProps, ) => { const { field, graphqlField, allFields, quicksearchConfigs, onFieldPropertyChange } = props; const editingField = quicksearchConfigs.find((f) => f.field === field); if (!editingField) { return null; } type TDataProperty = keyof typeof editingField; interface IFieldPropertyDelta { property: TDataProperty; value: typeof editingField[IFieldPropertyDelta['property']]; } /******* * event handlers *******/ const onDisplayNameChange = (e: React.SyntheticEvent) => { onFieldPropertyChange({ ...editingField, displayName: e.currentTarget.value, }); }; const onPropertyChange = (delta: IFieldPropertyDelta) => () => { onFieldPropertyChange({ ...editingField, [delta.property]: delta.value, }); }; const onSearchFieldAdded = (e: ISelectOption) => { onFieldPropertyChange({ ...editingField, searchFields: e.value ? [...editingField.searchFields, e.value] : editingField.searchFields, }); }; const onSearchFieldRemove = (f: string) => () => { onFieldPropertyChange({ ...editingField, searchFields: editingField.searchFields.filter((_f) => _f != f), }); }; const onKeyFieldSelect = (e: ISelectOption) => { onFieldPropertyChange({ ...editingField, keyField: e.value, }); }; /******* * util methods *******/ const toSelectOption = (s: string): ISelectOption => ({ text: s, value: s, }); const isSubField = (s: string): boolean => s.includes(editingField.field); return ( {field && field.length ? field : graphqlField} !editingField.searchFields.includes(f)) .map(toSelectOption)} /> ); }, );