Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature/9583-EnableSSOAppWide #9673

Draft
wants to merge 74 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
9d1ce9f
Pass scope param to login page
theodur Aug 20, 2024
53f6add
Add storage for device secret
theodur Aug 20, 2024
b727be8
Add device_secret type
theodur Aug 20, 2024
856bd5d
Store device secret
theodur Aug 20, 2024
db9aeb9
Add feature toggle for sso
theodur Aug 20, 2024
ee9aeeb
Add logic to WebViewScreen for SSO authentication
theodur Aug 20, 2024
67ae19e
Always return NoAppointments component for testing
theodur Aug 20, 2024
018f31d
Add feature flagged WebView
theodur Aug 20, 2024
cdc0356
Update dependency array
theodur Aug 20, 2024
3b5545e
Add react-natie-cookies package
theodur Sep 9, 2024
f9bdd42
Set cookies in CookieManager
theodur Sep 9, 2024
0c84567
Revoke SSO session on logout
theodur Sep 9, 2024
ffeddce
Clear cookie manager cookies on logout
theodur Sep 9, 2024
39dbbf1
Add feature togge logic to Webview SSO
theodur Sep 9, 2024
930b720
Always display Webview link for testing
theodur Sep 9, 2024
a9d10c3
Set hasSession local storage in Webview
theodur Sep 9, 2024
7c8e0a2
Update loading logic
theodur Sep 9, 2024
c38719b
Prevent fetching cookies if already set
theodur Sep 11, 2024
2502cb5
Update logic
theodur Sep 11, 2024
2a2199e
Revert testing changes and slight refactor
theodur Sep 11, 2024
91430e5
Merge develop
theodur Sep 11, 2024
6ab3be4
Fix linting errors
theodur Sep 11, 2024
fc4bcd3
Mock cookies library for unit tests
theodur Sep 11, 2024
909d780
Update failing unit tests
theodur Sep 11, 2024
f200c1e
Merge develop
theodur Sep 16, 2024
4a3de68
Merge branch 'develop' into feature/9286-SingleSignOn
theodur Sep 16, 2024
cb17a9d
Merge branch 'develop' into feature/9286-SingleSignOn
theodur Sep 19, 2024
ac64664
Fix cookie timeout
theodur Sep 24, 2024
3f31618
Merge branch 'develop' into feature/9286-SingleSignOn
theodur Sep 24, 2024
7128ae0
Set link prefixes dynamically
theodur Sep 24, 2024
2af48f8
Add WebView functionality to AnnouncementBanner
theodur Sep 24, 2024
66174fd
Add translations for webviews
theodur Sep 24, 2024
5971e0d
Enable SSO for applicable VA.gov links
theodur Sep 24, 2024
8f7cc48
Fetch SSO cookies if reloading failed WebView
theodur Sep 26, 2024
c1c73d4
Add analytics for tracking whether we recieve SSO cookies
theodur Sep 26, 2024
359038d
Refresh SSO cookies if access token expires
theodur Sep 30, 2024
96d771f
Merge branch 'develop' into feature/9286-SingleSignOn
theodur Sep 30, 2024
2a50453
Merge branch 'feature/9286-SingleSignOn' into feature/9583-EnableSSOA…
theodur Sep 30, 2024
8771759
Revert refresh access token logic
theodur Oct 2, 2024
cd61c97
Merge branch 'develop' into feature/9286-SingleSignOn
theodur Oct 3, 2024
5cbcdb2
Merge branch 'develop' into feature/9286-SingleSignOn
theodur Oct 3, 2024
36eb201
Update yarn.lock
theodur Oct 3, 2024
0e39862
Store device secret in keychain
theodur Oct 3, 2024
f389cb0
Log errors when storing device secret
theodur Oct 4, 2024
7f2d057
Create function for loading device secret
theodur Oct 4, 2024
e8cd404
Add url param to analytics event
theodur Oct 4, 2024
eb89f4a
Update dependeny array
theodur Oct 4, 2024
a57ea34
Merge branch 'develop' into feature/9286-SingleSignOn
TKDickson Oct 4, 2024
172c766
Add device secret to Developer Screen
theodur Oct 7, 2024
c3a1ee1
Load device secret if blank
theodur Oct 7, 2024
916ff4a
Remove keychain options
theodur Oct 7, 2024
368465e
Remove comments
theodur Oct 7, 2024
f5d905d
Store device secret regardless of biometrics
theodur Oct 7, 2024
03dde37
Remove device secret from developer screen
theodur Oct 8, 2024
4410396
Refactor implementation
theodur Oct 8, 2024
363cbf1
Remove mock test functions
theodur Oct 8, 2024
0646a1a
Block access to device secret when device is locked
theodur Oct 8, 2024
fde3f86
Merge branch 'develop' into feature/9286-SingleSignOn
theodur Oct 8, 2024
cfac260
Remove merge changes
theodur Oct 8, 2024
aa852ea
Merge branch 'feature/9286-SingleSignOn' into feature/9583-EnableSSOA…
theodur Oct 8, 2024
cc68804
Remove merge changes
theodur Oct 8, 2024
b473ccf
Remove testing changes
theodur Oct 8, 2024
c1e3cd9
Add WebView unit test for AnnouncementBanner
theodur Oct 8, 2024
a926a2d
Update NeedHelpData unit test
theodur Oct 8, 2024
f00f1f4
Fix appeals E2E test
theodur Oct 8, 2024
ee50608
Add documentation on SSO
theodur Oct 8, 2024
f23977e
Merge branch 'develop' into feature/9286-SingleSignOn
TKDickson Oct 8, 2024
ae0531b
Merge branch 'feature/9286-SingleSignOn' into feature/9583-EnableSSOA…
theodur Oct 8, 2024
3e86c0d
Merge branch 'develop' into feature/9583-EnableSSOAppWide
theodur Nov 13, 2024
13d4948
Revert SingleSignOn.md linting changes
theodur Nov 13, 2024
502d2f5
Enable SSO for 'What to bring' appointments link
theodur Nov 13, 2024
ae06dd2
Remove SSO from 'what to bring to appointment' link
theodur Nov 14, 2024
5fce7ec
Hardcode screens for testing SSO
theodur Nov 14, 2024
7647152
Enable sso feature toggle by default
theodur Nov 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions VAMobile/e2e/tests/Appeals.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,6 @@ describe('Appeals', () => {
await device.disableSynchronization()
await element(by.id(CommonE2eIdConstants.GO_TO_VA_GOV_LINK_ID)).tap()
await setTimeout(2000)
await element(by.text(CommonE2eIdConstants.LEAVING_APP_LEAVE_TEXT)).tap()
await setTimeout(5000)
await device.takeScreenshot('AppealsNeedHelpGoToVAScreen')
await device.enableSynchronization()
})
Expand Down
4 changes: 0 additions & 4 deletions VAMobile/env/constant.env
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ WEBVIEW_URL_CHANGE_LEGAL_NAME=https://www.va.gov/resources/how-to-change-your-le
WEBVIEW_URL_CORONA_FAQ=https://www.va.gov/coronavirus-veteran-frequently-asked-questions
WEBVIEW_URL_FACILITY_LOCATOR=https://www.va.gov/find-locations/
WEBVIEW_URL_WHAT_TO_BRING_TO_APPOINTMENTS=https://www.va.gov/resources/what-should-i-bring-to-my-health-care-appointments/
LINK_URL_VA_NOTIFICATIONS=https://www.va.gov/profile/notifications/
LINK_URL_VA_SCHEDULING=https://www.va.gov/health-care/schedule-view-va-appointments/
LINK_URL_IN_APP_RECRUITMENT=https://docs.google.com/forms/d/e/1FAIpQLSfRb0OtW34qKm8tGoQwwwDFs8IqwOMCLTde3DeM-ukKOEZBnA/viewform
LINK_URL_VETERAN_USABILITY_PROJECT=https://veteranusability.us/
LINK_URL_VETERANS_CRISIS_LINE=https://www.veteranscrisisline.net/
Expand All @@ -14,14 +12,12 @@ LINK_URL_DECISION_REVIEWS=https://www.va.gov/decision-reviews/
LINK_URL_ABOUT_DISABILITY_RATINGS=https://www.va.gov/disability/about-disability-ratings/
LINK_URL_COMPENSATION_CLAIM_EXAM=https://benefits.va.gov/compensation/claimexam.asp
LINK_URL_YOUR_CLAIMS=https://www.va.gov/your-claims
LINK_URL_CLAIM_APPEAL_STATUS=https://www.va.gov/claim-or-appeal-status/
LINK_URL_UPGRADE_MY_HEALTHEVET_PREMIUM_ACCOUNT=https://www.myhealth.va.gov/web/myhealthevet/upgrading-your-my-healthevet-account-through-in-person-or-online-authentication
LINK_URL_GO_TO_MY_HEALTHEVET=https://www.myhealth.va.gov/mhv-portal-web/user-login?redirect=/mhv-portal-web/web/myhealthevet/secure-messaging
LINK_URL_GO_TO_PATIENT_PORTAL=https://patientportal.myhealth.va.gov/
LINK_URL_GO_TO_VA_GOV=https://www.va.gov
LINK_URL_ASK_VA_GOV=https://ask.va.gov/
LINK_URL_ABOUT_PACT_ACT=https://www.va.gov/resources/the-pact-act-and-your-va-benefits/
LINK_URL_APPLY_FOR_HEALTH_CARE=https://www.va.gov/health-care/apply/application/introduction
APPLE_STORE_LINK=https://apps.apple.com/us/app/va-health-and-benefits/id1559609596
GOOGLE_PLAY_LINK=https://play.google.com/store/apps/details?id=gov.va.mobileapp
CARRIER_TRACKING_URL_USPS=https://tools.usps.com/go/TrackConfirmAction_input?strOrigTrackNum=
Expand Down
3 changes: 3 additions & 0 deletions VAMobile/env/env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@ fi
echo "DEMO_PASSWORD=${DEMO_PASSWORD}" >> .env

