Skip to content

Commit

Permalink
chore(IT Wallet): [SIW-586] Refactor navigation routes (#5244)
Browse files Browse the repository at this point in the history
## Short description
Depends on #5241.
This PR suggests a refactoring of the navigation routes, introducing a
structure which separates the issuance and presentation flows for PID
and generic credentials. While the ultimate aim is to merge these flows
in the future, the current proposal might be beneficial as well.
Subsequently, another PR will follow to align the screens folder
structure with the newly proposed routes structure.

## List of changes proposed in this pull request
- Updates the routes structure;
- Updates routes names;
- Updates usage.

## How to test
Static tests. Optionally check every flow again.
  • Loading branch information
LazyAfternoons committed Nov 22, 2023
1 parent fa3356f commit e5bd9e1
Show file tree
Hide file tree
Showing 26 changed files with 166 additions and 159 deletions.
2 changes: 1 addition & 1 deletion ts/features/barcode/screens/BarcodeScanScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ const BarcodeScanScreen = () => {
};
NavigationService.dispatchNavigationAction(
CommonActions.navigate(ITW_ROUTES.MAIN, {
screen: ITW_ROUTES.PRESENTATION.CROSS_DEVICE.INIT,
screen: ITW_ROUTES.PRESENTATION.PID.REMOTE.CHECKS,
params
})
);
Expand Down
4 changes: 2 additions & 2 deletions ts/features/it-wallet/components/cie/CieNfcOverlay.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { openNFCSettings } from "../../utils/cie";

type NavigationProps = IOStackNavigationRouteProps<
ItwParamsList,
"ITW_ISSUING_CIE_CARD_READER_SCREEN"
"ITW_ISSUING_PID_CIE_CARD_READER_SCREEN"
>;

type Props = ReduxProps & NavigationProps;
Expand All @@ -43,7 +43,7 @@ export default class CieNfcOverlay extends React.PureComponent<Props> {
style: "default",
onPress: () =>
this.props.navigation.navigate(ITW_ROUTES.MAIN, {
screen: ITW_ROUTES.ISSUING.PID_AUTH_INFO
screen: ITW_ROUTES.ISSUING.PID.AUTH_INFO
})
}
]
Expand Down
67 changes: 35 additions & 32 deletions ts/features/it-wallet/navigation/ItwParamsList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,41 +7,44 @@ import { ItwRpInitScreenNavigationParams } from "../screens/presentation/crossde
import { ITW_ROUTES } from "./ItwRoutes";

