@elementor/store 0.3.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 +11 -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 +2 -2
- package/src/__tests__/store.test.tsx +15 -12
- package/src/index.ts +5 -11
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
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
|
+
|
|
6
17
|
# 0.3.0 (2023-06-01)
|
|
7
18
|
|
|
8
19
|
|
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/",
|
|
@@ -38,5 +38,5 @@
|
|
|
38
38
|
"@reduxjs/toolkit": "^1.9.1",
|
|
39
39
|
"react-redux": "^8.0.5"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "753851e1a5003eb1ea5349b76d96c75f70e0a594"
|
|
42
42
|
}
|
|
@@ -4,7 +4,8 @@ import { renderHook } from '@testing-library/react';
|
|
|
4
4
|
import {
|
|
5
5
|
createStore,
|
|
6
6
|
getStore,
|
|
7
|
-
|
|
7
|
+
createSlice,
|
|
8
|
+
registerSlice,
|
|
8
9
|
addMiddleware,
|
|
9
10
|
dispatch,
|
|
10
11
|
deleteStore,
|
|
@@ -26,7 +27,7 @@ interface Config {
|
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
const createStoreEntities = ( { initialValue = 1 }: Config = {} ) => {
|
|
29
|
-
const slice =
|
|
30
|
+
const slice = createSlice( {
|
|
30
31
|
name: 'slice',
|
|
31
32
|
initialState: {
|
|
32
33
|
value: initialValue,
|
|
@@ -38,6 +39,8 @@ const createStoreEntities = ( { initialValue = 1 }: Config = {} ) => {
|
|
|
38
39
|
},
|
|
39
40
|
} );
|
|
40
41
|
|
|
42
|
+
registerSlice( slice );
|
|
43
|
+
|
|
41
44
|
const store = createStore();
|
|
42
45
|
|
|
43
46
|
const wrapper = ( { children }: PropsWithChildren ) => (
|
|
@@ -83,7 +86,7 @@ describe( '@elementor/store', () => {
|
|
|
83
86
|
|
|
84
87
|
it( 'should throw an error when trying to add a slice with the same name more than once', () => {
|
|
85
88
|
// Arrange.
|
|
86
|
-
|
|
89
|
+
const slice = createSlice( {
|
|
87
90
|
name: 'slice',
|
|
88
91
|
initialState: {
|
|
89
92
|
value: 1,
|
|
@@ -91,21 +94,17 @@ describe( '@elementor/store', () => {
|
|
|
91
94
|
reducers: {},
|
|
92
95
|
} );
|
|
93
96
|
|
|
97
|
+
registerSlice( slice );
|
|
98
|
+
|
|
94
99
|
// Assert.
|
|
95
100
|
expect( () => {
|
|
96
|
-
|
|
97
|
-
name: 'slice',
|
|
98
|
-
initialState: {
|
|
99
|
-
value: 1,
|
|
100
|
-
},
|
|
101
|
-
reducers: {},
|
|
102
|
-
} );
|
|
101
|
+
registerSlice( slice );
|
|
103
102
|
} ).toThrow( 'Slice with name "slice" already exists.' );
|
|
104
103
|
} );
|
|
105
104
|
|
|
106
105
|
it( 'should throw an error when trying to re-create the store', () => {
|
|
107
106
|
// Arrange.
|
|
108
|
-
|
|
107
|
+
const slice = createSlice( {
|
|
109
108
|
name: 'slice',
|
|
110
109
|
initialState: {
|
|
111
110
|
value: 1,
|
|
@@ -113,6 +112,8 @@ describe( '@elementor/store', () => {
|
|
|
113
112
|
reducers: {},
|
|
114
113
|
} );
|
|
115
114
|
|
|
115
|
+
registerSlice( slice );
|
|
116
|
+
|
|
116
117
|
createStore();
|
|
117
118
|
|
|
118
119
|
// Assert.
|
|
@@ -169,7 +170,7 @@ describe( '@elementor/store', () => {
|
|
|
169
170
|
|
|
170
171
|
it( 'should dispatch an action without using hooks', () => {
|
|
171
172
|
// Arrange.
|
|
172
|
-
const slice =
|
|
173
|
+
const slice = createSlice( {
|
|
173
174
|
name: 'slice',
|
|
174
175
|
initialState: {
|
|
175
176
|
value: 1,
|
|
@@ -181,6 +182,8 @@ describe( '@elementor/store', () => {
|
|
|
181
182
|
},
|
|
182
183
|
} );
|
|
183
184
|
|
|
185
|
+
registerSlice( slice );
|
|
186
|
+
|
|
184
187
|
const store = createStore();
|
|
185
188
|
|
|
186
189
|
// Act.
|
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 );
|