From e9fdba2e2c5f99623438cc7bfd6f7e1731b8c93b Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Wed, 28 Nov 2018 12:08:39 +0100 Subject: [PATCH] Extract property-field-common module Feature #14393 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- .../property-field-common.tsx | 20 +++++++++++++++++++ .../property-key-field.tsx | 16 ++------------- .../property-value-field.tsx | 16 ++------------- 3 files changed, 24 insertions(+), 28 deletions(-) create mode 100644 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 new file mode 100644 index 00000000..b8dfa6f2 --- /dev/null +++ b/src/views-components/resource-properties-form/property-field-common.tsx @@ -0,0 +1,20 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import { connect } from 'react-redux'; +import { Vocabulary } from '~/models/vocabulary'; +import { RootState } from '~/store/store'; +import { getVocabulary } from '~/store/vocabulary/vocabulary-selctors'; + +export interface VocabularyProp { + vocabulary: Vocabulary; +} + +export const mapStateToProps = (state: RootState): VocabularyProp => ({ + vocabulary: getVocabulary(state.properties), +}); + +export const connectVocabulary = connect(mapStateToProps); + +export const ITEMS_PLACEHOLDER: string[] = []; 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 c5e13985..2a11caec 100644 --- a/src/views-components/resource-properties-form/property-key-field.tsx +++ b/src/views-components/resource-properties-form/property-key-field.tsx @@ -4,25 +4,15 @@ import * as React from 'react'; import { WrappedFieldProps, Field } from 'redux-form'; -import { connect } from 'react-redux'; import { identity, memoize } from 'lodash'; -import { RootState } from '~/store/store'; -import { getVocabulary } from '~/store/vocabulary/vocabulary-selctors'; import { Autocomplete } from '~/components/autocomplete/autocomplete'; import { Vocabulary } from '~/models/vocabulary'; import { require } from '~/validators/require'; - -interface VocabularyProp { - vocabulary: Vocabulary; -} - -const mapStateToProps = (state: RootState): VocabularyProp => ({ - vocabulary: getVocabulary(state.properties), -}); +import { ITEMS_PLACEHOLDER, connectVocabulary, VocabularyProp } from '~/views-components/resource-properties-form/property-field-common'; export const PROPERTY_KEY_FIELD_NAME = 'key'; -export const PropertyKeyField = connect(mapStateToProps)( +export const PropertyKeyField = connectVocabulary( ({ vocabulary }: VocabularyProp) => const getTagsList = ({ tags }: Vocabulary) => Object.keys(tags); - -const ITEMS_PLACEHOLDER: string[] = []; 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 9df29bd9..dd94c830 100644 --- a/src/views-components/resource-properties-form/property-value-field.tsx +++ b/src/views-components/resource-properties-form/property-value-field.tsx @@ -4,19 +4,13 @@ import * as React from 'react'; import { WrappedFieldProps, Field, formValues } from 'redux-form'; -import { connect } from 'react-redux'; import { identity } from 'lodash'; import { compose } from 'redux'; -import { RootState } from '~/store/store'; -import { getVocabulary } from '~/store/vocabulary/vocabulary-selctors'; import { Autocomplete } from '~/components/autocomplete/autocomplete'; import { Vocabulary } from '~/models/vocabulary'; import { require } from '~/validators/require'; import { PROPERTY_KEY_FIELD_NAME } from '~/views-components/resource-properties-form/property-key-field'; - -interface VocabularyProp { - vocabulary: Vocabulary; -} +import { ITEMS_PLACEHOLDER, VocabularyProp, connectVocabulary } from '~/views-components/resource-properties-form/property-field-common'; interface PropertyKeyProp { propertyKey: string; @@ -24,14 +18,10 @@ interface PropertyKeyProp { type PropertyValueFieldProps = VocabularyProp & PropertyKeyProp; -const mapStateToProps = (state: RootState): VocabularyProp => ({ - vocabulary: getVocabulary(state.properties), -}); - export const PROPERTY_VALUE_FIELD_NAME = 'value'; export const PropertyValueField = compose( - connect(mapStateToProps), + connectVocabulary, formValues({ propertyKey: PROPERTY_KEY_FIELD_NAME }) )( (props: PropertyValueFieldProps) => @@ -77,5 +67,3 @@ const getTagValues = (tagName: string, vocabulary: Vocabulary) => { const tag = vocabulary.tags[tagName]; return tag && tag.values ? tag.values : []; }; - -const ITEMS_PLACEHOLDER: string[] = []; -- 2.30.2