492 lines
11 KiB
Markdown
492 lines
11 KiB
Markdown
|
[updux - v1.2.0](../README.md) › [Globals](../globals.md) › [Updux](updux.md)
|
|||
|
|
|||
|
# Class: Updux <**S, A, X, C**>
|
|||
|
|
|||
|
## Type parameters
|
|||
|
|
|||
|
▪ **S**
|
|||
|
|
|||
|
▪ **A**
|
|||
|
|
|||
|
▪ **X**
|
|||
|
|
|||
|
▪ **C**: *[UpduxConfig](../globals.md#upduxconfig)*
|
|||
|
|
|||
|
## Hierarchy
|
|||
|
|
|||
|
* **Updux**
|
|||
|
|
|||
|
## Index
|
|||
|
|
|||
|
### Constructors
|
|||
|
|
|||
|
* [constructor](updux.md#constructor)
|
|||
|
|
|||
|
### Properties
|
|||
|
|
|||
|
* [coduxes](updux.md#coduxes)
|
|||
|
* [groomMutations](updux.md#groommutations)
|
|||
|
* [subduxes](updux.md#subduxes)
|
|||
|
|
|||
|
### Accessors
|
|||
|
|
|||
|
* [_middlewareEntries](updux.md#_middlewareentries)
|
|||
|
* [actions](updux.md#actions)
|
|||
|
* [asDux](updux.md#asdux)
|
|||
|
* [createStore](updux.md#createstore)
|
|||
|
* [initial](updux.md#initial)
|
|||
|
* [middleware](updux.md#middleware)
|
|||
|
* [mutations](updux.md#mutations)
|
|||
|
* [reducer](updux.md#reducer)
|
|||
|
* [selectors](updux.md#selectors)
|
|||
|
* [subduxUpreducer](updux.md#subduxupreducer)
|
|||
|
* [upreducer](updux.md#upreducer)
|
|||
|
|
|||
|
### Methods
|
|||
|
|
|||
|
* [addAction](updux.md#addaction)
|
|||
|
* [addEffect](updux.md#addeffect)
|
|||
|
* [addMutation](updux.md#addmutation)
|
|||
|
* [addSelector](updux.md#addselector)
|
|||
|
|
|||
|
## Constructors
|
|||
|
|
|||
|
### constructor
|
|||
|
|
|||
|
\+ **new Updux**(`config`: C): *[Updux](updux.md)*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type | Default | Description |
|
|||
|
------ | ------ | ------ | ------ |
|
|||
|
`config` | C | {} as C | an [UpduxConfig](../globals.md#upduxconfig) plain object |
|
|||
|
|
|||
|
**Returns:** *[Updux](updux.md)*
|
|||
|
|
|||
|
## Properties
|
|||
|
|
|||
|
### coduxes
|
|||
|
|
|||
|
• **coduxes**: *[Dux](../globals.md#dux)[]*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### groomMutations
|
|||
|
|
|||
|
• **groomMutations**: *function*
|
|||
|
|
|||
|
#### Type declaration:
|
|||
|
|
|||
|
▸ (`mutation`: [Mutation](../globals.md#mutation)‹S›): *[Mutation](../globals.md#mutation)‹S›*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`mutation` | [Mutation](../globals.md#mutation)‹S› |
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### subduxes
|
|||
|
|
|||
|
• **subduxes**: *[Dictionary](../globals.md#dictionary)‹[Dux](../globals.md#dux)›*
|
|||
|
|
|||
|
## Accessors
|
|||
|
|
|||
|
### _middlewareEntries
|
|||
|
|
|||
|
• **get _middlewareEntries**(): *any[]*
|
|||
|
|
|||
|
**Returns:** *any[]*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### actions
|
|||
|
|
|||
|
• **get actions**(): *[DuxActions](../globals.md#duxactions)‹A, C›*
|
|||
|
|
|||
|
Action creators for all actions defined or used in the actions, mutations, effects and subduxes
|
|||
|
of the updux config.
|
|||
|
|
|||
|
Non-custom action creators defined in `actions` have the signature `(payload={},meta={}) => ({type,
|
|||
|
payload,meta})` (with the extra sugar that if `meta` or `payload` are not
|
|||
|
specified, that key won't be present in the produced action).
|
|||
|
|
|||
|
The same action creator can be included
|
|||
|
in multiple subduxes. However, if two different creators
|
|||
|
are included for the same action, an error will be thrown.
|
|||
|
|
|||
|
**`example`**
|
|||
|
|
|||
|
```
|
|||
|
const actions = updux.actions;
|
|||
|
```
|
|||
|
|
|||
|
**Returns:** *[DuxActions](../globals.md#duxactions)‹A, C›*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### asDux
|
|||
|
|
|||
|
• **get asDux**(): *object*
|
|||
|
|
|||
|
Returns a <a href="https://github.com/erikras/ducks-modular-redux">ducks</a>-like
|
|||
|
plain object holding the reducer from the Updux object and all
|
|||
|
its trimmings.
|
|||
|
|
|||
|
**`example`**
|
|||
|
|
|||
|
```
|
|||
|
const {
|
|||
|
createStore,
|
|||
|
upreducer,
|
|||
|
subduxes,
|
|||
|
coduxes,
|
|||
|
middleware,
|
|||
|
actions,
|
|||
|
reducer,
|
|||
|
mutations,
|
|||
|
initial,
|
|||
|
selectors,
|
|||
|
} = myUpdux.asDux;
|
|||
|
```
|
|||
|
|
|||
|
**Returns:** *object*
|
|||
|
|
|||
|
* **actions**: = this.actions
|
|||
|
|
|||
|
* **coduxes**: *object[]* = this.coduxes
|
|||
|
|
|||
|
* **createStore**(): *function*
|
|||
|
|
|||
|
* (`initial?`: S, `injectEnhancer?`: Function): *Store‹S› & object*
|
|||
|
|
|||
|
* **initial**: = this.initial
|
|||
|
|
|||
|
* **middleware**(): *function*
|
|||
|
|
|||
|
* (`api`: UpduxMiddlewareAPI‹S, X›): *function*
|
|||
|
|
|||
|
* (`next`: Function): *function*
|
|||
|
|
|||
|
* (`action`: A): *any*
|
|||
|
|
|||
|
* **mutations**(): *object*
|
|||
|
|
|||
|
* **reducer**(): *function*
|
|||
|
|
|||
|
* (`state`: S | undefined, `action`: [Action](../globals.md#action)): *S*
|
|||
|
|
|||
|
* **selectors**: = this.selectors
|
|||
|
|
|||
|
* **subduxes**(): *object*
|
|||
|
|
|||
|
* **upreducer**(): *function*
|
|||
|
|
|||
|
* (`action`: [Action](../globals.md#action)): *function*
|
|||
|
|
|||
|
* (`state`: S): *S*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### createStore
|
|||
|
|
|||
|
• **get createStore**(): *function*
|
|||
|
|
|||
|
Returns a `createStore` function that takes two argument:
|
|||
|
`initial` and `injectEnhancer`. `initial` is a custom
|
|||
|
initial state for the store, and `injectEnhancer` is a function
|
|||
|
taking in the middleware built by the updux object and allowing
|
|||
|
you to wrap it in any enhancer you want.
|
|||
|
|
|||
|
**`example`**
|
|||
|
|
|||
|
```
|
|||
|
const createStore = updux.createStore;
|
|||
|
|
|||
|
const store = createStore(initial);
|
|||
|
```
|
|||
|
|
|||
|
**Returns:** *function*
|
|||
|
|
|||
|
▸ (`initial?`: S, `injectEnhancer?`: Function): *Store‹S› & object*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`initial?` | S |
|
|||
|
`injectEnhancer?` | Function |
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### initial
|
|||
|
|
|||
|
• **get initial**(): *AggDuxState‹S, C›*
|
|||
|
|
|||
|
**Returns:** *AggDuxState‹S, C›*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### middleware
|
|||
|
|
|||
|
• **get middleware**(): *[UpduxMiddleware](../globals.md#upduxmiddleware)‹AggDuxState‹S, C›, [DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C››*
|
|||
|
|
|||
|
Array of middlewares aggregating all the effects defined in the
|
|||
|
updux and its subduxes. Effects of the updux itself are
|
|||
|
done before the subduxes effects.
|
|||
|
Note that `getState` will always return the state of the
|
|||
|
local updux.
|
|||
|
|
|||
|
**`example`**
|
|||
|
|
|||
|
```
|
|||
|
const middleware = updux.middleware;
|
|||
|
```
|
|||
|
|
|||
|
**Returns:** *[UpduxMiddleware](../globals.md#upduxmiddleware)‹AggDuxState‹S, C›, [DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C››*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### mutations
|
|||
|
|
|||
|
• **get mutations**(): *[Dictionary](../globals.md#dictionary)‹[Mutation](../globals.md#mutation)‹S››*
|
|||
|
|
|||
|
Merge of the updux and subduxes mutations. If an action triggers
|
|||
|
mutations in both the main updux and its subduxes, the subduxes
|
|||
|
mutations will be performed first.
|
|||
|
|
|||
|
**Returns:** *[Dictionary](../globals.md#dictionary)‹[Mutation](../globals.md#mutation)‹S››*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### reducer
|
|||
|
|
|||
|
• **get reducer**(): *function*
|
|||
|
|
|||
|
A Redux reducer generated using the computed initial state and
|
|||
|
mutations.
|
|||
|
|
|||
|
**Returns:** *function*
|
|||
|
|
|||
|
▸ (`state`: S | undefined, `action`: [Action](../globals.md#action)): *S*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`state` | S | undefined |
|
|||
|
`action` | [Action](../globals.md#action) |
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### selectors
|
|||
|
|
|||
|
• **get selectors**(): *[DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C›*
|
|||
|
|
|||
|
A dictionary of the updux's selectors. Subduxes'
|
|||
|
selectors are included as well (with the mapping to the
|
|||
|
sub-state already taken care of you).
|
|||
|
|
|||
|
**Returns:** *[DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C›*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### subduxUpreducer
|
|||
|
|
|||
|
• **get subduxUpreducer**(): *function*
|
|||
|
|
|||
|
Returns the upreducer made of the merge of all sudbuxes reducers, without
|
|||
|
the local mutations. Useful, for example, for sink mutations.
|
|||
|
|
|||
|
**`example`**
|
|||
|
|
|||
|
```
|
|||
|
import todo from './todo'; // updux for a single todo
|
|||
|
import Updux from 'updux';
|
|||
|
import u from 'updeep';
|
|||
|
|
|||
|
const todos = new Updux({ initial: [], subduxes: { '*': todo } });
|
|||
|
todos.addMutation(
|
|||
|
todo.actions.done,
|
|||
|
({todo_id},action) => u.map( u.if( u.is('id',todo_id) ), todos.subduxUpreducer(action) )
|
|||
|
true
|
|||
|
);
|
|||
|
```
|
|||
|
|
|||
|
**Returns:** *function*
|
|||
|
|
|||
|
▸ (`action`: [Action](../globals.md#action)): *function*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`action` | [Action](../globals.md#action) |
|
|||
|
|
|||
|
▸ (`state`: S): *S*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`state` | S |
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### upreducer
|
|||
|
|
|||
|
• **get upreducer**(): *[Upreducer](../globals.md#upreducer)‹S›*
|
|||
|
|
|||
|
**Returns:** *[Upreducer](../globals.md#upreducer)‹S›*
|
|||
|
|
|||
|
## Methods
|
|||
|
|
|||
|
### addAction
|
|||
|
|
|||
|
▸ **addAction**(`theaction`: string, `transform?`: any): *ActionCreator‹string, any›*
|
|||
|
|
|||
|
Adds an action to the updux. It can take an already defined action
|
|||
|
creator, or any arguments that can be passed to `actionCreator`.
|
|||
|
|
|||
|
**`example`**
|
|||
|
```
|
|||
|
const action = updux.addAction( name, ...creatorArgs );
|
|||
|
const action = updux.addAction( otherActionCreator );
|
|||
|
```
|
|||
|
|
|||
|
**`example`**
|
|||
|
```
|
|||
|
import {actionCreator, Updux} from 'updux';
|
|||
|
|
|||
|
const updux = new Updux();
|
|||
|
|
|||
|
const foo = updux.addAction('foo');
|
|||
|
const bar = updux.addAction( 'bar', (x) => ({stuff: x+1}) );
|
|||
|
|
|||
|
const baz = actionCreator( 'baz' );
|
|||
|
|
|||
|
foo({ a: 1}); // => { type: 'foo', payload: { a: 1 } }
|
|||
|
bar(2); // => { type: 'bar', payload: { stuff: 3 } }
|
|||
|
baz(); // => { type: 'baz', payload: undefined }
|
|||
|
```
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`theaction` | string |
|
|||
|
`transform?` | any |
|
|||
|
|
|||
|
**Returns:** *ActionCreator‹string, any›*
|
|||
|
|
|||
|
▸ **addAction**(`theaction`: string | ActionCreator‹any›, `transform?`: undefined): *ActionCreator‹string, any›*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`theaction` | string | ActionCreator‹any› |
|
|||
|
`transform?` | undefined |
|
|||
|
|
|||
|
**Returns:** *ActionCreator‹string, any›*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### addEffect
|
|||
|
|
|||
|
▸ **addEffect**<**AC**>(`creator`: AC, `middleware`: [UpduxMiddleware](../globals.md#upduxmiddleware)‹AggDuxState‹S, C›, [DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C›, ReturnType‹AC››, `isGenerator?`: undefined | false | true): *any*
|
|||
|
|
|||
|
**Type parameters:**
|
|||
|
|
|||
|
▪ **AC**: *ActionCreator*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`creator` | AC |
|
|||
|
`middleware` | [UpduxMiddleware](../globals.md#upduxmiddleware)‹AggDuxState‹S, C›, [DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C›, ReturnType‹AC›› |
|
|||
|
`isGenerator?` | undefined | false | true |
|
|||
|
|
|||
|
**Returns:** *any*
|
|||
|
|
|||
|
▸ **addEffect**(`creator`: string, `middleware`: [UpduxMiddleware](../globals.md#upduxmiddleware)‹AggDuxState‹S, C›, [DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C››, `isGenerator?`: undefined | false | true): *any*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`creator` | string |
|
|||
|
`middleware` | [UpduxMiddleware](../globals.md#upduxmiddleware)‹AggDuxState‹S, C›, [DuxSelectors](../globals.md#duxselectors)‹AggDuxState‹S, C›, X, C›› |
|
|||
|
`isGenerator?` | undefined | false | true |
|
|||
|
|
|||
|
**Returns:** *any*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### addMutation
|
|||
|
|
|||
|
▸ **addMutation**<**A**>(`creator`: A, `mutation`: [Mutation](../globals.md#mutation)‹S, ActionType‹A››, `isSink?`: undefined | false | true): *any*
|
|||
|
|
|||
|
Adds a mutation and its associated action to the updux.
|
|||
|
|
|||
|
**`remarks`**
|
|||
|
|
|||
|
If a local mutation was already associated to the action,
|
|||
|
it will be replaced by the new one.
|
|||
|
|
|||
|
**`example`**
|
|||
|
|
|||
|
```js
|
|||
|
updux.addMutation(
|
|||
|
action('ADD', payload<int>() ),
|
|||
|
inc => state => state + in
|
|||
|
);
|
|||
|
```
|
|||
|
|
|||
|
**Type parameters:**
|
|||
|
|
|||
|
▪ **A**: *ActionCreator*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type | Description |
|
|||
|
------ | ------ | ------ |
|
|||
|
`creator` | A | - |
|
|||
|
`mutation` | [Mutation](../globals.md#mutation)‹S, ActionType‹A›› | - |
|
|||
|
`isSink?` | undefined | false | true | If `true`, disables the subduxes mutations for this action. To conditionally run the subduxes mutations, check out [subduxUpreducer](updux.md#subduxupreducer). Defaults to `false`. |
|
|||
|
|
|||
|
**Returns:** *any*
|
|||
|
|
|||
|
▸ **addMutation**<**A**>(`creator`: string, `mutation`: [Mutation](../globals.md#mutation)‹S, any›, `isSink?`: undefined | false | true): *any*
|
|||
|
|
|||
|
**Type parameters:**
|
|||
|
|
|||
|
▪ **A**: *ActionCreator*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`creator` | string |
|
|||
|
`mutation` | [Mutation](../globals.md#mutation)‹S, any› |
|
|||
|
`isSink?` | undefined | false | true |
|
|||
|
|
|||
|
**Returns:** *any*
|
|||
|
|
|||
|
___
|
|||
|
|
|||
|
### addSelector
|
|||
|
|
|||
|
▸ **addSelector**(`name`: string, `selector`: [Selector](../globals.md#selector)): *void*
|
|||
|
|
|||
|
**Parameters:**
|
|||
|
|
|||
|
Name | Type |
|
|||
|
------ | ------ |
|
|||
|
`name` | string |
|
|||
|
`selector` | [Selector](../globals.md#selector) |
|
|||
|
|
|||
|
**Returns:** *void*
|