diff --git a/.eslintrc.back.js b/.eslintrc.back.js index 1efb19cb0e..1c079b8326 100644 --- a/.eslintrc.back.js +++ b/.eslintrc.back.js @@ -26,14 +26,16 @@ module.exports = { }, ], 'prefer-destructuring': ['error', { AssignmentExpression: { array: false } }], - eqeqeq: 'warn', - 'no-underscore-dangle': 'warn', - 'no-use-before-define': 'warn', - 'no-param-reassign': 'warn', + 'no-underscore-dangle': 'off', + 'no-use-before-define': 'off', 'no-continue': 'warn', 'no-process-exit': 'off', - 'no-plusplus': 'warn', - 'no-loop-func': 'warn', - 'guard-for-in': 'warn', + 'no-loop-func': 'off', + 'no-param-reassign': [ + 'error', + { + props: false, + }, + ], }, }; diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.md b/.github/ISSUE_TEMPLATE/BUG_REPORT.md index 27383512e7..c885c0a3f3 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.md +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.md @@ -20,7 +20,7 @@ https://github.com/strapi/strapi/blob/main/CONTRIBUTING.md#reporting-an-issue ### Required System information - + - Node.js version: diff --git a/.github/actions/check-pr-status/package.json b/.github/actions/check-pr-status/package.json index 270d021325..4cac7955a7 100644 --- a/.github/actions/check-pr-status/package.json +++ b/.github/actions/check-pr-status/package.json @@ -1,6 +1,6 @@ { "name": "check-pr-status", - "version": "4.3.6", + "version": "4.3.8", "main": "dist/index.js", "license": "MIT", "private": true, diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 52b4693ccb..dea2b900e5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [14, 16] + node: [14, 16, 18] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 @@ -38,7 +38,7 @@ jobs: CODECOV_TOKEN: ${{ secrets.codecov }} strategy: matrix: - node: [14, 16] + node: [14, 16, 18] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 @@ -59,7 +59,7 @@ jobs: CODECOV_TOKEN: ${{ secrets.codecov }} strategy: matrix: - node: [14, 16] + node: [14, 16, 18] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 @@ -80,7 +80,7 @@ jobs: name: '[CE] E2E (postgres, node: ${{ matrix.node }})' strategy: matrix: - node: [14, 16] + node: [14, 16, 18] services: postgres: # Docker Hub image @@ -116,7 +116,7 @@ jobs: name: '[CE] E2E (mysql, node: ${{ matrix.node }})' strategy: matrix: - node: [14, 16] + node: [14, 16, 18] services: mysql: image: mysql @@ -151,7 +151,7 @@ jobs: name: '[CE] E2E (mysql:5 , node: ${{ matrix.node }})' strategy: matrix: - node: [14, 16] + node: [14, 16, 18] services: mysql: image: mysql:5 @@ -186,7 +186,7 @@ jobs: name: '[CE] E2E (sqlite: ${{ matrix.sqlite_pkg }}, node: ${{ matrix.node }})' strategy: matrix: - node: [14, 16] + node: [14, 16, 18] sqlite_pkg: ['better-sqlite3', 'sqlite3', '@vscode/sqlite3'] steps: - uses: actions/checkout@v2 @@ -210,7 +210,7 @@ jobs: STRAPI_LICENSE: ${{ secrets.strapiLicense }} strategy: matrix: - node: [14, 16] + node: [14, 16, 18] services: postgres: # Docker Hub image @@ -250,7 +250,7 @@ jobs: STRAPI_LICENSE: ${{ secrets.strapiLicense }} strategy: matrix: - node: [14, 16] + node: [14, 16, 18] services: mysql: image: mysql @@ -289,7 +289,7 @@ jobs: STRAPI_LICENSE: ${{ secrets.strapiLicense }} strategy: matrix: - node: [14, 16] + node: [14, 16, 18] sqlite_pkg: ['better-sqlite3', 'sqlite3', '@vscode/sqlite3'] steps: - uses: actions/checkout@v2 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4816948fde..b0384d5aaa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,7 +46,7 @@ The Strapi core team will review your pull request and either merge it, request ## Contribution Prerequisites -- You have [Node.js](https://nodejs.org/en/) at version >= v14 and <= v16 and [Yarn](https://yarnpkg.com/en/) at v1.2.0+ installed. +- You have [Node.js](https://nodejs.org/en/) at version >= v14 and <= v18 and [Yarn](https://yarnpkg.com/en/) at v1.2.0+ installed. - You are familiar with [Git](https://git-scm.com). **Before submitting your pull request** make sure the following requirements are fulfilled: diff --git a/README.md b/README.md index cd4316975b..8b9d5e6281 100644 --- a/README.md +++ b/README.md @@ -80,13 +80,13 @@ Complete installation requirements can be found in the documentation under = 14 <= 16 +- NodeJS >= 14 <= 18 - NPM >= 6.x **Database:** diff --git a/examples/getstarted/package.json b/examples/getstarted/package.json index 991c757f80..7eabe95497 100644 --- a/examples/getstarted/package.json +++ b/examples/getstarted/package.json @@ -1,7 +1,7 @@ { "name": "getstarted", "private": true, - "version": "4.3.6", + "version": "4.3.8", "description": "A Strapi application.", "scripts": { "develop": "strapi develop", @@ -12,15 +12,15 @@ "strapi": "strapi" }, "dependencies": { - "@strapi/plugin-documentation": "4.3.6", - "@strapi/plugin-graphql": "4.3.6", - "@strapi/plugin-i18n": "4.3.6", - "@strapi/plugin-sentry": "4.3.6", - "@strapi/plugin-users-permissions": "4.3.6", - "@strapi/provider-email-mailgun": "4.3.6", - "@strapi/provider-upload-aws-s3": "4.3.6", - "@strapi/provider-upload-cloudinary": "4.3.6", - "@strapi/strapi": "4.3.6", + "@strapi/plugin-documentation": "4.3.8", + "@strapi/plugin-graphql": "4.3.8", + "@strapi/plugin-i18n": "4.3.8", + "@strapi/plugin-sentry": "4.3.8", + "@strapi/plugin-users-permissions": "4.3.8", + "@strapi/provider-email-mailgun": "4.3.8", + "@strapi/provider-upload-aws-s3": "4.3.8", + "@strapi/provider-upload-cloudinary": "4.3.8", + "@strapi/strapi": "4.3.8", "@vscode/sqlite3": "5.0.8", "better-sqlite3": "7.4.6", "lodash": "4.17.21", @@ -33,7 +33,7 @@ "uuid": "getstarted" }, "engines": { - "node": ">=14.19.1 <=16.x.x", + "node": ">=14.19.1 <=18.x.x", "npm": ">=6.0.0" }, "license": "SEE LICENSE IN LICENSE" diff --git a/examples/getstarted/src/api/address/content-types/address/lifecycles.js b/examples/getstarted/src/api/address/content-types/address/lifecycles.js new file mode 100644 index 0000000000..0b8555b065 --- /dev/null +++ b/examples/getstarted/src/api/address/content-types/address/lifecycles.js @@ -0,0 +1,7 @@ +module.exports = { + beforeUpdate() { + const ctx = strapi.requestContext.get(); + + console.log('User info in service: ', ctx.state.user); + }, +}; diff --git a/examples/getstarted/src/api/address/routes/address.js b/examples/getstarted/src/api/address/routes/address.js index c9da1c88db..549918452d 100755 --- a/examples/getstarted/src/api/address/routes/address.js +++ b/examples/getstarted/src/api/address/routes/address.js @@ -5,7 +5,7 @@ const { createCoreRouter } = require('@strapi/strapi').factories; module.exports = createCoreRouter('api::address.address', { config: { find: { - auth: false, + // auth: false, }, }, only: ['find', 'findOne'], diff --git a/examples/kitchensink-ts/package.json b/examples/kitchensink-ts/package.json index 1c3233272b..31d8f455b4 100644 --- a/examples/kitchensink-ts/package.json +++ b/examples/kitchensink-ts/package.json @@ -1,7 +1,7 @@ { "name": "kitchensink-ts", "private": true, - "version": "4.3.6", + "version": "4.3.8", "description": "A Strapi application", "scripts": { "develop": "strapi develop", @@ -10,9 +10,9 @@ "strapi": "strapi" }, "dependencies": { - "@strapi/plugin-i18n": "4.3.6", - "@strapi/plugin-users-permissions": "4.3.6", - "@strapi/strapi": "4.3.6", + "@strapi/plugin-i18n": "4.3.8", + "@strapi/plugin-users-permissions": "4.3.8", + "@strapi/strapi": "4.3.8", "better-sqlite3": "7.4.6" }, "author": { @@ -22,7 +22,7 @@ "uuid": "getstarted" }, "engines": { - "node": ">=14.19.1 <=16.x.x", + "node": ">=14.19.1 <=18.x.x", "npm": ">=6.0.0" }, "license": "MIT" diff --git a/examples/kitchensink/package.json b/examples/kitchensink/package.json index 2a647dcfd4..ad526f7443 100644 --- a/examples/kitchensink/package.json +++ b/examples/kitchensink/package.json @@ -1,7 +1,7 @@ { "name": "kitchensink", "private": true, - "version": "4.3.6", + "version": "4.3.8", "description": "A Strapi application.", "scripts": { "develop": "strapi develop", @@ -12,10 +12,10 @@ "strapi": "strapi" }, "dependencies": { - "@strapi/provider-email-mailgun": "4.3.6", - "@strapi/provider-upload-aws-s3": "4.3.6", - "@strapi/provider-upload-cloudinary": "4.3.6", - "@strapi/strapi": "4.3.6", + "@strapi/provider-email-mailgun": "4.3.8", + "@strapi/provider-upload-aws-s3": "4.3.8", + "@strapi/provider-upload-cloudinary": "4.3.8", + "@strapi/strapi": "4.3.8", "lodash": "4.17.21", "mysql": "2.18.1", "passport-google-oauth2": "0.2.0", @@ -26,7 +26,7 @@ "uuid": "getstarted" }, "engines": { - "node": ">=14.19.1 <=16.x.x", + "node": ">=14.19.1 <=18.x.x", "npm": ">=6.0.0" }, "license": "SEE LICENSE IN LICENSE" diff --git a/lerna.json b/lerna.json index 4df6de58e1..2aa14d2555 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.3.6", + "version": "4.3.8", "packages": [ "packages/*", "examples/*" diff --git a/package.json b/package.json index 50cf473223..9df48d54c4 100644 --- a/package.json +++ b/package.json @@ -87,11 +87,11 @@ "husky": "3.1.0", "inquirer": "8.2.4", "istanbul": "~0.4.2", - "jest": "29.0.0", - "jest-circus": "29.0.0", - "jest-cli": "29.0.0", - "jest-environment-jsdom": "29.0.0", - "jest-watch-typeahead": "0.6.5", + "jest": "29.0.3", + "jest-circus": "29.0.3", + "jest-cli": "29.0.3", + "jest-environment-jsdom": "29.0.3", + "jest-watch-typeahead": "2.2.0", "lerna": "5.4.3", "lint-staged": "10.5.4", "lodash": "4.17.21", @@ -111,7 +111,7 @@ "yargs": "13.3.2" }, "engines": { - "node": ">=14.19.1 <=16.x.x", + "node": ">=14.19.1 <=18.x.x", "npm": ">=6.0.0" } } diff --git a/packages/admin-test-utils/package.json b/packages/admin-test-utils/package.json index 2f14ec8b85..f03a3ec53b 100644 --- a/packages/admin-test-utils/package.json +++ b/packages/admin-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/admin-test-utils", - "version": "4.3.6", + "version": "4.3.8", "private": true, "description": "Test utilities for the Strapi administration panel", "license": "MIT", @@ -33,6 +33,6 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": ">=14.19.1 <=16.x.x" + "node": ">=14.19.1 <=18.x.x" } } diff --git a/packages/cli/create-strapi-app/package.json b/packages/cli/create-strapi-app/package.json index e359b9afbe..7077de9c6c 100644 --- a/packages/cli/create-strapi-app/package.json +++ b/packages/cli/create-strapi-app/package.json @@ -1,6 +1,6 @@ { "name": "create-strapi-app", - "version": "4.3.6", + "version": "4.3.8", "description": "Generate a new Strapi application.", "keywords": [ "create-strapi-app", @@ -38,12 +38,12 @@ "test": "echo \"no tests yet\"" }, "dependencies": { - "@strapi/generate-new": "4.3.6", + "@strapi/generate-new": "4.3.8", "commander": "6.1.0", "inquirer": "8.2.4" }, "engines": { - "node": ">=14.19.1 <=16.x.x", + "node": ">=14.19.1 <=18.x.x", "npm": ">=6.0.0" } } diff --git a/packages/cli/create-strapi-starter/package.json b/packages/cli/create-strapi-starter/package.json index 3c55819456..c3e1e972d6 100644 --- a/packages/cli/create-strapi-starter/package.json +++ b/packages/cli/create-strapi-starter/package.json @@ -1,6 +1,6 @@ { "name": "create-strapi-starter", - "version": "4.3.6", + "version": "4.3.8", "description": "Generate a new Strapi application.", "keywords": [ "create-strapi-starter", @@ -38,7 +38,7 @@ "test": "echo \"no tests yet\"" }, "dependencies": { - "@strapi/generate-new": "4.3.6", + "@strapi/generate-new": "4.3.8", "chalk": "4.1.1", "ci-info": "3.3.2", "commander": "7.1.0", @@ -48,7 +48,7 @@ "ora": "5.4.1" }, "engines": { - "node": ">=14.19.1 <=16.x.x", + "node": ">=14.19.1 <=18.x.x", "npm": ">=6.0.0" } } diff --git a/packages/core/admin/admin/src/StrapiApp.js b/packages/core/admin/admin/src/StrapiApp.js index cca63eb768..ea82a02523 100644 --- a/packages/core/admin/admin/src/StrapiApp.js +++ b/packages/core/admin/admin/src/StrapiApp.js @@ -22,6 +22,7 @@ import { } from './exposedHooks'; import injectionZones from './injectionZones'; import favicon from './favicon.ico'; +import localStorageKey from './components/LanguageProvider/utils/localStorageKey'; class StrapiApp { constructor({ adminConfig, appPlugins, library, middlewares, reducers }) { @@ -457,6 +458,7 @@ class StrapiApp { href: this.configurations.head.favicon, }, ]} + htmlAttributes={{ lang: localStorage.getItem(localStorageKey) || 'en' }} /> diff --git a/packages/core/admin/admin/src/components/AuthenticatedApp/index.js b/packages/core/admin/admin/src/components/AuthenticatedApp/index.js index 64678d8fdc..4e0460af8c 100644 --- a/packages/core/admin/admin/src/components/AuthenticatedApp/index.js +++ b/packages/core/admin/admin/src/components/AuthenticatedApp/index.js @@ -65,11 +65,11 @@ const AuthenticatedApp = () => { if (userRoles) { const isUserSuperAdmin = userRoles.find(({ code }) => code === 'strapi-super-admin'); - if (isUserSuperAdmin) { + if (isUserSuperAdmin && appInfos?.autoReload) { setGuidedTourVisibilityRef.current(true); } } - }, [userRoles]); + }, [userRoles, appInfos]); // We don't need to wait for the release query to be fetched before rendering the plugins // however, we need the appInfos and the permissions diff --git a/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js b/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js index f06c609410..cbcafae5d7 100644 --- a/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js +++ b/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js @@ -132,6 +132,7 @@ describe('Admin | components | AuthenticatedApp', () => { .c3 { -webkit-animation: gzYjWD 1s infinite linear; animation: gzYjWD 1s infinite linear; + will-change: transform; } .c1 { @@ -177,8 +178,20 @@ describe('Admin | components | AuthenticatedApp', () => { await waitFor(() => expect(setGuidedTourVisibility).not.toHaveBeenCalled()); }); - it('should call setGuidedTourVisibility when user is super admin', async () => { + it('should not setGuidedTourVisibility when user is a super admin and autoReload is false ', async () => { fetchUserRoles.mockImplementationOnce(() => [{ code: 'strapi-super-admin' }]); + fetchAppInfo.mockImplementationOnce(() => ({ autoReload: false })); + const setGuidedTourVisibility = jest.fn(); + useGuidedTour.mockImplementation(() => ({ setGuidedTourVisibility })); + + render(); + + await waitFor(() => expect(setGuidedTourVisibility).not.toHaveBeenCalled()); + }); + + it('should call setGuidedTourVisibility when user is super admin and autoReload is true', async () => { + fetchUserRoles.mockImplementationOnce(() => [{ code: 'strapi-super-admin' }]); + fetchAppInfo.mockImplementationOnce(() => ({ autoReload: true })); const setGuidedTourVisibility = jest.fn(); useGuidedTour.mockImplementation(() => ({ setGuidedTourVisibility })); render(); diff --git a/packages/core/admin/admin/src/components/LanguageProvider/index.js b/packages/core/admin/admin/src/components/LanguageProvider/index.js index d94e792dc3..1825d57d0e 100644 --- a/packages/core/admin/admin/src/components/LanguageProvider/index.js +++ b/packages/core/admin/admin/src/components/LanguageProvider/index.js @@ -21,6 +21,7 @@ const LanguageProvider = ({ children, localeNames, messages }) => { useEffect(() => { // Set user language in local storage. window.localStorage.setItem(localStorageKey, locale); + document.documentElement.setAttribute('lang', locale); }, [locale]); const changeLocale = (locale) => { diff --git a/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js b/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js index b056ee090e..65482a77a0 100644 --- a/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js +++ b/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js @@ -4,7 +4,7 @@ * */ -import React, { useState } from 'react'; +import React, { useState, useMemo, useCallback } from 'react'; import PropTypes from 'prop-types'; import { ThemeToggleContext } from '../../contexts'; @@ -14,22 +14,33 @@ const getDefaultTheme = () => { const browserTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; const persistedTheme = localStorage.getItem(THEME_KEY); + if (!persistedTheme) { + localStorage.setItem(THEME_KEY, browserTheme); + } + return persistedTheme || browserTheme; }; const ThemeToggleProvider = ({ children, themes }) => { const [currentTheme, setCurrentTheme] = useState(getDefaultTheme()); - const handleChangeTheme = (nextTheme) => { - setCurrentTheme(nextTheme); - localStorage.setItem(THEME_KEY, nextTheme); - }; - - return ( - - {children} - + const handleChangeTheme = useCallback( + (nextTheme) => { + setCurrentTheme(nextTheme); + localStorage.setItem(THEME_KEY, nextTheme); + }, + [setCurrentTheme] ); + + const themeValues = useMemo(() => { + return { + currentTheme, + onChangeTheme: handleChangeTheme, + themes, + }; + }, [currentTheme, handleChangeTheme, themes]); + + return {children}; }; ThemeToggleProvider.propTypes = { diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js index 8636a937d8..c71cb4b9d3 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js @@ -47,7 +47,7 @@ const DynamicTable = ({ ...metadatas, label: formatMessage({ id: getTrad(`containers.ListPage.table-headers.${header.name}`), - defaultMessage: header.name, + defaultMessage: metadatas.label, }), }, name: sortFieldValue, @@ -60,7 +60,7 @@ const DynamicTable = ({ ...metadatas, label: formatMessage({ id: getTrad(`containers.ListPage.table-headers.${header.name}`), - defaultMessage: header.name, + defaultMessage: metadatas.label, }), }, }; diff --git a/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js b/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js index 182dc736a2..5806dc33cb 100644 --- a/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js +++ b/packages/core/admin/admin/src/content-manager/components/InputJSON/index.js @@ -79,6 +79,8 @@ class InputJSON extends React.Component { try { if (value === null) return this.codeMirror.setValue(''); + if (value === 0) return this.codeMirror.setValue('0'); + return this.codeMirror.setValue(value); } catch (err) { return this.setState({ error: true }); diff --git a/packages/core/admin/admin/src/content-manager/components/SelectMany/index.js b/packages/core/admin/admin/src/content-manager/components/SelectMany/index.js index a599f6161f..0b7088a9ce 100644 --- a/packages/core/admin/admin/src/content-manager/components/SelectMany/index.js +++ b/packages/core/admin/admin/src/content-manager/components/SelectMany/index.js @@ -121,7 +121,7 @@ SelectMany.propTypes = { displayNavigationLink: PropTypes.bool.isRequired, isDisabled: PropTypes.bool.isRequired, isLoading: PropTypes.bool.isRequired, - loadingMessage: PropTypes.string.isRequired, + loadingMessage: PropTypes.func.isRequired, mainField: PropTypes.shape({ name: PropTypes.string.isRequired, schema: PropTypes.shape({ diff --git a/packages/core/admin/admin/src/content-manager/components/SelectOne/index.js b/packages/core/admin/admin/src/content-manager/components/SelectOne/index.js index b5986e4697..ebc17ba87d 100644 --- a/packages/core/admin/admin/src/content-manager/components/SelectOne/index.js +++ b/packages/core/admin/admin/src/content-manager/components/SelectOne/index.js @@ -72,7 +72,7 @@ SelectOne.propTypes = { components: PropTypes.object, isDisabled: PropTypes.bool.isRequired, isLoading: PropTypes.bool.isRequired, - loadingMessage: PropTypes.string.isRequired, + loadingMessage: PropTypes.func.isRequired, mainField: PropTypes.shape({ name: PropTypes.string.isRequired, schema: PropTypes.shape({ diff --git a/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js index d364ab2129..4423695662 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js @@ -151,6 +151,7 @@ describe('Content manager | App | main', () => { .c35 { -webkit-animation: gzYjWD 1s infinite linear; animation: gzYjWD 1s infinite linear; + will-change: transform; } .c33 { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js index aab5569696..741cb9b9bd 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js @@ -125,7 +125,7 @@ describe('CONTENT MANAGER | EditView | Header', () => { border: 1px solid #4945ff; } - .c12 .sc-kBzgEd { + .c12 .sc-gJbFto { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; diff --git a/packages/core/admin/admin/src/pages/AuthPage/utils/forms.js b/packages/core/admin/admin/src/pages/AuthPage/utils/forms.js index 5349fc27cc..ec4239ee34 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/utils/forms.js +++ b/packages/core/admin/admin/src/pages/AuthPage/utils/forms.js @@ -52,7 +52,7 @@ const forms = { fieldsToDisable: ['email'], fieldsToOmit: ['userInfo.confirmPassword', 'userInfo.news', 'userInfo.email'], schema: yup.object().shape({ - firstname: yup.string().required(translatedErrors.required), + firstname: yup.string().trim().required(translatedErrors.required), lastname: yup.string(), password: yup .string() @@ -76,7 +76,7 @@ const forms = { fieldsToDisable: [], fieldsToOmit: ['confirmPassword', 'news'], schema: yup.object().shape({ - firstname: yup.string().required(translatedErrors.required), + firstname: yup.string().trim().required(translatedErrors.required), lastname: yup.string(), password: yup .string() diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js index 7481467ace..ff08add494 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js @@ -417,7 +417,7 @@ describe('SettingsPage || components || SettingsNav', () => {
renders and matches the snapshot 1`] = ` border: 1px solid #4945ff; } -.c13 .sc-kBzgEd { +.c13 .sc-gJbFto { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -172,7 +172,7 @@ exports[` renders and matches the snapshot 1`] = ` background: #f0f0ff; } -.c25 .sc-kBzgEd { +.c25 .sc-gJbFto { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -293,6 +293,7 @@ exports[` renders and matches the snapshot 1`] = ` .c46 { -webkit-animation: gzYjWD 1s infinite linear; animation: gzYjWD 1s infinite linear; + will-change: transform; } .c10 { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js index 9ae27dd2c5..adf046691b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js @@ -2,7 +2,7 @@ import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; const schema = yup.object().shape({ - firstname: yup.string().required(translatedErrors.required), + firstname: yup.string().trim().required(translatedErrors.required), lastname: yup.string(), email: yup.string().email(translatedErrors.email).required(translatedErrors.required), roles: yup.array().min(1, translatedErrors.required).required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/__snapshots__/index.test.js.snap b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/__snapshots__/index.test.js.snap index cfa97e4698..55cc3330b5 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/__snapshots__/index.test.js.snap +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/__snapshots__/index.test.js.snap @@ -466,7 +466,7 @@ exports[`DynamicTable renders and matches the snapshot 1`] = `