0.0.2 • Published 2 years ago

easy-peasy-classes v0.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

easy-peasy-classes

easy-peasy-classes is a simple package that gives you the abiliy to write your easy-peasy models with typescript classes and decorators. Giving you an easy and concise way to build your store and getting code autocompletion + type safety. easy-peasy-classes is heavily inspired by erencay's easy-peasy-decorators package. The approach slithy differs in order to add some new features.

Disclaimer

This package (and its documentation) is still under development and is not suitable for use yet.

easy-peasy-classeseasy-peasy-decorators
No need for a duplicate definition of the model and its interface
Autocompletion when accessing state and actions, even for reusable store models
No need to import/export your models throughout your project-
No need to extend every model from a base class-
Ability to mix with classic easy-peasy model definitions-
Convenient for deeply nested store structure-
Ability to define resusable models-
Class inheritence for models / Definition-
this.getStoreState() and this.getStoreActions() helpers-
Possibilty to define a this.resetState() helper-

Installation

npm install easy-peasy easy-peasy-classes
# or
yarn add easy-peasy easy-peasy-classes

Basic usage

easy-peasy-classes comes with 7 decorators

@ModelRequired on top of every class model
@PropertyState value or sub-model
@ChildSame as @Property but enforce that useStoreState hook will get every @Property or @Child individually. More details here
@Action
@Thunk
@Computed
@Listener()

Reusable models

In classic easy-peasy, a reusable models is a model wrapped in a function. This way you can duplicate it. This is usefull if you have multiple components that have the same behaviour but not the same state values.

With classic easy-peasy syntax

//Reusable model definition
const CheckboxReusable = ()=>({
  isChecked: false,
  toggle: action((state, payload) => {
    state.isChecked = !state.isChecked);
  }),
})

//Usage in a parent model
export const ListModel = {
    consentmentCheckbox: CheckboxReusable(),
    newsletterCheckbox: CheckboxReusable()
}
//Reusable model definition
@Model
class CheckboxReusable extends BaseModel {

    @Property
    isChecked: boolean = false

    @Action
    toggle(){
        this.isChecked = !this.isChecked
    }
}

//Usage in a parent model
@Model
export class ListModel extends BaseModel{
    
    @Child
    consentmentCheckbox: CheckboxReusable = CheckboxReusable.obj
    
    
    @Child
    newsletterCheckbox: CheckboxReusable = CheckboxReusable.obj
    
}


//or  with classic easy-peasy
export const ListModel = {
    consentmentCheckbox: CheckboxReusable.obj as CheckboxReusable,
    newsletterCheckbox: CheckboxReusable.obj as CheckboxReusable
}

@Child

0.0.2

2 years ago

0.0.0

2 years ago

1.0.10

3 years ago

1.0.12

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.2

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.1

3 years ago

1.0.0

2 years ago

0.0.1

2 years ago