refactor: remove calls to redux

This commit is contained in:
Josh 2023-10-16 11:17:43 +01:00
parent 57aef2ac2b
commit 04436917c7
25 changed files with 420 additions and 218 deletions

View File

@ -31,7 +31,7 @@ updates:
redux: redux:
patterns: patterns:
- 'redux' - '@reduxjs/toolkit'
- 'react-redux' - 'react-redux'
richtext-editor: richtext-editor:

View File

@ -303,6 +303,68 @@ export interface AdminTransferTokenPermission extends Schema.CollectionType {
}; };
} }
export interface AdminWorkflow extends Schema.CollectionType {
collectionName: 'strapi_workflows';
info: {
name: 'Workflow';
description: '';
singularName: 'workflow';
pluralName: 'workflows';
displayName: 'Workflow';
};
pluginOptions: {
'content-manager': {
visible: false;
};
'content-type-builder': {
visible: false;
};
};
attributes: {
name: Attribute.String & Attribute.Required & Attribute.Unique;
stages: Attribute.Relation<'admin::workflow', 'oneToMany', 'admin::workflow-stage'>;
contentTypes: Attribute.JSON & Attribute.Required & Attribute.DefaultTo<[]>;
createdAt: Attribute.DateTime;
updatedAt: Attribute.DateTime;
createdBy: Attribute.Relation<'admin::workflow', 'oneToOne', 'admin::user'> & Attribute.Private;
updatedBy: Attribute.Relation<'admin::workflow', 'oneToOne', 'admin::user'> & Attribute.Private;
};
}
export interface AdminWorkflowStage extends Schema.CollectionType {
collectionName: 'strapi_workflows_stages';
info: {
name: 'Workflow Stage';
description: '';
singularName: 'workflow-stage';
pluralName: 'workflow-stages';
displayName: 'Stages';
};
options: {
version: '1.1.0';
};
pluginOptions: {
'content-manager': {
visible: false;
};
'content-type-builder': {
visible: false;
};
};
attributes: {
name: Attribute.String;
color: Attribute.String & Attribute.DefaultTo<'#4945FF'>;
workflow: Attribute.Relation<'admin::workflow-stage', 'manyToOne', 'admin::workflow'>;
permissions: Attribute.Relation<'admin::workflow-stage', 'manyToMany', 'admin::permission'>;
createdAt: Attribute.DateTime;
updatedAt: Attribute.DateTime;
createdBy: Attribute.Relation<'admin::workflow-stage', 'oneToOne', 'admin::user'> &
Attribute.Private;
updatedBy: Attribute.Relation<'admin::workflow-stage', 'oneToOne', 'admin::user'> &
Attribute.Private;
};
}
export interface PluginUploadFile extends Schema.CollectionType { export interface PluginUploadFile extends Schema.CollectionType {
collectionName: 'files'; collectionName: 'files';
info: { info: {
@ -428,6 +490,8 @@ export interface PluginMypluginTest extends Schema.CollectionType {
'plugin::myplugin.test' 'plugin::myplugin.test'
>; >;
locale: Attribute.String; locale: Attribute.String;
strapi_stage: Attribute.Relation<'plugin::myplugin.test', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'plugin::myplugin.test', 'oneToOne', 'admin::user'>;
}; };
} }
@ -598,6 +662,16 @@ export interface PluginUsersPermissionsUser extends Schema.CollectionType {
Attribute.Private; Attribute.Private;
updatedBy: Attribute.Relation<'plugin::users-permissions.user', 'oneToOne', 'admin::user'> & updatedBy: Attribute.Relation<'plugin::users-permissions.user', 'oneToOne', 'admin::user'> &
Attribute.Private; Attribute.Private;
strapi_stage: Attribute.Relation<
'plugin::users-permissions.user',
'oneToOne',
'admin::workflow-stage'
>;
strapi_assignee: Attribute.Relation<
'plugin::users-permissions.user',
'oneToOne',
'admin::user'
>;
}; };
} }
@ -641,6 +715,8 @@ export interface ApiAddressAddress extends Schema.CollectionType {
Attribute.Private; Attribute.Private;
updatedBy: Attribute.Relation<'api::address.address', 'oneToOne', 'admin::user'> & updatedBy: Attribute.Relation<'api::address.address', 'oneToOne', 'admin::user'> &
Attribute.Private; Attribute.Private;
strapi_stage: Attribute.Relation<'api::address.address', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::address.address', 'oneToOne', 'admin::user'>;
}; };
} }
@ -701,6 +777,8 @@ export interface ApiCategoryCategory extends Schema.CollectionType {
'api::category.category' 'api::category.category'
>; >;
locale: Attribute.String; locale: Attribute.String;
strapi_stage: Attribute.Relation<'api::category.category', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::category.category', 'oneToOne', 'admin::user'>;
}; };
} }
@ -752,6 +830,8 @@ export interface ApiCountryCountry extends Schema.CollectionType {
Attribute.Private; Attribute.Private;
localizations: Attribute.Relation<'api::country.country', 'oneToMany', 'api::country.country'>; localizations: Attribute.Relation<'api::country.country', 'oneToMany', 'api::country.country'>;
locale: Attribute.String; locale: Attribute.String;
strapi_stage: Attribute.Relation<'api::country.country', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::country.country', 'oneToOne', 'admin::user'>;
}; };
} }
@ -800,6 +880,8 @@ export interface ApiHomepageHomepage extends Schema.SingleType {
'api::homepage.homepage' 'api::homepage.homepage'
>; >;
locale: Attribute.String; locale: Attribute.String;
strapi_stage: Attribute.Relation<'api::homepage.homepage', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::homepage.homepage', 'oneToOne', 'admin::user'>;
}; };
} }
@ -870,6 +952,12 @@ export interface ApiKitchensinkKitchensink extends Schema.CollectionType {
Attribute.Private; Attribute.Private;
updatedBy: Attribute.Relation<'api::kitchensink.kitchensink', 'oneToOne', 'admin::user'> & updatedBy: Attribute.Relation<'api::kitchensink.kitchensink', 'oneToOne', 'admin::user'> &
Attribute.Private; Attribute.Private;
strapi_stage: Attribute.Relation<
'api::kitchensink.kitchensink',
'oneToOne',
'admin::workflow-stage'
>;
strapi_assignee: Attribute.Relation<'api::kitchensink.kitchensink', 'oneToOne', 'admin::user'>;
}; };
} }
@ -892,6 +980,8 @@ export interface ApiLikeLike extends Schema.CollectionType {
updatedAt: Attribute.DateTime; updatedAt: Attribute.DateTime;
createdBy: Attribute.Relation<'api::like.like', 'oneToOne', 'admin::user'> & Attribute.Private; createdBy: Attribute.Relation<'api::like.like', 'oneToOne', 'admin::user'> & Attribute.Private;
updatedBy: Attribute.Relation<'api::like.like', 'oneToOne', 'admin::user'> & Attribute.Private; updatedBy: Attribute.Relation<'api::like.like', 'oneToOne', 'admin::user'> & Attribute.Private;
strapi_stage: Attribute.Relation<'api::like.like', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::like.like', 'oneToOne', 'admin::user'>;
}; };
} }
@ -915,6 +1005,8 @@ export interface ApiMenuMenu extends Schema.CollectionType {
updatedAt: Attribute.DateTime; updatedAt: Attribute.DateTime;
createdBy: Attribute.Relation<'api::menu.menu', 'oneToOne', 'admin::user'> & Attribute.Private; createdBy: Attribute.Relation<'api::menu.menu', 'oneToOne', 'admin::user'> & Attribute.Private;
updatedBy: Attribute.Relation<'api::menu.menu', 'oneToOne', 'admin::user'> & Attribute.Private; updatedBy: Attribute.Relation<'api::menu.menu', 'oneToOne', 'admin::user'> & Attribute.Private;
strapi_stage: Attribute.Relation<'api::menu.menu', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::menu.menu', 'oneToOne', 'admin::user'>;
}; };
} }
@ -944,6 +1036,12 @@ export interface ApiMenusectionMenusection extends Schema.CollectionType {
Attribute.Private; Attribute.Private;
updatedBy: Attribute.Relation<'api::menusection.menusection', 'oneToOne', 'admin::user'> & updatedBy: Attribute.Relation<'api::menusection.menusection', 'oneToOne', 'admin::user'> &
Attribute.Private; Attribute.Private;
strapi_stage: Attribute.Relation<
'api::menusection.menusection',
'oneToOne',
'admin::workflow-stage'
>;
strapi_assignee: Attribute.Relation<'api::menusection.menusection', 'oneToOne', 'admin::user'>;
}; };
} }
@ -1021,6 +1119,16 @@ export interface ApiRelationLocaleRelationLocale extends Schema.CollectionType {
'api::relation-locale.relation-locale' 'api::relation-locale.relation-locale'
>; >;
locale: Attribute.String; locale: Attribute.String;
strapi_stage: Attribute.Relation<
'api::relation-locale.relation-locale',
'oneToOne',
'admin::workflow-stage'
>;
strapi_assignee: Attribute.Relation<
'api::relation-locale.relation-locale',
'oneToOne',
'admin::user'
>;
}; };
} }
@ -1178,6 +1286,12 @@ export interface ApiRestaurantRestaurant extends Schema.CollectionType {
'api::restaurant.restaurant' 'api::restaurant.restaurant'
>; >;
locale: Attribute.String; locale: Attribute.String;
strapi_stage: Attribute.Relation<
'api::restaurant.restaurant',
'oneToOne',
'admin::workflow-stage'
>;
strapi_assignee: Attribute.Relation<'api::restaurant.restaurant', 'oneToOne', 'admin::user'>;
}; };
} }
@ -1210,6 +1324,8 @@ export interface ApiReviewReview extends Schema.CollectionType {
Attribute.Private; Attribute.Private;
updatedBy: Attribute.Relation<'api::review.review', 'oneToOne', 'admin::user'> & updatedBy: Attribute.Relation<'api::review.review', 'oneToOne', 'admin::user'> &
Attribute.Private; Attribute.Private;
strapi_stage: Attribute.Relation<'api::review.review', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::review.review', 'oneToOne', 'admin::user'>;
}; };
} }
@ -1251,6 +1367,8 @@ export interface ApiTagTag extends Schema.CollectionType {
publishedAt: Attribute.DateTime; publishedAt: Attribute.DateTime;
createdBy: Attribute.Relation<'api::tag.tag', 'oneToOne', 'admin::user'> & Attribute.Private; createdBy: Attribute.Relation<'api::tag.tag', 'oneToOne', 'admin::user'> & Attribute.Private;
updatedBy: Attribute.Relation<'api::tag.tag', 'oneToOne', 'admin::user'> & Attribute.Private; updatedBy: Attribute.Relation<'api::tag.tag', 'oneToOne', 'admin::user'> & Attribute.Private;
strapi_stage: Attribute.Relation<'api::tag.tag', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::tag.tag', 'oneToOne', 'admin::user'>;
}; };
} }
@ -1275,6 +1393,41 @@ export interface ApiTempTemp extends Schema.CollectionType {
publishedAt: Attribute.DateTime; publishedAt: Attribute.DateTime;
createdBy: Attribute.Relation<'api::temp.temp', 'oneToOne', 'admin::user'> & Attribute.Private; createdBy: Attribute.Relation<'api::temp.temp', 'oneToOne', 'admin::user'> & Attribute.Private;
updatedBy: Attribute.Relation<'api::temp.temp', 'oneToOne', 'admin::user'> & Attribute.Private; updatedBy: Attribute.Relation<'api::temp.temp', 'oneToOne', 'admin::user'> & Attribute.Private;
strapi_stage: Attribute.Relation<'api::temp.temp', 'oneToOne', 'admin::workflow-stage'>;
strapi_assignee: Attribute.Relation<'api::temp.temp', 'oneToOne', 'admin::user'>;
};
}
export interface AdminAuditLog extends Schema.CollectionType {
collectionName: 'strapi_audit_logs';
info: {
singularName: 'audit-log';
pluralName: 'audit-logs';
displayName: 'Audit Log';
};
options: {
draftAndPublish: false;
timestamps: false;
};
pluginOptions: {
'content-manager': {
visible: false;
};
'content-type-builder': {
visible: false;
};
};
attributes: {
action: Attribute.String & Attribute.Required;
date: Attribute.DateTime & Attribute.Required;
user: Attribute.Relation<'admin::audit-log', 'oneToOne', 'admin::user'>;
payload: Attribute.JSON;
createdAt: Attribute.DateTime;
updatedAt: Attribute.DateTime;
createdBy: Attribute.Relation<'admin::audit-log', 'oneToOne', 'admin::user'> &
Attribute.Private;
updatedBy: Attribute.Relation<'admin::audit-log', 'oneToOne', 'admin::user'> &
Attribute.Private;
}; };
} }
@ -1288,6 +1441,8 @@ declare module '@strapi/types' {
'admin::api-token-permission': AdminApiTokenPermission; 'admin::api-token-permission': AdminApiTokenPermission;
'admin::transfer-token': AdminTransferToken; 'admin::transfer-token': AdminTransferToken;
'admin::transfer-token-permission': AdminTransferTokenPermission; 'admin::transfer-token-permission': AdminTransferTokenPermission;
'admin::workflow': AdminWorkflow;
'admin::workflow-stage': AdminWorkflowStage;
'plugin::upload.file': PluginUploadFile; 'plugin::upload.file': PluginUploadFile;
'plugin::upload.folder': PluginUploadFolder; 'plugin::upload.folder': PluginUploadFolder;
'plugin::myplugin.test': PluginMypluginTest; 'plugin::myplugin.test': PluginMypluginTest;
@ -1308,6 +1463,7 @@ declare module '@strapi/types' {
'api::review.review': ApiReviewReview; 'api::review.review': ApiReviewReview;
'api::tag.tag': ApiTagTag; 'api::tag.tag': ApiTagTag;
'api::temp.temp': ApiTempTemp; 'api::temp.temp': ApiTempTemp;
'admin::audit-log': AdminAuditLog;
} }
} }
} }

