Skip to content

Commit

Permalink
feat(IT Wallet): [SIW-1993] Create scaffold for remote presentation m…
Browse files Browse the repository at this point in the history
…achine (#6649)

## Short description
This PR introduces a scaffold for the remote presentation machine

## List of changes proposed in this pull request
- Created the initial structure for the remote presentation machine
under the following folders: `features/itwallet/presentation/remote`.
- Defined `types` and `enums` for handling failures
- Set up the initial states of the machine (`Idle` and `Failure`)
- Created `RemotePresentationEvents` and an initial context for the
remote presentation machine
- Moved files under `features/itwallet/presentation` into
`features/itwallet/presentation/details`

## How to test
Since this PR serves as a scaffold for the remote presentation machine
and includes a refactoring of the `features/itwallet/presentation`
folder, everything should function as before. However, there is
currently no new functionality to test.
  • Loading branch information
RiccardoMolinari95 authored Jan 31, 2025
1 parent bf82569 commit 66e44b8
Show file tree
Hide file tree
Showing 33 changed files with 293 additions and 157 deletions.
6 changes: 3 additions & 3 deletions ts/features/itwallet/navigation/ItwParamsList.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { ItwIdentificationModeSelectionScreenNavigationParams } from "../identification/screens/ItwIdentificationModeSelectionScreen";
import { ItwCieWrongCiePinScreenNavigationParams } from "../identification/screens/cie/ItwCieWrongCiePinScreen";
import { ItwIssuanceCredentialAsyncContinuationNavigationParams } from "../issuance/screens/ItwIssuanceCredentialAsyncContinuationScreen";
import { ItwPresentationCredentialAttachmentNavigationParams } from "../presentation/screens/ItwPresentationCredentialAttachmentScreen";
import { ItwPresentationCredentialCardModalNavigationParams } from "../presentation/screens/ItwPresentationCredentialCardModal";
import { ItwPresentationCredentialDetailNavigationParams } from "../presentation/screens/ItwPresentationCredentialDetailScreen";
import { ItwPresentationCredentialAttachmentNavigationParams } from "../presentation/details/screens/ItwPresentationCredentialAttachmentScreen";
import { ItwPresentationCredentialCardModalNavigationParams } from "../presentation/details/screens/ItwPresentationCredentialCardModal";
import { ItwPresentationCredentialDetailNavigationParams } from "../presentation/details/screens/ItwPresentationCredentialDetailScreen";
import { ItwCredentialTrustmarkScreenNavigationParams } from "../trustmark/screens/ItwCredentialTrustmarkScreen";
import { ITW_ROUTES } from "./routes";

Expand Down
10 changes: 5 additions & 5 deletions ts/features/itwallet/navigation/ItwStackNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,17 @@ import {
} from "../machine/provider";
import { WalletCardOnboardingScreen } from "../onboarding/screens/WalletCardOnboardingScreen";
import ItwPlayground from "../playgrounds/screens/ItwPlayground";
import { ItwPresentationCredentialAttachmentScreen } from "../presentation/screens/ItwPresentationCredentialAttachmentScreen";
import { ItwPresentationCredentialCardModal } from "../presentation/screens/ItwPresentationCredentialCardModal";
import { ItwPresentationCredentialDetailScreen } from "../presentation/screens/ItwPresentationCredentialDetailScreen";
import { ItwPresentationCredentialAttachmentScreen } from "../presentation/details/screens/ItwPresentationCredentialAttachmentScreen";
import { ItwPresentationCredentialCardModal } from "../presentation/details/screens/ItwPresentationCredentialCardModal";
import { ItwPresentationCredentialDetailScreen } from "../presentation/details/screens/ItwPresentationCredentialDetailScreen";
import { ItwIssuanceCredentialAsyncContinuationScreen } from "../issuance/screens/ItwIssuanceCredentialAsyncContinuationScreen";
import ItwIpzsPrivacyScreen from "../discovery/screens/ItwIpzsPrivacyScreen";
import ItwSpidIdpLoginScreen from "../identification/screens/spid/ItwSpidIdpLoginScreen";
import ItwCieIdLoginScreen from "../identification/screens/cieId/ItwCieIdLoginScreen";
import { ItwPresentationCredentialFiscalCodeModal } from "../presentation/screens/ItwPresentationCredentialFiscalCodeModal";
import { ItwPresentationCredentialFiscalCodeModal } from "../presentation/details/screens/ItwPresentationCredentialFiscalCodeModal";
import { ItwCredentialTrustmarkScreen } from "../trustmark/screens/ItwCredentialTrustmarkScreen";
import { ItwAlreadyActiveScreen } from "../discovery/screens/ItwAlreadyActiveScreen";
import { ItwPresentationEidVerificationExpiredScreen } from "../presentation/screens/ItwPresentationEidVerificationExpiredScreen";
import { ItwPresentationEidVerificationExpiredScreen } from "../presentation/details/screens/ItwPresentationEidVerificationExpiredScreen";
import { ItwParamsList } from "./ItwParamsList";
import { ITW_ROUTES } from "./routes";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ItwSkeumorphicCard } from "../../common/components/ItwSkeumorphicCard";
import { FlipGestureDetector } from "../../common/components/ItwSkeumorphicCard/FlipGestureDetector";
import { ItwStoredCredentialsMocks } from "../../common/utils/itwMocksUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { ItwPresentationCredentialCardFlipButton } from "../../presentation/components/ItwPresentationCredentialCardFlipButton";
import { ItwPresentationCredentialCardFlipButton } from "../../presentation/details/components/ItwPresentationCredentialCardFlipButton";
import { getCredentialStatusObject } from "../../common/utils/itwCredentialStatusUtils";
import { useIONavigation } from "../../../../navigation/params/AppParamsList";
import { ITW_ROUTES } from "../../navigation/routes";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { memo } from "react";
import { CredentialType } from "../../common/utils/itwMocksUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { ItwPresentationFiscalCode } from "./ItwPresentationFiscalCode";
import { CredentialType } from "../../../common/utils/itwMocksUtils.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";
import { ItwPresentationFiscalCode } from "./ItwPresentationFiscalCode.tsx";

