perf: apply record optimistic effects with cache.modify on mutation (#3540)
* perf: apply record optimistic effects with cache.modify on mutation Closes #3509 * refactor: return early when created records do not match filter * fix: fix id generation on record creation * fix: comment filtering behavior on record creation * Fixed typing error * refactor: review - use ?? * refactor: review - add variables in readFieldValueToSort * docs: review - add comments for variables.first in triggerUpdateRecordOptimisticEffect * refactor: review - add intermediary variable for 'not' filter in useMultiObjectSearchMatchesSearchFilterAndToSelectQuery * refactor: review - add filter utils * fix: fix tests --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
@ -1,38 +0,0 @@
|
||||
import { ReactNode } from 'react';
|
||||
import { MockedProvider } from '@apollo/client/testing';
|
||||
import { renderHook } from '@testing-library/react';
|
||||
import { RecoilRoot } from 'recoil';
|
||||
|
||||
import { useRecordOptimisticEffect } from '@/object-metadata/hooks/useRecordOptimisticEffect';
|
||||
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
|
||||
|
||||
const mockRegisterOptimisticEffect = jest.fn();
|
||||
|
||||
jest.mock('@/apollo/optimistic-effect/hooks/useOptimisticEffect', () => ({
|
||||
useOptimisticEffect: jest.fn(() => ({
|
||||
registerOptimisticEffect: mockRegisterOptimisticEffect,
|
||||
unregisterOptimisticEffect: jest.fn(),
|
||||
})),
|
||||
}));
|
||||
|
||||
const Wrapper = ({ children }: { children: ReactNode }) => (
|
||||
<RecoilRoot>
|
||||
<MockedProvider addTypename={false}>{children}</MockedProvider>
|
||||
</RecoilRoot>
|
||||
);
|
||||
|
||||
const mockObjectMetadataItems = getObjectMetadataItemsMock();
|
||||
|
||||
describe('useRecordOptimisticEffect', () => {
|
||||
it('should work as expected', async () => {
|
||||
const objectMetadataItem = mockObjectMetadataItems.find(
|
||||
(item) => item.namePlural === 'people',
|
||||
)!;
|
||||
|
||||
renderHook(() => useRecordOptimisticEffect({ objectMetadataItem }), {
|
||||
wrapper: Wrapper,
|
||||
});
|
||||
|
||||
expect(mockRegisterOptimisticEffect).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
@ -1,57 +0,0 @@
|
||||
import { useEffect } from 'react';
|
||||
|
||||
import { useOptimisticEffect } from '@/apollo/optimistic-effect/hooks/useOptimisticEffect';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { OrderByField } from '@/object-metadata/types/OrderByField';
|
||||
import { getRecordOptimisticEffectDefinition } from '@/object-record/graphql/optimistic-effect-definition/getRecordOptimisticEffectDefinition';
|
||||
import { ObjectRecordQueryFilter } from '@/object-record/record-filter/types/ObjectRecordQueryFilter';
|
||||
|
||||
export const useRecordOptimisticEffect = ({
|
||||
objectMetadataItem,
|
||||
filter,
|
||||
orderBy,
|
||||
limit,
|
||||
}: {
|
||||
objectMetadataItem: ObjectMetadataItem;
|
||||
filter?: ObjectRecordQueryFilter;
|
||||
orderBy?: OrderByField;
|
||||
limit?: number;
|
||||
}) => {
|
||||
const { registerOptimisticEffect, unregisterOptimisticEffect } =
|
||||
useOptimisticEffect({
|
||||
objectNameSingular: objectMetadataItem.nameSingular,
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
registerOptimisticEffect({
|
||||
definition: getRecordOptimisticEffectDefinition({
|
||||
objectMetadataItem,
|
||||
}),
|
||||
variables: {
|
||||
filter,
|
||||
orderBy,
|
||||
limit,
|
||||
},
|
||||
});
|
||||
|
||||
return () => {
|
||||
unregisterOptimisticEffect({
|
||||
definition: getRecordOptimisticEffectDefinition({
|
||||
objectMetadataItem,
|
||||
}),
|
||||
variables: {
|
||||
filter,
|
||||
orderBy,
|
||||
limit,
|
||||
},
|
||||
});
|
||||
};
|
||||
}, [
|
||||
registerOptimisticEffect,
|
||||
filter,
|
||||
orderBy,
|
||||
limit,
|
||||
objectMetadataItem,
|
||||
unregisterOptimisticEffect,
|
||||
]);
|
||||
};
|
||||
Reference in New Issue
Block a user