Add afterLoad plugin interface
This commit is contained in:
@@ -19,7 +19,8 @@ A plugin return value may contain any of these keys, where `myStateKey` is a nam
|
|||||||
},
|
},
|
||||||
components: {},
|
components: {},
|
||||||
wrapComponents: {},
|
wrapComponents: {},
|
||||||
fn: {}
|
afterLoad: (system) => {}
|
||||||
|
fn: {},
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -363,7 +364,35 @@ const MyWrapComponentPlugin = function(system) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### `afterLoad`
|
||||||
|
|
||||||
|
The `afterLoad` plugin method allows you to get a reference to the system after your plugin has been registered with the system.
|
||||||
|
|
||||||
|
This interface is used in the core code to attach methods that are driven by bound selectors or actions directly to the system.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const MyMethodProvidingPlugin = function() {
|
||||||
|
return {
|
||||||
|
afterLoad(system) {
|
||||||
|
// at this point in time, your actions have been bound into the system
|
||||||
|
// so you can do things with them
|
||||||
|
system.myMethod = system.exampleActions.updateFavoriteColor
|
||||||
|
},
|
||||||
|
statePlugins: {
|
||||||
|
example: {
|
||||||
|
actions: {
|
||||||
|
updateFavoriteColor: (str) => {
|
||||||
|
return {
|
||||||
|
type: "EXAMPLE_SET_FAV_COLOR",
|
||||||
|
payload: str
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
##### fn
|
##### fn
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,14 @@ export default class Store {
|
|||||||
if(rebuild) {
|
if(rebuild) {
|
||||||
this.buildSystem()
|
this.buildSystem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Array.isArray(plugins)) {
|
||||||
|
plugins.forEach(plugin => {
|
||||||
|
if(plugin.afterLoad) {
|
||||||
|
plugin.afterLoad(this.getSystem())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buildSystem(buildReducer=true) {
|
buildSystem(buildReducer=true) {
|
||||||
|
|||||||
@@ -683,4 +683,31 @@ describe("bound system", function(){
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("afterLoad", function() {
|
||||||
|
it("should call an plugin's `afterLoad` method after the plugin is loaded", function() {
|
||||||
|
// Given
|
||||||
|
const system = new System({
|
||||||
|
plugins: [
|
||||||
|
{
|
||||||
|
afterLoad(system) {
|
||||||
|
system.wow = system.dogeSelectors.wow
|
||||||
|
},
|
||||||
|
statePlugins: {
|
||||||
|
doge: {
|
||||||
|
selectors: {
|
||||||
|
wow: () => (system) => {
|
||||||
|
return "so selective"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
// When
|
||||||
|
var res = system.getSystem().wow()
|
||||||
|
expect(res).toEqual("so selective")
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user