type Props = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ import {
} from "@pagopa/io-app-design-system";
import { Fragment, useMemo, useState } from "react";
import { View } from "react-native";
import I18n from "../../../../i18n";
import { ItwCredentialClaim } from "../../common/components/ItwCredentialClaim";
import { ItwIssuanceMetadata } from "../../common/components/ItwIssuanceMetadata";
import { ItwQrCodeClaimImage } from "../../common/components/ItwQrCodeClaimImage";
import { parseClaims, WellKnownClaim } from "../../common/utils/itwClaimsUtils";
import { getCredentialStatus } from "../../common/utils/itwCredentialStatusUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import I18n from "../../../../../i18n.ts";
import { ItwCredentialClaim } from "../../../common/components/ItwCredentialClaim.tsx";
import { ItwIssuanceMetadata } from "../../../common/components/ItwIssuanceMetadata.tsx";
import { ItwQrCodeClaimImage } from "../../../common/components/ItwQrCodeClaimImage.tsx";
import {
parseClaims,
WellKnownClaim
} from "../../../common/utils/itwClaimsUtils.ts";
import { getCredentialStatus } from "../../../common/utils/itwCredentialStatusUtils.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";

type ItwPresentationClaimsSectionProps = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ import { IOSpacingScale, VStack } from "@pagopa/io-app-design-system";

import { PropsWithChildren, useCallback, useState } from "react";
import { StyleSheet, View } from "react-native";
import { useIONavigation } from "../../../../navigation/params/AppParamsList";
import { useIOSelector } from "../../../../store/hooks";
import { CREDENTIALS_MAP, trackWalletShowBack } from "../../analytics";
import { ItwSkeumorphicCard } from "../../common/components/ItwSkeumorphicCard";
import { FlipGestureDetector } from "../../common/components/ItwSkeumorphicCard/FlipGestureDetector";
import { getThemeColorByCredentialType } from "../../common/utils/itwStyleUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { itwCredentialStatusSelector } from "../../credentials/store/selectors";
import { ITW_ROUTES } from "../../navigation/routes";
import { ItwPresentationCredentialCardFlipButton } from "./ItwPresentationCredentialCardFlipButton";
import { useIONavigation } from "../../../../../navigation/params/AppParamsList.ts";
import { useIOSelector } from "../../../../../store/hooks.ts";
import { CREDENTIALS_MAP, trackWalletShowBack } from "../../../analytics";
import { ItwSkeumorphicCard } from "../../../common/components/ItwSkeumorphicCard";
import { FlipGestureDetector } from "../../../common/components/ItwSkeumorphicCard/FlipGestureDetector.tsx";
import { getThemeColorByCredentialType } from "../../../common/utils/itwStyleUtils.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";
import { itwCredentialStatusSelector } from "../../../credentials/store/selectors";
import { ITW_ROUTES } from "../../../navigation/routes.ts";
import { ItwPresentationCredentialCardFlipButton } from "./ItwPresentationCredentialCardFlipButton.tsx";

type Props = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ButtonLink } from "@pagopa/io-app-design-system";
import { memo } from "react";
import { StyleSheet, View } from "react-native";
import I18n from "../../../../i18n";
import I18n from "../../../../../i18n.ts";

