Files
klz-cables.com/.pnpm-store/v10/files/47/c940dac9e15462739114fe22eca89bb4fd6f19d035e706d669f7962e0942f82c6667a178ceb8ad453bdc32daed5a7bf0756789c67be22e38708c7b9a2765c3
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

387 lines
15 KiB
Plaintext

import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInputObjectType, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql';
import { flattenTopLevelFields, toWords } from 'payload';
import { fieldAffectsData, optionIsObject, tabHasName } from 'payload/shared';
import { GraphQLJSON } from '../packages/graphql-type-json/index.js';
import { combineParentName } from '../utilities/combineParentName.js';
import { formatName } from '../utilities/formatName.js';
import { groupOrTabHasRequiredSubfield } from '../utilities/groupOrTabHasRequiredSubfield.js';
import { withNullableType } from './withNullableType.js';
const idFieldTypes = {
number: GraphQLInt,
text: GraphQLString
};
export const getCollectionIDType = (type, collection)=>{
const idField = flattenTopLevelFields(collection.fields).find((field)=>fieldAffectsData(field) && field.name === 'id');
if (!idField) {
return idFieldTypes[type];
}
return idFieldTypes[idField.type];
};
export function buildMutationInputType({ name, config, fields, forceNullable = false, graphqlResult, parentIsLocalized, parentName }) {
const fieldToSchemaMap = {
array: (inputObjectTypeConfig, field)=>{
const fullName = combineParentName(parentName, toWords(field.name, true));
let type = buildMutationInputType({
name: fullName,
config,
fields: field.fields,
graphqlResult,
parentIsLocalized: parentIsLocalized || field.localized,
parentName: fullName
});
if (!type) {
return inputObjectTypeConfig;
}
type = new GraphQLList(withNullableType({
type,
field,
forceNullable,
parentIsLocalized
}));
return {
...inputObjectTypeConfig,
[formatName(field.name)]: {
type
}
};
},
blocks: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: GraphQLJSON
}
}),
checkbox: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: GraphQLBoolean
}
}),
code: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: GraphQLString,
field,
forceNullable,
parentIsLocalized
})
}
}),
collapsible: (inputObjectTypeConfig, field)=>field.fields.reduce((acc, subField)=>{
const addSubField = fieldToSchemaMap[subField.type];
if (addSubField) {
return addSubField(acc, subField);
}
return acc;
}, inputObjectTypeConfig),
date: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: GraphQLString,
field,
forceNullable,
parentIsLocalized
})
}
}),
email: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: GraphQLString,
field,
forceNullable,
parentIsLocalized
})
}
}),
group: (inputObjectTypeConfig, field)=>{
if (fieldAffectsData(field)) {
const requiresAtLeastOneField = groupOrTabHasRequiredSubfield(field);
const fullName = combineParentName(parentName, toWords(field.name, true));
let type = buildMutationInputType({
name: fullName,
config,
fields: field.fields,
graphqlResult,
parentIsLocalized: parentIsLocalized || field.localized,
parentName: fullName
});
if (!type) {
return inputObjectTypeConfig;
}
if (requiresAtLeastOneField) {
type = new GraphQLNonNull(type);
}
return {
...inputObjectTypeConfig,
[formatName(field.name)]: {
type
}
};
} else {
return field.fields.reduce((acc, subField)=>{
const addSubField = fieldToSchemaMap[subField.type];
if (addSubField) {
return addSubField(acc, subField);
}
return acc;
}, inputObjectTypeConfig);
}
},
json: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: GraphQLJSON,
field,
forceNullable,
parentIsLocalized
})
}
}),
number: (inputObjectTypeConfig, field)=>{
const type = field.name === 'id' ? GraphQLInt : GraphQLFloat;
return {
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: field.hasMany === true ? new GraphQLList(type) : type,
field,
forceNullable,
parentIsLocalized
})
}
};
},
point: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: new GraphQLList(GraphQLFloat),
field,
forceNullable,
parentIsLocalized
})
}
}),
radio: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: GraphQLString,
field,
forceNullable,
parentIsLocalized
})
}
}),
relationship: (inputObjectTypeConfig, field)=>{
const { relationTo } = field;
let type;
if (Array.isArray(relationTo)) {
const fullName = `${combineParentName(parentName, toWords(field.name, true))}RelationshipInput`;
type = new GraphQLInputObjectType({
name: fullName,
fields: {
relationTo: {
type: new GraphQLEnumType({
name: `${fullName}RelationTo`,
values: relationTo.reduce((values, option)=>({
...values,
[formatName(option)]: {
value: option
}
}), {})
})
},
value: {
type: GraphQLJSON
}
}
});
} else {
type = getCollectionIDType(config.db.defaultIDType, graphqlResult.collections[relationTo].config);
}
return {
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: field.hasMany ? new GraphQLList(type) : type
}
};
},
richText: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: GraphQLJSON,
field,
forceNullable,
parentIsLocalized
})
}
}),
row: (inputObjectTypeConfig, field)=>field.fields.reduce((acc, subField)=>{
const addSubField = fieldToSchemaMap[subField.type];
if (addSubField) {
return addSubField(acc, subField);
}
return acc;
}, inputObjectTypeConfig),
select: (inputObjectTypeConfig, field)=>{
const formattedName = `${combineParentName(parentName, field.name)}_MutationInput`;
let type = new GraphQLEnumType({
name: formattedName,
values: field.options.reduce((values, option)=>{
if (optionIsObject(option)) {
return {
...values,
[formatName(option.value)]: {
value: option.value
}
};
}
return {
...values,
[formatName(option)]: {
value: option
}
};
}, {})
});
type = field.hasMany ? new GraphQLList(type) : type;
type = withNullableType({
type,
field,
forceNullable,
parentIsLocalized
});
return {
...inputObjectTypeConfig,
[formatName(field.name)]: {
type
}
};
},
tabs: (inputObjectTypeConfig, field)=>{
return field.tabs.reduce((acc, tab)=>{
if (tabHasName(tab)) {
const fullName = combineParentName(parentName, toWords(tab.name, true));
const requiresAtLeastOneField = groupOrTabHasRequiredSubfield(field);
let type = buildMutationInputType({
name: fullName,
config,
fields: tab.fields,
graphqlResult,
parentIsLocalized: parentIsLocalized || tab.localized,
parentName: fullName
});
if (!type) {
return acc;
}
if (requiresAtLeastOneField) {
type = new GraphQLNonNull(type);
}
return {
...acc,
[tab.name]: {
type
}
};
}
return {
...acc,
...tab.fields.reduce((subFieldSchema, subField)=>{
const addSubField = fieldToSchemaMap[subField.type];
if (addSubField) {
return addSubField(subFieldSchema, subField);
}
return subFieldSchema;
}, acc)
};
}, inputObjectTypeConfig);
},
text: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: field.hasMany === true ? new GraphQLList(GraphQLString) : GraphQLString,
field,
forceNullable,
parentIsLocalized
})
}
}),
textarea: (inputObjectTypeConfig, field)=>({
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: withNullableType({
type: GraphQLString,
field,
forceNullable,
parentIsLocalized
})
}
}),
upload: (inputObjectTypeConfig, field)=>{
const { relationTo } = field;
let type;
if (Array.isArray(relationTo)) {
const fullName = `${combineParentName(parentName, toWords(field.name, true))}RelationshipInput`;
type = new GraphQLInputObjectType({
name: fullName,
fields: {
relationTo: {
type: new GraphQLEnumType({
name: `${fullName}RelationTo`,
values: relationTo.reduce((values, option)=>({
...values,
[formatName(option)]: {
value: option
}
}), {})
})
},
value: {
type: GraphQLJSON
}
}
});
} else {
type = getCollectionIDType(config.db.defaultIDType, graphqlResult.collections[relationTo].config);
}
return {
...inputObjectTypeConfig,
[formatName(field.name)]: {
type: field.hasMany ? new GraphQLList(type) : type
}
};
}
};
const fieldName = formatName(name);
const fieldSchemas = fields.reduce((inputObjectTypeConfig, field)=>{
const fieldSchema = fieldToSchemaMap[field.type];
if (typeof fieldSchema !== 'function') {
return inputObjectTypeConfig;
}
const schema = fieldSchema(inputObjectTypeConfig, field);
if (Object.keys(schema).length === 0) {
return inputObjectTypeConfig;
}
return {
...inputObjectTypeConfig,
...fieldSchema(inputObjectTypeConfig, field)
};
}, {});
if (Object.keys(fieldSchemas).length === 0) {
return null;
}
return new GraphQLInputObjectType({
name: `mutation${fieldName}Input`,
fields: fieldSchemas
});
}
//# sourceMappingURL=buildMutationInputType.js.map