|
1 | 1 | import { useCallback, useEffect, useRef, useState } from 'react'; |
2 | 2 |
|
| 3 | +import { toMajorMinor } from './changelogData.js'; |
3 | 4 | import { BottomToolbar } from './components/BottomToolbar.js'; |
| 5 | +import { ChangelogModal } from './components/ChangelogModal.js'; |
4 | 6 | import { DebugView } from './components/DebugView.js'; |
| 7 | +import { VersionIndicator } from './components/VersionIndicator.js'; |
5 | 8 | import { ZoomControls } from './components/ZoomControls.js'; |
6 | 9 | import { PULSE_ANIMATION_DURATION_SEC } from './constants.js'; |
7 | 10 | import { useEditorActions } from './hooks/useEditorActions.js'; |
@@ -148,15 +151,29 @@ function App() { |
148 | 151 | loadedAssets, |
149 | 152 | workspaceFolders, |
150 | 153 | externalAssetDirectories, |
| 154 | + lastSeenVersion, |
| 155 | + extensionVersion, |
151 | 156 | } = useExtensionMessages(getOfficeState, editor.setLastSavedLayout, isEditDirty); |
152 | 157 |
|
153 | 158 | // Show migration notice once layout reset is detected |
154 | 159 | const [migrationNoticeDismissed, setMigrationNoticeDismissed] = useState(false); |
155 | 160 | const showMigrationNotice = layoutWasReset && !migrationNoticeDismissed; |
156 | 161 |
|
| 162 | + const [isChangelogOpen, setIsChangelogOpen] = useState(false); |
157 | 163 | const [isDebugMode, setIsDebugMode] = useState(false); |
158 | 164 | const [alwaysShowOverlay, setAlwaysShowOverlay] = useState(false); |
159 | 165 |
|
| 166 | + const currentMajorMinor = toMajorMinor(extensionVersion); |
| 167 | + |
| 168 | + const handleWhatsNewDismiss = useCallback(() => { |
| 169 | + vscode.postMessage({ type: 'setLastSeenVersion', version: currentMajorMinor }); |
| 170 | + }, [currentMajorMinor]); |
| 171 | + |
| 172 | + const handleOpenChangelog = useCallback(() => { |
| 173 | + setIsChangelogOpen(true); |
| 174 | + vscode.postMessage({ type: 'setLastSeenVersion', version: currentMajorMinor }); |
| 175 | + }, [currentMajorMinor]); |
| 176 | + |
160 | 177 | const handleToggleDebugMode = useCallback(() => setIsDebugMode((prev) => !prev), []); |
161 | 178 | const handleToggleAlwaysShowOverlay = useCallback( |
162 | 179 | () => setAlwaysShowOverlay((prev) => !prev), |
@@ -291,6 +308,19 @@ function App() { |
291 | 308 | externalAssetDirectories={externalAssetDirectories} |
292 | 309 | /> |
293 | 310 |
|
| 311 | + <VersionIndicator |
| 312 | + currentVersion={extensionVersion} |
| 313 | + lastSeenVersion={lastSeenVersion} |
| 314 | + onDismiss={handleWhatsNewDismiss} |
| 315 | + onOpenChangelog={handleOpenChangelog} |
| 316 | + /> |
| 317 | + |
| 318 | + <ChangelogModal |
| 319 | + isOpen={isChangelogOpen} |
| 320 | + onClose={() => setIsChangelogOpen(false)} |
| 321 | + currentVersion={extensionVersion} |
| 322 | + /> |
| 323 | + |
294 | 324 | {editor.isEditMode && editor.isDirty && ( |
295 | 325 | <EditActionBar editor={editor} editorState={editorState} /> |
296 | 326 | )} |
|
0 commit comments