Phase 16E Fix - Office.js ContentControlCollection.items PropertyNotLoaded Error

This commit is contained in:
Nick Beckley 2026-06-27 21:25:44 +01:00
parent f26cd48173
commit 35eef02322
2 changed files with 22 additions and 16 deletions

View File

@ -1295,8 +1295,17 @@
return Number.isInteger(id) && id > 0 ? id : null; return Number.isInteger(id) && id > 0 ? id : null;
}; };
const safeContentControlItems = (paragraph) => {
try {
return Array.isArray(paragraph?.contentControls?.items) ? paragraph.contentControls.items : [];
} catch (error) {
console.warn("Word paragraph content controls were not available.", error);
return [];
}
};
const paragraphAnchorId = (paragraph, prefix) => { const paragraphAnchorId = (paragraph, prefix) => {
const controls = Array.isArray(paragraph?.contentControls?.items) ? paragraph.contentControls.items : []; const controls = safeContentControlItems(paragraph);
for (const control of controls) { for (const control of controls) {
const id = anchorIdFromTag(control.tag, prefix); const id = anchorIdFromTag(control.tag, prefix);
if (id) { if (id) {
@ -1453,8 +1462,8 @@
styleBuiltIn: paragraph?.styleBuiltIn || "", styleBuiltIn: paragraph?.styleBuiltIn || "",
style: paragraph?.style || "", style: paragraph?.style || "",
wordCount: countWords(text), wordCount: countWords(text),
chapterAnchorId: paragraphAnchorId(paragraph, "PD-CHAPTER"), chapterAnchorId: null,
sceneAnchorId: paragraphAnchorId(paragraph, "PD-SCENE") sceneAnchorId: null
}; };
}; };
@ -2039,12 +2048,16 @@
selectionParagraphs.load("text,styleBuiltIn,style"); selectionParagraphs.load("text,styleBuiltIn,style");
await context.sync(); await context.sync();
try {
for (const paragraph of bodyParagraphs.items) { for (const paragraph of bodyParagraphs.items) {
if (isBuiltInHeading(paragraph, 1) || isBuiltInHeading(paragraph, 2)) { if (isBuiltInHeading(paragraph, 1) || isBuiltInHeading(paragraph, 2)) {
paragraph.contentControls.load("items/tag,title"); paragraph.contentControls.load("items/tag,title");
} }
} }
await context.sync(); await context.sync();
} catch (error) {
console.warn("Unable to load Word heading content controls. Continuing without PlotDirector anchors.", error);
}
const structure = buildDocumentStructure(bodyParagraphs.items, selectionParagraphs.items); const structure = buildDocumentStructure(bodyParagraphs.items, selectionParagraphs.items);
structure.bodyParagraphs = bodyParagraphs.items; structure.bodyParagraphs = bodyParagraphs.items;
@ -2059,13 +2072,6 @@
selectionParagraphs.load("text,styleBuiltIn,style"); selectionParagraphs.load("text,styleBuiltIn,style");
await context.sync(); await context.sync();
for (const paragraph of bodyParagraphs.items) {
if (isBuiltInHeading(paragraph, 1)) {
paragraph.contentControls.load("items/tag,title");
}
}
await context.sync();
const cache = buildRuntimeDocumentStructure(bodyParagraphs.items, usesExplicitScenes); const cache = buildRuntimeDocumentStructure(bodyParagraphs.items, usesExplicitScenes);
const selectedIndex = findSelectedParagraphIndex(cache, selectionParagraphs.items); const selectedIndex = findSelectedParagraphIndex(cache, selectionParagraphs.items);
documentStructureCache = cache; documentStructureCache = cache;
@ -2946,7 +2952,7 @@
}; };
const findAnchorControl = (paragraph, prefix) => { const findAnchorControl = (paragraph, prefix) => {
const controls = Array.isArray(paragraph?.contentControls?.items) ? paragraph.contentControls.items : []; const controls = safeContentControlItems(paragraph);
return controls.find((control) => anchorIdFromTag(control.tag, prefix)) || null; return controls.find((control) => anchorIdFromTag(control.tag, prefix)) || null;
}; };

File diff suppressed because one or more lines are too long