From 3b9cdec0c57d5d06386931f5f5fc610c279f8051 Mon Sep 17 00:00:00 2001 From: Nikolay Belykh Date: Sun, 5 Feb 2023 14:24:30 +0100 Subject: [PATCH] add loggin for page switching issue --- src/WebPart/TopFrame.tsx | 48 ++++++++++++++++++++---------- src/WebPart/properties/Defaults.ts | 4 +-- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/WebPart/TopFrame.tsx b/src/WebPart/TopFrame.tsx index 8e7ef25..7aada13 100644 --- a/src/WebPart/TopFrame.tsx +++ b/src/WebPart/TopFrame.tsx @@ -30,28 +30,28 @@ export function TopFrame(props: ITopFrameProps) { await ctx.sync(); return links.items[0]; } catch (err) { - console.error(err); + console.warn(`[DiagramFrame] unable to get shape "${shapeName}" ${err.message}`); } } }); } const deselectVisioShape = async (args: Visio.SelectionChangedEventArgs) => { + const [shapeName] = args.shapeNames; try { await Visio.run(refSession.current, async (ctx) => { - const [shapeName] = args.shapeNames; ctx.document.pages.getItem(args.pageName).shapes.getItem(shapeName).set({ select: false }); await ctx.sync(); }); } catch (err) { - console.error(err); + console.warn(`[DiagramFrame] unable to deselect shape "${shapeName}" ${err.message}`); } } const onVisioSelectionChanged = async (args: Visio.SelectionChangedEventArgs) => { + const [shapeName] = args.shapeNames; try { const { baseUrl } = Utils.splitPageUrl(refUrl.current); - const [shapeName] = args.shapeNames; const link = await getVisioLink(args); if (link) { @@ -62,13 +62,13 @@ export function TopFrame(props: ITopFrameProps) { } } } catch (err) { - console.error(err); + console.warn(`[DiagramFrame] unable to navigate to shape "${shapeName}" ${err.message}`); } }; const setPage = async (startPage: string) => { await Visio.run(refSession.current, async ctx => { - console.log(`[DiagramFrame] set page ${startPage}`); + console.log(`[DiagramFrame] set page "${startPage}"`); ctx.document.setActivePage(startPage); await ctx.sync(); }) @@ -78,11 +78,15 @@ export function TopFrame(props: ITopFrameProps) { return await Visio.run(refSession.current, async ctx => { const page = ctx.document.getActivePage().load('name'); await ctx.sync(); - console.log(`[DiagramFrame] get page: ${page.name}`); + console.log(`[DiagramFrame] get page returned "${page.name}"`); return page.name; }) } + const onVisioDocumentLoaded = async (args: Visio.DocumentLoadCompleteEventArgs) => { + console.log(`[DiagramFrame] document loaded: ${args.success}`); + } + const init = async (url: string, startPage: string) => { try { await Visio.run(refSession.current, async (ctx) => { @@ -99,6 +103,8 @@ export function TopFrame(props: ITopFrameProps) { ctx.document.onSelectionChanged.add(onVisioSelectionChanged); } + ctx.document.onDocumentLoadComplete.add(onVisioDocumentLoaded); + const defaultPage = ctx.document.getActivePage().load('name'); if (startPage) { @@ -111,6 +117,7 @@ export function TopFrame(props: ITopFrameProps) { refDefaultPageName.current[url] = defaultPage.name; }); } catch (err) { + console.error(`[DiagramFrame] error initializing diagram ${err.message}`); throw new Error(`Error initializing diagram parameters. The view may be not the expected one. ${err.message}`); } } @@ -150,7 +157,7 @@ export function TopFrame(props: ITopFrameProps) { refSession.current = null; - console.log(`[DiagramFrame] open file ${newBaseUrl}`); + console.log(`[DiagramFrame] loading "${newBaseUrl}#${newPageName}"`); refSession.current = new OfficeExtension.EmbeddedSession(resolved, { container: refContainer.current, height: '100%', @@ -168,21 +175,29 @@ export function TopFrame(props: ITopFrameProps) { if (newPageNameOrDefault && (oldPageNameOrDefault !== newPageNameOrDefault || force)) { if (reloaded) { // Visio bug (hanging) on immediate page change with logo screen, timeout seems to help a bit - for (let i = 0;; ++i) { - await new Promise(r => setTimeout(r, 1000)); + let pageSet = false; + for (let i = 0; i < (opts.retry + 1) * 3; ++i) { const pageName = await getPage(); - if (pageName === newPageNameOrDefault) + if (pageName === newPageNameOrDefault) { + pageSet = true; break; + } - if (i > 2) - break; + console.warn(`[DiagramFrame] Page mismatch after ${1+i} seconds, resceduling check`); + await new Promise(r => setTimeout(r, 1000)); + } - if (opts.retry > 2) - break; + if (!pageSet) { + console.warn(`[DiagramFrame] Page mismatch, initiating reload`); + if (opts.retry < 2) { + reloadEmbed({...opts, retry: opts.retry + 1}); + return; + } - await reloadEmbed({...opts, retry: opts.retry + 1}); + throw new Error(`Error while loading diagram. The view may be not the expected one.`); } + } else { await setPage(newPageNameOrDefault); } @@ -195,6 +210,7 @@ export function TopFrame(props: ITopFrameProps) { refUrl.current = opts.url; } catch (err) { + console.error(`[DiagramFrame] unable to initialize the diagram, ${err.message}`); setError(`${err}`); } diff --git a/src/WebPart/properties/Defaults.ts b/src/WebPart/properties/Defaults.ts index 9149835..e10eea2 100644 --- a/src/WebPart/properties/Defaults.ts +++ b/src/WebPart/properties/Defaults.ts @@ -37,7 +37,7 @@ export class Defaults { } } } catch (err) { - console.warn('Unable to dtermine default folder using default', err); + console.warn(`[DiagramFrame] Unable to dtermine default folder using default ${err.message}`, err); } return this.defaultFolder = { @@ -75,7 +75,7 @@ export class Defaults { return this.defaultHeight = '100%'; } } catch (err) { - console.warn('Unable to dtermine default height using default', err); + console.warn(`[DiagramFrame] Unable to dtermine default height using default ${err.message}`, err); } } return this.defaultHeight = '50vh';