1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { connect } from 'react-redux';
6 import { WrappedFieldMetaProps, WrappedFieldInputProps, WrappedFieldProps } from 'redux-form';
7 import { Vocabulary } from '~/models/vocabulary';
8 import { RootState } from '~/store/store';
9 import { getVocabulary } from '~/store/vocabulary/vocabulary-selectors';
11 export interface VocabularyProp {
12 vocabulary: Vocabulary;
15 export const mapStateToProps = (state: RootState): VocabularyProp => ({
16 vocabulary: getVocabulary(state.properties),
19 export const connectVocabulary = connect(mapStateToProps);
21 export const ITEMS_PLACEHOLDER: string[] = [];
23 export const hasError = ({ touched, invalid }: WrappedFieldMetaProps) =>
26 export const getErrorMsg = (meta: WrappedFieldMetaProps) =>
31 export const handleBlur = ({ onBlur, value }: WrappedFieldInputProps) =>
35 export const handleSelect = ({ onChange }: WrappedFieldInputProps) => {
36 return (item:PropFieldSuggestion) => {
41 export const buildProps = ({ input, meta }: WrappedFieldProps) => {
44 onChange: input.onChange,
45 onBlur: handleBlur(input),
46 items: ITEMS_PLACEHOLDER,
47 onSelect: handleSelect(input),
48 renderSuggestion: (item:PropFieldSuggestion) => item.label,
49 error: hasError(meta),
50 helperText: getErrorMsg(meta),
54 export interface PropFieldSuggestion {