type ItwPresentationCredentialCardFlipButtonProps = {
isFlipped: boolean;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { memo } from "react";
import { Alert } from "@pagopa/io-app-design-system";
import I18n from "../../../../i18n";
import { useIOSelector } from "../../../../store/hooks";
import { itwCredentialStatusSelector } from "../../credentials/store/selectors";
import { CredentialType } from "../../common/utils/itwMocksUtils";
import I18n from "../../../../../i18n.ts";
import { useIOSelector } from "../../../../../store/hooks.ts";
import { itwCredentialStatusSelector } from "../../../credentials/store/selectors";
import { CredentialType } from "../../../common/utils/itwMocksUtils.ts";
import {
ItwCredentialStatus,
StoredCredential
} from "../../common/utils/itwTypesUtils";
} from "../../../common/utils/itwTypesUtils.ts";

type Props = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { memo } from "react";
import { Alert, Body } from "@pagopa/io-app-design-system";
import I18n from "../../../../i18n";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import I18n from "../../../../../i18n.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";
import {
getClaimsFullLocale,
getCredentialExpireDays
} from "../../common/utils/itwClaimsUtils";
import { useIOBottomSheetAutoresizableModal } from "../../../../utils/hooks/bottomSheet";
import { useIOSelector } from "../../../../store/hooks";
import { itwCredentialStatusSelector } from "../../credentials/store/selectors";
import { format } from "../../../../utils/dates";
import { ItwCredentialIssuanceMachineContext } from "../../machine/provider";
import IOMarkdown from "../../../../components/IOMarkdown";
import { type CredentialType } from "../../common/utils/itwMocksUtils";
} from "../../../common/utils/itwClaimsUtils.ts";
import { useIOBottomSheetAutoresizableModal } from "../../../../../utils/hooks/bottomSheet.tsx";
import { useIOSelector } from "../../../../../store/hooks.ts";
import { itwCredentialStatusSelector } from "../../../credentials/store/selectors";
import { format } from "../../../../../utils/dates.ts";
import { ItwCredentialIssuanceMachineContext } from "../../../machine/provider.tsx";
import IOMarkdown from "../../../../../components/IOMarkdown";
import { type CredentialType } from "../../../common/utils/itwMocksUtils.ts";

type Props = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { OperationResultScreenContent } from "../../../../components/screens/OperationResultScreenContent";
import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel";
import I18n from "../../../../i18n";
import { useIONavigation } from "../../../../navigation/params/AppParamsList";
import { getCredentialNameFromType } from "../../common/utils/itwCredentialUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { OperationResultScreenContent } from "../../../../../components/screens/OperationResultScreenContent.tsx";
import { useHeaderSecondLevel } from "../../../../../hooks/useHeaderSecondLevel.tsx";
import I18n from "../../../../../i18n.ts";
import { useIONavigation } from "../../../../../navigation/params/AppParamsList.ts";
import { getCredentialNameFromType } from "../../../common/utils/itwCredentialUtils.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";

type Props = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { OperationResultScreenContent } from "../../../../components/screens/OperationResultScreenContent";
import I18n from "../../../../i18n";
import { getCredentialNameFromType } from "../../common/utils/itwCredentialUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { ItwCredentialIssuanceMachineContext } from "../../machine/provider";
import { useIONavigation } from "../../../../navigation/params/AppParamsList";
import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel";
import { OperationResultScreenContent } from "../../../../../components/screens/OperationResultScreenContent.tsx";
import I18n from "../../../../../i18n.ts";
import { getCredentialNameFromType } from "../../../common/utils/itwCredentialUtils.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";
import { ItwCredentialIssuanceMachineContext } from "../../../machine/provider.tsx";
import { useIONavigation } from "../../../../../navigation/params/AppParamsList.ts";
import { useHeaderSecondLevel } from "../../../../../hooks/useHeaderSecondLevel.tsx";

type Props = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import { ListItemAction, useIOToast } from "@pagopa/io-app-design-system";
import { memo, ReactNode, useMemo } from "react";
import { Alert, View } from "react-native";
import { useStartSupportRequest } from "../../../../hooks/useStartSupportRequest";
import I18n from "../../../../i18n";
import NavigationService from "../../../../navigation/NavigationService";
import { useIONavigation } from "../../../../navigation/params/AppParamsList";
import { useStartSupportRequest } from "../../../../../hooks/useStartSupportRequest.ts";
import I18n from "../../../../../i18n.ts";
import NavigationService from "../../../../../navigation/NavigationService.ts";
import { useIONavigation } from "../../../../../navigation/params/AppParamsList.ts";
import {
useIODispatch,
useIOSelector,
useIOStore
} from "../../../../store/hooks";
import { FIMS_ROUTES } from "../../../fims/common/navigation";
} from "../../../../../store/hooks.ts";
import { FIMS_ROUTES } from "../../../../fims/common/navigation";
import {
CREDENTIALS_MAP,
trackCredentialDeleteProperties,
trackItwCredentialDelete,
trackWalletCredentialSupport
} from "../../analytics";
import { itwIPatenteCtaConfigSelector } from "../../common/store/selectors/remoteConfig";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { itwCredentialsRemove } from "../../credentials/store/actions";
import { trackAuthenticationStart } from "../../../fims/common/analytics";
import { ServiceId } from "../../../../../definitions/backend/ServiceId";
} from "../../../analytics";
import { itwIPatenteCtaConfigSelector } from "../../../common/store/selectors/remoteConfig.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";
import { itwCredentialsRemove } from "../../../credentials/store/actions";
import { trackAuthenticationStart } from "../../../../fims/common/analytics";
import { ServiceId } from "../../../../../../definitions/backend/ServiceId.ts";

