Skip to content

Commit 46e742a

Browse files
authored
fix: make back button on app settings subpages functional (#554)
Follow up to #536 to make the back button in the settings subpages navigation functional.
1 parent 8eff37f commit 46e742a

File tree

3 files changed

+50
-9
lines changed

3 files changed

+50
-9
lines changed

messages/renderer/en.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,10 @@
11791179
"description": "Label for save button.",
11801180
"message": "Save"
11811181
},
1182+
"routes.app.settings.goBackAccessibleLabel": {
1183+
"description": "Accessible label for back button",
1184+
"message": "Go back."
1185+
},
11821186
"routes.app.settings.index.aboutCoMapeoVersionLabel": {
11831187
"description": "Label for CoMapeo version",
11841188
"message": "CoMapeo Version"

src/renderer/src/routes/app/settings/_nested/route.tsx

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import Box from '@mui/material/Box'
22
import Breadcrumbs from '@mui/material/Breadcrumbs'
33
import Divider from '@mui/material/Divider'
4+
import IconButton from '@mui/material/IconButton'
45
import Stack from '@mui/material/Stack'
56
import Typography from '@mui/material/Typography'
67
import {
78
Outlet,
89
createFileRoute,
910
useChildMatches,
11+
useRouter,
1012
} from '@tanstack/react-router'
1113
import { defineMessages, useIntl } from 'react-intl'
1214

@@ -21,6 +23,8 @@ export const Route = createFileRoute('/app/settings/_nested')({
2123
})
2224

2325
function RouteComponent() {
26+
const router = useRouter()
27+
2428
const { formatMessage: t } = useIntl()
2529

2630
const currentRoute = useChildMatches({
@@ -46,11 +50,23 @@ function RouteComponent() {
4650
<Stack direction="column" flex={1} overflow="auto">
4751
<Stack direction="column" gap={6} padding={6}>
4852
<Stack direction="row" gap={4} alignItems="center" flex={1}>
49-
<Icon
50-
name="material-arrow-back"
51-
size={headerIconHeight}
52-
htmlColor={DARK_GREY}
53-
/>
53+
<IconButton
54+
onClick={() => {
55+
if (router.history.canGoBack()) {
56+
router.history.back()
57+
return
58+
}
59+
60+
router.navigate({ to: '/app/settings', replace: true })
61+
}}
62+
aria-label={t(m.goBackAccessibleLabel)}
63+
>
64+
<Icon
65+
name="material-arrow-back"
66+
size={headerIconHeight}
67+
htmlColor={DARK_GREY}
68+
/>
69+
</IconButton>
5470

5571
<Breadcrumbs
5672
component="nav"
@@ -103,4 +119,9 @@ const m = defineMessages({
103119
description:
104120
'Text for breadcrumb link to go to main CoMapeo settings page when viewing nested settings page.',
105121
},
122+
goBackAccessibleLabel: {
123+
id: 'routes.app.settings.goBackAccessibleLabel',
124+
defaultMessage: 'Go back.',
125+
description: 'Accessible label for back button',
126+
},
106127
})

tests-e2e/specs/app/settings.spec.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,12 @@ test.describe('device name', () => {
254254

255255
/// Main
256256

257-
// Breadcrumb
257+
// Subpage navigation
258258
{
259+
await expect(
260+
main.getByRole('button', { name: 'Go back.', exact: true }),
261+
).toBeVisible()
262+
259263
const breadcrumbNav = main.getByRole('navigation', {
260264
name: 'breadcrumb',
261265
exact: true,
@@ -498,8 +502,12 @@ test('language', async ({ appInfo, userParams }) => {
498502

499503
/// Main
500504

501-
// Breadcrumb
505+
// Subpage navigation
502506
{
507+
await expect(
508+
main.getByRole('button', { name: 'Go back.', exact: true }),
509+
).toBeVisible()
510+
503511
const breadcrumbNav = main.getByRole('navigation', {
504512
name: 'breadcrumb',
505513
exact: true,
@@ -671,8 +679,12 @@ test('coordinate system', async ({ appInfo, userParams }) => {
671679

672680
/// Main
673681

674-
// Breadcrumb
682+
// Subpage navigation
675683
{
684+
await expect(
685+
main.getByRole('button', { name: 'Go back.', exact: true }),
686+
).toBeVisible()
687+
676688
const breadcrumbNav = main.getByRole('navigation', {
677689
name: 'breadcrumb',
678690
exact: true,
@@ -821,8 +833,12 @@ test('background map', async ({ appInfo, userParams }) => {
821833

822834
/// Main
823835

824-
// Breadcrumb
836+
// Subpage navigation
825837
{
838+
await expect(
839+
main.getByRole('button', { name: 'Go back.', exact: true }),
840+
).toBeVisible()
841+
826842
const breadcrumbNav = main.getByRole('navigation', {
827843
name: 'breadcrumb',
828844
exact: true,

0 commit comments

Comments
 (0)