import { gql, useMutation, PureQueryOptions } from '@apollo/client'; import { FRAGMENT_FULL_PROJECT, FRAGMENT_FULL_TASK, FRAGMENT_FULL_PROJECT_PARAMS, FRAGMENT_FULL_TASK_CATEGORY } from '../fragments/project'; import { QUERY_PROJECTS } from '../queries/project'; export const MUTATION_CREATE_PROJECT = gql` mutation createProject($changes: CreateProjectChanges!) { createProject(changes: $changes) { ...FullProject } } ${FRAGMENT_FULL_PROJECT} `; export function useProjectCreateMutation() { return useMutation(MUTATION_CREATE_PROJECT); } export const MUTATION_UPDATE_PROJECT_TITLE = gql` mutation updateProjectTitle($projectId: ID!, $title: String!) { updateProjectTitle(projectId: $projectId, title: $title) { ...FullProject } } ${FRAGMENT_FULL_PROJECT} `; export function useUpdateProjectTitleMutation() { return useMutation(MUTATION_UPDATE_PROJECT_TITLE, { refetchQueries: ({ variables }: PureQueryOptions) => { return [ { query: QUERY_PROJECTS, variables: { filters: { ids: [ variables.projectId ] } }}, ]; } }); } export const MUTATION_ADD_PROJECT_TASK = gql` mutation addProjectTask($projectId: ID!, $changes: ProjectTaskChanges!) { addProjectTask(projectId: $projectId, changes: $changes) { ...FullTask } } ${FRAGMENT_FULL_TASK} `; export function useAddProjectTaskMutation() { return useMutation(MUTATION_ADD_PROJECT_TASK); } export const MUTATION_UPDATE_PROJECT_TASK = gql` mutation updateProjectTask($projectId: ID!, $taskId: ID!, $changes: ProjectTaskChanges!) { updateProjectTask(projectId: $projectId, taskId: $taskId, changes: $changes) { ...FullTask } } ${FRAGMENT_FULL_TASK} `; export function useUpdateProjectTaskMutation() { return useMutation(MUTATION_UPDATE_PROJECT_TASK); } export const MUTATION_REMOVE_PROJECT_TASK = gql` mutation removeProjectTask($projectId: ID!, $taskId: ID!) { removeProjectTask(projectId: $projectId, taskId: $taskId) } `; export function useRemoveProjectTaskMutation() { return useMutation(MUTATION_REMOVE_PROJECT_TASK); } export const MUTATION_UPDATE_PROJECT_PARAMS = gql` mutation updateProjectParams($projectId: ID!, $changes: ProjectParamsChanges!) { updateProjectParams(projectId: $projectId, changes: $changes) { ...FullProjectParams } } ${FRAGMENT_FULL_PROJECT_PARAMS} `; export function useUpdateProjectParamsMutation() { return useMutation(MUTATION_UPDATE_PROJECT_PARAMS); } export const MUTATION_ADD_PROJECT_TASK_CATEGORY = gql` mutation addProjectTaskCategory($projectId: ID!, $changes: ProjectTaskCategoryChanges!) { addProjectTaskCategory(projectId: $projectId, changes: $changes) { ...FullTaskCategory } } ${FRAGMENT_FULL_TASK_CATEGORY} `; export function useAddProjectTaskCategoryMutation() { return useMutation(MUTATION_ADD_PROJECT_TASK_CATEGORY); } export const MUTATION_UPDATE_PROJECT_TASK_CATEGORY = gql` mutation updateProjectTaskCategory($projectId: ID!, $taskCategoryId: ID!, $changes: ProjectTaskCategoryChanges!) { updateProjectTaskCategory(projectId: $projectId, taskCategoryId: $taskCategoryId, changes: $changes) { ...FullTaskCategory } } ${FRAGMENT_FULL_TASK_CATEGORY} `; export function useUpdateProjectTaskCategoryMutation() { return useMutation(MUTATION_UPDATE_PROJECT_TASK_CATEGORY); } export const MUTATION_REMOVE_PROJECT_TASK_CATEGORY = gql` mutation removeProjectTaskCategory($projectId: ID!, $taskCategoryId: ID!) { removeProjectTaskCategory(projectId: $projectId, taskCategoryId: $taskCategoryId) } `; export function useRemoveProjectTaskCategoryMutation() { return useMutation(MUTATION_REMOVE_PROJECT_TASK_CATEGORY); }