wip
This commit is contained in:
parent
7cd7e27805
commit
55812ed6d8
@ -66,7 +66,7 @@
|
||||
"url": "https://github.com/yanick/updux/issues"
|
||||
},
|
||||
"homepage": "https://github.com/yanick/updux#readme",
|
||||
"types": "./types/index.d.ts",
|
||||
"types": "./dist/index.d.ts",
|
||||
"prettier": {
|
||||
"tabWidth": 4,
|
||||
"singleQuote": true,
|
||||
|
13
src/Updux.ts
13
src/Updux.ts
@ -152,10 +152,7 @@ export class Updux {
|
||||
return this.#memoInitial(this.#initial, this.#subduxes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {Record<string,Function>}
|
||||
*/
|
||||
get actions() {
|
||||
get actions(): Record<string, Function> {
|
||||
return this.#memoActions(this.#actions, this.#subduxes);
|
||||
}
|
||||
|
||||
@ -183,7 +180,7 @@ export class Updux {
|
||||
this.#reactions = [...this.#reactions, subscription];
|
||||
}
|
||||
|
||||
setAction(type, payloadFunc) {
|
||||
setAction(type, payloadFunc?: Function) {
|
||||
const theAction = action(type, payloadFunc);
|
||||
|
||||
this.#actions = { ...this.#actions, [type]: theAction };
|
||||
@ -325,10 +322,10 @@ export class Updux {
|
||||
};
|
||||
}
|
||||
|
||||
createStore(initial) {
|
||||
createStore(initial?: unknown) {
|
||||
const store : {
|
||||
getState: Function,
|
||||
dispatch: Function,
|
||||
getState: Function & Record<string,Function>,
|
||||
dispatch: Function & Record<string,Function>,
|
||||
selectors: Record<string,Function>,
|
||||
actions: Record<string,Function>,
|
||||
} = reduxCreateStore(
|
||||
|
@ -1,17 +0,0 @@
|
||||
export function action(type, payloadFunction = null) {
|
||||
const generator = function (payloadArg) {
|
||||
const result = { type };
|
||||
|
||||
if (payloadFunction) {
|
||||
result.payload = payloadFunction(payloadArg);
|
||||
} else {
|
||||
if (payloadArg !== undefined) result.payload = payloadArg;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
generator.type = type;
|
||||
|
||||
return generator;
|
||||
}
|
39
src/actions.ts
Normal file
39
src/actions.ts
Normal file
@ -0,0 +1,39 @@
|
||||
export type Action<T extends string=string,TPayload=unknown> = {
|
||||
type: T; meta?: Record<string,unknown>; } & (
|
||||
{ payload?: TPayload }
|
||||
)
|
||||
|
||||
export type ActionGenerator<TType extends string = string, TPayloadGen = undefined> = {
|
||||
type: TType;
|
||||
} & (TPayloadGen extends (...args:any) => any
|
||||
? (...args: Parameters<TPayloadGen>) => {
|
||||
type: TType;
|
||||
payload: ReturnType<TPayloadGen>;
|
||||
}
|
||||
: (...args: any[]) => { type: TType; payload?: unknown });
|
||||
|
||||
// interface Action {
|
||||
// <T extends string = string>(actionType: T): ActionGenerator<T>;
|
||||
// <T extends string = string, F extends Function = Function>(
|
||||
// actionType: T,
|
||||
// payloadGen: F
|
||||
// ): ActionGenerator<T, F>;
|
||||
// }
|
||||
|
||||
export function action(type, payloadFunction = null) {
|
||||
const generator = function (...payloadArg) {
|
||||
const result :Action = { type };
|
||||
|
||||
if (payloadFunction) {
|
||||
result.payload = payloadFunction(...payloadArg);
|
||||
} else {
|
||||
if (payloadArg[0] !== undefined) result.payload = payloadArg[0];
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
generator.type = type;
|
||||
|
||||
return generator;
|
||||
}
|
@ -5,7 +5,7 @@ export function buildSelectors(localSelectors, splatSelector = {}, subduxes ={})
|
||||
if (!selectors) return {};
|
||||
if (slice === '*') return {};
|
||||
|
||||
return mapValues(selectors, (func) => (state) => func(state[slice]));
|
||||
return mapValues(selectors, (func: Function) => (state) => func(state[slice]));
|
||||
});
|
||||
|
||||
let splat = {};
|
||||
|
@ -8,6 +8,8 @@ export function buildUpreducer(initial, mutations, subduxes = {}) {
|
||||
: null;
|
||||
|
||||
return (action) => (state) => {
|
||||
if( !action?.type ) throw new Error("upreducer called with a bad action");
|
||||
|
||||
let newState = state ?? initial;
|
||||
|
||||
if (subReducers) {
|
||||
|
Loading…
Reference in New Issue
Block a user