authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-22 17:32:50-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-22 17:32:50-07:00
log5d493d67cedc3401af42e77d6a238bc49204a09b
treedf68efeff842b4c652327f9811bc26bf32fb1755
parent6dcde218ad6c07af4dde2a69517c9316adaf732f
signature Signed by PGP key B5690EEEBB952194

docs(mobile): document the two mobile routes that intentionally skip deep links (#13164)


1 files changed, 17 insertions(+), 0 deletions(-)

apps/mobile/src/Stack.tsx+17
...@@ -284,6 +284,15 @@ const SettingsContentStack = createNativeStackNavigator({...@@ -284,6 +284,15 @@ const SettingsContentStack = createNativeStackNavigator({
284 title: "Diagnostics",284 title: "Diagnostics",
285 },285 },
286 }),286 }),
287 // Deliberately the one settings screen with no `linking:` path. Its params
288 // are a tap-time snapshot, not a stable resource address: `now` is the
289 // wall-clock of the tap, `environmentIds` is the usage screen's local
290 // filter selection, and the window id/kind identify freshly aggregated
291 // pools. React Navigation round-trips non-path params through the URL as
292 // query strings, so a path here would bake in a permanently stale
293 // timestamp and filter. The deep linkable surface is the list at
294 // `settings/usage`, which rebuilds this state and pushes the detail from a
295 // tapped account segment.
287 SettingsUsageAccount: createNativeStackScreen({296 SettingsUsageAccount: createNativeStackScreen({
288 screen: UsageLimitAccountScreen,297 screen: UsageLimitAccountScreen,
289 options: { title: "Account" },298 options: { title: "Account" },
...@@ -649,6 +658,14 @@ const RootStackConfig = createNativeStackNavigator({...@@ -649,6 +658,14 @@ const RootStackConfig = createNativeStackNavigator({
649 linking: `${THREAD_LINKING_PREFIX}/attachments/:attachmentId`,658 linking: `${THREAD_LINKING_PREFIX}/attachments/:attachmentId`,
650 options: SOLID_HEADER_OPTIONS,659 options: SOLID_HEADER_OPTIONS,
651 }),660 }),
661 // Deliberately the one root route with no `linking:` path. The route
662 // carries zero params: its content is a session object (staged model,
663 // provider groups, and live update callbacks) that the active
664 // ThreadComposer presents into ExistingThreadSettingsRouteProvider before
665 // pushing this screen — state no URL can reconstruct. Reached without a
666 // presented session the screen navigates straight back, so a path would
667 // only produce a flash-and-dismiss link. Deep links to a thread land on
668 // `threads/:environmentId/:threadId`, where this sheet is one tap away.
652 ThreadSettingsSheet: createNativeStackScreen({669 ThreadSettingsSheet: createNativeStackScreen({
653 screen: ExistingThreadSettingsRouteScreen,670 screen: ExistingThreadSettingsRouteScreen,
654 options: {671 options: {