Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
993a100eae | |||
29f0307ef8 | |||
9413c5bcdc | |||
1d5fb320f4 | |||
69e905ad76 | |||
7b9ed9ee78 | |||
f884807f33 | |||
f167800113 |
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@pushrocks/smartstate",
|
"name": "@pushrocks/smartstate",
|
||||||
"version": "1.0.16",
|
"version": "1.0.20",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@pushrocks/smartstate",
|
"name": "@pushrocks/smartstate",
|
||||||
"version": "1.0.16",
|
"version": "1.0.20",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "a package that handles state in a good way",
|
"description": "a package that handles state in a good way",
|
||||||
"main": "dist_ts/index.js",
|
"main": "dist_ts/index.js",
|
||||||
|
@ -5,21 +5,31 @@ import { StatePart } from './smartstate.classes.statepart';
|
|||||||
* Smartstate takes care of providing state
|
* Smartstate takes care of providing state
|
||||||
*/
|
*/
|
||||||
export class Smartstate<StatePartNameType> {
|
export class Smartstate<StatePartNameType> {
|
||||||
public statePartMap: { [key: string]: StatePart<StatePartNameType, any> } = {};
|
public statePartMap: { [key: string]: StatePart<StatePartNameType, unknown> } = {};
|
||||||
|
|
||||||
constructor() {}
|
constructor() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows getting and initializing a new statepart
|
||||||
|
* initMode === 'soft' it will allow existing stateparts
|
||||||
|
* initMode === 'mandatory' will fail if there is an exiting statepart
|
||||||
|
* initMode === 'force' will overwrite any existing statepart
|
||||||
|
* @param statePartNameArg
|
||||||
|
* @param initialArg
|
||||||
|
* @param initMode
|
||||||
|
*/
|
||||||
public getStatePart<PayloadType>(
|
public getStatePart<PayloadType>(
|
||||||
statePartNameArg: StatePartNameType,
|
statePartNameArg: string & StatePartNameType,
|
||||||
initialArg?: PayloadType
|
initialArg?: PayloadType,
|
||||||
|
initMode?: 'soft' | 'mandatory' | 'force'
|
||||||
): StatePart<StatePartNameType, PayloadType> {
|
): StatePart<StatePartNameType, PayloadType> {
|
||||||
if (this.statePartMap[statePartNameArg as any]) {
|
if (this.statePartMap[statePartNameArg as any]) {
|
||||||
if (initialArg) {
|
if (initialArg && (!initMode || initMode !== 'soft')) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`${statePartNameArg} already exists, yet you try to set an initial state again`
|
`${statePartNameArg} already exists, yet you try to set an initial state again`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return this.statePartMap[statePartNameArg as any];
|
return this.statePartMap[statePartNameArg] as StatePart<StatePartNameType, PayloadType>;
|
||||||
} else {
|
} else {
|
||||||
if (!initialArg) {
|
if (!initialArg) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
Reference in New Issue
Block a user