# set website URLs
echo "LINK_URL_APPLY_FOR_HEALTH_CARE=https://${WEBSITE_PREFIX}va.gov/health-care/apply/application/introduction" >> .env
echo "LINK_URL_CLAIM_APPEAL_STATUS=https://${WEBSITE_PREFIX}va.gov/claim-or-appeal-status" >> .env
echo "LINK_URL_SCHEDULE_APPOINTMENTS=https://${WEBSITE_PREFIX}va.gov/health-care/schedule-view-va-appointments" >> .env
echo "LINK_URL_VA_NOTIFICATIONS=https://${WEBSITE_PREFIX}va.gov/profile/notifications" >> .env

# Get all vars that are the same across environments
while read p; do
Expand Down
1 change: 0 additions & 1 deletion VAMobile/env/test.env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ export const WEBVIEW_URL_CHANGE_LEGAL_NAME =
export const WEBVIEW_URL_CORONA_FAQ = 'https://www.va.gov/coronavirus-veteran-frequently-asked-questions'
export const WEBVIEW_URL_FACILITY_LOCATOR = 'https://www.va.gov/find-locations/'
export const LINK_URL_VA_NOTIFICATIONS = 'https://www.va.gov/profile/notifications/'
export const LINK_URL_VA_SCHEDULING = 'https://www.va.gov/health-care/schedule-view-va-appointments/'
export const LINK_URL_IN_APP_RECRUITMENT =
'https://docs.google.com/forms/d/e/1FAIpQLSfRb0OtW34qKm8tGoQwwwDFs8IqwOMCLTde3DeM-ukKOEZBnA/viewform'
export const LINK_URL_VETERAN_USABILITY_PROJECT = 'https://veteranusability.us/'
Expand Down
22 changes: 22 additions & 0 deletions VAMobile/src/components/AnnouncementBanner.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ import { context, render } from 'testUtils'
import AnnouncementBanner from './AnnouncementBanner'