View File

@ -67,18 +67,19 @@
}, },
"dependencies": { "dependencies": {
"@juggle/resize-observer": "3.4.0", "@juggle/resize-observer": "3.4.0",
"@testing-library/jest-dom": "5.16.5",
"jest-styled-components": "7.1.1", "jest-styled-components": "7.1.1",
"whatwg-fetch": "3.6.2" "whatwg-fetch": "3.6.2"
}, },
"devDependencies": { "devDependencies": {
"@reduxjs/toolkit": "1.9.7",
"@strapi/pack-up": "workspace:*", "@strapi/pack-up": "workspace:*",
"@testing-library/jest-dom": "5.16.5",
"eslint-config-custom": "4.14.4", "eslint-config-custom": "4.14.4",
"redux": "^4.2.1",
"tsconfig": "4.14.4" "tsconfig": "4.14.4"
}, },
"peerDependencies": { "peerDependencies": {
"redux": "^4.2.1" "@reduxjs/toolkit": "^1.9.7",
"@testing-library/jest-dom": "^5.16.5"
}, },
"engines": { "engines": {
"node": ">=16.0.0 <=20.x.x" "node": ">=16.0.0 <=20.x.x"

View File

@ -1,4 +1,4 @@
import { combineReducers, createStore } from 'redux'; import { combineReducers, configureStore } from '@reduxjs/toolkit';
const reducers = { const reducers = {
admin_app: jest.fn(() => ({ permissions: {}, status: 'init' })), admin_app: jest.fn(() => ({ permissions: {}, status: 'init' })),
@ -33,7 +33,9 @@ const reducers = {
rbacProvider: jest.fn(() => ({ allPermissions: null, collectionTypesRelatedPermissions: {} })), rbacProvider: jest.fn(() => ({ allPermissions: null, collectionTypesRelatedPermissions: {} })),
}; };
const store = createStore(combineReducers(reducers)); const store = configureStore({
reducer: combineReducers(reducers),
});
export default { export default {
store, store,

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { combineReducers, configureStore } from '@reduxjs/toolkit';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { Table, useTableContext } from '@strapi/helper-plugin'; import { Table, useTableContext } from '@strapi/helper-plugin';
import { render, screen, waitFor, within } from '@testing-library/react'; import { render, screen, waitFor, within } from '@testing-library/react';
@ -7,7 +8,6 @@ import userEvent from '@testing-library/user-event';
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { MemoryRouter } from 'react-router-dom'; import { MemoryRouter } from 'react-router-dom';
import { combineReducers, createStore } from 'redux';
import BulkActionButtons from '..'; import BulkActionButtons from '..';
import reducers from '../../../../../../reducers'; import reducers from '../../../../../../reducers';
@ -34,8 +34,9 @@ jest.mock('../SelectedEntriesModal', () => () => <div>SelectedEntriesModal</div>
const user = userEvent.setup(); const user = userEvent.setup();
const rootReducer = combineReducers(reducers); const store = configureStore({
const store = createStore(rootReducer, { reducer: combineReducers(reducers),
preloadedState: {
'content-manager_listView': { 'content-manager_listView': {
data: [ data: [
{ id: 1, publishedAt: null }, { id: 1, publishedAt: null },
@ -47,6 +48,7 @@ const store = createStore(rootReducer, {
}, },
}, },
}, },
},
}); });
const setup = (props) => ({ const setup = (props) => ({

View File

@ -1,10 +1,10 @@
import React from 'react'; import React from 'react';
import { combineReducers, configureStore } from '@reduxjs/toolkit';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { render as renderRTL, fireEvent } from '@testing-library/react'; import { render as renderRTL, fireEvent } from '@testing-library/react';
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { combineReducers, createStore } from 'redux';
import reducers from '../../../../../../reducers'; import reducers from '../../../../../../reducers';
import { FieldPicker } from '../index'; import { FieldPicker } from '../index';
@ -42,9 +42,9 @@ const layout = {
const render = () => ({ const render = () => ({
...renderRTL(<FieldPicker layout={layout} />, { ...renderRTL(<FieldPicker layout={layout} />, {
wrapper({ children }) { wrapper({ children }) {
const rootReducer = combineReducers(reducers); const store = configureStore({
reducer: combineReducers(reducers),
const store = createStore(rootReducer, { preloadedState: {
'content-manager_listView': { 'content-manager_listView': {
contentType: { contentType: {
attributes: { attributes: {
@ -107,6 +107,7 @@ const render = () => ({
}, },
], ],
}, },
},
}); });
return ( return (

View File

@ -1,5 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { bindActionCreators } from '@reduxjs/toolkit';
import { import {
Main, Main,
ActionLayout, ActionLayout,
@ -39,10 +40,10 @@ import PropTypes from 'prop-types';
import { stringify } from 'qs'; import { stringify } from 'qs';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import { useMutation } from 'react-query'; import { useMutation } from 'react-query';
import { connect, useSelector } from 'react-redux'; import { useDispatch } from 'react-redux';
import { useHistory, useLocation, Link as ReactRouterLink } from 'react-router-dom'; import { useHistory, useLocation, Link as ReactRouterLink } from 'react-router-dom';
import { bindActionCreators, compose } from 'redux';
import { useTypedSelector } from '../../../core/store/configureStore';
import { INJECT_COLUMN_IN_TABLE } from '../../../exposedHooks'; import { INJECT_COLUMN_IN_TABLE } from '../../../exposedHooks';
import { useAdminUsers } from '../../../hooks/useAdminUsers'; import { useAdminUsers } from '../../../hooks/useAdminUsers';
import { useEnterprise } from '../../../hooks/useEnterprise'; import { useEnterprise } from '../../../hooks/useEnterprise';
@ -53,7 +54,7 @@ import { CREATOR_FIELDS } from '../../constants/attributes';
import { useAllowedAttributes } from '../../hooks/useAllowedAttributes'; import { useAllowedAttributes } from '../../hooks/useAllowedAttributes';
import { getTrad, getDisplayName } from '../../utils'; import { getTrad, getDisplayName } from '../../utils';
import { getData, getDataSucceeded, onChangeListHeaders, onResetListHeaders } from './actions'; import * as Actions from './actions';
import { Body } from './components/Body'; import { Body } from './components/Body';
import BulkActionButtons from './components/BulkActionButtons'; import BulkActionButtons from './components/BulkActionButtons';
import CellContent from './components/CellContent'; import CellContent from './components/CellContent';
@ -66,19 +67,17 @@ const REVIEW_WORKFLOW_COLUMNS_CELL_CE = () => null;
const REVIEW_WORKFLOW_FILTER_CE = []; const REVIEW_WORKFLOW_FILTER_CE = [];
const USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee']; const USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];
function ListView({ function ListView({ canCreate, canDelete, canRead, canPublish, layout, slug }) {
canCreate, const dispatch = useDispatch();
canDelete, const { getData, getDataSucceeded } = React.useMemo(
canRead, () =>
canPublish, bindActionCreators(
data, { getData: Actions.getData, getDataSucceeded: Actions.getDataSucceeded },
getData, dispatch
getDataSucceeded, ),
isLoading, [dispatch]
layout, );
pagination, const { pagination, isLoading, data } = useTypedSelector(makeSelectListView());
slug,
}) {
const { total } = pagination; const { total } = pagination;
const { contentType } = layout; const { contentType } = layout;
const { const {
@ -468,7 +467,7 @@ function ListView({
}); });
const { runHookWaterfall } = useStrapiApp(); const { runHookWaterfall } = useStrapiApp();
const displayedHeaders = useSelector(selectDisplayedHeaders); const displayedHeaders = useTypedSelector(selectDisplayedHeaders);
const tableHeaders = React.useMemo(() => { const tableHeaders = React.useMemo(() => {
const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, { const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {
@ -869,7 +868,6 @@ ListView.propTypes = {
canDelete: PropTypes.bool.isRequired, canDelete: PropTypes.bool.isRequired,
canRead: PropTypes.bool.isRequired, canRead: PropTypes.bool.isRequired,
canPublish: PropTypes.bool.isRequired, canPublish: PropTypes.bool.isRequired,
data: PropTypes.array.isRequired,
layout: PropTypes.exact({ layout: PropTypes.exact({
components: PropTypes.object.isRequired, components: PropTypes.object.isRequired,
contentType: PropTypes.shape({ contentType: PropTypes.shape({
@ -884,27 +882,12 @@ ListView.propTypes = {
settings: PropTypes.object.isRequired, settings: PropTypes.object.isRequired,
}).isRequired, }).isRequired,
}).isRequired, }).isRequired,
isLoading: PropTypes.bool.isRequired,
getData: PropTypes.func.isRequired,
getDataSucceeded: PropTypes.func.isRequired,
pagination: PropTypes.shape({ total: PropTypes.number.isRequired, pageCount: PropTypes.number })
.isRequired,
slug: PropTypes.string.isRequired, slug: PropTypes.string.isRequired,
}; };
const mapStateToProps = makeSelectListView();
export function mapDispatchToProps(dispatch) { export function mapDispatchToProps(dispatch) {
return bindActionCreators( return bindActionCreators({}, dispatch);
{
getData,
getDataSucceeded,
onChangeListHeaders,
onResetListHeaders,
},
dispatch
);
} }
const withConnect = connect(mapStateToProps, mapDispatchToProps); // const withConnect = connect(mapStateToProps, mapDispatchToProps);
export default compose(withConnect)(React.memo(ListView, isEqual)); export default React.memo(ListView, isEqual);

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { darkTheme, lightTheme } from '@strapi/design-system'; import { darkTheme, lightTheme } from '@strapi/design-system';
import { render, waitFor } from '@testing-library/react'; import { render, waitFor } from '@testing-library/react';
@ -7,7 +8,6 @@ import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { Route, MemoryRouter } from 'react-router-dom'; import { Route, MemoryRouter } from 'react-router-dom';
import { createStore } from 'redux';
import { Theme } from '../../../../../../components/Theme'; import { Theme } from '../../../../../../components/Theme';
import { ThemeToggleProvider } from '../../../../../../components/ThemeToggleProvider'; import { ThemeToggleProvider } from '../../../../../../components/ThemeToggleProvider';
@ -71,8 +71,11 @@ const setup = ({ path, ...props } = {}) =>
return ( return (
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
reducer: (state) => state,
preloadedState: {
admin_app: { permissions: fixtures.permissions.app }, admin_app: { permissions: fixtures.permissions.app },
},
})} })}
> >
<QueryClientProvider client={client}> <QueryClientProvider client={client}>

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { darkTheme, lightTheme } from '@strapi/design-system'; import { darkTheme, lightTheme } from '@strapi/design-system';
import { TrackingProvider, useRBAC } from '@strapi/helper-plugin'; import { TrackingProvider, useRBAC } from '@strapi/helper-plugin';
@ -8,7 +9,6 @@ import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { Route, MemoryRouter } from 'react-router-dom'; import { Route, MemoryRouter } from 'react-router-dom';
import { createStore } from 'redux';
import { Theme } from '../../../../../../components/Theme'; import { Theme } from '../../../../../../components/Theme';
import { ThemeToggleProvider } from '../../../../../../components/ThemeToggleProvider'; import { ThemeToggleProvider } from '../../../../../../components/ThemeToggleProvider';
@ -78,8 +78,11 @@ const setup = ({ path, ...props } = {}) =>
return ( return (
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
admin_app: { permissions: { ...fixtures.permissions.app } }, reducer: (state) => state,
preloadedState: {
admin_app: { permissions: fixtures.permissions.app },
},
})} })}
> >
<QueryClientProvider client={client}> <QueryClientProvider client={client}>

View File

@ -6,6 +6,7 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { ThemeProvider, lightTheme } from '@strapi/design-system';
import { useRBAC } from '@strapi/helper-plugin'; import { useRBAC } from '@strapi/helper-plugin';
@ -15,7 +16,6 @@ import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { Router } from 'react-router-dom'; import { Router } from 'react-router-dom';
import { createStore } from 'redux';
import { useAdminRoles } from '../../../../../../hooks/useAdminRoles'; import { useAdminRoles } from '../../../../../../hooks/useAdminRoles';
import ListPage from '../index'; import ListPage from '../index';
@ -46,8 +46,11 @@ const setup = (props) =>
return ( return (
<QueryClientProvider client={client}> <QueryClientProvider client={client}>
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
reducer: (state) => state,
preloadedState: {
admin_app: { permissions: fixtures.permissions.app }, admin_app: { permissions: fixtures.permissions.app },
},
})} })}
> >
<IntlProvider messages={{}} defaultLocale="en" textComponent="span" locale="en"> <IntlProvider messages={{}} defaultLocale="en" textComponent="span" locale="en">

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { TrackingProvider, useRBAC } from '@strapi/helper-plugin'; import { TrackingProvider, useRBAC } from '@strapi/helper-plugin';
@ -9,7 +10,6 @@ import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { Route, Router } from 'react-router-dom'; import { Route, Router } from 'react-router-dom';
import { createStore } from 'redux';
import ListPage from '../index'; import ListPage from '../index';
@ -77,8 +77,11 @@ const setup = (props) =>
return ( return (
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
reducer: (state) => state,
preloadedState: {
admin_app: { permissions: fixtures.permissions.app }, admin_app: { permissions: fixtures.permissions.app },
},
})} })}
> >
<QueryClientProvider client={client}> <QueryClientProvider client={client}>

View File

@ -1,6 +1,7 @@
/* eslint-disable check-file/filename-naming-convention */ /* eslint-disable check-file/filename-naming-convention */
import * as React from 'react'; import * as React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { DesignSystemProvider } from '@strapi/design-system'; import { DesignSystemProvider } from '@strapi/design-system';
import { NotificationsProvider, RBACContext } from '@strapi/helper-plugin'; import { NotificationsProvider, RBACContext } from '@strapi/helper-plugin';
@ -19,7 +20,6 @@ import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider, setLogger } from 'react-query'; import { QueryClient, QueryClientProvider, setLogger } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { MemoryRouter, MemoryRouterProps } from 'react-router-dom'; import { MemoryRouter, MemoryRouterProps } from 'react-router-dom';
import { createStore } from 'redux';
// @ts-expect-error no types yet. // @ts-expect-error no types yet.
import ModelsContext from '../src/content-manager/contexts/ModelsContext'; import ModelsContext from '../src/content-manager/contexts/ModelsContext';
@ -49,7 +49,10 @@ const Providers = ({ children, initialEntries }: ProvidersProps) => {
}, },
}); });
const store = createStore((state = initialState) => state, initialState); const store = configureStore({
preloadedState: initialState,
reducer: (state = initialState) => state,
});
// en is the default locale of the admin app. // en is the default locale of the admin app.
return ( return (

View File

@ -1,12 +1,12 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { renderHook, waitFor } from '@testing-library/react'; import { renderHook, waitFor } from '@testing-library/react';
import { rest } from 'msw'; import { rest } from 'msw';
import { setupServer } from 'msw/node'; import { setupServer } from 'msw/node';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { createStore } from 'redux';
import { useLicenseLimits } from '../useLicenseLimits'; import { useLicenseLimits } from '../useLicenseLimits';
@ -42,8 +42,11 @@ const setup = (...args) =>
return ( return (
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
reducer: (state) => state,
preloadedState: {
admin_app: { permissions: fixtures.permissions.app }, admin_app: { permissions: fixtures.permissions.app },
},
})} })}
> >
<QueryClientProvider client={client}>{children}</QueryClientProvider> <QueryClientProvider client={client}>{children}</QueryClientProvider>

View File

@ -1,12 +1,12 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { render } from '@testing-library/react'; import { render } from '@testing-library/react';
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { createStore } from 'redux';
import { AdminSeatInfoEE } from '..'; import { AdminSeatInfoEE } from '..';
import { useLicenseLimits } from '../../../../../../../hooks/useLicenseLimits'; import { useLicenseLimits } from '../../../../../../../hooks/useLicenseLimits';
@ -54,8 +54,11 @@ const setup = (props) =>
return ( return (
<QueryClientProvider client={client}> <QueryClientProvider client={client}>
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
reducer: (state) => state,
preloadedState: {
admin_app: { permissions: fixtures.permissions.app }, admin_app: { permissions: fixtures.permissions.app },
},
})} })}
> >
<ThemeProvider theme={lightTheme}> <ThemeProvider theme={lightTheme}>

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { fireEvent, render, screen, waitFor, within } from '@testing-library/react'; import { fireEvent, render, screen, waitFor, within } from '@testing-library/react';
@ -9,7 +10,6 @@ import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { Router } from 'react-router-dom'; import { Router } from 'react-router-dom';
import { createStore } from 'redux';
import useAuditLogsData from '../hooks/useAuditLogsData'; import useAuditLogsData from '../hooks/useAuditLogsData';
import ListView from '../index'; import ListView from '../index';
@ -54,7 +54,9 @@ const setup = (props) => ({
return ( return (
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
reducer: (state) => state,
preloadedState: {
admin_app: { admin_app: {
permissions: { permissions: {
...fixtures.permissions.app, ...fixtures.permissions.app,
@ -67,6 +69,7 @@ const setup = (props) => ({
}, },
}, },
}, },
},
})} })}
> >
<QueryClientProvider client={client}> <QueryClientProvider client={client}>

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { render, waitFor } from '@testing-library/react'; import { render, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event'; import userEvent from '@testing-library/user-event';
@ -8,7 +9,6 @@ import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend'; import { HTML5Backend } from 'react-dnd-html5-backend';
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { createStore } from 'redux';
import { REDUX_NAMESPACE, STAGE_COLOR_DEFAULT } from '../../../../constants'; import { REDUX_NAMESPACE, STAGE_COLOR_DEFAULT } from '../../../../constants';
import { reducer } from '../../../../reducer'; import { reducer } from '../../../../reducer';
@ -128,7 +128,9 @@ const ComponentFixture = ({
const setup = ({ roles, ...props } = {}) => ({ const setup = ({ roles, ...props } = {}) => ({
...render(<ComponentFixture {...props} />, { ...render(<ComponentFixture {...props} />, {
wrapper({ children }) { wrapper({ children }) {
const store = createStore(reducer, { const store = configureStore({
reducer,
preloadedState: {
[REDUX_NAMESPACE]: { [REDUX_NAMESPACE]: {
serverState: { serverState: {
contentTypes: CONTENT_TYPES_FIXTURE, contentTypes: CONTENT_TYPES_FIXTURE,
@ -143,6 +145,7 @@ const setup = ({ roles, ...props } = {}) => ({
}, },
}, },
}, },
},
}); });
return ( return (

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { ThemeProvider, lightTheme } from '@strapi/design-system';
import { render, waitFor } from '@testing-library/react'; import { render, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event'; import userEvent from '@testing-library/user-event';
@ -8,7 +9,6 @@ import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend'; import { HTML5Backend } from 'react-dnd-html5-backend';
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { createStore } from 'redux';
import { REDUX_NAMESPACE } from '../../../constants'; import { REDUX_NAMESPACE } from '../../../constants';
import { reducer } from '../../../reducer'; import { reducer } from '../../../reducer';
@ -92,7 +92,9 @@ const withMarkup = (query) => (text) =>
const setup = ({ collectionTypes, singleTypes, currentWorkflow, ...props } = {}) => ({ const setup = ({ collectionTypes, singleTypes, currentWorkflow, ...props } = {}) => ({
...render(<ComponentFixture currentWorkflow={currentWorkflow} {...props} />, { ...render(<ComponentFixture currentWorkflow={currentWorkflow} {...props} />, {
wrapper({ children }) { wrapper({ children }) {
const store = createStore(reducer, { const store = configureStore({
reducer,
preloadedState: {
[REDUX_NAMESPACE]: { [REDUX_NAMESPACE]: {
serverState: { serverState: {
contentTypes: { contentTypes: {
@ -110,6 +112,7 @@ const setup = ({ collectionTypes, singleTypes, currentWorkflow, ...props } = {})
}, },
}, },
}, },
},
}); });
return ( return (

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { fixtures } from '@strapi/admin-test-utils'; import { fixtures } from '@strapi/admin-test-utils';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { useRBAC } from '@strapi/helper-plugin'; import { useRBAC } from '@strapi/helper-plugin';
@ -7,7 +8,6 @@ import { fireEvent, getByLabelText, render, waitFor } from '@testing-library/rea
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { createStore } from 'redux';
import { SingleSignOn } from '../index'; import { SingleSignOn } from '../index';
@ -33,7 +33,9 @@ const setup = (props) =>
return ( return (
<QueryClientProvider client={client}> <QueryClientProvider client={client}>
<Provider <Provider
store={createStore((state) => state, { store={configureStore({
reducer: (state) => state,
preloadedState: {
admin_app: { admin_app: {
permissions: { permissions: {
...fixtures.permissions.app, ...fixtures.permissions.app,
@ -47,6 +49,7 @@ const setup = (props) =>
}, },
}, },
}, },
},
})} })}
> >
<ThemeProvider theme={lightTheme}> <ThemeProvider theme={lightTheme}>

View File

@ -117,7 +117,6 @@
"react-router-dom": "5.3.4", "react-router-dom": "5.3.4",
"react-select": "5.7.0", "react-select": "5.7.0",
"react-window": "1.8.8", "react-window": "1.8.8",
"redux": "^4.2.1",
"reselect": "4.1.7", "reselect": "4.1.7",
"rimraf": "3.0.2", "rimraf": "3.0.2",
"sanitize-html": "2.11.0", "sanitize-html": "2.11.0",

View File

@ -17,9 +17,8 @@ import set from 'lodash/set';
import size from 'lodash/size'; import size from 'lodash/size';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import { connect, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';
import { Redirect, useLocation, useRouteMatch } from 'react-router-dom'; import { Redirect, useLocation, useRouteMatch } from 'react-router-dom';
import { compose } from 'redux';
import DataManagerContext from '../../contexts/DataManagerContext'; import DataManagerContext from '../../contexts/DataManagerContext';
import useFormModalNavigation from '../../hooks/useFormModalNavigation'; import useFormModalNavigation from '../../hooks/useFormModalNavigation';
@ -58,8 +57,9 @@ import retrieveSpecificInfoFromComponents from './utils/retrieveSpecificInfoFrom
import serverRestartWatcher from './utils/serverRestartWatcher'; import serverRestartWatcher from './utils/serverRestartWatcher';
import validateSchema from './utils/validateSchema'; import validateSchema from './utils/validateSchema';
const DataManagerProvider = ({ const DataManagerProvider = ({ children }) => {
children, const dispatch = useDispatch();
const {
components, components,
contentTypes, contentTypes,
isLoading, isLoading,
@ -67,8 +67,7 @@ const DataManagerProvider = ({
initialData, initialData,
modifiedData, modifiedData,
reservedNames, reservedNames,
}) => { } = useSelector(makeSelectDataManagerProvider());
const dispatch = useDispatch();
const toggleNotification = useNotification(); const toggleNotification = useNotification();
const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker(); const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();
const { setCurrentStep } = useGuidedTour(); const { setCurrentStep } = useGuidedTour();
@ -619,22 +618,8 @@ const DataManagerProvider = ({
); );
}; };
DataManagerProvider.defaultProps = {
components: {},
};
DataManagerProvider.propTypes = { DataManagerProvider.propTypes = {
children: PropTypes.node.isRequired, children: PropTypes.node.isRequired,
components: PropTypes.object,
contentTypes: PropTypes.object.isRequired,
isLoading: PropTypes.bool.isRequired,
isLoadingForDataToBeSet: PropTypes.bool.isRequired,
initialData: PropTypes.object.isRequired,
modifiedData: PropTypes.object.isRequired,
reservedNames: PropTypes.object.isRequired,
}; };
const mapStateToProps = makeSelectDataManagerProvider(); export default memo(DataManagerProvider);
const withConnect = connect(mapStateToProps, null);
export default compose(withConnect)(memo(DataManagerProvider));

View File

@ -44,7 +44,6 @@
"react-helmet": "^6.1.0", "react-helmet": "^6.1.0",
"react-intl": "6.4.1", "react-intl": "6.4.1",
"react-redux": "8.1.1", "react-redux": "8.1.1",
"redux": "^4.2.1",
"reselect": "4.1.7", "reselect": "4.1.7",
"yup": "0.32.9" "yup": "0.32.9"
}, },

View File

@ -1,12 +1,12 @@
import React from 'react'; import React from 'react';
import { combineReducers, configureStore } from '@reduxjs/toolkit';
import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { lightTheme, ThemeProvider } from '@strapi/design-system';
import { render as renderTL, waitFor } from '@testing-library/react'; import { render as renderTL, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event'; import userEvent from '@testing-library/user-event';
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from 'react-query'; import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { combineReducers, createStore } from 'redux';
import LocaleSelect from '..'; import LocaleSelect from '..';
import reducers from '../../../hooks/reducers'; import reducers from '../../../hooks/reducers';
@ -58,7 +58,9 @@ const queryClient = new QueryClient({
}, },
}); });
const store = createStore(combineReducers(reducers)); const store = configureStore({
reducer: combineReducers(reducers),
});
const render = (props) => ({ const render = (props) => ({
user: userEvent.setup(), user: userEvent.setup(),

View File

@ -1,7 +1,7 @@
/* eslint-disable react/prop-types */ /* eslint-disable react/prop-types */
import React from 'react'; import React from 'react';
// import { createStore, combineReducers } from 'redux'; // import { configureStore, combineReducers } from '@reduxjs/toolkit';
// import { Provider } from 'react-redux'; // import { Provider } from 'react-redux';
// import { request, useRBAC } from '@strapi/helper-plugin'; // import { request, useRBAC } from '@strapi/helper-plugin';
// import { fireEvent, render, screen, within, waitFor } from '@testing-library/react'; // import { fireEvent, render, screen, within, waitFor } from '@testing-library/react';
@ -17,7 +17,10 @@ import React from 'react';
// const queryClient = new QueryClient(); // const queryClient = new QueryClient();
// const rootReducer = combineReducers(i18nReducers); // const rootReducer = combineReducers(i18nReducers);
// const store = createStore(rootReducer, { [`${pluginId}_locales`]: initialState }); // const store = configureStore({
// reducer: rootReducer,
// preloadedState: { [`${pluginId}_locales`]: initialState },
// });
// return ( // return (
// <Provider store={store}> // <Provider store={store}>

View File

@ -30,6 +30,7 @@
"test:unit:watch": "run -T jest --watch" "test:unit:watch": "run -T jest --watch"
}, },
"dependencies": { "dependencies": {
"@reduxjs/toolkit": "1.9.7",
"@strapi/design-system": "1.12.2", "@strapi/design-system": "1.12.2",
"@strapi/helper-plugin": "4.14.4", "@strapi/helper-plugin": "4.14.4",
"@strapi/icons": "1.12.2", "@strapi/icons": "1.12.2",
@ -42,7 +43,6 @@
"react-intl": "6.4.1", "react-intl": "6.4.1",
"react-query": "3.39.3", "react-query": "3.39.3",
"react-redux": "8.1.1", "react-redux": "8.1.1",
"redux": "^4.2.1",
"yup": "0.32.9" "yup": "0.32.9"
}, },
"devDependencies": { "devDependencies": {

View File

@ -6303,6 +6303,26 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@reduxjs/toolkit@npm:1.9.7":
version: 1.9.7
resolution: "@reduxjs/toolkit@npm:1.9.7"
dependencies:
immer: ^9.0.21
redux: ^4.2.1
redux-thunk: ^2.4.2
reselect: ^4.1.8
peerDependencies:
react: ^16.9.0 || ^17.0.0 || ^18
react-redux: ^7.2.1 || ^8.0.2
peerDependenciesMeta:
react:
optional: true
react-redux:
optional: true
checksum: ac25dec73a5d2df9fc7fbe98c14ccc73919e5ee1d6f251db0d2ec8f90273f92ef39c26716704bf56b5a40189f72d94b4526dc3a8c7ac3986f5daf44442bcc364
languageName: node
linkType: hard
"@rollup/pluginutils@npm:^5.0.2": "@rollup/pluginutils@npm:^5.0.2":
version: 5.0.2 version: 5.0.2
resolution: "@rollup/pluginutils@npm:5.0.2" resolution: "@rollup/pluginutils@npm:5.0.2"
@ -7399,15 +7419,16 @@ __metadata:
resolution: "@strapi/admin-test-utils@workspace:packages/admin-test-utils" resolution: "@strapi/admin-test-utils@workspace:packages/admin-test-utils"
dependencies: dependencies:
"@juggle/resize-observer": 3.4.0 "@juggle/resize-observer": 3.4.0
"@reduxjs/toolkit": 1.9.7
"@strapi/pack-up": "workspace:*" "@strapi/pack-up": "workspace:*"
"@testing-library/jest-dom": 5.16.5 "@testing-library/jest-dom": 5.16.5
eslint-config-custom: 4.14.4 eslint-config-custom: 4.14.4
jest-styled-components: 7.1.1 jest-styled-components: 7.1.1
redux: ^4.2.1
tsconfig: 4.14.4 tsconfig: 4.14.4
whatwg-fetch: 3.6.2 whatwg-fetch: 3.6.2
peerDependencies: peerDependencies:
redux: ^4.2.1 "@reduxjs/toolkit": ^1.9.7
"@testing-library/jest-dom": ^5.16.5
languageName: unknown languageName: unknown
linkType: soft linkType: soft
@ -7418,6 +7439,7 @@ __metadata:
"@casl/ability": 6.5.0 "@casl/ability": 6.5.0
"@pmmmwh/react-refresh-webpack-plugin": 0.5.10 "@pmmmwh/react-refresh-webpack-plugin": 0.5.10
"@radix-ui/react-toolbar": 1.0.4 "@radix-ui/react-toolbar": 1.0.4
"@reduxjs/toolkit": 1.9.7
"@strapi/admin-test-utils": 4.14.4 "@strapi/admin-test-utils": 4.14.4
"@strapi/data-transfer": 4.14.4 "@strapi/data-transfer": 4.14.4
"@strapi/design-system": 1.12.2 "@strapi/design-system": 1.12.2
@ -7497,7 +7519,6 @@ __metadata:
react-router-dom: 5.3.4 react-router-dom: 5.3.4
react-select: 5.7.0 react-select: 5.7.0
react-window: 1.8.8 react-window: 1.8.8
redux: ^4.2.1
reselect: 4.1.7 reselect: 4.1.7
rimraf: 3.0.2 rimraf: 3.0.2
sanitize-html: 2.11.0 sanitize-html: 2.11.0
@ -7877,7 +7898,6 @@ __metadata:
react-intl: 6.4.1 react-intl: 6.4.1
react-redux: 8.1.1 react-redux: 8.1.1
react-router-dom: 5.3.4 react-router-dom: 5.3.4
redux: ^4.2.1
reselect: 4.1.7 reselect: 4.1.7
styled-components: 5.3.3 styled-components: 5.3.3
yup: 0.32.9 yup: 0.32.9
@ -8003,6 +8023,7 @@ __metadata:
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@strapi/plugin-i18n@workspace:packages/plugins/i18n" resolution: "@strapi/plugin-i18n@workspace:packages/plugins/i18n"
dependencies: dependencies:
"@reduxjs/toolkit": 1.9.7
"@strapi/design-system": 1.12.2 "@strapi/design-system": 1.12.2
"@strapi/helper-plugin": 4.14.4 "@strapi/helper-plugin": 4.14.4
"@strapi/icons": 1.12.2 "@strapi/icons": 1.12.2
@ -8020,7 +8041,6 @@ __metadata:
react-query: 3.39.3 react-query: 3.39.3
react-redux: 8.1.1 react-redux: 8.1.1
react-router-dom: 5.3.4 react-router-dom: 5.3.4
redux: ^4.2.1
styled-components: 5.3.3 styled-components: 5.3.3
yup: 0.32.9 yup: 0.32.9
peerDependencies: peerDependencies:
@ -19164,7 +19184,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"immer@npm:^9.0.6": "immer@npm:^9.0.21, immer@npm:^9.0.6":
version: 9.0.21 version: 9.0.21
resolution: "immer@npm:9.0.21" resolution: "immer@npm:9.0.21"
checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432 checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432
@ -27514,6 +27534,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"redux-thunk@npm:^2.4.2":
version: 2.4.2
resolution: "redux-thunk@npm:2.4.2"
peerDependencies:
redux: ^4
checksum: c7f757f6c383b8ec26152c113e20087818d18ed3edf438aaad43539e9a6b77b427ade755c9595c4a163b6ad3063adf3497e5fe6a36c68884eb1f1cfb6f049a5c
languageName: node
linkType: hard
"redux@npm:^4.1.2": "redux@npm:^4.1.2":
version: 4.2.0 version: 4.2.0
resolution: "redux@npm:4.2.0" resolution: "redux@npm:4.2.0"
@ -27867,6 +27896,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"reselect@npm:^4.1.8":
version: 4.1.8
resolution: "reselect@npm:4.1.8"
checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e
languageName: node
linkType: hard
"resolve-alpn@npm:^1.0.0": "resolve-alpn@npm:^1.0.0":
version: 1.2.1 version: 1.2.1
resolution: "resolve-alpn@npm:1.2.1" resolution: "resolve-alpn@npm:1.2.1"