@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 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, createSlice, Middleware, AnyAction, Store } from '@reduxjs/toolkit';
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 const addSlice: typeof createSlice;
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, addSlice, createStore, deleteStore, dispatch, getStore };
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
- var addSlice = (sliceConfig) => {
50
- if (slices[sliceConfig.name]) {
51
- throw new Error(`Slice with name "${sliceConfig.name}" already exists.`);
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
- return slice;
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\tcreateSlice,\n\tReducersMapObject,\n\tconfigureStore,\n\tcombineReducers,\n\tMiddleware,\n\tStore,\n\tSlice,\n\tAnyAction,\n\tCreateSliceOptions,\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 } 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 const addSlice = ( ( sliceConfig: CreateSliceOptions ) => {\n\tif ( slices[ sliceConfig.name ] ) {\n\t\tthrow new Error( `Slice with name \"${ sliceConfig.name }\" already exists.` );\n\t}\n\n\tconst slice = createSlice( sliceConfig );\n\n\tslices[ slice.name ] = slice;\n\n\treturn slice;\n} ) as typeof createSlice;\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,qBAUO;AAcP,IAAAA,kBAA+B;AAE/B,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,IAAM,WAAa,CAAE,gBAAqC;AAChE,MAAK,OAAQ,YAAY,IAAK,GAAI;AACjC,UAAM,IAAI,MAAO,oBAAqB,YAAY,uBAAyB;AAAA,EAC5E;AAEA,QAAM,YAAQ,4BAAa,WAAY;AAEvC,SAAQ,MAAM,IAAK,IAAI;AAEvB,SAAO;AACR;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"]}
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
- var addSlice = (sliceConfig) => {
21
- if (slices[sliceConfig.name]) {
22
- throw new Error(`Slice with name "${sliceConfig.name}" already exists.`);
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
- return slice;
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
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n\tcreateSlice,\n\tReducersMapObject,\n\tconfigureStore,\n\tcombineReducers,\n\tMiddleware,\n\tStore,\n\tSlice,\n\tAnyAction,\n\tCreateSliceOptions,\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 } 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 const addSlice = ( ( sliceConfig: CreateSliceOptions ) => {\n\tif ( slices[ sliceConfig.name ] ) {\n\t\tthrow new Error( `Slice with name \"${ sliceConfig.name }\" already exists.` );\n\t}\n\n\tconst slice = createSlice( sliceConfig );\n\n\tslices[ slice.name ] = slice;\n\n\treturn slice;\n} ) as typeof createSlice;\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,EACC;AAAA,EAEA;AAAA,EACA;AAAA,OAMM;AAcP,SAAS,sBAAsB;AAE/B,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,IAAM,WAAa,CAAE,gBAAqC;AAChE,MAAK,OAAQ,YAAY,IAAK,GAAI;AACjC,UAAM,IAAI,MAAO,oBAAqB,YAAY,uBAAyB;AAAA,EAC5E;AAEA,QAAM,QAAQ,YAAa,WAAY;AAEvC,SAAQ,MAAM,IAAK,IAAI;AAEvB,SAAO;AACR;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":[]}
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.2.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": "f93a1ed5350b151f17d65b21b0b43398774dccc5"
41
+ "gitHead": "753851e1a5003eb1ea5349b76d96c75f70e0a594"
42
42
  }
@@ -1,9 +1,11 @@
1
1
  import * as React from 'react';
2
- import { renderHook } from '@testing-library/react-hooks';
2
+ import { PropsWithChildren } from 'react';
3
+ import { renderHook } from '@testing-library/react';
3
4
  import {
4
5
  createStore,
5
6
  getStore,
6
- addSlice,
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 = addSlice( {
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: React.FC = ( { children } ) => (
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
- addSlice( {
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
- addSlice( {
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
- addSlice( {
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 = addSlice( {
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: React.FC = ( { children } ) => (
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 const addSlice = ( ( sliceConfig: CreateSliceOptions ) => {
62
- if ( slices[ sliceConfig.name ] ) {
63
- throw new Error( `Slice with name "${ sliceConfig.name }" already exists.` );
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 );