Skip to content

Commit 7761374

Browse files
committed
Update troubleshooting steps and add link to guide
1 parent 799e82f commit 7761374

File tree

4 files changed

+33
-20
lines changed

4 files changed

+33
-20
lines changed

desktop/packages/mullvad-vpn/src/renderer/components/NotificationArea.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import {
1212
InconsistentVersionNotificationProvider,
1313
LockdownModeNotificationProvider,
1414
ReconnectingNotificationProvider,
15+
TroubleshootStep,
1516
UnsupportedVersionNotificationProvider,
1617
} from '../../shared/notifications';
18+
import { ExternalLink } from './ExternalLink';
1719
import { RoutePath } from '../../shared/routes';
1820
import { useAppContext } from '../context';
1921
import { useSplitTunnelingSupported } from '../features/split-tunneling/hooks';
@@ -347,7 +349,18 @@ function NotificationActionWrapper({
347349
<ModalMessage>{action.troubleshoot?.details}</ModalMessage>
348350
<ModalMessage>
349351
<ModalMessageList>
350-
{action.troubleshoot?.steps.map((step) => <li key={step}>{step}</li>)}
352+
{action.troubleshoot?.steps.map((step: TroubleshootStep) =>
353+
typeof step === 'string' ? (
354+
<li key={step}>{step}</li>
355+
) : (
356+
<li key={step['aria-label']}>
357+
<ExternalLink variant="labelTinySemiBold" to={step.to}>
358+
<ExternalLink.Text>{step['aria-label']}</ExternalLink.Text>
359+
<ExternalLink.Icon icon="external" />
360+
</ExternalLink>
361+
</li>
362+
),
363+
)}
351364
</ModalMessageList>
352365
</ModalMessage>
353366
<ModalMessage>

desktop/packages/mullvad-vpn/src/shared/constants/urls.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const urls = {
44
purchase: 'https://mullvad.net/account/',
55
faq: 'https://mullvad.net/help/tag/mullvad-app/',
66
privacyGuide: 'https://mullvad.net/help/first-steps-towards-online-privacy/',
7+
splitTunnelGuide: 'https://mullvad.net/help/split-tunneling-with-the-mullvad-app#known-issues',
78
download: 'https://mullvad.net/download/vpn/',
89
removingOpenVpnBlog: 'https://mullvad.net/blog/removing-openvpn-15th-january-2026',
910
} as const;

desktop/packages/mullvad-vpn/src/shared/notifications/error.tsx

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { sprintf } from 'sprintf-js';
22

33
import { InternalLink } from '../../renderer/components/InternalLink';
44
import { formatHtml } from '../../renderer/lib/html-formatter';
5-
import { strings } from '../constants';
5+
import { strings, urls } from '../constants';
66
import {
77
AuthFailedError,
88
ErrorStateCause,
@@ -87,26 +87,18 @@ export class ErrorNotificationProvider
8787
subtitle: [
8888
{
8989
key: 'split-tunneling-failed-subtitle',
90-
content: formatHtml(
91-
sprintf(
92-
// TRANSLATORS: Label for the in-app banner when the app encountered an error
93-
// TRANSLATORS: and will block network traffic until the error is resolved.
94-
messages.pgettext(
95-
'in-app-notifications',
96-
'Failed to start %(splitTunneling)s. <a>Please send a problem report.</a> To unblock network traffic, disable split tunneling.',
97-
),
98-
{ splitTunneling: strings.splitTunneling.toLowerCase() },
90+
content: sprintf(
91+
// TRANSLATORS: Label for the in-app banner when the app encountered an error
92+
// TRANSLATORS: and will block network traffic until the error is resolved.
93+
messages.pgettext(
94+
'in-app-notifications',
95+
'Failed to start %(splitTunneling)s. To unblock network traffic, disable split tunneling.',
9996
),
100-
{
101-
a: (value) => (
102-
<InternalLink to={RoutePath.problemReport} variant="labelTinySemiBold">
103-
<InternalLink.Text>{value}</InternalLink.Text>
104-
</InternalLink>
105-
),
106-
},
97+
{ splitTunneling: strings.splitTunneling.toLowerCase() },
10798
),
10899
},
109100
],
101+
action: this.getActions(this.context.tunnelState.details) ?? undefined,
110102
};
111103
} else {
112104
subtitle = `${subtitle} ${sprintf(
@@ -367,12 +359,15 @@ export class ErrorNotificationProvider
367359
'Unable to communicate with Mullvad kernel driver.',
368360
),
369361
steps: [
370-
messages.pgettext('troubleshoot', 'Try reconnecting.'),
371362
messages.pgettext(
372363
'troubleshoot',
373364
'If you have installed another VPN then try to uninstall that.',
374365
),
375366
messages.pgettext('troubleshoot', 'Try restarting your device.'),
367+
{
368+
'aria-label': messages.pgettext('troubleshoot', 'Read our troubleshooting guide'),
369+
to: urls.splitTunnelGuide,
370+
},
376371
],
377372
},
378373
};

desktop/packages/mullvad-vpn/src/shared/notifications/notification.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@ export type SystemNotificationAction =
2121
};
2222
};
2323

24+
export type TroubleshootStep =
25+
| string
26+
| Pick<ExternalLinkProps, 'to' | 'onClick' | 'aria-label' | 'withAuth'>;
27+
2428
export interface InAppNotificationTroubleshootInfo {
2529
details: string;
26-
steps: string[];
30+
steps: TroubleshootStep[];
2731
buttons?: Array<InAppNotificationTroubleshootButton>;
2832
}
2933

0 commit comments

Comments
 (0)