const mockExternalLinkSpy = jest.fn()
const mockNavigationSpy = jest.fn()

jest.mock('utils/hooks', () => {
const original = jest.requireActual('utils/hooks')
return {
...original,
useExternalLink: () => mockExternalLinkSpy,
useRouteNavigation: () => mockNavigationSpy,
}
})

Expand All @@ -29,4 +31,24 @@ context('AnnouncementBanner', () => {
fireEvent.press(screen.getByRole('link', { name: 'Learn about PACT Act on VA.gov' }))
expect(mockExternalLinkSpy).toBeCalledWith('https://www.va.gov')
})

it("opens WebView when 'useWebView' is true", () => {
const loadingMessage = 'Loading webview opened via announcement banner'

render(
<AnnouncementBanner
title={'Learn about PACT Act on VA.gov'}
link={'https://www.va.gov'}
useWebView={true}
webViewLoadingMessage={loadingMessage}
/>,
)
fireEvent.press(screen.getByRole('link', { name: 'Learn about PACT Act on VA.gov' }))
expect(mockNavigationSpy).toHaveBeenCalledWith('Webview', {
url: 'https://www.va.gov',
displayTitle: 'va.gov',
loadingMessage,
useSSO: true,
})
})
})
29 changes: 26 additions & 3 deletions VAMobile/src/components/AnnouncementBanner.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import React, { FC } from 'react'
import { useTranslation } from 'react-i18next'
import { Platform, Pressable, PressableStateCallbackType, ViewStyle } from 'react-native'

