diff --git a/src/core/client/account/routes/password/Reset/ResetPasswordForm.tsx b/src/core/client/account/routes/password/Reset/ResetPasswordForm.tsx index 097d69ded..177cbe481 100644 --- a/src/core/client/account/routes/password/Reset/ResetPasswordForm.tsx +++ b/src/core/client/account/routes/password/Reset/ResetPasswordForm.tsx @@ -4,6 +4,7 @@ import React, { useCallback } from "react"; import { Field, Form } from "react-final-form"; import { InvalidRequestError } from "coral-framework/lib/errors"; +import { colorFromMeta, ValidationMessage } from "coral-framework/lib/form"; import { useMutation } from "coral-framework/lib/relay"; import { composeValidators, @@ -19,7 +20,6 @@ import { InputLabel, PasswordField, Typography, - ValidationMessage, } from "coral-ui/components"; import ResetPasswordMutation from "./ResetPasswordMutation"; @@ -99,32 +99,23 @@ const ResetPasswordForm: React.FunctionComponent = ({ > - {submitError && ( - - {submitError} - - )} - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} + {submitError && ( + + {submitError} + + )} - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -181,28 +164,21 @@ const OIDCConfig: FunctionComponent = ({ {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -213,28 +189,21 @@ const OIDCConfig: FunctionComponent = ({ {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -245,28 +214,21 @@ const OIDCConfig: FunctionComponent = ({ {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Auth/OIDCConfigContainer.tsx b/src/core/client/admin/routes/Configure/sections/Auth/OIDCConfigContainer.tsx index 27f58a308..738e1187b 100644 --- a/src/core/client/admin/routes/Configure/sections/Auth/OIDCConfigContainer.tsx +++ b/src/core/client/admin/routes/Configure/sections/Auth/OIDCConfigContainer.tsx @@ -12,13 +12,14 @@ import { withFragmentContainer, } from "coral-framework/lib/relay"; +import { OnInitValuesFct } from "./AuthConfigContainer"; import DiscoverOIDCConfigurationFetch from "./DiscoverOIDCConfigurationFetch"; import OIDCConfig from "./OIDCConfig"; interface Props { auth: AuthData; authReadOnly: AuthReadOnlyData; - onInitValues: (values: AuthData) => void; + onInitValues: OnInitValuesFct; disabled?: boolean; discoverOIDCConfiguration: FetchProp; reactFinalForm: FormApi; @@ -49,6 +50,7 @@ class OIDCConfigContainer extends React.Component { form.change("auth.integrations.oidc.tokenURL", config.tokenURL); } } catch (error) { + // FIXME: (wyattjoh) handle error // tslint:disable-next-line:no-console console.warn(error); } @@ -57,7 +59,7 @@ class OIDCConfigContainer extends React.Component { constructor(props: Props) { super(props); - props.onInitValues(props.auth); + props.onInitValues({ auth: props.auth }); } public render() { diff --git a/src/core/client/admin/routes/Configure/sections/Auth/RegistrationField.tsx b/src/core/client/admin/routes/Configure/sections/Auth/RegistrationField.tsx index 336f821ff..6eff2c5ac 100644 --- a/src/core/client/admin/routes/Configure/sections/Auth/RegistrationField.tsx +++ b/src/core/client/admin/routes/Configure/sections/Auth/RegistrationField.tsx @@ -25,13 +25,7 @@ const RegistrationField: FunctionComponent = ({ name, disabled }) => ( {({ input }) => ( - + Allow Registration diff --git a/src/core/client/admin/routes/Configure/sections/Auth/SSOConfigContainer.tsx b/src/core/client/admin/routes/Configure/sections/Auth/SSOConfigContainer.tsx index 433d217db..be1073aa2 100644 --- a/src/core/client/admin/routes/Configure/sections/Auth/SSOConfigContainer.tsx +++ b/src/core/client/admin/routes/Configure/sections/Auth/SSOConfigContainer.tsx @@ -5,19 +5,20 @@ import { SSOConfigContainer_auth as AuthData } from "coral-admin/__generated__/S import { SSOConfigContainer_authReadOnly as AuthReadOnlyData } from "coral-admin/__generated__/SSOConfigContainer_authReadOnly.graphql"; import { withFragmentContainer } from "coral-framework/lib/relay"; +import { OnInitValuesFct } from "./AuthConfigContainer"; import SSOConfig from "./SSOConfig"; interface Props { auth: AuthData; authReadOnly: AuthReadOnlyData; - onInitValues: (values: AuthData) => void; + onInitValues: OnInitValuesFct; disabled?: boolean; } class SSOConfigContainer extends React.Component { constructor(props: Props) { super(props); - props.onInitValues(props.auth); + props.onInitValues({ auth: props.auth }); } public render() { diff --git a/src/core/client/admin/routes/Configure/sections/Auth/TargetFilterField.tsx b/src/core/client/admin/routes/Configure/sections/Auth/TargetFilterField.tsx index 21d5e9c37..37c98b25f 100644 --- a/src/core/client/admin/routes/Configure/sections/Auth/TargetFilterField.tsx +++ b/src/core/client/admin/routes/Configure/sections/Auth/TargetFilterField.tsx @@ -20,15 +20,9 @@ const TargetFilterField: FunctionComponent = ({ {label} - {({ input, meta }) => ( + {({ input }) => ( - + Coral Admin @@ -37,13 +31,7 @@ const TargetFilterField: FunctionComponent = ({ {({ input }) => ( - + Comment Stream diff --git a/src/core/client/admin/routes/Configure/sections/Email/EmailConfigContainer.tsx b/src/core/client/admin/routes/Configure/sections/Email/EmailConfigContainer.tsx index fb5f5c447..34d893348 100644 --- a/src/core/client/admin/routes/Configure/sections/Email/EmailConfigContainer.tsx +++ b/src/core/client/admin/routes/Configure/sections/Email/EmailConfigContainer.tsx @@ -10,7 +10,7 @@ import { DeepNullable, DeepPartial } from "coral-common/types"; import { pureMerge } from "coral-common/utils"; import { parseBool } from "coral-framework/lib/form"; import { withFragmentContainer } from "coral-framework/lib/relay"; -import { GQLEmailConfiguration } from "coral-framework/schema"; +import { GQLSettings } from "coral-framework/schema"; import { CheckBox, Flex, @@ -30,7 +30,7 @@ interface Props { email: EmailConfigContainer_email; } -export type FormProps = DeepNullable; +export type FormProps = DeepNullable>; export type OnInitValuesFct = (values: DeepPartial) => void; class EmailConfigContainer extends React.Component { @@ -38,15 +38,33 @@ class EmailConfigContainer extends React.Component { private initialValues: DeepPartial = {}; public componentDidMount() { - this.props.form.initialize({ email: this.initialValues }); + this.props.form.initialize(this.initialValues); } private handleOnInitValues: OnInitValuesFct = values => { - if (values.smtp && values.smtp.authentication === null) { - values = { ...values, smtp: { ...values.smtp, authentication: true } }; + if ( + values.email && + values.email.smtp && + values.email.smtp.authentication === null + ) { + values = { + email: { + ...values.email, + smtp: { ...values.email.smtp, authentication: true }, + }, + }; } - if (values.smtp && values.smtp.secure === null) { - values = { ...values, smtp: { ...values.smtp, secure: true } }; + if ( + values.email && + values.email.smtp && + values.email.smtp.secure === null + ) { + values = { + email: { + ...values.email, + smtp: { ...values.email.smtp, secure: true }, + }, + }; } this.initialValues = pureMerge>( @@ -74,13 +92,7 @@ class EmailConfigContainer extends React.Component {
- + Enabled diff --git a/src/core/client/admin/routes/Configure/sections/Email/From.tsx b/src/core/client/admin/routes/Configure/sections/Email/From.tsx index 60f4793b2..0f58e99b0 100644 --- a/src/core/client/admin/routes/Configure/sections/Email/From.tsx +++ b/src/core/client/admin/routes/Configure/sections/Email/From.tsx @@ -2,6 +2,7 @@ import { Localized } from "fluent-react/compat"; import React, { FunctionComponent } from "react"; import { Field } from "react-final-form"; +import { colorFromMeta, ValidationMessage } from "coral-framework/lib/form"; import { validateEmail } from "coral-framework/lib/validation"; import { FieldSet, @@ -10,7 +11,6 @@ import { InputDescription, InputLabel, TextField, - ValidationMessage, } from "coral-ui/components"; interface Props { @@ -31,12 +31,13 @@ const From: FunctionComponent = ({ disabled }) => ( {({ input, meta }) => ( <> - - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + + )} @@ -56,19 +57,11 @@ const From: FunctionComponent = ({ disabled }) => ( - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Email/FromContainer.tsx b/src/core/client/admin/routes/Configure/sections/Email/FromContainer.tsx index b39a51591..95ae2c688 100644 --- a/src/core/client/admin/routes/Configure/sections/Email/FromContainer.tsx +++ b/src/core/client/admin/routes/Configure/sections/Email/FromContainer.tsx @@ -16,7 +16,7 @@ interface Props { class FromContainer extends React.Component { constructor(props: Props) { super(props); - props.onInitValues(props.email); + props.onInitValues({ email: props.email }); } public render() { diff --git a/src/core/client/admin/routes/Configure/sections/Email/SMTP.tsx b/src/core/client/admin/routes/Configure/sections/Email/SMTP.tsx index 145729a00..36cb2445f 100644 --- a/src/core/client/admin/routes/Configure/sections/Email/SMTP.tsx +++ b/src/core/client/admin/routes/Configure/sections/Email/SMTP.tsx @@ -2,6 +2,12 @@ import { Localized } from "fluent-react/compat"; import React, { FunctionComponent } from "react"; import { Field } from "react-final-form"; +import { colorFromMeta, ValidationMessage } from "coral-framework/lib/form"; +import { + composeValidatorsWhen, + Condition, + required, +} from "coral-framework/lib/validation"; import { FieldSet, FormField, @@ -10,16 +16,22 @@ import { InputLabel, PasswordField, TextField, - ValidationMessage, } from "coral-ui/components"; import OnOffField from "../../OnOffField"; import Subheader from "../../Subheader"; +import { FormProps } from "./EmailConfigContainer"; interface Props { disabled: boolean; } +const isEnabled: Condition = (value, values) => + Boolean(values.email.enabled); + +const isAuthenticating: Condition = (value, values) => + Boolean(values.email.enabled && values.email.smtp.authentication); + const SMTP: FunctionComponent = ({ disabled }) => ( }> @@ -29,20 +41,20 @@ const SMTP: FunctionComponent = ({ disabled }) => ( (ex. smtp.sendgrid.com) - + {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -54,7 +66,10 @@ const SMTP: FunctionComponent = ({ disabled }) => ( (ex. 25) - + {({ input, meta }) => ( <> = ({ disabled }) => ( type="number" fullWidth disabled={disabled} + color={colorFromMeta(meta)} {...input} /> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -77,13 +89,21 @@ const SMTP: FunctionComponent = ({ disabled }) => ( TLS - + SMTP Authentication - + {({ input: { value: enabled } }) => ( @@ -95,20 +115,20 @@ const SMTP: FunctionComponent = ({ disabled }) => ( Username - + {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -117,25 +137,21 @@ const SMTP: FunctionComponent = ({ disabled }) => ( Password - + {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Email/SMTPContainer.tsx b/src/core/client/admin/routes/Configure/sections/Email/SMTPContainer.tsx index 034ef636d..8e5e87f28 100644 --- a/src/core/client/admin/routes/Configure/sections/Email/SMTPContainer.tsx +++ b/src/core/client/admin/routes/Configure/sections/Email/SMTPContainer.tsx @@ -16,7 +16,7 @@ interface Props { class SMTPContainer extends React.Component { constructor(props: Props) { super(props); - props.onInitValues(props.email); + props.onInitValues({ email: props.email }); } public render() { diff --git a/src/core/client/admin/routes/Configure/sections/General/ClosedStreamMessageConfig.tsx b/src/core/client/admin/routes/Configure/sections/General/ClosedStreamMessageConfig.tsx index 25fb8e8ee..3c965e5fd 100644 --- a/src/core/client/admin/routes/Configure/sections/General/ClosedStreamMessageConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/General/ClosedStreamMessageConfig.tsx @@ -3,14 +3,10 @@ import React, { FunctionComponent, Suspense } from "react"; import { Field } from "react-final-form"; import { MarkdownEditor } from "coral-framework/components/loadables"; -import { - HorizontalGutter, - Spinner, - Typography, - ValidationMessage, -} from "coral-ui/components"; +import { HorizontalGutter, Spinner, Typography } from "coral-ui/components"; import Header from "../../Header"; +import ValidationMessage from "../../ValidationMessage"; interface Props { disabled: boolean; @@ -41,16 +37,10 @@ const ClosedStreamMessageConfig: FunctionComponent = ({ disabled }) => ( }> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/General/ClosingCommentStreamsConfig.tsx b/src/core/client/admin/routes/Configure/sections/General/ClosingCommentStreamsConfig.tsx index 169cf50d1..97c907664 100644 --- a/src/core/client/admin/routes/Configure/sections/General/ClosingCommentStreamsConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/General/ClosingCommentStreamsConfig.tsx @@ -14,11 +14,11 @@ import { HorizontalGutter, InputLabel, Typography, - ValidationMessage, } from "coral-ui/components"; import Header from "../../Header"; import OnOffField from "../../OnOffField"; +import ValidationMessage from "../../ValidationMessage"; interface Props { disabled: boolean; @@ -66,16 +66,10 @@ const ClosingCommentStreamsConfig: FunctionComponent = ({ DURATION_UNIT.DAYS, DURATION_UNIT.WEEKS, ]} - name={input.name} - onChange={input.onChange} - value={input.value} disabled={disabled} + {...input} /> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/General/CommentEditingConfig.tsx b/src/core/client/admin/routes/Configure/sections/General/CommentEditingConfig.tsx index 9bc5f532c..46c40be7f 100644 --- a/src/core/client/admin/routes/Configure/sections/General/CommentEditingConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/General/CommentEditingConfig.tsx @@ -14,10 +14,10 @@ import { HorizontalGutter, InputLabel, Typography, - ValidationMessage, } from "coral-ui/components"; import Header from "../../Header"; +import ValidationMessage from "../../ValidationMessage"; interface Props { disabled: boolean; @@ -58,16 +58,10 @@ const CommentEditingConfig: FunctionComponent = ({ disabled }) => ( DURATION_UNIT.MINUTES, DURATION_UNIT.HOURS, ]} - name={input.name} - onChange={input.onChange} - value={input.value} disabled={disabled} + {...input} /> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/General/CommentLengthConfig.tsx b/src/core/client/admin/routes/Configure/sections/General/CommentLengthConfig.tsx index d336da914..6fd334902 100644 --- a/src/core/client/admin/routes/Configure/sections/General/CommentLengthConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/General/CommentLengthConfig.tsx @@ -14,13 +14,13 @@ import { InputLabel, TextField, Typography, - ValidationMessage, } from "coral-ui/components"; import Header from "../../Header"; import OnOffField from "../../OnOffField"; import { formatEmpty, parseEmptyAsNull } from "coral-framework/lib/form"; +import ValidationMessage from "../../ValidationMessage"; import styles from "./CommentLengthConfig.css"; const validateMaxLongerThanMin = createValidator( @@ -80,9 +80,7 @@ const CommentLengthConfig: FunctionComponent = ({ disabled }) => ( = ({ disabled }) => ( textAlignCenter /> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -130,9 +124,6 @@ const CommentLengthConfig: FunctionComponent = ({ disabled }) => ( = ({ disabled }) => ( } placeholder={"No limit"} textAlignCenter + {...input} /> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/General/GuidelinesConfig.tsx b/src/core/client/admin/routes/Configure/sections/General/GuidelinesConfig.tsx index 4f8a642c8..a3dc77c38 100644 --- a/src/core/client/admin/routes/Configure/sections/General/GuidelinesConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/General/GuidelinesConfig.tsx @@ -11,11 +11,11 @@ import { InputLabel, Spinner, Typography, - ValidationMessage, } from "coral-ui/components"; import Header from "../../Header"; import OnOffField from "../../OnOffField"; +import ValidationMessage from "../../ValidationMessage"; interface Props { disabled: boolean; @@ -62,16 +62,10 @@ const GuidelinesConfig: FunctionComponent = ({ disabled }) => ( }> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/General/SitewideCommentingConfig.tsx b/src/core/client/admin/routes/Configure/sections/General/SitewideCommentingConfig.tsx index 62f7fef56..cfb1a4c57 100644 --- a/src/core/client/admin/routes/Configure/sections/General/SitewideCommentingConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/General/SitewideCommentingConfig.tsx @@ -10,11 +10,11 @@ import { InputLabel, Spinner, Typography, - ValidationMessage, } from "coral-ui/components"; import Header from "../../Header"; import OnOffField from "../../OnOffField"; +import ValidationMessage from "../../ValidationMessage"; interface Props { disabled: boolean; @@ -75,16 +75,10 @@ const SitewideCommentingConfig: FunctionComponent = ({ disabled }) => ( }> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Moderation/APIKeyField.tsx b/src/core/client/admin/routes/Configure/sections/Moderation/APIKeyField.tsx index d3d986d75..c89e38f84 100644 --- a/src/core/client/admin/routes/Configure/sections/Moderation/APIKeyField.tsx +++ b/src/core/client/admin/routes/Configure/sections/Moderation/APIKeyField.tsx @@ -3,6 +3,7 @@ import { identity } from "lodash"; import React, { FunctionComponent } from "react"; import { Field } from "react-final-form"; +import { colorFromMeta } from "coral-framework/lib/form"; import { Validator } from "coral-framework/lib/validation"; import { FormField, InputLabel, PasswordField } from "coral-ui/components"; @@ -30,19 +31,15 @@ const APIKeyField: FunctionComponent = ({ - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Moderation/AkismetConfig.tsx b/src/core/client/admin/routes/Configure/sections/Moderation/AkismetConfig.tsx index 81f688321..f6d803c21 100644 --- a/src/core/client/admin/routes/Configure/sections/Moderation/AkismetConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/Moderation/AkismetConfig.tsx @@ -2,12 +2,12 @@ import { Localized } from "fluent-react/compat"; import React, { FunctionComponent } from "react"; import { Field } from "react-final-form"; +import { colorFromMeta } from "coral-framework/lib/form"; import { ExternalLink } from "coral-framework/lib/i18n/components"; import { - composeValidators, + Condition, required, - validateURL, - Validator, + validateWhen, } from "coral-framework/lib/validation"; import { FieldSet, @@ -28,16 +28,10 @@ interface Props { disabled: boolean; } +const isEnabled: Condition = (value, values) => + Boolean(values.integrations.akismet.enabled); + const AkismetConfig: FunctionComponent = ({ disabled }) => { - const validateWhenEnabled = (validator: Validator): Validator => ( - v, - values - ) => { - if (values.integrations.akismet.enabled) { - return validator(v, values); - } - return ""; - }; return ( }> @@ -79,7 +73,7 @@ const AkismetConfig: FunctionComponent = ({ disabled }) => { @@ -89,29 +83,22 @@ const AkismetConfig: FunctionComponent = ({ disabled }) => { {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Moderation/PerspectiveConfig.tsx b/src/core/client/admin/routes/Configure/sections/Moderation/PerspectiveConfig.tsx index c8f92cd88..40b630f2d 100644 --- a/src/core/client/admin/routes/Configure/sections/Moderation/PerspectiveConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/Moderation/PerspectiveConfig.tsx @@ -1,22 +1,20 @@ import { Localized } from "fluent-react/compat"; import React, { FunctionComponent } from "react"; - import { Field } from "react-final-form"; -import { formatPercentage, parsePercentage } from "coral-framework/lib/form"; - import { TOXICITY_ENDPOINT_DEFAULT, TOXICITY_MODEL_DEFAULT, TOXICITY_THRESHOLD_DEFAULT, } from "coral-common/constants"; +import { formatPercentage, parsePercentage } from "coral-framework/lib/form"; import { ExternalLink } from "coral-framework/lib/i18n/components"; import { - composeValidators, + Condition, required, validatePercentage, validateURL, - Validator, + validateWhen, } from "coral-framework/lib/validation"; import { FieldSet, @@ -41,16 +39,10 @@ interface Props { disabled: boolean; } +const isEnabled: Condition = (value, values) => + Boolean(values.integrations.perspective.enabled); + const PerspectiveConfig: FunctionComponent = ({ disabled }) => { - const validateWhenEnabled = (validator: Validator): Validator => ( - v, - values - ) => { - if (values.integrations.perspective.enabled) { - return validator(v, values); - } - return ""; - }; return ( }> @@ -106,9 +98,6 @@ const PerspectiveConfig: FunctionComponent = ({ disabled }) => { = ({ disabled }) => { adornment={%} placeholder={TOXICITY_THRESHOLD_DEFAULT.toString()} textAlignCenter + {...input} /> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -155,21 +141,15 @@ const PerspectiveConfig: FunctionComponent = ({ disabled }) => { <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} @@ -211,7 +191,7 @@ const PerspectiveConfig: FunctionComponent = ({ disabled }) => { @@ -228,29 +208,20 @@ const PerspectiveConfig: FunctionComponent = ({ disabled }) => { here - + {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Organization/OrganizationContactEmailConfig.tsx b/src/core/client/admin/routes/Configure/sections/Organization/OrganizationContactEmailConfig.tsx index 3d6f961a0..fc5058a6a 100644 --- a/src/core/client/admin/routes/Configure/sections/Organization/OrganizationContactEmailConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/Organization/OrganizationContactEmailConfig.tsx @@ -2,16 +2,20 @@ import { Localized } from "fluent-react/compat"; import React, { FunctionComponent } from "react"; import { Field } from "react-final-form"; -import { required } from "coral-framework/lib/validation"; +import { + composeValidators, + required, + validateEmail, +} from "coral-framework/lib/validation"; import { FormField, HorizontalGutter, TextField, Typography, - ValidationMessage, } from "coral-ui/components"; import Header from "../../Header"; +import ValidationMessage from "../../ValidationMessage"; interface Props { disabled: boolean; @@ -35,26 +39,23 @@ const OrganizationNameConfig: FunctionComponent = ({ disabled }) => ( > This E-Mail will be used - + {({ input, meta }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/Organization/OrganizationNameConfig.tsx b/src/core/client/admin/routes/Configure/sections/Organization/OrganizationNameConfig.tsx index d57c9be70..7c3f950e9 100644 --- a/src/core/client/admin/routes/Configure/sections/Organization/OrganizationNameConfig.tsx +++ b/src/core/client/admin/routes/Configure/sections/Organization/OrganizationNameConfig.tsx @@ -8,10 +8,10 @@ import { HorizontalGutter, TextField, Typography, - ValidationMessage, } from "coral-ui/components"; import Header from "../../Header"; +import ValidationMessage from "../../ValidationMessage"; interface Props { disabled: boolean; @@ -43,21 +43,15 @@ const OrganizationNameConfig: FunctionComponent = ({ disabled }) => ( <> - {meta.touched && (meta.error || meta.submitError) && ( - - {meta.error || meta.submitError} - - )} + )} diff --git a/src/core/client/admin/routes/Configure/sections/WordList/WordListTextArea.tsx b/src/core/client/admin/routes/Configure/sections/WordList/WordListTextArea.tsx index 40b67d7ab..753d68307 100644 --- a/src/core/client/admin/routes/Configure/sections/WordList/WordListTextArea.tsx +++ b/src/core/client/admin/routes/Configure/sections/WordList/WordListTextArea.tsx @@ -38,20 +38,14 @@ const WordListTextArea: FunctionComponent = ({