diff --git a/packages/core/content-releases/admin/src/components/ReleaseModal.tsx b/packages/core/content-releases/admin/src/components/ReleaseModal.tsx index 32fcd1c91e4..a7b02499fb9 100644 --- a/packages/core/content-releases/admin/src/components/ReleaseModal.tsx +++ b/packages/core/content-releases/admin/src/components/ReleaseModal.tsx @@ -20,9 +20,9 @@ import { Formik, Form, useFormikContext } from 'formik'; import { useIntl } from 'react-intl'; import { useLocation } from 'react-router-dom'; -import { RELEASE_SCHEMA } from '../../../shared/validation-schemas'; import { pluginId } from '../pluginId'; import { getTimezones } from '../utils/time'; +import { RELEASE_SCHEMA } from '../validation/schemas'; export interface FormValues { name: string; diff --git a/packages/core/content-releases/admin/src/pages/ReleasesSettingsPage.tsx b/packages/core/content-releases/admin/src/pages/ReleasesSettingsPage.tsx index 8b36ac27305..0f124642c05 100644 --- a/packages/core/content-releases/admin/src/pages/ReleasesSettingsPage.tsx +++ b/packages/core/content-releases/admin/src/pages/ReleasesSettingsPage.tsx @@ -20,10 +20,10 @@ import { import { Check } from '@strapi/icons'; import { useIntl } from 'react-intl'; -import { SETTINGS_SCHEMA } from '../../../shared/validation-schemas'; import { useTypedSelector } from '../modules/hooks'; import { useGetReleaseSettingsQuery, useUpdateReleaseSettingsMutation } from '../services/release'; import { getTimezones } from '../utils/time'; +import { SETTINGS_SCHEMA } from '../validation/schemas'; import type { UpdateSettings } from '../../../shared/contracts/settings'; diff --git a/packages/core/content-releases/admin/src/validation/schemas.ts b/packages/core/content-releases/admin/src/validation/schemas.ts new file mode 100644 index 00000000000..d93aadbdd1c --- /dev/null +++ b/packages/core/content-releases/admin/src/validation/schemas.ts @@ -0,0 +1,53 @@ +import { translatedErrors } from '@strapi/admin/strapi-admin'; +import * as yup from 'yup'; + +export const RELEASE_SCHEMA = yup + .object() + .shape({ + name: yup.string().trim().required({ + id: translatedErrors.required.id, + defaultMessage: 'This field is required', + }), + scheduledAt: yup.string().nullable(), + isScheduled: yup.boolean().optional(), + time: yup.string().when('isScheduled', { + is: true, + then: yup.string().trim().required({ + id: translatedErrors.required.id, + defaultMessage: 'This field is required', + }), + otherwise: yup.string().nullable(), + }), + timezone: yup.string().when('isScheduled', { + is: true, + then: yup + .string() + .required({ + id: translatedErrors.required.id, + defaultMessage: 'This field is required', + }) + .nullable(), + otherwise: yup.string().nullable(), + }), + date: yup.string().when('isScheduled', { + is: true, + then: yup + .string() + .required({ + id: translatedErrors.required.id, + defaultMessage: 'This field is required', + }) + .nullable(), + otherwise: yup.string().nullable(), + }), + }) + .required() + .noUnknown(); + +export const SETTINGS_SCHEMA = yup + .object() + .shape({ + defaultTimezone: yup.string().nullable().default(null), + }) + .required() + .noUnknown(); diff --git a/packages/core/content-releases/server/src/controllers/validation/release.ts b/packages/core/content-releases/server/src/controllers/validation/release.ts index ee384ffe478..a71af219713 100644 --- a/packages/core/content-releases/server/src/controllers/validation/release.ts +++ b/packages/core/content-releases/server/src/controllers/validation/release.ts @@ -1,5 +1,18 @@ import { yup, validateYupSchema } from '@strapi/utils'; -import { RELEASE_SCHEMA } from '../../../../shared/validation-schemas'; + +export const RELEASE_SCHEMA = yup + .object() + .shape({ + name: yup.string().trim().required(), + scheduledAt: yup.string().nullable(), + timezone: yup.string().when('scheduledAt', { + is: (value: any) => value !== null && value !== undefined, + then: yup.string().required(), + otherwise: yup.string().nullable(), + }), + }) + .required() + .noUnknown(); const FIND_BY_DOCUMENT_ATTACHED_PARAMS_SCHEMA = yup .object() diff --git a/packages/core/content-releases/server/src/controllers/validation/settings.ts b/packages/core/content-releases/server/src/controllers/validation/settings.ts index 92ba878768c..40d01f4c726 100644 --- a/packages/core/content-releases/server/src/controllers/validation/settings.ts +++ b/packages/core/content-releases/server/src/controllers/validation/settings.ts @@ -1,4 +1,12 @@ import { validateYupSchema } from '@strapi/utils'; -import { SETTINGS_SCHEMA } from '../../../../shared/validation-schemas'; +import * as yup from 'yup'; + +export const SETTINGS_SCHEMA = yup + .object() + .shape({ + defaultTimezone: yup.string().nullable().default(null), + }) + .required() + .noUnknown(); export const validateSettings = validateYupSchema(SETTINGS_SCHEMA); diff --git a/packages/core/content-releases/shared/validation-schemas.ts b/packages/core/content-releases/shared/validation-schemas.ts deleted file mode 100644 index 9e7e269397a..00000000000 --- a/packages/core/content-releases/shared/validation-schemas.ts +++ /dev/null @@ -1,34 +0,0 @@ -import * as yup from 'yup'; - -export const RELEASE_SCHEMA = yup - .object() - .shape({ - name: yup.string().trim().required(), - scheduledAt: yup.string().nullable(), - isScheduled: yup.boolean().optional(), - time: yup.string().when('isScheduled', { - is: true, - then: yup.string().trim().required(), - otherwise: yup.string().nullable(), - }), - timezone: yup.string().when('isScheduled', { - is: true, - then: yup.string().required().nullable(), - otherwise: yup.string().nullable(), - }), - date: yup.string().when('isScheduled', { - is: true, - then: yup.string().required().nullable(), - otherwise: yup.string().nullable(), - }), - }) - .required() - .noUnknown(); - -export const SETTINGS_SCHEMA = yup - .object() - .shape({ - defaultTimezone: yup.string().nullable().default(null), - }) - .required() - .noUnknown();