From 863b960229f74ee2006d6a304efa2b527235ed1b Mon Sep 17 00:00:00 2001 From: Madhuri Sandbhor Date: Thu, 25 Apr 2024 12:45:57 +0200 Subject: [PATCH 1/4] fix: use generic translation errors --- .../src/controllers/__tests__/release.test.ts | 4 +-- .../shared/validation-schemas.ts | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts b/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts index 366370335c7..fe6e8817d10 100644 --- a/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts +++ b/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts @@ -107,7 +107,7 @@ describe('Release controller', () => { }; // @ts-expect-error partial context - expect(() => releaseController.create(ctx)).rejects.toThrow('name is a required field'); + expect(() => releaseController.create(ctx)).rejects.toThrow('This field is required'); }); }); @@ -129,7 +129,7 @@ describe('Release controller', () => { }; // @ts-expect-error partial context - expect(() => releaseController.update(ctx)).rejects.toThrow('name is a required field'); + expect(() => releaseController.update(ctx)).rejects.toThrow('This field is required'); }); it('throws an error given unknown request arguments', () => { diff --git a/packages/core/content-releases/shared/validation-schemas.ts b/packages/core/content-releases/shared/validation-schemas.ts index 4a428dac1fb..f2b0f0ee07d 100644 --- a/packages/core/content-releases/shared/validation-schemas.ts +++ b/packages/core/content-releases/shared/validation-schemas.ts @@ -1,24 +1,43 @@ import * as yup from 'yup'; +import { translatedErrors } from '@strapi/admin/strapi-admin'; export const RELEASE_SCHEMA = yup .object() .shape({ - name: yup.string().trim().required(), + 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(), + 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().nullable(), + 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().nullable(), + then: yup + .string() + .required({ + id: translatedErrors.required.id, + defaultMessage: 'This field is required', + }) + .nullable(), otherwise: yup.string().nullable(), }), }) From d4a01fe866dfd9f90d75336fafc4e93abd456ac4 Mon Sep 17 00:00:00 2001 From: Fernando Chavez Date: Wed, 19 Jun 2024 19:32:30 +0200 Subject: [PATCH 2/4] fix(content-releases): validation errors message --- .../admin/src/components/ReleaseModal.tsx | 38 ++++++++++++++++--- .../src/validation/schemas.ts} | 0 .../src/controllers/__tests__/release.test.ts | 4 +- .../src/controllers/validation/release.ts | 2 +- .../src/controllers/validation/schemas.ts | 23 +++++++++++ .../src/controllers/validation/settings.ts | 2 +- 6 files changed, 59 insertions(+), 10 deletions(-) rename packages/core/content-releases/{shared/validation-schemas.ts => admin/src/validation/schemas.ts} (100%) create mode 100644 packages/core/content-releases/server/src/controllers/validation/schemas.ts diff --git a/packages/core/content-releases/admin/src/components/ReleaseModal.tsx b/packages/core/content-releases/admin/src/components/ReleaseModal.tsx index 970f4ce2c39..a925addc6af 100644 --- a/packages/core/content-releases/admin/src/components/ReleaseModal.tsx +++ b/packages/core/content-releases/admin/src/components/ReleaseModal.tsx @@ -17,10 +17,10 @@ import { import { formatISO } from 'date-fns'; import { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz'; import { Formik, Form, useFormikContext } from 'formik'; -import { useIntl } from 'react-intl'; +import { MessageDescriptor, useIntl } from 'react-intl'; import { useLocation } from 'react-router-dom'; -import { RELEASE_SCHEMA } from '../../../shared/validation-schemas'; +import { RELEASE_SCHEMA } from '../validation/schemas'; import { pluginId } from '../pluginId'; import { getTimezoneOffset } from '../utils/time'; @@ -111,7 +111,13 @@ export const ReleaseModal = ({
- + {formatMessage({ id: 'content-releases.modal.form.input.label.release-name', @@ -158,7 +164,15 @@ export const ReleaseModal = ({ <> - + {formatMessage({ id: 'content-releases.modal.form.input.label.date', @@ -186,7 +200,15 @@ export const ReleaseModal = ({ - + {formatMessage({ id: 'content-releases.modal.form.input.label.time', @@ -286,7 +308,11 @@ const TimezoneComponent = ({ timezoneOptions }: { timezoneOptions: ITimezoneOpti }, [setFieldValue, values.date, values.timezone]); return ( - + {formatMessage({ id: 'content-releases.modal.form.input.label.timezone', diff --git a/packages/core/content-releases/shared/validation-schemas.ts b/packages/core/content-releases/admin/src/validation/schemas.ts similarity index 100% rename from packages/core/content-releases/shared/validation-schemas.ts rename to packages/core/content-releases/admin/src/validation/schemas.ts diff --git a/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts b/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts index 5daedc3d0fa..980b0f3acc9 100644 --- a/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts +++ b/packages/core/content-releases/server/src/controllers/__tests__/release.test.ts @@ -72,7 +72,7 @@ describe('Release controller', () => { }; // @ts-expect-error partial context - expect(() => releaseController.create(ctx)).rejects.toThrow('This field is required'); + expect(() => releaseController.create(ctx)).rejects.toThrow('name is a required field'); }); }); @@ -94,7 +94,7 @@ describe('Release controller', () => { }; // @ts-expect-error partial context - expect(() => releaseController.update(ctx)).rejects.toThrow('This field is required'); + expect(() => releaseController.update(ctx)).rejects.toThrow('name is a required field'); }); it('throws an error given unknown request arguments', () => { 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..08fb1b7a89a 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,5 @@ import { yup, validateYupSchema } from '@strapi/utils'; -import { RELEASE_SCHEMA } from '../../../../shared/validation-schemas'; +import { RELEASE_SCHEMA } from '../validation/schemas'; const FIND_BY_DOCUMENT_ATTACHED_PARAMS_SCHEMA = yup .object() diff --git a/packages/core/content-releases/server/src/controllers/validation/schemas.ts b/packages/core/content-releases/server/src/controllers/validation/schemas.ts new file mode 100644 index 00000000000..d14ed96edec --- /dev/null +++ b/packages/core/content-releases/server/src/controllers/validation/schemas.ts @@ -0,0 +1,23 @@ +import * as yup from 'yup'; + +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(); + +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/settings.ts b/packages/core/content-releases/server/src/controllers/validation/settings.ts index 92ba878768c..39cfad485d1 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,4 @@ import { validateYupSchema } from '@strapi/utils'; -import { SETTINGS_SCHEMA } from '../../../../shared/validation-schemas'; +import { SETTINGS_SCHEMA } from '../validation/schemas'; export const validateSettings = validateYupSchema(SETTINGS_SCHEMA); From e324f96955471721e88beec284b9d1488cf9b7d8 Mon Sep 17 00:00:00 2001 From: Fernando Chavez Date: Wed, 3 Jul 2024 09:30:48 +0200 Subject: [PATCH 3/4] fix: lint errors --- .../admin/src/components/ReleaseModal.tsx | 2 +- .../admin/src/validation/schemas.ts | 2 +- .../src/controllers/validation/release.ts | 15 +++++++++++- .../src/controllers/validation/schemas.ts | 23 ------------------- .../src/controllers/validation/settings.ts | 10 +++++++- 5 files changed, 25 insertions(+), 27 deletions(-) delete mode 100644 packages/core/content-releases/server/src/controllers/validation/schemas.ts diff --git a/packages/core/content-releases/admin/src/components/ReleaseModal.tsx b/packages/core/content-releases/admin/src/components/ReleaseModal.tsx index a925addc6af..c29fc75cf7c 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 { MessageDescriptor, useIntl } from 'react-intl'; import { useLocation } from 'react-router-dom'; -import { RELEASE_SCHEMA } from '../validation/schemas'; import { pluginId } from '../pluginId'; import { getTimezoneOffset } from '../utils/time'; +import { RELEASE_SCHEMA } from '../validation/schemas'; export interface FormValues { name: string; diff --git a/packages/core/content-releases/admin/src/validation/schemas.ts b/packages/core/content-releases/admin/src/validation/schemas.ts index 0c53b423fc2..d93aadbdd1c 100644 --- a/packages/core/content-releases/admin/src/validation/schemas.ts +++ b/packages/core/content-releases/admin/src/validation/schemas.ts @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/admin/strapi-admin'; +import * as yup from 'yup'; export const RELEASE_SCHEMA = yup .object() 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 08fb1b7a89a..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 '../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/schemas.ts b/packages/core/content-releases/server/src/controllers/validation/schemas.ts deleted file mode 100644 index d14ed96edec..00000000000 --- a/packages/core/content-releases/server/src/controllers/validation/schemas.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as yup from 'yup'; - -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(); - -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/settings.ts b/packages/core/content-releases/server/src/controllers/validation/settings.ts index 39cfad485d1..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 '../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); From f10f1c56f03615dd01cecf4447a7a449e41173a9 Mon Sep 17 00:00:00 2001 From: Fernando Chavez Date: Wed, 3 Jul 2024 09:49:25 +0200 Subject: [PATCH 4/4] fix: build errors --- .../admin/src/components/ReleaseModal.tsx | 37 +++---------------- .../admin/src/pages/ReleasesSettingsPage.tsx | 2 +- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/packages/core/content-releases/admin/src/components/ReleaseModal.tsx b/packages/core/content-releases/admin/src/components/ReleaseModal.tsx index b01fcf0571f..a7b02499fb9 100644 --- a/packages/core/content-releases/admin/src/components/ReleaseModal.tsx +++ b/packages/core/content-releases/admin/src/components/ReleaseModal.tsx @@ -17,10 +17,11 @@ import { import { formatISO } from 'date-fns'; import { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz'; import { Formik, Form, useFormikContext } from 'formik'; -import { MessageDescriptor, useIntl } from 'react-intl'; +import { useIntl } from 'react-intl'; import { useLocation } from 'react-router-dom'; import { pluginId } from '../pluginId'; +import { getTimezones } from '../utils/time'; import { RELEASE_SCHEMA } from '../validation/schemas'; export interface FormValues { @@ -110,13 +111,7 @@ export const ReleaseModal = ({ - + {formatMessage({ id: 'content-releases.modal.form.input.label.release-name', @@ -163,15 +158,7 @@ export const ReleaseModal = ({ <> - + {formatMessage({ id: 'content-releases.modal.form.input.label.date', @@ -199,15 +186,7 @@ export const ReleaseModal = ({ - + {formatMessage({ id: 'content-releases.modal.form.input.label.time', @@ -290,11 +269,7 @@ const TimezoneComponent = ({ timezoneOptions }: { timezoneOptions: ITimezoneOpti }, [setFieldValue, values.date, values.timezone]); return ( - + {formatMessage({ id: 'content-releases.modal.form.input.label.timezone', 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';