payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
57 lines (56 loc) • 1.94 kB
JavaScript
import { APIError } from '../../errors/APIError.js';
import { combineWhereConstraints } from '../../utilities/combineWhereConstraints.js';
import { formatFolderOrDocumentItem } from './formatFolderOrDocumentItem.js';
export async function queryDocumentsAndFoldersFromJoin({ documentWhere, folderWhere, parentFolderID, req }) {
const { payload, user } = req;
if (payload.config.folders === false) {
throw new APIError('Folders are not enabled', 500);
}
const subfolderDoc = await payload.find({
collection: payload.config.folders.slug,
joins: {
documentsAndFolders: {
limit: 100_000_000,
sort: 'name',
where: combineWhereConstraints([
folderWhere,
documentWhere
], 'or')
}
},
limit: 1,
overrideAccess: false,
req,
user,
where: {
id: {
equals: parentFolderID
}
}
});
const childrenDocs = subfolderDoc?.docs[0]?.documentsAndFolders?.docs || [];
const results = childrenDocs.reduce((acc, doc)=>{
if (!payload.config.folders) {
return acc;
}
const { relationTo, value } = doc;
const item = formatFolderOrDocumentItem({
folderFieldName: payload.config.folders.fieldName,
isUpload: Boolean(payload.collections[relationTo].config.upload),
relationTo,
useAsTitle: payload.collections[relationTo].config.admin?.useAsTitle,
value
});
if (relationTo === payload.config.folders.slug) {
acc.subfolders.push(item);
} else {
acc.documents.push(item);
}
return acc;
}, {
documents: [],
subfolders: []
});
return results;
}
//# sourceMappingURL=getFoldersAndDocumentsFromJoin.js.map