07a8f68ef1
* add fieldDefinition * update naming * use a unique contextProvider for editable fields * remove EntityUpdateMutationHookContext.Provider usage in CompanyBoardCard * add fieldDefinitionState * remove unnecessary refetchQueries to avoid re-render * add FieldMetadata * add type guards and update useUpdateGenericEntityField * restore refetchQueries
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { useCallback } from 'react';
|
|
import { useApolloClient } from '@apollo/client';
|
|
|
|
import { Activity, useUpdateActivityMutation } from '~/generated/graphql';
|
|
|
|
import { ACTIVITY_UPDATE_FRAGMENT } from '../queries/update';
|
|
|
|
type Task = Pick<Activity, 'id'>;
|
|
|
|
export function useCompleteTask(task: Task) {
|
|
const [updateActivityMutation] = useUpdateActivityMutation();
|
|
|
|
const client = useApolloClient();
|
|
const cachedTask = client.readFragment({
|
|
id: `Activity:${task.id}`,
|
|
fragment: ACTIVITY_UPDATE_FRAGMENT,
|
|
});
|
|
|
|
const completeTask = useCallback(
|
|
(value: boolean) => {
|
|
const completedAt = value ? new Date().toISOString() : null;
|
|
updateActivityMutation({
|
|
variables: {
|
|
where: { id: task.id },
|
|
data: {
|
|
completedAt,
|
|
},
|
|
},
|
|
optimisticResponse: {
|
|
__typename: 'Mutation',
|
|
updateOneActivity: {
|
|
...cachedTask,
|
|
completedAt,
|
|
},
|
|
},
|
|
});
|
|
},
|
|
[cachedTask, task.id, updateActivityMutation],
|
|
);
|
|
|
|
return {
|
|
completeTask,
|
|
};
|
|
}
|