Fix all the broken CIs :p This includes an ongoing effort to simplify test maintenance by having 1 unique source of truth about metadata and data mocks (that will later be generated from a unique source of seeds: dev = demo = test) Regressions: - Unit line coverage: 60 > 55 - Storybook Pages branch coverage: 40 > 35 We will need to write tests to increase those coverage - RelationFieldDisplay perf: 0.2ms to 0.22ms > We might have a regression here - Removed perf story about RawJSON > We will need to re-add it
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
import { mapFieldMetadataToGraphQLQuery } from '@/object-metadata/utils/mapFieldMetadataToGraphQLQuery';
|
|
import { shouldFieldBeQueried } from '@/object-metadata/utils/shouldFieldBeQueried';
|
|
|
|
export const mapObjectMetadataToGraphQLQuery = ({
|
|
objectMetadataItems,
|
|
objectMetadataItem,
|
|
recordGqlFields,
|
|
computeReferences = false,
|
|
isRootLevel = true,
|
|
}: {
|
|
objectMetadataItems: ObjectMetadataItem[];
|
|
objectMetadataItem: Pick<ObjectMetadataItem, 'nameSingular' | 'fields'>;
|
|
recordGqlFields?: Record<string, any>;
|
|
computeReferences?: boolean;
|
|
isRootLevel?: boolean;
|
|
}): any => {
|
|
const fieldsThatShouldBeQueried =
|
|
objectMetadataItem?.fields
|
|
.filter((field) => field.isActive)
|
|
.sort((fieldA, fieldB) => fieldA.name.localeCompare(fieldB.name))
|
|
.filter((field) =>
|
|
shouldFieldBeQueried({
|
|
field,
|
|
recordGqlFields,
|
|
}),
|
|
) ?? [];
|
|
|
|
if (!isRootLevel && computeReferences) {
|
|
return `{
|
|
__ref
|
|
}`;
|
|
}
|
|
|
|
return `{
|
|
__typename
|
|
${fieldsThatShouldBeQueried
|
|
.map((field) => {
|
|
return mapFieldMetadataToGraphQLQuery({
|
|
objectMetadataItems,
|
|
field,
|
|
relationrecordFields:
|
|
typeof recordGqlFields?.[field.name] === 'boolean'
|
|
? undefined
|
|
: recordGqlFields?.[field.name],
|
|
computeReferences,
|
|
});
|
|
})
|
|
.join('\n')}
|
|
}`;
|
|
};
|