patronum icon indicating copy to clipboard operation
patronum copied to clipboard

splitMap - added targets field

Open earthspacon opened this issue 1 year ago • 3 comments

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-error to mark expected type error
    • import { expectType } from 'tsd' to check expected return type
  • [x] Add documentation in src/method-name/readme.md
    • Add header Patronum/MethodName
    • Add section with overloads, if have
    • Add Motivation, Formulae, Arguments and Return sections for each overload
    • Add useful examples in Example section for each overload
  • [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 like title
    • Add desription with one short sentence describing what method useful for
    • Add group. To categorize method on /operators page. Full list of available groups, you can see in documentation/src/content/config.ts

earthspacon avatar Aug 01 '24 09:08 earthspacon

@sergeysova @AlexandrHoroshih 😃

earthspacon avatar Aug 20 '24 08:08 earthspacon

Added new section to a checklist to help integrating with new documentation website

sergeysova avatar Oct 09 '24 11:10 sergeysova

@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? image

earthspacon avatar Oct 30 '24 11:10 earthspacon