@elementor/store 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/store.test.tsx +20 -20
- package/src/index.ts +5 -11
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
# [0.4.0](https://github.com/elementor/elementor-packages/compare/@elementor/store@0.3.0...@elementor/store@0.4.0) (2023-06-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **store:** support creating & registering a slice independently [ED-10914] ([#47](https://github.com/elementor/elementor-packages/issues/47)) ([3cac551](https://github.com/elementor/elementor-packages/commit/3cac551d72cc2df6e11c017323559e3e5c4ab12f))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# 0.3.0 (2023-06-01)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* add support for React 18 [ED-10905] ([#46](https://github.com/elementor/elementor-packages/issues/46)) ([c8915c6](https://github.com/elementor/elementor-packages/commit/c8915c6ea62550bcdeb5c8a576f311bedc35bcad))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# 0.2.0 (2023-05-09)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Slice,
|
|
2
|
-
export { Action, AnyAction, CreateSliceOptions, Dispatch, Middleware, MiddlewareAPI, PayloadAction, Slice, Store, createSelector } from '@reduxjs/toolkit';
|
|
1
|
+
import { Slice, Middleware, AnyAction, Store } from '@reduxjs/toolkit';
|
|
2
|
+
export { Action, AnyAction, CreateSliceOptions, Dispatch, Middleware, MiddlewareAPI, PayloadAction, Slice, Store, createSelector, createSlice } from '@reduxjs/toolkit';
|
|
3
3
|
export { Provider as StoreProvider, useDispatch, useSelector } from 'react-redux';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -14,11 +14,11 @@ export { Provider as StoreProvider, useDispatch, useSelector } from 'react-redux
|
|
|
14
14
|
type SliceState<S extends Slice> = {
|
|
15
15
|
[key in S['name']]: ReturnType<S['getInitialState']>;
|
|
16
16
|
};
|
|
17
|
-
declare
|
|
17
|
+
declare function registerSlice(slice: Slice): void;
|
|
18
18
|
declare const addMiddleware: (middleware: Middleware) => void;
|
|
19
19
|
declare const dispatch: (action: AnyAction) => AnyAction | undefined;
|
|
20
20
|
declare const createStore: () => Store<any, AnyAction>;
|
|
21
21
|
declare const getStore: () => Store<any, AnyAction> | null;
|
|
22
22
|
declare const deleteStore: () => void;
|
|
23
23
|
|
|
24
|
-
export { SliceState, addMiddleware,
|
|
24
|
+
export { SliceState, addMiddleware, createStore, deleteStore, dispatch, getStore, registerSlice };
|
package/dist/index.js
CHANGED
|
@@ -22,12 +22,13 @@ var src_exports = {};
|
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
StoreProvider: () => import_react_redux.Provider,
|
|
24
24
|
addMiddleware: () => addMiddleware,
|
|
25
|
-
addSlice: () => addSlice,
|
|
26
25
|
createSelector: () => import_toolkit2.createSelector,
|
|
26
|
+
createSlice: () => import_toolkit2.createSlice,
|
|
27
27
|
createStore: () => createStore,
|
|
28
28
|
deleteStore: () => deleteStore,
|
|
29
29
|
dispatch: () => dispatch,
|
|
30
30
|
getStore: () => getStore,
|
|
31
|
+
registerSlice: () => registerSlice,
|
|
31
32
|
useDispatch: () => import_react_redux.useDispatch,
|
|
32
33
|
useSelector: () => import_react_redux.useSelector
|
|
33
34
|
});
|
|
@@ -46,14 +47,12 @@ var getReducers = () => {
|
|
|
46
47
|
}, {});
|
|
47
48
|
return (0, import_toolkit.combineReducers)(reducers);
|
|
48
49
|
};
|
|
49
|
-
|
|
50
|
-
if (slices[
|
|
51
|
-
throw new Error(`Slice with name "${
|
|
50
|
+
function registerSlice(slice) {
|
|
51
|
+
if (slices[slice.name]) {
|
|
52
|
+
throw new Error(`Slice with name "${slice.name}" already exists.`);
|
|
52
53
|
}
|
|
53
|
-
const slice = (0, import_toolkit.createSlice)(sliceConfig);
|
|
54
54
|
slices[slice.name] = slice;
|
|
55
|
-
|
|
56
|
-
};
|
|
55
|
+
}
|
|
57
56
|
var addMiddleware = (middleware) => {
|
|
58
57
|
middlewares.add(middleware);
|
|
59
58
|
};
|
|
@@ -91,12 +90,13 @@ var deleteStore = () => {
|
|
|
91
90
|
0 && (module.exports = {
|
|
92
91
|
StoreProvider,
|
|
93
92
|
addMiddleware,
|
|
94
|
-
addSlice,
|
|
95
93
|
createSelector,
|
|
94
|
+
createSlice,
|
|
96
95
|
createStore,
|
|
97
96
|
deleteStore,
|
|
98
97
|
dispatch,
|
|
99
98
|
getStore,
|
|
99
|
+
registerSlice,
|
|
100
100
|
useDispatch,
|
|
101
101
|
useSelector
|
|
102
102
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n\
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n\tReducersMapObject,\n\tconfigureStore,\n\tcombineReducers,\n\tMiddleware,\n\tStore,\n\tSlice,\n\tAnyAction,\n} from '@reduxjs/toolkit';\n\nexport type {\n\tSlice,\n\tCreateSliceOptions,\n\tPayloadAction,\n\tStore,\n\tDispatch,\n\tAnyAction,\n\tAction,\n\tMiddlewareAPI,\n\tMiddleware,\n} from '@reduxjs/toolkit';\n\nexport { createSelector, createSlice } from '@reduxjs/toolkit';\n\nexport { useSelector, useDispatch, Provider as StoreProvider } from 'react-redux';\n\n/**\n * Usage:\n *\n * const mySlice = addSlice( ... );\n *\n * type MySliceState = SliceState<typeof mySlice>;\n *\n * const value = useSelector( ( state: MySliceState ) => state.mySlice.value );\n */\nexport type SliceState<S extends Slice> = {\n\t[ key in S['name'] ]: ReturnType<S['getInitialState']>;\n}\n\ninterface SlicesMap {\n\t[key: Slice['name']]: Slice;\n}\n\nlet instance: Store | null = null;\nlet slices: SlicesMap = {};\nconst pendingActions: AnyAction[] = [];\nconst middlewares = new Set<Middleware>();\n\nconst getReducers = () => {\n\tconst reducers = Object.entries( slices ).reduce( ( reducersData: ReducersMapObject, [ name, slice ] ) => {\n\t\treducersData[ name ] = slice.reducer;\n\n\t\treturn reducersData;\n\t}, {} );\n\n\treturn combineReducers( reducers );\n};\n\nexport function registerSlice( slice: Slice ) {\n\tif ( slices[ slice.name ] ) {\n\t\tthrow new Error( `Slice with name \"${ slice.name }\" already exists.` );\n\t}\n\n\tslices[ slice.name ] = slice;\n}\n\nexport const addMiddleware = ( middleware: Middleware ) => {\n\tmiddlewares.add( middleware );\n};\n\nexport const dispatch = ( action: AnyAction ) => {\n\tif ( ! instance ) {\n\t\tpendingActions.push( action );\n\n\t\treturn;\n\t}\n\n\treturn instance.dispatch( action );\n};\n\nexport const createStore = () => {\n\tif ( instance ) {\n\t\tthrow new Error( 'The store instance already exists.' );\n\t}\n\n\tinstance = configureStore( {\n\t\treducer: getReducers(),\n\t\tmiddleware: Array.from( middlewares ),\n\t} );\n\n\tif ( pendingActions.length ) {\n\t\tpendingActions.forEach( ( action ) => dispatch( action ) );\n\t\tpendingActions.length = 0;\n\t}\n\n\treturn instance;\n};\n\nexport const getStore = () => {\n\treturn instance;\n};\n\nexport const deleteStore = () => {\n\tinstance = null;\n\tslices = {};\n\tpendingActions.length = 0;\n\tmiddlewares.clear();\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAQO;AAcP,IAAAA,kBAA4C;AAE5C,yBAAoE;AAmBpE,IAAI,WAAyB;AAC7B,IAAI,SAAoB,CAAC;AACzB,IAAM,iBAA8B,CAAC;AACrC,IAAM,cAAc,oBAAI,IAAgB;AAExC,IAAM,cAAc,MAAM;AACzB,QAAM,WAAW,OAAO,QAAS,MAAO,EAAE,OAAQ,CAAE,cAAiC,CAAE,MAAM,KAAM,MAAO;AACzG,iBAAc,IAAK,IAAI,MAAM;AAE7B,WAAO;AAAA,EACR,GAAG,CAAC,CAAE;AAEN,aAAO,gCAAiB,QAAS;AAClC;AAEO,SAAS,cAAe,OAAe;AAC7C,MAAK,OAAQ,MAAM,IAAK,GAAI;AAC3B,UAAM,IAAI,MAAO,oBAAqB,MAAM,uBAAyB;AAAA,EACtE;AAEA,SAAQ,MAAM,IAAK,IAAI;AACxB;AAEO,IAAM,gBAAgB,CAAE,eAA4B;AAC1D,cAAY,IAAK,UAAW;AAC7B;AAEO,IAAM,WAAW,CAAE,WAAuB;AAChD,MAAK,CAAE,UAAW;AACjB,mBAAe,KAAM,MAAO;AAE5B;AAAA,EACD;AAEA,SAAO,SAAS,SAAU,MAAO;AAClC;AAEO,IAAM,cAAc,MAAM;AAChC,MAAK,UAAW;AACf,UAAM,IAAI,MAAO,oCAAqC;AAAA,EACvD;AAEA,iBAAW,+BAAgB;AAAA,IAC1B,SAAS,YAAY;AAAA,IACrB,YAAY,MAAM,KAAM,WAAY;AAAA,EACrC,CAAE;AAEF,MAAK,eAAe,QAAS;AAC5B,mBAAe,QAAS,CAAE,WAAY,SAAU,MAAO,CAAE;AACzD,mBAAe,SAAS;AAAA,EACzB;AAEA,SAAO;AACR;AAEO,IAAM,WAAW,MAAM;AAC7B,SAAO;AACR;AAEO,IAAM,cAAc,MAAM;AAChC,aAAW;AACX,WAAS,CAAC;AACV,iBAAe,SAAS;AACxB,cAAY,MAAM;AACnB;","names":["import_toolkit"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import {
|
|
3
|
-
createSlice,
|
|
4
3
|
configureStore,
|
|
5
4
|
combineReducers
|
|
6
5
|
} from "@reduxjs/toolkit";
|
|
7
|
-
import { createSelector } from "@reduxjs/toolkit";
|
|
6
|
+
import { createSelector, createSlice } from "@reduxjs/toolkit";
|
|
8
7
|
import { useSelector, useDispatch, Provider } from "react-redux";
|
|
9
8
|
var instance = null;
|
|
10
9
|
var slices = {};
|
|
@@ -17,14 +16,12 @@ var getReducers = () => {
|
|
|
17
16
|
}, {});
|
|
18
17
|
return combineReducers(reducers);
|
|
19
18
|
};
|
|
20
|
-
|
|
21
|
-
if (slices[
|
|
22
|
-
throw new Error(`Slice with name "${
|
|
19
|
+
function registerSlice(slice) {
|
|
20
|
+
if (slices[slice.name]) {
|
|
21
|
+
throw new Error(`Slice with name "${slice.name}" already exists.`);
|
|
23
22
|
}
|
|
24
|
-
const slice = createSlice(sliceConfig);
|
|
25
23
|
slices[slice.name] = slice;
|
|
26
|
-
|
|
27
|
-
};
|
|
24
|
+
}
|
|
28
25
|
var addMiddleware = (middleware) => {
|
|
29
26
|
middlewares.add(middleware);
|
|
30
27
|
};
|
|
@@ -61,12 +58,13 @@ var deleteStore = () => {
|
|
|
61
58
|
export {
|
|
62
59
|
Provider as StoreProvider,
|
|
63
60
|
addMiddleware,
|
|
64
|
-
addSlice,
|
|
65
61
|
createSelector,
|
|
62
|
+
createSlice,
|
|
66
63
|
createStore,
|
|
67
64
|
deleteStore,
|
|
68
65
|
dispatch,
|
|
69
66
|
getStore,
|
|
67
|
+
registerSlice,
|
|
70
68
|
useDispatch,
|
|
71
69
|
useSelector
|
|
72
70
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n\
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n\tReducersMapObject,\n\tconfigureStore,\n\tcombineReducers,\n\tMiddleware,\n\tStore,\n\tSlice,\n\tAnyAction,\n} from '@reduxjs/toolkit';\n\nexport type {\n\tSlice,\n\tCreateSliceOptions,\n\tPayloadAction,\n\tStore,\n\tDispatch,\n\tAnyAction,\n\tAction,\n\tMiddlewareAPI,\n\tMiddleware,\n} from '@reduxjs/toolkit';\n\nexport { createSelector, createSlice } from '@reduxjs/toolkit';\n\nexport { useSelector, useDispatch, Provider as StoreProvider } from 'react-redux';\n\n/**\n * Usage:\n *\n * const mySlice = addSlice( ... );\n *\n * type MySliceState = SliceState<typeof mySlice>;\n *\n * const value = useSelector( ( state: MySliceState ) => state.mySlice.value );\n */\nexport type SliceState<S extends Slice> = {\n\t[ key in S['name'] ]: ReturnType<S['getInitialState']>;\n}\n\ninterface SlicesMap {\n\t[key: Slice['name']]: Slice;\n}\n\nlet instance: Store | null = null;\nlet slices: SlicesMap = {};\nconst pendingActions: AnyAction[] = [];\nconst middlewares = new Set<Middleware>();\n\nconst getReducers = () => {\n\tconst reducers = Object.entries( slices ).reduce( ( reducersData: ReducersMapObject, [ name, slice ] ) => {\n\t\treducersData[ name ] = slice.reducer;\n\n\t\treturn reducersData;\n\t}, {} );\n\n\treturn combineReducers( reducers );\n};\n\nexport function registerSlice( slice: Slice ) {\n\tif ( slices[ slice.name ] ) {\n\t\tthrow new Error( `Slice with name \"${ slice.name }\" already exists.` );\n\t}\n\n\tslices[ slice.name ] = slice;\n}\n\nexport const addMiddleware = ( middleware: Middleware ) => {\n\tmiddlewares.add( middleware );\n};\n\nexport const dispatch = ( action: AnyAction ) => {\n\tif ( ! instance ) {\n\t\tpendingActions.push( action );\n\n\t\treturn;\n\t}\n\n\treturn instance.dispatch( action );\n};\n\nexport const createStore = () => {\n\tif ( instance ) {\n\t\tthrow new Error( 'The store instance already exists.' );\n\t}\n\n\tinstance = configureStore( {\n\t\treducer: getReducers(),\n\t\tmiddleware: Array.from( middlewares ),\n\t} );\n\n\tif ( pendingActions.length ) {\n\t\tpendingActions.forEach( ( action ) => dispatch( action ) );\n\t\tpendingActions.length = 0;\n\t}\n\n\treturn instance;\n};\n\nexport const getStore = () => {\n\treturn instance;\n};\n\nexport const deleteStore = () => {\n\tinstance = null;\n\tslices = {};\n\tpendingActions.length = 0;\n\tmiddlewares.clear();\n};\n"],"mappings":";AAAA;AAAA,EAEC;AAAA,EACA;AAAA,OAKM;AAcP,SAAS,gBAAgB,mBAAmB;AAE5C,SAAS,aAAa,aAAyB,gBAAqB;AAmBpE,IAAI,WAAyB;AAC7B,IAAI,SAAoB,CAAC;AACzB,IAAM,iBAA8B,CAAC;AACrC,IAAM,cAAc,oBAAI,IAAgB;AAExC,IAAM,cAAc,MAAM;AACzB,QAAM,WAAW,OAAO,QAAS,MAAO,EAAE,OAAQ,CAAE,cAAiC,CAAE,MAAM,KAAM,MAAO;AACzG,iBAAc,IAAK,IAAI,MAAM;AAE7B,WAAO;AAAA,EACR,GAAG,CAAC,CAAE;AAEN,SAAO,gBAAiB,QAAS;AAClC;AAEO,SAAS,cAAe,OAAe;AAC7C,MAAK,OAAQ,MAAM,IAAK,GAAI;AAC3B,UAAM,IAAI,MAAO,oBAAqB,MAAM,uBAAyB;AAAA,EACtE;AAEA,SAAQ,MAAM,IAAK,IAAI;AACxB;AAEO,IAAM,gBAAgB,CAAE,eAA4B;AAC1D,cAAY,IAAK,UAAW;AAC7B;AAEO,IAAM,WAAW,CAAE,WAAuB;AAChD,MAAK,CAAE,UAAW;AACjB,mBAAe,KAAM,MAAO;AAE5B;AAAA,EACD;AAEA,SAAO,SAAS,SAAU,MAAO;AAClC;AAEO,IAAM,cAAc,MAAM;AAChC,MAAK,UAAW;AACf,UAAM,IAAI,MAAO,oCAAqC;AAAA,EACvD;AAEA,aAAW,eAAgB;AAAA,IAC1B,SAAS,YAAY;AAAA,IACrB,YAAY,MAAM,KAAM,WAAY;AAAA,EACrC,CAAE;AAEF,MAAK,eAAe,QAAS;AAC5B,mBAAe,QAAS,CAAE,WAAY,SAAU,MAAO,CAAE;AACzD,mBAAe,SAAS;AAAA,EACzB;AAEA,SAAO;AACR;AAEO,IAAM,WAAW,MAAM;AAC7B,SAAO;AACR;AAEO,IAAM,cAAc,MAAM;AAChC,aAAW;AACX,WAAS,CAAC;AACV,iBAAe,SAAS;AACxB,cAAY,MAAM;AACnB;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/store",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
|
-
"react": "17.x"
|
|
35
|
+
"react": "17.x || 18.x"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@reduxjs/toolkit": "^1.9.1",
|
|
39
39
|
"react-redux": "^8.0.5"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "753851e1a5003eb1ea5349b76d96c75f70e0a594"
|
|
42
42
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { PropsWithChildren } from 'react';
|
|
3
|
+
import { renderHook } from '@testing-library/react';
|
|
3
4
|
import {
|
|
4
5
|
createStore,
|
|
5
6
|
getStore,
|
|
6
|
-
|
|
7
|
+
createSlice,
|
|
8
|
+
registerSlice,
|
|
7
9
|
addMiddleware,
|
|
8
10
|
dispatch,
|
|
9
11
|
deleteStore,
|
|
@@ -25,7 +27,7 @@ interface Config {
|
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
const createStoreEntities = ( { initialValue = 1 }: Config = {} ) => {
|
|
28
|
-
const slice =
|
|
30
|
+
const slice = createSlice( {
|
|
29
31
|
name: 'slice',
|
|
30
32
|
initialState: {
|
|
31
33
|
value: initialValue,
|
|
@@ -37,9 +39,11 @@ const createStoreEntities = ( { initialValue = 1 }: Config = {} ) => {
|
|
|
37
39
|
},
|
|
38
40
|
} );
|
|
39
41
|
|
|
42
|
+
registerSlice( slice );
|
|
43
|
+
|
|
40
44
|
const store = createStore();
|
|
41
45
|
|
|
42
|
-
const wrapper
|
|
46
|
+
const wrapper = ( { children }: PropsWithChildren ) => (
|
|
43
47
|
<StoreProvider store={ store }>
|
|
44
48
|
{ children }
|
|
45
49
|
</StoreProvider>
|
|
@@ -82,7 +86,7 @@ describe( '@elementor/store', () => {
|
|
|
82
86
|
|
|
83
87
|
it( 'should throw an error when trying to add a slice with the same name more than once', () => {
|
|
84
88
|
// Arrange.
|
|
85
|
-
|
|
89
|
+
const slice = createSlice( {
|
|
86
90
|
name: 'slice',
|
|
87
91
|
initialState: {
|
|
88
92
|
value: 1,
|
|
@@ -90,21 +94,17 @@ describe( '@elementor/store', () => {
|
|
|
90
94
|
reducers: {},
|
|
91
95
|
} );
|
|
92
96
|
|
|
97
|
+
registerSlice( slice );
|
|
98
|
+
|
|
93
99
|
// Assert.
|
|
94
100
|
expect( () => {
|
|
95
|
-
|
|
96
|
-
name: 'slice',
|
|
97
|
-
initialState: {
|
|
98
|
-
value: 1,
|
|
99
|
-
},
|
|
100
|
-
reducers: {},
|
|
101
|
-
} );
|
|
101
|
+
registerSlice( slice );
|
|
102
102
|
} ).toThrow( 'Slice with name "slice" already exists.' );
|
|
103
103
|
} );
|
|
104
104
|
|
|
105
105
|
it( 'should throw an error when trying to re-create the store', () => {
|
|
106
106
|
// Arrange.
|
|
107
|
-
|
|
107
|
+
const slice = createSlice( {
|
|
108
108
|
name: 'slice',
|
|
109
109
|
initialState: {
|
|
110
110
|
value: 1,
|
|
@@ -112,6 +112,8 @@ describe( '@elementor/store', () => {
|
|
|
112
112
|
reducers: {},
|
|
113
113
|
} );
|
|
114
114
|
|
|
115
|
+
registerSlice( slice );
|
|
116
|
+
|
|
115
117
|
createStore();
|
|
116
118
|
|
|
117
119
|
// Assert.
|
|
@@ -168,7 +170,7 @@ describe( '@elementor/store', () => {
|
|
|
168
170
|
|
|
169
171
|
it( 'should dispatch an action without using hooks', () => {
|
|
170
172
|
// Arrange.
|
|
171
|
-
const slice =
|
|
173
|
+
const slice = createSlice( {
|
|
172
174
|
name: 'slice',
|
|
173
175
|
initialState: {
|
|
174
176
|
value: 1,
|
|
@@ -180,6 +182,8 @@ describe( '@elementor/store', () => {
|
|
|
180
182
|
},
|
|
181
183
|
} );
|
|
182
184
|
|
|
185
|
+
registerSlice( slice );
|
|
186
|
+
|
|
183
187
|
const store = createStore();
|
|
184
188
|
|
|
185
189
|
// Act.
|
|
@@ -223,9 +227,6 @@ describe( '@elementor/store', () => {
|
|
|
223
227
|
|
|
224
228
|
it( 'should delete the added slices', () => {
|
|
225
229
|
// Arrange.
|
|
226
|
-
// Redux sends an error to the console when trying to create a store without slices.
|
|
227
|
-
const spyOnConsoleError = jest.spyOn( console, 'error' ).mockReturnValue( undefined );
|
|
228
|
-
|
|
229
230
|
createStoreEntities();
|
|
230
231
|
|
|
231
232
|
// Act.
|
|
@@ -234,7 +235,7 @@ describe( '@elementor/store', () => {
|
|
|
234
235
|
// Arrange.
|
|
235
236
|
const store = createStore();
|
|
236
237
|
|
|
237
|
-
const wrapper
|
|
238
|
+
const wrapper = ( { children }: PropsWithChildren ) => (
|
|
238
239
|
<StoreProvider store={ store }>
|
|
239
240
|
{ children }
|
|
240
241
|
</StoreProvider>
|
|
@@ -244,8 +245,7 @@ describe( '@elementor/store', () => {
|
|
|
244
245
|
|
|
245
246
|
// Assert.
|
|
246
247
|
expect( result.current ).toBeUndefined();
|
|
247
|
-
|
|
248
|
-
expect( spyOnConsoleError ).toHaveBeenCalled();
|
|
248
|
+
expect( console ).toHaveErrored();
|
|
249
249
|
} );
|
|
250
250
|
|
|
251
251
|
it( 'should delete the added middlewares', () => {
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
createSlice,
|
|
3
2
|
ReducersMapObject,
|
|
4
3
|
configureStore,
|
|
5
4
|
combineReducers,
|
|
@@ -7,7 +6,6 @@ import {
|
|
|
7
6
|
Store,
|
|
8
7
|
Slice,
|
|
9
8
|
AnyAction,
|
|
10
|
-
CreateSliceOptions,
|
|
11
9
|
} from '@reduxjs/toolkit';
|
|
12
10
|
|
|
13
11
|
export type {
|
|
@@ -22,7 +20,7 @@ export type {
|
|
|
22
20
|
Middleware,
|
|
23
21
|
} from '@reduxjs/toolkit';
|
|
24
22
|
|
|
25
|
-
export { createSelector } from '@reduxjs/toolkit';
|
|
23
|
+
export { createSelector, createSlice } from '@reduxjs/toolkit';
|
|
26
24
|
|
|
27
25
|
export { useSelector, useDispatch, Provider as StoreProvider } from 'react-redux';
|
|
28
26
|
|
|
@@ -58,17 +56,13 @@ const getReducers = () => {
|
|
|
58
56
|
return combineReducers( reducers );
|
|
59
57
|
};
|
|
60
58
|
|
|
61
|
-
export
|
|
62
|
-
if ( slices[
|
|
63
|
-
throw new Error( `Slice with name "${
|
|
59
|
+
export function registerSlice( slice: Slice ) {
|
|
60
|
+
if ( slices[ slice.name ] ) {
|
|
61
|
+
throw new Error( `Slice with name "${ slice.name }" already exists.` );
|
|
64
62
|
}
|
|
65
63
|
|
|
66
|
-
const slice = createSlice( sliceConfig );
|
|
67
|
-
|
|
68
64
|
slices[ slice.name ] = slice;
|
|
69
|
-
|
|
70
|
-
return slice;
|
|
71
|
-
} ) as typeof createSlice;
|
|
65
|
+
}
|
|
72
66
|
|
|
73
67
|
export const addMiddleware = ( middleware: Middleware ) => {
|
|
74
68
|
middlewares.add( middleware );
|