feat(sheets): remember last active sheet on reopen#496
Open
the-narwhal wants to merge 4638 commits into
Open
Conversation
Prevent concurrent referral spotlight feature PUTs See merge request web/clients!24282
VPNPLG-58: Add payload and telemetry when forking the session See merge request web/clients!24135
fix: fix icon alignment in cancellation flow See merge request web/clients!24315
Add offer card UI components See merge request web/clients!24302
added temporary need content and config See merge request web/clients!24307
feat: workspace premium cancelation flow See merge request web/clients!24319
Add news subscription for Meet See merge request web/clients!24209
use the same setting menu for extension as for web See merge request web/clients!24241
INWEB-867: Add common setup for Slack API in the CI See merge request web/clients!24271
Add new permissions modals and stop requesting permissions automatically See merge request web/clients!24248
DRVWEB: Search blobs encryption/decryption See merge request web/clients!23888
[IDTEAM-5613]
[IDTEAM-5613] Add telemetry for sharing See merge request web/clients!24221
Limit sharing settings visibility only to admins on parent share See merge request web/clients!24326
[DRVWEB-4974] Album listing sdk See merge request web/clients!23946
Enable telemetry for Meet See merge request web/clients!24331
Idteam 5873 fix safari too small popup See merge request web/clients!24390
Add `justify-start-when-stacked` table helper See merge request web/clients!24428
Prevent missing navigator.mediaDevices to throw See merge request web/clients!24429
Update category counts when labelling a message from a conversation See merge request web/clients!24325
Update openSubscriptionModal usage See merge request web/clients!24107
Fix a bug storing feature flags in cookie See merge request web/clients!24454
[DRVWEB-4967] delete legacy drive view See merge request web/clients!24263
NOISSUE: Adapt telemetry for tv flow See merge request web/clients!24405
Defer update prompt if user is in meeting See merge request web/clients!24450
Mail BYOE: hide lock icons in sent messages when `X-Pm-Byoe` header is present See merge request web/clients!24000
PostQuantumOptInModal: prompt for auth before committing the opt-in See merge request web/clients!24457
Add LoginLink member creation mode See merge request web/clients!24448
When a spreadsheet with ultiple worksheets is opened, the editor now restores the user's last-visited sheet instead of always defaulting to the first tab. Implementation: - On every active-sheet change (after initial RTS sync), persist the sheet ID to localStorage under a key scoped to both the document ID and the user, so collaborators each retain their own position. - On initial load, read that key and activate the saved sheet if it still exists in the document; otherwise fall back to sheet 1 as before (covers first-open and deleted-sheet cases). - Thread `documentId` from App → Spreadsheet → useProtonSheetsState → useYjsState to provide a stable per-document storage key.
115579e to
b6fd253
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note on Testing
This PR was implemented via static analysis of the codebase only. The editor runs inside an iframe with a full Proton Drive/RTS backend, so end-to-end verification wasn't possible in this context. The change is submitted as a complete, ready-to-review implementation for Proton to merge as-is, iterate on, or use as a reference. Unit-level logic is straightforward and self-contained; the main thing that warrants a real integration smoke test before shipping is confirming
documentIdis stable and populated by the timeinitializeEditorfires for the sheet case.Remember Last Active Sheet on Reopen
Closes the community-requested UX gap where opening a multi-worksheet spreadsheet always landed on tab 1, regardless of where the user left off.
Problem
handleInitialLoadinuseYjsStateunconditionally calledonChangeActiveSheet(firstSheetId)after receiving the initial RTS sync. There was no persistence of the active sheet between sessions.Solution
Two small additions to
useYjsStateinstate.ts:On open: restore saved sheet
handleInitialLoadnow checkslocalStoragebefore defaulting to sheet 1. If a saved sheet ID is found and the sheet still exists in the document, it is activated instead. If the saved sheet has since been deleted, or this is the first time the document is opened, it falls back to sheet 1 exactly as before.On tab switch: persist active sheet
A new
saveActiveSheetToStorageeffect writes the currentactiveSheetIdtolocalStoragewhenever it changes, gated onreceivedEverythingFromRTSto avoid persisting the library's pre-load default value.Storage key design
Keys are scoped to both
documentIdanduserNameso that collaborators on the same shared spreadsheet each independently remember their own last position:Files Changed
state.ts— all logic lives here:getActiveSheetStorageKeyhelper,documentIdadded toYjsStateDependencies(which automatically propagates toProtonSheetsStateDependenciesvia the existing type spread), modifiedhandleInitialLoad, newsaveActiveSheetToStorageeffectSpreadsheet.tsx—documentId: stringadded toSpreadsheetProps, threaded intouseProtonSheetsStateApp.tsx—documentId={editorConfig.current.documentId}passed to<Spreadsheet>, mirroring the existing pattern already used for<Editor>What Was Not Changed
localStorageIntegration Smoke Test Recommended
Before merging, confirm: