Compare commits

..

No commits in common. "main" and "v1.1.0" have entirely different histories.
main ... v1.1.0

5 changed files with 16 additions and 17 deletions

View File

@ -32,7 +32,7 @@ The populate deep option is available for all collections and single types using
# Configuration
The default depth can be customized via the plugin config. To do so create or edit you plugins.js file.
The default depth and behaviour for populating creator fields can be customized via the plugin config. To do so create or edit you plugins.js file.
## Example configuration
@ -40,9 +40,11 @@ The default depth can be customized via the plugin config. To do so create or ed
```
module.exports = ({ env }) => ({
'strapi-plugin-populate-deep': {
'populate-deep': {
enabled: true,
config: {
defaultDepth: 3, // Default is 5
skipCreatorFields: false, // Default is true
}
},
});

4
package-lock.json generated
View File

@ -1,5 +1,5 @@
{
"name": "strapi-plugin-populate-deep",
"version": "3.0.1",
"version": "1.1.0",
"lockfileVersion": 1
}
}

View File

@ -1,7 +1,7 @@
{
"name": "strapi-plugin-populate-deep",
"version": "3.0.1",
"description": "Strapi plugin that populates nested content.",
"version": "1.1.0",
"description": "This is the description of the plugin.",
"strapi": {
"name": "strapi-plugin-populate-deep",
"description": "Api helper to populate deep content structures.",
@ -21,8 +21,8 @@
"url": "https://github.com/Barelydead/strapi-plugin-deep-populate"
},
"engines": {
"node": ">=14.19.1 <=20.x.x",
"node": ">=12.x.x <=16.x.x",
"npm": ">=6.0.0"
},
"license": "MIT"
}
}

4
server/bootstrap.js vendored
View File

@ -6,11 +6,11 @@ module.exports = ({ strapi }) => {
strapi.db.lifecycles.subscribe((event) => {
if (event.action === 'beforeFindMany' || event.action === 'beforeFindOne') {
const populate = event.params?.populate;
const defaultDepth = strapi.plugin('strapi-plugin-populate-deep')?.config('defaultDepth') || 5
const defaultDepth = strapi.plugin('populate-deep')?.config('defaultDepth') || 5
if (populate && populate[0] === 'deep') {
const depth = populate[1] ?? defaultDepth
const modelObject = getFullPopulateObject(event.model.uid, depth, []);
const modelObject = getFullPopulateObject(event.model.uid, depth);
event.params.populate = modelObject.populate
}
}

View File

@ -1,5 +1,7 @@
const { isEmpty, merge } = require("lodash/fp");
const skipCreatorFields = strapi.plugin('populate-deep')?.config('skipCreatorFields') || true;
const getModelPopulationAttributes = (model) => {
if (model.uid === "plugin::upload.file") {
const { related, ...attributes } = model.attributes;
@ -9,9 +11,7 @@ const getModelPopulationAttributes = (model) => {
return model.attributes;
};
const getFullPopulateObject = (modelUid, maxDepth = 20, ignore) => {
const skipCreatorFields = strapi.plugin('strapi-plugin-populate-deep')?.config('skipCreatorFields');
const getFullPopulateObject = (modelUid, maxDepth = 20) => {
if (maxDepth <= 1) {
return true;
}
@ -21,11 +21,9 @@ const getFullPopulateObject = (modelUid, maxDepth = 20, ignore) => {
const populate = {};
const model = strapi.getModel(modelUid);
if (ignore && !ignore.includes(model.collectionName)) ignore.push(model.collectionName)
for (const [key, value] of Object.entries(
getModelPopulationAttributes(model)
)) {
if (ignore?.includes(key)) continue
if (value) {
if (value.type === "component") {
populate[key] = getFullPopulateObject(value.component, maxDepth - 1);
@ -38,8 +36,7 @@ const getFullPopulateObject = (modelUid, maxDepth = 20, ignore) => {
} else if (value.type === "relation") {
const relationPopulate = getFullPopulateObject(
value.target,
(key === 'localizations') && maxDepth > 2 ? 1 : maxDepth - 1,
ignore
(key === 'localizations') && maxDepth > 2 ? 1 : maxDepth - 1
);
if (relationPopulate) {
populate[key] = relationPopulate;