feat: conditional schema based on column map instead of column field (#1978)
* feat: wip conditional schema based on column map instead of column field * feat: conditionalSchema columnMap and singular plural * fix: remove uuid fix * feat: add name and label (singular/plural) drop old tableColumnName
This commit is contained in:
@ -1,21 +1,55 @@
|
||||
import isEmpty from 'lodash.isempty';
|
||||
|
||||
import { FieldMetadata } from 'src/metadata/field-metadata/field-metadata.entity';
|
||||
|
||||
export const convertFieldsToGraphQL = (
|
||||
fields: any,
|
||||
fieldAliases: Record<string, string>,
|
||||
select: any,
|
||||
fields: FieldMetadata[],
|
||||
acc = '',
|
||||
) => {
|
||||
for (const [key, value] of Object.entries(fields)) {
|
||||
if (value && !isEmpty(value)) {
|
||||
const fieldsMap = new Map(
|
||||
// TODO: Handle plural for fields when we add relations
|
||||
fields.map((metadata) => [metadata.nameSingular, metadata]),
|
||||
);
|
||||
|
||||
for (const [key, value] of Object.entries(select)) {
|
||||
let fieldAlias = key;
|
||||
|
||||
if (fieldsMap.has(key)) {
|
||||
const metadata = fieldsMap.get(key)!;
|
||||
const entries = Object.entries(metadata.targetColumnMap);
|
||||
|
||||
if (entries.length > 0) {
|
||||
// If there is only one value, use it as the alias
|
||||
if (entries.length === 1) {
|
||||
const alias = entries[0][1];
|
||||
|
||||
fieldAlias = `${key}: ${alias}`;
|
||||
} else {
|
||||
// Otherwise it means it's a special type with multiple values, so we need fetch all fields
|
||||
fieldAlias = `
|
||||
${entries
|
||||
.map(
|
||||
([key, value]) => `___${metadata.nameSingular}_${key}: ${value}`,
|
||||
)
|
||||
.join('\n')}
|
||||
`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Recurse if value is a nested object, otherwise append field or alias
|
||||
if (
|
||||
!fieldsMap.has(key) &&
|
||||
value &&
|
||||
typeof value === 'object' &&
|
||||
!isEmpty(value)
|
||||
) {
|
||||
acc += `${key} {\n`;
|
||||
acc = convertFieldsToGraphQL(value, fieldAliases, acc);
|
||||
acc = convertFieldsToGraphQL(value, fields, acc); // recursive call with updated accumulator
|
||||
acc += `}\n`;
|
||||
} else {
|
||||
if (fieldAliases[key]) {
|
||||
acc += `${key}: ${fieldAliases[key]}\n`;
|
||||
} else {
|
||||
acc += `${key}\n`;
|
||||
}
|
||||
acc += `${fieldAlias}\n`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user