From: Lucas Di Pentima Date: Wed, 13 Nov 2019 22:01:53 +0000 (-0300) Subject: 15067: Generalizes Key/Value fields to be reused on different forms. X-Git-Tag: 2.0.0~29^2~5 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/70e0ef7baeb7a27e2048b359b5b3ae204d3b4528 15067: Generalizes Key/Value fields to be reused on different forms. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- diff --git a/src/views-components/resource-properties-form/property-key-field.tsx b/src/views-components/resource-properties-form/property-key-field.tsx index eb3c8050..ef51d250 100644 --- a/src/views-components/resource-properties-form/property-key-field.tsx +++ b/src/views-components/resource-properties-form/property-key-field.tsx @@ -3,13 +3,13 @@ // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; -import { change, WrappedFieldProps, WrappedFieldMetaProps, WrappedFieldInputProps, Field } from 'redux-form'; +import { change, WrappedFieldProps, WrappedFieldMetaProps, WrappedFieldInputProps, + Field, FormName } from 'redux-form'; import { memoize } from 'lodash'; import { Autocomplete } from '~/components/autocomplete/autocomplete'; import { Vocabulary, getTags, getTagKeyID, PropFieldSuggestion } from '~/models/vocabulary'; import { connectVocabulary, VocabularyProp, buildProps } from '~/views-components/resource-properties-form/property-field-common'; import { TAG_KEY_VALIDATION } from '~/validators/validators'; -import { COLLECTION_TAG_FORM_NAME } from '~/store/collection-panel/collection-panel-action'; import { escapeRegExp } from '~/common/regexp.ts'; export const PROPERTY_KEY_FIELD_NAME = 'key'; @@ -25,13 +25,15 @@ export const PropertyKeyField = connectVocabulary( ); export const PropertyKeyInput = ({ vocabulary, ...props }: WrappedFieldProps & VocabularyProp) => - ; + ( + + )}/>; const getValidation = memoize( (vocabulary: Vocabulary) => @@ -53,20 +55,22 @@ const getSuggestions = (value: string, vocabulary: Vocabulary) => { // Attempts to match a manually typed key label with a key ID, when the user // doesn't select the key from the suggestions list. const handleBlur = ( + formName: string, { dispatch }: WrappedFieldMetaProps, { onBlur, value }: WrappedFieldInputProps, vocabulary: Vocabulary) => () => { - dispatch(change(COLLECTION_TAG_FORM_NAME, PROPERTY_KEY_FIELD_ID, getTagKeyID(value, vocabulary))); + dispatch(change(formName, PROPERTY_KEY_FIELD_ID, getTagKeyID(value, vocabulary))); onBlur(value); }; // When selecting a property key, save its ID for later usage. const handleSelect = ( + formName: string, { onChange }: WrappedFieldInputProps, { dispatch }: WrappedFieldMetaProps) => { return (item:PropFieldSuggestion) => { onChange(item.label); - dispatch(change(COLLECTION_TAG_FORM_NAME, PROPERTY_KEY_FIELD_ID, item.id)); + dispatch(change(formName, PROPERTY_KEY_FIELD_ID, item.id)); }; }; diff --git a/src/views-components/resource-properties-form/property-value-field.tsx b/src/views-components/resource-properties-form/property-value-field.tsx index c2474735..e34170bc 100644 --- a/src/views-components/resource-properties-form/property-value-field.tsx +++ b/src/views-components/resource-properties-form/property-value-field.tsx @@ -3,14 +3,14 @@ // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; -import { change, WrappedFieldProps, WrappedFieldMetaProps, WrappedFieldInputProps, Field, formValues } from 'redux-form'; +import { change, WrappedFieldProps, WrappedFieldMetaProps, WrappedFieldInputProps, + Field, formValues, FormName } from 'redux-form'; import { compose } from 'redux'; import { Autocomplete } from '~/components/autocomplete/autocomplete'; import { Vocabulary, getTagValueID, isStrictTag, getTagValues, PropFieldSuggestion } from '~/models/vocabulary'; import { PROPERTY_KEY_FIELD_ID } from '~/views-components/resource-properties-form/property-key-field'; import { VocabularyProp, connectVocabulary, buildProps } from '~/views-components/resource-properties-form/property-field-common'; import { TAG_VALUE_VALIDATION } from '~/validators/validators'; -import { COLLECTION_TAG_FORM_NAME } from '~/store/collection-panel/collection-panel-action'; import { escapeRegExp } from '~/common/regexp.ts'; interface PropertyKeyProp { @@ -35,13 +35,15 @@ export const PropertyValueField = compose( ); export const PropertyValueInput = ({ vocabulary, propertyKey, ...props }: WrappedFieldProps & PropertyValueFieldProps) => - ; + ( + + )}/>; const getValidation = (props: PropertyValueFieldProps) => isStrictTag(props.propertyKey, props.vocabulary) @@ -62,21 +64,23 @@ const getSuggestions = (value: string, tagName: string, vocabulary: Vocabulary) // Attempts to match a manually typed value label with a value ID, when the user // doesn't select the value from the suggestions list. const handleBlur = ( + formName: string, { dispatch }: WrappedFieldMetaProps, { onBlur, value }: WrappedFieldInputProps, vocabulary: Vocabulary, tagKeyID: string) => () => { - dispatch(change(COLLECTION_TAG_FORM_NAME, PROPERTY_VALUE_FIELD_ID, getTagValueID(tagKeyID, value, vocabulary))); + dispatch(change(formName, PROPERTY_VALUE_FIELD_ID, getTagValueID(tagKeyID, value, vocabulary))); onBlur(value); }; // When selecting a property value, save its ID for later usage. const handleSelect = ( + formName: string, { onChange }: WrappedFieldInputProps, { dispatch }: WrappedFieldMetaProps) => { return (item:PropFieldSuggestion) => { onChange(item.label); - dispatch(change(COLLECTION_TAG_FORM_NAME, PROPERTY_VALUE_FIELD_ID, item.id)); + dispatch(change(formName, PROPERTY_VALUE_FIELD_ID, item.id)); }; };