X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/3db1d07b3ab6cdfea052688088f569a173d6dab2..c15afcee286bb8ab694f488e2ccd490b56794e47:/src/views-components/form-fields/project-form-fields.tsx diff --git a/src/views-components/form-fields/project-form-fields.tsx b/src/views-components/form-fields/project-form-fields.tsx index 8243cfe3..3f576ab1 100644 --- a/src/views-components/form-fields/project-form-fields.tsx +++ b/src/views-components/form-fields/project-form-fields.tsx @@ -3,17 +3,39 @@ // SPDX-License-Identifier: AGPL-3.0 import * as React from "react"; -import { Field } from "redux-form"; +import { Field, Validator } from "redux-form"; import { TextField, RichEditorTextField } from "~/components/text-field/text-field"; -import { PROJECT_NAME_VALIDATION } from "~/validators/validators"; +import { PROJECT_NAME_VALIDATION, PROJECT_NAME_VALIDATION_ALLOW_SLASH } from "~/validators/validators"; +import { connect } from "react-redux"; +import { RootState } from "~/store/store"; -export const ProjectNameField = () => - ; +interface ProjectNameFieldProps { + validate: Validator[]; + label?: string; +} + +// Validation behavior depends on the value of ForwardSlashNameSubstitution. +// +// Redux form doesn't let you pass anonymous functions to 'validate' +// -- it fails with a very confusing recursive-update-exceeded error. +// So we can't construct the validation function on the fly. +// +// As a workaround, use ForwardSlashNameSubstitution to choose between one of two const-defined validators. + +export const ProjectNameField = connect( + (state: RootState) => { + return { + validate: (state.auth.config.clusterConfig.Collections.ForwardSlashNameSubstitution === "" ? + PROJECT_NAME_VALIDATION : PROJECT_NAME_VALIDATION_ALLOW_SLASH) + }; + })((props: ProjectNameFieldProps) => + + ); export const ProjectDescriptionField = () =>