Select

stapp-select utilizes the provided selector function when any of provided reactOn event is dispatched, stores the result at the provided field name in the app state and dispatches reactWith events is provided.

Installation

npm install stapp-select stapp rxjs
# OR using stapp-cli-tools
stapp install stapp-select

Peer dependencies

  • stapp: >= 2.6
  • rxjs: >= 6

Definition

type select = <State, Result, Name extends string>(
  config: {
    name: Name
    selector: (state: State) => Result
    reactOn: Array<AnyEventCreator | string>
    reactWith?: Array<EventCreator1<Result>>
  }
) => Module<{}, { [K in Name]: Result }>

Usage

Example usage: dynamic form with fields depending on authorization state.

import { createApp } from 'stapp'
import { formBase } from 'stapp-formbase'
import { select } from 'stapp-select'
import { authModule, authChange } from '../modules/'

const app = createApp({
  name: 'My Form App',
  modules: [
    select({
      name: 'fields',
      reactOn: [authChange],
      selector: state => {
         return state.auth.isAuthorized
          ? ['fieldA', 'fieldB'] 
          : ['name', 'email', 'fieldA', 'fieldB']
      }
    }),
    formBase(),
    authModule()
  ]
})

console.log(app.getState().fields)
// -> 'name', 'email', 'fieldA', 'fieldB'

app.api.authorize({ ... })
console.log(app.getState().fields)
// ->'fieldA', 'fieldB'

name

name defines where to place the selected data in the app state. You can add several select modules to app with different names.

reactOn

An array of event creators or event types. Module will update (call the selector and save the result) stored data when any of these events emits.

selector

Receives state, can return anything. Result will be stored in the provided field name.

reactWith

An optional array of event creators. These events will be dispatched immediately after data update with the selector result as a payload.

results matching ""

    No results matching ""