Use a symbol to pass options add make it work with many before fixing them

Signed-off-by: Alexandre Bodin <bodin.alex@gmail.com>
This commit is contained in:
Alexandre Bodin 2020-10-06 09:45:03 +02:00
parent 60b52cf946
commit fcb2878987

View File

@ -14,6 +14,8 @@ const {
constants: { DP_PUB_STATE_LIVE }, constants: { DP_PUB_STATE_LIVE },
} = contentTypes; } = contentTypes;
const OPTIONS = Symbol();
const DynamicZoneScalar = require('../types/dynamiczoneScalar'); const DynamicZoneScalar = require('../types/dynamiczoneScalar');
const { formatModelConnectionsGQL } = require('./build-aggregation'); const { formatModelConnectionsGQL } = require('./build-aggregation');
@ -29,7 +31,7 @@ const assignOptions = (element, parent) => {
return element.map(el => assignOptions(el, parent)); return element.map(el => assignOptions(el, parent));
} }
return _.set(element, '__options__', _.get(parent, '__options__', {})); return _.set(element, OPTIONS, _.get(parent, OPTIONS, {}));
}; };
const isQueryEnabled = (schema, name) => { const isQueryEnabled = (schema, name) => {
@ -146,6 +148,16 @@ const generateDynamicZoneDefinitions = (attributes, globalId, schema) => {
}); });
}; };
const initQueryOptions = (targetModel, parent) => {
if (hasDraftAndPublish(targetModel)) {
return {
_publicationState: _.get(parent, [OPTIONS, 'publicationState'], DP_PUB_STATE_LIVE),
};
}
return {};
};
const buildAssocResolvers = model => { const buildAssocResolvers = model => {
const contentManager = strapi.plugins['content-manager'].services['contentmanager']; const contentManager = strapi.plugins['content-manager'].services['contentmanager'];
@ -168,11 +180,14 @@ const buildAssocResolvers = model => {
return obj[association.alias]; return obj[association.alias];
} }
const queryOpts = initQueryOptions(targetModel, obj);
const entry = await contentManager.fetch(model.uid, obj[primaryKey], { const entry = await contentManager.fetch(model.uid, obj[primaryKey], {
query: queryOpts,
populate: [association.alias], populate: [association.alias],
}); });
return entry[association.alias]; return assignOptions(entry[association.alias], obj);
}; };
break; break;
} }
@ -183,15 +198,7 @@ const buildAssocResolvers = model => {
model: targetModel.uid, model: targetModel.uid,
}; };
let queryOpts = { let queryOpts = initQueryOptions(targetModel, obj);
...obj.__options__,
};
if (hasDraftAndPublish(targetModel)) {
_.assign(queryOpts, {
_publicationState: queryOpts._publicationState || DP_PUB_STATE_LIVE,
});
}
if (association.type === 'model') { if (association.type === 'model') {
params[targetModel.primaryKey] = _.get( params[targetModel.primaryKey] = _.get(
@ -224,8 +231,6 @@ const buildAssocResolvers = model => {
} }
} }
console.log(queryOpts);
const results = association.model const results = association.model
? await strapi.plugins.graphql.services['data-loaders'].loaders[targetModel.uid].load( ? await strapi.plugins.graphql.services['data-loaders'].loaders[targetModel.uid].load(
{ {
@ -439,8 +444,8 @@ const buildCollectionType = model => {
[pluralName]: async (parent, args, ctx, ast) => { [pluralName]: async (parent, args, ctx, ast) => {
const results = await buildQuery(pluralName, resolverOpts)(parent, args, ctx, ast); const results = await buildQuery(pluralName, resolverOpts)(parent, args, ctx, ast);
const __options__ = _.pick(args, 'publicationState'); const queryOptions = _.pick(args, 'publicationState');
return assignOptions(results, { __options__ }); return assignOptions(results, { [OPTIONS]: queryOptions });
}, },
}, },
}, },