type ItwPresentationDetailFooterProps = {
credential: StoredCredential;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import {
} from "@pagopa/io-app-design-system";
import { useMemo, memo } from "react";
import { StyleSheet, Text, View } from "react-native";
import FocusAwareStatusBar from "../../../../components/ui/FocusAwareStatusBar";
import { getCredentialNameFromType } from "../../common/utils/itwCredentialUtils";
import { CredentialType } from "../../common/utils/itwMocksUtils";
import { getThemeColorByCredentialType } from "../../common/utils/itwStyleUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { ItwPresentationCredentialCard } from "./ItwPresentationCredentialCard";
import FocusAwareStatusBar from "../../../../../components/ui/FocusAwareStatusBar.tsx";
import { getCredentialNameFromType } from "../../../common/utils/itwCredentialUtils.ts";
import { CredentialType } from "../../../common/utils/itwMocksUtils.ts";
import { getThemeColorByCredentialType } from "../../../common/utils/itwStyleUtils.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";
import { ItwPresentationCredentialCard } from "./ItwPresentationCredentialCard.tsx";

type ItwPresentationDetailsHeaderProps = { credential: StoredCredential };

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import Animated, {
withTiming
} from "react-native-reanimated";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel";
import { getHeaderPropsByCredentialType } from "../../common/utils/itwStyleUtils";
import { StoredCredential } from "../../common/utils/itwTypesUtils";
import { useHeaderSecondLevel } from "../../../../../hooks/useHeaderSecondLevel.tsx";
import { getHeaderPropsByCredentialType } from "../../../common/utils/itwStyleUtils.ts";
import { StoredCredential } from "../../../common/utils/itwTypesUtils.ts";

export type CredentialCtaProps = Omit<ButtonSolidProps, "fullWidth">;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ import { memo } from "react";
import { Dimensions, Pressable, StyleSheet } from "react-native";
import Barcode from "react-native-barcode-builder";
import Animated from "react-native-reanimated";
import I18n from "../../../../i18n";
import { useIONavigation } from "../../../../navigation/params/AppParamsList";
import { useIOSelector } from "../../../../store/hooks";
import { selectFiscalCodeFromEid } from "../../credentials/store/selectors";
import { ITW_ROUTES } from "../../navigation/routes";
import I18n from "../../../../../i18n.ts";
import { useIONavigation } from "../../../../../navigation/params/AppParamsList.ts";
import { useIOSelector } from "../../../../../store/hooks.ts";
import { selectFiscalCodeFromEid } from "../../../credentials/store/selectors";
import { ITW_ROUTES } from "../../../navigation/routes.ts";

/**
* This magic number is the lenght of the encoded fiscal code in a CODE39 barcode.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { fireEvent } from "@testing-library/react-native";
import { createStore } from "redux";
import { applicationChangeState } from "../../../../../store/actions/application";
import { appReducer } from "../../../../../store/reducers";
import { GlobalState } from "../../../../../store/reducers/types";
import { renderScreenWithNavigationStoreContext } from "../../../../../utils/testWrapper";
import { ItwStoredCredentialsMocks } from "../../../common/utils/itwMocksUtils";
import { ITW_ROUTES } from "../../../navigation/routes";
import { ItwPresentationClaimsSection } from "../ItwPresentationClaimsSection";
import { applicationChangeState } from "../../../../../../store/actions/application.ts";
import { appReducer } from "../../../../../../store/reducers";
import { GlobalState } from "../../../../../../store/reducers/types.ts";
import { renderScreenWithNavigationStoreContext } from "../../../../../../utils/testWrapper.tsx";
import { ItwStoredCredentialsMocks } from "../../../../common/utils/itwMocksUtils.ts";
import { ITW_ROUTES } from "../../../../navigation/routes.ts";
import { ItwPresentationClaimsSection } from "../ItwPresentationClaimsSection.tsx";

describe("ItwPresentationClaimsSection", () => {
it("should match the snapshot when claims are visible", () => {
Expand Down
Loading

0 comments on commit 66e44b8

Please sign in to comment.