export function useRemoveCompletedTodosMutation()

in todo/js/mutations/RemoveCompletedTodosMutation.js [24:78]


export function useRemoveCompletedTodosMutation(
  userRef: RemoveCompletedTodosMutation_user$key,
  todoConnectionRef: RemoveCompletedTodosMutation_todoConnection$key,
): () => void {
  const user = useFragment(
    graphql`
      fragment RemoveCompletedTodosMutation_user on User {
        id
        userId
        totalCount
      }
    `,
    userRef,
  );
  const todoConnection = useFragment(
    graphql`
      fragment RemoveCompletedTodosMutation_todoConnection on TodoConnection {
        __id
        edges {
          node {
            id
            complete
          }
        }
      }
    `,
    todoConnectionRef,
  );
  const [commit] = useMutation(mutation);

  return useCallback(() => {
    const completedTodoIds = todoConnection.edges
      .filter((edge) => edge.node.complete)
      .map((edge) => edge.node.id);

    commit({
      variables: {
        input: {
          userId: user.userId,
        },
        connections: [todoConnection.__id],
      },
      optimisticResponse: {
        removeCompletedTodos: {
          deletedTodoIds: completedTodoIds,
          user: {
            id: user.id,
            completedCount: 0,
            totalCount: user.totalCount - completedTodoIds.length,
          },
        },
      },
    });
  }, [commit, user, todoConnection]);
}