From 9bf85b1b81171fff08c51f260bc909ad0fa12aff Mon Sep 17 00:00:00 2001 From: ClaudeArs <107423901+ClaudeArs@users.noreply.github.com> Date: Thu, 28 Nov 2024 11:14:46 -0500 Subject: [PATCH] This PR makes all header buttons injectable (#1335) Signed-off-by: ClaudeArs --- packages/legacy/core/App/container-api.ts | 4 +- packages/legacy/core/App/container-impl.ts | 2 +- .../core/App/navigators/ConnectStack.tsx | 13 +++- .../core/App/navigators/ContactStack.tsx | 47 +++++++++++-- .../core/App/navigators/CredentialStack.tsx | 13 +++- .../core/App/navigators/DeliveryStack.tsx | 28 ++++++-- .../legacy/core/App/navigators/HomeStack.tsx | 3 + .../core/App/navigators/NotificationStack.tsx | 22 ++++-- .../core/App/navigators/OnboardingStack.tsx | 2 +- .../core/App/navigators/ProofRequestStack.tsx | 16 ++++- .../core/App/navigators/SettingStack.tsx | 69 +++++++++++++++---- 11 files changed, 179 insertions(+), 40 deletions(-) diff --git a/packages/legacy/core/App/container-api.ts b/packages/legacy/core/App/container-api.ts index ed86209974..d6d84cf118 100644 --- a/packages/legacy/core/App/container-api.ts +++ b/packages/legacy/core/App/container-api.ts @@ -100,7 +100,7 @@ export const LOAD_STATE_TOKENS = { } as const export const OBJECT_TOKENS = { - OBJECT_ONBOARDING_CONFIG: 'object.onboarding-config', + OBJECT_SCREEN_CONFIG: 'object.screen-config', } as const export const CACHE_TOKENS = { @@ -166,7 +166,7 @@ export type TokenMapping = { customNotificationConfig?: CustomNotification } [TOKENS.NOTIFICATIONS_LIST_ITEM]: React.FC - [TOKENS.OBJECT_ONBOARDING_CONFIG]: ScreenOptionsType + [TOKENS.OBJECT_SCREEN_CONFIG]: ScreenOptionsType [TOKENS.COMPONENT_PIN_CREATE_HEADER]: React.FC [TOKENS.CACHE_CRED_DEFS]: { did: string; id: string }[] [TOKENS.CACHE_SCHEMAS]: { did: string; id: string }[] diff --git a/packages/legacy/core/App/container-impl.ts b/packages/legacy/core/App/container-impl.ts index f34fa26d04..d3daf4564a 100644 --- a/packages/legacy/core/App/container-impl.ts +++ b/packages/legacy/core/App/container-impl.ts @@ -104,7 +104,7 @@ export class MainContainer implements Container { this._container.registerInstance(TOKENS.GROUP_BY_REFERENT, false) this._container.registerInstance(TOKENS.HISTORY_ENABLED, false) this._container.registerInstance(TOKENS.CRED_HELP_ACTION_OVERRIDES, []) - this._container.registerInstance(TOKENS.OBJECT_ONBOARDING_CONFIG, DefaultScreenOptionsDictionary) + this._container.registerInstance(TOKENS.OBJECT_SCREEN_CONFIG, DefaultScreenOptionsDictionary) this._container.registerInstance(TOKENS.UTIL_LOGGER, new ConsoleLogger()) this._container.registerInstance(TOKENS.UTIL_OCA_RESOLVER, new DefaultOCABundleResolver(bundle)) this._container.registerInstance(TOKENS.UTIL_LEDGERS, defaultIndyLedgers) diff --git a/packages/legacy/core/App/navigators/ConnectStack.tsx b/packages/legacy/core/App/navigators/ConnectStack.tsx index 16d98f7077..9553969a70 100644 --- a/packages/legacy/core/App/navigators/ConnectStack.tsx +++ b/packages/legacy/core/App/navigators/ConnectStack.tsx @@ -16,7 +16,7 @@ const ConnectStack: React.FC = () => { const Stack = createStackNavigator() const theme = useTheme() const defaultStackOptions = useDefaultStackOptions(theme) - const [scan] = useServices([TOKENS.SCREEN_SCAN]) + const [scan, ScreenOptionsDictionary] = useServices([TOKENS.SCREEN_SCAN, TOKENS.OBJECT_SCREEN_CONFIG]) const { t } = useTranslation() return ( @@ -32,15 +32,24 @@ const ConnectStack: React.FC = () => { options={() => ({ title: t('PasteUrl.PasteUrl'), headerBackTestID: testIdWithKey('Back'), + ...ScreenOptionsDictionary[Screens.PasteUrl] })} /> - + + diff --git a/packages/legacy/core/App/navigators/ContactStack.tsx b/packages/legacy/core/App/navigators/ContactStack.tsx index 81b80759e3..6371e41ef1 100644 --- a/packages/legacy/core/App/navigators/ContactStack.tsx +++ b/packages/legacy/core/App/navigators/ContactStack.tsx @@ -16,39 +16,68 @@ import WhatAreContacts from '../screens/WhatAreContacts' import { ContactStackParams, Screens } from '../types/navigators' import { useDefaultStackOptions } from './defaultStackOptions' +import { TOKENS, useServices } from '../container-api' const ContactStack: React.FC = () => { const Stack = createStackNavigator() const theme = useTheme() const { t } = useTranslation() const defaultStackOptions = useDefaultStackOptions(theme) + const [ScreenOptionsDictionary] = useServices([TOKENS.OBJECT_SCREEN_CONFIG]) return ( - + + + - - { options={() => ({ title: '', headerRight: () => , + ...ScreenOptionsDictionary[Screens.ProofDetails] })} /> ) diff --git a/packages/legacy/core/App/navigators/CredentialStack.tsx b/packages/legacy/core/App/navigators/CredentialStack.tsx index 0dc57825f3..ea38cc759f 100644 --- a/packages/legacy/core/App/navigators/CredentialStack.tsx +++ b/packages/legacy/core/App/navigators/CredentialStack.tsx @@ -16,7 +16,7 @@ const CredentialStack: React.FC = () => { const Stack = createStackNavigator() const theme = useTheme() const { t } = useTranslation() - const [CredentialListHeaderRight] = useServices([TOKENS.COMPONENT_CRED_LIST_HEADER_RIGHT]) + const [CredentialListHeaderRight, ScreenOptionsDictionary] = useServices([TOKENS.COMPONENT_CRED_LIST_HEADER_RIGHT, TOKENS.OBJECT_SCREEN_CONFIG]) const defaultStackOptions = useDefaultStackOptions(theme) return ( @@ -28,17 +28,24 @@ const CredentialStack: React.FC = () => { title: t('Screens.Credentials'), headerRight: () => , headerLeft: () => , + ...ScreenOptionsDictionary[Screens.Credentials] })} /> ) diff --git a/packages/legacy/core/App/navigators/DeliveryStack.tsx b/packages/legacy/core/App/navigators/DeliveryStack.tsx index f76e736486..0261d291b0 100644 --- a/packages/legacy/core/App/navigators/DeliveryStack.tsx +++ b/packages/legacy/core/App/navigators/DeliveryStack.tsx @@ -12,12 +12,14 @@ import { DeliveryStackParams, Screens } from '../types/navigators' import { useDefaultStackOptions } from './defaultStackOptions' import OpenIDCredentialDetails from '../modules/openid/screens/OpenIDCredentialOffer' import OpenIDProofPresentation from '../modules/openid/screens/OpenIDProofPresentation' +import { TOKENS, useServices } from '../container-api' const DeliveryStack: React.FC = () => { const Stack = createStackNavigator() const { t } = useTranslation() const theme = useTheme() const defaultStackOptions = useDefaultStackOptions(theme) + const [ScreenOptionsDictionary] = useServices([TOKENS.OBJECT_SCREEN_CONFIG]) return ( { presentation: 'modal', headerLeft: () => null, headerRight: () => , + ...ScreenOptionsDictionary[Screens.Connection] }} > - + ) diff --git a/packages/legacy/core/App/navigators/HomeStack.tsx b/packages/legacy/core/App/navigators/HomeStack.tsx index cbb834bd0a..f559f09252 100644 --- a/packages/legacy/core/App/navigators/HomeStack.tsx +++ b/packages/legacy/core/App/navigators/HomeStack.tsx @@ -10,6 +10,7 @@ import Home from '../screens/Home' import { HomeStackParams, Screens } from '../types/navigators' import { useDefaultStackOptions } from './defaultStackOptions' +import { TOKENS, useServices } from '../container-api' const HomeStack: React.FC = () => { const Stack = createStackNavigator() @@ -17,6 +18,7 @@ const HomeStack: React.FC = () => { const { t } = useTranslation() const [store] = useStore() const defaultStackOptions = useDefaultStackOptions(theme) + const [ScreenOptionsDictionary] = useServices([TOKENS.OBJECT_SCREEN_CONFIG]) return ( @@ -27,6 +29,7 @@ const HomeStack: React.FC = () => { title: t('Screens.Home'), headerRight: () => (store.preferences.useHistoryCapability ? : null), headerLeft: () => , + ...ScreenOptionsDictionary[Screens.Home] })} /> diff --git a/packages/legacy/core/App/navigators/NotificationStack.tsx b/packages/legacy/core/App/navigators/NotificationStack.tsx index c7d2785db6..6cb3969928 100644 --- a/packages/legacy/core/App/navigators/NotificationStack.tsx +++ b/packages/legacy/core/App/navigators/NotificationStack.tsx @@ -16,30 +16,42 @@ const NotificationStack: React.FC = () => { const theme = useTheme() const { t } = useTranslation() const defaultStackOptions = useDefaultStackOptions(theme) - const [{ customNotificationConfig: customNotification }] = useServices([TOKENS.NOTIFICATIONS]) + const [{ customNotificationConfig: customNotification }, ScreenOptionsDictionary] = useServices([TOKENS.NOTIFICATIONS, TOKENS.OBJECT_SCREEN_CONFIG]) return ( {customNotification && ( )} {customNotification && diff --git a/packages/legacy/core/App/navigators/OnboardingStack.tsx b/packages/legacy/core/App/navigators/OnboardingStack.tsx index 00c715227e..8f5742bf7c 100644 --- a/packages/legacy/core/App/navigators/OnboardingStack.tsx +++ b/packages/legacy/core/App/navigators/OnboardingStack.tsx @@ -34,7 +34,7 @@ const OnboardingStack: React.FC = () => { const theme = useTheme() const OnboardingTheme = theme.OnboardingTheme const carousel = createCarouselStyle(OnboardingTheme) - const [splash, pages, useBiometry, Onboarding, Developer, { screen: Terms }, onTutorialCompletedCurried, ScreenOptionsDictionary, Preface] = useServices([TOKENS.SCREEN_SPLASH, TOKENS.SCREEN_ONBOARDING_PAGES, TOKENS.SCREEN_USE_BIOMETRY, TOKENS.SCREEN_ONBOARDING, TOKENS.SCREEN_DEVELOPER, TOKENS.SCREEN_TERMS, TOKENS.FN_ONBOARDING_DONE, TOKENS.OBJECT_ONBOARDING_CONFIG, TOKENS.SCREEN_PREFACE]) + const [splash, pages, useBiometry, Onboarding, Developer, { screen: Terms }, onTutorialCompletedCurried, ScreenOptionsDictionary, Preface] = useServices([TOKENS.SCREEN_SPLASH, TOKENS.SCREEN_ONBOARDING_PAGES, TOKENS.SCREEN_USE_BIOMETRY, TOKENS.SCREEN_ONBOARDING, TOKENS.SCREEN_DEVELOPER, TOKENS.SCREEN_TERMS, TOKENS.FN_ONBOARDING_DONE, TOKENS.OBJECT_SCREEN_CONFIG, TOKENS.SCREEN_PREFACE]) const defaultStackOptions = useDefaultStackOptions(theme) const navigation = useNavigation>() const onTutorialCompleted = onTutorialCompletedCurried(dispatch, navigation) diff --git a/packages/legacy/core/App/navigators/ProofRequestStack.tsx b/packages/legacy/core/App/navigators/ProofRequestStack.tsx index 62255f660c..e8795d070f 100644 --- a/packages/legacy/core/App/navigators/ProofRequestStack.tsx +++ b/packages/legacy/core/App/navigators/ProofRequestStack.tsx @@ -16,25 +16,31 @@ import { ProofRequestsStackParams, Screens } from '../types/navigators' import { testIdWithKey } from '../utils/testable' import { useDefaultStackOptions } from './defaultStackOptions' +import { TOKENS, useServices } from '../container-api' const ProofRequestStack: React.FC = () => { const Stack = createStackNavigator() const theme = useTheme() const { t } = useTranslation() const defaultStackOptions = useDefaultStackOptions(theme) + const [ScreenOptionsDictionary] = useServices([TOKENS.OBJECT_SCREEN_CONFIG]) return ( ({ title: '', + ...ScreenOptionsDictionary[Screens.ProofRequestDetails] })} /> { { icon="arrow-left" /> ), + ...ScreenOptionsDictionary[Screens.ProofRequesting] })} /> { /> ), headerRight: () => , + ...ScreenOptionsDictionary[Screens.ProofDetails] })} /> { options={() => ({ title: t('Screens.ProofRequestUsageHistory'), headerRight: () => , + ...ScreenOptionsDictionary[Screens.ProofRequestUsageHistory] })} /> diff --git a/packages/legacy/core/App/navigators/SettingStack.tsx b/packages/legacy/core/App/navigators/SettingStack.tsx index 12f69632f4..da0ec59fa0 100644 --- a/packages/legacy/core/App/navigators/SettingStack.tsx +++ b/packages/legacy/core/App/navigators/SettingStack.tsx @@ -27,11 +27,12 @@ const SettingStack: React.FC = () => { const theme = useTheme() const [biometryUpdatePending, setBiometryUpdatePending] = useState(false) const { t } = useTranslation() - const [pages, { screen: terms }, UseBiometry, developer] = useServices([ + const [pages, { screen: terms }, UseBiometry, developer, ScreenOptionsDictionary] = useServices([ TOKENS.SCREEN_ONBOARDING_PAGES, TOKENS.SCREEN_TERMS, TOKENS.SCREEN_USE_BIOMETRY, TOKENS.SCREEN_DEVELOPER, + TOKENS.OBJECT_SCREEN_CONFIG, ]) const defaultStackOptions = useDefaultStackOptions(theme) const OnboardingTheme = theme.OnboardingTheme @@ -52,32 +53,55 @@ const SettingStack: React.FC = () => { { title: t('Screens.Biometry'), headerLeft: biometryUpdatePending ? () => null : undefined, headerBackTestID: testIdWithKey('Back'), + ...ScreenOptionsDictionary[Screens.UseBiometry] }} /> {(props) => ( @@ -123,7 +164,11 @@ const SettingStack: React.FC = () => { )