mirror of
https://github.com/strapi/strapi.git
synced 2025-10-17 02:53:22 +00:00
Merge branch 'main' into feature/custom-field-default-options
This commit is contained in:
commit
efb2f1920b
2
.github/actions/check-pr-status/package.json
vendored
2
.github/actions/check-pr-status/package.json
vendored
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "check-pr-status",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"main": "dist/index.js",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "getstarted",
|
||||
"private": true,
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "A Strapi application.",
|
||||
"scripts": {
|
||||
"develop": "strapi develop",
|
||||
@ -12,16 +12,16 @@
|
||||
"strapi": "strapi"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/plugin-color-picker": "4.4.3",
|
||||
"@strapi/plugin-documentation": "4.4.3",
|
||||
"@strapi/plugin-graphql": "4.4.3",
|
||||
"@strapi/plugin-i18n": "4.4.3",
|
||||
"@strapi/plugin-sentry": "4.4.3",
|
||||
"@strapi/plugin-users-permissions": "4.4.3",
|
||||
"@strapi/provider-email-mailgun": "4.4.3",
|
||||
"@strapi/provider-upload-aws-s3": "4.4.3",
|
||||
"@strapi/provider-upload-cloudinary": "4.4.3",
|
||||
"@strapi/strapi": "4.4.3",
|
||||
"@strapi/plugin-color-picker": "4.4.5",
|
||||
"@strapi/plugin-documentation": "4.4.5",
|
||||
"@strapi/plugin-graphql": "4.4.5",
|
||||
"@strapi/plugin-i18n": "4.4.5",
|
||||
"@strapi/plugin-sentry": "4.4.5",
|
||||
"@strapi/plugin-users-permissions": "4.4.5",
|
||||
"@strapi/provider-email-mailgun": "4.4.5",
|
||||
"@strapi/provider-upload-aws-s3": "4.4.5",
|
||||
"@strapi/provider-upload-cloudinary": "4.4.5",
|
||||
"@strapi/strapi": "4.4.5",
|
||||
"@vscode/sqlite3": "5.0.8",
|
||||
"better-sqlite3": "7.4.6",
|
||||
"lodash": "4.17.21",
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "kitchensink-ts",
|
||||
"private": true,
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "A Strapi application",
|
||||
"scripts": {
|
||||
"develop": "strapi develop",
|
||||
@ -10,9 +10,9 @@
|
||||
"strapi": "strapi"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/plugin-i18n": "4.4.3",
|
||||
"@strapi/plugin-users-permissions": "4.4.3",
|
||||
"@strapi/strapi": "4.4.3",
|
||||
"@strapi/plugin-i18n": "4.4.5",
|
||||
"@strapi/plugin-users-permissions": "4.4.5",
|
||||
"@strapi/strapi": "4.4.5",
|
||||
"better-sqlite3": "7.4.6"
|
||||
},
|
||||
"author": {
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "kitchensink",
|
||||
"private": true,
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "A Strapi application.",
|
||||
"scripts": {
|
||||
"develop": "strapi develop",
|
||||
@ -12,10 +12,10 @@
|
||||
"strapi": "strapi"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/provider-email-mailgun": "4.4.3",
|
||||
"@strapi/provider-upload-aws-s3": "4.4.3",
|
||||
"@strapi/provider-upload-cloudinary": "4.4.3",
|
||||
"@strapi/strapi": "4.4.3",
|
||||
"@strapi/provider-email-mailgun": "4.4.5",
|
||||
"@strapi/provider-upload-aws-s3": "4.4.5",
|
||||
"@strapi/provider-upload-cloudinary": "4.4.5",
|
||||
"@strapi/strapi": "4.4.5",
|
||||
"lodash": "4.17.21",
|
||||
"mysql": "2.18.1",
|
||||
"passport-google-oauth2": "0.2.0",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"packages": [
|
||||
"packages/*",
|
||||
"examples/*"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/admin-test-utils",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"private": true,
|
||||
"description": "Test utilities for the Strapi administration panel",
|
||||
"license": "MIT",
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"name": "create-strapi-app",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Generate a new Strapi application.",
|
||||
"dependencies": {
|
||||
"@strapi/generate-new": "4.4.3",
|
||||
"@strapi/generate-new": "4.4.5",
|
||||
"commander": "6.1.0",
|
||||
"inquirer": "8.2.4"
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-strapi-starter",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Generate a new Strapi application.",
|
||||
"keywords": [
|
||||
"create-strapi-starter",
|
||||
@ -38,7 +38,7 @@
|
||||
"test": "echo \"no tests yet\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/generate-new": "4.4.3",
|
||||
"@strapi/generate-new": "4.4.5",
|
||||
"chalk": "4.1.1",
|
||||
"ci-info": "3.3.2",
|
||||
"commander": "7.1.0",
|
||||
|
@ -32,7 +32,7 @@ const CellValue = ({ type, value }) => {
|
||||
formattedValue = formatNumber(value, {
|
||||
// Should be kept in sync with the corresponding value
|
||||
// in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53
|
||||
maximumFractionDigits: 21,
|
||||
maximumFractionDigits: 20,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ import appReducers from './reducers';
|
||||
window.strapi = {
|
||||
backendURL: process.env.STRAPI_ADMIN_BACKEND_URL,
|
||||
isEE: false,
|
||||
telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED ?? false,
|
||||
features: {
|
||||
SSO: 'sso',
|
||||
},
|
||||
|
@ -2,8 +2,12 @@ import React from 'react';
|
||||
import { render, screen, fireEvent } from '@testing-library/react';
|
||||
import { IntlProvider } from 'react-intl';
|
||||
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
||||
import { library } from '@fortawesome/fontawesome-svg-core';
|
||||
import { faFile, faBook } from '@fortawesome/free-solid-svg-icons';
|
||||
import Onboarding from '../index';
|
||||
|
||||
library.add(faFile, faBook);
|
||||
|
||||
jest.mock('../../../../hooks', () => ({
|
||||
useConfigurations: jest.fn(() => {
|
||||
return { showTutorials: true };
|
||||
|
@ -111,7 +111,7 @@ const FormApiTokenContainer = ({
|
||||
id: 'Settings.apiTokens.form.duration',
|
||||
defaultMessage: 'Token duration',
|
||||
})}
|
||||
value={values.lifespan}
|
||||
value={values.lifespan !== null ? values.lifespan : '0'}
|
||||
error={
|
||||
errors.lifespan
|
||||
? formatMessage(
|
||||
@ -146,7 +146,7 @@ const FormApiTokenContainer = ({
|
||||
defaultMessage: '90 days',
|
||||
})}
|
||||
</Option>
|
||||
<Option value={null}>
|
||||
<Option value="0">
|
||||
{formatMessage({
|
||||
id: 'Settings.apiTokens.duration.unlimited',
|
||||
defaultMessage: 'Unlimited',
|
||||
@ -234,7 +234,7 @@ FormApiTokenContainer.propTypes = {
|
||||
}).isRequired,
|
||||
isCreating: PropTypes.bool.isRequired,
|
||||
apiToken: PropTypes.shape({
|
||||
id: PropTypes.string,
|
||||
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||
type: PropTypes.string,
|
||||
lifespan: PropTypes.number,
|
||||
name: PropTypes.string,
|
||||
@ -242,13 +242,14 @@ FormApiTokenContainer.propTypes = {
|
||||
permissions: PropTypes.array,
|
||||
description: PropTypes.string,
|
||||
createdAt: PropTypes.string,
|
||||
}).isRequired,
|
||||
}),
|
||||
onDispatch: PropTypes.func.isRequired,
|
||||
setHasChangedPermissions: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
FormApiTokenContainer.defaultProps = {
|
||||
errors: {},
|
||||
apiToken: {},
|
||||
};
|
||||
|
||||
export default FormApiTokenContainer;
|
||||
|
@ -19,7 +19,7 @@ const FormBody = ({
|
||||
return (
|
||||
<ContentLayout>
|
||||
<Stack spacing={6}>
|
||||
{Boolean(apiToken?.name) && <HeaderContentBox apiToken={apiToken.accessKey} />}
|
||||
{Boolean(apiToken?.name) && <HeaderContentBox apiToken={apiToken?.accessKey} />}
|
||||
<FormApiTokenContainer
|
||||
errors={errors}
|
||||
onChange={onChange}
|
||||
@ -48,7 +48,7 @@ FormBody.propTypes = {
|
||||
type: PropTypes.string,
|
||||
}),
|
||||
apiToken: PropTypes.shape({
|
||||
id: PropTypes.string,
|
||||
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||
type: PropTypes.string,
|
||||
lifespan: PropTypes.number,
|
||||
name: PropTypes.string,
|
||||
@ -56,7 +56,7 @@ FormBody.propTypes = {
|
||||
permissions: PropTypes.array,
|
||||
description: PropTypes.string,
|
||||
createdAt: PropTypes.string,
|
||||
}).isRequired,
|
||||
}),
|
||||
onChange: PropTypes.func.isRequired,
|
||||
canEditInputs: PropTypes.bool.isRequired,
|
||||
isCreating: PropTypes.bool.isRequired,
|
||||
@ -72,6 +72,7 @@ FormBody.propTypes = {
|
||||
|
||||
FormBody.defaultProps = {
|
||||
errors: {},
|
||||
apiToken: {},
|
||||
};
|
||||
|
||||
export default FormBody;
|
||||
|
@ -67,7 +67,7 @@ const FormHead = ({ apiToken, setApiToken, canEditInputs, canRegenerate, isSubmi
|
||||
|
||||
FormHead.propTypes = {
|
||||
apiToken: PropTypes.shape({
|
||||
id: PropTypes.string,
|
||||
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||
type: PropTypes.string,
|
||||
lifespan: PropTypes.number,
|
||||
name: PropTypes.string,
|
||||
@ -75,11 +75,15 @@ FormHead.propTypes = {
|
||||
permissions: PropTypes.array,
|
||||
description: PropTypes.string,
|
||||
createdAt: PropTypes.string,
|
||||
}).isRequired,
|
||||
}),
|
||||
canEditInputs: PropTypes.bool.isRequired,
|
||||
canRegenerate: PropTypes.bool.isRequired,
|
||||
setApiToken: PropTypes.func.isRequired,
|
||||
isSubmitting: PropTypes.bool.isRequired,
|
||||
};
|
||||
|
||||
FormHead.defaultProps = {
|
||||
apiToken: undefined,
|
||||
};
|
||||
|
||||
export default FormHead;
|
||||
|
@ -62,7 +62,7 @@ Regenerate.defaultProps = { onRegenerate() {} };
|
||||
|
||||
Regenerate.propTypes = {
|
||||
onRegenerate: PropTypes.func,
|
||||
idToRegenerate: PropTypes.string.isRequired,
|
||||
idToRegenerate: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
|
||||
};
|
||||
|
||||
export default Regenerate;
|
||||
|
@ -152,6 +152,10 @@ const ApiTokenCreateView = () => {
|
||||
const handleSubmit = async (body, actions) => {
|
||||
trackUsageRef.current(isCreating ? 'willCreateToken' : 'willEditToken');
|
||||
lockApp();
|
||||
const lifespanVal =
|
||||
body.lifespan && parseInt(body.lifespan, 10) && body.lifespan !== '0'
|
||||
? parseInt(body.lifespan, 10)
|
||||
: null;
|
||||
|
||||
try {
|
||||
const {
|
||||
@ -159,10 +163,7 @@ const ApiTokenCreateView = () => {
|
||||
} = isCreating
|
||||
? await axiosInstance.post(`/admin/api-tokens`, {
|
||||
...body,
|
||||
lifespan:
|
||||
body.lifespan && parseInt(body.lifespan, 10)
|
||||
? parseInt(body.lifespan, 10)
|
||||
: body.lifespan,
|
||||
lifespan: lifespanVal,
|
||||
permissions: body.type === 'custom' ? state.selectedActions : null,
|
||||
})
|
||||
: await axiosInstance.put(`/admin/api-tokens/${id}`, {
|
||||
|
@ -8,7 +8,7 @@ const schema = yup.object().shape({
|
||||
.oneOf(['read-only', 'full-access', 'custom'])
|
||||
.required(translatedErrors.required),
|
||||
description: yup.string().nullable(),
|
||||
lifespan: yup.number().integer().min(1).nullable().defined(translatedErrors.required),
|
||||
lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),
|
||||
});
|
||||
|
||||
export default schema;
|
||||
|
@ -114,7 +114,7 @@ const EventInput = ({ isDraftAndPublish }) => {
|
||||
if (header === 'app.utils.publish' || header === 'app.utils.unpublish') {
|
||||
return (
|
||||
<td
|
||||
key={header}
|
||||
key={header.id}
|
||||
title={formatMessage({
|
||||
id: 'Settings.webhooks.event.publish-tooltip',
|
||||
defaultMessage:
|
||||
@ -129,7 +129,7 @@ const EventInput = ({ isDraftAndPublish }) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<td key={header}>
|
||||
<td key={header.id}>
|
||||
<Typography variant="sigma" textColor="neutral600">
|
||||
{formatMessage(header)}
|
||||
</Typography>
|
||||
|
@ -39,6 +39,9 @@ describe('Create Webhook', () => {
|
||||
isTriggerIdle={false}
|
||||
isDraftAndPublishEvents={false}
|
||||
triggerWebhook={triggerWebhook}
|
||||
data={{
|
||||
name: '',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
@ -59,6 +62,9 @@ describe('Create Webhook', () => {
|
||||
isTriggerIdle={false}
|
||||
isDraftAndPublishEvents={false}
|
||||
triggerWebhook={triggerWebhook}
|
||||
data={{
|
||||
name: '',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
|
@ -13,45 +13,7 @@ describe('ADMIN | StrapiApp', () => {
|
||||
const app = StrapiApp({ middlewares, reducers, library });
|
||||
const { container } = render(app.render());
|
||||
|
||||
expect(container.firstChild).toMatchInlineSnapshot(`
|
||||
.c0 {
|
||||
margin-left: -250px;
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 2.875rem;
|
||||
z-index: 10;
|
||||
width: 31.25rem;
|
||||
}
|
||||
|
||||
.c1 {
|
||||
-webkit-align-items: stretch;
|
||||
-webkit-box-align: stretch;
|
||||
-ms-flex-align: stretch;
|
||||
align-items: stretch;
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.c2 > * {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.c2 > * + * {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
<div
|
||||
class="c0 c1 c2"
|
||||
spacing="2"
|
||||
width="31.25rem"
|
||||
/>
|
||||
`);
|
||||
expect(container.firstChild).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('should create a valid store', () => {
|
||||
@ -495,7 +457,33 @@ describe('ADMIN | StrapiApp', () => {
|
||||
expect(app.configurations.head.favicon).toBe('fr');
|
||||
});
|
||||
|
||||
it('should override the theme', () => {
|
||||
it('should override the light theme', () => {
|
||||
const adminConfig = {
|
||||
config: { theme: { light: { colors: { red: 'black' } } } },
|
||||
};
|
||||
const app = StrapiApp({ middlewares, reducers, library, adminConfig });
|
||||
|
||||
app.createCustomConfigurations();
|
||||
|
||||
expect(app.configurations.themes.light.colors.red).toBe('black');
|
||||
});
|
||||
|
||||
it('should override the dark theme', () => {
|
||||
const adminConfig = {
|
||||
config: { theme: { dark: { colors: { red: 'black' } } } },
|
||||
};
|
||||
const app = StrapiApp({ middlewares, reducers, library, adminConfig });
|
||||
|
||||
app.createCustomConfigurations();
|
||||
|
||||
expect(app.configurations.themes.dark.colors.red).toBe('black');
|
||||
});
|
||||
|
||||
it('should override the light theme with a legacy syntax (without light or dark keys) and log a warning', () => {
|
||||
const origalConsoleWarning = console.warn;
|
||||
|
||||
console.warn = jest.fn();
|
||||
|
||||
const adminConfig = {
|
||||
config: { theme: { colors: { red: 'black' } } },
|
||||
};
|
||||
@ -504,6 +492,9 @@ describe('ADMIN | StrapiApp', () => {
|
||||
app.createCustomConfigurations();
|
||||
|
||||
expect(app.configurations.themes.light.colors.red).toBe('black');
|
||||
expect(console.warn).toBeCalledTimes(1);
|
||||
|
||||
console.warn = origalConsoleWarning;
|
||||
});
|
||||
|
||||
it('should override the tutorials', () => {
|
||||
|
@ -0,0 +1,41 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ADMIN | StrapiApp should render the app without plugins 1`] = `
|
||||
.c0 {
|
||||
margin-left: -250px;
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 2.875rem;
|
||||
z-index: 10;
|
||||
width: 31.25rem;
|
||||
}
|
||||
|
||||
.c1 {
|
||||
-webkit-align-items: stretch;
|
||||
-webkit-box-align: stretch;
|
||||
-ms-flex-align: stretch;
|
||||
align-items: stretch;
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.c2 > * {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.c2 > * + * {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
<div
|
||||
class="c0 c1 c2"
|
||||
spacing="2"
|
||||
width="31.25rem"
|
||||
/>
|
||||
`;
|
@ -25,6 +25,7 @@ const getClientEnvironment = (options) => {
|
||||
ADMIN_PATH: options.adminPath,
|
||||
NODE_ENV: options.env || 'development',
|
||||
STRAPI_ADMIN_BACKEND_URL: options.backend,
|
||||
STRAPI_TELEMETRY_DISABLED: options.telemetryDisabled,
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/admin",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Strapi Admin",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -51,13 +51,13 @@
|
||||
"@fortawesome/free-solid-svg-icons": "^5.15.3",
|
||||
"@fortawesome/react-fontawesome": "^0.2.0",
|
||||
"@pmmmwh/react-refresh-webpack-plugin": "0.5.7",
|
||||
"@strapi/babel-plugin-switch-ee-ce": "4.4.3",
|
||||
"@strapi/babel-plugin-switch-ee-ce": "4.4.5",
|
||||
"@strapi/design-system": "1.2.5",
|
||||
"@strapi/helper-plugin": "4.4.3",
|
||||
"@strapi/helper-plugin": "4.4.5",
|
||||
"@strapi/icons": "1.2.5",
|
||||
"@strapi/permissions": "4.4.3",
|
||||
"@strapi/typescript-utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/permissions": "4.4.5",
|
||||
"@strapi/typescript-utils": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"axios": "0.27.2",
|
||||
"babel-loader": "8.2.5",
|
||||
"babel-plugin-styled-components": "2.0.2",
|
||||
@ -164,4 +164,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,17 @@ const buildAdmin = async () => {
|
||||
options: {
|
||||
backend: 'http://localhost:1337',
|
||||
adminPath: '/admin/',
|
||||
|
||||
/**
|
||||
* Ideally this would take more scenarios into account, such
|
||||
* as the `telemetryDisabled` property in the package.json
|
||||
* of the users project. For builds based on an app we are
|
||||
* passing this information throgh, but here we do not have access
|
||||
* to the app's package.json. By using at least an environment variable
|
||||
* we can make sure developers can actually test this functionality.
|
||||
*/
|
||||
|
||||
telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true' ?? false,
|
||||
},
|
||||
tsConfigFilePath,
|
||||
};
|
||||
|
@ -20,6 +20,18 @@ module.exports = () => {
|
||||
const options = {
|
||||
backend: 'http://localhost:1337',
|
||||
adminPath: '/admin/',
|
||||
|
||||
/**
|
||||
* Ideally this would take more scenarios into account, such
|
||||
* as the `telemetryDisabled` property in the package.json
|
||||
* of the users project. For builds based on an app we are
|
||||
* passing this information throgh, but here we do not have access
|
||||
* to the app's package.json. By using at least an environment variable
|
||||
* we can make sure developers can actually test this functionality in
|
||||
* dev-mode.
|
||||
*/
|
||||
|
||||
telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',
|
||||
};
|
||||
const pluginsPath = getPluginsPath();
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-content-manager",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "A powerful UI to easily manage your data.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -24,7 +24,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@sindresorhus/slugify": "1.1.0",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"lodash": "4.17.21"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -0,0 +1,197 @@
|
||||
{
|
||||
"ComponentIconPicker.search.placeholder": "Sök för en ikon",
|
||||
"attribute.boolean": "Booleskt värde",
|
||||
"attribute.boolean.description": "Ja eller nej, 1 eller 0, sant eller falskt",
|
||||
"attribute.component": "Komponent",
|
||||
"attribute.component.description": "Grupp av fält du kan återanvända och repetera",
|
||||
"attribute.customField": "Anpassat fält",
|
||||
"attribute.date": "Datum",
|
||||
"attribute.date.description": "En datumväljare med sekunder, minuter och timmar",
|
||||
"attribute.datetime": "Datum och tid",
|
||||
"attribute.dynamiczone": "Dynamisk zon",
|
||||
"attribute.dynamiczone.description": "Dynamiskt välj mellan förutbestämda komponenter när du skapar innehåll",
|
||||
"attribute.email": "E-post",
|
||||
"attribute.email.description": "E-postadressfält med validering",
|
||||
"attribute.enumeration": "Enumeration",
|
||||
"attribute.enumeration.description": "Förutbestämda värden som man kan välja mellan",
|
||||
"attribute.json": "JSON",
|
||||
"attribute.json.description": "Data i JSON-format",
|
||||
"attribute.media": "Media",
|
||||
"attribute.media.description": "Filer såsom bilder, videos, m.m",
|
||||
"attribute.null": " ",
|
||||
"attribute.number": "Nummer",
|
||||
"attribute.number.description": "Nummer (heltal och decimaltal)",
|
||||
"attribute.password": "Lösenord",
|
||||
"attribute.password.description": "Lösenordsfält med kryptering",
|
||||
"attribute.relation": "Relation",
|
||||
"attribute.relation.description": "Refererar till en samlingstyp",
|
||||
"attribute.richtext": "Formaterad text",
|
||||
"attribute.richtext.description": "En textredigerare med formatalternativ",
|
||||
"attribute.text": "Text",
|
||||
"attribute.text.description": "Kort och lång text såsom titel eller beskrivning",
|
||||
"attribute.time": "Tid",
|
||||
"attribute.timestamp": "Tidstämpel",
|
||||
"attribute.uid": "UID",
|
||||
"attribute.uid.description": "Unik identifierare",
|
||||
"button.attributes.add.another": "Lägg till nytt fält",
|
||||
"button.component.add": "Lägg till en komponent",
|
||||
"button.component.create": "Skapa komponent",
|
||||
"button.model.create": "Skapa samlingstyp",
|
||||
"button.single-types.create": "Skapa engångstyp",
|
||||
"component.repeatable": "(repeterbar)",
|
||||
"components.SelectComponents.displayed-value": "{number, plural, =0 {# komponenter} one {# komponent} other {# komponenter}} valda",
|
||||
"components.componentSelect.no-component-available": "Du har redan lagt till alla dina komponenter",
|
||||
"components.componentSelect.no-component-available.with-search": "Det finns inga komponenter matchande sökningen",
|
||||
"components.componentSelect.value-component": "{number} komponenter valda (skriv för att söka efter en komponent)",
|
||||
"components.componentSelect.value-components": "{number} komponenter valda",
|
||||
"configurations": "Konfigurationer",
|
||||
"contentType.apiId-plural.description": "Pluraliserat API-ID",
|
||||
"contentType.apiId-plural.label": "API ID (Plural)",
|
||||
"contentType.apiId-singular.description": "UID:t används för att generera API-rutterna och databastabellerna",
|
||||
"contentType.apiId-singular.label": "API ID (Singular)",
|
||||
"contentType.collectionName.description": "Användbart när namnet på din innehållstyp och din tabell är olika",
|
||||
"contentType.collectionName.label": "Samlingsnamn",
|
||||
"contentType.displayName.label": "Visningsnamn",
|
||||
"contentType.draftAndPublish.description": "Skapa ett utkast av varje inlägg innan det publiceras",
|
||||
"contentType.draftAndPublish.label": "Utkast/publiceringssystem",
|
||||
"contentType.kind.change.warning": "Du ändrade typen på en innehållstyp: API:n kommer återskapas (rutter, kontroller, och tjänster kommer bli överskrivna).",
|
||||
"error.attributeName.reserved-name": "Namnet kan inte användas för att det kan påverka annan funktionalitet",
|
||||
"error.contentType.pluralName-used": "Värdet kan inte vara samma som namnet i singular",
|
||||
"error.contentType.singularName-used": "Värdet kan inte vara samma som det pluraliserade namnet",
|
||||
"error.contentTypeName.reserved-name": "Namnet kan inte användas i ditt projekt för att det kan påverka annan funktionalitet",
|
||||
"error.validation.enum-duplicate": "Dubblettvärden är inte tillåtna (endast alfanumeriska tecken kontrolleras).",
|
||||
"error.validation.enum-empty-string": "Tomma strängar är inte tillåtna",
|
||||
"error.validation.enum-regex": "Minst ett värde är ogiltigt. Värden ska ha minst ett alfabetiskt tecken före det första talet.",
|
||||
"error.validation.minSupMax": "Can't be superior",
|
||||
"error.validation.positive": "Måste vara ett positivt tal",
|
||||
"error.validation.regex": "Regex-mönstret är ogiltigt",
|
||||
"error.validation.relation.targetAttribute-taken": "Detta namn existerar i målet",
|
||||
"form.attribute.component.option.add": "Lägg till en komponent",
|
||||
"form.attribute.component.option.create": "Skapa en komponent",
|
||||
"form.attribute.component.option.create.description": "En komponent delas mellan innehållstyper och komponenter, och är tillgänglig överallt.",
|
||||
"form.attribute.component.option.repeatable": "Repeterbar komponent",
|
||||
"form.attribute.component.option.repeatable.description": "Bäst för flera t.ex ingredienser, metataggar m.m. (listor)",
|
||||
"form.attribute.component.option.reuse-existing": "Använd en befintlig komponent",
|
||||
"form.attribute.component.option.reuse-existing.description": "Återanvänd en komponent som redan har skapats för att hålla datastrukturen samma över flera innehållstyper.",
|
||||
"form.attribute.component.option.single": "Engångskomponent",
|
||||
"form.attribute.component.option.single.description": "Bäst för att gruppera fält som adress, huvudinnehåll, etc...",
|
||||
"form.attribute.item.customColumnName": "Anpassade kolumnnamn",
|
||||
"form.attribute.item.customColumnName.description": "Kan användas för att anpassa hur datan ser ut i API-svar",
|
||||
"form.attribute.item.date.type.date": "datum (t.ex: 01/01/{currentYear})",
|
||||
"form.attribute.item.date.type.datetime": "datum och tid (t.ex: 01/01/{currentYear} 00:00)",
|
||||
"form.attribute.item.date.type.time": "tid (t.ex: 00:00)",
|
||||
"form.attribute.item.defineRelation.fieldName": "Fältnamn",
|
||||
"form.attribute.item.enumeration.graphql": "Namnändring för GraphQL",
|
||||
"form.attribute.item.enumeration.graphql.description": "Låter dig ändra det genererade namnet i GraphQL",
|
||||
"form.attribute.item.enumeration.placeholder": "Ex:\nmorgon\nmiddag\nkväll",
|
||||
"form.attribute.item.enumeration.rules": "Värden (ett värde per rad)",
|
||||
"form.attribute.item.maximum": "Största värde",
|
||||
"form.attribute.item.maximumLength": "Längsta längd",
|
||||
"form.attribute.item.minimum": "Minsta värde",
|
||||
"form.attribute.item.minimumLength": "Kortaste längd",
|
||||
"form.attribute.item.number.type": "Nummerformat",
|
||||
"form.attribute.item.number.type.biginteger": "stort heltal (t.ex: 123456789)",
|
||||
"form.attribute.item.number.type.decimal": "decimaltal (t.ex: 2.22)",
|
||||
"form.attribute.item.number.type.float": "flyttal (t.ex: 3.33333333)",
|
||||
"form.attribute.item.number.type.integer": "heltal (t.ex: 10)",
|
||||
"form.attribute.item.privateField": "Privat fält",
|
||||
"form.attribute.item.privateField.description": "Detta fält kommer inte att visas i API-svar",
|
||||
"form.attribute.item.requiredField": "Obligatoriskt fält",
|
||||
"form.attribute.item.requiredField.description": "Du kommer inte kunna skapa posten om detta fältet är tomt",
|
||||
"form.attribute.item.text.regex": "RegEx-mönster",
|
||||
"form.attribute.item.text.regex.description": "Texten för RegEx-mönstret",
|
||||
"form.attribute.item.uniqueField": "Unikt fält",
|
||||
"form.attribute.item.uniqueField.description": "Du kommer inte kunna skapa posten om det redan finns en annan post med samma värde",
|
||||
"form.attribute.media.allowed-types": "Välj tillåtna typer av medier",
|
||||
"form.attribute.media.allowed-types.option-files": "Filer",
|
||||
"form.attribute.media.allowed-types.option-images": "Bilder",
|
||||
"form.attribute.media.allowed-types.option-videos": "Videos",
|
||||
"form.attribute.media.option.multiple": "Flera medier",
|
||||
"form.attribute.media.option.multiple.description": "Tillåter flera medier att väljas i samma fält, passar bra för t.ex bildgallerier",
|
||||
"form.attribute.media.option.single": "En media",
|
||||
"form.attribute.media.option.single.description": "Bäst för profilbilder eller andra bilder som bara förekommer en gång per post",
|
||||
"form.attribute.settings.default": "Standardvärde",
|
||||
"form.attribute.text.option.long-text": "Lång text",
|
||||
"form.attribute.text.option.long-text.description": "Bäst för beskrivningar eller andra längre texter. Fulltextsökning är inaktiverat.",
|
||||
"form.attribute.text.option.short-text": "Kort text",
|
||||
"form.attribute.text.option.short-text.description": "Bäst för titlar, namn, länkar (URL:er). Aktiverar fulltextsökning sökning för fältet.",
|
||||
"form.button.add-components-to-dynamiczone": "Lägg till komponenter till dynamiska zonen",
|
||||
"form.button.add-field": "Lägg till nytt fält",
|
||||
"form.button.add-first-field-to-created-component": "Lägg till första fältet i komponenten",
|
||||
"form.button.add.field.to.collectionType": "Lägg till ett nytt fält i samlingstypen",
|
||||
"form.button.add.field.to.component": "Lägg till ett nytt fält i komponenten",
|
||||
"form.button.add.field.to.contentType": "Lägg till ett nytt fält i innehållstypen",
|
||||
"form.button.add.field.to.singleType": "Lägg till ett nytt fält i engångstypen",
|
||||
"form.button.cancel": "Avbryt",
|
||||
"form.button.collection-type.description": "Bäst för flera poster såsom artiklar, produkter och kommentarer.",
|
||||
"form.button.collection-type.name": "Samlingstyper",
|
||||
"form.button.configure-component": "Konfigurera komponenten",
|
||||
"form.button.configure-view": "Konfigurera visningen",
|
||||
"form.button.select-component": "Välj en komponent",
|
||||
"form.button.single-type.description": "Bäst för poster som bara förekommer en gång såsom startsida, om oss, m.m.",
|
||||
"form.button.single-type.name": "Engångstyper",
|
||||
"form.contentType.divider.draft-publish": "Utkast/Publicera",
|
||||
"from": "från",
|
||||
"listView.headerLayout.description": "Skapa datastrukturen för ditt innehåll",
|
||||
"menu.section.components.name": "Komponenter",
|
||||
"menu.section.models.name": "Samlingstyper",
|
||||
"menu.section.single-types.name": "Engångstyper",
|
||||
"modalForm.attribute.form.base.name.description": "Mellanslag tillåts inte i namnet på attributet",
|
||||
"modalForm.attribute.form.base.name.placeholder": "t.ex Titel, Slug, Canonical URL",
|
||||
"modalForm.attribute.target-field": "Kopplat fält",
|
||||
"modalForm.attributes.select-component": "Välj komponent",
|
||||
"modalForm.attributes.select-components": "Välj komponenter",
|
||||
"modalForm.collectionType.header-create": "Skapa samlingstyp",
|
||||
"modalForm.component.header-create": "Skapa komponent",
|
||||
"modalForm.components.create-component.category.label": "Välj kategori eller ange namn på ny kategori",
|
||||
"modalForm.components.icon.label": "Ikon",
|
||||
"modalForm.empty.button": "Lägg till anpassade fält",
|
||||
"modalForm.empty.heading": "Inget här ännu.",
|
||||
"modalForm.empty.sub-heading": "Hitta det du letar efter genom ett brett utbud av tillägg.",
|
||||
"modalForm.editCategory.base.name.description": "Inget mellanslag får finnas i namnet på kategorin",
|
||||
"modalForm.header-edit": "Redigera {name}",
|
||||
"modalForm.header.categories": "Kategorier",
|
||||
"modalForm.singleType.header-create": "Skapa engångstyp",
|
||||
"modalForm.sub-header.addComponentToDynamicZone": "Lägg till ny komponent till dynamisk zon",
|
||||
"modalForm.sub-header.attribute.create": "Lägg till {type}-fält",
|
||||
"modalForm.sub-header.attribute.create.step": "Lägg till ny komponent ({step}/2)",
|
||||
"modalForm.sub-header.attribute.edit": "Redigera {name}",
|
||||
"modalForm.sub-header.chooseAttribute.collectionType": "Välj ett fält för samlingstypen",
|
||||
"modalForm.sub-header.chooseAttribute.component": "Välj ett fält för komponenten",
|
||||
"modalForm.sub-header.chooseAttribute.singleType": "Välj ett fält för engångstypen",
|
||||
"modalForm.custom-fields.advanced.settings.extended": "Utökade inställningar",
|
||||
"modalForm.tabs.custom": "Anpassat",
|
||||
"modalForm.tabs.custom.howToLink": "Hur du lägger till anpassade fält",
|
||||
"modalForm.tabs.default": "Standard",
|
||||
"modalForm.tabs.label": "Standard/anpassade-flikar",
|
||||
"modelPage.attribute.relation-polymorphic": "Relation (polymorfisk)",
|
||||
"modelPage.attribute.relationWith": "Relation med",
|
||||
"notification.error.dynamiczone-min.validation": "Minst en komponent måste vara vald för en dynamisk zon för att kunna spara innehållstypen",
|
||||
"notification.info.autoreaload-disable": "autoReload-funktionen krävs för att använda detta plugin. Starta servern med `strapi develop`",
|
||||
"notification.info.creating.notSaved": "Spara ditt arbete innan du skapar en ny samlingstyp eller komponent",
|
||||
"plugin.description.long": "Modellera datastrukturen för ditt API. Skapa nya fält och relationer på bara en minut. Filerna skapas och uppdateras automatiskt i ditt projekt.",
|
||||
"plugin.description.short": "Modellera datastrukturen för ditt API.",
|
||||
"plugin.name": "Innehållstyps-skapare",
|
||||
"popUpForm.navContainer.advanced": "Avancerade inställningar",
|
||||
"popUpForm.navContainer.base": "Grundläggande inställningar",
|
||||
"popUpWarning.bodyMessage.cancel-modifications": "Är du säker på att du vill avbryta dina ändringar?",
|
||||
"popUpWarning.bodyMessage.cancel-modifications.with-components": "Är du säker på att du vill avbryta dina ändringar? Vissa komponenter har skapats eller modifierats...",
|
||||
"popUpWarning.bodyMessage.category.delete": "Är du säker på att du vill ta bort den här kategorin? Alla komponenter i den kommer också att raderas.",
|
||||
"popUpWarning.bodyMessage.component.delete": "Är du säker på att du vill ta bort den här komponenten?",
|
||||
"popUpWarning.bodyMessage.contentType.delete": "Är du säker på att du vill ta bort den här samlingstypen?",
|
||||
"popUpWarning.draft-publish.button.confirm": "Ja, inaktiverar",
|
||||
"popUpWarning.draft-publish.message": "Om du inaktiverar Utkast/Publicera-systemet kommer dina utkast att raderas.",
|
||||
"popUpWarning.draft-publish.second-message": "Är du säker på att du vill inaktivera det?",
|
||||
"prompt.unsaved": "Är du säker på att du vill lämna? Dina ändringar kommer att försvinna.",
|
||||
"relation.attributeName.placeholder": "Ex: författare, kategori, tagg",
|
||||
"relation.manyToMany": "har och tillhör många",
|
||||
"relation.manyToOne": "har många",
|
||||
"relation.manyWay": "har många",
|
||||
"relation.oneToMany": "tillhör många",
|
||||
"relation.oneToOne": "har och tillhör en",
|
||||
"relation.oneWay": "har en",
|
||||
"table.button.no-fields": "Lägg till nytt fält",
|
||||
"table.content.create-first-content-type": "Skapa din första samlingstyp",
|
||||
"table.content.no-fields.collection-type": "Lägg till ett första fält till samlingstypen",
|
||||
"table.content.no-fields.component": "Lägg till ett första fält i komponenten"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-content-type-builder",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Strapi plugin to create content type",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -28,9 +28,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@sindresorhus/slugify": "1.1.0",
|
||||
"@strapi/generators": "4.4.3",
|
||||
"@strapi/helper-plugin": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/generators": "4.4.5",
|
||||
"@strapi/helper-plugin": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"fs-extra": "10.0.0",
|
||||
"lodash": "4.17.21",
|
||||
"pluralize": "^8.0.0",
|
||||
|
@ -83,7 +83,13 @@ const processPopulate = (populate, ctx) => {
|
||||
continue;
|
||||
}
|
||||
|
||||
// make sure id is present for future populate queries
|
||||
// Make sure to query the join column value if needed,
|
||||
// so that we can apply the populate later on
|
||||
if (attribute.joinColumn) {
|
||||
qb.addSelect(attribute.joinColumn.name);
|
||||
}
|
||||
|
||||
// Make sure id is present for future populate queries
|
||||
if (_.has('id', meta.attributes)) {
|
||||
qb.addSelect('id');
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/database",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Strapi's database layer",
|
||||
"homepage": "https://strapi.io",
|
||||
"bugs": {
|
||||
|
@ -62,7 +62,7 @@ const Configuration = ({ config }) => {
|
||||
})}
|
||||
placeholder={formatMessage({
|
||||
id: getTrad('Settings.email.plugin.placeholder.defaultFrom'),
|
||||
defaultMessage: `ex: Strapi No-Reply \<no-reply@strapi.io\>`,
|
||||
defaultMessage: "ex: Strapi No-Reply '<'no-reply@strapi.io'>'",
|
||||
})}
|
||||
disabled
|
||||
onChange={() => {}}
|
||||
@ -78,7 +78,7 @@ const Configuration = ({ config }) => {
|
||||
})}
|
||||
placeholder={formatMessage({
|
||||
id: getTrad('Settings.email.plugin.placeholder.defaultReplyTo'),
|
||||
defaultMessage: `ex: Strapi \<example@strapi.io\>`,
|
||||
defaultMessage: `ex: Strapi '<'example@strapi.io'>'`,
|
||||
})}
|
||||
disabled
|
||||
onChange={() => {}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-email",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Easily configure your Strapi application to send emails.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -26,12 +26,12 @@
|
||||
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/provider-email-sendmail": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/provider-email-sendmail": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"lodash": "4.17.21"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@strapi/helper-plugin": "4.4.3",
|
||||
"@strapi/helper-plugin": "4.4.5",
|
||||
"@testing-library/react": "12.1.4"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -0,0 +1,3 @@
|
||||
const useAppInfosMock = jest.fn().mockReturnValue({});
|
||||
|
||||
export default useAppInfosMock;
|
@ -9,14 +9,14 @@ const useTracking = () => {
|
||||
const appInfo = useAppInfos();
|
||||
|
||||
trackRef.current = async (event, properties) => {
|
||||
if (uuid) {
|
||||
if (uuid && !window.strapi.telemetryDisabled) {
|
||||
try {
|
||||
await axios.post('https://analytics.strapi.io/track', {
|
||||
event,
|
||||
properties: {
|
||||
...telemetryProperties,
|
||||
...properties,
|
||||
projectType: strapi.projectType,
|
||||
projectType: window.strapi.projectType,
|
||||
environment: appInfo.currentEnvironment,
|
||||
},
|
||||
uuid,
|
||||
|
@ -0,0 +1,96 @@
|
||||
import React from 'react';
|
||||
import { renderHook, act } from '@testing-library/react-hooks';
|
||||
import axios from 'axios';
|
||||
|
||||
import TrackingContext from '../../../contexts/TrackingContext';
|
||||
import useTracking from '..';
|
||||
import useAppInfos from '../../useAppInfos';
|
||||
|
||||
jest.mock('../../useAppInfos');
|
||||
|
||||
jest.mock('axios', () => ({
|
||||
...jest.requireActual('axios'),
|
||||
post: jest.fn(),
|
||||
}));
|
||||
|
||||
function setup(props) {
|
||||
return new Promise((resolve) => {
|
||||
act(() => {
|
||||
resolve(
|
||||
renderHook(() => useTracking(), {
|
||||
wrapper: ({ children }) => (
|
||||
<TrackingContext.Provider
|
||||
value={{
|
||||
uuid: 1,
|
||||
telemetryProperties: {
|
||||
nestedProperty: true,
|
||||
},
|
||||
...props,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</TrackingContext.Provider>
|
||||
),
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
describe('useTracking', () => {
|
||||
afterEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
test('Call trackUsage() with all attributes', async () => {
|
||||
useAppInfos.mockReturnValue({
|
||||
currentEnvironment: 'testing',
|
||||
});
|
||||
|
||||
const { result } = await setup();
|
||||
|
||||
result.current.trackUsage('event', { trackingProperty: true });
|
||||
|
||||
expect(axios.post).toBeCalledWith(expect.any(String), {
|
||||
event: 'event',
|
||||
uuid: 1,
|
||||
properties: expect.objectContaining({
|
||||
environment: 'testing',
|
||||
nestedProperty: true,
|
||||
trackingProperty: true,
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
test('Do not track if it has been disabled', async () => {
|
||||
window.strapi.telemetryDisabled = true;
|
||||
|
||||
const { result } = await setup();
|
||||
|
||||
result.current.trackUsage();
|
||||
|
||||
expect(axios.post).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Do not track if no uuid was set', async () => {
|
||||
window.strapi.telemetryDisabled = true;
|
||||
|
||||
const { result } = await setup({
|
||||
uuid: null,
|
||||
});
|
||||
|
||||
result.current.trackUsage();
|
||||
|
||||
expect(axios.post).not.toBeCalled();
|
||||
|
||||
window.strapi.telemetryDisabled = false;
|
||||
});
|
||||
|
||||
test('Should fail gracefully if the request does not work', async () => {
|
||||
axios.post = jest.fn().mockRejectedValueOnce({});
|
||||
|
||||
const { result } = await setup();
|
||||
|
||||
expect(result.current.trackUsage).not.toThrow();
|
||||
});
|
||||
});
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/helper-plugin",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Helper for Strapi plugins development",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -44,7 +44,6 @@
|
||||
"@fortawesome/free-brands-svg-icons": "^5.15.2",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.15.3",
|
||||
"@fortawesome/react-fontawesome": "^0.2.0",
|
||||
"@strapi/design-system": "1.2.5",
|
||||
"axios": "0.27.2",
|
||||
"date-fns": "2.29.2",
|
||||
"formik": "^2.2.6",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/permissions",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Strapi's permission layer.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -25,7 +25,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@casl/ability": "5.4.4",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"lodash": "4.17.21",
|
||||
"sift": "16.0.0"
|
||||
},
|
||||
|
@ -44,6 +44,7 @@ module.exports = async ({ buildDestDir, forceBuild = true, optimization, srcDir
|
||||
options: {
|
||||
backend: serverUrl,
|
||||
adminPath: addSlash(adminPath),
|
||||
telemetryIsDisabled: strapiInstance.telemetry.isDisabled,
|
||||
},
|
||||
})
|
||||
.then(() => {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/strapi",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite",
|
||||
"keywords": [
|
||||
"strapi",
|
||||
@ -78,20 +78,20 @@
|
||||
"test:unit": "jest --verbose"
|
||||
},
|
||||
"dependencies": {
|
||||
"@koa/cors": "3.4.2",
|
||||
"@koa/cors": "3.4.3",
|
||||
"@koa/router": "10.1.1",
|
||||
"@strapi/admin": "4.4.3",
|
||||
"@strapi/database": "4.4.3",
|
||||
"@strapi/generate-new": "4.4.3",
|
||||
"@strapi/generators": "4.4.3",
|
||||
"@strapi/logger": "4.4.3",
|
||||
"@strapi/permissions": "4.4.3",
|
||||
"@strapi/plugin-content-manager": "4.4.3",
|
||||
"@strapi/plugin-content-type-builder": "4.4.3",
|
||||
"@strapi/plugin-email": "4.4.3",
|
||||
"@strapi/plugin-upload": "4.4.3",
|
||||
"@strapi/typescript-utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/admin": "4.4.5",
|
||||
"@strapi/database": "4.4.5",
|
||||
"@strapi/generate-new": "4.4.5",
|
||||
"@strapi/generators": "4.4.5",
|
||||
"@strapi/logger": "4.4.5",
|
||||
"@strapi/permissions": "4.4.5",
|
||||
"@strapi/plugin-content-manager": "4.4.5",
|
||||
"@strapi/plugin-content-type-builder": "4.4.5",
|
||||
"@strapi/plugin-email": "4.4.5",
|
||||
"@strapi/plugin-upload": "4.4.5",
|
||||
"@strapi/typescript-utils": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"bcryptjs": "2.4.3",
|
||||
"boxen": "5.1.2",
|
||||
"chalk": "4.1.2",
|
||||
|
@ -3,20 +3,17 @@ import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
||||
import { render as renderRTL, fireEvent, waitFor } from '@testing-library/react';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
|
||||
import en from '../../../translations/en.json';
|
||||
|
||||
import { IntlProvider } from 'react-intl';
|
||||
import { AssetCardBase } from '../AssetCardBase';
|
||||
|
||||
jest.mock('react-intl', () => ({
|
||||
useIntl: () => ({ formatMessage: jest.fn(({ id }) => en[id]) }),
|
||||
}));
|
||||
|
||||
describe('AssetCardBase', () => {
|
||||
const render = (props) =>
|
||||
renderRTL(
|
||||
<ThemeProvider theme={lightTheme}>
|
||||
<AssetCardBase name="Card" extension="png" {...props} />
|
||||
</ThemeProvider>
|
||||
<IntlProvider locale="en" messages={{}} defaultLocale="en">
|
||||
<ThemeProvider theme={lightTheme}>
|
||||
<AssetCardBase name="Card" extension="png" {...props} />
|
||||
</ThemeProvider>
|
||||
</IntlProvider>
|
||||
);
|
||||
|
||||
describe('Interaction', () => {
|
||||
|
@ -37,7 +37,7 @@ ContextInfo.propTypes = {
|
||||
blocks: PropTypes.arrayOf(
|
||||
PropTypes.shape({
|
||||
label: PropTypes.string,
|
||||
value: PropTypes.string,
|
||||
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
||||
})
|
||||
).isRequired,
|
||||
};
|
||||
|
@ -21,7 +21,7 @@ const messageForPlugin = Object.keys(en).reduce((acc, curr) => {
|
||||
const asset = {
|
||||
id: 8,
|
||||
name: 'Screenshot 2.png',
|
||||
alternativeText: null,
|
||||
alternativeText: '',
|
||||
caption: null,
|
||||
width: 1476,
|
||||
height: 780,
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-upload",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Makes it easy to upload images and files to your Strapi Application.",
|
||||
"license": "SEE LICENSE IN LICENSE",
|
||||
"author": {
|
||||
@ -23,9 +23,9 @@
|
||||
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/helper-plugin": "4.4.3",
|
||||
"@strapi/provider-upload-local": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/helper-plugin": "4.4.5",
|
||||
"@strapi/provider-upload-local": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"byte-size": "7.0.1",
|
||||
"cropperjs": "1.5.12",
|
||||
"date-fns": "2.29.2",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/utils",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Shared utilities for the Strapi packages",
|
||||
"keywords": [
|
||||
"strapi",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/generate-new",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Generate a new Strapi application.",
|
||||
"keywords": [
|
||||
"generate",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/generators",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Interactive API generator.",
|
||||
"keywords": [
|
||||
"strapi",
|
||||
@ -30,8 +30,8 @@
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@sindresorhus/slugify": "1.1.0",
|
||||
"@strapi/typescript-utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/typescript-utils": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"chalk": "4.1.2",
|
||||
"fs-extra": "10.0.0",
|
||||
"node-plop": "0.26.3",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-color-picker",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Strapi maintained Custom Fields",
|
||||
"strapi": {
|
||||
"name": "color-picker",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-documentation",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -24,8 +24,8 @@
|
||||
"test": "echo \"no tests yet\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/helper-plugin": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/helper-plugin": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"bcryptjs": "2.4.3",
|
||||
"cheerio": "^1.0.0-rc.12",
|
||||
"fs-extra": "10.0.0",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-graphql",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Adds GraphQL endpoint with default API methods.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -29,7 +29,7 @@
|
||||
"dependencies": {
|
||||
"@graphql-tools/schema": "8.1.2",
|
||||
"@graphql-tools/utils": "^8.12.0",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"apollo-server-core": "3.1.2",
|
||||
"apollo-server-koa": "3.10.0",
|
||||
"glob": "^7.1.7",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-i18n",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "This plugin enables to create, to read and to update content in different languages, both from the Admin Panel and from the API",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -24,7 +24,7 @@
|
||||
"test:unit": "jest --verbose"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"lodash": "4.17.21"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-sentry",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Send Strapi error events to Sentry",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -4,8 +4,13 @@ import { IntlProvider } from 'react-intl';
|
||||
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
||||
import { QueryClient, QueryClientProvider } from 'react-query';
|
||||
import { useRBAC } from '@strapi/helper-plugin';
|
||||
import { ProvidersPage } from '../index';
|
||||
import { library } from '@fortawesome/fontawesome-svg-core';
|
||||
import { faDiscord } from '@fortawesome/free-brands-svg-icons';
|
||||
import { faEnvelope } from '@fortawesome/free-solid-svg-icons';
|
||||
import server from './server';
|
||||
import { ProvidersPage } from '../index';
|
||||
|
||||
library.add(faDiscord, faEnvelope);
|
||||
|
||||
jest.mock('@strapi/helper-plugin', () => ({
|
||||
...jest.requireActual('@strapi/helper-plugin'),
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/plugin-users-permissions",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Protect your API with a full-authentication process based on JWT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -27,8 +27,8 @@
|
||||
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/helper-plugin": "4.4.3",
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/helper-plugin": "4.4.5",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"bcryptjs": "2.4.3",
|
||||
"grant-koa": "5.4.8",
|
||||
"jsonwebtoken": "^8.1.0",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-email-amazon-ses",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Amazon SES provider for strapi email",
|
||||
"keywords": [
|
||||
"email",
|
||||
@ -36,7 +36,7 @@
|
||||
"test": "echo \"no tests yet\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"node-ses": "^3.0.3"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-email-mailgun",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Mailgun provider for strapi email plugin",
|
||||
"keywords": [
|
||||
"email",
|
||||
@ -36,7 +36,7 @@
|
||||
"test": "echo \"no tests yet\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"form-data": "^4.0.0",
|
||||
"mailgun.js": "5.2.2"
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-email-nodemailer",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Nodemailer provider for Strapi 3",
|
||||
"keywords": [
|
||||
"strapi",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-email-sendgrid",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Sendgrid provider for strapi email",
|
||||
"keywords": [
|
||||
"email",
|
||||
@ -37,7 +37,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@sendgrid/mail": "7.7.0",
|
||||
"@strapi/utils": "4.4.3"
|
||||
"@strapi/utils": "4.4.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.19.1 <=18.x.x",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-email-sendmail",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Sendmail provider for strapi email",
|
||||
"keywords": [
|
||||
"email",
|
||||
@ -35,7 +35,7 @@
|
||||
"test": "echo \"no tests yet\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"sendmail": "^1.6.1"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -124,6 +124,22 @@ module.exports = [
|
||||
|
||||
If you use dots in your bucket name, the url of the ressource is in directory style (`s3.yourRegion.amazonaws.com/your.bucket.name/image.jpg`) instead of `yourBucketName.s3.yourRegion.amazonaws.com/image.jpg`. Then only add `s3.yourRegion.amazonaws.com` to img-src and media-src directives.
|
||||
|
||||
## Bucket CORS Configuration
|
||||
|
||||
If you are planning on uploading content like GIFs and videos to your S3 bucket, you will want to edit its CORS configuration so that thumbnails are properly shown in Strapi. To do so, open your Bucket on the AWS console and locate the _Cross-origin resource sharing (CORS)_ field under the _Permissions_ tab, then amend the policies by writing your own JSON configuration, or copying and pasting the following one:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"AllowedHeaders": ["*"],
|
||||
"AllowedMethods": ["GET"],
|
||||
"AllowedOrigins": ["YOUR STRAPI URL"],
|
||||
"ExposeHeaders": [],
|
||||
"MaxAgeSeconds": 3000
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## Required AWS Policy Actions
|
||||
|
||||
These are the minimum amount of permissions needed for this provider to work.
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-upload-aws-s3",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "AWS S3 provider for strapi upload",
|
||||
"keywords": [
|
||||
"upload",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-upload-cloudinary",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Cloudinary provider for strapi upload",
|
||||
"keywords": [
|
||||
"upload",
|
||||
@ -36,7 +36,7 @@
|
||||
"test": "echo \"no tests yet\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"cloudinary": "^1.30.1",
|
||||
"into-stream": "^5.1.0"
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/provider-upload-local",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Local provider for strapi upload",
|
||||
"keywords": [
|
||||
"upload",
|
||||
@ -35,7 +35,7 @@
|
||||
"test": "echo \"no tests yet\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/utils": "4.4.3",
|
||||
"@strapi/utils": "4.4.5",
|
||||
"fs-extra": "10.0.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/babel-plugin-switch-ee-ce",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"private": false,
|
||||
"description": "Babel plugin to switch from CE to EE at runtime",
|
||||
"repository": "git://github.com/strapi/strapi.git",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/logger",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Strapi's logger",
|
||||
"homepage": "https://strapi.io",
|
||||
"bugs": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@strapi/typescript-utils",
|
||||
"version": "4.4.3",
|
||||
"version": "4.4.5",
|
||||
"description": "Typescript support for Strapi",
|
||||
"keywords": [
|
||||
"strapi",
|
||||
|
@ -2478,10 +2478,10 @@
|
||||
"@jridgewell/resolve-uri" "^3.0.3"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
|
||||
"@koa/cors@3.4.2":
|
||||
version "3.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-3.4.2.tgz#70c13e5843d1762ce78fd8767162cd916132c946"
|
||||
integrity sha512-NJU7/+h9XAfw/W/dLadDg8JYrQ5EDxstBl9a9G0A++EqvrQpabWcZ4tBxOdW57QjketX66zkOcXE+5V7IjLWYA==
|
||||
"@koa/cors@3.4.3":
|
||||
version "3.4.3"
|
||||
resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-3.4.3.tgz#d669ee6e8d6e4f0ec4a7a7b0a17e7a3ed3752ebb"
|
||||
integrity sha512-WPXQUaAeAMVaLTEFpoq3T2O1C+FstkjJnDQqy95Ck1UdILajsRhu6mhJ8H2f4NFPRBoCNN+qywTJfq/gGki5mw==
|
||||
dependencies:
|
||||
vary "^1.1.2"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user