import { Result } from '@effect-atom/atom';
import { useAtom, useAtomSubscribe } from '@effect-atom/atom-react';
import type { CreateTodoPayload } from '@/models/todos/TodoSchemas';
import React from 'react';
import { toast } from 'sonner';
import { toDoMutationAtom } from '../atom-operations/todo-mutations';
export const useCreateToDo = () => {
const [createTodoResult, createTodoFn] = useAtom(toDoMutationAtom);
const wasWaiting = React.useRef(createTodoResult.waiting);
const createTodo = (payload: CreateTodoPayload) => {
createTodoFn(payload);
};
useAtomSubscribe(toDoMutationAtom, (result) => {
if (wasWaiting.current && !result.waiting) {
Result.builder(result)
.onSuccess((a) => toast.success(a.title))
.onError((e) => toast.error(e.message))
.orNull();
}
wasWaiting.current = result.waiting;
});
return {
createTodo,
isLoading: createTodoResult.waiting,
error:
createTodoResult._tag === 'Failure' ? createTodoResult.cause : undefined,
};
};
import { Result } from '@effect-atom/atom';
import { useAtom, useAtomSubscribe } from '@effect-atom/atom-react';
import type { CreateTodoPayload } from '@/models/todos/TodoSchemas';
import React from 'react';
import { toast } from 'sonner';
import { toDoMutationAtom } from '../atom-operations/todo-mutations';
export const useCreateToDo = () => {
const [createTodoResult, createTodoFn] = useAtom(toDoMutationAtom);
const wasWaiting = React.useRef(createTodoResult.waiting);
const createTodo = (payload: CreateTodoPayload) => {
createTodoFn(payload);
};
useAtomSubscribe(toDoMutationAtom, (result) => {
if (wasWaiting.current && !result.waiting) {
Result.builder(result)
.onSuccess((a) => toast.success(a.title))
.onError((e) => toast.error(e.message))
.orNull();
}
wasWaiting.current = result.waiting;
});
return {
createTodo,
isLoading: createTodoResult.waiting,
error:
createTodoResult._tag === 'Failure' ? createTodoResult.cause : undefined,
};
};