payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
107 lines (106 loc) • 3.88 kB
JavaScript
// @ts-strict-ignore
import { fieldAffectsData, tabHasName } from '../fields/config/types.js';
const traverseFields = ({ data, // parent,
fields, result })=>{
fields.forEach((field)=>{
switch(field.type){
case 'collapsible':
case 'row':
{
traverseFields({
data,
fields: field.fields,
result
});
break;
}
case 'group':
{
let targetResult;
if (typeof field.saveToJWT === 'string') {
targetResult = field.saveToJWT;
result[field.saveToJWT] = data[field.name];
} else if (field.saveToJWT) {
targetResult = field.name;
result[field.name] = data[field.name];
}
const groupData = data[field.name];
const groupResult = targetResult ? result[targetResult] : result;
traverseFields({
data: groupData,
fields: field.fields,
result: groupResult
});
break;
}
case 'tab':
{
if (tabHasName(field)) {
let targetResult;
if (typeof field.saveToJWT === 'string') {
targetResult = field.saveToJWT;
result[field.saveToJWT] = data[field.name];
} else if (field.saveToJWT) {
targetResult = field.name;
result[field.name] = data[field.name];
}
const tabData = data[field.name];
const tabResult = targetResult ? result[targetResult] : result;
traverseFields({
data: tabData,
fields: field.fields,
result: tabResult
});
} else {
traverseFields({
data,
fields: field.fields,
result
});
}
break;
}
case 'tabs':
{
traverseFields({
data,
fields: field.tabs.map((tab)=>({
...tab,
type: 'tab'
})),
result
});
break;
}
default:
if (fieldAffectsData(field)) {
if (field.saveToJWT) {
if (typeof field.saveToJWT === 'string') {
result[field.saveToJWT] = data[field.name];
delete result[field.name];
} else {
result[field.name] = data[field.name];
}
} else if (field.saveToJWT === false) {
delete result[field.name];
}
}
}
});
return result;
};
export const getFieldsToSign = (args)=>{
const { collectionConfig, email, user } = args;
const result = {
id: user?.id,
collection: collectionConfig.slug,
email
};
traverseFields({
data: user,
fields: collectionConfig.fields,
result
});
return result;
};
//# sourceMappingURL=getFieldsToSign.js.map