From d16f48c078ce90eb0a78601dc1216f42cf8546ca Mon Sep 17 00:00:00 2001 From: Almoizs-1310 Date: Fri, 6 Feb 2026 18:08:07 +0530 Subject: [PATCH 1/2] update the menu items as per user login state --- src/client/hooks/useAuth.ts | 5 ++++- src/server/index.ts | 2 ++ src/server/ui.js | 40 +++++++++++++++++++++++-------------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/client/hooks/useAuth.ts b/src/client/hooks/useAuth.ts index 313a047..cefb593 100644 --- a/src/client/hooks/useAuth.ts +++ b/src/client/hooks/useAuth.ts @@ -27,6 +27,7 @@ const useAuth = () => { const state = await serverFunctions.getAuthorizationState(); setAuthState(state as AuthState); setAuthStatus('success'); + await serverFunctions.refreshMenu(); } catch (error) { console.log('Error getting auth data', error); setAuthStatus('error'); @@ -41,7 +42,9 @@ const useAuth = () => { analytics.trackLogout(); try { await serverFunctions.resetOAuth(); - setTimeout(getAuth, 500); + setTimeout(async () => { + await getAuth(); + }, 500); } catch (error) { console.error('Error revoking OAuth:', error); } diff --git a/src/server/index.ts b/src/server/index.ts index 4525ecd..f836177 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,5 +1,6 @@ import { onOpen, + refreshMenu, openCreateDiagramDialog, openEditDiagramDialog, openEditDiagramDialogWithUrl, @@ -31,6 +32,7 @@ import { // Public functions must be exported as named exports export { onOpen, + refreshMenu, openCreateDiagramDialog, openEditDiagramDialog, openEditDiagramDialogWithUrl, diff --git a/src/server/ui.js b/src/server/ui.js index 2735b9b..9c41e6d 100644 --- a/src/server/ui.js +++ b/src/server/ui.js @@ -1,16 +1,24 @@ +function buildMenu() { + const authState = getAuthorizationState(); + const menu = DocumentApp.getUi().createAddonMenu(); + menu.addItem('Start', 'openSidebar'); + if (authState.authorized) { + menu.addSeparator(); + menu.addItem('New diagram', 'openCreateDiagramDialog'); + menu.addItem('Browse diagrams', 'openSelectDiagramDialog'); + menu.addItem('Edit selected diagram', 'openEditDiagramDialog'); + } + menu.addSeparator(); + menu.addItem('About', 'openAboutDialog'); + menu.addToUi(); +} + export function onOpen() { - const menu = DocumentApp.getUi() - .createAddonMenu() - .addItem('Start', 'openSidebar') - .addSeparator() - .addItem('New diagram', 'openCreateDiagramDialog') - .addItem('Browse diagrams', 'openSelectDiagramDialog') - .addItem('Edit selected diagram', 'openEditDiagramDialog') - .addSeparator() - .addItem('About', 'openAboutDialog') - .addItem('Help', 'openHelpDialog'); + buildMenu(); +} - menu.addToUi(); +export function refreshMenu() { + buildMenu(); } export function setBaseUrl(url) { @@ -128,11 +136,12 @@ export function openAboutDialog() { var ui = DocumentApp.getUi(); var text = - 'PlantUML Gizmo was written for use in the OO Analysis and Design courses at École de technologie supérieure, and has been used by Google Engineers on Android and Google Pay.\n\n' + - 'It uses JavaScript API Client Code described at http://plantuml.sourceforge.net/codejavascript.html as well as inflating routines at http://www.planttext.com/javascript/jquery-plantuml/plantuml.js\n\n' + - 'Find me on twitter @thefuhrmanator. Version 15 (2019-11-22)'; + 'Mermaid for Google Docs \n\n' + + 'Publisher: Mermaid Chart Inc\n' + + 'Mermaid for Google Docs brings flexible, collaborative diagramming directly into your documents. Create, insert, and edit diagrams without leaving Google Docs—using Markdown syntax, the Visual Editor, or Mermaid AI\n\n' + + 'For detailed information, reviews, and marketplace details, visit the Google Workspace Marketplace.'; - ui.alert('About', text, ui.ButtonSet.OK); + ui.alert('Add-on Information', text, ui.ButtonSet.OK); } export function openHelpDialog() { @@ -155,6 +164,7 @@ export function handleCallback(callbackRequest) { var service = getOAuthService(); var authorized = service.handleCallback(callbackRequest); if (authorized) { + refreshMenu(); return HtmlService.createHtmlOutput( 'Success! You can close this window.' ); From 2846824e8d07e9aedd16a824d9470858920a8626 Mon Sep 17 00:00:00 2001 From: Almoizs-1310 Date: Wed, 11 Feb 2026 15:43:13 +0530 Subject: [PATCH 2/2] Fix the issue where menu-items were not loading --- src/server/index.ts | 2 ++ src/server/ui.js | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index f836177..5e6a164 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,5 +1,6 @@ import { onOpen, + onInstall, refreshMenu, openCreateDiagramDialog, openEditDiagramDialog, @@ -32,6 +33,7 @@ import { // Public functions must be exported as named exports export { onOpen, + onInstall, refreshMenu, openCreateDiagramDialog, openEditDiagramDialog, diff --git a/src/server/ui.js b/src/server/ui.js index 9c41e6d..fa32340 100644 --- a/src/server/ui.js +++ b/src/server/ui.js @@ -1,22 +1,39 @@ function buildMenu() { - const authState = getAuthorizationState(); const menu = DocumentApp.getUi().createAddonMenu(); + menu.addItem('Start', 'openSidebar'); - if (authState.authorized) { + + let authorized = false; + + try { + const authState = getAuthorizationState(); + authorized = authState && authState.authorized; + } catch (e) { + console.log('Error checking authorization state: ' + e); + Logger.log('Auth check failed: ' + e); + } + + if (authorized) { menu.addSeparator(); menu.addItem('New diagram', 'openCreateDiagramDialog'); menu.addItem('Browse diagrams', 'openSelectDiagramDialog'); menu.addItem('Edit selected diagram', 'openEditDiagramDialog'); } + menu.addSeparator(); menu.addItem('About', 'openAboutDialog'); + menu.addToUi(); } -export function onOpen() { +export function onOpen(e) { buildMenu(); } +export function onInstall(e) { + onOpen(e); +} + export function refreshMenu() { buildMenu(); }