import { Icon } from '@department-of-veterans-affairs/mobile-component-library/src/components/Icon/Icon'

import { Box, TextView } from 'components'
import { useExternalLink, useTheme } from 'utils/hooks'
import { NAMESPACE } from 'constants/namespaces'
import { useExternalLink, useRouteNavigation, useTheme } from 'utils/hooks'

import colors from '../styles/themes/VAColors'

Expand All @@ -15,11 +17,23 @@ interface AnnouncementBannerProps {
link: string
/** Optional accessibilityLabel */
a11yLabel?: string
/** Determines whether to use the WebView for opening link. Defaults to launching link externally. */
useWebView?: boolean
/** Message to display when loading WebView. `useWebView` must be enabled to take effect. */
webViewLoadingMessage?: string
}

const AnnouncementBanner: FC<AnnouncementBannerProps> = ({ title, link, a11yLabel }: AnnouncementBannerProps) => {
const AnnouncementBanner: FC<AnnouncementBannerProps> = ({
title,
link,
a11yLabel,
useWebView,
webViewLoadingMessage,
}: AnnouncementBannerProps) => {
const theme = useTheme()
const launchExternalLink = useExternalLink()
const navigateTo = useRouteNavigation()
const { t } = useTranslation(NAMESPACE.COMMON)

const pressableStyle = ({ pressed }: PressableStateCallbackType): ViewStyle => ({
flexDirection: 'row',
Expand All @@ -42,7 +56,16 @@ const AnnouncementBanner: FC<AnnouncementBannerProps> = ({ title, link, a11yLabe
return (
<Pressable
style={pressableStyle}
onPress={() => launchExternalLink(link)}
onPress={() =>
useWebView
? navigateTo('Webview', {
url: link,
displayTitle: t('webview.vagov'),
loadingMessage: webViewLoadingMessage || t('webview.default.loading'),
useSSO: true,
})
: launchExternalLink(link)
}
accessible={true}
accessibilityRole={'link'}
accessibilityLabel={a11yLabel}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
import React from 'react'
import { Alert, Linking } from 'react-native'
import { Linking } from 'react-native'

import { fireEvent, screen } from '@testing-library/react-native'
import { t } from 'i18next'

import { context, render } from 'testUtils'
import getEnv from 'utils/env'

import NeedHelpData from './NeedHelpData'

const { LINK_URL_CLAIM_APPEAL_STATUS } = getEnv()

const mockNavigationSpy = jest.fn()

jest.mock('utils/hooks', () => {
const original = jest.requireActual('utils/hooks')
return {
...original,
useRouteNavigation: () => mockNavigationSpy,
}
})

context('NeedHelpData', () => {
const initializeTestInstance = (isAppeal?: boolean) => {
render(<NeedHelpData isAppeal={isAppeal} />)
Expand Down Expand Up @@ -38,7 +52,12 @@ context('NeedHelpData', () => {
it('should launch external link on click of the url', () => {
initializeTestInstance(true)
fireEvent.press(screen.getByRole('link', { name: 'Go to VA.gov' }))
expect(Alert.alert).toHaveBeenCalled()
expect(mockNavigationSpy).toHaveBeenCalledWith('Webview', {
url: LINK_URL_CLAIM_APPEAL_STATUS,
displayTitle: 'va.gov',
loadingMessage: t('webview.claims.loading'),
useSSO: true,
})
})
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { NAMESPACE } from 'constants/namespaces'
import { a11yLabelVA } from 'utils/a11yLabel'
import getEnv from 'utils/env'
import { displayedTextPhoneNumber } from 'utils/formattingUtils'
import { useTheme } from 'utils/hooks'
import { useRouteNavigation, useTheme } from 'utils/hooks'

const { LINK_URL_CLAIM_APPEAL_STATUS } = getEnv()

Expand All @@ -17,9 +17,10 @@ type NeedHelpDataProps = {
function NeedHelpData({ isAppeal }: NeedHelpDataProps) {
const theme = useTheme()
const { t } = useTranslation(NAMESPACE.COMMON)
const navigateTo = useRouteNavigation()

function renderAppealData() {
if (!isAppeal) {
if (isAppeal) {
return <></>
}

Expand All @@ -30,8 +31,15 @@ function NeedHelpData({ isAppeal }: NeedHelpDataProps) {
</TextView>
<Box mt={theme.dimensions.standardMarginBetween}>
<LinkWithAnalytics
type="url"
url={LINK_URL_CLAIM_APPEAL_STATUS}
type="custom"
onPress={() => {
navigateTo('Webview', {
url: LINK_URL_CLAIM_APPEAL_STATUS,
displayTitle: t('webview.vagov'),
loadingMessage: t('webview.claims.loading'),
useSSO: true,
})
}}
text={t('goToVAGov')}
a11yLabel={a11yLabelVA(t('goToVAGov'))}
a11yHint={t('appealDetails.goToVAGovA11yHint')}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import React from 'react'
import { useTranslation } from 'react-i18next'

import { ParamListBase } from '@react-navigation/native'

import { Button, ButtonVariants } from '@department-of-veterans-affairs/mobile-component-library'
import { UseMutateFunction } from '@tanstack/react-query'
import { TFunction } from 'i18next'
Expand All @@ -23,9 +25,16 @@ import {
} from 'utils/appointments'
import { showSnackBar } from 'utils/common'
import getEnv from 'utils/env'
import { useAppDispatch, useDestructiveActionSheet, useDestructiveActionSheetProps, useTheme } from 'utils/hooks'
import {
RouteNavigationFunction,
useAppDispatch,
useDestructiveActionSheet,
useDestructiveActionSheetProps,
useRouteNavigation,
useTheme,
} from 'utils/hooks'

const { LINK_URL_VA_SCHEDULING, WEBVIEW_URL_FACILITY_LOCATOR } = getEnv()
const { LINK_URL_SCHEDULE_APPOINTMENTS, WEBVIEW_URL_FACILITY_LOCATOR } = getEnv()

type AppointmentCancelRescheduleProps = {
appointmentID: string
Expand Down Expand Up @@ -160,6 +169,7 @@ const phoneFacilitySchedulingLink = (
location: AppointmentLocation | undefined,
t: TFunction,
theme: VATheme,
navigateTo: RouteNavigationFunction<ParamListBase>,
) => {
return (
<Box>
Expand All @@ -181,8 +191,15 @@ const phoneFacilitySchedulingLink = (
) : undefined}
{!useFacilityLocatorFallback && (
<LinkWithAnalytics
type="url"
url={LINK_URL_VA_SCHEDULING}
type="custom"
onPress={() => {
navigateTo('Webview', {
url: LINK_URL_SCHEDULE_APPOINTMENTS,
displayTitle: t('webview.vagov'),
loadingMessage: t('webview.appointments.loading'),
useSSO: true,
})
}}
text={t('appointments.vaSchedule')}
a11yLabel={a11yLabelVA(t('appointments.vaSchedule'))}
testID="vaLinkApptsCancelTestID"
Expand Down Expand Up @@ -300,6 +317,7 @@ function AppointmentCancelReschedule({
const { t } = useTranslation(NAMESPACE.COMMON)
const dispatch = useAppDispatch()
const confirmAlert = useDestructiveActionSheet()
const navigateTo = useRouteNavigation()
const { location, cancelId } = attributes || ({} as AppointmentAttributes)

const header = getHeader(subType, t)
Expand Down Expand Up @@ -347,11 +365,18 @@ function AppointmentCancelReschedule({
{body}
</TextView>
{!isClaimExam ? (
phoneFacilitySchedulingLink(useFacilityFallback, isAtlastGFEHomeVideoAppt, location, t, theme)
phoneFacilitySchedulingLink(useFacilityFallback, isAtlastGFEHomeVideoAppt, location, t, theme, navigateTo)
) : subType === AppointmentDetailsSubTypeConstants.CanceledAndPending ? (
<LinkWithAnalytics
type="url"
url={LINK_URL_VA_SCHEDULING}
type="custom"
onPress={() => {
navigateTo('Webview', {
url: LINK_URL_SCHEDULE_APPOINTMENTS,
displayTitle: t('webview.vagov'),
loadingMessage: t('webview.appointments.loading'),
useSSO: true,
})
}}
text={t('appointments.vaSchedule')}
a11yLabel={a11yLabelVA(t('appointments.vaSchedule'))}
/>
Expand Down
4 changes: 3 additions & 1 deletion VAMobile/src/screens/HealthScreen/HealthScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
const showAlert = featureInDowntime || activityError
const alertMessage = featureInDowntime ? t('health.activity.downtime') : t('health.activity.error')

const enrolledInVAHealthCare =

Check warning on line 113 in VAMobile/src/screens/HealthScreen/HealthScreen.tsx

View workflow job for this annotation

GitHub Actions / lint

'enrolledInVAHealthCare' is assigned a value but never used
userAuthorizedServices?.appointments ||
userAuthorizedServices?.secureMessaging ||
userAuthorizedServices?.prescriptions ||
Expand Down Expand Up @@ -172,12 +172,14 @@
</Pressable>
</Box>
)}
{!enrolledInVAHealthCare && (
{true && (
<Box mb={theme.dimensions.contentMarginBottom}>
<AnnouncementBanner
title={t('applyForHealthCare')}
link={LINK_URL_APPLY_FOR_HEALTH_CARE}
a11yLabel={a11yLabelVA(t('applyForHealthCare'))}
useWebView={true}
webViewLoadingMessage={t('webview.healthCareApplication.loading')}
/>
</Box>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import { AuthState, setNotificationsPreferenceScreen, setRequestNotifications }
import { a11yLabelVA } from 'utils/a11yLabel'
import { logAnalyticsEvent } from 'utils/analytics'
import getEnv from 'utils/env'
import { useAppDispatch, useOnResumeForeground, useTheme } from 'utils/hooks'
import { useAppDispatch, useOnResumeForeground, useRouteNavigation, useTheme } from 'utils/hooks'
import { screenContentAllowed } from 'utils/waygateConfig'

const NOTIFICATION_COMPLETED_KEY = '@store_notification_preference_complete'
Expand All @@ -55,6 +55,7 @@ type NotificationsSettingsScreenProps = StackScreenProps<HomeStackParamList, 'No
function NotificationsSettingsScreen({ navigation }: NotificationsSettingsScreenProps) {
const { t } = useTranslation(NAMESPACE.COMMON)
const theme = useTheme()
const navigateTo = useRouteNavigation()
const dispatch = useAppDispatch()
const queryClient = useQueryClient()
const { gutter, contentMarginBottom, condensedMarginBetween } = theme.dimensions
Expand Down Expand Up @@ -231,8 +232,15 @@ function NotificationsSettingsScreen({ navigation }: NotificationsSettingsScreen
</TextView>
<Box mx={gutter}>
<LinkWithAnalytics
type="url"
url={LINK_URL_VA_NOTIFICATIONS}
type="custom"
onPress={() => {
navigateTo('Webview', {
url: LINK_URL_VA_NOTIFICATIONS,
displayTitle: t('webview.vagov'),
loadingMessage: t('webview.notifications.loading'),
useSSO: true,
})
}}
text={t('notifications.settings.link.text')}
a11yLabel={a11yLabelVA(t('notifications.settings.link.text'))}
testID="noficationSettingsLinkID"
Expand Down
7 changes: 7 additions & 0 deletions VAMobile/src/translations/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1470,7 +1470,14 @@
"veteranStatus.uniformedServices.A11yLabel": "You can use this Veteran status to prove you served in the United States Uniformed Services. This status doesn't entitle you to any V-A benefits.",
"veteranStatus.uploadPhoto": "Upload photo",
"video": "Video",
"waygateEditScreen.title": "Waygate Edit Screen",
"waygateManagement.title": "Waygate Management",
"webview.appointments.loading": "Loading appointments page...",
"webview.claims.loading": "Loading claims and appeal page...",
"webview.default.loading": "Loading page...",
"webview.healthCareApplication.loading": "Loading health care application...",
"webview.notifications.loading": "Loading email and text notification settings...",
"webview.changeLegalName.loading": "Loading how to change your legal name...",
"webview.vagov": "va.gov",
"webview.valocation.loading": "Loading VA location finder...",
"whatsNew.dismissMessage": "Dismiss this message",
Expand Down
Loading
Loading