From 74e6ba2377c3c1ad7c2a8e97c24e8be369f40fe3 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Tue, 6 Dec 2022 00:00:23 +0100 Subject: [PATCH] 19732: Removes 'require' validation on Property form fields. Also, only enable the 'Add' button when both property key & value are set on the form. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- src/validators/validators.tsx | 4 +-- .../property-value-field.tsx | 2 +- .../resource-properties-form.tsx | 36 +++++++++++++------ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/validators/validators.tsx b/src/validators/validators.tsx index 6e72ef6898..87a4c1f57e 100644 --- a/src/validators/validators.tsx +++ b/src/validators/validators.tsx @@ -8,8 +8,8 @@ import { isRsaKey } from './is-rsa-key'; import { isRemoteHost } from "./is-remote-host"; import { validFilePath, validName, validNameAllowSlash } from "./valid-name"; -export const TAG_KEY_VALIDATION = [require, maxLength(255)]; -export const TAG_VALUE_VALIDATION = [require, maxLength(255)]; +export const TAG_KEY_VALIDATION = [maxLength(255)]; +export const TAG_VALUE_VALIDATION = [maxLength(255)]; export const PROJECT_NAME_VALIDATION = [require, validName, maxLength(255)]; export const PROJECT_NAME_VALIDATION_ALLOW_SLASH = [require, validNameAllowSlash, maxLength(255)]; 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 b8e525bf67..8941d441a8 100644 --- a/src/views-components/resource-properties-form/property-value-field.tsx +++ b/src/views-components/resource-properties-form/property-value-field.tsx @@ -89,7 +89,7 @@ const getValidation = (props: PropertyValueFieldProps) => const matchTagValues = ({ vocabulary, propertyKeyId }: PropertyValueFieldProps) => (value: string) => - getTagValues(propertyKeyId, vocabulary).find(v => v.label === value) + getTagValues(propertyKeyId, vocabulary).find(v => !value || v.label === value) ? undefined : 'Incorrect value'; diff --git a/src/views-components/resource-properties-form/resource-properties-form.tsx b/src/views-components/resource-properties-form/resource-properties-form.tsx index 25d0f2bb37..0147312912 100644 --- a/src/views-components/resource-properties-form/resource-properties-form.tsx +++ b/src/views-components/resource-properties-form/resource-properties-form.tsx @@ -3,13 +3,29 @@ // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; -import { InjectedFormProps } from 'redux-form'; +import { RootState } from 'store/store'; +import { connect } from 'react-redux'; +import { formValueSelector, InjectedFormProps } from 'redux-form'; import { Grid, withStyles, WithStyles } from '@material-ui/core'; import { PropertyKeyField, PROPERTY_KEY_FIELD_NAME, PROPERTY_KEY_FIELD_ID } from './property-key-field'; import { PropertyValueField, PROPERTY_VALUE_FIELD_NAME, PROPERTY_VALUE_FIELD_ID } from './property-value-field'; import { ProgressButton } from 'components/progress-button/progress-button'; import { GridClassKey } from '@material-ui/core/Grid'; +const AddButton = withStyles(theme => ({ + root: { marginTop: theme.spacing.unit } +}))(ProgressButton); + +const mapStateToProps = (state: RootState) => { + return { + applySelector: (selector) => selector(state, 'key', 'value', 'keyID', 'valueID') + } +} + +interface ApplySelector { + applySelector: (selector) => any; +} + export interface ResourcePropertiesFormData { uuid: string; [PROPERTY_KEY_FIELD_NAME]: string; @@ -19,10 +35,11 @@ export interface ResourcePropertiesFormData { clearPropertyKeyOnSelect?: boolean; } -export type ResourcePropertiesFormProps = {uuid: string; clearPropertyKeyOnSelect?: boolean } & InjectedFormProps & WithStyles; +type ResourcePropertiesFormProps = {uuid: string; clearPropertyKeyOnSelect?: boolean } & InjectedFormProps & WithStyles & ApplySelector; -export const ResourcePropertiesForm = ({ handleSubmit, change, submitting, invalid, classes, uuid, clearPropertyKeyOnSelect }: ResourcePropertiesFormProps ) => { +export const ResourcePropertiesForm = connect(mapStateToProps)(({ handleSubmit, change, submitting, invalid, classes, uuid, clearPropertyKeyOnSelect, applySelector, ...props }: ResourcePropertiesFormProps ) => { change('uuid', uuid); // Sets the uuid field to the uuid of the resource. + const propertyValue = applySelector(formValueSelector(props.form)); return
@@ -32,19 +49,16 @@ export const ResourcePropertiesForm = ({ handleSubmit, change, submitting, inval - + -
}; - -export const Button = withStyles(theme => ({ - root: { marginTop: theme.spacing.unit } -}))(ProgressButton); + } +); \ No newline at end of file -- 2.30.2