Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface Fruit {
- isRotten: boolean
- }
- interface Apple extends Fruit {
- apple: true
- }
- interface Banana extends Fruit {
- banana: true
- }
- interface State {
- apples: Apple[]
- bananas: Banana[]
- selected: Set<'Apples' | 'Bananas'>
- }
- const isRotten = <F extends Fruit>(fruit: F) => fruit.isRotten
- const edibleFruits = <F extends Fruit>(fruits: F[]) => fruits.filter(fruit => !isRotten(fruit))
- const apples$ = (state: State) => state.apples
- const bananas$ = (state: State) => state.bananas
- const selectedFruits$ = (state: State) => state.selected
- const edibleApples$ = map(apples$)(edibleFruits)
- const edibleBananas$ = map(bananas$)(edibleFruits)
- const selectedFruitsArray$ = map(selectedFruits$)(selected => Array.from(selected))
- const fruitBasket$ = flatMap(selectedFruitsArray$)(fruits => {
- const selectors$: Selector<State, Fruit[]>[] = fruits.map(fruit => {
- switch (fruit) {
- case 'Apples':
- return apples$
- case 'Bananas':
- return bananas$
- }
- })
- return createSelector(selectors$, (...allFruits) => ([] as Fruit[]).concat(...allFruits))
- })
Add Comment
Please, Sign In to add comment