17.0.0 • Published 2 months ago

@tethys/store v17.0.0

Weekly downloads
-
License
-
Repository
-
Last release
2 months ago

@tethys/store

GitHubActionCI Coverage Status npm.io npm (scoped) npm release docgeni code style: prettier

A mini, yet powerful state management library for Angular.

English | 中文文档

Features

  • Angular Styled, Store as a Service
  • DDD, multi-store model, each store belongs to a domain, state storage and actions are together
  • Easy to use API without excessive learning cost

Installation

npm install @tethys/store --save
# or if you are using yarn
yarn add @tethys/store

Simple Usage

import { Injectable } from '@angular/core';
import { Action, Store } from '@tethys/store';
import { of } from 'rxjs';
import { tap } from 'rxjs/operators';

interface CounterState {
    count: number;
}

@Injectable()
export class CounterStore extends Store<CounterState> {
    static countSelector(state: CounterState) {
        return state.count;
    }

    constructor() {
        super({ count: 0 });
    }

    @Action()
    increase() {
        return of(true).pipe(
            tap(() => {
                this.update({ count: this.snapshot.count + 1 });
            })
        );
    }

    @Action()
    decrease() {
        return of(true).pipe(
            tap(() => {
                this.update((state) => {
                    return {
                        count: state.count - 1
                    };
                });
            })
        );
    }
}
@Component({
    selector: 'thy-store-counter-example',
    template: `<div>Count: {{ count$ | async }}</div>
               <button class="dg-btn dg-btn-primary dg-btn-sm" (click)="increase()">+</button>
               <button class="dg-btn dg-btn-primary dg-btn-sm" (click)="decrease()">-</button>
`,
    styleUrls: ['./counter.component.scss']
})
export class ThyStoreCounterExampleComponent implements OnInit {
    count$: Observable<number> = this.counterStore.select(CounterStore.countSelector);

    constructor(public counterStore: CounterStore) {}

    ngOnInit(): void {}

    increase() {
        this.counterStore.increase();
    }

    decrease() {
        this.counterStore.decrease();
    }
}

Documentation

Development

$ git clone https://github.com/worktile/store
$ cd store && yarn
$ yarn start:docs // open http://localhost:8887

Release & Publish

yarn release
yarn pub

LICENSE

MIT License

17.0.0

2 months ago

17.0.0-next.0

2 months ago

16.1.0

2 months ago

16.1.0-next.2

5 months ago

16.1.0-next.1

5 months ago

16.1.0-next.0

5 months ago

16.0.0-next.0

9 months ago

16.0.0-next.1

9 months ago

15.1.0

10 months ago

16.0.0

9 months ago

15.0.0

1 year ago

15.0.0-next.0

1 year ago

14.2.0

1 year ago

14.1.0-next.3

1 year ago

14.1.0-next.2

1 year ago

14.1.0

1 year ago

14.1.1

1 year ago

14.1.0-next.1

1 year ago

14.1.0-next.0

1 year ago

14.0.4

2 years ago

14.0.1

2 years ago

14.0.2

2 years ago

14.0.3

2 years ago

14.0.0

2 years ago

14.0.0-next.0

2 years ago

13.0.4

2 years ago

13.0.2

2 years ago

13.0.3

2 years ago

13.0.0

2 years ago

13.0.1

2 years ago

12.0.0

2 years ago

11.0.0

3 years ago

0.0.1

3 years ago