X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e9fdba2e2c5f99623438cc7bfd6f7e1731b8c93b..c0411a76d1ae1e076dac049267a54366df1c8517:/src/views-components/resource-properties-form/property-field-common.tsx diff --git a/src/views-components/resource-properties-form/property-field-common.tsx b/src/views-components/resource-properties-form/property-field-common.tsx index b8dfa6f2b5..028c46b9d3 100644 --- a/src/views-components/resource-properties-form/property-field-common.tsx +++ b/src/views-components/resource-properties-form/property-field-common.tsx @@ -3,6 +3,8 @@ // SPDX-License-Identifier: AGPL-3.0 import { connect } from 'react-redux'; +import { WrappedFieldMetaProps, WrappedFieldInputProps, WrappedFieldProps } from 'redux-form'; +import { identity } from 'lodash'; import { Vocabulary } from '~/models/vocabulary'; import { RootState } from '~/store/store'; import { getVocabulary } from '~/store/vocabulary/vocabulary-selctors'; @@ -18,3 +20,26 @@ export const mapStateToProps = (state: RootState): VocabularyProp => ({ export const connectVocabulary = connect(mapStateToProps); export const ITEMS_PLACEHOLDER: string[] = []; + +export const hasError = ({ touched, invalid }: WrappedFieldMetaProps) => + touched && invalid; + +export const getErrorMsg = (meta: WrappedFieldMetaProps) => + hasError(meta) + ? meta.error + : ''; + +export const handleBlur = ({ onBlur, value }: WrappedFieldInputProps) => + () => + onBlur(value); + +export const buildProps = ({ input, meta }: WrappedFieldProps) => ({ + value: input.value, + onChange: input.onChange, + onBlur: handleBlur(input), + items: ITEMS_PLACEHOLDER, + onSelect: input.onChange, + renderSuggestion: identity, + error: hasError(meta), + helperText: getErrorMsg(meta), +});