Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 24 additions & 7 deletions lib/methods/export.js
Original file line number Diff line number Diff line change
Expand Up @@ -624,6 +624,7 @@ module.exports = self => {
if (recursions >= MAX_RECURSION) {
return;
}

for (const field of schema) {
if (
field.type === 'relationship' &&
Expand All @@ -635,29 +636,41 @@ module.exports = self => {
self.findSchemaRelatedTypes(req, field.schema, related, recursions);
} else if (field.type === 'area') {
const widgets = self.apos.area.getWidgets(field.options);
for (const [ widget, options ] of Object.entries(widgets)) {
const schema = self.apos.area.getWidgetManager(widget).schema || [];
for (const [ widget, widgetOptions ] of Object.entries(widgets)) {
const manager = self.apos.area.getWidgetManager(widget);
if (!manager) {
continue;
}
const widgetSchema = manager.schema || [];
if (widget === '@apostrophecms/rich-text') {
self.getRelatedTypesFromRichTextWidget(req, options, related, recursions);
self.getRelatedTypesFromRichTextWidget(
req,
widgetOptions,
related,
recursions
);
}
self.findSchemaRelatedTypes(req, schema, related, recursions);
self.findSchemaRelatedTypes(req, widgetSchema, related, recursions);
}
}
}
},
pushRelatedType(req, related, type, recursions) {
console.log('type', type);
if ((type === '@apostrophecms/page') || (type === '@apostrophecms/any-page-type')) {
const pageTypes = Object.entries(self.apos.doc.managers).filter(
([ name, module ]) => self.apos.instanceOf(module, '@apostrophecms/page-type'))
.map(([ name, module ]) => name);
const pageTypes = Object.entries(self.apos.doc.managers)
.filter(([ name, module ]) => self.apos.instanceOf(module, '@apostrophecms/page-type'))
.map(([ name, _ ]) => name);
for (const type of pageTypes) {
if ([ '@apostrophecms/archive-page', '@apostrophecms/search' ].includes(type)) {
// It is never appropriate to export the root page of the trash, and
// while you *could* link to the search page it is extremely unlikely it
// would have interesting content to export, just confusing to have it here
continue;
}
/* if (!related.includes(type)) { */
self.pushRelatedType(req, related, type, recursions);
/* } */
}
return;
}
Expand All @@ -666,6 +679,7 @@ module.exports = self => {
const relatedManager = self.apos.doc.getManager(type);
self.findSchemaRelatedTypes(req, relatedManager.schema, related, recursions);
}

},
// Does not currently utilize req, but it could be relevant in overrides and is
// always the first argument by convention, so it is included in the signature
Expand All @@ -683,6 +697,9 @@ module.exports = self => {
}
if (rteOptions.toolbar?.includes('link')) {
const choices = manager.linkFields.linkTo.choices.map(choice => choice.value);
/* console.log('choices', choices); */
/* console.log('recursions', recursions); */
/* console.log('related', related); */
for (const name of choices) {
if (self.apos.doc.getManager(name) && !related.includes(name)) {
self.pushRelatedType(req, related, name, recursions);
Expand Down