Merge branch 'sink-mutations'
This commit is contained in:
commit
74d29d3126
5
Changes
5
Changes
@ -1,5 +1,10 @@
|
|||||||
# Revision history for Updux
|
# Revision history for Updux
|
||||||
|
|
||||||
|
1.1.0 2019-11-05
|
||||||
|
- Document mapping behavior of the '*' subdux.
|
||||||
|
- add subduxUpreducer.
|
||||||
|
- add sink mutations.
|
||||||
|
|
||||||
1.0.0 2019-11-04
|
1.0.0 2019-11-04
|
||||||
- Pretty big rework.
|
- Pretty big rework.
|
||||||
- Better documentation.
|
- Better documentation.
|
||||||
|
53
README.md
53
README.md
@ -123,6 +123,59 @@ const {
|
|||||||
} = updux;
|
} = updux;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Mapping a mutation to all values of a state
|
||||||
|
|
||||||
|
Say you have a `todos` state that is an array of `todo` sub-states. It's easy
|
||||||
|
enough to have the main reducer maps away all items to the sub-reducer:
|
||||||
|
|
||||||
|
```
|
||||||
|
const todo = new Updux({
|
||||||
|
mutations: {
|
||||||
|
review: () => u({ reviewed: true}),
|
||||||
|
done: () => u({done: true}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const todos = new Updux({ initial: [] });
|
||||||
|
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.review,
|
||||||
|
(_,action) => state => state.map( todo.upreducer(action) )
|
||||||
|
);
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.done,
|
||||||
|
(id,action) => u.map(u.if(u.is('id',id), todo.upreducer(action))),
|
||||||
|
);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
But `updeep` can iterate through all the items of an array (or the values of
|
||||||
|
an object) via the special key `*`. So the todos updux above could also be
|
||||||
|
written:
|
||||||
|
|
||||||
|
```
|
||||||
|
const todo = new Updux({
|
||||||
|
mutations: {
|
||||||
|
review: () => u({ reviewed: true}),
|
||||||
|
done: () => u({done: true}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const todos = new Updux({
|
||||||
|
subduxes: { '*': todo },
|
||||||
|
});
|
||||||
|
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.done,
|
||||||
|
(id,action) => u.map(u.if(u.is('id',id), todo.upreducer(action))),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
The advantages being that the actions/mutations/effects of the subdux will be
|
||||||
|
imported by the root updux as usual, and all actions that aren't being
|
||||||
|
overridden by a sink mutation will trickle down automatically.
|
||||||
|
|
||||||
## Usage with Immer
|
## Usage with Immer
|
||||||
|
|
||||||
While Updux was created with Updeep in mind, it also plays very
|
While Updux was created with Updeep in mind, it also plays very
|
||||||
|
2
dist/buildMutations/index.d.ts
vendored
2
dist/buildMutations/index.d.ts
vendored
@ -1,5 +1,5 @@
|
|||||||
/// <reference types="lodash" />
|
/// <reference types="lodash" />
|
||||||
import { Mutation, Action, Dictionary } from '../types';
|
import { Mutation, Action, Dictionary } from '../types';
|
||||||
declare function buildMutations(mutations?: Dictionary<Mutation>, subduxes?: {}): import("lodash").Dictionary<Mutation<any, Action<string, any>>>;
|
declare function buildMutations(mutations?: Dictionary<Mutation | ([Mutation, boolean | undefined])>, subduxes?: {}): import("lodash").Dictionary<Mutation<any, Action<string, any>>>;
|
||||||
export default buildMutations;
|
export default buildMutations;
|
||||||
//# sourceMappingURL=index.d.ts.map
|
//# sourceMappingURL=index.d.ts.map
|
2
dist/buildMutations/index.d.ts.map
vendored
2
dist/buildMutations/index.d.ts.map
vendored
@ -1 +1 @@
|
|||||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/buildMutations/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAWtD,iBAAS,cAAc,CACnB,SAAS,GAAE,UAAU,CAAC,QAAQ,CAAM,EACpC,QAAQ,KAAK,mEAgDhB;AAED,eAAe,cAAc,CAAC"}
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/buildMutations/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAWtD,iBAAS,cAAc,CACnB,SAAS,GAAE,UAAU,CAAC,QAAQ,GAAC,CAAC,CAAC,QAAQ,EAAC,OAAO,GAAC,SAAS,CAAC,CAAC,CAAM,EACnE,QAAQ,KAAK,mEAyDhB;AAED,eAAe,cAAc,CAAC"}
|
16
dist/buildMutations/index.js
vendored
16
dist/buildMutations/index.js
vendored
@ -20,12 +20,24 @@ function buildMutations(mutations = {}, subduxes = {}) {
|
|||||||
});
|
});
|
||||||
nonGlobby.forEach(([slice, { mutations = {}, reducer = {} }]) => {
|
nonGlobby.forEach(([slice, { mutations = {}, reducer = {} }]) => {
|
||||||
Object.entries(mutations).forEach(([type, mutation]) => {
|
Object.entries(mutations).forEach(([type, mutation]) => {
|
||||||
const localized = (payload = null, action) => updeep_1.default.updateIn(slice)(mutation(payload, action));
|
const localized = (payload = null, action) => {
|
||||||
|
return updeep_1.default.updateIn(slice)(mutation(payload, action));
|
||||||
|
};
|
||||||
mergedMutations[type].push(localized);
|
mergedMutations[type].push(localized);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
Object.entries(mutations).forEach(([type, mutation]) => {
|
Object.entries(mutations).forEach(([type, mutation]) => {
|
||||||
mergedMutations[type].push(mutation);
|
if (Array.isArray(mutation)) {
|
||||||
|
if (mutation[1]) {
|
||||||
|
mergedMutations[type] = [
|
||||||
|
mutation[0]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mergedMutations[type].push(mutation[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mergedMutations[type].push(mutation);
|
||||||
});
|
});
|
||||||
return fp_1.default.mapValues(composeMutations)(mergedMutations);
|
return fp_1.default.mapValues(composeMutations)(mergedMutations);
|
||||||
}
|
}
|
||||||
|
2
dist/buildMutations/index.js.map
vendored
2
dist/buildMutations/index.js.map
vendored
@ -1 +1 @@
|
|||||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/buildMutations/index.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/buildMutations/index.ts"],"names":[],"mappings":"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"}
|
2
dist/mappedUpdux.test.d.ts
vendored
Normal file
2
dist/mappedUpdux.test.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export {};
|
||||||
|
//# sourceMappingURL=mappedUpdux.test.d.ts.map
|
1
dist/mappedUpdux.test.d.ts.map
vendored
Normal file
1
dist/mappedUpdux.test.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"mappedUpdux.test.d.ts","sourceRoot":"","sources":["../src/mappedUpdux.test.ts"],"names":[],"mappings":""}
|
28
dist/mappedUpdux.test.js
vendored
Normal file
28
dist/mappedUpdux.test.js
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const updux_1 = __importDefault(require("./updux"));
|
||||||
|
const updeep_1 = __importDefault(require("updeep"));
|
||||||
|
const todo = new updux_1.default({
|
||||||
|
mutations: {
|
||||||
|
review: () => updeep_1.default({ reviewed: true }),
|
||||||
|
done: () => updeep_1.default({ done: true }),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const todos = new updux_1.default({
|
||||||
|
subduxes: { '*': todo },
|
||||||
|
});
|
||||||
|
todos.addMutation(todo.actions.done, (id, action) => updeep_1.default.map(updeep_1.default.if(updeep_1.default.is('id', id), todo.upreducer(action))), true);
|
||||||
|
test('* for mapping works', () => {
|
||||||
|
const reducer = todos.reducer;
|
||||||
|
let state = [{ id: 0 }, { id: 1 }];
|
||||||
|
state = reducer(state, todos.actions.review());
|
||||||
|
state = reducer(state, todos.actions.done(1));
|
||||||
|
expect(state).toEqual([
|
||||||
|
{ id: 0, reviewed: true },
|
||||||
|
{ id: 1, reviewed: true, done: true },
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
//# sourceMappingURL=mappedUpdux.test.js.map
|
1
dist/mappedUpdux.test.js.map
vendored
Normal file
1
dist/mappedUpdux.test.js.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"mappedUpdux.test.js","sourceRoot":"","sources":["../src/mappedUpdux.test.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,oDAAuB;AAEvB,MAAM,IAAI,GAAG,IAAI,eAAK,CAAC;IACnB,SAAS,EAAE;QACP,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;QAClC,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;KAC9B;CACJ,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,IAAI,eAAK,CAAC;IACpB,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;CAC1B,CAAC,CAAC;AAEH,KAAK,CAAC,WAAW,CACb,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAC,MAAM,EAAE,EAAE,CAAC,gBAAC,CAAC,GAAG,CAAC,gBAAC,CAAC,EAAE,CAAC,gBAAC,CAAC,EAAE,CAAC,IAAI,EAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAC7F,CAAC;AAEF,IAAI,CAAE,qBAAqB,EAAE,GAAG,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAE,CAAC;IACpC,KAAK,GAAG,OAAO,CAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAE,CAAC;IACjD,KAAK,GAAG,OAAO,CAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;IAEhD,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzB,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;KACxC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
2
dist/sink.test.d.ts
vendored
Normal file
2
dist/sink.test.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export {};
|
||||||
|
//# sourceMappingURL=sink.test.d.ts.map
|
1
dist/sink.test.d.ts.map
vendored
Normal file
1
dist/sink.test.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sink.test.d.ts","sourceRoot":"","sources":["../src/sink.test.ts"],"names":[],"mappings":""}
|
46
dist/sink.test.js
vendored
Normal file
46
dist/sink.test.js
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const updux_1 = __importDefault(require("./updux"));
|
||||||
|
const foo = new updux_1.default({
|
||||||
|
initial: 0,
|
||||||
|
mutations: {
|
||||||
|
doIt: () => (state) => {
|
||||||
|
return state + 1;
|
||||||
|
},
|
||||||
|
doTheThing: () => (state) => {
|
||||||
|
return state + 3;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const bar = new updux_1.default({
|
||||||
|
subduxes: { foo },
|
||||||
|
});
|
||||||
|
bar.addMutation(foo.actions.doTheThing, (_, action) => state => {
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
baz: bar.subduxUpreducer(action)(state),
|
||||||
|
};
|
||||||
|
}, true);
|
||||||
|
bar.addMutation(foo.actions.doIt, () => (state) => ({ ...state, bar: 'yay' }), true);
|
||||||
|
test('initial', () => {
|
||||||
|
expect(bar.initial).toEqual({ foo: 0 });
|
||||||
|
});
|
||||||
|
test('foo alone', () => {
|
||||||
|
expect(foo.reducer(undefined, foo.actions.doIt())).toEqual(1);
|
||||||
|
});
|
||||||
|
test('sink mutations', () => {
|
||||||
|
expect(bar.reducer(undefined, bar.actions.doIt())).toEqual({
|
||||||
|
foo: 0,
|
||||||
|
bar: 'yay',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
test('sink mutation and subduxUpreducer', () => {
|
||||||
|
expect(bar.reducer(undefined, bar.actions.doTheThing())).toEqual({
|
||||||
|
foo: 0,
|
||||||
|
baz: { foo: 3 },
|
||||||
|
});
|
||||||
|
});
|
||||||
|
//# sourceMappingURL=sink.test.js.map
|
1
dist/sink.test.js.map
vendored
Normal file
1
dist/sink.test.js.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sink.test.js","sourceRoot":"","sources":["../src/sink.test.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAE5B,MAAM,GAAG,GAAG,IAAI,eAAK,CAAS;IAC5B,OAAO,EAAE,CAAC;IACV,SAAS,EAAE;QACT,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE;YAC5B,OAAO,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE;YAClC,OAAO,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;KACF;CACF,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,IAAI,eAAK,CAAgB;IACnC,QAAQ,EAAE,EAAC,GAAG,EAAC;CAChB,CAAC,CAAC;AAEH,GAAG,CAAC,WAAW,CACb,GAAG,CAAC,OAAO,CAAC,UAAU,EACtB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE;IACrB,OAAO;QACL,GAAG,KAAK;QACR,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;KACxC,CAAC;AACJ,CAAC,EACD,IAAI,CACL,CAAC;AAEF,GAAG,CAAC,WAAW,CACb,GAAG,CAAC,OAAO,CAAC,IAAI,EAChB,GAAG,EAAE,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,EAAC,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,EAAC,CAAC,EAC9C,IAAI,CACL,CAAC;AAEF,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;IACnB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IACrB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC1B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,KAAK;KACX,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC7C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/D,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
3
dist/updux.d.ts
vendored
3
dist/updux.d.ts
vendored
@ -22,9 +22,10 @@ export declare class Updux<S = any> {
|
|||||||
readonly upreducer: Upreducer<S>;
|
readonly upreducer: Upreducer<S>;
|
||||||
readonly reducer: (state: S | undefined, action: Action) => S;
|
readonly reducer: (state: S | undefined, action: Action) => S;
|
||||||
readonly mutations: Dictionary<Mutation<S>>;
|
readonly mutations: Dictionary<Mutation<S>>;
|
||||||
|
readonly subduxUpreducer: Upreducer<any>;
|
||||||
readonly createStore: () => StoreWithDispatchActions<S>;
|
readonly createStore: () => StoreWithDispatchActions<S>;
|
||||||
readonly asDux: Dux<S>;
|
readonly asDux: Dux<S>;
|
||||||
addMutation<A extends ActionCreator>(creator: A, mutation: Mutation<S, A extends (...args: any[]) => infer R ? R : never>): void;
|
addMutation<A extends ActionCreator>(creator: A, mutation: Mutation<S, A extends (...args: any[]) => infer R ? R : never>, isSink?: boolean): void;
|
||||||
}
|
}
|
||||||
export default Updux;
|
export default Updux;
|
||||||
//# sourceMappingURL=updux.d.ts.map
|
//# sourceMappingURL=updux.d.ts.map
|
2
dist/updux.d.ts.map
vendored
2
dist/updux.d.ts.map
vendored
@ -1 +1 @@
|
|||||||
{"version":3,"file":"updux.d.ts","sourceRoot":"","sources":["../src/updux.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,WAAW,EACX,UAAU,EACV,MAAM,EACN,aAAa,EACb,QAAQ,EACR,SAAS,EACT,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAC,UAAU,EAAE,KAAK,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAE7C,aAAK,wBAAwB,CAC3B,CAAC,GAAG,GAAG,EACP,OAAO,GAAG;IAAC,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,CAAA;CAAC,IACpD,KAAK,CAAC,CAAC,CAAC,GAAG;IACb,QAAQ,EAAE;SAAE,IAAI,IAAI,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI;KAAC,CAAC;CAC7D,CAAC;AAEF,oBAAY,GAAG,CAAC,CAAC,IAAI,IAAI,CACvB,KAAK,CAAC,CAAC,CAAC,EACN,UAAU,GACV,SAAS,GACT,SAAS,GACT,WAAW,GACX,SAAS,GACT,YAAY,GACZ,aAAa,GACb,WAAW,CACd,CAAC;AASF,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG;IACxB,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAS5B,OAAO,EAAE,CAAC,CAAC;IAqCX,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3C,OAAO,CAAC,YAAY,CAE9B;IAEU,OAAO,CAAC,YAAY,CAA4B;IAEhD,OAAO,CAAC,cAAc,CAA0B;gBAEhD,MAAM,GAAE,WAAgB;aA0BtB,UAAU,EAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC;aAsB9C,OAAO,EAAI,UAAU,CAAC,aAAa,CAAC;aAYpC,SAAS,EAAI,SAAS,CAAC,CAAC,CAAC;aAQzB,OAAO,EAAI,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;aAStD,SAAS,EAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aA6BpC,WAAW,EAAI,MAAM,wBAAwB,CAAC,CAAC,CAAC;aAiB1D,KAAK,EAAI,GAAG,CAAC,CAAC,CAAC;IAsBnB,WAAW,CAAC,CAAC,SAAS,aAAa,EACjC,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAO3E;AAED,eAAe,KAAK,CAAC"}
|
{"version":3,"file":"updux.d.ts","sourceRoot":"","sources":["../src/updux.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,WAAW,EACX,UAAU,EACV,MAAM,EACN,aAAa,EACb,QAAQ,EACR,SAAS,EACT,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAC,UAAU,EAAE,KAAK,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAE7C,aAAK,wBAAwB,CAC3B,CAAC,GAAG,GAAG,EACP,OAAO,GAAG;IAAC,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,CAAA;CAAC,IACpD,KAAK,CAAC,CAAC,CAAC,GAAG;IACb,QAAQ,EAAE;SAAE,IAAI,IAAI,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI;KAAC,CAAC;CAC7D,CAAC;AAEF,oBAAY,GAAG,CAAC,CAAC,IAAI,IAAI,CACvB,KAAK,CAAC,CAAC,CAAC,EACN,UAAU,GACV,SAAS,GACT,SAAS,GACT,WAAW,GACX,SAAS,GACT,YAAY,GACZ,aAAa,GACb,WAAW,CACd,CAAC;AASF,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG;IACxB,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAS5B,OAAO,EAAE,CAAC,CAAC;IAqCX,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3C,OAAO,CAAC,YAAY,CAE9B;IAEU,OAAO,CAAC,YAAY,CAA4B;IAEhD,OAAO,CAAC,cAAc,CAEhC;gBAEU,MAAM,GAAE,WAAgB;aA0BtB,UAAU,EAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC;aAsB9C,OAAO,EAAI,UAAU,CAAC,aAAa,CAAC;aAYpC,SAAS,EAAI,SAAS,CAAC,CAAC,CAAC;aAQzB,OAAO,EAAI,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;aAStD,SAAS,EAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAqBpC,eAAe;aA6Bf,WAAW,EAAI,MAAM,wBAAwB,CAAC,CAAC,CAAC;aAiB1D,KAAK,EAAI,GAAG,CAAC,CAAC,CAAC;IAyBnB,WAAW,CAAC,CAAC,SAAS,aAAa,EACjC,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EACxE,MAAM,CAAC,EAAE,OAAO;CAQnB;AAED,eAAe,KAAK,CAAC"}
|
13
dist/updux.js
vendored
13
dist/updux.js
vendored
@ -43,6 +43,9 @@ class Updux {
|
|||||||
get mutations() {
|
get mutations() {
|
||||||
return buildMutations_1.default(this.localMutations, this.subduxes);
|
return buildMutations_1.default(this.localMutations, this.subduxes);
|
||||||
}
|
}
|
||||||
|
get subduxUpreducer() {
|
||||||
|
return buildUpreducer_1.default(this.initial, buildMutations_1.default({}, this.subduxes));
|
||||||
|
}
|
||||||
get createStore() {
|
get createStore() {
|
||||||
const actions = this.actions;
|
const actions = this.actions;
|
||||||
return buildCreateStore_1.default(this.reducer, this.initial, this.middleware, this.actions);
|
return buildCreateStore_1.default(this.reducer, this.initial, this.middleware, this.actions);
|
||||||
@ -59,9 +62,12 @@ class Updux {
|
|||||||
initial: this.initial,
|
initial: this.initial,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
addMutation(creator, mutation) {
|
addMutation(creator, mutation, isSink) {
|
||||||
this.localActions[creator.type] = creator;
|
this.localActions[creator.type] = creator;
|
||||||
this.localMutations[creator.type] = this.groomMutations(mutation);
|
this.localMutations[creator.type] = [
|
||||||
|
this.groomMutations(mutation),
|
||||||
|
isSink,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__decorate([
|
__decorate([
|
||||||
@ -88,6 +94,9 @@ __decorate([
|
|||||||
__decorate([
|
__decorate([
|
||||||
mobx_1.computed
|
mobx_1.computed
|
||||||
], Updux.prototype, "mutations", null);
|
], Updux.prototype, "mutations", null);
|
||||||
|
__decorate([
|
||||||
|
mobx_1.computed
|
||||||
|
], Updux.prototype, "subduxUpreducer", null);
|
||||||
__decorate([
|
__decorate([
|
||||||
mobx_1.computed
|
mobx_1.computed
|
||||||
], Updux.prototype, "createStore", null);
|
], Updux.prototype, "createStore", null);
|
||||||
|
2
dist/updux.js.map
vendored
2
dist/updux.js.map
vendored
@ -1 +1 @@
|
|||||||
{"version":3,"file":"updux.js","sourceRoot":"","sources":["../src/updux.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"updux.js","sourceRoot":"","sources":["../src/updux.ts"],"names":[],"mappings":"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"}
|
File diff suppressed because one or more lines are too long
@ -124,6 +124,7 @@
|
|||||||
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#middleware" class="tsd-kind-icon">middleware</a></li>
|
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#middleware" class="tsd-kind-icon">middleware</a></li>
|
||||||
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#mutations" class="tsd-kind-icon">mutations</a></li>
|
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#mutations" class="tsd-kind-icon">mutations</a></li>
|
||||||
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#reducer" class="tsd-kind-icon">reducer</a></li>
|
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#reducer" class="tsd-kind-icon">reducer</a></li>
|
||||||
|
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#subduxupreducer" class="tsd-kind-icon">subdux<wbr>Upreducer</a></li>
|
||||||
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#upreducer" class="tsd-kind-icon">upreducer</a></li>
|
<li class="tsd-kind-get-signature tsd-parent-kind-class"><a href="updux.html#upreducer" class="tsd-kind-icon">upreducer</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
@ -148,7 +149,7 @@
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:106</li>
|
<li>Defined in updux.ts:108</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||||
@ -264,7 +265,7 @@
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:156</li>
|
<li>Defined in updux.ts:158</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<div class="tsd-comment tsd-typography">
|
<div class="tsd-comment tsd-typography">
|
||||||
@ -294,7 +295,7 @@ payload,meta})</code> (with the extra sugar that if <code>meta</code> or <code>p
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:231</li>
|
<li>Defined in updux.ts:254</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<div class="tsd-comment tsd-typography">
|
<div class="tsd-comment tsd-typography">
|
||||||
@ -319,7 +320,7 @@ payload,meta})</code> (with the extra sugar that if <code>meta</code> or <code>p
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:214</li>
|
<li>Defined in updux.ts:237</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<div class="tsd-comment tsd-typography">
|
<div class="tsd-comment tsd-typography">
|
||||||
@ -368,7 +369,7 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:134</li>
|
<li>Defined in updux.ts:136</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<div class="tsd-comment tsd-typography">
|
<div class="tsd-comment tsd-typography">
|
||||||
@ -392,7 +393,7 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:185</li>
|
<li>Defined in updux.ts:187</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<div class="tsd-comment tsd-typography">
|
<div class="tsd-comment tsd-typography">
|
||||||
@ -416,7 +417,7 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:176</li>
|
<li>Defined in updux.ts:178</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<div class="tsd-comment tsd-typography">
|
<div class="tsd-comment tsd-typography">
|
||||||
@ -450,6 +451,78 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||||
|
<a name="subduxupreducer" class="tsd-anchor"></a>
|
||||||
|
<h3>subdux<wbr>Upreducer</h3>
|
||||||
|
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||||
|
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">get</span> subduxUpreducer<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">function</span></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="tsd-descriptions">
|
||||||
|
<li class="tsd-description">
|
||||||
|
<aside class="tsd-sources">
|
||||||
|
<ul>
|
||||||
|
<li>Defined in updux.ts:208</li>
|
||||||
|
</ul>
|
||||||
|
</aside>
|
||||||
|
<div class="tsd-comment tsd-typography">
|
||||||
|
<div class="lead">
|
||||||
|
<p>Returns the upreducer made of the merge of all sudbuxes reducers, without
|
||||||
|
the local mutations. Useful, for example, for sink mutations.</p>
|
||||||
|
</div>
|
||||||
|
<dl class="tsd-comment-tags">
|
||||||
|
<dt>example</dt>
|
||||||
|
<dd><pre><code><span class="hljs-keyword">import</span> todo <span class="hljs-keyword">from</span> <span class="hljs-string">'./todo'</span>; <span class="hljs-comment">// updux for a single todo</span>
|
||||||
|
<span class="hljs-keyword">import</span> Updux <span class="hljs-keyword">from</span> <span class="hljs-string">'updux'</span>;
|
||||||
|
<span class="hljs-keyword">import</span> u <span class="hljs-keyword">from</span> <span class="hljs-string">'updeep'</span>;
|
||||||
|
|
||||||
|
<span class="hljs-keyword">const</span> todos = <span class="hljs-keyword">new</span> Updux({ initial: [], subduxes: { <span class="hljs-string">'*'</span>: todo } });
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.done,
|
||||||
|
<span class="hljs-function">(<span class="hljs-params">{todo_id},action</span>) =></span> u.map( u.if( u.is(<span class="hljs-string">'id'</span>,todo_id) ), todos.subduxUpreducer(action) )
|
||||||
|
<span class="hljs-literal">true</span>
|
||||||
|
);</code></pre></dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">function</span></h4>
|
||||||
|
<ul class="tsd-parameters">
|
||||||
|
<li class="tsd-parameter-siganture">
|
||||||
|
<ul class="tsd-signatures tsd-kind-type-literal">
|
||||||
|
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>action<span class="tsd-signature-symbol">: </span><a href="../globals.html#action" class="tsd-signature-type">Action</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">function</span></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="tsd-descriptions">
|
||||||
|
<li class="tsd-description">
|
||||||
|
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||||
|
<ul class="tsd-parameters">
|
||||||
|
<li>
|
||||||
|
<h5>action: <a href="../globals.html#action" class="tsd-signature-type">Action</a></h5>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">function</span></h4>
|
||||||
|
<ul class="tsd-parameters">
|
||||||
|
<li class="tsd-parameter-siganture">
|
||||||
|
<ul class="tsd-signatures tsd-kind-type-literal">
|
||||||
|
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>state<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">S</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">S</span></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="tsd-descriptions">
|
||||||
|
<li class="tsd-description">
|
||||||
|
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||||
|
<ul class="tsd-parameters">
|
||||||
|
<li>
|
||||||
|
<h5>state: <span class="tsd-signature-type">S</span></h5>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">S</span></h4>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||||
<a name="upreducer" class="tsd-anchor"></a>
|
<a name="upreducer" class="tsd-anchor"></a>
|
||||||
<h3>upreducer</h3>
|
<h3>upreducer</h3>
|
||||||
@ -460,7 +533,7 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:168</li>
|
<li>Defined in updux.ts:170</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<h4 class="tsd-returns-title">Returns <a href="../globals.html#upreducer" class="tsd-signature-type">Upreducer</a><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">S</span><span class="tsd-signature-symbol">></span></h4>
|
<h4 class="tsd-returns-title">Returns <a href="../globals.html#upreducer" class="tsd-signature-type">Upreducer</a><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">S</span><span class="tsd-signature-symbol">></span></h4>
|
||||||
@ -474,13 +547,13 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<a name="addmutation" class="tsd-anchor"></a>
|
<a name="addmutation" class="tsd-anchor"></a>
|
||||||
<h3>add<wbr>Mutation</h3>
|
<h3>add<wbr>Mutation</h3>
|
||||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter">
|
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter">
|
||||||
<li class="tsd-signature tsd-kind-icon">add<wbr>Mutation<A><span class="tsd-signature-symbol">(</span>creator<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">A</span>, mutation<span class="tsd-signature-symbol">: </span><a href="../globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">S</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">A extends (...args: any[]) => infer R ? R : never</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
|
<li class="tsd-signature tsd-kind-icon">add<wbr>Mutation<A><span class="tsd-signature-symbol">(</span>creator<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">A</span>, mutation<span class="tsd-signature-symbol">: </span><a href="../globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">S</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">A extends (...args: any[]) => infer R ? R : never</span><span class="tsd-signature-symbol">></span>, isSink<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">false</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">true</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="tsd-descriptions">
|
<ul class="tsd-descriptions">
|
||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Defined in updux.ts:253</li>
|
<li>Defined in updux.ts:279</li>
|
||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
<div class="tsd-comment tsd-typography">
|
<div class="tsd-comment tsd-typography">
|
||||||
@ -508,6 +581,13 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li>
|
<li>
|
||||||
<h5>mutation: <a href="../globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">S</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">A extends (...args: any[]) => infer R ? R : never</span><span class="tsd-signature-symbol">></span></h5>
|
<h5>mutation: <a href="../globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">S</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">A extends (...args: any[]) => infer R ? R : never</span><span class="tsd-signature-symbol">></span></h5>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<h5><span class="tsd-flag ts-flagOptional">Optional</span> isSink: <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">false</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">true</span></h5>
|
||||||
|
<div class="tsd-comment tsd-typography">
|
||||||
|
<p>If <code>true</code>, disables the subduxes mutations for this action. To
|
||||||
|
conditionally run the subduxes mutations, check out <a href="updux.html#subduxupreducer">subduxUpreducer</a>.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
|
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
|
||||||
</li>
|
</li>
|
||||||
@ -560,6 +640,9 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li class=" tsd-kind-get-signature tsd-parent-kind-class">
|
<li class=" tsd-kind-get-signature tsd-parent-kind-class">
|
||||||
<a href="updux.html#reducer" class="tsd-kind-icon">reducer</a>
|
<a href="updux.html#reducer" class="tsd-kind-icon">reducer</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class=" tsd-kind-get-signature tsd-parent-kind-class">
|
||||||
|
<a href="updux.html#subduxupreducer" class="tsd-kind-icon">subdux<wbr>Upreducer</a>
|
||||||
|
</li>
|
||||||
<li class=" tsd-kind-get-signature tsd-parent-kind-class">
|
<li class=" tsd-kind-get-signature tsd-parent-kind-class">
|
||||||
<a href="updux.html#upreducer" class="tsd-kind-icon">upreducer</a>
|
<a href="updux.html#upreducer" class="tsd-kind-icon">upreducer</a>
|
||||||
</li>
|
</li>
|
||||||
@ -594,9 +677,6 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
|
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
|
||||||
<a href="../globals.html#mutation" class="tsd-kind-icon">Mutation</a>
|
<a href="../globals.html#mutation" class="tsd-kind-icon">Mutation</a>
|
||||||
</li>
|
</li>
|
||||||
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
|
||||||
<a href="../globals.html#mystate" class="tsd-kind-icon">My<wbr>State</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
||||||
<a href="../globals.html#next" class="tsd-kind-icon">Next</a>
|
<a href="../globals.html#next" class="tsd-kind-icon">Next</a>
|
||||||
</li>
|
</li>
|
||||||
@ -645,15 +725,6 @@ store.dispatch<span class="hljs-comment">( actions.addTodo(...)</span> );</code>
|
|||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
<li class=" tsd-kind-function tsd-is-not-exported">
|
||||||
<a href="../globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a>
|
<a href="../globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a>
|
||||||
</li>
|
</li>
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="../globals.html#noopeffect" class="tsd-kind-icon">noop<wbr>Effect</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="../globals.html#timeout" class="tsd-kind-icon">timeout</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="../globals.html#tracer" class="tsd-kind-icon">tracer</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
@ -84,7 +84,6 @@
|
|||||||
<li class="tsd-kind-type-alias tsd-has-type-parameter"><a href="globals.html#dux" class="tsd-kind-icon">Dux</a></li>
|
<li class="tsd-kind-type-alias tsd-has-type-parameter"><a href="globals.html#dux" class="tsd-kind-icon">Dux</a></li>
|
||||||
<li class="tsd-kind-type-alias tsd-has-type-parameter tsd-is-not-exported"><a href="globals.html#maybepayload" class="tsd-kind-icon">Maybe<wbr>Payload</a></li>
|
<li class="tsd-kind-type-alias tsd-has-type-parameter tsd-is-not-exported"><a href="globals.html#maybepayload" class="tsd-kind-icon">Maybe<wbr>Payload</a></li>
|
||||||
<li class="tsd-kind-type-alias tsd-has-type-parameter"><a href="globals.html#mutation" class="tsd-kind-icon">Mutation</a></li>
|
<li class="tsd-kind-type-alias tsd-has-type-parameter"><a href="globals.html#mutation" class="tsd-kind-icon">Mutation</a></li>
|
||||||
<li class="tsd-kind-type-alias tsd-is-not-exported"><a href="globals.html#mystate" class="tsd-kind-icon">My<wbr>State</a></li>
|
|
||||||
<li class="tsd-kind-type-alias tsd-is-not-exported"><a href="globals.html#next" class="tsd-kind-icon">Next</a></li>
|
<li class="tsd-kind-type-alias tsd-is-not-exported"><a href="globals.html#next" class="tsd-kind-icon">Next</a></li>
|
||||||
<li class="tsd-kind-type-alias tsd-has-type-parameter tsd-is-not-exported"><a href="globals.html#storewithdispatchactions" class="tsd-kind-icon">Store<wbr>With<wbr>Dispatch<wbr>Actions</a></li>
|
<li class="tsd-kind-type-alias tsd-has-type-parameter tsd-is-not-exported"><a href="globals.html#storewithdispatchactions" class="tsd-kind-icon">Store<wbr>With<wbr>Dispatch<wbr>Actions</a></li>
|
||||||
<li class="tsd-kind-type-alias tsd-is-not-exported"><a href="globals.html#submutations" class="tsd-kind-icon">Sub<wbr>Mutations</a></li>
|
<li class="tsd-kind-type-alias tsd-is-not-exported"><a href="globals.html#submutations" class="tsd-kind-icon">Sub<wbr>Mutations</a></li>
|
||||||
@ -106,9 +105,6 @@
|
|||||||
<li class="tsd-kind-function"><a href="globals.html#buildmutations" class="tsd-kind-icon">build<wbr>Mutations</a></li>
|
<li class="tsd-kind-function"><a href="globals.html#buildmutations" class="tsd-kind-icon">build<wbr>Mutations</a></li>
|
||||||
<li class="tsd-kind-function tsd-has-type-parameter"><a href="globals.html#buildupreducer" class="tsd-kind-icon">build<wbr>Upreducer</a></li>
|
<li class="tsd-kind-function tsd-has-type-parameter"><a href="globals.html#buildupreducer" class="tsd-kind-icon">build<wbr>Upreducer</a></li>
|
||||||
<li class="tsd-kind-function tsd-is-not-exported"><a href="globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a></li>
|
<li class="tsd-kind-function tsd-is-not-exported"><a href="globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a></li>
|
||||||
<li class="tsd-kind-function tsd-is-not-exported"><a href="globals.html#noopeffect" class="tsd-kind-icon">noop<wbr>Effect</a></li>
|
|
||||||
<li class="tsd-kind-function tsd-is-not-exported"><a href="globals.html#timeout" class="tsd-kind-icon">timeout</a></li>
|
|
||||||
<li class="tsd-kind-function tsd-is-not-exported"><a href="globals.html#tracer" class="tsd-kind-icon">tracer</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@ -312,24 +308,6 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-is-not-exported">
|
|
||||||
<a name="mystate" class="tsd-anchor"></a>
|
|
||||||
<h3>My<wbr>State</h3>
|
|
||||||
<div class="tsd-signature tsd-kind-icon">My<wbr>State<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">object</span></div>
|
|
||||||
<aside class="tsd-sources">
|
|
||||||
<ul>
|
|
||||||
<li>Defined in addMutations.test.ts:3</li>
|
|
||||||
</ul>
|
|
||||||
</aside>
|
|
||||||
<div class="tsd-type-declaration">
|
|
||||||
<h4>Type declaration</h4>
|
|
||||||
<ul class="tsd-parameters">
|
|
||||||
<li class="tsd-parameter">
|
|
||||||
<h5>sum<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-is-not-exported">
|
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-is-not-exported">
|
||||||
<a name="next" class="tsd-anchor"></a>
|
<a name="next" class="tsd-anchor"></a>
|
||||||
<h3>Next</h3>
|
<h3>Next</h3>
|
||||||
@ -932,7 +910,7 @@ const rootUpdux = updux({
|
|||||||
<a name="buildmutations" class="tsd-anchor"></a>
|
<a name="buildmutations" class="tsd-anchor"></a>
|
||||||
<h3>build<wbr>Mutations</h3>
|
<h3>build<wbr>Mutations</h3>
|
||||||
<ul class="tsd-signatures tsd-kind-function">
|
<ul class="tsd-signatures tsd-kind-function">
|
||||||
<li class="tsd-signature tsd-kind-icon">build<wbr>Mutations<span class="tsd-signature-symbol">(</span>mutations<span class="tsd-signature-symbol">?: </span><a href="globals.html#dictionary" class="tsd-signature-type">Dictionary</a><span class="tsd-signature-symbol"><</span><a href="globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol">></span>, subduxes<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">object</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Dictionary</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">function</span><span class="tsd-signature-symbol">></span></li>
|
<li class="tsd-signature tsd-kind-icon">build<wbr>Mutations<span class="tsd-signature-symbol">(</span>mutations<span class="tsd-signature-symbol">?: </span><a href="globals.html#dictionary" class="tsd-signature-type">Dictionary</a><span class="tsd-signature-symbol"><</span><a href="globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Object</span><span class="tsd-signature-symbol">></span>, subduxes<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">object</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Dictionary</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">function</span><span class="tsd-signature-symbol">></span></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="tsd-descriptions">
|
<ul class="tsd-descriptions">
|
||||||
<li class="tsd-description">
|
<li class="tsd-description">
|
||||||
@ -944,7 +922,7 @@ const rootUpdux = updux({
|
|||||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||||
<ul class="tsd-parameters">
|
<ul class="tsd-parameters">
|
||||||
<li>
|
<li>
|
||||||
<h5><span class="tsd-flag ts-flagDefault value">Default value</span> mutations: <a href="globals.html#dictionary" class="tsd-signature-type">Dictionary</a><span class="tsd-signature-symbol"><</span><a href="globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> = {}</span></h5>
|
<h5><span class="tsd-flag ts-flagDefault value">Default value</span> mutations: <a href="globals.html#dictionary" class="tsd-signature-type">Dictionary</a><span class="tsd-signature-symbol"><</span><a href="globals.html#mutation" class="tsd-signature-type">Mutation</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Object</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> = {}</span></h5>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<h5><span class="tsd-flag ts-flagDefault value">Default value</span> subduxes: <span class="tsd-signature-type">object</span><span class="tsd-signature-symbol"> = {}</span></h5>
|
<h5><span class="tsd-flag ts-flagDefault value">Default value</span> subduxes: <span class="tsd-signature-type">object</span><span class="tsd-signature-symbol"> = {}</span></h5>
|
||||||
@ -1050,69 +1028,6 @@ const rootUpdux = updux({
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a name="noopeffect" class="tsd-anchor"></a>
|
|
||||||
<h3><span class="tsd-flag ts-flagConst">Const</span> noop<wbr>Effect</h3>
|
|
||||||
<ul class="tsd-signatures tsd-kind-function tsd-is-not-exported">
|
|
||||||
<li class="tsd-signature tsd-kind-icon">noop<wbr>Effect<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">(Anonymous function)</span></li>
|
|
||||||
</ul>
|
|
||||||
<ul class="tsd-descriptions">
|
|
||||||
<li class="tsd-description">
|
|
||||||
<aside class="tsd-sources">
|
|
||||||
<ul>
|
|
||||||
<li>Defined in actions.test.ts:4</li>
|
|
||||||
</ul>
|
|
||||||
</aside>
|
|
||||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">(Anonymous function)</span></h4>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a name="timeout" class="tsd-anchor"></a>
|
|
||||||
<h3>timeout</h3>
|
|
||||||
<ul class="tsd-signatures tsd-kind-function tsd-is-not-exported">
|
|
||||||
<li class="tsd-signature tsd-kind-icon">timeout<span class="tsd-signature-symbol">(</span>ms<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">></span></li>
|
|
||||||
</ul>
|
|
||||||
<ul class="tsd-descriptions">
|
|
||||||
<li class="tsd-description">
|
|
||||||
<aside class="tsd-sources">
|
|
||||||
<ul>
|
|
||||||
<li>Defined in test.ts:125</li>
|
|
||||||
</ul>
|
|
||||||
</aside>
|
|
||||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
|
||||||
<ul class="tsd-parameters">
|
|
||||||
<li>
|
|
||||||
<h5>ms: <span class="tsd-signature-type">number</span></h5>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">></span></h4>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a name="tracer" class="tsd-anchor"></a>
|
|
||||||
<h3><span class="tsd-flag ts-flagConst">Const</span> tracer</h3>
|
|
||||||
<ul class="tsd-signatures tsd-kind-function tsd-is-not-exported">
|
|
||||||
<li class="tsd-signature tsd-kind-icon">tracer<span class="tsd-signature-symbol">(</span>chr<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">CurriedUpdate1</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">object</span><span class="tsd-signature-symbol">></span></li>
|
|
||||||
</ul>
|
|
||||||
<ul class="tsd-descriptions">
|
|
||||||
<li class="tsd-description">
|
|
||||||
<aside class="tsd-sources">
|
|
||||||
<ul>
|
|
||||||
<li>Defined in splat.test.ts:4</li>
|
|
||||||
</ul>
|
|
||||||
</aside>
|
|
||||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
|
||||||
<ul class="tsd-parameters">
|
|
||||||
<li>
|
|
||||||
<h5>chr: <span class="tsd-signature-type">string</span></h5>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">CurriedUpdate1</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">object</span><span class="tsd-signature-symbol">></span></h4>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||||
@ -1152,9 +1067,6 @@ const rootUpdux = updux({
|
|||||||
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
|
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
|
||||||
<a href="globals.html#mutation" class="tsd-kind-icon">Mutation</a>
|
<a href="globals.html#mutation" class="tsd-kind-icon">Mutation</a>
|
||||||
</li>
|
</li>
|
||||||
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
|
||||||
<a href="globals.html#mystate" class="tsd-kind-icon">My<wbr>State</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
||||||
<a href="globals.html#next" class="tsd-kind-icon">Next</a>
|
<a href="globals.html#next" class="tsd-kind-icon">Next</a>
|
||||||
</li>
|
</li>
|
||||||
@ -1203,15 +1115,6 @@ const rootUpdux = updux({
|
|||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
<li class=" tsd-kind-function tsd-is-not-exported">
|
||||||
<a href="globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a>
|
<a href="globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a>
|
||||||
</li>
|
</li>
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="globals.html#noopeffect" class="tsd-kind-icon">noop<wbr>Effect</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="globals.html#timeout" class="tsd-kind-icon">timeout</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="globals.html#tracer" class="tsd-kind-icon">tracer</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
@ -138,7 +138,7 @@ store.dispatch.inc(<span class="hljs-number">3</span>);</code></pre>
|
|||||||
<h1>Description</h1>
|
<h1>Description</h1>
|
||||||
</a>
|
</a>
|
||||||
<p>The formal documentation of the class Updux and its associated functions and
|
<p>The formal documentation of the class Updux and its associated functions and
|
||||||
types can be found over <a href="./docs/classes/updux.html">here</a>.</p>
|
types can be found over <a href="https://yanick.github.io/updux/docs/classes/updux.html">here</a>.</p>
|
||||||
<a href="#exporting-upduxes" id="exporting-upduxes" style="color: inherit; text-decoration: none;">
|
<a href="#exporting-upduxes" id="exporting-upduxes" style="color: inherit; text-decoration: none;">
|
||||||
<h2>Exporting upduxes</h2>
|
<h2>Exporting upduxes</h2>
|
||||||
</a>
|
</a>
|
||||||
@ -168,6 +168,49 @@ const updux = new Updux({ <span class="hljs-built_in">..</span>. });
|
|||||||
createStore,
|
createStore,
|
||||||
middleware,
|
middleware,
|
||||||
} = updux;</code></pre>
|
} = updux;</code></pre>
|
||||||
|
<a href="#mapping-a-mutation-to-all-values-of-a-state" id="mapping-a-mutation-to-all-values-of-a-state" style="color: inherit; text-decoration: none;">
|
||||||
|
<h2>Mapping a mutation to all values of a state</h2>
|
||||||
|
</a>
|
||||||
|
<p>Say you have a <code>todos</code> state that is an array of <code>todo</code> sub-states. It's easy
|
||||||
|
enough to have the main reducer maps away all items to the sub-reducer:</p>
|
||||||
|
<pre><code>const todo = <span class="hljs-keyword">new</span> Updux({
|
||||||
|
mutations: {
|
||||||
|
review: <span class="hljs-function"><span class="hljs-params">()</span> =></span> u({ reviewed: <span class="hljs-literal">true</span>}),
|
||||||
|
done: <span class="hljs-function"><span class="hljs-params">()</span> =></span> u({done: <span class="hljs-literal">true</span>}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const todos = <span class="hljs-keyword">new</span> Updux({ initial: [] });
|
||||||
|
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.review,
|
||||||
|
<span class="hljs-function"><span class="hljs-params">(_,action)</span> =></span> state => state.map( todo.upreducer(action) )
|
||||||
|
);
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.done,
|
||||||
|
<span class="hljs-function"><span class="hljs-params">(id,action)</span> =></span> u.map(u.<span class="hljs-keyword">if</span>(u.<span class="hljs-keyword">is</span>(<span class="hljs-string">'id'</span>,id), todo.upreducer(action))),
|
||||||
|
);
|
||||||
|
</code></pre><p>But <code>updeep</code> can iterate through all the items of an array (or the values of
|
||||||
|
an object) via the special key <code>*</code>. So the todos updux above could also be
|
||||||
|
written:</p>
|
||||||
|
<pre><code>const todo = <span class="hljs-keyword">new</span> Updux({
|
||||||
|
mutations: {
|
||||||
|
review: <span class="hljs-function"><span class="hljs-params">()</span> =></span> u({ reviewed: <span class="hljs-literal">true</span>}),
|
||||||
|
done: <span class="hljs-function"><span class="hljs-params">()</span> =></span> u({done: <span class="hljs-literal">true</span>}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const todos = <span class="hljs-keyword">new</span> Updux({
|
||||||
|
subduxes: { <span class="hljs-string">'*'</span>: todo },
|
||||||
|
});
|
||||||
|
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.done,
|
||||||
|
<span class="hljs-function"><span class="hljs-params">(id,action)</span> =></span> u.map(u.<span class="hljs-keyword">if</span>(u.<span class="hljs-keyword">is</span>(<span class="hljs-string">'id'</span>,id), todo.upreducer(action))),
|
||||||
|
<span class="hljs-literal">true</span>
|
||||||
|
);</code></pre><p>The advantages being that the actions/mutations/effects of the subdux will be
|
||||||
|
imported by the root updux as usual, and all actions that aren't being
|
||||||
|
overridden by a sink mutation will trickle down automatically.</p>
|
||||||
<a href="#usage-with-immer" id="usage-with-immer" style="color: inherit; text-decoration: none;">
|
<a href="#usage-with-immer" id="usage-with-immer" style="color: inherit; text-decoration: none;">
|
||||||
<h2>Usage with Immer</h2>
|
<h2>Usage with Immer</h2>
|
||||||
</a>
|
</a>
|
||||||
@ -244,9 +287,6 @@ const updux = new Updux({ <span class="hljs-built_in">..</span>. });
|
|||||||
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
|
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
|
||||||
<a href="globals.html#mutation" class="tsd-kind-icon">Mutation</a>
|
<a href="globals.html#mutation" class="tsd-kind-icon">Mutation</a>
|
||||||
</li>
|
</li>
|
||||||
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
|
||||||
<a href="globals.html#mystate" class="tsd-kind-icon">My<wbr>State</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
<li class=" tsd-kind-type-alias tsd-is-not-exported">
|
||||||
<a href="globals.html#next" class="tsd-kind-icon">Next</a>
|
<a href="globals.html#next" class="tsd-kind-icon">Next</a>
|
||||||
</li>
|
</li>
|
||||||
@ -295,15 +335,6 @@ const updux = new Updux({ <span class="hljs-built_in">..</span>. });
|
|||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
<li class=" tsd-kind-function tsd-is-not-exported">
|
||||||
<a href="globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a>
|
<a href="globals.html#composemutations" class="tsd-kind-icon">compose<wbr>Mutations</a>
|
||||||
</li>
|
</li>
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="globals.html#noopeffect" class="tsd-kind-icon">noop<wbr>Effect</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="globals.html#timeout" class="tsd-kind-icon">timeout</a>
|
|
||||||
</li>
|
|
||||||
<li class=" tsd-kind-function tsd-is-not-exported">
|
|
||||||
<a href="globals.html#tracer" class="tsd-kind-icon">tracer</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
"build": "tsc && typedoc",
|
"build": "tsc && typedoc",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"version": "1.0.0",
|
"version": "1.1.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/yanick/updux.git"
|
"url": "git+https://github.com/yanick/updux.git"
|
||||||
|
@ -12,7 +12,7 @@ type SubMutations = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function buildMutations(
|
function buildMutations(
|
||||||
mutations :Dictionary<Mutation> = {},
|
mutations :Dictionary<Mutation|([Mutation,boolean|undefined])> = {},
|
||||||
subduxes = {}
|
subduxes = {}
|
||||||
) {
|
) {
|
||||||
// we have to differentiate the subduxes with '*' than those
|
// we have to differentiate the subduxes with '*' than those
|
||||||
@ -49,15 +49,24 @@ function buildMutations(
|
|||||||
|
|
||||||
nonGlobby.forEach(([slice, {mutations = {}, reducer = {}}]:any[]) => {
|
nonGlobby.forEach(([slice, {mutations = {}, reducer = {}}]:any[]) => {
|
||||||
Object.entries(mutations).forEach(([type, mutation]) => {
|
Object.entries(mutations).forEach(([type, mutation]) => {
|
||||||
const localized = (payload = null, action :Action) =>
|
const localized = (payload = null, action :Action) => {
|
||||||
u.updateIn(slice)((mutation as Mutation)(payload, action));
|
return u.updateIn(slice)((mutation as Mutation)(payload, action));
|
||||||
|
}
|
||||||
|
|
||||||
mergedMutations[type].push(localized);
|
mergedMutations[type].push(localized);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.entries(mutations).forEach(([type, mutation]) => {
|
Object.entries(mutations).forEach(([type, mutation]) => {
|
||||||
mergedMutations[type].push(mutation);
|
if ( Array.isArray(mutation) ) {
|
||||||
|
if( mutation[1] ) {
|
||||||
|
mergedMutations[type] = [
|
||||||
|
mutation[0]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
else mergedMutations[type].push( mutation[0] );
|
||||||
|
}
|
||||||
|
else mergedMutations[type].push(mutation);
|
||||||
});
|
});
|
||||||
|
|
||||||
return fp.mapValues(composeMutations)(mergedMutations);
|
return fp.mapValues(composeMutations)(mergedMutations);
|
||||||
|
29
src/mappedUpdux.test.ts
Normal file
29
src/mappedUpdux.test.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import Updux from './updux';
|
||||||
|
import u from 'updeep';
|
||||||
|
|
||||||
|
const todo = new Updux({
|
||||||
|
mutations: {
|
||||||
|
review: () => u({ reviewed: true}),
|
||||||
|
done: () => u({done: true}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const todos = new Updux({
|
||||||
|
subduxes: { '*': todo },
|
||||||
|
});
|
||||||
|
|
||||||
|
todos.addMutation(
|
||||||
|
todo.actions.done, (id,action) => u.map(u.if(u.is('id',id), todo.upreducer(action))), true
|
||||||
|
);
|
||||||
|
|
||||||
|
test( '* for mapping works', () => {
|
||||||
|
const reducer = todos.reducer;
|
||||||
|
let state = [ { id: 0 }, {id: 1 } ];
|
||||||
|
state = reducer( state, todos.actions.review() );
|
||||||
|
state = reducer( state, todos.actions.done(1) );
|
||||||
|
|
||||||
|
expect(state).toEqual([
|
||||||
|
{ id: 0, reviewed: true },
|
||||||
|
{ id: 1, reviewed: true, done: true },
|
||||||
|
]);
|
||||||
|
});
|
56
src/sink.test.ts
Normal file
56
src/sink.test.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import Updux from './updux';
|
||||||
|
|
||||||
|
const foo = new Updux<number>({
|
||||||
|
initial: 0,
|
||||||
|
mutations: {
|
||||||
|
doIt: () => (state: number) => {
|
||||||
|
return state + 1;
|
||||||
|
},
|
||||||
|
doTheThing: () => (state: number) => {
|
||||||
|
return state + 3;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const bar = new Updux<{foo: number}>({
|
||||||
|
subduxes: {foo},
|
||||||
|
});
|
||||||
|
|
||||||
|
bar.addMutation(
|
||||||
|
foo.actions.doTheThing,
|
||||||
|
(_, action) => state => {
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
baz: bar.subduxUpreducer(action)(state),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
|
bar.addMutation(
|
||||||
|
foo.actions.doIt,
|
||||||
|
() => (state: any) => ({...state, bar: 'yay'}),
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
|
test('initial', () => {
|
||||||
|
expect(bar.initial).toEqual({foo: 0});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('foo alone', () => {
|
||||||
|
expect(foo.reducer(undefined, foo.actions.doIt())).toEqual(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('sink mutations', () => {
|
||||||
|
expect(bar.reducer(undefined, bar.actions.doIt())).toEqual({
|
||||||
|
foo: 0,
|
||||||
|
bar: 'yay',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('sink mutation and subduxUpreducer', () => {
|
||||||
|
expect(bar.reducer(undefined, bar.actions.doTheThing())).toEqual({
|
||||||
|
foo: 0,
|
||||||
|
baz: {foo: 3},
|
||||||
|
});
|
||||||
|
});
|
118
src/updux.ts
118
src/updux.ts
@ -42,12 +42,12 @@ export type Dux<S> = Pick<
|
|||||||
>;
|
>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* `Updux` is a way to minimize and simplify the boilerplate associated with the
|
* `Updux` is a way to minimize and simplify the boilerplate associated with the
|
||||||
* creation of a `Redux` store. It takes a shorthand configuration
|
* creation of a `Redux` store. It takes a shorthand configuration
|
||||||
* object, and generates the appropriate reducer, actions, middleware, etc.
|
* object, and generates the appropriate reducer, actions, middleware, etc.
|
||||||
* In true `Redux`-like fashion, upduxes can be made of sub-upduxes (`subduxes` for short) for different slices of the root state.
|
* In true `Redux`-like fashion, upduxes can be made of sub-upduxes (`subduxes` for short) for different slices of the root state.
|
||||||
* @typeparam S Store's state type. Defaults to `any`.
|
* @typeparam S Store's state type. Defaults to `any`.
|
||||||
*/
|
*/
|
||||||
export class Updux<S = any> {
|
export class Updux<S = any> {
|
||||||
subduxes: Dictionary<Updux>;
|
subduxes: Dictionary<Updux>;
|
||||||
|
|
||||||
@ -60,41 +60,41 @@ export class Updux<S = any> {
|
|||||||
*/
|
*/
|
||||||
initial: S;
|
initial: S;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function that can be provided to alter all local mutations of the updux
|
* Function that can be provided to alter all local mutations of the updux
|
||||||
* (the mutations of subduxes are left untouched).
|
* (the mutations of subduxes are left untouched).
|
||||||
*
|
*
|
||||||
* Can be used, for example, for Immer integration:
|
* Can be used, for example, for Immer integration:
|
||||||
*
|
*
|
||||||
* ```
|
* ```
|
||||||
* import Updux from 'updux';
|
* import Updux from 'updux';
|
||||||
* import { produce } from 'Immer';
|
* import { produce } from 'Immer';
|
||||||
*
|
*
|
||||||
* const updux = new Updux({
|
* const updux = new Updux({
|
||||||
* initial: { counter: 0 },
|
* initial: { counter: 0 },
|
||||||
* groomMutations: mutation => (...args) => produce( mutation(...args) ),
|
* groomMutations: mutation => (...args) => produce( mutation(...args) ),
|
||||||
* mutations: {
|
* mutations: {
|
||||||
* add: (inc=1) => draft => draft.counter += inc
|
* add: (inc=1) => draft => draft.counter += inc
|
||||||
* }
|
* }
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* Or perhaps for debugging:
|
* Or perhaps for debugging:
|
||||||
*
|
*
|
||||||
* ```
|
* ```
|
||||||
* import Updux from 'updux';
|
* import Updux from 'updux';
|
||||||
*
|
*
|
||||||
* const updux = new Updux({
|
* const updux = new Updux({
|
||||||
* initial: { counter: 0 },
|
* initial: { counter: 0 },
|
||||||
* groomMutations: mutation => (...args) => state => {
|
* groomMutations: mutation => (...args) => state => {
|
||||||
* console.log( "got action ", args[1] );
|
* console.log( "got action ", args[1] );
|
||||||
* return mutation(...args)(state);
|
* return mutation(...args)(state);
|
||||||
* }
|
* }
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
groomMutations: (mutation: Mutation<S>) => Mutation<S>;
|
groomMutations: (mutation: Mutation<S>) => Mutation<S>;
|
||||||
|
|
||||||
@observable private localEffects: Dictionary<
|
@observable private localEffects: Dictionary<
|
||||||
@ -103,7 +103,9 @@ export class Updux<S = any> {
|
|||||||
|
|
||||||
@observable private localActions: Dictionary<ActionCreator>;
|
@observable private localActions: Dictionary<ActionCreator>;
|
||||||
|
|
||||||
@observable private localMutations: Dictionary<Mutation<S>>;
|
@observable private localMutations: Dictionary<
|
||||||
|
Mutation<S> | [Mutation<S>, boolean | undefined]
|
||||||
|
>;
|
||||||
|
|
||||||
constructor(config: UpduxConfig = {}) {
|
constructor(config: UpduxConfig = {}) {
|
||||||
this.groomMutations = config.groomMutations || ((x: Mutation<S>) => x);
|
this.groomMutations = config.groomMutations || ((x: Mutation<S>) => x);
|
||||||
@ -186,6 +188,27 @@ export class Updux<S = any> {
|
|||||||
return buildMutations(this.localMutations, this.subduxes);
|
return buildMutations(this.localMutations, this.subduxes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@computed get subduxUpreducer() {
|
||||||
|
return buildUpreducer(this.initial, buildMutations({}, this.subduxes));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Same as doing
|
* Same as doing
|
||||||
*
|
*
|
||||||
@ -245,6 +268,9 @@ export class Updux<S = any> {
|
|||||||
* Adds a mutation and its associated action to the updux.
|
* Adds a mutation and its associated action to the updux.
|
||||||
* If a local mutation was already associated to the action,
|
* If a local mutation was already associated to the action,
|
||||||
* it will be replaced by the new one.
|
* it will be replaced by the new one.
|
||||||
|
* @param isSink
|
||||||
|
* If `true`, disables the subduxes mutations for this action. To
|
||||||
|
* conditionally run the subduxes mutations, check out [[subduxUpreducer]].
|
||||||
* @example
|
* @example
|
||||||
* ```
|
* ```
|
||||||
* updux.addMutation( add, inc => state => state + inc );
|
* updux.addMutation( add, inc => state => state + inc );
|
||||||
@ -253,11 +279,13 @@ export class Updux<S = any> {
|
|||||||
addMutation<A extends ActionCreator>(
|
addMutation<A extends ActionCreator>(
|
||||||
creator: A,
|
creator: A,
|
||||||
mutation: Mutation<S, A extends (...args: any[]) => infer R ? R : never>,
|
mutation: Mutation<S, A extends (...args: any[]) => infer R ? R : never>,
|
||||||
|
isSink?: boolean,
|
||||||
) {
|
) {
|
||||||
this.localActions[creator.type] = creator;
|
this.localActions[creator.type] = creator;
|
||||||
this.localMutations[creator.type] = this.groomMutations(
|
this.localMutations[creator.type] = [
|
||||||
mutation as any,
|
this.groomMutations(mutation as any) as Mutation<S>,
|
||||||
) as Mutation<S>;
|
isSink,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,5 +4,6 @@
|
|||||||
"out": "docs",
|
"out": "docs",
|
||||||
"mode": "file",
|
"mode": "file",
|
||||||
"excludePrivate": true,
|
"excludePrivate": true,
|
||||||
"excludeNotExported": false
|
"excludeNotExported": false,
|
||||||
|
"exclude": [ "src/**/*test.ts" ]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user