Use forceRefetch for task update (#2695)

This commit is contained in:
Lucas Bordeau
2023-11-24 15:38:21 +01:00
committed by GitHub
parent e6744e7ce1
commit 6d1f52a888
5 changed files with 23 additions and 18 deletions

View File

@ -78,9 +78,7 @@ export const ActivityEditor = ({
useState<boolean>(false); useState<boolean>(false);
const [title, setTitle] = useState<string | null>(activity.title ?? ''); const [title, setTitle] = useState<string | null>(activity.title ?? '');
const [completedAt, setCompletedAt] = useState<string | null>(
activity.completedAt ?? '',
);
const containerRef = useRef<HTMLDivElement>(null); const containerRef = useRef<HTMLDivElement>(null);
const { updateOneObject } = useUpdateOneObjectRecord<Activity>({ const { updateOneObject } = useUpdateOneObjectRecord<Activity>({
objectNameSingular: 'activity', objectNameSingular: 'activity',
@ -91,6 +89,7 @@ export const ActivityEditor = ({
objectRecordId: activity.id, objectRecordId: activity.id,
fieldMetadataName: 'dueAt', fieldMetadataName: 'dueAt',
fieldPosition: 0, fieldPosition: 0,
forceRefetch: true,
}); });
const { FieldContextProvider: AssigneeFieldContextProvider } = const { FieldContextProvider: AssigneeFieldContextProvider } =
@ -99,6 +98,7 @@ export const ActivityEditor = ({
objectRecordId: activity.id, objectRecordId: activity.id,
fieldMetadataName: 'assignee', fieldMetadataName: 'assignee',
fieldPosition: 1, fieldPosition: 1,
forceRefetch: true,
}); });
const updateTitle = useCallback( const updateTitle = useCallback(
@ -119,8 +119,8 @@ export const ActivityEditor = ({
input: { input: {
completedAt: value ? new Date().toISOString() : null, completedAt: value ? new Date().toISOString() : null,
}, },
forceRefetch: true,
}); });
setCompletedAt(value ? new Date().toISOString() : null);
}, },
[activity.id, updateOneObject], [activity.id, updateOneObject],
); );
@ -146,7 +146,7 @@ export const ActivityEditor = ({
<ActivityTypeDropdown activity={activity} /> <ActivityTypeDropdown activity={activity} />
<ActivityTitle <ActivityTitle
title={title ?? ''} title={title ?? ''}
completed={!!completedAt} completed={!!activity.completedAt}
type={activity.type} type={activity.type}
onTitleChange={(newTitle) => { onTitleChange={(newTitle) => {
setTitle(newTitle); setTitle(newTitle);

View File

@ -38,12 +38,6 @@ const StyledContainer = styled.div`
width: 100%; width: 100%;
`; `;
const StyledCheckboxContainer = styled.div`
align-items: center;
display: flex;
justify-content: center;
`;
type ActivityTitleProps = { type ActivityTitleProps = {
title: string; title: string;
type: ActivityType; type: ActivityType;
@ -61,13 +55,12 @@ export const ActivityTitle = ({
}: ActivityTitleProps) => ( }: ActivityTitleProps) => (
<StyledContainer> <StyledContainer>
{type === 'Task' && ( {type === 'Task' && (
<StyledCheckboxContainer onClick={() => onCompletionChange(!completed)}> <Checkbox
<Checkbox size={CheckboxSize.Large}
size={CheckboxSize.Large} shape={CheckboxShape.Rounded}
shape={CheckboxShape.Rounded} checked={completed}
checked={completed} onCheckedChange={(value) => onCompletionChange(value)}
/> />
</StyledCheckboxContainer>
)} )}
<StyledEditableTitleInput <StyledEditableTitleInput
autoComplete="off" autoComplete="off"

View File

@ -18,6 +18,7 @@ export const useCompleteTask = (task: Task) => {
input: { input: {
completedAt, completedAt,
}, },
forceRefetch: true,
}); });
}, },
[task.id, updateOneObject], [task.id, updateOneObject],

View File

@ -11,11 +11,13 @@ export const useFieldContext = ({
fieldMetadataName, fieldMetadataName,
objectRecordId, objectRecordId,
fieldPosition, fieldPosition,
forceRefetch,
}: { }: {
objectNameSingular: string; objectNameSingular: string;
objectRecordId: string; objectRecordId: string;
fieldMetadataName: string; fieldMetadataName: string;
fieldPosition: number; fieldPosition: number;
forceRefetch?: boolean;
}) => { }) => {
const { objectMetadataItem } = useObjectMetadataItem({ const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular, objectNameSingular,
@ -43,6 +45,7 @@ export const useFieldContext = ({
updateOneObject?.({ updateOneObject?.({
idToUpdate: variables.where.id, idToUpdate: variables.where.id,
input: variables.data, input: variables.data,
forceRefetch,
}); });
}; };

View File

@ -1,4 +1,5 @@
import { useApolloClient, useMutation } from '@apollo/client'; import { useApolloClient, useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMetadataItemIdentifier'; import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMetadataItemIdentifier';
@ -12,6 +13,7 @@ export const useUpdateOneObjectRecord = <T>({
objectNotFoundInMetadata, objectNotFoundInMetadata,
updateOneMutation, updateOneMutation,
cacheFragment, cacheFragment,
findManyQuery,
} = useObjectMetadataItem({ } = useObjectMetadataItem({
objectNameSingular, objectNameSingular,
}); });
@ -24,9 +26,11 @@ export const useUpdateOneObjectRecord = <T>({
const updateOneObject = async ({ const updateOneObject = async ({
idToUpdate, idToUpdate,
input, input,
forceRefetch,
}: { }: {
idToUpdate: string; idToUpdate: string;
input: Record<string, any>; input: Record<string, any>;
forceRefetch?: boolean;
}) => { }) => {
if (!foundObjectMetadataItem || !objectNameSingular) { if (!foundObjectMetadataItem || !objectNameSingular) {
return null; return null;
@ -54,6 +58,10 @@ export const useUpdateOneObjectRecord = <T>({
...input, ...input,
}, },
}, },
refetchQueries: forceRefetch
? [getOperationName(findManyQuery) ?? '']
: undefined,
awaitRefetchQueries: forceRefetch,
}); });
return updatedObject.data[`update${capitalize(objectNameSingular)}`] as T; return updatedObject.data[`update${capitalize(objectNameSingular)}`] as T;