@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 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, 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.3.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": "2ee431a07ec6af6ca2b9930c0b830e78696b194a"
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
- addSlice,
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 = addSlice( {
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
- addSlice( {
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
- addSlice( {
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
- addSlice( {
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 = addSlice( {
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 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 );