File

src/app/book/book-components/components/selected-book/smart/selected-book.component.ts

Metadata

changeDetection ChangeDetectionStrategy.OnPush
selector selected-book
template
<selected-book-ui    [selectedBook]="selectedBook$ | async"
    (onAddToBasket)="addToBasket()"></selected-book-ui>

Index

Properties
Methods

Constructor

constructor(store: Store)
Parameters :
Name Type Optional
store Store<any> No

Methods

addToBasket
addToBasket()
Returns : void

Properties

selectedBook$
Type : Observable<Book>
import { Component, ChangeDetectionStrategy } from "@angular/core"

import { Store, select } from '@ngrx/store'
import { Observable, combineLatest } from 'rxjs'
import { map } from 'rxjs/operators'

import { Book } from '../../../../book-data/models/book.model'
import { selectedBookAddToCartBtnClick } from '../../../../book-data/actions/book.actions'
import { selectActiveBookId, selectBooksCacheEntities } from '../../../../../books/books-data/selectors/books-cache.selectors'

@Component({
  selector: 'selected-book',
  template: `<selected-book-ui
    [selectedBook]="selectedBook$ | async"
    (onAddToBasket)="addToBasket()"></selected-book-ui>`,
    changeDetection: ChangeDetectionStrategy.OnPush
})
export class SelectedBookComponent {
  selectedBook$: Observable<Book>

  constructor(private store: Store<any>) {
    this.selectedBook$ = combineLatest(
      store.pipe(select(selectActiveBookId)),
      store.pipe(select(selectBooksCacheEntities))
    ).pipe(
      map(([activeBookId, books]) => books[activeBookId])
    )
  }

  addToBasket(): void {
    this.store.dispatch(selectedBookAddToCartBtnClick())
  }
}
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""