Selaa lähdekoodia

Add `afterLoad` plugin interface

bubble
Kyle Shockey 6 vuotta sitten
vanhempi
commit
c1ae4c133d
3 muutettua tiedostoa jossa 65 lisäystä ja 1 poistoa
  1. +30
    -1
      docs/customization/plugin-api.md
  2. +8
    -0
      src/core/system.js
  3. +27
    -0
      test/core/system/system.js

+ 30
- 1
docs/customization/plugin-api.md Näytä tiedosto

@@ -19,7 +19,8 @@ A plugin return value may contain any of these keys, where `myStateKey` is a nam
},
components: {},
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



+ 8
- 0
src/core/system.js Näytä tiedosto

@@ -68,6 +68,14 @@ export default class Store {
if(rebuild) {
this.buildSystem()
}
if(Array.isArray(plugins)) {
plugins.forEach(plugin => {
if(plugin.afterLoad) {
plugin.afterLoad(this.getSystem())
}
})
}
}

buildSystem(buildReducer=true) {


+ 27
- 0
test/core/system/system.js Näytä tiedosto

@@ -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")
})
})
})

Ladataan…
Peruuta
Tallenna