export type ItwParamsList = {
// DISCOVERY
[ITW_ROUTES.DISCOVERY.INFO]: undefined;
[ITW_ROUTES.DISCOVERY.FEATURES_INFO]: undefined;
// ISSUING CIE
[ITW_ROUTES.ISSUING.CIE.EXPIRED_SCREEN]: undefined;
[ITW_ROUTES.ISSUING.CIE.PIN_SCREEN]: undefined;
[ITW_ROUTES.ISSUING.CIE
// ISSUING PID
[ITW_ROUTES.ISSUING.PID.INFO]: undefined;
[ITW_ROUTES.ISSUING.PID.AUTH]: undefined;
[ITW_ROUTES.ISSUING.PID.AUTH_INFO]: undefined;
[ITW_ROUTES.ISSUING.PID.REQUEST]: ItwPidRequestScreenNavigationParams;
[ITW_ROUTES.ISSUING.PID.PREVIEW]: undefined;
[ITW_ROUTES.ISSUING.PID.ADDING]: undefined;

// ISSUING PID CIE
[ITW_ROUTES.ISSUING.PID.CIE.EXPIRED_SCREEN]: undefined;
[ITW_ROUTES.ISSUING.PID.CIE.PIN_SCREEN]: undefined;
[ITW_ROUTES.ISSUING.PID.CIE
.CARD_READER_SCREEN]: ItwCieCardReaderScreenNavigationParams;
[ITW_ROUTES.ISSUING.CIE
[ITW_ROUTES.ISSUING.PID.CIE
.CONSENT_DATA_USAGE]: ItwCieConsentDataUsageScreenNavigationParams;
[ITW_ROUTES.ISSUING.CIE
[ITW_ROUTES.ISSUING.PID.CIE
.WRONG_PIN_SCREEN]: ItwCieWrongPinScreenNavigationParams;
[ITW_ROUTES.ISSUING.CIE.PIN_TEMP_LOCKED_SCREEN]: undefined;
// ISSUING
[ITW_ROUTES.ISSUING.PID_AUTH_INFO]: undefined;
[ITW_ROUTES.ISSUING.PID_REQUEST]: ItwPidRequestScreenNavigationParams;
[ITW_ROUTES.ISSUING.PID_PREVIEW]: undefined;
[ITW_ROUTES.ISSUING.PID_ADDING]: undefined;
// PRESENTATION PID
[ITW_ROUTES.PRESENTATION.PID_DETAILS]: undefined;
[ITW_ROUTES.PRESENTATION.CROSS_DEVICE.INIT]: ItwRpInitScreenNavigationParams;
[ITW_ROUTES.PRESENTATION.CROSS_DEVICE.DATA]: undefined;
[ITW_ROUTES.PRESENTATION.CROSS_DEVICE.RESULT]: undefined;
// PRESENTATION CREDENTIALS
[ITW_ROUTES.PRESENTATION.CROSS_DEVICE.CHECKS]: undefined;
[ITW_ROUTES.PRESENTATION.CROSS_DEVICE.DATA_NEW]: undefined;
[ITW_ROUTES.PRESENTATION.CROSS_DEVICE.RESULT_NEW]: undefined;
// CREDENTIALS
[ITW_ROUTES.CREDENTIAL.ISSUING.CATALOG]: undefined;
[ITW_ROUTES.CREDENTIAL.ISSUING.CHECKS]: undefined;
[ITW_ROUTES.CREDENTIAL.ISSUING.AUTH]: undefined;
[ITW_ROUTES.CREDENTIAL.ISSUING.PREVIEW]: undefined;
// CREDENTIALS PRESENTATION
[ITW_ROUTES.CREDENTIAL.PRESENTATION
.CREDENTIAL_DETAILS]: ItwCredentialDetailsScreenNavigationParams;
[ITW_ROUTES.ISSUING.PID.CIE.PIN_TEMP_LOCKED_SCREEN]: undefined;

// ISSUING CREDENTIALS
[ITW_ROUTES.ISSUING.CREDENTIAL.CATALOG]: undefined;
[ITW_ROUTES.ISSUING.CREDENTIAL.CHECKS]: undefined;
[ITW_ROUTES.ISSUING.CREDENTIAL.AUTH]: undefined;
[ITW_ROUTES.ISSUING.CREDENTIAL.PREVIEW]: undefined;

// PRESENTATION REMOTE PID
[ITW_ROUTES.PRESENTATION.PID.DETAILS]: undefined;
[ITW_ROUTES.PRESENTATION.PID.REMOTE.CHECKS]: ItwRpInitScreenNavigationParams;
[ITW_ROUTES.PRESENTATION.PID.REMOTE.DATA]: undefined;
[ITW_ROUTES.PRESENTATION.PID.REMOTE.RESULT]: undefined;

// PRESENTATION REMOTE CREDENTIAL
[ITW_ROUTES.PRESENTATION.CREDENTIAL
.DETAILS]: ItwCredentialDetailsScreenNavigationParams;
[ITW_ROUTES.PRESENTATION.CREDENTIAL.REMOTE.CHECKS]: undefined;
[ITW_ROUTES.PRESENTATION.CREDENTIAL.REMOTE.DATA]: undefined;
[ITW_ROUTES.PRESENTATION.CREDENTIAL.REMOTE.RESULT]: undefined;

// GENERIC
[ITW_ROUTES.GENERIC.NOT_AVAILABLE]: undefined;
};
74 changes: 38 additions & 36 deletions ts/features/it-wallet/navigation/ItwRoutes.ts
Original file line number Diff line number Diff line change
@@ -1,46 +1,48 @@
export const ITW_ROUTES = {
MAIN: "ITW_MAIN",
DISCOVERY: {
INFO: "ITW_DISCOVERY_INFO",
FEATURES_INFO: "ITW_DISCOVERY_FEATURES_INFO"
} as const,
MAIN: "ITW_MAIN" as const,
ISSUING: {
CIE: {
EXPIRED_SCREEN: "ITW_ISSUING_CIE_EXPIRED_SCREEN",
PIN_SCREEN: "ITW_ISSUING_CIE_PIN_SCREEN",
CARD_READER_SCREEN: "ITW_ISSUING_CIE_CARD_READER_SCREEN",
CONSENT_DATA_USAGE: "ITW_ISSUING_CIE_CONSENT_DATA_USAGE",
WRONG_PIN_SCREEN: "ITW_ISSUING_CIE_WRONG_PIN_SCREEN",
PIN_TEMP_LOCKED_SCREEN: "ITW_ISSUING_CIE_PIN_TEMP_LOCKED_SCREEN"
PID: {
CIE: {
EXPIRED_SCREEN: "ITW_ISSUING_PID_CIE_EXPIRED_SCREEN",
PIN_SCREEN: "ITW_ISSUING_PID_CIE_PIN_SCREEN",
CARD_READER_SCREEN: "ITW_ISSUING_PID_CIE_CARD_READER_SCREEN",
CONSENT_DATA_USAGE: "ITW_ISSUING_PID_CIE_CONSENT_DATA_USAGE",
WRONG_PIN_SCREEN: "ITW_ISSUING_PID_CIE_WRONG_PIN_SCREEN",
PIN_TEMP_LOCKED_SCREEN: "ITW_ISSUING_PID_CIE_PIN_TEMP_LOCKED_SCREEN"
} as const,
INFO: "ITW_ISSUING_PID_INFO",
AUTH: "ITW_ISSUING_PID_AUTH",
AUTH_INFO: "ITW_ISSUING_PID_AUTH_INFO",
REQUEST: "ITW_ISSUING_PID_REQUEST",
PREVIEW: "ITW_ISSUING_PID_PREVIEW",
ADDING: "ITW_ISSUING_PID_ADDING"
} as const,
PID_AUTH_INFO: "ITW_ISSUING_PID_AUTH_INFO",
PID_REQUEST: "ITW_ISSUING_PID_REQUEST",
PID_PREVIEW: "ITW_ISSUING_PID_PREVIEW",
PID_ADDING: "ITW_ISSUING_PID_ADDING"
CREDENTIAL: {
CATALOG: "ITW_ISSUING_CREDENTIAL_CATALOG",
CHECKS: "ITW_ISSUING_CREDENTIAL_CHECKS",
AUTH: "ITW_ISSUING_CREDENTIAL_AUTH",
PREVIEW: "ITW_ISSUING_CREDENTIAL_PREVIEW"
} as const
} as const,
PRESENTATION: {
PID_DETAILS: "ITW_PRESENTATION_PID_DETAILS",
CROSS_DEVICE: {
CHECKS: "ITW_PRESENTATION_CROSS_DEVICE_CHECKS",
DATA_NEW: "ITW_PRESENTATION_CROSS_DEVICE_DATA_NEW",
RESULT_NEW: "ITW_PRESETATION_CROSS_DEVICE_RESULT_NEW",
INIT: "ITW_PRESENTATION_CROSS_DEVICE_INIT",
DATA: "ITW_PRESENTATION_CROSS_DEVICE_DATA",
RESULT: "ITW_PRESETATION_CROSS_DEVICE_RESULT"
} as const
},
CREDENTIAL: {
ISSUING: {
CATALOG: "ITW_CREDENTIAL_ISSUING_CATALOG",
CHECKS: "ITW_CREDENTIAL_ISSUING_CHECKS",
AUTH: "ITW_CREDENTIAL_ISSUING_AUTH",
PREVIEW: "ITW_CREDENTIAL_ISSUING_PREVIEW"
PID: {
DETAILS: "ITW_PRESENTATION_PID_DETAILS",
REMOTE: {
CHECKS: "ITW_PRESENTATION_PID_REMOTE_CHECKS",
DATA: "ITW_PRESENTATION_PID_REMOTE_DATA",
RESULT: "ITW_PRESENTATION_PID_REMOTE_RESULT"
} as const
} as const,
PRESENTATION: {
CREDENTIAL_DETAILS: "ITW_CREDENTIAL_PRESENTATION_DETAILS"
CREDENTIAL: {
DETAILS: "ITW_PRESENTATION_CREDENTIAL_DETAILS",
REMOTE: {
CHECKS: "ITW_PRESENTATION_CREDENTIAL_CHECKS",
DATA: "ITW_PRESENTATION_CREDENTIAL_DATA",
RESULT: "ITW_PRESETATION_CREDENTIAL_RESULT"
} as const
} as const
} as const,
GENERIC: {
NOT_AVAILABLE: "ITW_GENERIC_NOT_AVAILABLE"
}
} as const;
} as const
};
102 changes: 52 additions & 50 deletions ts/features/it-wallet/navigation/ItwStackNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import ItwDiscoveryInfoScreen from "../screens/discovery/ItwDiscoveryInfoScreen"
import ItwPidAuthInfoScreen from "../screens/issuing/ItwPidAuthInfoScreen";
import ItwPidPreviewScreen from "../screens/issuing/ItwPidPreviewScreen";
import ItwPidAddingScreen from "../screens/issuing/ItwPidAddingScreen";
import ItwCredentialDetails from "../screens/credential/ItwPidDetails";
import ItwPidDetails from "../screens/credential/ItwPidDetails";
import ItwPidRequestScreen from "../screens/issuing/ItwPidRequestScreen";
import ItwRpInitScreen from "../screens/presentation/crossdevice/ItwRpInitScreen";
import ItwPresentationScreen from "../screens/presentation/crossdevice/ItwRpPresentationScreen";
Expand All @@ -35,107 +35,109 @@ export const ItwStackNavigator = () => (
headerMode={"none"}
screenOptions={{ gestureEnabled: isGestureEnabled }}
>
{/* Discovery */}
{/* ISSUING PID CIE */}
<Stack.Screen
name={ITW_ROUTES.DISCOVERY.INFO}
component={ItwDiscoveryInfoScreen}
name={ITW_ROUTES.ISSUING.PID.CIE.EXPIRED_SCREEN}
component={CieExpiredOrInvalidScreen}
/>
<Stack.Screen
name={ITW_ROUTES.DISCOVERY.FEATURES_INFO}
component={ItwDiscoveryProviderInfoScreen}
name={ITW_ROUTES.ISSUING.PID.CIE.PIN_SCREEN}
component={ItwCiePinScreen}
/>
{/* Issuing CIE */}
<Stack.Screen
name={ITW_ROUTES.ISSUING.CIE.PIN_SCREEN}
component={ItwCiePinScreen}
name={ITW_ROUTES.ISSUING.PID.CIE.CARD_READER_SCREEN}
component={CieCardReaderScreen}
/>
<Stack.Screen
name={ITW_ROUTES.ISSUING.CIE.CONSENT_DATA_USAGE}
name={ITW_ROUTES.ISSUING.PID.CIE.CONSENT_DATA_USAGE}
component={CieConsentDataUsageScreen}
/>
<Stack.Screen
name={ITW_ROUTES.ISSUING.CIE.CARD_READER_SCREEN}
component={CieCardReaderScreen}
name={ITW_ROUTES.ISSUING.PID.CIE.WRONG_PIN_SCREEN}
component={CieWrongCiePinScreen}
/>

{/* ISSUING PID */}
<Stack.Screen
name={ITW_ROUTES.ISSUING.CIE.EXPIRED_SCREEN}
component={CieExpiredOrInvalidScreen}
name={ITW_ROUTES.ISSUING.PID.INFO}
component={ItwDiscoveryInfoScreen}
/>
<Stack.Screen
name={ITW_ROUTES.ISSUING.CIE.WRONG_PIN_SCREEN}
component={CieWrongCiePinScreen}
name={ITW_ROUTES.ISSUING.PID.AUTH}
component={ItwDiscoveryProviderInfoScreen}
/>
{/* Issuing PID */}
<Stack.Screen
name={ITW_ROUTES.ISSUING.PID_AUTH_INFO}
name={ITW_ROUTES.ISSUING.PID.AUTH_INFO}
component={ItwPidAuthInfoScreen}
/>
<Stack.Screen
name={ITW_ROUTES.ISSUING.PID_REQUEST}
name={ITW_ROUTES.ISSUING.PID.REQUEST}
component={ItwPidRequestScreen}
/>
<Stack.Screen
name={ITW_ROUTES.ISSUING.PID_PREVIEW}
name={ITW_ROUTES.ISSUING.PID.PREVIEW}
component={ItwPidPreviewScreen}
/>
<Stack.Screen
name={ITW_ROUTES.ISSUING.PID_ADDING}
name={ITW_ROUTES.ISSUING.PID.ADDING}
component={ItwPidAddingScreen}
/>
{/* PRESENTATION PID DETAILS */}

{/* ISSUING CREDENTIAL */}
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.PID_DETAILS}
component={ItwCredentialDetails}
name={ITW_ROUTES.ISSUING.CREDENTIAL.CATALOG}
component={ItwCredentialCatalogScreen}
/>
{/* CREDENTIAL PRESENTATION */}
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.CROSS_DEVICE.CHECKS}
component={ItwPresentationChecksScreen}
name={ITW_ROUTES.ISSUING.CREDENTIAL.CHECKS}
component={ItwCredentialsChecksScreen}
/>
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.CROSS_DEVICE.DATA_NEW}
component={ItwPresentationDataScreen}
name={ITW_ROUTES.ISSUING.CREDENTIAL.AUTH}
component={ItwCredentialAuthScreen}
/>
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.CROSS_DEVICE.RESULT_NEW}
component={ItwPresentationResultScreen}
name={ITW_ROUTES.ISSUING.CREDENTIAL.PREVIEW}
component={ItwCredentialPreviewScreen}
/>

{/* PRESENTATION PID */}
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.PID.DETAILS}
component={ItwPidDetails}
/>
{/** PID PRESENTATION */}
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.CROSS_DEVICE.INIT}
name={ITW_ROUTES.PRESENTATION.PID.REMOTE.CHECKS}
component={ItwRpInitScreen}
/>
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.CROSS_DEVICE.DATA}
name={ITW_ROUTES.PRESENTATION.PID.REMOTE.DATA}
component={ItwPidPresentationDataScreen}
/>
<Stack.Screen
name={ITW_ROUTES.PRESENTATION.CROSS_DEVICE.RESULT}
name={ITW_ROUTES.PRESENTATION.PID.REMOTE.RESULT}
component={ItwPresentationScreen}
/>
{/* CREDENTIAL ISSUING */}
<Stack.Screen
name={ITW_ROUTES.CREDENTIAL.ISSUING.CATALOG}
component={ItwCredentialCatalogScreen}
/>

