Custom Mutation creation
Mutation is a simple object with that stores some reactive primitives — Event, Effect, and Store. It means you can create Mutation not only by built-in factories but by your own. E.g. 👇
ts
function createAsyncStorageMutation({ storageKey }) {
const start = createEvent();
const executeFx = createEffect((value) => asyncLocalStorage.setItem(storageKey, value));
sample({ clock: start, target: executeFx });
return { start, ... };
}In this example, some Effector APIs were used to create Query —
createEvent,createEffect.
Of course, it looks pretty verbose, so Farfetched provides a special helper that aims to simplify creation of custom Mutation factories — createHeadlessMutation. Let us rewrite provided example with this helper 👇
ts
import { createHeadlessMutation } from '@farfetched/core';
function createAsyncStorageMutation({ storageKey }) {
const executeFx = createEffect((value) => asyncLocalStorage.setItem(storageKey, value));
const headlessQuery = createHeadlessMutation(/*...*/);
headlessQuery.__.executeFx.use(executeFx);
return headlessQuery;
}createHeadlessMutataion hides all logic to handle contracts and errors inside, so you only have to provide executor, which will be called to preform mutation.