Refetch aggregate queries on record creation/update/deletion of record (#8885)

Closes #8755.
Refetching the aggregate queries on an object following creation,
update, deletion of a record.
This commit is contained in:
Marie
2024-12-05 15:23:54 +01:00
committed by GitHub
parent 9ed9b4746a
commit 26ff344f56
32 changed files with 590 additions and 71 deletions

View File

@ -35,7 +35,7 @@ describe('generateAggregateQuery', () => {
const normalizedQuery = result.loc?.source.body.replace(/\s+/g, ' ').trim();
expect(normalizedQuery).toBe(
'query AggregateManyCompanies($filter: CompanyFilterInput) { companies(filter: $filter) { id name createdAt } }',
'query AggregateCompanies($filter: CompanyFilterInput) { companies(filter: $filter) { id name createdAt } }',
);
});
@ -69,7 +69,7 @@ describe('generateAggregateQuery', () => {
const normalizedQuery = result.loc?.source.body.replace(/\s+/g, ' ').trim();
expect(normalizedQuery).toBe(
'query AggregateManyPeople($filter: PersonFilterInput) { people(filter: $filter) { id } }',
'query AggregatePeople($filter: PersonFilterInput) { people(filter: $filter) { id } }',
);
});
});

View File

@ -0,0 +1,23 @@
import { getAggregateQueryName } from '@/object-record/utils/getAggregateQueryName';
describe('getAggregateQueryName', () => {
it('should return the correct aggregate query name for a valid plural name', () => {
expect(getAggregateQueryName('opportunities')).toBe(
'AggregateOpportunities',
);
expect(getAggregateQueryName('companies')).toBe('AggregateCompanies');
expect(getAggregateQueryName('people')).toBe('AggregatePeople');
});
it('should throw an error when input is undefined', () => {
expect(() => getAggregateQueryName(undefined as any)).toThrow(
'objectMetadataNamePlural is required',
);
});
it('should throw an error when input is null', () => {
expect(() => getAggregateQueryName(null as any)).toThrow(
'objectMetadataNamePlural is required',
);
});
});

View File

@ -2,6 +2,7 @@ import gql from 'graphql-tag';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { RecordGqlFields } from '@/object-record/graphql/types/RecordGqlFields';
import { getAggregateQueryName } from '@/object-record/utils/getAggregateQueryName';
import { capitalize } from '~/utils/string/capitalize';
export const generateAggregateQuery = ({
@ -17,7 +18,7 @@ export const generateAggregateQuery = ({
.join('\n ');
return gql`
query AggregateMany${capitalize(objectMetadataItem.namePlural)}($filter: ${capitalize(
query ${getAggregateQueryName(objectMetadataItem.namePlural)}($filter: ${capitalize(
objectMetadataItem.nameSingular,
)}FilterInput) {
${objectMetadataItem.namePlural}(filter: $filter) {

View File

@ -0,0 +1,11 @@
import { isDefined } from '~/utils/isDefined';
import { capitalize } from '~/utils/string/capitalize';
export const getAggregateQueryName = (
objectMetadataNamePlural: string,
): string => {
if (!isDefined(objectMetadataNamePlural)) {
throw new Error('objectMetadataNamePlural is required');
}
return `Aggregate${capitalize(objectMetadataNamePlural)}`;
};