{/* CREDENTIAL PRESENTATION */}
<Stack.Screen
name={ITW_ROUTES.CREDENTIAL.ISSUING.CHECKS}
component={ItwCredentialsChecksScreen}
name={ITW_ROUTES.PRESENTATION.CREDENTIAL.DETAILS}
component={ItwCredentialDetailsScreen}
/>
<Stack.Screen
name={ITW_ROUTES.CREDENTIAL.ISSUING.AUTH}
component={ItwCredentialAuthScreen}
name={ITW_ROUTES.PRESENTATION.CREDENTIAL.REMOTE.CHECKS}
component={ItwPresentationChecksScreen}
/>
<Stack.Screen
name={ITW_ROUTES.CREDENTIAL.ISSUING.PREVIEW}
component={ItwCredentialPreviewScreen}
name={ITW_ROUTES.PRESENTATION.CREDENTIAL.REMOTE.DATA}
component={ItwPresentationDataScreen}
/>
{/* CREDENTIAL PRESENTATION */}
<Stack.Screen
name={ITW_ROUTES.CREDENTIAL.PRESENTATION.CREDENTIAL_DETAILS}
component={ItwCredentialDetailsScreen}
name={ITW_ROUTES.PRESENTATION.CREDENTIAL.REMOTE.RESULT}
component={ItwPresentationResultScreen}
/>
{/* COMMON */}

{/* GENERIC */}
<Stack.Screen
name={ITW_ROUTES.GENERIC.NOT_AVAILABLE}
component={ItwMissingFeatureScreen}
Expand Down
2 changes: 1 addition & 1 deletion ts/features/it-wallet/saga/itwActivationSaga.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export function* handleActivationStart(): SagaIterator {
yield* call(
NavigationService.dispatchNavigationAction,
CommonActions.navigate(ITW_ROUTES.MAIN, {
screen: ITW_ROUTES.DISCOVERY.INFO
screen: ITW_ROUTES.ISSUING.PID.INFO
})
);
yield* call(handleStartAuthenticationSaga);
Expand Down
Loading

0 comments on commit e5bd9e1

Please sign in to comment.