splitMap - added targets field
Description
This PR partially resolves this issue.
Often we need the same behavior as in split — react to derived events received from cases and trigger the corresponding units. In targets field we can pass object with the same keys as in cases and values with units to trigger on the corresponding event.
Maybe we should think about targets naming
type WSEvent =
| { type: 'init'; key: string }
| { type: 'increment'; count: number }
| { type: 'reset' };
export const websocketEventReceived = createEvent<WSEvent>();
const $isInitialized = createStore(false);
const $count = createStore<number | null>(null);
const getInitialDataFx = createEffect<string, void>();
splitMap({
source: websocketEventReceived,
cases: {
init: (event) => {
if (event.type === 'init') return { init: true, dataId: event.key };
},
increment: (payload) => {
if (payload.type === 'increment') return payload.count;
},
reset: ({ type }) => {
if (type === 'reset') return null;
},
},
targets: {
// EventCallable<{ init?: boolean; dataId?: string }>
init: spread({ init: $isInitialized, dataId: getInitialDataFx }),
increment: $count,
reset: [$count.reinit, $isInitialized.reinit],
},
});
Checklist
- [x] Add tests to
src/method-name/method-name.test.ts - [x] Add fork tests to
src/method-name/method-name.fork.test.ts - [x] Add type tests to
test-typings/method-name.ts- Use
// @ts-expect-errorto mark expected type error -
import { expectType } from 'tsd'to check expected return type
- Use
- [x] Add documentation in
src/method-name/readme.md- Add header
Patronum/MethodName - Add section with overloads, if have
- Add
Motivation,Formulae,ArgumentsandReturnsections for each overload - Add useful examples in
Examplesection for each overload
- Add header
- [x] Fill frontmatter in
src/method-name/readme.md- Add
title. Make sure it uses camelCase syntax just like the method itself - Add
slug. Use param-case to write it. In most cases it will be just liketitle - Add
desriptionwith one short sentence describing what method useful for - Add
group. To categorize method on/operatorspage. Full list of available groups, you can see in documentation/src/content/config.ts
- Add
@sergeysova @AlexandrHoroshih 😃
Added new section to a checklist to help integrating with new documentation website
@sergeysova can you help plz with tests in src/split-map/split-map.fork.test.ts, old tests are failing, maybe because new ones added and snapshot updated?