From 6c076a1fee25c0a0853644d63aa894ff26854aa3 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Fri, 2 Feb 2024 16:54:48 +0100 Subject: [PATCH 001/190] fix: align podfile.lock io-react-native-zendesk version (#5483) ## Short description This PR is only to update Podfile.lock reference after PR #5468 --- ios/Podfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3e3269eef8a..6bcdadb7b5f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -544,7 +544,7 @@ PODS: - React-Core - RNSVG (12.3.0): - React-Core - - RNZendeskChat (0.3.23): + - RNZendeskChat (0.3.28): - React - ZendeskAnswerBotSDK (~> 3.0.0) - ZendeskChatSDK (~> 3.0.0) @@ -690,7 +690,7 @@ DEPENDENCIES: - RNSha256 (from `../node_modules/react-native-sha256`) - RNShare (from `../node_modules/react-native-share`) - RNSVG (from `../node_modules/react-native-svg`) - - RNZendeskChat (from `../node_modules/io-react-native-zendesk`) + - "RNZendeskChat (from `../node_modules/@pagopa/io-react-native-zendesk`)" - vision-camera-code-scanner (from `../node_modules/vision-camera-code-scanner`) - VisionCamera (from `../node_modules/react-native-vision-camera`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -897,7 +897,7 @@ EXTERNAL SOURCES: RNSVG: :path: "../node_modules/react-native-svg" RNZendeskChat: - :path: "../node_modules/io-react-native-zendesk" + :path: "../node_modules/@pagopa/io-react-native-zendesk" vision-camera-code-scanner: :path: "../node_modules/vision-camera-code-scanner" VisionCamera: @@ -1011,7 +1011,7 @@ SPEC CHECKSUMS: RNSha256: ab608b2185fb806185a2cc112e0474065842e085 RNShare: 807d6f8231b8ebcf6dd839294b877342eb93d4e5 RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8 - RNZendeskChat: 338c369def4e1552a533d9d34155b4b491aaf3d7 + RNZendeskChat: 10c0a1f6a97665eab8319b4d543535a8ac199944 SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 vision-camera-code-scanner: dda884a7f3ec8243a2a6d6489b91860648371bca VisionCamera: 5fc30ecebdfd0335d11123ec9511dcbc27ee4046 From e34d79db5afdb45c5c91247c70afc54f911534aa Mon Sep 17 00:00:00 2001 From: Mario Perrotta Date: Sat, 3 Feb 2024 10:47:48 +0100 Subject: [PATCH 002/190] feat(Firma con IO): [SFEQS-2071] Update `Firma con IO` with new DS components (#5377) ## Short description This PR updates the signing flow with DS components. Also updates the signing flow with new `HeaderSecondLevel` removing `BaseScreenComponent/TopScreenComponent`. https://github.com/pagopa/io-app/assets/49342144/b6fa8e23-0849-4bd8-a84e-42f664f5296f ## List of changes proposed in this pull request - Update all screens/components with new DS - Update tests ## How to test Start a signing flow with `io-dev-api-server`. Try the flow with DS toggle enabled and disabled. Also a test with production env is required. --------- Co-authored-by: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> --- ts/features/fci/components/DocumentViewer.tsx | 152 ++--- .../fci/components/DocumentWithSignature.tsx | 109 ++-- .../fci/components/DocumentsNavigationBar.tsx | 69 +- ts/features/fci/components/ErrorComponent.tsx | 122 ++-- .../fci/components/InfoScreenComponent.tsx | 9 +- ts/features/fci/components/LinkedText.tsx | 16 +- .../fci/components/LoadingComponent.tsx | 56 ++ .../fci/components/QtspClauseListItem.tsx | 41 +- .../fci/components/SignatureFieldItem.tsx | 65 +- .../fci/components/SignatureRequestItem.tsx | 35 +- .../__tests__/DocumentsNavigationBar.test.tsx | 11 +- .../__tests__/LoadingComponent.test.tsx | 47 ++ .../__tests__/QtspClauseListItem.test.tsx | 19 +- .../__tests__/SignatureFieldItem.test.tsx | 44 +- .../DocumentsNavigationBar.test.tsx.snap | 348 +++++----- .../__snapshots__/LinkedText.test.tsx.snap | 208 +++--- .../LoadingComponent.test.tsx.snap | 245 +++++++ .../QtspClauseListItem.test.tsx.snap | 605 ++++++++++++++++++ .../SignatureFieldItem.test.tsx.snap | 261 +++++--- .../fci/hooks/useFciAbortSignatureFlow.tsx | 78 ++- ts/features/fci/hooks/useFciCheckService.tsx | 113 ++-- .../fci/hooks/useFciNoSignatureFields.tsx | 108 ++-- .../fci/navigation/FciStackNavigator.tsx | 18 +- ts/features/fci/screens/FciRouterScreen.tsx | 23 +- .../__tests__/FciDocumentsScreen.test.tsx | 16 +- .../__tests__/FciThankyouScreen.test.tsx | 3 +- .../screens/valid/FciDataSharingScreen.tsx | 239 +++---- .../valid/FciDocumentPreviewScreen.tsx | 34 +- .../fci/screens/valid/FciDocumentsScreen.tsx | 156 ++--- .../screens/valid/FciQtspClausesScreen.tsx | 90 ++- .../valid/FciSignatureFieldsScreen.tsx | 80 +-- .../valid/FciSignatureRequestsScreen.tsx | 33 +- .../fci/screens/valid/FciThankyouScreen.tsx | 86 +-- 33 files changed, 2287 insertions(+), 1252 deletions(-) create mode 100644 ts/features/fci/components/LoadingComponent.tsx create mode 100644 ts/features/fci/components/__tests__/LoadingComponent.test.tsx create mode 100644 ts/features/fci/components/__tests__/__snapshots__/LoadingComponent.test.tsx.snap create mode 100644 ts/features/fci/components/__tests__/__snapshots__/QtspClauseListItem.test.tsx.snap diff --git a/ts/features/fci/components/DocumentViewer.tsx b/ts/features/fci/components/DocumentViewer.tsx index 14b23cdf843..3849c990f87 100644 --- a/ts/features/fci/components/DocumentViewer.tsx +++ b/ts/features/fci/components/DocumentViewer.tsx @@ -1,17 +1,18 @@ import React, { useState } from "react"; import { StyleSheet } from "react-native"; -import { constNull } from "fp-ts/lib/function"; import * as pot from "@pagopa/ts-commons/lib/pot"; import ReactNativeBlobUtil from "react-native-blob-util"; import Pdf from "react-native-pdf"; import * as S from "fp-ts/lib/string"; -import { IOColors } from "@pagopa/io-app-design-system"; -import FooterWithButtons from "../../../components/ui/FooterWithButtons"; +import { + ButtonSolidProps, + FooterWithButtons, + IOColors +} from "@pagopa/io-app-design-system"; import I18n from "../../../i18n"; import { isIos } from "../../../utils/platform"; import { share } from "../../../utils/share"; import { showToast } from "../../../utils/showToast"; -import { confirmButtonProps } from "../../../components/buttons/ButtonConfigurations"; import { FciDownloadPreviewDirectoryPath } from "../saga/networking/handleDownloadDocument"; import { useIODispatch, useIOSelector } from "../../../store/hooks"; import { fciDownloadPreview } from "../store/actions"; @@ -19,7 +20,7 @@ import { fciDownloadPathSelector, fciDownloadPreviewSelector } from "../store/reducers/fciDownloadPreview"; -import { LoadingErrorComponent } from "../../../components/LoadingErrorComponent"; +import LoadingComponent from "./LoadingComponent"; const styles = StyleSheet.create({ pdf: { @@ -31,72 +32,88 @@ const styles = StyleSheet.create({ export const getFileNameFromUrl = (url: string) => url.substring(url.lastIndexOf("/") + 1).split("?")[0] + ".pdf"; -const renderFooter = (url: string, filePath: string) => - isIos ? ( +const renderFooter = (url: string, filePath: string) => { + const confirmButtonProps: ButtonSolidProps = { + onPress: () => ReactNativeBlobUtil.ios.presentOptionsMenu(filePath), + label: I18n.t("messagePDFPreview.open"), + accessibilityLabel: I18n.t("messagePDFPreview.open") + }; + + const shareButtonProps: ButtonSolidProps = { + onPress: () => { + share( + `file://${ + FciDownloadPreviewDirectoryPath + "/" + getFileNameFromUrl(url) + }`, + undefined, + false + )().catch(_ => { + showToast(I18n.t("messagePDFPreview.errors.sharing")); + }); + }, + label: I18n.t("global.buttons.share"), + accessibilityLabel: I18n.t("global.buttons.share") + }; + + const saveButtonProps: ButtonSolidProps = { + onPress: () => { + ReactNativeBlobUtil.MediaCollection.copyToMediaStore( + { + name: getFileNameFromUrl(url), + parentFolder: "", + mimeType: "application/pdf" + }, + "Download", + FciDownloadPreviewDirectoryPath + "/" + getFileNameFromUrl(url) + ) + .then(_ => { + showToast( + I18n.t("messagePDFPreview.savedAtLocation", { + name: "attachment.displayName" + }), + "success" + ); + }) + .catch(_ => { + showToast(I18n.t("messagePDFPreview.errors.saving")); + }); + }, + label: I18n.t("messagePDFPreview.save"), + accessibilityLabel: I18n.t("messagePDFPreview.save") + }; + + const openButtonProps: ButtonSolidProps = { + onPress: () => { + ReactNativeBlobUtil.android + .actionViewIntent( + FciDownloadPreviewDirectoryPath + "/" + getFileNameFromUrl(url), + "application/pdf" + ) + .catch(_ => { + showToast(I18n.t("messagePDFPreview.errors.opening")); + }); + }, + label: I18n.t("messagePDFPreview.open"), + accessibilityLabel: I18n.t("messagePDFPreview.open") + }; + + return isIos ? ( { - ReactNativeBlobUtil.ios.presentOptionsMenu(filePath); - }, I18n.t("messagePDFPreview.open"))} + primary={{ type: "Solid", buttonProps: confirmButtonProps }} /> ) : ( { - share( - `file://${ - FciDownloadPreviewDirectoryPath + "/" + getFileNameFromUrl(url) - }`, - undefined, - false - )().catch(_ => { - showToast(I18n.t("messagePDFPreview.errors.sharing")); - }); - }, - title: I18n.t("global.buttons.share") - }} - midButton={{ - bordered: true, - primary: false, - onPress: () => { - ReactNativeBlobUtil.MediaCollection.copyToMediaStore( - { - name: getFileNameFromUrl(url), - parentFolder: "", - mimeType: "application/pdf" - }, - "Download", - FciDownloadPreviewDirectoryPath + "/" + getFileNameFromUrl(url) - ) - .then(_ => { - showToast( - I18n.t("messagePDFPreview.savedAtLocation", { - name: "attachment.displayName" - }), - "success" - ); - }) - .catch(_ => { - showToast(I18n.t("messagePDFPreview.errors.saving")); - }); - }, - title: I18n.t("messagePDFPreview.save") + primary={{ + type: "Solid", + buttonProps: shareButtonProps }} - rightButton={confirmButtonProps(() => { - ReactNativeBlobUtil.android - .actionViewIntent( - FciDownloadPreviewDirectoryPath + "/" + getFileNameFromUrl(url), - "application/pdf" - ) - .catch(_ => { - showToast(I18n.t("messagePDFPreview.errors.opening")); - }); - }, I18n.t("messagePDFPreview.open"))} + secondary={{ type: "Outline", buttonProps: saveButtonProps }} + third={{ type: "Outline", buttonProps: openButtonProps }} /> ); +}; type Props = { documentUrl: string; @@ -106,15 +123,6 @@ type Props = { onError: () => void; }; -const LoadingComponent = () => ( - -); - export const DocumentViewer = (props: Props): React.ReactElement => { const [isError, setIsError] = useState(false); const documentUrl = props.documentUrl; @@ -128,7 +136,7 @@ export const DocumentViewer = (props: Props): React.ReactElement => { }, [documentUrl, dispatch]); if (pot.isLoading(fciDownloadSelector)) { - return ; + return ; } if (pot.isError(fciDownloadSelector) || isError) { diff --git a/ts/features/fci/components/DocumentWithSignature.tsx b/ts/features/fci/components/DocumentWithSignature.tsx index 4560d707252..5214362d136 100644 --- a/ts/features/fci/components/DocumentWithSignature.tsx +++ b/ts/features/fci/components/DocumentWithSignature.tsx @@ -1,26 +1,31 @@ import * as React from "react"; import Pdf from "react-native-pdf"; -import { Body, Container, Left, Right } from "native-base"; import { constNull, pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { SafeAreaView, StyleSheet } from "react-native"; -import { IconButton, IOColors } from "@pagopa/io-app-design-system"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; -import FooterWithButtons from "../../../components/ui/FooterWithButtons"; +import { StyleSheet, View } from "react-native"; +import { + ButtonSolidProps, + FooterWithButtons, + H5, + HSpacer, + IconButton, + IOColors, + IOStyles, + VSpacer +} from "@pagopa/io-app-design-system"; +import { SafeAreaView } from "react-native-safe-area-context"; import I18n from "../../../i18n"; import { ExistingSignatureFieldAttrs } from "../../../../definitions/fci/ExistingSignatureFieldAttrs"; import { SignatureFieldToBeCreatedAttrs } from "../../../../definitions/fci/SignatureFieldToBeCreatedAttrs"; import { fciSignatureDetailDocumentsSelector } from "../store/reducers/fciSignatureRequest"; -import AppHeader from "../../../components/ui/AppHeader"; import { useIODispatch, useIOSelector } from "../../../store/hooks"; import { WithTestID } from "../../../types/WithTestID"; -import { H5 } from "../../../components/core/typography/H5"; import { useOnFirstRender } from "../../../utils/hooks/useOnFirstRender"; import { fciDocumentSignatureFields } from "../store/actions"; import { fciSignatureFieldDrawingSelector } from "../store/reducers/fciSignatureFieldDrawing"; -import LoadingSpinnerOverlay from "../../../components/LoadingSpinnerOverlay"; import DocumentsNavigationBar from "./DocumentsNavigationBar"; +import LoadingComponent from "./LoadingComponent"; export type SignatureFieldAttrType = | ExistingSignatureFieldAttrs @@ -37,6 +42,14 @@ const styles = StyleSheet.create({ pdf: { flex: 1, backgroundColor: IOColors.bluegrey + }, + header: { + alignItems: "center", + flexDirection: "row" + }, + headerTitle: { + flex: 1, + textAlign: "center" } }); @@ -49,11 +62,12 @@ const DocumentWithSignature = (props: Props) => { const { attrs, currentDoc } = props; const dispatch = useIODispatch(); const onContinuePress = () => props.onClose(); - const continueButtonProps = { - block: true, - primary: true, + const continueButtonProps: ButtonSolidProps = { onPress: onContinuePress, - title: I18n.t("features.fci.documents.footer.backToSignFieldsList") + label: I18n.t("features.fci.documents.footer.backToSignFieldsList"), + accessibilityLabel: I18n.t( + "features.fci.documents.footer.backToSignFieldsList" + ) }; /** @@ -139,12 +153,6 @@ const DocumentWithSignature = (props: Props) => { ); }; - /** - * Renders the loading spinner. - * @returns a loading spinner overlay - */ - const LoadingView = () => ; - /** * Callback to be used when the pdf cannot be loaded or the signature field cannot be drawn. * It returns an empty fragment and calls the `onError` callback. @@ -161,39 +169,40 @@ const DocumentWithSignature = (props: Props) => { () => pot.fold( parsedDocuments, - () => , - () => , - () => , + () => , + () => , + () => , () => , some => ( ), - () => , - () => , + () => , + () => , () => ), [ErrorView, RenderPdf, parsedDocuments] ); return ( - - - - -
- {I18n.t("messagePDFPreview.title")} -
- - - - -
+ + + +
+ {I18n.t("messagePDFPreview.title")} +
+ +
+ { currentPage, totalPages })} - iconLeftColor={currentPage === 1 ? "bluegreyLight" : "blue"} - iconRightColor={currentPage === totalPages ? "bluegreyLight" : "blue"} + iconLeftDisabled={currentPage === 1} + iconRightDisabled={currentPage === totalPages} onPrevious={onPrevious} onNext={onNext} disabled={false} testID={"FciDocumentsNavBarTestID"} /> - - - - -
+ + + ); }; export default DocumentWithSignature; diff --git a/ts/features/fci/components/DocumentsNavigationBar.tsx b/ts/features/fci/components/DocumentsNavigationBar.tsx index 66c8bd7150e..cf7bdcb7c92 100644 --- a/ts/features/fci/components/DocumentsNavigationBar.tsx +++ b/ts/features/fci/components/DocumentsNavigationBar.tsx @@ -1,10 +1,13 @@ import * as React from "react"; import { View, StyleSheet } from "react-native"; -import { IOColors, Icon, HSpacer } from "@pagopa/io-app-design-system"; -import ButtonDefaultOpacity from "../../../components/ButtonDefaultOpacity"; -import { H4 } from "../../../components/core/typography/H4"; -import { WithTestID } from "../../../types/WithTestID"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; +import { + IOColors, + HSpacer, + H6, + IOStyles, + IconButton, + WithTestID +} from "@pagopa/io-app-design-system"; const styles = StyleSheet.create({ container: { @@ -13,13 +16,7 @@ const styles = StyleSheet.create({ borderColor: IOColors.bluegreyLight, alignItems: "center", paddingTop: 12, - paddingBottom: 12 - }, - button: { - paddingLeft: 8, - paddingRight: 8, - paddingBottom: 0, - paddingTop: 0 + paddingBottom: 14 }, shadow: { // iOS @@ -43,8 +40,8 @@ export type IndicatorPositionEnum = "left" | "right"; type Props = WithTestID<{ titleRight: string; titleLeft: string; - iconRightColor?: IOColors; - iconLeftColor?: IOColors; + iconRightDisabled?: boolean; + iconLeftDisabled?: boolean; disabled?: boolean; indicatorPosition: IndicatorPositionEnum; onPrevious: () => void; @@ -52,41 +49,29 @@ type Props = WithTestID<{ }>; const renderNavigationComponent = ( - { onPrevious, onNext, disabled, iconLeftColor, iconRightColor }: Props, + { onPrevious, onNext, iconLeftDisabled, iconRightDisabled }: Props, title: string ) => ( <> {/* button left */} - - - -

{title}

+ icon="chevronLeft" + iconSize={24} + accessibilityLabel="previous" + /> +
{title}
{/* button right */} - - - + icon="chevronRight" + iconSize={24} + accessibilityLabel="next" + /> ); @@ -101,13 +86,13 @@ const DocumentsNavigationBar = (props: Props) => ( <> {renderNavigationComponent(props, props.titleLeft)} -

{props.titleRight}

+
{props.titleRight}
)} {props.indicatorPosition === "right" && ( <> -

{props.titleLeft}

+
{props.titleLeft}
{renderNavigationComponent(props, props.titleRight)} diff --git a/ts/features/fci/components/ErrorComponent.tsx b/ts/features/fci/components/ErrorComponent.tsx index b73a2f6f181..15493ed117b 100644 --- a/ts/features/fci/components/ErrorComponent.tsx +++ b/ts/features/fci/components/ErrorComponent.tsx @@ -1,12 +1,22 @@ import * as React from "react"; -import { SafeAreaView } from "react-native"; +import { View } from "react-native"; import { EmailString } from "@pagopa/ts-commons/lib/strings"; -import { IOPictograms, Pictogram } from "@pagopa/io-app-design-system"; +import { + ButtonOutline, + ButtonSolid, + ButtonSolidProps, + IOPictograms, + IOSpacingScale, + IOStyles, + Pictogram, + VSpacer +} from "@pagopa/io-app-design-system"; +import { + SafeAreaView, + useSafeAreaInsets +} from "react-native-safe-area-context"; import I18n from "../../../i18n"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; import { WithTestID } from "../../../types/WithTestID"; -import { FooterStackButton } from "../../../components/buttons/FooterStackButtons"; import { addTicketCustomField, assistanceToolRemoteConfig, @@ -35,11 +45,14 @@ export type Props = WithTestID<{ onPress: () => void; }>; +const DEFAULT_BOTTOM_PADDING: IOSpacingScale = 20; + const ErrorComponent = (props: Props) => { const dispatch = useIODispatch(); const signatureRequestId = useIOSelector(fciSignatureRequestIdSelector); const assistanceToolConfig = useIOSelector(assistanceToolConfigSelector); const choosenTool = assistanceToolRemoteConfig(assistanceToolConfig); + const insets = useSafeAreaInsets(); const zendeskAssistanceLogAndStart = () => { resetCustomFields(); @@ -64,63 +77,92 @@ const ErrorComponent = (props: Props) => { } }; - const retryButtonProps = { + const retryButtonProps: ButtonSolidProps = { testID: "FciRetryButtonTestID", - block: true, - primary: true, onPress: props.onPress, - title: I18n.t("features.fci.errors.buttons.retry") + fullWidth: true, + label: I18n.t("features.fci.errors.buttons.retry"), + accessibilityLabel: I18n.t("features.fci.errors.buttons.retry") }; - const closeButtonProps = { + const closeButtonProps: ButtonSolidProps = { testID: "FciCloseButtonTestID", - bordered: true, - block: true, onPress: props.onPress, - title: I18n.t("features.fci.errors.buttons.close") + fullWidth: true, + label: I18n.t("features.fci.errors.buttons.close"), + accessibilityLabel: I18n.t("features.fci.errors.buttons.close") }; - const assistanceButtonProps = { + const assistanceButtonProps: ButtonSolidProps = { testID: "FciAssistanceButtonTestID", - bordered: true, - primary: false, - block: true, + fullWidth: true, onPress: handleAskAssistance, - title: I18n.t("features.fci.errors.buttons.assistance") + label: I18n.t("features.fci.errors.buttons.assistance"), + accessibilityLabel: I18n.t("features.fci.errors.buttons.assistance") }; + /** + * Render the footer buttons as vertical stacked buttons + * @returns {React.ReactElement} + */ const footerButtons = () => { if (props.retry && props.assistance) { - return [retryButtonProps, assistanceButtonProps]; + return ( + <> + + + + + ); } if (props.retry) { - return [retryButtonProps, closeButtonProps]; + return ( + <> + + + + + ); } if (props.assistance) { - return [ - { - ...closeButtonProps, - bordered: false, - title: I18n.t("features.fci.errors.buttons.back") - }, - assistanceButtonProps - ]; + return ( + <> + + + + + ); } - return [closeButtonProps]; + return ; }; return ( - - - } - title={props.title} - body={props.subTitle} - email={props.email} - /> - - - + + } + title={props.title} + body={props.subTitle} + email={props.email} + /> + + {footerButtons()} + + ); }; diff --git a/ts/features/fci/components/InfoScreenComponent.tsx b/ts/features/fci/components/InfoScreenComponent.tsx index 74ad818934e..eee25b6785e 100644 --- a/ts/features/fci/components/InfoScreenComponent.tsx +++ b/ts/features/fci/components/InfoScreenComponent.tsx @@ -1,13 +1,10 @@ import * as React from "react"; import { Linking, StyleSheet, Text, View } from "react-native"; import { EmailString } from "@pagopa/ts-commons/lib/strings"; -import { VSpacer } from "@pagopa/io-app-design-system"; +import { Body, H2, LabelLink, VSpacer } from "@pagopa/io-app-design-system"; import { useFocusEffect } from "@react-navigation/native"; import themeVariables from "../../../theme/variables"; import { setAccessibilityFocus } from "../../../utils/accessibility"; -import { Body } from "../../../components/core/typography/Body"; -import { H2 } from "../../../components/core/typography/H2"; -import { Link } from "../../../components/core/typography/Link"; type Props = { image: React.ReactNode; @@ -38,9 +35,9 @@ const renderNode = (body: string | React.ReactNode, email?: EmailString) => { {email && <> } {email && ( - Linking.openURL(`mailto:${email}`)}> + Linking.openURL(`mailto:${email}`)}> {email} - + )} ); diff --git a/ts/features/fci/components/LinkedText.tsx b/ts/features/fci/components/LinkedText.tsx index 959b93acb0e..dcdcc524548 100644 --- a/ts/features/fci/components/LinkedText.tsx +++ b/ts/features/fci/components/LinkedText.tsx @@ -1,8 +1,6 @@ import * as React from "react"; import * as O from "fp-ts/lib/Option"; -import { H4 } from "../../../components/core/typography/H4"; -import { Link } from "../../../components/core/typography/Link"; -import { WithTestID } from "../../../types/WithTestID"; +import { H4, H6, LabelLink, WithTestID } from "@pagopa/io-app-design-system"; type Props = WithTestID<{ text: string; @@ -65,14 +63,14 @@ const LinkedText = (props: Props) => { const textToBeLinked = splitted[1]; const url = splitted[2]; return ( - onPress(getOrReplaceTagWithLink(url, props.replacementUrl)) } > {textToBeLinked} - + ); }; @@ -91,15 +89,15 @@ const LinkedText = (props: Props) => { {textWithSeparator.split("$@").map((text, index) => O.isSome(O.fromNullable(arrayOfLinkedText[index])) ? ( <> -

+

{text} -
+ {arrayOfLinkedText[index]} ) : ( -

+

{text} -
+ ) )} diff --git a/ts/features/fci/components/LoadingComponent.tsx b/ts/features/fci/components/LoadingComponent.tsx new file mode 100644 index 00000000000..b3958d6763a --- /dev/null +++ b/ts/features/fci/components/LoadingComponent.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { StyleSheet, View } from "react-native"; +import { + Body, + H3, + LoadingSpinner, + VSpacer, + WithTestID +} from "@pagopa/io-app-design-system"; +import customVariables from "../../../theme/variables"; + +const styles = StyleSheet.create({ + main: { + padding: customVariables.contentPadding, + flex: 1, + alignItems: "center", + justifyContent: "center" + }, + textAlignCenter: { + textAlign: "center" + } +}); + +type Props = WithTestID< + Readonly<{ + captionTitle?: string; + captionSubtitle?: string; + }> +>; + +/** + * A Component to display an animated spinner. + * It can be used to display a loading spinner with optionally a caption title and subtitle. + */ +const LoadingComponent = (props: Props) => { + const { captionTitle, captionSubtitle } = props; + + return ( + + + +

+ {captionTitle} +

+ + + {captionSubtitle} + +
+ ); +}; + +export default LoadingComponent; diff --git a/ts/features/fci/components/QtspClauseListItem.tsx b/ts/features/fci/components/QtspClauseListItem.tsx index 2a4d02cef90..13fd38a90c2 100644 --- a/ts/features/fci/components/QtspClauseListItem.tsx +++ b/ts/features/fci/components/QtspClauseListItem.tsx @@ -1,12 +1,9 @@ import * as React from "react"; import { StyleSheet, View } from "react-native"; import { useSelector } from "react-redux"; -import { Icon } from "@pagopa/io-app-design-system"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; -import TouchableDefaultOpacity from "../../../components/TouchableDefaultOpacity"; +import { CheckboxLabel, IOStyles } from "@pagopa/io-app-design-system"; import { QtspClause } from "../../../../definitions/fci/QtspClause"; import { fciQtspFilledDocumentUrlSelector } from "../store/reducers/fciQtspFilledDocument"; -import I18n from "../../../i18n"; import LinkedText from "./LinkedText"; type Props = { @@ -39,37 +36,21 @@ const QtspClauseListItem = (props: Props) => { return ( - { - - } + - { + { onChange(!checked); setChecked(!checked); }} - > - - - - + /> ); }; diff --git a/ts/features/fci/components/SignatureFieldItem.tsx b/ts/features/fci/components/SignatureFieldItem.tsx index c7e8a1185db..cf7ec21733d 100644 --- a/ts/features/fci/components/SignatureFieldItem.tsx +++ b/ts/features/fci/components/SignatureFieldItem.tsx @@ -1,10 +1,11 @@ import * as React from "react"; import { View, StyleSheet } from "react-native"; -import { IOColors, Icon } from "@pagopa/io-app-design-system"; -import { H4 } from "../../../components/core/typography/H4"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; -import TouchableDefaultOpacity from "../../../components/TouchableDefaultOpacity"; -import { Link } from "../../../components/core/typography/Link"; +import { + IOColors, + IOStyles, + LabelLink, + ListItemCheckbox +} from "@pagopa/io-app-design-system"; import I18n from "../../../i18n"; type Props = { @@ -20,15 +21,13 @@ const styles = StyleSheet.create({ paddingTop: 16, paddingBottom: 8, marginBottom: 16, - flexDirection: "column", borderBottomColor: IOColors.greyLight, borderBottomWidth: 1 }, details: { paddingTop: 16, paddingBottom: 8 - }, - titleMargin: { marginRight: 22, flex: 1 } + } }); const SignatureFieldItem = (props: Props) => { @@ -40,41 +39,21 @@ const SignatureFieldItem = (props: Props) => { return ( - -

- {props.title} -

- { - onChange(!checked); - }} - disabled={props.disabled} - style={{ alignSelf: "center" }} - > - - -
+ { + onChange(!checked); + }} + accessibilityLabel={ + checked + ? I18n.t("features.fci.signatureFields.accessibility.selected") + : I18n.t("features.fci.signatureFields.accessibility.unselected") + } + /> - { onPress={props.onPressDetail} > {I18n.t("features.fci.signatureFields.showOnDocument")} - +
); diff --git a/ts/features/fci/components/SignatureRequestItem.tsx b/ts/features/fci/components/SignatureRequestItem.tsx index 5b01e01185e..d0ecdc51e17 100644 --- a/ts/features/fci/components/SignatureRequestItem.tsx +++ b/ts/features/fci/components/SignatureRequestItem.tsx @@ -1,13 +1,15 @@ import * as React from "react"; import { View, StyleSheet } from "react-native"; -import { HSpacer } from "@pagopa/io-app-design-system"; -import { H4 } from "../../../components/core/typography/H4"; +import { + Badge, + Divider, + H6, + HSpacer, + LabelSmall +} from "@pagopa/io-app-design-system"; import { SignatureRequestListView } from "../../../../definitions/fci/SignatureRequestListView"; import { SignatureRequestStatusEnum } from "../../../../definitions/fci/SignatureRequestStatus"; -import { IOBadge } from "../../../components/core/IOBadge"; -import { LabelSmall } from "../../../components/core/typography/LabelSmall"; import TouchableDefaultOpacity from "../../../components/TouchableDefaultOpacity"; -import ItemSeparatorComponent from "../../../components/ItemSeparatorComponent"; import I18n from "../../../i18n"; type Props = { @@ -29,20 +31,16 @@ const SignatureRequestItem = (props: Props) => { switch (item.status) { case SignatureRequestStatusEnum.WAIT_FOR_SIGNATURE: return ( - ); case SignatureRequestStatusEnum.SIGNED: return ( - @@ -50,10 +48,9 @@ const SignatureRequestItem = (props: Props) => { case SignatureRequestStatusEnum.WAIT_FOR_QTSP: default: return ( - @@ -68,7 +65,7 @@ const SignatureRequestItem = (props: Props) => { testID={"FciSignatureRequestOnPress"} > -

{item.dossier_title}

+
{item.dossier_title}
{I18n.t("features.fci.requests.itemSubtitle", { date: item.created_at.toLocaleDateString(), @@ -80,7 +77,7 @@ const SignatureRequestItem = (props: Props) => { {renderStatusLabel()} - +
); }; diff --git a/ts/features/fci/components/__tests__/DocumentsNavigationBar.test.tsx b/ts/features/fci/components/__tests__/DocumentsNavigationBar.test.tsx index 5aaad148a56..7f591ee7afa 100644 --- a/ts/features/fci/components/__tests__/DocumentsNavigationBar.test.tsx +++ b/ts/features/fci/components/__tests__/DocumentsNavigationBar.test.tsx @@ -1,6 +1,5 @@ import * as React from "react"; import { fireEvent, render } from "@testing-library/react-native"; -import type { IOColors } from "@pagopa/io-app-design-system"; import DocumentsNavigationBar, { IndicatorPositionEnum } from "../DocumentsNavigationBar"; @@ -8,8 +7,8 @@ import DocumentsNavigationBar, { type Props = { titleRight: string; titleLeft: string; - iconRightColor?: IOColors; - iconLeftColor?: IOColors; + iconRightDisabled?: boolean; + iconLeftDisabled?: boolean; disabled?: boolean; indicatorPosition: IndicatorPositionEnum; onPrevious: () => void; @@ -21,8 +20,6 @@ describe("Test DocumentsNavigationBar component", () => { const props: Props = { titleRight: "Pagina 1 di 2", titleLeft: "Documento 1 di 2", - iconRightColor: "blue", - iconLeftColor: "blue", indicatorPosition: "left", onPrevious: jest.fn(), onNext: jest.fn() @@ -100,7 +97,7 @@ describe("Test DocumentsNavigationBar component", () => { const props: Props = { titleRight: "", titleLeft: "", - disabled: true, + iconRightDisabled: true, indicatorPosition: "left", onPrevious: jest.fn(), onNext: onPress @@ -121,7 +118,7 @@ describe("Test DocumentsNavigationBar component", () => { const props: Props = { titleRight: "", titleLeft: "", - disabled: true, + iconLeftDisabled: true, indicatorPosition: "left", onPrevious: jest.fn(), onNext: onPress diff --git a/ts/features/fci/components/__tests__/LoadingComponent.test.tsx b/ts/features/fci/components/__tests__/LoadingComponent.test.tsx new file mode 100644 index 00000000000..117b6c6fba9 --- /dev/null +++ b/ts/features/fci/components/__tests__/LoadingComponent.test.tsx @@ -0,0 +1,47 @@ +import * as React from "react"; +import { render } from "@testing-library/react-native"; +import LoadingComponent from "../LoadingComponent"; + +type Props = { + captionTitle?: string; + captionSubtitle?: string; +}; + +describe("Test LoadingComponent component", () => { + it("should render a LoadingComponent component with props correctly", () => { + const props = { + captionTitle: "Loading", + captionSubtitle: "Please wait..." + }; + const component = renderComponent({ ...props }); + expect(component).toBeTruthy(); + expect(component).toMatchSnapshot(); + }); + it("should render a LoadingComponent component with the right caption title", () => { + const props = { + captionTitle: "Loading", + captionSubtitle: "Please wait..." + }; + const component = renderComponent({ ...props }); + expect(component).toBeTruthy(); + expect( + component.queryByTestId("LoadingSpinnerCaptionTitleID") + ).toBeTruthy(); + expect(component.queryByText("Loading")).toBeTruthy(); + }); + it("should render a LoadingComponent component with the right caption subTitle", () => { + const props = { + captionTitle: "Loading", + captionSubtitle: "Please wait..." + }; + const component = renderComponent({ ...props }); + expect(component).toBeTruthy(); + expect( + component.queryByTestId("LoadingSpinnerCaptionSubTitleID") + ).toBeTruthy(); + expect(component.queryByText("Please wait...")).toBeTruthy(); + }); +}); + +const renderComponent = (props: Props) => + render(); diff --git a/ts/features/fci/components/__tests__/QtspClauseListItem.test.tsx b/ts/features/fci/components/__tests__/QtspClauseListItem.test.tsx index c3df86f94d8..0e9250a186b 100644 --- a/ts/features/fci/components/__tests__/QtspClauseListItem.test.tsx +++ b/ts/features/fci/components/__tests__/QtspClauseListItem.test.tsx @@ -2,7 +2,6 @@ import * as React from "react"; import { Store } from "redux"; import { Provider } from "react-redux"; import configureMockStore from "redux-mock-store"; -import { fireEvent } from "@testing-library/react-native"; import { mockQtspClausesMetadata } from "../../types/__mocks__/QtspClausesMetadata.mock"; import { QtspClause } from "../../../../../definitions/fci/QtspClause"; import QtspClauseListItem from "../QtspClauseListItem"; @@ -39,6 +38,7 @@ describe("Test QtspClauseListItem component", () => { }; const component = renderComponent({ ...props }, store); expect(component).toBeTruthy(); + expect(component).toMatchSnapshot(); }); it("should render a QtspClauseListItem component with container", () => { const mockStore = configureMockStore(); @@ -84,11 +84,11 @@ describe("Test QtspClauseListItem component", () => { const component = renderComponent({ ...props }, store); expect(component).toBeTruthy(); expect( - component.getByTestId("QtspClauseListItemCheckboxTestID") + component.getByTestId("QtspClauseListItemContainerTestID") ).toBeTruthy(); - expect(component.queryAllByText("io-checkbox-on")).toBeTruthy(); + expect(component.queryAllByText("legCheckOn")).toBeTruthy(); }); - it("should render a QtspClauseListItem component with checkbox clickable", () => { + it("should render a QtspClauseListItem component with checkbox enabled", () => { const mockStore = configureMockStore(); const store: ReturnType = mockStore(globalState); @@ -101,14 +101,9 @@ describe("Test QtspClauseListItem component", () => { }; const component = renderComponent({ ...props }, store); expect(component).toBeTruthy(); - const rightButton = component.getByTestId("QtspClauseListItemButtonTestID"); - expect(rightButton).toBeTruthy(); - expect(rightButton).toBeEnabled(); - fireEvent.press(rightButton); - expect(component.queryAllByText("io-checkbox-on")).toBeTruthy(); - fireEvent.press(rightButton); - expect(component.queryAllByText("io-checkbox-off")).toBeTruthy(); - expect(onPress).toHaveBeenCalledTimes(2); + const checkbox = component.getByTestId("AnimatedCheckbox"); + expect(checkbox).toBeTruthy(); + expect(checkbox).toBeEnabled(); }); it("should render a QtspClauseListItem component with right text for clause", () => { const mockStore = configureMockStore(); diff --git a/ts/features/fci/components/__tests__/SignatureFieldItem.test.tsx b/ts/features/fci/components/__tests__/SignatureFieldItem.test.tsx index 90aaeeaac08..c763f296088 100644 --- a/ts/features/fci/components/__tests__/SignatureFieldItem.test.tsx +++ b/ts/features/fci/components/__tests__/SignatureFieldItem.test.tsx @@ -31,7 +31,7 @@ describe("Test SignatureFieldItem component", () => { expect(component).toBeTruthy(); expect(component.queryByText("Clause title 1")).toBeTruthy(); }); - it("should render a SignatureFieldItem component with checkbox unchecked", () => { + it("should render a SignatureFieldItem component with checkbox enabled", () => { const props = { title: "Clause title 1", onChange: jest.fn(), @@ -39,43 +39,27 @@ describe("Test SignatureFieldItem component", () => { }; const component = renderComponent({ ...props }); expect(component).toBeTruthy(); - expect( - component.getByTestId("SignatureFieldItemCheckboxTestID") - ).toBeTruthy(); - expect(component.queryAllByText("io-checkbox-off")).toBeTruthy(); + const listItemCheckbox = component.getByTestId("ListItemCheckbox"); + expect(listItemCheckbox).toBeTruthy(); + const checkbox = component.getByTestId("AnimatedCheckboxInput"); + expect(checkbox).toBeTruthy(); + expect(checkbox).toBeEnabled(); }); - it("should render a SignatureFieldItem component with checkbox checked", () => { + it("should render a SignatureFieldItem component with checkbox disabled", () => { const props = { title: "Clause title 1", - value: true, + value: false, + disabled: true, onChange: jest.fn(), onPressDetail: jest.fn() }; const component = renderComponent({ ...props }); expect(component).toBeTruthy(); - expect( - component.getByTestId("SignatureFieldItemCheckboxTestID") - ).toBeTruthy(); - expect(component.queryAllByText("io-checkbox-on")).toBeTruthy(); - }); - it("should render a SignatureFieldItem component with checkbox clickable", () => { - const onPress = jest.fn(); - const props = { - title: "Clause title 1", - value: true, - onChange: onPress, - onPressDetail: jest.fn() - }; - const component = renderComponent({ ...props }); - expect(component).toBeTruthy(); - const rightButton = component.getByTestId("SignatureFieldItemButtonTestID"); - expect(rightButton).toBeTruthy(); - expect(rightButton).toBeEnabled(); - fireEvent.press(rightButton); - expect(component.queryAllByText("io-checkbox-on")).toBeTruthy(); - fireEvent.press(rightButton); - expect(component.queryAllByText("io-checkbox-off")).toBeTruthy(); - expect(onPress).toHaveBeenCalledTimes(2); + const listItemCheckbox = component.getByTestId("ListItemCheckbox"); + expect(listItemCheckbox).toBeTruthy(); + const checkbox = component.getByTestId("AnimatedCheckboxInput"); + expect(checkbox).toBeTruthy(); + expect(checkbox).toBeDisabled(); }); it("should render a SignatureFieldItem component with right text for details link", () => { const props = { diff --git a/ts/features/fci/components/__tests__/__snapshots__/DocumentsNavigationBar.test.tsx.snap b/ts/features/fci/components/__tests__/__snapshots__/DocumentsNavigationBar.test.tsx.snap index abecc0e98b7..c4139034efa 100644 --- a/ts/features/fci/components/__tests__/__snapshots__/DocumentsNavigationBar.test.tsx.snap +++ b/ts/features/fci/components/__tests__/__snapshots__/DocumentsNavigationBar.test.tsx.snap @@ -22,255 +22,255 @@ exports[`Test DocumentsNavigationBar component should render a DocumentsNavigati "backgroundColor": "#FFFFFF", "borderColor": "#CCD4DC", "flexDirection": "row", - "paddingBottom": 12, + "paddingBottom": 14, "paddingTop": 12, }, ] } > - - - - - + } + bbHeight={24} + bbWidth={24} + color={4278219750} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0073E6", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4278219750} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + +
Documento 1 di 2 - - - - - + } + bbHeight={24} + bbWidth={24} + color={4278219750} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0073E6", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4278219750} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + +
Pagina 1 di 2 diff --git a/ts/features/fci/components/__tests__/__snapshots__/LinkedText.test.tsx.snap b/ts/features/fci/components/__tests__/__snapshots__/LinkedText.test.tsx.snap index 493e234a7e7..b2d98facc5c 100644 --- a/ts/features/fci/components/__tests__/__snapshots__/LinkedText.test.tsx.snap +++ b/ts/features/fci/components/__tests__/__snapshots__/LinkedText.test.tsx.snap @@ -2,45 +2,50 @@ exports[`Test LinkedText component should render a LinkedText component with props correctly 1`] = ` C l a u s e t i t l e 1 `; diff --git a/ts/features/fci/components/__tests__/__snapshots__/LoadingComponent.test.tsx.snap b/ts/features/fci/components/__tests__/__snapshots__/LoadingComponent.test.tsx.snap new file mode 100644 index 00000000000..9658bf9934a --- /dev/null +++ b/ts/features/fci/components/__tests__/__snapshots__/LoadingComponent.test.tsx.snap @@ -0,0 +1,245 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Test LoadingComponent component should render a LoadingComponent component with props correctly 1`] = ` + + + + + + + + + + + + + + + + + + + + + Loading + + + + Please wait... + + +`; diff --git a/ts/features/fci/components/__tests__/__snapshots__/QtspClauseListItem.test.tsx.snap b/ts/features/fci/components/__tests__/__snapshots__/QtspClauseListItem.test.tsx.snap new file mode 100644 index 00000000000..4144a70d0c0 --- /dev/null +++ b/ts/features/fci/components/__tests__/__snapshots__/QtspClauseListItem.test.tsx.snap @@ -0,0 +1,605 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Test QtspClauseListItem component should render a QtspClauseListItem component with props correctly 1`] = ` + + + + + + + + + + + + + FCI_QTSP_TOS + + + + + + + + + + + + + + + + + + + + + (1) Io sottoscritto/a dichiaro quanto indicato nel + + + QUADRO E - AUTOCERTIFICAZIONE E SOTTOSCRIZIONE DA PARTE DEL TITOLARE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; diff --git a/ts/features/fci/components/__tests__/__snapshots__/SignatureFieldItem.test.tsx.snap b/ts/features/fci/components/__tests__/__snapshots__/SignatureFieldItem.test.tsx.snap index 1312c2f0e10..9861c803f01 100644 --- a/ts/features/fci/components/__tests__/__snapshots__/SignatureFieldItem.test.tsx.snap +++ b/ts/features/fci/components/__tests__/__snapshots__/SignatureFieldItem.test.tsx.snap @@ -6,7 +6,6 @@ exports[`Test SignatureFieldItem component should render a SignatureFieldItem co Object { "borderBottomColor": "#E6E9F2", "borderBottomWidth": 1, - "flexDirection": "column", "marginBottom": 16, "paddingBottom": 8, "paddingTop": 16, @@ -14,126 +13,183 @@ exports[`Test SignatureFieldItem component should render a SignatureFieldItem co } > - - Clause title 1 - - - - - + + + Clause title 1 + + + - - + + + + + + + + { const dispatch = useIODispatch(); const route = useRoute(); const dossierTitle = useIOSelector(fciSignatureRequestDossierTitleSelector); + const cancelButtonProps: ButtonSolidProps = { + testID: "FciStopAbortingSignatureTestID", + onPress: () => dismiss(), + label: I18n.t("features.fci.abort.confirm"), + accessibilityLabel: I18n.t("features.fci.abort.confirm") + }; + const continueButtonProps: ButtonSolidProps = { + onPress: () => { + trackFciUserExit(route.name, fciEnvironment); + dispatch(fciEndRequest()); + dismiss(); + }, + color: "danger", + label: I18n.t("features.fci.abort.cancel"), + accessibilityLabel: I18n.t("features.fci.abort.cancel") + }; const fciEnvironment = useIOSelector(fciEnvironmentSelector); - const { present, bottomSheet, dismiss } = useLegacyIOBottomSheetModal( - + const { present, bottomSheet, dismiss } = useIOBottomSheetModal({ + title: I18n.t("features.fci.abort.title"), + component: ( {I18n.t("features.fci.abort.content", { dossierTitle })} - , - -

- {I18n.t("features.fci.abort.title")} -

-
, - 280, - dismiss(), - title: I18n.t("features.fci.abort.confirm") - }} - rightButton={{ - ...errorButtonProps(() => { - trackFciUserExit(route.name, fciEnvironment); - dispatch(fciEndRequest()); - dismiss(); - }, I18n.t("features.fci.abort.cancel")), - onPressWithGestureHandler: true - }} - /> - ); + ), + snapPoint: [280], + footer: ( + + ) + }); return { dismiss, diff --git a/ts/features/fci/hooks/useFciCheckService.tsx b/ts/features/fci/hooks/useFciCheckService.tsx index 0a17fab5a47..01ab640c0b2 100644 --- a/ts/features/fci/hooks/useFciCheckService.tsx +++ b/ts/features/fci/hooks/useFciCheckService.tsx @@ -1,14 +1,11 @@ import * as React from "react"; -import { StyleSheet, View } from "react-native"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { useLegacyIOBottomSheetModal } from "../../../utils/hooks/bottomSheet"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; -import { H3 } from "../../../components/core/typography/H3"; -import FooterWithButtons from "../../../components/ui/FooterWithButtons"; +import { + Body, + ButtonSolidProps, + FooterWithButtons +} from "@pagopa/io-app-design-system"; import I18n from "../../../i18n"; -import customVariables from "../../../theme/variables"; -import { confirmButtonProps } from "../../../components/buttons/ButtonConfigurations"; -import { H4 } from "../../../components/core/typography/H4"; import { useIODispatch, useIOSelector } from "../../../store/hooks"; import { fciStartSigningRequest } from "../store/actions"; import { upsertServicePreference } from "../../../store/actions/services/servicePreference"; @@ -17,14 +14,9 @@ import { isServicePreferenceResponseSuccess } from "../../../types/services/Serv import { servicePreferenceSelector } from "../../../store/reducers/entities/services/servicePreference"; import { fciMetadataServiceIdSelector } from "../store/reducers/fciMetadata"; import { trackFciUxConversion } from "../analytics"; +import { useIOBottomSheetModal } from "../../../utils/hooks/bottomSheet"; import { fciEnvironmentSelector } from "../store/reducers/fciEnvironment"; -const styles = StyleSheet.create({ - verticalPad: { - paddingVertical: customVariables.spacerHeight - } -}); - /** * A hook that returns a function to present the abort signature flow bottom sheet */ @@ -34,50 +26,55 @@ export const useFciCheckService = () => { const servicePreference = useIOSelector(servicePreferenceSelector); const fciEnvironment = useIOSelector(fciEnvironmentSelector); const servicePreferenceValue = pot.getOrElse(servicePreference, undefined); - const { present, bottomSheet, dismiss } = useLegacyIOBottomSheetModal( - -

{I18n.t("features.fci.checkService.content")}

-
, - -

- {I18n.t("features.fci.checkService.title")} -

-
, - 280, - { - dispatch(fciStartSigningRequest()); - dismiss(); - }, - title: I18n.t("features.fci.checkService.cancel") - }} - rightButton={{ - ...confirmButtonProps(() => { - if ( - fciServiceId && - servicePreferenceValue && - isServicePreferenceResponseSuccess(servicePreferenceValue) - ) { - const sp = { ...servicePreferenceValue.value, inbox: true }; - dispatch( - upsertServicePreference.request({ - id: fciServiceId as ServiceId, - ...sp - }) - ); - } - trackFciUxConversion(fciEnvironment); - dispatch(fciStartSigningRequest()); - dismiss(); - }, I18n.t("features.fci.checkService.confirm")), - onPressWithGestureHandler: true - }} - /> - ); + const cancelButtonProps: ButtonSolidProps = { + onPress: () => { + dispatch(fciStartSigningRequest()); + dismiss(); + }, + label: I18n.t("features.fci.checkService.cancel"), + accessibilityLabel: I18n.t("features.fci.checkService.cancel") + }; + const confirmButtonProps: ButtonSolidProps = { + onPress: () => { + if ( + fciServiceId && + servicePreferenceValue && + isServicePreferenceResponseSuccess(servicePreferenceValue) + ) { + const sp = { ...servicePreferenceValue.value, inbox: true }; + dispatch( + upsertServicePreference.request({ + id: fciServiceId as ServiceId, + ...sp + }) + ); + } + trackFciUxConversion(fciEnvironment); + dispatch(fciStartSigningRequest()); + dismiss(); + }, + label: I18n.t("features.fci.checkService.confirm"), + accessibilityLabel: I18n.t("features.fci.checkService.confirm") + }; + const { present, bottomSheet, dismiss } = useIOBottomSheetModal({ + component: ( + + {I18n.t("features.fci.checkService.content")} + + ), + title: I18n.t("features.fci.checkService.title"), + snapPoint: [320], + footer: ( + + ) + }); return { dismiss, diff --git a/ts/features/fci/hooks/useFciNoSignatureFields.tsx b/ts/features/fci/hooks/useFciNoSignatureFields.tsx index 50081e4afe8..115af1a6c55 100644 --- a/ts/features/fci/hooks/useFciNoSignatureFields.tsx +++ b/ts/features/fci/hooks/useFciNoSignatureFields.tsx @@ -1,31 +1,23 @@ import * as React from "react"; -import { StyleSheet, View } from "react-native"; import { StackActions, useNavigation } from "@react-navigation/native"; import { increment } from "fp-ts/lib/function"; -import { useLegacyIOBottomSheetModal } from "../../../utils/hooks/bottomSheet"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; -import { H3 } from "../../../components/core/typography/H3"; -import FooterWithButtons from "../../../components/ui/FooterWithButtons"; +import { + Body, + ButtonSolidProps, + FooterWithButtons +} from "@pagopa/io-app-design-system"; import I18n from "../../../i18n"; -import customVariables from "../../../theme/variables"; -import { confirmButtonProps } from "../../../components/buttons/ButtonConfigurations"; -import { H4 } from "../../../components/core/typography/H4"; import { FCI_ROUTES } from "../navigation/routes"; import { fciSignatureDetailDocumentsSelector } from "../store/reducers/fciSignatureRequest"; import { useIOSelector } from "../../../store/hooks"; import { trackFciStartSignature } from "../analytics"; +import { useIOBottomSheetModal } from "../../../utils/hooks/bottomSheet"; import { fciEnvironmentSelector } from "../store/reducers/fciEnvironment"; type Props = { currentDoc: number; }; -const styles = StyleSheet.create({ - verticalPad: { - paddingVertical: customVariables.spacerHeight - } -}); - /** * A hook that returns a function to present the abort signature flow bottom sheet */ @@ -34,47 +26,53 @@ export const useFciNoSignatureFields = (props: Props) => { const documents = useIOSelector(fciSignatureDetailDocumentsSelector); const fciEnvironment = useIOSelector(fciEnvironmentSelector); const { currentDoc } = props; - const { present, bottomSheet, dismiss } = useLegacyIOBottomSheetModal( - -

{I18n.t("features.fci.noFields.content")}

-
, - -

- {I18n.t("features.fci.noFields.title")} -

-
, - 280, - { - dismiss(); - }, - title: I18n.t("features.fci.noFields.leftButton") - }} - rightButton={{ - ...confirmButtonProps(() => { - dismiss(); - if (currentDoc < documents.length - 1) { - navigation.dispatch( - StackActions.push(FCI_ROUTES.DOCUMENTS, { - attrs: undefined, - currentDoc: increment(currentDoc) - }) - ); - } else { - trackFciStartSignature(fciEnvironment); - navigation.navigate(FCI_ROUTES.MAIN, { - screen: FCI_ROUTES.USER_DATA_SHARE - }); - } - }, I18n.t("features.fci.noFields.rightButton")), - onPressWithGestureHandler: true - }} - /> - ); + const readButtonProps: ButtonSolidProps = { + onPress: () => { + dismiss(); + }, + label: I18n.t("features.fci.noFields.leftButton"), + accessibilityLabel: I18n.t("features.fci.noFields.leftButton") + }; + const confirmButtonProps: ButtonSolidProps = { + onPress: () => { + dismiss(); + if (currentDoc < documents.length - 1) { + navigation.dispatch( + StackActions.push(FCI_ROUTES.DOCUMENTS, { + attrs: undefined, + currentDoc: increment(currentDoc) + }) + ); + } else { + trackFciStartSignature(fciEnvironment); + navigation.navigate(FCI_ROUTES.MAIN, { + screen: FCI_ROUTES.USER_DATA_SHARE + }); + } + }, + label: I18n.t("features.fci.noFields.rightButton"), + accessibilityLabel: I18n.t("features.fci.noFields.rightButton") + }; + const { present, bottomSheet, dismiss } = useIOBottomSheetModal({ + component: ( + {I18n.t("features.fci.noFields.content")} + ), + title: I18n.t("features.fci.noFields.title"), + snapPoint: [280], + footer: ( + + ) + }); return { dismiss, diff --git a/ts/features/fci/navigation/FciStackNavigator.tsx b/ts/features/fci/navigation/FciStackNavigator.tsx index a5a3dd107f7..ad63d25b0df 100644 --- a/ts/features/fci/navigation/FciStackNavigator.tsx +++ b/ts/features/fci/navigation/FciStackNavigator.tsx @@ -28,10 +28,16 @@ export const fciLinkingOptions: PathConfigMap = { export const FciStackNavigator = () => ( - + ( component={FciDataSharingScreen} /> - + ( - + const LoadingView = () => ( + ); const GenericError = (status?: ProblemJson["status"]) => { @@ -110,13 +105,13 @@ const FciSignatureScreen = ( return pot.fold( fciSignatureRequest, - () => , - () => , - () => , + () => , + () => , + () => , renderErrorComponent, b => , - () => , - () => , + () => , + () => , () => renderErrorComponent() ); }; diff --git a/ts/features/fci/screens/__tests__/FciDocumentsScreen.test.tsx b/ts/features/fci/screens/__tests__/FciDocumentsScreen.test.tsx index 7eb3cb9c989..4d9d53ca7d2 100644 --- a/ts/features/fci/screens/__tests__/FciDocumentsScreen.test.tsx +++ b/ts/features/fci/screens/__tests__/FciDocumentsScreen.test.tsx @@ -6,8 +6,11 @@ import { GlobalState } from "../../../../store/reducers/types"; import FciDocumentsScreen from "../valid/FciDocumentsScreen"; import { FCI_ROUTES } from "../../navigation/routes"; import { mockSignatureRequestDetailView } from "../../types/__mocks__/SignatureRequestDetailView.mock"; +import { + fciDownloadPreview, + fciSignatureRequestFromId +} from "../../store/actions"; import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWrapper"; -import { fciSignatureRequestFromId } from "../../store/actions"; describe("Test FciDocuments screen", () => { beforeEach(() => { @@ -21,8 +24,7 @@ describe("Test FciDocuments screen", () => { ); store.dispatch( fciSignatureRequestFromId.success({ - ...mockSignatureRequestDetailView, - documents: [] + ...mockSignatureRequestDetailView }) ); const component = renderComponent(store); @@ -36,8 +38,12 @@ describe("Test FciDocuments screen", () => { ); store.dispatch( fciSignatureRequestFromId.success({ - ...mockSignatureRequestDetailView, - documents: [] + ...mockSignatureRequestDetailView + }) + ); + store.dispatch( + fciDownloadPreview.success({ + path: mockSignatureRequestDetailView.documents[0].url }) ); const testComponent = renderComponent(store); diff --git a/ts/features/fci/screens/__tests__/FciThankyouScreen.test.tsx b/ts/features/fci/screens/__tests__/FciThankyouScreen.test.tsx index 2ef8d0ec8bf..43dea643ecd 100644 --- a/ts/features/fci/screens/__tests__/FciThankyouScreen.test.tsx +++ b/ts/features/fci/screens/__tests__/FciThankyouScreen.test.tsx @@ -73,8 +73,7 @@ describe("Test FciThankyouScreen screen", () => { store.dispatch(fciSigningRequest.success(mockSignatureDetailView)); const component = renderComponent(store); expect(component).toBeTruthy(); - expect(component.queryByTestId("FciTypSuccessTestID")).toBeTruthy(); - const closeButton = component.getByTestId("FciTypSuccessFooterButton"); + const closeButton = component.getByTestId("FciTypCloseButton"); expect(closeButton).toBeTruthy(); expect(closeButton).toBeEnabled(); fireEvent.press(closeButton, "onPress"); diff --git a/ts/features/fci/screens/valid/FciDataSharingScreen.tsx b/ts/features/fci/screens/valid/FciDataSharingScreen.tsx index 7987743d860..3f1dfc560ba 100644 --- a/ts/features/fci/screens/valid/FciDataSharingScreen.tsx +++ b/ts/features/fci/screens/valid/FciDataSharingScreen.tsx @@ -1,15 +1,22 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import { useNavigation, useRoute } from "@react-navigation/native"; -import { List } from "native-base"; import * as React from "react"; -import { SafeAreaView, StyleSheet, View } from "react-native"; +import { StyleSheet, View, ScrollView } from "react-native"; import * as O from "fp-ts/lib/Option"; -import { Icon } from "@pagopa/io-app-design-system"; -import { H4 } from "../../../../components/core/typography/H4"; -import { Link } from "../../../../components/core/typography/Link"; -import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; -import ListItemComponent from "../../../../components/screens/ListItemComponent"; -import FooterWithButtons from "../../../../components/ui/FooterWithButtons"; +import { + Body, + ButtonSolidProps, + FooterWithButtons, + H2, + H6, + HSpacer, + IOStyles, + IconButton, + LabelLink, + ListItemNav, + VSpacer +} from "@pagopa/io-app-design-system"; +import { SafeAreaView } from "react-native-safe-area-context"; import I18n from "../../../../i18n"; import { useIOSelector } from "../../../../store/hooks"; import { @@ -18,41 +25,19 @@ import { profileNameSelector, profileSelector } from "../../../../store/reducers/profile"; -import customVariables from "../../../../theme/variables"; import { emptyContextualHelp } from "../../../../utils/emptyContextualHelp"; import { capitalize } from "../../../../utils/strings"; -import { - cancelButtonProps, - confirmButtonProps -} from "../../../../components/buttons/ButtonConfigurations"; import { useFciAbortSignatureFlow } from "../../hooks/useFciAbortSignatureFlow"; import ROUTES from "../../../../navigation/routes"; -import { IOStyles } from "../../../../components/core/variables/IOStyles"; import { withValidatedEmail } from "../../../../components/helpers/withValidatedEmail"; -import ScreenContent from "../../../../components/screens/ScreenContent"; import { trackFciUserDataConfirmed, trackFciUserExit } from "../../analytics"; import { formatFiscalCodeBirthdayAsShortFormat } from "../../../../utils/dates"; import { fciEnvironmentSelector } from "../../store/reducers/fciEnvironment"; +import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; const styles = StyleSheet.create({ - padded: { - paddingLeft: customVariables.contentPadding, - paddingRight: customVariables.contentPadding, - paddingBottom: customVariables.contentPadding - }, - verticalPadding: { - paddingTop: customVariables.spacerHeight, - paddingBottom: customVariables.spacerHeight - }, - paddingTextLarge: { - paddingLeft: 14 - }, - paddingText: { - paddingLeft: 4 - }, alertTextContainer: { flexDirection: "row", - justifyContent: "space-between", alignItems: "center" } }); @@ -76,106 +61,142 @@ const FciDataSharingScreen = (): React.ReactElement => { ); const email = useIOSelector(profileEmailSelector); + useHeaderSecondLevel({ + title: I18n.t("features.fci.title"), + contextualHelp: emptyContextualHelp, + supportRequest: true + }); + const { present, bottomSheet: fciAbortSignature } = useFciAbortSignatureFlow(); + const cancelButtonProps: ButtonSolidProps = { + onPress: () => present(), + label: I18n.t("features.fci.shareDataScreen.cancel"), + accessibilityLabel: I18n.t("features.fci.shareDataScreen.cancel") + }; + + const confirmButtonProps: ButtonSolidProps = { + onPress: () => { + trackFciUserDataConfirmed(fciEnvironment); + navigation.navigate("FCI_QTSP_TOS"); + }, + label: I18n.t("features.fci.shareDataScreen.confirm"), + accessibilityLabel: I18n.t("features.fci.shareDataScreen.confirm") + }; + const AlertTextComponent = () => ( - -

- {I18n.t("features.fci.shareDataScreen.alertText")} - - { - trackFciUserExit(route.name, fciEnvironment, "modifica_email"); - navigation.navigate(ROUTES.PROFILE_NAVIGATOR, { - screen: ROUTES.INSERT_EMAIL_SCREEN - }); - }} - > - {I18n.t("features.fci.shareDataScreen.alertLink")} - -

+ undefined} + /> + + +
+ {I18n.t("features.fci.shareDataScreen.alertText")} + + { + trackFciUserExit(route.name, fciEnvironment, "modifica_email"); + navigation.navigate(ROUTES.PROFILE_NAVIGATOR, { + screen: ROUTES.INSERT_EMAIL_SCREEN + }); + }} + > + {I18n.t("features.fci.shareDataScreen.alertLink")} + +
+
); return ( - - - + + - - - {name && ( - - )} - {familyName && ( - - )} - {birthDate && ( - - )} - {fiscalCode && ( - +

{I18n.t("features.fci.shareDataScreen.title")}

+ + {I18n.t("features.fci.shareDataScreen.content")} + {name && ( + undefined} + hideChevron + /> + )} + {familyName && ( + undefined} + hideChevron + accessibilityLabel={I18n.t( + "features.fci.shareDataScreen.familyName" )} - {O.isSome(email) && ( - + /> + )} + {birthDate && ( + - -
-
+ onPress={() => undefined} + /> + )} + {fiscalCode && ( + undefined} + /> + )} + {O.isSome(email) && ( + <> + undefined} + /> + + + )} + present(), - I18n.t("features.fci.shareDataScreen.cancel") - )} - rightButton={confirmButtonProps(() => { - trackFciUserDataConfirmed(fciEnvironment); - navigation.navigate("FCI_QTSP_TOS"); - }, `${I18n.t("features.fci.shareDataScreen.confirm")}`)} + secondary={{ type: "Solid", buttonProps: confirmButtonProps }} + primary={{ type: "Outline", buttonProps: cancelButtonProps }} />
{fciAbortSignature} -
+ ); }; diff --git a/ts/features/fci/screens/valid/FciDocumentPreviewScreen.tsx b/ts/features/fci/screens/valid/FciDocumentPreviewScreen.tsx index 348f6acb75c..caa09f84eb5 100644 --- a/ts/features/fci/screens/valid/FciDocumentPreviewScreen.tsx +++ b/ts/features/fci/screens/valid/FciDocumentPreviewScreen.tsx @@ -1,8 +1,7 @@ import React from "react"; -import { Platform, SafeAreaView, StyleSheet } from "react-native"; +import { StyleSheet } from "react-native"; import * as S from "fp-ts/lib/string"; -import { IconButton } from "@pagopa/io-app-design-system"; -import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; +import { SafeAreaView } from "react-native-safe-area-context"; import I18n from "../../../../i18n"; import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; import { emptyContextualHelp } from "../../../../utils/emptyContextualHelp"; @@ -12,6 +11,7 @@ import { useIODispatch, useIOSelector } from "../../../../store/hooks"; import { fciDownloadPreviewClear, fciEndRequest } from "../../store/actions"; import { fciDownloadPathSelector } from "../../store/reducers/fciDownloadPreview"; import GenericErrorComponent from "../../components/GenericErrorComponent"; +import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; export type FciDocumentPreviewScreenNavigationParams = Readonly<{ documentUrl: string; @@ -34,6 +34,13 @@ export const FciDocumentPreviewScreen = ( const fciDownloadPath = useIOSelector(fciDownloadPathSelector); const dispatch = useIODispatch(); + useHeaderSecondLevel({ + title: I18n.t("messagePDFPreview.title"), + contextualHelp: emptyContextualHelp, + supportRequest: true, + goBack: () => dispatch(fciDownloadPreviewClear({ path: fciDownloadPath })) + }); + if (isError) { return ( { - dispatch(fciDownloadPreviewClear({ path: fciDownloadPath })); - }} - accessibilityLabel={I18n.t("global.buttons.back")} - /> - ); - return ( - + <> {S.isEmpty(documentUrl) === false && ( )} - + ); }; diff --git a/ts/features/fci/screens/valid/FciDocumentsScreen.tsx b/ts/features/fci/screens/valid/FciDocumentsScreen.tsx index a50dc51cbbb..45c89ddfee6 100644 --- a/ts/features/fci/screens/valid/FciDocumentsScreen.tsx +++ b/ts/features/fci/screens/valid/FciDocumentsScreen.tsx @@ -4,7 +4,7 @@ import { pipe } from "fp-ts/lib/function"; import * as RA from "fp-ts/lib/ReadonlyArray"; import * as O from "fp-ts/lib/Option"; import * as S from "fp-ts/lib/string"; -import { Platform, SafeAreaView, StyleSheet } from "react-native"; +import { StyleSheet } from "react-native"; import { useSelector } from "react-redux"; import { RouteProp, @@ -13,10 +13,14 @@ import { useNavigation, useRoute } from "@react-navigation/native"; -import { IconButton, IOColors } from "@pagopa/io-app-design-system"; -import { IOStyles } from "../../../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; -import FooterWithButtons from "../../../../components/ui/FooterWithButtons"; +import { + BlockButtonProps, + ButtonSolidProps, + FooterWithButtons, + IOColors, + IOStyles +} from "@pagopa/io-app-design-system"; +import { SafeAreaView } from "react-native-safe-area-context"; import I18n from "../../../../i18n"; import DocumentsNavigationBar from "../../components/DocumentsNavigationBar"; import { emptyContextualHelp } from "../../../../utils/emptyContextualHelp"; @@ -34,7 +38,6 @@ import { import { fciDocumentSignaturesSelector } from "../../store/reducers/fciDocumentSignatures"; import { useIODispatch, useIOSelector } from "../../../../store/hooks"; import { fciDownloadPathSelector } from "../../store/reducers/fciDownloadPreview"; -import LoadingSpinnerOverlay from "../../../../components/LoadingSpinnerOverlay"; import { trackFciDocOpeningSuccess, trackFciSigningDoc } from "../../analytics"; import { getOptionalSignatureFields, @@ -43,6 +46,8 @@ import { } from "../../utils/signatureFields"; import { useFciNoSignatureFields } from "../../hooks/useFciNoSignatureFields"; import { fciEnvironmentSelector } from "../../store/reducers/fciEnvironment"; +import LoadingComponent from "../../components/LoadingComponent"; +import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; const styles = StyleSheet.create({ pdf: { @@ -131,19 +136,28 @@ const FciDocumentsScreen = () => { const onCancelPress = () => present(); - const cancelButtonProps = { - block: true, - light: false, - bordered: true, + const cancelButtonProps: ButtonSolidProps = { onPress: onCancelPress, - title: I18n.t("features.fci.documents.footer.cancel") + label: I18n.t("features.fci.documents.footer.cancel"), + accessibilityLabel: I18n.t("features.fci.documents.footer.cancel") }; - const continueButtonProps = { - block: true, - primary: true, + const continueButtonProps: ButtonSolidProps = { onPress: onContinuePress, - title: I18n.t("features.fci.documents.footer.continue") + label: I18n.t("features.fci.documents.footer.continue"), + accessibilityLabel: I18n.t("features.fci.documents.footer.continue") + }; + + const keepReadingButtonProps: ButtonSolidProps = { + onPress: () => pointToPage(totalPages), + label: I18n.t("global.buttons.continue"), + accessibilityLabel: I18n.t("global.buttons.continue") + }; + + const secondaryButtonProps: BlockButtonProps = { + type: currentPage < totalPages ? "Outline" : "Solid", + buttonProps: + currentPage < totalPages ? keepReadingButtonProps : continueButtonProps }; const pointToPage = (page: number) => @@ -153,14 +167,6 @@ const FciDocumentsScreen = () => { O.map(_ => _.setPage(page)) ); - const keepReadingButtonProps = { - block: true, - light: true, - bordered: true, - onPress: () => pointToPage(totalPages), - title: I18n.t("global.buttons.continue") - }; - const renderPager = () => ( { ); }; - const customGoBack: React.ReactElement = ( - { - if (currentDoc <= 0) { - dispatch(fciClearStateRequest()); - } - navigation.goBack(); - }} - accessibilityLabel={I18n.t("global.buttons.back")} - /> - ); + useHeaderSecondLevel({ + title: I18n.t("features.fci.title"), + supportRequest: true, + contextualHelp: emptyContextualHelp, + goBack: () => { + if (currentDoc <= 0) { + dispatch(fciClearStateRequest()); + } + navigation.goBack(); + } + }); - const renderFooterButtons = () => - currentPage < totalPages ? keepReadingButtonProps : continueButtonProps; + if (S.isEmpty(downloadPath)) { + return ; + } return ( - - + + - - - {documents.length > 0 && ( - <> - {renderPager()} - - - )} - - {fciAbortSignature} - {fciNoSignatureFields} - - + {documents.length > 0 && ( + <> + {renderPager()} + + + )} + + {fciAbortSignature} + {fciNoSignatureFields} + ); }; export default FciDocumentsScreen; diff --git a/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx b/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx index 2e4b72be5f0..c5f05dbed1a 100644 --- a/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx +++ b/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx @@ -1,12 +1,18 @@ import * as React from "react"; -import { SafeAreaView, FlatList, View } from "react-native"; +import { FlatList, View, ScrollView } from "react-native"; import { useSelector } from "react-redux"; import { useNavigation } from "@react-navigation/native"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { constNull } from "fp-ts/lib/function"; -import { VSpacer } from "@pagopa/io-app-design-system"; -import { IOStyles } from "../../../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; +import { + Body, + ButtonSolidProps, + Divider, + FooterWithButtons, + H2, + IOStyles, + VSpacer +} from "@pagopa/io-app-design-system"; +import { SafeAreaView } from "react-native-safe-area-context"; import I18n from "../../../../i18n"; import { emptyContextualHelp } from "../../../../utils/emptyContextualHelp"; import { @@ -14,15 +20,12 @@ import { fciQtspPrivacyTextSelector, fciQtspPrivacyUrlSelector } from "../../store/reducers/fciQtspClauses"; -import FooterWithButtons from "../../../../components/ui/FooterWithButtons"; import { useFciAbortSignatureFlow } from "../../hooks/useFciAbortSignatureFlow"; -import ItemSeparatorComponent from "../../../../components/ItemSeparatorComponent"; import customVariables from "../../../../theme/variables"; import QtspClauseListItem from "../../components/QtspClauseListItem"; import { FCI_ROUTES } from "../../navigation/routes"; import { useIODispatch } from "../../../../store/hooks"; import { fciEndRequest, fciStartSigningRequest } from "../../store/actions"; -import { LoadingErrorComponent } from "../../../../components/LoadingErrorComponent"; import { fciPollFilledDocumentErrorSelector, fciPollFilledDocumentReadySelector @@ -35,9 +38,10 @@ import { ServiceId } from "../../../../../definitions/backend/ServiceId"; import { useFciCheckService } from "../../hooks/useFciCheckService"; import { isServicePreferenceResponseSuccess } from "../../../../types/services/ServicePreferenceResponse"; import { fciMetadataServiceIdSelector } from "../../store/reducers/fciMetadata"; -import ScreenContent from "../../../../components/screens/ScreenContent"; import { trackFciUxConversion } from "../../analytics"; +import LoadingComponent from "../../components/LoadingComponent"; import { fciEnvironmentSelector } from "../../store/reducers/fciEnvironment"; +import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; const FciQtspClausesScreen = () => { const dispatch = useIODispatch(); @@ -82,14 +86,11 @@ const FciQtspClausesScreen = () => { }); }; - const LoadingComponent = () => ( - - ); + useHeaderSecondLevel({ + title: I18n.t("features.fci.title"), + contextualHelp: emptyContextualHelp, + supportRequest: true + }); if (fciPollFilledDocumentError && !isPollFilledDocumentReady) { return ( @@ -102,7 +103,7 @@ const FciQtspClausesScreen = () => { /> ); } else if (!isPollFilledDocumentReady) { - return ; + return ; } const renderClausesFields = () => ( @@ -116,9 +117,7 @@ const FciQtspClausesScreen = () => { `${index}`} - ItemSeparatorComponent={() => ( - - )} + ItemSeparatorComponent={() => } renderItem={({ item }) => ( { )} ListFooterComponent={ <> - + {
); - const cancelButtonProps = { - block: true, - light: false, - bordered: true, + const cancelButtonProps: ButtonSolidProps = { onPress: showAbort, - title: I18n.t("global.buttons.cancel") + label: I18n.t("global.buttons.cancel"), + accessibilityLabel: I18n.t("global.buttons.cancel") }; - const continueButtonProps = { - block: true, - primary: true, + const continueButtonProps: ButtonSolidProps = { disabled: clausesChecked !== qtspClausesSelector.length, onPress: () => { if (isServiceActive) { @@ -168,33 +163,32 @@ const FciQtspClausesScreen = () => { showCheckService(); } }, - title: I18n.t("global.buttons.continue") + label: I18n.t("global.buttons.continue"), + accessibilityLabel: I18n.t("global.buttons.continue") }; return ( - - - - - {renderClausesFields()} - - + <> + + +

{I18n.t("features.fci.qtspTos.title")}

+ + {I18n.t("features.fci.qtspTos.subTitle")} + {renderClausesFields()} +
{fciAbortSignature} {fciCheckService} -
+ ); }; export default FciQtspClausesScreen; diff --git a/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx b/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx index c71ad3c4bce..93a0ad23bfe 100644 --- a/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx +++ b/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx @@ -1,13 +1,21 @@ import * as React from "react"; -import { View, SafeAreaView, SectionList, Platform } from "react-native"; +import { View, SectionList, ScrollView } from "react-native"; import { useSelector } from "react-redux"; import { StackActions, useNavigation } from "@react-navigation/native"; import * as RA from "fp-ts/lib/ReadonlyArray"; import * as O from "fp-ts/lib/Option"; import { constFalse, increment, pipe } from "fp-ts/lib/function"; -import { IconButton, IOColors, VSpacer } from "@pagopa/io-app-design-system"; -import { IOStyles } from "../../../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; +import { + ButtonSolidProps, + FooterWithButtons, + H2, + H4, + IconButton, + IOColors, + IOStyles, + VSpacer +} from "@pagopa/io-app-design-system"; +import { SafeAreaView } from "react-native-safe-area-context"; import I18n from "../../../../i18n"; import { emptyContextualHelp } from "../../../../utils/emptyContextualHelp"; import { useIODispatch } from "../../../../store/hooks"; @@ -19,9 +27,7 @@ import { DocumentDetailView } from "../../../../../definitions/fci/DocumentDetai import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; import { FciParamsList } from "../../navigation/params"; import SignatureFieldItem from "../../components/SignatureFieldItem"; -import { H3 } from "../../../../components/core/typography/H3"; import { SignatureField } from "../../../../../definitions/fci/SignatureField"; -import FooterWithButtons from "../../../../components/ui/FooterWithButtons"; import { FCI_ROUTES } from "../../navigation/routes"; import { fciDocumentSignaturesSelector } from "../../store/reducers/fciDocumentSignatures"; import { @@ -40,7 +46,6 @@ import { getSectionListData, orderSignatureFields } from "../../utils/signatureFields"; -import ScreenContent from "../../../../components/screens/ScreenContent"; import { LightModalContext } from "../../../../components/ui/LightModal"; import DocumentWithSignature from "../../components/DocumentWithSignature"; import GenericErrorComponent from "../../components/GenericErrorComponent"; @@ -50,6 +55,7 @@ import { } from "../../analytics"; import { useFciSignatureFieldInfo } from "../../hooks/useFciSignatureFieldInfo"; import { fciEnvironmentSelector } from "../../store/reducers/fciEnvironment"; +import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; export type FciSignatureFieldsScreenNavigationParams = Readonly<{ documentId: DocumentDetailView["id"]; @@ -165,9 +171,9 @@ const FciSignatureFieldsScreen = ( flexDirection: "row" }} > -

+

{clauseLabel} -

+ {/* Show info icon and signature field info only for unfair clauses @@ -190,7 +196,6 @@ const FciSignatureFieldsScreen = ( const renderSignatureFields = () => ( ); - const cancelButtonProps = { - block: true, - light: false, - bordered: true, + const cancelButtonProps: ButtonSolidProps = { onPress: present, - title: I18n.t("global.buttons.cancel") + label: I18n.t("global.buttons.cancel"), + accessibilityLabel: I18n.t("global.buttons.cancel") }; - const continueButtonProps = { - block: true, - primary: true, + const continueButtonProps: ButtonSolidProps = { disabled: !isClausesChecked, onPress: () => { if (currentDoc < documentsSelector.length - 1) { @@ -243,20 +244,21 @@ const FciSignatureFieldsScreen = ( }); } }, - title: + accessibilityLabel: + currentDoc < documentsSelector.length - 1 + ? I18n.t("global.buttons.continue") + : "Firma", + label: currentDoc < documentsSelector.length - 1 ? I18n.t("global.buttons.continue") : "Firma" }; - const customGoBack: React.ReactElement = ( - - ); + useHeaderSecondLevel({ + title: I18n.t("features.fci.title"), + supportRequest: true, + contextualHelp: emptyContextualHelp + }); if (isError) { return ( @@ -270,25 +272,25 @@ const FciSignatureFieldsScreen = ( } return ( - - - + <> + + +

{I18n.t("features.fci.signatureFields.title")}

{renderSignatureFields()} -
+
{fciAbortSignature} -
+ ); }; export default FciSignatureFieldsScreen; diff --git a/ts/features/fci/screens/valid/FciSignatureRequestsScreen.tsx b/ts/features/fci/screens/valid/FciSignatureRequestsScreen.tsx index 434e231d406..a01c98cc392 100644 --- a/ts/features/fci/screens/valid/FciSignatureRequestsScreen.tsx +++ b/ts/features/fci/screens/valid/FciSignatureRequestsScreen.tsx @@ -1,8 +1,7 @@ import * as React from "react"; -import { SafeAreaView, View, SectionList } from "react-native"; -import { IOStyles } from "../../../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; -import ScreenContent from "../../../../components/screens/ScreenContent"; +import { SectionList, ScrollView } from "react-native"; +import { H2, IOStyles } from "@pagopa/io-app-design-system"; +import { SafeAreaView } from "react-native-safe-area-context"; import SignatureRequestItem from "../../components/SignatureRequestItem"; import { useIODispatch, useIOSelector } from "../../../../store/hooks"; import { fciSignaturesListSelector } from "../../store/reducers/fciSignaturesList"; @@ -24,6 +23,8 @@ import { } from "../../../zendesk/store/actions"; import { ToolEnum } from "../../../../../definitions/content/AssistanceToolConfig"; import { SignatureRequestListView } from "../../../../../definitions/fci/SignatureRequestListView"; +import { emptyContextualHelp } from "../../../../utils/emptyContextualHelp"; +import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; const FciSignatureRequestsScreen = () => { const dispatch = useIODispatch(); @@ -62,6 +63,12 @@ const FciSignatureRequestsScreen = () => { dispatch(fciSignaturesListRequest.request()); }, [dispatch]); + useHeaderSecondLevel({ + title: I18n.t("features.fci.requests.header"), + contextualHelp: emptyContextualHelp, + supportRequest: true + }); + const renderSignatureRequests = () => ( ({ @@ -82,18 +89,14 @@ const FciSignatureRequestsScreen = () => { return ( - - - - - {renderSignatureRequests()} - - + <> + + +

{I18n.t("features.fci.requests.title")}

+ {renderSignatureRequests()} +
-
+
); }; diff --git a/ts/features/fci/screens/valid/FciThankyouScreen.tsx b/ts/features/fci/screens/valid/FciThankyouScreen.tsx index 5773969ffbb..fb5b1365bfb 100644 --- a/ts/features/fci/screens/valid/FciThankyouScreen.tsx +++ b/ts/features/fci/screens/valid/FciThankyouScreen.tsx @@ -1,23 +1,23 @@ import * as React from "react"; -import { SafeAreaView } from "react-native"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { constNull } from "fp-ts/lib/function"; -import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; +import { + ButtonSolidProps, + FooterWithButtons, + IOStyles, + Pictogram +} from "@pagopa/io-app-design-system"; +import { SafeAreaView } from "react-native-safe-area-context"; import { useIODispatch, useIOSelector } from "../../../../store/hooks"; -import { LoadingErrorComponent } from "../../../../components/LoadingErrorComponent"; import { fciSignatureSelector } from "../../store/reducers/fciSignature"; import GenericErrorComponent from "../../components/GenericErrorComponent"; -import paymentCompleted from "../../../../../img/pictograms/payment-completed.png"; -import { IOStyles } from "../../../../components/core/variables/IOStyles"; import I18n from "../../../../i18n"; -import FooterWithButtons from "../../../../components/ui/FooterWithButtons"; -import { InfoScreenComponent } from "../../../../components/infoScreen/InfoScreenComponent"; -import { renderInfoRasterImage } from "../../../../components/infoScreen/imageRendering"; import { fciEndRequest, fciStartRequest } from "../../store/actions"; import { trackFciUxSuccess } from "../../analytics"; import { TypeEnum as ClauseTypeEnum } from "../../../../../definitions/fci/Clause"; import { fciDocumentSignaturesSelector } from "../../store/reducers/fciDocumentSignatures"; import { getClausesCountByTypes } from "../../utils/signatureFields"; +import LoadingComponent from "../../components/LoadingComponent"; +import { InfoScreenComponent } from "../../components/InfoScreenComponent"; import { fciEnvironmentSelector } from "../../store/reducers/fciEnvironment"; const FciThankyouScreen = () => { @@ -26,13 +26,8 @@ const FciThankyouScreen = () => { const fciEnvironment = useIOSelector(fciEnvironmentSelector); const dispatch = useIODispatch(); - const LoadingComponent = () => ( - + const LoadingView = () => ( + ); const ErrorComponent = () => ( @@ -46,34 +41,39 @@ const FciThankyouScreen = () => { /> ); - const SuccessComponent = () => ( - - - - dispatch(fciEndRequest()), - title: I18n.t("features.fci.thankYouPage.cta"), - block: true, - light: false, - bordered: true, - testID: "FciTypSuccessFooterButton" - }} - /> - - - ); + const SuccessComponent = () => { + const continueButtonProps: ButtonSolidProps = { + onPress: () => dispatch(fciEndRequest()), + label: I18n.t("features.fci.thankYouPage.cta"), + accessibilityLabel: I18n.t("features.fci.thankYouPage.cta"), + testID: "FciTypCloseButton" + }; + return ( + <> + + } + title={I18n.t("features.fci.thankYouPage.title")} + body={I18n.t("features.fci.thankYouPage.content")} + /> + + + + ); + }; return pot.fold( fciCreateSignatureSelector, - () => , - () => , - () => , + () => , + () => , + () => , _ => , _ => { trackFciUxSuccess( @@ -87,8 +87,8 @@ const FciThankyouScreen = () => { ); return ; }, - () => , - () => , + () => , + () => , _ => ); }; From 00743fd5708ce4af62039ca7f6422bd22dbd747e Mon Sep 17 00:00:00 2001 From: Alice Di Rico <83651704+Ladirico@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:12:55 +0100 Subject: [PATCH 003/190] fix: [IOPID-1436], [IOPID-1453] Delete helper button and header title on email validate screen and add logic to show support buttons in faq screen (#5484) ## Short description delete helper button and header title on email validate screen and add logic to show support buttons in faq screen. ## List of changes proposed in this pull request ### [IOPID-1436]: delete helper button and header title on email validate screen Delete header title and helper in validate/validated email screens.

| validate email | validated email | | - | - | | delete_header_validate_Email | delete_header_email_validated |

### How to test Run the application and execute the email validation flow ### [IOPID-1453]: add logic to show support buttons in faq screen Change logic to show support buttons. The buttons for requesting assistance are only shown if the user has the e-mail validated or if the user is not yet logged in with SPID/CIE. If the user has not validated the email, the buttons are not shown.

| not logged | logged with validated email | logged no validated email | | - | - | - | | visible_assistence_buttons_before_auth | visible_assistence_buttons | not_visible_assistence_buttons_email_not_validated |

### How to test Run the application with [this line commented](https://github.com/pagopa/io-app/blob/6c076a1fee25c0a0853644d63aa894ff26854aa3/ts/sagas/startup.ts#L492) in order to disable the blocks that do not allow you to continue in the app if you do not have a validated email [IOPID-1436]: https://pagopa.atlassian.net/browse/IOPID-1436?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ [IOPID-1453]: https://pagopa.atlassian.net/browse/IOPID-1453?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ --- .../NewRemindEmailValidationOverlay.tsx | 5 - .../components/ZendeskSupportComponent.tsx | 100 ++++++++++-------- ts/store/reducers/assistanceTools.ts | 13 +-- ts/utils/__tests__/supportAssistance.test.ts | 12 +-- ts/utils/supportAssistance.ts | 7 +- 5 files changed, 64 insertions(+), 73 deletions(-) diff --git a/ts/components/NewRemindEmailValidationOverlay.tsx b/ts/components/NewRemindEmailValidationOverlay.tsx index 504a705386b..8c2f931172b 100644 --- a/ts/components/NewRemindEmailValidationOverlay.tsx +++ b/ts/components/NewRemindEmailValidationOverlay.tsx @@ -213,11 +213,6 @@ const NewRemindEmailValidationOverlay = (props: Props) => { diff --git a/ts/features/zendesk/components/ZendeskSupportComponent.tsx b/ts/features/zendesk/components/ZendeskSupportComponent.tsx index 95816b08f05..3917b028915 100644 --- a/ts/features/zendesk/components/ZendeskSupportComponent.tsx +++ b/ts/features/zendesk/components/ZendeskSupportComponent.tsx @@ -18,7 +18,10 @@ import { IOStackNavigationProp } from "../../../navigation/params/AppParamsList"; import { useIOSelector } from "../../../store/hooks"; -import { profileSelector } from "../../../store/reducers/profile"; +import { + isProfileEmailValidatedSelector, + profileSelector +} from "../../../store/reducers/profile"; import { showToast } from "../../../utils/showToast"; import { openWebUrl } from "../../../utils/url"; import ZENDESK_ROUTES from "../navigation/routes"; @@ -48,6 +51,7 @@ const ZendeskSupportComponent = ({ const maybeProfile: O.Option = pot.toOption(profile); const zendeskRemoteConfig = useIOSelector(zendeskConfigSelector); const navigation = useNavigation>(); + const isEmailValidated = useIOSelector(isProfileEmailValidatedSelector); const handleContactSupportPress = React.useCallback( () => @@ -67,6 +71,8 @@ const ZendeskSupportComponent = ({ ] ); + const showRequestSupportButtons = isEmailValidated || !pot.isSome(profile); + return ( <>

{I18n.t("support.helpCenter.supportComponent.title")}

@@ -91,52 +97,56 @@ const ZendeskSupportComponent = ({ - { - void mixpanelTrack("ZENDESK_SHOW_TICKETS_STARTS"); - if (O.isNone(maybeProfile)) { - navigation.navigate(ZENDESK_ROUTES.MAIN, { - screen: ZENDESK_ROUTES.SEE_REPORTS_ROUTERS, - params: { - assistanceForPayment, - assistanceForCard, - assistanceForFci - } - }); - } else { - navigation.navigate(ZENDESK_ROUTES.MAIN, { - screen: ZENDESK_ROUTES.ASK_SEE_REPORTS_PERMISSIONS, - params: { - assistanceForPayment, - assistanceForCard, - assistanceForFci + {showRequestSupportButtons && ( + <> + { + void mixpanelTrack("ZENDESK_SHOW_TICKETS_STARTS"); + if (O.isNone(maybeProfile)) { + navigation.navigate(ZENDESK_ROUTES.MAIN, { + screen: ZENDESK_ROUTES.SEE_REPORTS_ROUTERS, + params: { + assistanceForPayment, + assistanceForCard, + assistanceForFci + } + }); + } else { + navigation.navigate(ZENDESK_ROUTES.MAIN, { + screen: ZENDESK_ROUTES.ASK_SEE_REPORTS_PERMISSIONS, + params: { + assistanceForPayment, + assistanceForCard, + assistanceForFci + } + }); } - }); - } - }} - style={{ - alignSelf: "stretch" - }} - disabled={false} - bordered={true} - testID={"showTicketsButton"} - > - - - + }} + style={{ + alignSelf: "stretch" + }} + disabled={false} + bordered={true} + testID={"showTicketsButton"} + > + + + - - - + + + + + )} ); }; diff --git a/ts/store/reducers/assistanceTools.ts b/ts/store/reducers/assistanceTools.ts index ec01f4826c8..f58e131b0b0 100644 --- a/ts/store/reducers/assistanceTools.ts +++ b/ts/store/reducers/assistanceTools.ts @@ -1,5 +1,4 @@ import { combineReducers } from "redux"; -import * as pot from "@pagopa/ts-commons/lib/pot"; import { createSelector } from "reselect"; import { Action } from "../actions/types"; import zendeskReducer, { @@ -10,7 +9,6 @@ import { canShowHelp } from "../../utils/supportAssistance"; import { assistanceToolConfigSelector } from "./backendStatus"; -import { isProfileEmailValidatedSelector, profileSelector } from "./profile"; export type AssistanceToolsState = { zendesk: ZendeskState; @@ -21,17 +19,12 @@ const assistanceToolsReducer = combineReducers({ }); // This selector contains the logic to show or not the help button: -// if remote FF is zendesk + ff local + the profile is not potSome or the email is validated +// if remote FF is zendesk + ff local export const canShowHelpSelector = createSelector( assistanceToolConfigSelector, - profileSelector, - isProfileEmailValidatedSelector, - (assistanceToolConfig, profile, isProfileEmailValidated): boolean => { + (assistanceToolConfig): boolean => { const remoteTool = assistanceToolRemoteConfig(assistanceToolConfig); - return canShowHelp( - remoteTool, - !pot.isSome(profile) || isProfileEmailValidated - ); + return canShowHelp(remoteTool); } ); diff --git a/ts/utils/__tests__/supportAssistance.test.ts b/ts/utils/__tests__/supportAssistance.test.ts index ed6499c7d13..f26b926ada1 100644 --- a/ts/utils/__tests__/supportAssistance.test.ts +++ b/ts/utils/__tests__/supportAssistance.test.ts @@ -29,16 +29,12 @@ describe("anonymousAssistanceAddress", () => { describe("canShowHelp", () => { it("if assistanceTool is Zendesk, should return true if the email is validated", () => { - expect(canShowHelp(ToolEnum.zendesk, true)).toBeTruthy(); - expect(canShowHelp(ToolEnum.zendesk, false)).toBeFalsy(); + expect(canShowHelp(ToolEnum.zendesk)).toBeTruthy(); }); it("if assistanceTool is instabug, web or none, should return false", () => { - expect(canShowHelp(ToolEnum.instabug, true)).toBeFalsy(); - expect(canShowHelp(ToolEnum.instabug, false)).toBeFalsy(); - expect(canShowHelp(ToolEnum.web, true)).toBeFalsy(); - expect(canShowHelp(ToolEnum.none, true)).toBeFalsy(); - expect(canShowHelp(ToolEnum.web, false)).toBeFalsy(); - expect(canShowHelp(ToolEnum.none, false)).toBeFalsy(); + expect(canShowHelp(ToolEnum.instabug)).toBeFalsy(); + expect(canShowHelp(ToolEnum.web)).toBeFalsy(); + expect(canShowHelp(ToolEnum.none)).toBeFalsy(); }); }); diff --git a/ts/utils/supportAssistance.ts b/ts/utils/supportAssistance.ts index ab446628975..0bafd417473 100644 --- a/ts/utils/supportAssistance.ts +++ b/ts/utils/supportAssistance.ts @@ -144,13 +144,10 @@ export const resetAssistanceData = () => { export const hasSubCategories = (zendeskCategory: ZendeskCategory): boolean => (zendeskCategory.zendeskSubCategories?.subCategories ?? []).length > 0; // help can be shown only when remote FF is zendesk + local FF + emailValidated -export const canShowHelp = ( - assistanceTool: ToolEnum, - isEmailValidated: boolean -): boolean => { +export const canShowHelp = (assistanceTool: ToolEnum): boolean => { switch (assistanceTool) { case ToolEnum.zendesk: - return zendeskEnabled && isEmailValidated; + return zendeskEnabled; case ToolEnum.instabug: case ToolEnum.web: case ToolEnum.none: From 63fd1c2a73bd3408996cd35d02e145e9e195579a Mon Sep 17 00:00:00 2001 From: Federico Mastrini Date: Mon, 5 Feb 2024 14:57:08 +0100 Subject: [PATCH 004/190] chore: [IOBP-529] Retrieve payments methods list from eCommerce client endpoint (#5479) ## Short description This PR replaces wallet client endpoints in the payment flow with the eCommerce client endpoints ## List of changes proposed in this pull request - Updated eCommerce API definitions - Replaced API calls in payment flow sagas ## How to test In **UAT environment**, start a new payment flow from **Profile > Playgrounds > New Wallet > Payment** using the following data: - Payment number: **302000190000909881** (add 1 if not working) - Fiscal code: **77777777777** You should be able to finalize a payment with a success outcome. --------- Co-authored-by: Alessandro Izzo Co-authored-by: Martino Cesari Tomba <60693085+forrest57@users.noreply.github.com> --- package.json | 2 +- ts/features/walletV3/common/saga/index.ts | 2 +- .../details/types/UIWalletInfoDetails.ts | 2 +- ts/features/walletV3/payment/saga/index.ts | 12 +++++------ .../handleWalletPaymentGetAllMethods.test.ts | 17 +++++++++++++--- .../handleWalletPaymentGetUserWallets.test.ts | 11 +++++++++- .../handleWalletPaymentGetAllMethods.ts | 20 ++++++++++++++++--- .../handleWalletPaymentGetUserWallets.ts | 20 ++++++++++++++++--- .../screens/WalletPaymentPickMethodScreen.tsx | 2 +- .../payment/store/actions/networking.ts | 10 +++++----- .../payment/store/actions/orchestration.ts | 2 +- .../walletV3/payment/store/reducers/index.ts | 6 +++--- 12 files changed, 76 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index ac533d5a0ed..d5d567cdd54 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "lollipop_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_lollipop_first_consumer.yaml", "fast_login_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/openapi/generated/api_fast_login.yaml", "pagopa_api_walletv3": "https://raw.githubusercontent.com/pagopa/pagopa-infra/740e7dcc5ea2ea19639316fea6797bbd504dd0ae/src/domains/wallet-app/api/payment-wallet/v1/_openapi.json.tpl", - "pagopa_api_ecommerce": "https://raw.githubusercontent.com/pagopa/pagopa-infra/a5299db39de86a951d353fdc2bfed48188c0c125/src/domains/ecommerce-app/api/ecommerce-io/v1/_openapi.json.tpl", + "pagopa_api_ecommerce": "https://raw.githubusercontent.com/pagopa/pagopa-infra/279c7027edfa031b1d0de4490f8c5867a8e1eed7/src/domains/ecommerce-app/api/ecommerce-io/v1/_openapi.json.tpl", "private": true, "scripts": { "start": "react-native start", diff --git a/ts/features/walletV3/common/saga/index.ts b/ts/features/walletV3/common/saga/index.ts index cc9f9eb76a9..4c6ca99b228 100644 --- a/ts/features/walletV3/common/saga/index.ts +++ b/ts/features/walletV3/common/saga/index.ts @@ -20,7 +20,7 @@ export function* watchWalletSaga(walletToken: string): SagaIterator { const paymentClient = createPaymentClient(walletBaseUrl, walletToken); yield* fork(watchWalletOnboardingSaga, walletClient); - yield* fork(watchWalletPaymentSaga, walletClient, paymentClient); yield* fork(watchWalletDetailsSaga, walletClient); yield* fork(watchWalletTransactionSaga, walletClient); + yield* fork(watchWalletPaymentSaga, paymentClient); } diff --git a/ts/features/walletV3/details/types/UIWalletInfoDetails.ts b/ts/features/walletV3/details/types/UIWalletInfoDetails.ts index 56f40ccbd47..5ba809c575e 100644 --- a/ts/features/walletV3/details/types/UIWalletInfoDetails.ts +++ b/ts/features/walletV3/details/types/UIWalletInfoDetails.ts @@ -3,7 +3,7 @@ import { WalletInfoDetails1, WalletInfoDetails2, WalletInfoDetails3 -} from "../../../../../definitions/pagopa/walletv3/WalletInfoDetails"; +} from "../../../../../definitions/pagopa/ecommerce/WalletInfoDetails"; /** * Transforms all required props from WalletInfoDetails1 to partial diff --git a/ts/features/walletV3/payment/saga/index.ts b/ts/features/walletV3/payment/saga/index.ts index 450a3a8a356..a2c72764936 100644 --- a/ts/features/walletV3/payment/saga/index.ts +++ b/ts/features/walletV3/payment/saga/index.ts @@ -1,6 +1,5 @@ import { SagaIterator } from "redux-saga"; import { takeLatest } from "typed-redux-saga/macro"; -import { WalletClient } from "../../common/api/client"; import { PaymentClient } from "../api/client"; import { walletPaymentAuthorization, @@ -13,22 +12,21 @@ import { walletPaymentGetUserWallets, walletPaymentNewSessionToken } from "../store/actions/networking"; +import { handleWalletPaymentAuthorization } from "./networking/handleWalletPaymentAuthorization"; import { handleWalletPaymentCalculateFees } from "./networking/handleWalletPaymentCalculateFees"; import { handleWalletPaymentCreateTransaction } from "./networking/handleWalletPaymentCreateTransaction"; +import { handleWalletPaymentDeleteTransaction } from "./networking/handleWalletPaymentDeleteTransaction"; import { handleWalletPaymentGetAllMethods } from "./networking/handleWalletPaymentGetAllMethods"; import { handleWalletPaymentGetDetails } from "./networking/handleWalletPaymentGetDetails"; +import { handleWalletPaymentGetTransactionInfo } from "./networking/handleWalletPaymentGetTransactionInfo"; import { handleWalletPaymentGetUserWallets } from "./networking/handleWalletPaymentGetUserWallets"; -import { handleWalletPaymentAuthorization } from "./networking/handleWalletPaymentAuthorization"; -import { handleWalletPaymentDeleteTransaction } from "./networking/handleWalletPaymentDeleteTransaction"; import { handleWalletPaymentNewSessionToken } from "./networking/handleWalletPaymentNewSessionToken"; -import { handleWalletPaymentGetTransactionInfo } from "./networking/handleWalletPaymentGetTransactionInfo"; /** * Handle the pagoPA payments requests * @param bearerToken */ export function* watchWalletPaymentSaga( - walletClient: WalletClient, paymentClient: PaymentClient ): SagaIterator { yield* takeLatest( @@ -46,13 +44,13 @@ export function* watchWalletPaymentSaga( yield* takeLatest( walletPaymentGetAllMethods.request, handleWalletPaymentGetAllMethods, - walletClient.getAllPaymentMethods + paymentClient.getAllPaymentMethods ); yield* takeLatest( walletPaymentGetUserWallets.request, handleWalletPaymentGetUserWallets, - walletClient.getWalletsByIdUser + paymentClient.getWalletsByIdUser ); yield* takeLatest( diff --git a/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetAllMethods.test.ts b/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetAllMethods.test.ts index 6644848ac9f..b18184b62c3 100644 --- a/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetAllMethods.test.ts +++ b/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetAllMethods.test.ts @@ -2,15 +2,19 @@ import * as E from "fp-ts/lib/Either"; import { testSaga } from "redux-saga-test-plan"; import { getType } from "typesafe-actions"; import { Range } from "../../../../../../../definitions/pagopa/ecommerce/Range"; -import { PaymentMethodStatusEnum } from "../../../../../../../definitions/pagopa/walletv3/PaymentMethodStatus"; -import { PaymentMethodsResponse } from "../../../../../../../definitions/pagopa/walletv3/PaymentMethodsResponse"; +import { PaymentMethodStatusEnum } from "../../../../../../../definitions/pagopa/ecommerce/PaymentMethodStatus"; +import { PaymentMethodsResponse } from "../../../../../../../definitions/pagopa/ecommerce/PaymentMethodsResponse"; import { getGenericError } from "../../../../../../utils/errors"; import { readablePrivacyReport } from "../../../../../../utils/reporters"; import { withRefreshApiCall } from "../../../../../fastLogin/saga/utils"; import { walletPaymentGetAllMethods } from "../../../store/actions/networking"; import { handleWalletPaymentGetAllMethods } from "../handleWalletPaymentGetAllMethods"; +import { PaymentMethodManagementTypeEnum } from "../../../../../../../definitions/pagopa/ecommerce/PaymentMethodManagementType"; +import { selectWalletPaymentSessionToken } from "../../../store/selectors"; describe("Test handleWalletPaymentGetAllMethods saga", () => { + const T_SESSION_TOKEN = "ABCD"; + it(`should put ${getType( walletPaymentGetAllMethods.success )} when getAllPaymentMethods is 200`, () => { @@ -28,7 +32,8 @@ describe("Test handleWalletPaymentGetAllMethods saga", () => { max: 10 as Range["max"] } ], - status: PaymentMethodStatusEnum.ENABLED + status: PaymentMethodStatusEnum.ENABLED, + methodManagement: PaymentMethodManagementTypeEnum.ONBOARDABLE } ] }; @@ -39,6 +44,8 @@ describe("Test handleWalletPaymentGetAllMethods saga", () => { walletPaymentGetAllMethods.request() ) .next() + .select(selectWalletPaymentSessionToken) + .next(T_SESSION_TOKEN) .call( withRefreshApiCall, mockGetAllPaymentMethods(), @@ -61,6 +68,8 @@ describe("Test handleWalletPaymentGetAllMethods saga", () => { walletPaymentGetAllMethods.request() ) .next() + .select(selectWalletPaymentSessionToken) + .next(T_SESSION_TOKEN) .call( withRefreshApiCall, mockGetAllPaymentMethods(), @@ -87,6 +96,8 @@ describe("Test handleWalletPaymentGetAllMethods saga", () => { walletPaymentGetAllMethods.request() ) .next() + .select(selectWalletPaymentSessionToken) + .next(T_SESSION_TOKEN) .call( withRefreshApiCall, mockGetAllPaymentMethods(), diff --git a/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetUserWallets.test.ts b/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetUserWallets.test.ts index ef5a876faf6..f187b548c47 100644 --- a/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetUserWallets.test.ts +++ b/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentGetUserWallets.test.ts @@ -4,12 +4,15 @@ import { getType } from "typesafe-actions"; import { withRefreshApiCall } from "../../../../../fastLogin/saga/utils"; import { walletPaymentGetUserWallets } from "../../../store/actions/networking"; import { handleWalletPaymentGetUserWallets } from "../handleWalletPaymentGetUserWallets"; -import { Wallets } from "../../../../../../../definitions/pagopa/walletv3/Wallets"; +import { Wallets } from "../../../../../../../definitions/pagopa/ecommerce/Wallets"; import { getGenericError } from "../../../../../../utils/errors"; import { readablePrivacyReport } from "../../../../../../utils/reporters"; import { WalletStatusEnum } from "../../../../../../../definitions/pagopa/walletv3/WalletStatus"; +import { selectWalletPaymentSessionToken } from "../../../store/selectors"; describe("Test handleWalletPaymentGetUserWallets saga", () => { + const T_SESSION_TOKEN = "ABCD"; + it(`should put ${getType( walletPaymentGetUserWallets.success )} when getWalletsByIdUser is 200`, () => { @@ -33,6 +36,8 @@ describe("Test handleWalletPaymentGetUserWallets saga", () => { walletPaymentGetUserWallets.request() ) .next() + .select(selectWalletPaymentSessionToken) + .next(T_SESSION_TOKEN) .call( withRefreshApiCall, mockGetWalletsByIdUser(), @@ -55,6 +60,8 @@ describe("Test handleWalletPaymentGetUserWallets saga", () => { walletPaymentGetUserWallets.request() ) .next() + .select(selectWalletPaymentSessionToken) + .next(T_SESSION_TOKEN) .call( withRefreshApiCall, mockGetWalletsByIdUser(), @@ -81,6 +88,8 @@ describe("Test handleWalletPaymentGetUserWallets saga", () => { walletPaymentGetUserWallets.request() ) .next() + .select(selectWalletPaymentSessionToken) + .next(T_SESSION_TOKEN) .call( withRefreshApiCall, mockGetWalletsByIdUser(), diff --git a/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetAllMethods.ts b/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetAllMethods.ts index 59210a00403..40d729fd973 100644 --- a/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetAllMethods.ts +++ b/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetAllMethods.ts @@ -6,14 +6,28 @@ import { SagaCallReturnType } from "../../../../../types/utils"; import { getGenericError, getNetworkError } from "../../../../../utils/errors"; import { readablePrivacyReport } from "../../../../../utils/reporters"; import { withRefreshApiCall } from "../../../../fastLogin/saga/utils"; -import { WalletClient } from "../../../common/api/client"; +import { PaymentClient } from "../../api/client"; import { walletPaymentGetAllMethods } from "../../store/actions/networking"; +import { getOrFetchWalletSessionToken } from "./handleWalletPaymentNewSessionToken"; export function* handleWalletPaymentGetAllMethods( - getAllPaymentMethods: WalletClient["getAllPaymentMethods"], + getAllPaymentMethods: PaymentClient["getAllPaymentMethods"], action: ActionType<(typeof walletPaymentGetAllMethods)["request"]> ) { - const getAllPaymentMethodsRequest = getAllPaymentMethods({}); + const sessionToken = yield* getOrFetchWalletSessionToken(); + + if (sessionToken === undefined) { + yield* put( + walletPaymentGetAllMethods.failure({ + ...getGenericError(new Error(`Missing session token`)) + }) + ); + return; + } + + const getAllPaymentMethodsRequest = getAllPaymentMethods({ + eCommerceSessionToken: sessionToken + }); try { const getAllPaymentMethodsResult = (yield* call( diff --git a/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetUserWallets.ts b/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetUserWallets.ts index e087e8ac340..5455d7cf0f0 100644 --- a/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetUserWallets.ts +++ b/ts/features/walletV3/payment/saga/networking/handleWalletPaymentGetUserWallets.ts @@ -6,14 +6,28 @@ import { SagaCallReturnType } from "../../../../../types/utils"; import { getGenericError, getNetworkError } from "../../../../../utils/errors"; import { readablePrivacyReport } from "../../../../../utils/reporters"; import { withRefreshApiCall } from "../../../../fastLogin/saga/utils"; -import { WalletClient } from "../../../common/api/client"; +import { PaymentClient } from "../../api/client"; import { walletPaymentGetUserWallets } from "../../store/actions/networking"; +import { getOrFetchWalletSessionToken } from "./handleWalletPaymentNewSessionToken"; export function* handleWalletPaymentGetUserWallets( - getWalletsByIdUser: WalletClient["getWalletsByIdUser"], + getWalletsByIdUser: PaymentClient["getWalletsByIdUser"], action: ActionType<(typeof walletPaymentGetUserWallets)["request"]> ) { - const getWalletsByIdUserRequest = getWalletsByIdUser({}); + const sessionToken = yield* getOrFetchWalletSessionToken(); + + if (sessionToken === undefined) { + yield* put( + walletPaymentGetUserWallets.failure({ + ...getGenericError(new Error(`Missing session token`)) + }) + ); + return; + } + + const getWalletsByIdUserRequest = getWalletsByIdUser({ + eCommerceSessionToken: sessionToken + }); try { const getWalletsByIdUserResult = (yield* call( diff --git a/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx b/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx index 74c73aab212..d939d5172de 100644 --- a/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx +++ b/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx @@ -19,7 +19,7 @@ import { capitalize } from "lodash"; import React, { useEffect, useMemo } from "react"; import { View } from "react-native"; import { PaymentMethodResponse } from "../../../../../definitions/pagopa/walletv3/PaymentMethodResponse"; -import { WalletInfo } from "../../../../../definitions/pagopa/walletv3/WalletInfo"; +import { WalletInfo } from "../../../../../definitions/pagopa/ecommerce/WalletInfo"; import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; import I18n from "../../../../i18n"; import { diff --git a/ts/features/walletV3/payment/store/actions/networking.ts b/ts/features/walletV3/payment/store/actions/networking.ts index 9065a94feac..adbcb57f453 100644 --- a/ts/features/walletV3/payment/store/actions/networking.ts +++ b/ts/features/walletV3/payment/store/actions/networking.ts @@ -1,18 +1,18 @@ import { ActionType, createAsyncAction } from "typesafe-actions"; import { AmountEuroCents } from "../../../../../../definitions/pagopa/ecommerce/AmountEuroCents"; +import { CalculateFeeRequest } from "../../../../../../definitions/pagopa/ecommerce/CalculateFeeRequest"; import { CalculateFeeResponse } from "../../../../../../definitions/pagopa/ecommerce/CalculateFeeResponse"; +import { NewSessionTokenResponse } from "../../../../../../definitions/pagopa/ecommerce/NewSessionTokenResponse"; import { NewTransactionRequest } from "../../../../../../definitions/pagopa/ecommerce/NewTransactionRequest"; import { NewTransactionResponse } from "../../../../../../definitions/pagopa/ecommerce/NewTransactionResponse"; import { PaymentRequestsGetResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentRequestsGetResponse"; import { RequestAuthorizationResponse } from "../../../../../../definitions/pagopa/ecommerce/RequestAuthorizationResponse"; import { RptId } from "../../../../../../definitions/pagopa/ecommerce/RptId"; -import { PaymentMethodsResponse } from "../../../../../../definitions/pagopa/walletv3/PaymentMethodsResponse"; -import { Wallets } from "../../../../../../definitions/pagopa/walletv3/Wallets"; +import { TransactionInfo } from "../../../../../../definitions/pagopa/ecommerce/TransactionInfo"; +import { Wallets } from "../../../../../../definitions/pagopa/ecommerce/Wallets"; +import { PaymentMethodsResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentMethodsResponse"; import { NetworkError } from "../../../../../utils/errors"; import { WalletPaymentFailure } from "../../types/failure"; -import { NewSessionTokenResponse } from "../../../../../../definitions/pagopa/ecommerce/NewSessionTokenResponse"; -import { TransactionInfo } from "../../../../../../definitions/pagopa/ecommerce/TransactionInfo"; -import { CalculateFeeRequest } from "../../../../../../definitions/pagopa/ecommerce/CalculateFeeRequest"; export const walletPaymentNewSessionToken = createAsyncAction( "WALLET_PAYMENT_NEW_SESSION_TOKEN_REQUEST", diff --git a/ts/features/walletV3/payment/store/actions/orchestration.ts b/ts/features/walletV3/payment/store/actions/orchestration.ts index cba31c50fa9..88e3286fe0e 100644 --- a/ts/features/walletV3/payment/store/actions/orchestration.ts +++ b/ts/features/walletV3/payment/store/actions/orchestration.ts @@ -1,6 +1,6 @@ import { ActionType, createStandardAction } from "typesafe-actions"; import { Bundle } from "../../../../../../definitions/pagopa/ecommerce/Bundle"; -import { WalletInfo } from "../../../../../../definitions/pagopa/walletv3/WalletInfo"; +import { WalletInfo } from "../../../../../../definitions/pagopa/ecommerce/WalletInfo"; /** * Action to initialize the state of a payment, optionally you can specify the route to go back to diff --git a/ts/features/walletV3/payment/store/reducers/index.ts b/ts/features/walletV3/payment/store/reducers/index.ts index 0e9302a0ebd..6bcb68d26a3 100644 --- a/ts/features/walletV3/payment/store/reducers/index.ts +++ b/ts/features/walletV3/payment/store/reducers/index.ts @@ -8,9 +8,9 @@ import { Bundle } from "../../../../../../definitions/pagopa/ecommerce/Bundle"; import { PaymentRequestsGetResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentRequestsGetResponse"; import { RptId } from "../../../../../../definitions/pagopa/ecommerce/RptId"; import { TransactionInfo } from "../../../../../../definitions/pagopa/ecommerce/TransactionInfo"; -import { PaymentMethodsResponse } from "../../../../../../definitions/pagopa/walletv3/PaymentMethodsResponse"; -import { WalletInfo } from "../../../../../../definitions/pagopa/walletv3/WalletInfo"; -import { Wallets } from "../../../../../../definitions/pagopa/walletv3/Wallets"; +import { PaymentMethodsResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentMethodsResponse"; +import { WalletInfo } from "../../../../../../definitions/pagopa/ecommerce/WalletInfo"; +import { Wallets } from "../../../../../../definitions/pagopa/ecommerce/Wallets"; import NavigationService from "../../../../../navigation/NavigationService"; import { AppParamsList } from "../../../../../navigation/params/AppParamsList"; import { Action } from "../../../../../store/actions/types"; From a57d5e2342be768bea5f3d5a92ae254dbd3e3725 Mon Sep 17 00:00:00 2001 From: Alessandro Izzo Date: Tue, 6 Feb 2024 09:26:03 +0100 Subject: [PATCH 005/190] fix: [IOBP-458,IOBP-459] Added accessibility label to the RNavScreenWithLargeHeader component (#5467) ## Short description This PR adds the `accessibilityLabel` to the RNavScreenWithLargeHeader title and inside the new Transaction details screen has been added the role of the accessibility label ## List of changes proposed in this pull request - Added `accessibilityLabel` into `title` RNavScreenWithLargeHeader prop - Adapted the already used RNavScreenWithLargeHeader with the new title object prop ## How to test - Enable the DS flag - With the voiceover enabled, navigate to the new Transaction Screen details - You should be able to hear the "heading" role by the voiceover tapping on the header title ## Acknowledgment @dmnplb @thisisjp --------- Co-authored-by: Martino Cesari Tomba <60693085+forrest57@users.noreply.github.com> Co-authored-by: Damiano Plebani --- .../ui/RNavScreenWithLargeHeader.tsx | 20 ++++++++++++++----- .../core/DSHeaderSecondLevel.tsx | 6 +++++- .../screens/IdPayOperationsListScreen.tsx | 8 +++++--- .../WalletTransactionDetailsScreen.tsx | 4 +++- .../WalletTransactionOperationDetails.tsx | 4 +++- .../OnboardingServicesPreferenceScreen.tsx | 4 +++- .../onboarding/OnboardingShareDataScreen.tsx | 6 ++++-- .../profile/CalendarsPreferencesScreen.tsx | 4 +++- .../profile/LanguagesPreferencesScreen.tsx | 4 +++- .../NotificationsPreferencesScreen.tsx | 4 +++- ts/screens/profile/PreferencesScreen.tsx | 4 +++- ts/screens/profile/PrivacyMainScreen.tsx | 4 +++- ts/screens/profile/ProfileAboutApp.tsx | 4 +++- ts/screens/profile/ProfileDataScreen.tsx | 4 +++- .../profile/RemoveAccountInfoScreen.tsx | 4 +++- ts/screens/profile/SecurityScreen.tsx | 4 +++- .../profile/ServicesPreferenceScreen.tsx | 4 +++- ts/screens/profile/ShareDataScreen.tsx | 6 ++++-- 18 files changed, 72 insertions(+), 26 deletions(-) diff --git a/ts/components/ui/RNavScreenWithLargeHeader.tsx b/ts/components/ui/RNavScreenWithLargeHeader.tsx index 11e012f0174..3fcc1f46e65 100644 --- a/ts/components/ui/RNavScreenWithLargeHeader.tsx +++ b/ts/components/ui/RNavScreenWithLargeHeader.tsx @@ -22,11 +22,16 @@ import { import { SupportRequestParams } from "../../hooks/useStartSupportRequest"; import I18n from "../../i18n"; +export type LargeHeaderTitleProps = { + label: string; + accessibilityLabel?: string; + testID?: string; +}; + type Props = { children: React.ReactNode; fixedBottomSlot?: React.ReactNode; - title: string; - titleTestID?: string; + title: LargeHeaderTitleProps; description?: string; goBack?: BackProps["goBack"]; headerActionsProp?: HeaderActionProps; @@ -49,7 +54,6 @@ export const RNavScreenWithLargeHeader = ({ children, fixedBottomSlot, title, - titleTestID, goBack, description, contextualHelp, @@ -75,7 +79,7 @@ export const RNavScreenWithLargeHeader = ({ const headerProps: ComponentProps = useHeaderProps({ backAccessibilityLabel: I18n.t("global.buttons.back"), goBack: goBack ?? navigation.goBack, - title, + title: title.label, scrollValues: { contentOffsetY: translationY, triggerOffset: titleHeight @@ -109,7 +113,13 @@ export const RNavScreenWithLargeHeader = ({ style={IOStyles.horizontalContentPadding} onLayout={getTitleHeight} > -

{title}

+

+ {title.label} +

{description && ( diff --git a/ts/features/design-system/core/DSHeaderSecondLevel.tsx b/ts/features/design-system/core/DSHeaderSecondLevel.tsx index 1838a0a2276..89d44f1a5c2 100644 --- a/ts/features/design-system/core/DSHeaderSecondLevel.tsx +++ b/ts/features/design-system/core/DSHeaderSecondLevel.tsx @@ -3,7 +3,11 @@ import { Body, VSpacer } from "@pagopa/io-app-design-system"; import { RNavScreenWithLargeHeader } from "../../../components/ui/RNavScreenWithLargeHeader"; export const DSHeaderSecondLevel = () => ( - + {[...Array(50)].map((_el, i) => ( Repeated text diff --git a/ts/features/idpay/details/screens/IdPayOperationsListScreen.tsx b/ts/features/idpay/details/screens/IdPayOperationsListScreen.tsx index db3e6ae36bd..e9342505ea8 100644 --- a/ts/features/idpay/details/screens/IdPayOperationsListScreen.tsx +++ b/ts/features/idpay/details/screens/IdPayOperationsListScreen.tsx @@ -130,9 +130,11 @@ export const IdPayOperationsListScreen = () => { return ( diff --git a/ts/features/walletV3/transaction/screens/WalletTransactionDetailsScreen.tsx b/ts/features/walletV3/transaction/screens/WalletTransactionDetailsScreen.tsx index bbf9c922b7b..dc414f0414a 100644 --- a/ts/features/walletV3/transaction/screens/WalletTransactionDetailsScreen.tsx +++ b/ts/features/walletV3/transaction/screens/WalletTransactionDetailsScreen.tsx @@ -76,7 +76,9 @@ const WalletTransactionDetailsScreen = () => { return ( { return ( {operationDetails.importo && ( diff --git a/ts/screens/onboarding/OnboardingServicesPreferenceScreen.tsx b/ts/screens/onboarding/OnboardingServicesPreferenceScreen.tsx index 04aa858273a..74909f12f89 100644 --- a/ts/screens/onboarding/OnboardingServicesPreferenceScreen.tsx +++ b/ts/screens/onboarding/OnboardingServicesPreferenceScreen.tsx @@ -115,7 +115,9 @@ const OnboardingServicesPreferenceScreen = ( const showBadge = !isFirstOnboarding; return ( { return ( diff --git a/ts/screens/profile/CalendarsPreferencesScreen.tsx b/ts/screens/profile/CalendarsPreferencesScreen.tsx index ce66ab23c66..61b52afd5ac 100644 --- a/ts/screens/profile/CalendarsPreferencesScreen.tsx +++ b/ts/screens/profile/CalendarsPreferencesScreen.tsx @@ -51,7 +51,9 @@ class CalendarsPreferencesScreen extends React.PureComponent { const { isLoading } = this.state; return ( { public render() { const ContainerComponent = withLoadingSpinner(() => ( { return ( { return ( { return ( diff --git a/ts/screens/profile/ProfileAboutApp.tsx b/ts/screens/profile/ProfileAboutApp.tsx index fea8fc79f62..3c23297fcf5 100644 --- a/ts/screens/profile/ProfileAboutApp.tsx +++ b/ts/screens/profile/ProfileAboutApp.tsx @@ -6,7 +6,9 @@ import I18n from "../../i18n"; const ProfileAboutApp = () => ( diff --git a/ts/screens/profile/ProfileDataScreen.tsx b/ts/screens/profile/ProfileDataScreen.tsx index 600bebcdc18..fee1b984f2d 100644 --- a/ts/screens/profile/ProfileDataScreen.tsx +++ b/ts/screens/profile/ProfileDataScreen.tsx @@ -51,7 +51,9 @@ const ProfileDataScreen: React.FC = ({ }; return ( = props => { ); return ( diff --git a/ts/screens/profile/SecurityScreen.tsx b/ts/screens/profile/SecurityScreen.tsx index 26bf13f62e5..357137ea949 100644 --- a/ts/screens/profile/SecurityScreen.tsx +++ b/ts/screens/profile/SecurityScreen.tsx @@ -122,7 +122,9 @@ const SecurityScreen = (): React.ReactElement => { return ( { return ( diff --git a/ts/screens/profile/ShareDataScreen.tsx b/ts/screens/profile/ShareDataScreen.tsx index 1c611526cde..058bb26482e 100644 --- a/ts/screens/profile/ShareDataScreen.tsx +++ b/ts/screens/profile/ShareDataScreen.tsx @@ -77,8 +77,10 @@ const ShareDataScreen = (props: Props): React.ReactElement => { return ( From 957e2455330caae4af29f3a33bda6b7360ffb1d2 Mon Sep 17 00:00:00 2001 From: Daniel Hinterlechner <43072243+dhinterlechner@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:26:19 +0100 Subject: [PATCH 006/190] =?UTF-8?q?chore:=20=F0=9F=87=A9=F0=9F=87=AA=20lan?= =?UTF-8?q?guage=20adjustments=20(#5490)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit adjustments as of PR [765](https://github.com/pagopa/io-services-metadata/pull/765) in [io-services-metadata](https://github.com/dhinterlechner/io-services-metadata) --------- Co-authored-by: Alessandro Izzo --- locales/de/index.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/de/index.yml b/locales/de/index.yml index 1a5c90fb118..f5a061053e2 100644 --- a/locales/de/index.yml +++ b/locales/de/index.yml @@ -2290,7 +2290,7 @@ features: title: "Etwas ist schief gelaufen" body: "Die Details zu deiner Mitteilung konnten nicht abgerufen werden. Bitte versuche es erneut" cancelledMessage: - body: "Dieser Bescheid wurde vom Absender gelöscht. Du kannst dessen Inhalt ignorieren." + body: "Diese Zustellung wurde vom Absender gelöscht. Du kannst dessen Inhalt ignorieren." unpaidPayments: "Für die Erstattung von Zahlungen im Zusammenhang mit diesem Bescheid wende dich bitte an den Absender." payments: "Zahlungen" paymentSection: @@ -2306,10 +2306,10 @@ features: bottomSheet: title: "Beiliegende F24-Formulare" infoSection: - title: "Informationen zum Bescheid" + title: "Informationen zur Zustellung" iun: "IUN-Code" timeline: - title: "STATUS DES BESCHEIDS" + title: "STATUS DER ZUSTELLUNG" status: DELIVERED: "Zugestellt" DELIVERING: "In Zustellung" @@ -2331,7 +2331,7 @@ support: helpCenter: header: "Hilfe" cta: - contactSupport: "Erstelle ein Ticket" + contactSupport: "Ticket erstellen" seeReports: "Offene Tickets" supportComponent: title: "Benötigst du Hilfe?" From f730e55d493df6230319494fad43626bf2070a98 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Tue, 6 Feb 2024 17:32:07 +0100 Subject: [PATCH 007/190] chore(Cross): [IOAPPX-210] Upgrade `react-navigation` to v6 (#5415) ## Short description This PR upgrades react-navigation to `6.x` with all its peer dependencies **refs:** - https://reactnavigation.org/docs/upgrading-from-5.x/ - https://reactnavigation.org/docs/troubleshooting/ ## List of changes proposed in this pull request - Version upgrade - Components refactoring to handle the deprecated navigation prop ## How to test ``` rm -rf node_modules cd ios && bundle exec pod deintegrate && cd .. yarn cd ios && bundler exec pod install && cd .. yarn react-native start --reset-cache yarn reat-native run-yourplatform ``` Run tests and check all of the main app flows --------- Co-authored-by: Mario Perrotta Co-authored-by: LazyAfternoons Co-authored-by: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> Co-authored-by: Federico Mastrini Co-authored-by: Damiano Plebani Co-authored-by: Alice Di Rico <83651704+Ladirico@users.noreply.github.com> Co-authored-by: Alessandro Dell'Oste --- ios/ItaliaApp.xcodeproj/project.pbxproj | 192 +- ios/Podfile.lock | 6 + package.json | 15 +- ...-navigation+material-top-tabs+5.3.19.patch | 54 - patches/patches.md | 8 - .../RemindEmailValidationOverlay.tsx | 3 +- ts/components/core/typography/Label.tsx | 4 +- ...OperationResultScreenContent.test.tsx.snap | 909 +- .../__snapshots__/PaymentCards.test.tsx.snap | 2192 ++--- .../bonus/cdc/components/CdcServiceCTA.tsx | 5 +- .../cdc/navigation/CdcStackNavigator.tsx | 3 +- .../bonus/cgn/navigation/navigator.tsx | 14 +- .../activation/activationSaga.ts | 5 +- .../bonus/common/navigation/navigator.tsx | 3 +- .../common/screens/AvailableBonusScreen.tsx | 12 +- ts/features/design-system/DesignSystem.tsx | 16 +- .../design-system/navigation/navigator.tsx | 13 +- .../euCovidCert/navigation/navigator.tsx | 3 +- .../fastLogin/saga/tokenRefreshSaga.ts | 5 +- .../QtspClauseListItem.test.tsx.snap | 843 +- .../fci/hooks/useFciNoSignatureFields.tsx | 5 +- .../fci/navigation/FciStackNavigator.tsx | 6 +- .../screens/valid/FciDataSharingScreen.tsx | 15 +- .../screens/valid/FciQtspClausesScreen.tsx | 13 +- .../valid/FciSignatureFieldsScreen.tsx | 18 +- ts/features/fims/navigation/navigator.tsx | 6 +- .../idpay/barcode/navigation/navigator.tsx | 3 +- .../screens/IdPayBarcodeResultScreen.tsx | 11 +- .../idpay/code/navigation/navigator.tsx | 3 +- .../idpay/common/navigation/linking.ts | 3 +- .../configuration/navigation/navigator.tsx | 3 +- .../xstate/__tests__/actions.test.ts | 2 +- .../idpay/configuration/xstate/provider.tsx | 8 +- .../components/MissingConfigurationAlert.tsx | 9 +- .../idpay/onboarding/navigation/navigator.tsx | 3 +- .../xstate/__tests__/actions.test.ts | 7 +- .../idpay/onboarding/xstate/provider.tsx | 12 +- .../idpay/payment/navigation/navigator.tsx | 3 +- ts/features/idpay/payment/xstate/provider.tsx | 8 +- .../unsubscription/navigation/navigator.tsx | 2 +- .../idpay/unsubscription/xstate/provider.tsx | 8 +- .../IdPayInstrumentInitiativesScreen.tsx | 18 +- .../__snapshots__/CtaBar.test.tsx.snap | 399 +- .../messages/hooks/useMessageOpening.tsx | 4 +- .../navigation/MessagesHomeTabNavigator.tsx | 14 +- .../messages/navigation/MessagesNavigator.tsx | 3 +- .../messages/screens/MessageDetailScreen.tsx | 110 +- .../messages/screens/MessageRouterScreen.tsx | 9 +- .../MessageAttachment.test.tsx.snap | 2564 ++--- .../MessageRouterScreen.test.tsx.snap | 5033 +++++----- .../pn/components/LegacyMessageDetails.tsx | 20 +- .../MessageDetails.test.tsx.snap | 957 +- .../__snapshots__/MessageF24.test.tsx.snap | 1588 ++-- .../MessagePaymentItem.test.tsx.snap | 2077 +++-- .../MessagePayments.test.tsx.snap | 8303 +++++++++-------- ts/features/pn/navigation/navigator.tsx | 3 +- ts/features/pn/screens/PaidPaymentScreen.tsx | 18 +- .../MessageDetailsScreen.test.tsx.snap | 2802 +++--- .../PaidPaymentScreen.test.tsx.snap | 3258 +++---- ts/features/pn/utils/index.ts | 11 +- .../bancomat/screen/BancomatDetailScreen.tsx | 16 +- .../cobadge/screen/CobadgeDetailScreen.tsx | 15 +- .../screen/CreditCardDetailScreen.tsx | 15 +- .../__tests__/CreditCardDetailScreen.test.tsx | 7 +- .../bancomatPay/navigation/navigator.tsx | 3 +- .../cobadge/navigation/navigator.tsx | 3 +- .../paypal/navigation/navigator.tsx | 3 +- .../screen/PayPalOnboardingCheckoutScreen.tsx | 12 +- .../screen/PayPalPspSelectionScreen.tsx | 12 +- .../screen/PayPalStartOnboardingScreen.tsx | 12 +- ...ingCompletedSuccessComponent.test.tsx.snap | 747 +- .../paypal/screen/PayPalPspUpdateScreen.tsx | 26 +- .../walletV3/barcode/navigation/navigator.tsx | 3 +- .../walletV3/details/navigation/navigator.tsx | 3 +- .../onboarding/navigation/navigator.tsx | 3 +- .../walletV3/payment/navigation/navigator.tsx | 4 +- .../screens/WalletPaymentOutcomeScreen.tsx | 3 +- .../walletV3/payment/store/reducers/index.ts | 2 +- .../transaction/navigation/navigator.tsx | 3 +- ts/features/zendesk/navigation/navigator.tsx | 3 +- ts/navigation/AppStackNavigator.tsx | 3 +- ts/navigation/AuthenticatedStackNavigator.tsx | 6 +- ts/navigation/AuthenticationNavigator.tsx | 3 +- ts/navigation/CheckEmailNavigator.tsx | 7 +- ts/navigation/NavigationService.ts | 26 +- .../NotAuthenticatedStackNavigator.tsx | 3 +- ts/navigation/OnboardingNavigator.tsx | 2 +- ts/navigation/ProfileNavigator.tsx | 3 +- ts/navigation/ServicesHomeTabNavigator.tsx | 16 +- ts/navigation/ServicesNavigator.tsx | 3 +- ts/navigation/TabNavigator.tsx | 20 +- ts/navigation/WalletNavigator.tsx | 3 +- ts/navigation/params/AppParamsList.ts | 6 +- ts/navigation/params/WalletParamsList.ts | 1 + .../__tests__/checkProfileEmailSaga.test.tsx | 14 +- .../startup/checkAcknowledgedEmailSaga.ts | 20 +- ts/sagas/startup/checkEmailSaga.ts | 4 +- ts/sagas/wallet.ts | 5 +- ts/screens/authentication/LandingScreen.tsx | 4 +- ts/screens/authentication/NewOptInScreen.tsx | 19 +- .../cie/CieConsentDataUsageScreen.tsx | 37 +- .../cie/CieExpiredOrInvalidScreen.tsx | 67 +- .../authentication/cie/CiePinScreen.tsx | 4 +- ts/screens/onboarding/UnlockAccessScreen.tsx | 10 +- ts/screens/profile/CduEmailInsertScreen.tsx | 25 +- ts/screens/profile/DeveloperModeSection.tsx | 7 +- ts/screens/profile/EmailReadScreen.tsx | 13 +- .../profile/LanguagesPreferencesScreen.tsx | 25 +- ts/screens/profile/PreferencesScreen.tsx | 37 +- ts/screens/profile/ProfileDataScreen.tsx | 42 +- .../profile/RemoveAccountDetailsScreen.tsx | 4 +- ts/screens/profile/SecurityScreen.tsx | 35 +- .../profile/ServicesPreferenceScreen.tsx | 38 +- .../mailCheck/EmailAlreadyTakenScreen.tsx | 34 +- .../profile/mailCheck/ValidateEmailScreen.tsx | 36 +- ts/screens/services/ServiceDetailsScreen.tsx | 56 +- ts/screens/services/ServicesLocalScreen.tsx | 4 +- .../services/ServicesNationalScreen.tsx | 4 +- ts/screens/wallet/AddCardScreen.tsx | 50 +- ts/screens/wallet/AddPaymentMethodScreen.tsx | 74 +- .../wallet/ConfirmCardDetailsScreen.tsx | 33 +- .../wallet/PaymentHistoryDetailsScreen.tsx | 29 +- .../wallet/TransactionDetailsScreen.tsx | 55 +- .../wallet/__tests__/AddCardScreen.test.tsx | 71 +- .../ConfirmCardDetailScreen.test.tsx | 4 +- ...reditCardOnboardingAttemptDetailScreen.tsx | 22 +- .../payment/ConfirmPaymentMethodScreen.tsx | 411 +- .../payment/ManualDataInsertionScreen.tsx | 34 +- .../payment/PaymentOutcomeCodeMessage.tsx | 20 +- .../payment/PickPaymentMethodScreen.tsx | 26 +- ts/screens/wallet/payment/PickPspScreen.tsx | 44 +- .../wallet/payment/TransactionErrorScreen.tsx | 19 +- ts/store/actions/navigation.ts | 22 - yarn.lock | 478 +- 134 files changed, 17874 insertions(+), 16703 deletions(-) delete mode 100644 patches/@react-navigation+material-top-tabs+5.3.19.patch diff --git a/ios/ItaliaApp.xcodeproj/project.pbxproj b/ios/ItaliaApp.xcodeproj/project.pbxproj index e625fd411f9..269f9dfaf28 100644 --- a/ios/ItaliaApp.xcodeproj/project.pbxproj +++ b/ios/ItaliaApp.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 16E38CBD19D4437A9C020B21 /* RobotoMono-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 76E4CEA78E3F4060ABB59808 /* RobotoMono-Regular.ttf */; }; 194A5D2B1F027F5A0078620E /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = 194A5D2A1F027F5A0078620E /* Podfile */; }; - 1CD9CAEA755BFC30AE893F46 /* libPods-ItaliaApp-ItaliaAppTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A0A336CDDAE56472931AD9F /* libPods-ItaliaApp-ItaliaAppTests.a */; }; 28E4866232804051B865FC10 /* RobotoMono-RegularItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5389C36762A04AE69D762289 /* RobotoMono-RegularItalic.ttf */; }; 2AD40B9924CB049500E4124A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AD40B9824CB049500E4124A /* LaunchScreen.storyboard */; }; 3A3CA4696BA44782A02FE37E /* TitilliumWeb-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B021D4CC17ED4D54B7944FED /* TitilliumWeb-SemiBold.ttf */; }; @@ -31,13 +30,14 @@ 8E7BB01F1A6D4D79B17B4210 /* RobotoMono-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2A1DC2C4323E417BBBAE8817 /* RobotoMono-BoldItalic.ttf */; }; 97F089B39469411991377615 /* DMMono-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 875B0C3A5326413494A9311A /* DMMono-Medium.ttf */; }; 9975E38DE95949D28D07A275 /* RobotoMono-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B7088D9B42BA4275A767BEFF /* RobotoMono-Bold.ttf */; }; + BB136ECC2BAD2F1F766453AF /* libPods-ItaliaApp-ItaliaAppTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F38DB3FBDA73096A43D1CC8 /* libPods-ItaliaApp-ItaliaAppTests.a */; }; BE1A42156484487BABBC4DED /* TitilliumWeb-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 309BA0207AA24FE9A0EBE61C /* TitilliumWeb-Bold.ttf */; }; C2CF038002D24FEEAB41B336 /* RobotoMono-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 640E574519CA4183B230AF22 /* RobotoMono-LightItalic.ttf */; }; - CD4FC1EC91E60128F3E01292 /* libPods-ItaliaApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A6F417D3B8F84EA607A5C6F3 /* libPods-ItaliaApp.a */; }; D18E075B28304466B6CA2381 /* TitilliumWeb-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B65D221FCB5A461FBC44285D /* TitilliumWeb-LightItalic.ttf */; }; EFFA620FCD2D46F6B942663B /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = 2D52800996AA471A87A7F975 /* LICENSE.txt */; }; F0625E7F2326825600EDEF90 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; }; F09FEB3C231818E3007071DB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F09FEB0D231818E3007071DB /* Localizable.strings */; }; + F979B2982B2909A68F208546 /* libPods-ItaliaApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EA78A5BDFCE253F9BB4EC906 /* libPods-ItaliaApp.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -64,6 +64,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 00795B9F4BB208E88C8555FB /* Pods-ItaliaApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp.debug.xcconfig"; path = "Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp.debug.xcconfig"; sourceTree = ""; }; 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 00E356EE1AD99517003FC87E /* ItaliaAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ItaliaAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -86,24 +87,24 @@ 2C584AD92CB24628B1AA76DE /* ReadexPro-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ReadexPro-Regular.ttf"; path = "../assets/fonts/ReadexPro/ReadexPro-Regular.ttf"; sourceTree = ""; }; 2D52800996AA471A87A7F975 /* LICENSE.txt */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = LICENSE.txt; path = ../assets/fonts/RobotoMono/LICENSE.txt; sourceTree = ""; }; 309BA0207AA24FE9A0EBE61C /* TitilliumWeb-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-Bold.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-Bold.ttf"; sourceTree = ""; }; - 3A0A336CDDAE56472931AD9F /* libPods-ItaliaApp-ItaliaAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ItaliaApp-ItaliaAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 4F044D1214BF98AC6510D261 /* Pods-ItaliaApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp.debug.xcconfig"; path = "Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp.debug.xcconfig"; sourceTree = ""; }; + 39578C39C9EC4B2189720E67 /* Pods-ItaliaApp-ItaliaAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp-ItaliaAppTests.release.xcconfig"; path = "Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests.release.xcconfig"; sourceTree = ""; }; + 3F38DB3FBDA73096A43D1CC8 /* libPods-ItaliaApp-ItaliaAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ItaliaApp-ItaliaAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5389C36762A04AE69D762289 /* RobotoMono-RegularItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-RegularItalic.ttf"; path = "../assets/fonts/RobotoMono/RobotoMono-RegularItalic.ttf"; sourceTree = ""; }; 640E574519CA4183B230AF22 /* RobotoMono-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-LightItalic.ttf"; path = "../assets/fonts/RobotoMono/RobotoMono-LightItalic.ttf"; sourceTree = ""; }; 6754714BBEF54AA59833C0EB /* TitilliumWeb-ExtraLightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-ExtraLightItalic.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-ExtraLightItalic.ttf"; sourceTree = ""; }; 6A786CC45B2D4B77BDF55C1D /* TitilliumWeb-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-Black.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-Black.ttf"; sourceTree = ""; }; 6C4A0A2AB90C8575993DF1E1 /* Instabug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Instabug.framework; path = "../node_modules/instabug-reactnative/ios/Instabug.framework"; sourceTree = ""; }; 76E4CEA78E3F4060ABB59808 /* RobotoMono-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-Regular.ttf"; path = "../assets/fonts/RobotoMono/RobotoMono-Regular.ttf"; sourceTree = ""; }; + 7A046C75C68A2C0E8AE3E0FF /* Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig"; path = "Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig"; sourceTree = ""; }; 7A83F0572152B12C000C6389 /* ItaliaApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = ItaliaApp.entitlements; path = ItaliaApp/ItaliaApp.entitlements; sourceTree = ""; }; 875B0C3A5326413494A9311A /* DMMono-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "DMMono-Medium.ttf"; path = "../assets/fonts/DMMono/DMMono-Medium.ttf"; sourceTree = ""; }; - A6F417D3B8F84EA607A5C6F3 /* libPods-ItaliaApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ItaliaApp.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - AE2A89F5F6A57BDBD22D81D9 /* Pods-ItaliaApp-ItaliaAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp-ItaliaAppTests.release.xcconfig"; path = "Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests.release.xcconfig"; sourceTree = ""; }; + 8FF948EE9F5FAEABE8ADDAE1 /* Pods-ItaliaApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp.release.xcconfig"; path = "Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp.release.xcconfig"; sourceTree = ""; }; AFE8D23873DE458BB54EB46B /* RobotoMono-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-Light.ttf"; path = "../assets/fonts/RobotoMono/RobotoMono-Light.ttf"; sourceTree = ""; }; B021D4CC17ED4D54B7944FED /* TitilliumWeb-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-SemiBold.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-SemiBold.ttf"; sourceTree = ""; }; B65D221FCB5A461FBC44285D /* TitilliumWeb-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-LightItalic.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-LightItalic.ttf"; sourceTree = ""; }; B7088D9B42BA4275A767BEFF /* RobotoMono-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-Bold.ttf"; path = "../assets/fonts/RobotoMono/RobotoMono-Bold.ttf"; sourceTree = ""; }; - B7EF7760029EB39299B837EA /* Pods-ItaliaApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp.release.xcconfig"; path = "Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp.release.xcconfig"; sourceTree = ""; }; CED8B1FF1E254583BB3F285F /* TitilliumWeb-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-SemiBoldItalic.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-SemiBoldItalic.ttf"; sourceTree = ""; }; + EA78A5BDFCE253F9BB4EC906 /* libPods-ItaliaApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ItaliaApp.a"; sourceTree = BUILT_PRODUCTS_DIR; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; EE4F83DB63254F5285C36A40 /* TitilliumWeb-ExtraLight.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-ExtraLight.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-ExtraLight.ttf"; sourceTree = ""; }; F0625E792326820B00EDEF90 /* libReact-RCTImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libReact-RCTImage.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -111,7 +112,6 @@ F09FEB0E231818E3007071DB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = ItaliaApp/en.lproj/Localizable.strings; sourceTree = ""; }; F09FEB3D231818F0007071DB /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = ItaliaApp/it.lproj/Localizable.strings; sourceTree = ""; }; F709D4AE20E44EFAAB255A8E /* TitilliumWeb-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-Italic.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-Italic.ttf"; sourceTree = ""; }; - FCE075AF22EBCD57D83AD630 /* Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig"; path = "Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -119,7 +119,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1CD9CAEA755BFC30AE893F46 /* libPods-ItaliaApp-ItaliaAppTests.a in Frameworks */, + BB136ECC2BAD2F1F766453AF /* libPods-ItaliaApp-ItaliaAppTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -128,7 +128,7 @@ buildActionMask = 2147483647; files = ( F0625E7F2326825600EDEF90 /* JavaScriptCore.framework in Frameworks */, - CD4FC1EC91E60128F3E01292 /* libPods-ItaliaApp.a in Frameworks */, + F979B2982B2909A68F208546 /* libPods-ItaliaApp.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -208,10 +208,10 @@ 591602A69619994F43D34A93 /* Pods */ = { isa = PBXGroup; children = ( - 4F044D1214BF98AC6510D261 /* Pods-ItaliaApp.debug.xcconfig */, - B7EF7760029EB39299B837EA /* Pods-ItaliaApp.release.xcconfig */, - FCE075AF22EBCD57D83AD630 /* Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig */, - AE2A89F5F6A57BDBD22D81D9 /* Pods-ItaliaApp-ItaliaAppTests.release.xcconfig */, + 00795B9F4BB208E88C8555FB /* Pods-ItaliaApp.debug.xcconfig */, + 8FF948EE9F5FAEABE8ADDAE1 /* Pods-ItaliaApp.release.xcconfig */, + 7A046C75C68A2C0E8AE3E0FF /* Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig */, + 39578C39C9EC4B2189720E67 /* Pods-ItaliaApp-ItaliaAppTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -256,8 +256,8 @@ F0625E7B2326822400EDEF90 /* libReact-RCTImage.a */, F0625E792326820B00EDEF90 /* libReact-RCTImage.a */, 6C4A0A2AB90C8575993DF1E1 /* Instabug.framework */, - A6F417D3B8F84EA607A5C6F3 /* libPods-ItaliaApp.a */, - 3A0A336CDDAE56472931AD9F /* libPods-ItaliaApp-ItaliaAppTests.a */, + EA78A5BDFCE253F9BB4EC906 /* libPods-ItaliaApp.a */, + 3F38DB3FBDA73096A43D1CC8 /* libPods-ItaliaApp-ItaliaAppTests.a */, ); name = Frameworks; sourceTree = ""; @@ -269,12 +269,12 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ItaliaAppTests" */; buildPhases = ( - CC25A055C342FAAE3D4A7914 /* [CP] Check Pods Manifest.lock */, + 967C5B41F7918E4856FDBE39 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - 798F586C1A40477B6340BEA7 /* [CP] Embed Pods Frameworks */, - F162F3AB6F2574EDC5D74D51 /* [CP] Copy Pods Resources */, + 0DF9F282D62460D8C1369A3C /* [CP] Embed Pods Frameworks */, + 38D36BBFD3F9AA6F9868163D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -290,7 +290,7 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ItaliaApp" */; buildPhases = ( - 02908AF96918A81891FE2AAA /* [CP] Check Pods Manifest.lock */, + E922B56599F47919E63399FE /* [CP] Check Pods Manifest.lock */, 95AEBF4A23D0A295000598A9 /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, @@ -298,8 +298,8 @@ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 61CC933C2135818C00206602 /* Embed Frameworks */, 7A034949213D55CA0064B689 /* Work around InputMask.xcodeproj embedding an extra set of Swift libraries */, - 78409FB602D7E5A8BB0D890D /* [CP] Embed Pods Frameworks */, - 93CC51473253477B8DB84D24 /* [CP] Copy Pods Resources */, + 78E51AC3E918CC62547E92B7 /* [CP] Embed Pods Frameworks */, + 80F66E4FB2D485A924D4B6E4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -413,35 +413,13 @@ shellPath = /bin/sh; shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 02908AF96918A81891FE2AAA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-ItaliaApp-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 78409FB602D7E5A8BB0D890D /* [CP] Embed Pods Frameworks */ = { + 0DF9F282D62460D8C1369A3C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp-frameworks.sh", + "${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-Glog/glog.framework/glog", "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", @@ -478,16 +456,68 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 798F586C1A40477B6340BEA7 /* [CP] Embed Pods Frameworks */ = { + 38D36BBFD3F9AA6F9868163D /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-frameworks.sh", + "${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-resources.sh", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 78E51AC3E918CC62547E92B7 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-Glog/glog.framework/glog", "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", @@ -524,7 +554,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 7A034949213D55CA0064B689 /* Work around InputMask.xcodeproj embedding an extra set of Swift libraries */ = { @@ -541,7 +571,7 @@ shellPath = /bin/sh; shellScript = "# see https://github.com/react-native-community/react-native-text-input-mask/issues/22#issuecomment-344765116\n\nEXTRA_DIR=\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Frameworks/InputMask.framework/Frameworks\"\n\nif [[ -d \"${EXTRA_DIR}\" ]]; then\n rm -rf \"${EXTRA_DIR}\"\nfi\n"; }; - 93CC51473253477B8DB84D24 /* [CP] Copy Pods Resources */ = { + 80F66E4FB2D485A924D4B6E4 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -611,7 +641,7 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\nif nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\nif ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\necho \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\nexit 2\nfi\nelse\nopen \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\nfi\nfi\n"; }; - CC25A055C342FAAE3D4A7914 /* [CP] Check Pods Manifest.lock */ = { + 967C5B41F7918E4856FDBE39 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -633,56 +663,26 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F162F3AB6F2574EDC5D74D51 /* [CP] Copy Pods Resources */ = { + E922B56599F47919E63399FE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-resources.sh", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", - "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", - "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", - "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "$(DERIVED_FILE_DIR)/Pods-ItaliaApp-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ItaliaApp-ItaliaAppTests/Pods-ItaliaApp-ItaliaAppTests-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -740,7 +740,7 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FCE075AF22EBCD57D83AD630 /* Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig */; + baseConfigurationReference = 7A046C75C68A2C0E8AE3E0FF /* Pods-ItaliaApp-ItaliaAppTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; DEVELOPMENT_TEAM = M2X5YQ4BJ7; @@ -765,7 +765,7 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AE2A89F5F6A57BDBD22D81D9 /* Pods-ItaliaApp-ItaliaAppTests.release.xcconfig */; + baseConfigurationReference = 39578C39C9EC4B2189720E67 /* Pods-ItaliaApp-ItaliaAppTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; @@ -787,7 +787,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4F044D1214BF98AC6510D261 /* Pods-ItaliaApp.debug.xcconfig */; + baseConfigurationReference = 00795B9F4BB208E88C8555FB /* Pods-ItaliaApp.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -828,7 +828,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B7EF7760029EB39299B837EA /* Pods-ItaliaApp.release.xcconfig */; + baseConfigurationReference = 8FF948EE9F5FAEABE8ADDAE1 /* Pods-ItaliaApp.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 6bcdadb7b5f..5cca289fdad 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -392,6 +392,8 @@ PODS: - react-native-mixpanel (1.2.0): - Mixpanel (~> 3.6.0) - React + - react-native-pager-view (6.2.3): + - React-Core - react-native-pdf (6.4.0): - React-Core - react-native-pdf-thumbnail (1.2.1): @@ -648,6 +650,7 @@ DEPENDENCIES: - react-native-get-random-values (from `../node_modules/react-native-get-random-values`) - react-native-image-picker (from `../node_modules/react-native-image-picker`) - react-native-mixpanel (from `../node_modules/react-native-mixpanel`) + - react-native-pager-view (from `../node_modules/react-native-pager-view`) - react-native-pdf (from `../node_modules/react-native-pdf`) - react-native-pdf-thumbnail (from `../node_modules/react-native-pdf-thumbnail`) - react-native-render-html (from `../node_modules/react-native-render-html`) @@ -812,6 +815,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-image-picker" react-native-mixpanel: :path: "../node_modules/react-native-mixpanel" + react-native-pager-view: + :path: "../node_modules/react-native-pager-view" react-native-pdf: :path: "../node_modules/react-native-pdf" react-native-pdf-thumbnail: @@ -969,6 +974,7 @@ SPEC CHECKSUMS: react-native-get-random-values: 237bffb1c7e05fb142092681531810a29ba53015 react-native-image-picker: 60f4246eb5bb7187fc15638a8c1f13abd3820695 react-native-mixpanel: d644efe1ca33d2646d5cba29e24a13ebc9b37209 + react-native-pager-view: c29d484f19c49ff19525a94105e4ab2c4d4ae273 react-native-pdf: a6a5a3f0bdf340eb2eed6c96034424d2cc3f84b0 react-native-pdf-thumbnail: a042fffdab7a49f0f9df0e11da0a90beebfd4241 react-native-render-html: 96c979fe7452a0a41559685d2f83b12b93edac8c diff --git a/package.json b/package.json index d5d567cdd54..43e2db4bf3b 100644 --- a/package.json +++ b/package.json @@ -110,10 +110,10 @@ "@react-native-community/slider": "^3.0.3", "@react-native-cookies/cookies": "^6.2.1", "@react-native-picker/picker": "^2.4.1", - "@react-navigation/bottom-tabs": "^5.11.15", - "@react-navigation/material-top-tabs": "^5.x", - "@react-navigation/native": "^5.9.8", - "@react-navigation/stack": "^5.14.9", + "@react-navigation/bottom-tabs": "6.5.11", + "@react-navigation/material-top-tabs": "6.6.5", + "@react-navigation/native": "6.1.9", + "@react-navigation/stack": "6.3.20", "@redux-saga/testing-utils": "^1.1.3", "@xstate/react": "^3.0.1", "async-mutex": "^0.1.3", @@ -165,6 +165,7 @@ "react-native-masked-text": "^1.13.0", "react-native-mixpanel": "1.2.0", "react-native-modal-datetime-picker": "^10.2.0", + "react-native-pager-view": "^6.2.3", "react-native-pdf": "^6.4.0", "react-native-pdf-thumbnail": "^1.2.1", "react-native-permissions": "^4.0.0", @@ -181,7 +182,7 @@ "react-native-share": "7.3.9", "react-native-splash-screen": "^3.2.0", "react-native-svg": "^12.3.0", - "react-native-tab-view": "^2.x", + "react-native-tab-view": "3.5.2", "react-native-view-shot": "3.1.2", "react-native-vision-camera": "2.15.4", "react-native-webview": "^11.26.1", @@ -218,7 +219,7 @@ "xstate": "^4.33.6" }, "devDependencies": { - "@babel/core": "^7.15.0", + "@babel/core": "^7.18.8", "@babel/preset-typescript": "^7.16.7", "@babel/runtime": "^7.15.3", "@jambit/eslint-plugin-typed-redux-saga": "^0.4.0", @@ -275,7 +276,7 @@ "js-yaml": "^3.13.1", "jsdoc-to-markdown": "^6.0.1", "lint-staged": "^13.2.0", - "metro-react-native-babel-preset": "^0.70.3", + "metro-react-native-babel-preset": "^0.73.0", "mockdate": "^3.0.2", "mockttp": "2.4.0", "node-fetch": "^2.6.7", diff --git a/patches/@react-navigation+material-top-tabs+5.3.19.patch b/patches/@react-navigation+material-top-tabs+5.3.19.patch deleted file mode 100644 index e3ced5a3cc6..00000000000 --- a/patches/@react-navigation+material-top-tabs+5.3.19.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/node_modules/@react-navigation/material-top-tabs/.DS_Store b/node_modules/@react-navigation/material-top-tabs/.DS_Store -new file mode 100644 -index 0000000..5172429 -Binary files /dev/null and b/node_modules/@react-navigation/material-top-tabs/.DS_Store differ -diff --git a/node_modules/@react-navigation/material-top-tabs/lib/typescript/.DS_Store b/node_modules/@react-navigation/material-top-tabs/lib/typescript/.DS_Store -new file mode 100644 -index 0000000..5127bf9 -Binary files /dev/null and b/node_modules/@react-navigation/material-top-tabs/lib/typescript/.DS_Store differ -diff --git a/node_modules/@react-navigation/material-top-tabs/lib/typescript/src/types.d.ts b/node_modules/@react-navigation/material-top-tabs/lib/typescript/src/types.d.ts -index 4a4b081..1cf21c0 100644 ---- a/node_modules/@react-navigation/material-top-tabs/lib/typescript/src/types.d.ts -+++ b/node_modules/@react-navigation/material-top-tabs/lib/typescript/src/types.d.ts -@@ -76,6 +76,18 @@ export declare type MaterialTopTabNavigationConfig = Partial['renderPager']; -+ /** -+ * Whether this screen should be lazily rendered. When this is set to `true`, -+ * the screen will be rendered as it comes into the viewport. -+ * By default all screens are rendered to provide a smoother swipe experience. -+ * But you might want to defer the rendering of screens out of the viewport until the user sees them. -+ * To enable lazy rendering for this screen, set `lazy` to `true`. -+ * -+ * When you enable `lazy`, the lazy loaded screens will usually take some time to render -+ * when they come into the viewport. You can use the `lazyPlaceholder` prop to customize -+ * what the user sees during this short period. -+ */ -+ lazy?: boolean; - /** - * Function that returns a React element to render for routes that haven't been rendered yet. - * Receives an object containing the route as the prop. -diff --git a/node_modules/@react-navigation/material-top-tabs/src/types.tsx b/node_modules/@react-navigation/material-top-tabs/src/types.tsx -index 60270ff..d7ae0e8 100644 ---- a/node_modules/@react-navigation/material-top-tabs/src/types.tsx -+++ b/node_modules/@react-navigation/material-top-tabs/src/types.tsx -@@ -121,6 +121,18 @@ export type MaterialTopTabNavigationConfig = Partial< - * The pager handles swipe gestures and page switching. - */ - pager?: React.ComponentProps['renderPager']; -+ /** -+ * Whether this screen should be lazily rendered. When this is set to `true`, -+ * the screen will be rendered as it comes into the viewport. -+ * By default all screens are rendered to provide a smoother swipe experience. -+ * But you might want to defer the rendering of screens out of the viewport until the user sees them. -+ * To enable lazy rendering for this screen, set `lazy` to `true`. -+ * -+ * When you enable `lazy`, the lazy loaded screens will usually take some time to render -+ * when they come into the viewport. You can use the `lazyPlaceholder` prop to customize -+ * what the user sees during this short period. -+ */ -+ lazy?: boolean; - /** - * Function that returns a React element to render for routes that haven't been rendered yet. - * Receives an object containing the route as the prop. diff --git a/patches/patches.md b/patches/patches.md index a4f288edd4c..ba483918f2e 100644 --- a/patches/patches.md +++ b/patches/patches.md @@ -150,14 +150,6 @@ Created on **29/08/2022** - This patch is going to fix a gradle issue that breaks the compile on android platform, due to gradle imcompatibility -### @react-navigation/material-top-tabs+5.3.1 - -Created on **01/12/2022** - -#### Reason: - -- This patch is going to add a missing prop to component definition, it can be removed once updating the library. - ### react-native-webview+11.26.1 Updated on **13/07/2023** diff --git a/ts/components/RemindEmailValidationOverlay.tsx b/ts/components/RemindEmailValidationOverlay.tsx index 1adf590058d..6e1227e5c4c 100644 --- a/ts/components/RemindEmailValidationOverlay.tsx +++ b/ts/components/RemindEmailValidationOverlay.tsx @@ -334,7 +334,8 @@ class RemindEmailValidationOverlay extends React.PureComponent { }); } else { NavigationService.navigate(ROUTES.PROFILE_NAVIGATOR, { - screen: ROUTES.INSERT_EMAIL_SCREEN + screen: ROUTES.INSERT_EMAIL_SCREEN, + params: { isOnboarding: false } }); } }, diff --git a/ts/components/core/typography/Label.tsx b/ts/components/core/typography/Label.tsx index bed1db91c37..92ac7e207c7 100644 --- a/ts/components/core/typography/Label.tsx +++ b/ts/components/core/typography/Label.tsx @@ -1,8 +1,8 @@ import { FontSize, fontSizeMapping, - type IOColors, - type IOColorsStatusForeground + IOColors, + IOColorsStatusForeground } from "@pagopa/io-app-design-system"; import { IOFontFamily, IOFontWeight } from "../fonts"; import { ExternalTypographyProps, TypographyProps } from "./common"; diff --git a/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap b/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap index 456cc47fe98..aa4241737e9 100644 --- a/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap +++ b/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap @@ -20,620 +20,645 @@ exports[`OperationResultScreenContent should match the snapshot with default pro } > - - - + + /> + + - + - WALLET_HOME - + + WALLET_HOME + + + - - - + - - - - - + + - title - - - + title + + + - subtitle - - + weight="Regular" + > + subtitle + - + > + /> + - - Action - + + Action + + - - - + > + /> + - - Secondary Action - + + Secondary Action + + - - - + + + diff --git a/ts/components/ui/cards/payment/__test__/__snapshots__/PaymentCards.test.tsx.snap b/ts/components/ui/cards/payment/__test__/__snapshots__/PaymentCards.test.tsx.snap index 6d706f86b20..f43b52a4673 100644 --- a/ts/components/ui/cards/payment/__test__/__snapshots__/PaymentCards.test.tsx.snap +++ b/ts/components/ui/cards/payment/__test__/__snapshots__/PaymentCards.test.tsx.snap @@ -20,405 +20,430 @@ exports[`PaymentCardBig component matches snapshot for loading 1`] = ` } > - - - + + /> + + - + - WALLET_HOME - + + WALLET_HOME + + + - - - + - - - + } + testID="undefined-skeleton" + > + - - - + > + + - - - - + > + + - - + + > + + + + + @@ -454,356 +479,381 @@ exports[`PaymentCardBig component matches snapshot for paypal 1`] = ` } > - - - + + /> + + - + - WALLET_HOME - + + WALLET_HOME + + + - - - + - - - + + + - someEmail@test.com - + } + } + numberOfLines={1} + style={ + Array [ + Object { + "width": "75%", + }, + Object { + "fontSize": 18, + "lineHeight": 25, + }, + Object { + "color": "#0E0F13", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "600", + }, + ] + } + weight="SemiBold" + > + someEmail@test.com + + @@ -837,354 +887,379 @@ exports[`PaymentCardSmall component matches snapshot for loading 1`] = ` } > - - - + + /> + + - + - WALLET_HOME - - - - - - - + + WALLET_HOME + + + + + + + - + - - - - + > + + + + + @@ -1219,404 +1294,429 @@ exports[`PaymentCardSmall component matches snapshot for paypal 1`] = ` } > - - - + + /> + + - + - WALLET_HOME - + + WALLET_HOME + + + - - - + - - + + + + + + + + + + - - - - - - + PayPal + - - - PayPal - diff --git a/ts/features/bonus/cdc/components/CdcServiceCTA.tsx b/ts/features/bonus/cdc/components/CdcServiceCTA.tsx index 6734081f3a6..8f97a1107ad 100644 --- a/ts/features/bonus/cdc/components/CdcServiceCTA.tsx +++ b/ts/features/bonus/cdc/components/CdcServiceCTA.tsx @@ -1,6 +1,6 @@ import { VSpacer } from "@pagopa/io-app-design-system"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { useFocusEffect, useNavigation } from "@react-navigation/native"; +import { useFocusEffect } from "@react-navigation/native"; import * as React from "react"; import { useCallback } from "react"; import { View } from "react-native"; @@ -24,12 +24,13 @@ import { CDC_ROUTES } from "../navigation/routes"; import { cdcRequestBonusList } from "../store/actions/cdcBonusRequest"; import { cdcBonusRequestListSelector } from "../store/reducers/cdcBonusRequest"; import { CdcBonusRequestList } from "../types/CdcBonusRequest"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; type ReadyButtonProp = { bonusRequestList: CdcBonusRequestList; }; const ReadyButton = (props: ReadyButtonProp) => { - const navigation = useNavigation(); + const navigation = useIONavigation(); // Check if at least one year can be activable const activableBonuses = props.bonusRequestList.filter( diff --git a/ts/features/bonus/cdc/navigation/CdcStackNavigator.tsx b/ts/features/bonus/cdc/navigation/CdcStackNavigator.tsx index 779732812ff..265aef68509 100644 --- a/ts/features/bonus/cdc/navigation/CdcStackNavigator.tsx +++ b/ts/features/bonus/cdc/navigation/CdcStackNavigator.tsx @@ -13,8 +13,7 @@ const Stack = createStackNavigator(); export const CdcStackNavigator = () => ( = { [CGN_ROUTES.DETAILS.MAIN]: { path: "cgn-details", screens: { @@ -48,8 +51,7 @@ const ActivationStack = createStackNavigator(); export const CgnActivationNavigator = () => ( (); export const CgnDetailsNavigator = () => ( (); export const CgnEYCAActivationNavigator = () => ( (); export const BonusNavigator = () => ( & ReturnType; @@ -271,7 +271,15 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ dispatch(showServiceDetails(service)) }); +const AvailableBonusScreenFC: React.FunctionComponent = ( + props: Props +) => ( + + + +); + export default connect( mapStateToProps, mapDispatchToProps -)(withLoadingSpinner(AvailableBonusScreen)); +)(AvailableBonusScreenFC); diff --git a/ts/features/design-system/DesignSystem.tsx b/ts/features/design-system/DesignSystem.tsx index e70966a061c..a079049cef0 100644 --- a/ts/features/design-system/DesignSystem.tsx +++ b/ts/features/design-system/DesignSystem.tsx @@ -8,19 +8,10 @@ import { IOVisualCostants } from "@pagopa/io-app-design-system"; import { IOStyles } from "../../components/core/variables/IOStyles"; -import { - AppParamsList, - IOStackNavigationRouteProps -} from "../../navigation/params/AppParamsList"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; import { H1 } from "../../components/core/typography/H1"; import { LabelSmall } from "../../components/core/typography/LabelSmall"; import DESIGN_SYSTEM_ROUTES from "./navigation/routes"; -import { DesignSystemParamsList } from "./navigation/params"; - -type Props = IOStackNavigationRouteProps< - DesignSystemParamsList, - "DESIGN_SYSTEM_MAIN" ->; type SingleSectionProps = { title: string; @@ -78,9 +69,10 @@ const DESIGN_SYSTEM_SECTION_DATA = [ } ]; -export const DesignSystem = (props: Props) => { +export const DesignSystem = () => { const theme = useIOTheme(); const colorScheme = useColorScheme(); + const navigation = useIONavigation(); const renderDSNavItem = ({ item: { title, route } @@ -90,7 +82,7 @@ export const DesignSystem = (props: Props) => { props.navigation.navigate(route as keyof AppParamsList)} + onPress={() => navigation.navigate(route as any)} /> ); diff --git a/ts/features/design-system/navigation/navigator.tsx b/ts/features/design-system/navigation/navigator.tsx index ca02ca4ee8f..a184cd4f5e0 100644 --- a/ts/features/design-system/navigation/navigator.tsx +++ b/ts/features/design-system/navigation/navigator.tsx @@ -152,16 +152,19 @@ export const DesignSystemNavigator = () => { With RN Navigation 6.x it's much easier because you can use the Group function */} { }, headerTitleAlign: "center", headerStyle: { height: insets.top + IOVisualCostants.headerHeight }, - headerLeft: RNNBackButton + headerLeft: RNNBackButton, + headerMode: "screen" }), [insets] ); @@ -199,7 +203,6 @@ const DesignSystemMainStack = () => { return ( (); export const EUCovidCertStackNavigator = () => ( - - - + + /> + + - + - FCI_QTSP_TOS - + + FCI_QTSP_TOS + + + - - - + - - - (1) Io sottoscritto/a dichiaro quanto indicato nel - - + (1) Io sottoscritto/a dichiaro quanto indicato nel + + - QUADRO E - AUTOCERTIFICAZIONE E SOTTOSCRIZIONE DA PARTE DEL TITOLARE. - - + QUADRO E - AUTOCERTIFICAZIONE E SOTTOSCRIZIONE DA PARTE DEL TITOLARE. + + + + + -
-
- - + /> - + testID="AnimatedCheckboxInput" + > + + + - - - + + } + } + style={ + Array [ + Object { + "flexShrink": 1, + }, + Object { + "fontSize": 18, + "lineHeight": 25, + }, + Object { + "color": "#0E0F13", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "600", + }, + ] + } + weight="SemiBold" + /> + diff --git a/ts/features/fci/hooks/useFciNoSignatureFields.tsx b/ts/features/fci/hooks/useFciNoSignatureFields.tsx index 115af1a6c55..cc94bd9374c 100644 --- a/ts/features/fci/hooks/useFciNoSignatureFields.tsx +++ b/ts/features/fci/hooks/useFciNoSignatureFields.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { StackActions, useNavigation } from "@react-navigation/native"; +import { StackActions } from "@react-navigation/native"; import { increment } from "fp-ts/lib/function"; import { Body, @@ -13,6 +13,7 @@ import { useIOSelector } from "../../../store/hooks"; import { trackFciStartSignature } from "../analytics"; import { useIOBottomSheetModal } from "../../../utils/hooks/bottomSheet"; import { fciEnvironmentSelector } from "../store/reducers/fciEnvironment"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; type Props = { currentDoc: number; @@ -22,7 +23,7 @@ type Props = { * A hook that returns a function to present the abort signature flow bottom sheet */ export const useFciNoSignatureFields = (props: Props) => { - const navigation = useNavigation(); + const navigation = useIONavigation(); const documents = useIOSelector(fciSignatureDetailDocumentsSelector); const fciEnvironment = useIOSelector(fciEnvironmentSelector); const { currentDoc } = props; diff --git a/ts/features/fci/navigation/FciStackNavigator.tsx b/ts/features/fci/navigation/FciStackNavigator.tsx index ad63d25b0df..255a1e0cb2c 100644 --- a/ts/features/fci/navigation/FciStackNavigator.tsx +++ b/ts/features/fci/navigation/FciStackNavigator.tsx @@ -10,12 +10,13 @@ import FciQtspClausesScreen from "../screens/valid/FciQtspClausesScreen"; import FciThankyouScreen from "../screens/valid/FciThankyouScreen"; import { FciDocumentPreviewScreen } from "../screens/valid/FciDocumentPreviewScreen"; import FciSignatureRequestsScreen from "../screens/valid/FciSignatureRequestsScreen"; +import { AppParamsList } from "../../../navigation/params/AppParamsList"; import { FCI_ROUTES } from "./routes"; import { FciParamsList } from "./params"; const Stack = createStackNavigator(); -export const fciLinkingOptions: PathConfigMap = { +export const fciLinkingOptions: PathConfigMap = { [FCI_ROUTES.MAIN]: { path: "fci", screens: { @@ -28,8 +29,7 @@ export const fciLinkingOptions: PathConfigMap = { export const FciStackNavigator = () => ( { const name = useIOSelector(profileNameSelector); const fiscalCode = useIOSelector(profileFiscalCodeSelector); const fciEnvironment = useIOSelector(fciEnvironmentSelector); - const navigation = useNavigation(); + const navigation = useIONavigation(); const route = useRoute(); const familyName = pot.getOrElse( pot.map(profile, p => capitalize(p.family_name)), @@ -79,7 +81,9 @@ const FciDataSharingScreen = (): React.ReactElement => { const confirmButtonProps: ButtonSolidProps = { onPress: () => { trackFciUserDataConfirmed(fciEnvironment); - navigation.navigate("FCI_QTSP_TOS"); + navigation.navigate(FCI_ROUTES.MAIN, { + screen: FCI_ROUTES.QTSP_TOS + }); }, label: I18n.t("features.fci.shareDataScreen.confirm"), accessibilityLabel: I18n.t("features.fci.shareDataScreen.confirm") @@ -107,7 +111,10 @@ const FciDataSharingScreen = (): React.ReactElement => { onPress={() => { trackFciUserExit(route.name, fciEnvironment, "modifica_email"); navigation.navigate(ROUTES.PROFILE_NAVIGATOR, { - screen: ROUTES.INSERT_EMAIL_SCREEN + screen: ROUTES.INSERT_EMAIL_SCREEN, + params: { + isOnboarding: false + } }); }} > diff --git a/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx b/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx index c5f05dbed1a..c1d1cc5dfc1 100644 --- a/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx +++ b/ts/features/fci/screens/valid/FciQtspClausesScreen.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import { FlatList, View, ScrollView } from "react-native"; import { useSelector } from "react-redux"; -import { useNavigation } from "@react-navigation/native"; import * as pot from "@pagopa/ts-commons/lib/pot"; import { Body, @@ -41,11 +40,12 @@ import { fciMetadataServiceIdSelector } from "../../store/reducers/fciMetadata"; import { trackFciUxConversion } from "../../analytics"; import LoadingComponent from "../../components/LoadingComponent"; import { fciEnvironmentSelector } from "../../store/reducers/fciEnvironment"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; const FciQtspClausesScreen = () => { const dispatch = useIODispatch(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const [clausesChecked, setClausesChecked] = React.useState(0); const servicePreference = useSelector(servicePreferenceSelector); const qtspClausesSelector = useSelector(fciQtspClausesSelector); @@ -80,9 +80,12 @@ const FciQtspClausesScreen = () => { useFciAbortSignatureFlow(); const openUrl = (url: string) => { - navigation.navigate(FCI_ROUTES.DOC_PREVIEW, { - documentUrl: url, - enableAnnotationRendering: true + navigation.navigate(FCI_ROUTES.MAIN, { + screen: FCI_ROUTES.DOC_PREVIEW, + params: { + documentUrl: url, + enableAnnotationRendering: true + } }); }; diff --git a/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx b/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx index 93a0ad23bfe..39c7a3b66ed 100644 --- a/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx +++ b/ts/features/fci/screens/valid/FciSignatureFieldsScreen.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { View, SectionList, ScrollView } from "react-native"; import { useSelector } from "react-redux"; -import { StackActions, useNavigation } from "@react-navigation/native"; +import { Route, StackActions, useRoute } from "@react-navigation/native"; import * as RA from "fp-ts/lib/ReadonlyArray"; import * as O from "fp-ts/lib/Option"; import { constFalse, increment, pipe } from "fp-ts/lib/function"; @@ -24,8 +24,7 @@ import { fciSignatureDetailDocumentsSelector } from "../../store/reducers/fciSignatureRequest"; import { DocumentDetailView } from "../../../../../definitions/fci/DocumentDetailView"; -import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; -import { FciParamsList } from "../../navigation/params"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; import SignatureFieldItem from "../../components/SignatureFieldItem"; import { SignatureField } from "../../../../../definitions/fci/SignatureField"; import { FCI_ROUTES } from "../../navigation/routes"; @@ -62,11 +61,12 @@ export type FciSignatureFieldsScreenNavigationParams = Readonly<{ currentDoc: number; }>; -const FciSignatureFieldsScreen = ( - props: IOStackNavigationRouteProps -) => { - const currentDoc = props.route.params.currentDoc; - const docId = props.route.params.documentId; +const FciSignatureFieldsScreen = () => { + const { currentDoc, documentId: docId } = + useRoute< + Route<"FCI_SIGNATURE_FIELDS", FciSignatureFieldsScreenNavigationParams> + >().params; + const documentsSelector = useSelector(fciSignatureDetailDocumentsSelector); const signatureFieldsSelector = useSelector( fciDocumentSignatureFieldsSelector(docId) @@ -76,7 +76,7 @@ const FciSignatureFieldsScreen = ( ); const fciEnvironment = useSelector(fciEnvironmentSelector); const dispatch = useIODispatch(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const [isClausesChecked, setIsClausesChecked] = React.useState(false); const [isError, setIsError] = React.useState(false); const { showModal, hideModal } = React.useContext(LightModalContext); diff --git a/ts/features/fims/navigation/navigator.tsx b/ts/features/fims/navigation/navigator.tsx index dbd46c66945..5ab2b9d246d 100644 --- a/ts/features/fims/navigation/navigator.tsx +++ b/ts/features/fims/navigation/navigator.tsx @@ -2,10 +2,11 @@ import { createStackNavigator } from "@react-navigation/stack"; import * as React from "react"; import { PathConfigMap } from "@react-navigation/native"; import FimsWebviewScreen from "../screens/FimsWebviewScreen"; +import { AppParamsList } from "../../../navigation/params/AppParamsList"; import FIMS_ROUTES from "./routes"; import { FimsParamsList } from "./params"; -export const fimsLinkingOptions: PathConfigMap = { +export const fimsLinkingOptions: PathConfigMap = { [FIMS_ROUTES.MAIN]: { path: "fims", screens: { @@ -19,8 +20,7 @@ const Stack = createStackNavigator(); export const FimsNavigator = () => ( diff --git a/ts/features/idpay/barcode/navigation/navigator.tsx b/ts/features/idpay/barcode/navigation/navigator.tsx index 6ee9ee46417..d25351fcfff 100644 --- a/ts/features/idpay/barcode/navigation/navigator.tsx +++ b/ts/features/idpay/barcode/navigation/navigator.tsx @@ -8,8 +8,7 @@ const Stack = createStackNavigator(); export const IdPayBarcodeNavigator = () => ( { const route = useRoute(); const { initiativeId } = route.params; - const navigation = useNavigation(); + const navigation = useIONavigation(); const barcodePot = useIOSelector(state => idPayBarcodeByInitiativeIdSelector(state)(initiativeId) ); const navigateToInitiativeDetails = () => navigation.navigate(IDPayDetailsRoutes.IDPAY_DETAILS_MAIN, { - route: IDPayDetailsRoutes.IDPAY_DETAILS_MONITORING, - routeParams: { initiativeId } + screen: IDPayDetailsRoutes.IDPAY_DETAILS_MONITORING, + params: { initiativeId } }); if (pot.isLoading(barcodePot)) { @@ -170,7 +171,7 @@ const SuccessContent = ({ goBack, barcode }: SuccessContentProps) => { const BarcodeExpiredContent = ({ initiativeId }: BarcodeExpiredContentProps) => { - const navigation = useNavigation(); + const navigation = useIONavigation(); const dispatch = useIODispatch(); const { goBack } = navigation; const ctaClickHandler = () => { diff --git a/ts/features/idpay/code/navigation/navigator.tsx b/ts/features/idpay/code/navigation/navigator.tsx index 1f6a688e665..ae97c4f06da 100644 --- a/ts/features/idpay/code/navigation/navigator.tsx +++ b/ts/features/idpay/code/navigation/navigator.tsx @@ -16,8 +16,7 @@ const Stack = createStackNavigator(); export const IdPayCodeNavigator = () => ( = { /** * IDPay initiative onboarding */ diff --git a/ts/features/idpay/configuration/navigation/navigator.tsx b/ts/features/idpay/configuration/navigation/navigator.tsx index 5ddfeed56fd..680e6e5ec9b 100644 --- a/ts/features/idpay/configuration/navigation/navigator.tsx +++ b/ts/features/idpay/configuration/navigation/navigator.tsx @@ -47,8 +47,7 @@ export const IDPayConfigurationNavigator = () => ( { const actions = createActionsImplementation( - navigation as IOStackNavigationProp, + navigation as IOStackNavigationProp, dispatch ); diff --git a/ts/features/idpay/configuration/xstate/provider.tsx b/ts/features/idpay/configuration/xstate/provider.tsx index 840139ee51c..c8bd425a151 100644 --- a/ts/features/idpay/configuration/xstate/provider.tsx +++ b/ts/features/idpay/configuration/xstate/provider.tsx @@ -1,4 +1,3 @@ -import { useNavigation } from "@react-navigation/native"; import { useInterpret } from "@xstate/react"; import * as E from "fp-ts/lib/Either"; import { pipe } from "fp-ts/lib/function"; @@ -16,10 +15,7 @@ import { pagoPaApiUrlPrefixTest } from "../../../../config"; import { useXStateMachine } from "../../../../xstate/hooks/useXStateMachine"; -import { - AppParamsList, - IOStackNavigationProp -} from "../../../../navigation/params/AppParamsList"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; import { useIODispatch, useIOSelector } from "../../../../store/hooks"; import { sessionInfoSelector } from "../../../../store/reducers/authentication"; import { @@ -62,7 +58,7 @@ const IDPayConfigurationMachineProvider = (props: Props) => { O.getOrElse(() => PreferredLanguageEnum.it_IT) ); - const navigation = useNavigation>(); + const navigation = useIONavigation(); if (O.isNone(sessionInfo)) { throw new Error("Session info is undefined"); diff --git a/ts/features/idpay/details/components/MissingConfigurationAlert.tsx b/ts/features/idpay/details/components/MissingConfigurationAlert.tsx index 5e240c73e60..5d3ac8969cd 100644 --- a/ts/features/idpay/details/components/MissingConfigurationAlert.tsx +++ b/ts/features/idpay/details/components/MissingConfigurationAlert.tsx @@ -1,13 +1,14 @@ -import { useNavigation } from "@react-navigation/core"; import React from "react"; import { View } from "react-native"; import { Alert, VSpacer } from "@pagopa/io-app-design-system"; +import { NavigatorScreenParams } from "@react-navigation/native"; import { StatusEnum as InitiativeStatusEnum } from "../../../../../definitions/idpay/InitiativeDTO"; import I18n from "../../../../i18n"; import { IDPayConfigurationParamsList, IDPayConfigurationRoutes } from "../../configuration/navigation/navigator"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; type StatusWithAlert = Exclude< InitiativeStatusEnum, @@ -22,7 +23,7 @@ type Props = { }; const MissingConfigurationAlert = (props: Props) => { - const navigation = useNavigation(); + const navigation = useIONavigation(); const { status, initiativeId } = props; @@ -46,11 +47,11 @@ const MissingConfigurationAlert = (props: Props) => { const handleNavigation = () => { navigation.navigate(IDPayConfigurationRoutes.IDPAY_CONFIGURATION_MAIN, { - screen: screen[status], + screen: screen[status] as keyof IDPayConfigurationParamsList, params: { initiativeId } - }); + } as NavigatorScreenParams); }; return ( diff --git a/ts/features/idpay/onboarding/navigation/navigator.tsx b/ts/features/idpay/onboarding/navigation/navigator.tsx index 1356290a946..40c72636c7b 100644 --- a/ts/features/idpay/onboarding/navigation/navigator.tsx +++ b/ts/features/idpay/onboarding/navigation/navigator.tsx @@ -43,8 +43,7 @@ export const IDPayOnboardingNavigator = () => ( initialRouteName={ IDPayOnboardingRoutes.IDPAY_ONBOARDING_INITIATIVE_DETAILS } - headerMode={"none"} - screenOptions={{ gestureEnabled: isGestureEnabled }} + screenOptions={{ gestureEnabled: isGestureEnabled, headerShown: false }} > { const actions = createActionsImplementation( - rootNavigation as IOStackNavigationProp, - onboardingNavigation as IDPayOnboardingStackNavigationProp, + rootNavigation as IOStackNavigationProp, + onboardingNavigation as IDPayOnboardingStackNavigationProp< + IDPayOnboardingParamsList, + keyof IDPayOnboardingParamsList + >, dispatch ); diff --git a/ts/features/idpay/onboarding/xstate/provider.tsx b/ts/features/idpay/onboarding/xstate/provider.tsx index 8eb86422cc9..6f42814cdea 100644 --- a/ts/features/idpay/onboarding/xstate/provider.tsx +++ b/ts/features/idpay/onboarding/xstate/provider.tsx @@ -9,10 +9,7 @@ import { idPayApiUatBaseUrl, idPayTestToken } from "../../../../config"; -import { - AppParamsList, - IOStackNavigationProp -} from "../../../../navigation/params/AppParamsList"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; import { useIODispatch, useIOSelector } from "../../../../store/hooks"; import { sessionInfoSelector } from "../../../../store/reducers/authentication"; import { @@ -54,10 +51,13 @@ const IDPayOnboardingMachineProvider = (props: Props) => { const sessionInfo = useIOSelector(sessionInfoSelector); - const rootNavigation = useNavigation>(); + const rootNavigation = useIONavigation(); const onboardingNavigation = useNavigation< - IDPayOnboardingStackNavigationProp + IDPayOnboardingStackNavigationProp< + IDPayOnboardingParamsList, + keyof IDPayOnboardingParamsList + > >(); if (O.isNone(sessionInfo)) { diff --git a/ts/features/idpay/payment/navigation/navigator.tsx b/ts/features/idpay/payment/navigation/navigator.tsx index d2e1aef52ed..1f78fc47a2c 100644 --- a/ts/features/idpay/payment/navigation/navigator.tsx +++ b/ts/features/idpay/payment/navigation/navigator.tsx @@ -32,8 +32,7 @@ export const IDPayPaymentNavigator = () => ( { const sessionInfo = useIOSelector(sessionInfoSelector); const isPagoPATestEnabled = useIOSelector(isPagoPATestEnabledSelector); - const navigation = useNavigation>(); + const navigation = useIONavigation(); if (O.isNone(sessionInfo)) { throw new Error("Session info is undefined"); diff --git a/ts/features/idpay/unsubscription/navigation/navigator.tsx b/ts/features/idpay/unsubscription/navigation/navigator.tsx index 7460468f989..bc7ea864e67 100644 --- a/ts/features/idpay/unsubscription/navigation/navigator.tsx +++ b/ts/features/idpay/unsubscription/navigation/navigator.tsx @@ -46,7 +46,7 @@ export const IDPayUnsubscriptionNavigator = () => { initialRouteName={ IDPayUnsubscriptionRoutes.IDPAY_UNSUBSCRIPTION_CONFIRMATION } - headerMode={"none"} + screenOptions={{ headerShown: false }} > { O.getOrElse(() => PreferredLanguageEnum.it_IT) ); - const navigation = useNavigation>(); + const navigation = useIONavigation(); if (O.isNone(sessionInfo)) { throw new Error("Session info is undefined"); diff --git a/ts/features/idpay/wallet/screens/IdPayInstrumentInitiativesScreen.tsx b/ts/features/idpay/wallet/screens/IdPayInstrumentInitiativesScreen.tsx index f65801060b5..2c67989077e 100644 --- a/ts/features/idpay/wallet/screens/IdPayInstrumentInitiativesScreen.tsx +++ b/ts/features/idpay/wallet/screens/IdPayInstrumentInitiativesScreen.tsx @@ -5,14 +5,13 @@ import { pipe } from "fp-ts/lib/function"; import React from "react"; import { ScrollView, StyleSheet, View } from "react-native"; import { HSpacer, VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { H1 } from "../../../../components/core/typography/H1"; import { H4 } from "../../../../components/core/typography/H4"; import { IOStyles } from "../../../../components/core/variables/IOStyles"; import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; import { LogoPaymentWithFallback } from "../../../../components/ui/utils/components/LogoPaymentWithFallback"; import TypedI18n from "../../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../../navigation/params/WalletParamsList"; import { useIODispatch, useIOSelector } from "../../../../store/hooks"; import customVariables from "../../../../theme/variables"; import { IdPayInstrumentInitiativesList } from "../components/IdPayInstrumentInitiativesList"; @@ -26,13 +25,14 @@ export type IdPayInstrumentInitiativesScreenRouteParams = { idWallet: string; }; -type Props = IOStackNavigationRouteProps< - WalletParamsList, - "WALLET_IDPAY_INITIATIVE_LIST" ->; - -export const IdPayInstrumentInitiativesScreen = (props: Props) => { - const { idWallet } = props.route.params; +export const IdPayInstrumentInitiativesScreen = () => { + const { idWallet } = + useRoute< + Route< + "WALLET_IDPAY_INITIATIVE_LIST", + IdPayInstrumentInitiativesScreenRouteParams + > + >().params; const dispatch = useIODispatch(); const initiatives = useIOSelector(idPayInitiativesFromInstrumentSelector); diff --git a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/CtaBar.test.tsx.snap b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/CtaBar.test.tsx.snap index 4ddc122e826..a41b0b4724e 100644 --- a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/CtaBar.test.tsx.snap +++ b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/CtaBar.test.tsx.snap @@ -20,284 +20,309 @@ exports[`the \`CtaBar\` component when neither \`paymentData\` nor \`dueDate\` a } > - - - + + /> + + - + - MESSAGE_DETAIL - + + MESSAGE_DETAIL + + + - - - + - + style={ + Object { + "flex": 1, + } + } + > + + diff --git a/ts/features/messages/hooks/useMessageOpening.tsx b/ts/features/messages/hooks/useMessageOpening.tsx index c02fab36504..15f06a4fc86 100644 --- a/ts/features/messages/hooks/useMessageOpening.tsx +++ b/ts/features/messages/hooks/useMessageOpening.tsx @@ -1,6 +1,5 @@ import * as React from "react"; import { View } from "react-native"; -import { useNavigation } from "@react-navigation/native"; import { constNull, pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import { IOColors } from "@pagopa/io-app-design-system"; @@ -33,6 +32,7 @@ import { } from "../components/PreconditionBottomSheet/PreconditionContent"; import { PreconditionFooter } from "../components/PreconditionBottomSheet/PreconditionFooter"; import { MESSAGES_ROUTES } from "../navigation/routes"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; const renderPreconditionHeader = ( content: RemoteValue @@ -88,7 +88,7 @@ const renderPreconditionFooter = ( }; export const useMessageOpening = () => { - const navigation = useNavigation(); + const navigation = useIONavigation(); const dispatch = useIODispatch(); const pnSupported = useIOSelector(isPnSupportedSelector); diff --git a/ts/features/messages/navigation/MessagesHomeTabNavigator.tsx b/ts/features/messages/navigation/MessagesHomeTabNavigator.tsx index 91efe43dd76..eedf1bd910f 100644 --- a/ts/features/messages/navigation/MessagesHomeTabNavigator.tsx +++ b/ts/features/messages/navigation/MessagesHomeTabNavigator.tsx @@ -24,16 +24,17 @@ const MessagesHomeTabNavigator = () => ( ( height: 34 } }} - lazy={true} > { return ( ; - -type Props = OwnProps & - ReturnType & - ReturnType & - ReduxProps; - const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { title: "messageDetails.contextualHelpTitle", body: "messageDetails.contextualHelpContent" @@ -80,24 +67,46 @@ const renderLoadingState = () => ( ); -const MessageDetailScreen = ({ - goBack, - hasPaidBadge, - loadMessageDetails, - maybeServiceMetadata, - messageId, - serviceId, - message, - messageDetails, - refreshService, - service -}: Props) => { +const MessageDetailScreen = () => { + const { messageId, serviceId } = + useRoute>() + .params; + const dispatch = useIODispatch(); + + const refreshService = (serviceId: string) => + dispatch(loadServiceDetail.request(serviceId)); + const requestLoadMessageDetails = (id: UIMessageId) => + dispatch(loadMessageDetails.request({ id })); + const goBack = () => { + dispatch(resetGetMessageDataAction()); + return navigateBack(); + }; + + const message = pot.toUndefined( + useIOSelector(state => getPaginatedMessageById(state, messageId)) + ); + const messageDetails = useIOSelector(state => + messageDetailsByIdSelector(state, messageId) + ); + const service = pipe( + pot.toOption(useIOSelector(state => serviceByIdSelector(state, serviceId))), + O.map(toUIService), + O.toUndefined + ); + // Map the potential message to the potential service + const maybeServiceMetadata = useIOSelector( + serviceMetadataByIdSelector(serviceId) + ); + const hasPaidBadge: boolean = useIOSelector(state => + message ? isNoticePaidSelector(state, message.category) : false + ); + useOnFirstRender(() => { if ( pot.isError(messageDetails) || (pot.isNone(messageDetails) && !pot.isLoading(messageDetails)) ) { - loadMessageDetails(messageId); + requestLoadMessageDetails(messageId); } }); @@ -112,7 +121,7 @@ const MessageDetailScreen = ({ const onRetry = () => { // we try to reload both the message content and the service refreshService(serviceId); - loadMessageDetails(messageId); + requestLoadMessageDetails(messageId); }; const renderErrorState = () => ( @@ -159,45 +168,4 @@ const MessageDetailScreen = ({ ); }; -const mapStateToProps = (state: GlobalState, ownProps: OwnProps) => { - const messageId = ownProps.route.params.messageId; - const serviceId = ownProps.route.params.serviceId; - const message = pot.toUndefined(getPaginatedMessageById(state, messageId)); - const messageDetails = messageDetailsByIdSelector(state, messageId); - const service = pipe( - pot.toOption(serviceByIdSelector(state, serviceId)), - O.map(toUIService), - O.toUndefined - ); - // Map the potential message to the potential service - const maybeServiceMetadata = serviceMetadataByIdSelector(serviceId)(state); - const hasPaidBadge: boolean = message - ? isNoticePaidSelector(state, message.category) - : false; - - return { - messageId, - serviceId, - hasPaidBadge, - message, - messageDetails, - maybeServiceMetadata, - service - }; -}; - -const mapDispatchToProps = (dispatch: Dispatch) => ({ - refreshService: (serviceId: string) => - dispatch(loadServiceDetail.request(serviceId)), - loadMessageDetails: (id: UIMessageId) => - dispatch(loadMessageDetails.request({ id })), - goBack: () => { - dispatch(resetGetMessageDataAction()); - return navigateBack(); - } -}); - -export default connect( - mapStateToProps, - mapDispatchToProps -)(MessageDetailScreen); +export default MessageDetailScreen; diff --git a/ts/features/messages/screens/MessageRouterScreen.tsx b/ts/features/messages/screens/MessageRouterScreen.tsx index 13a36486d2c..4d3489b3657 100644 --- a/ts/features/messages/screens/MessageRouterScreen.tsx +++ b/ts/features/messages/screens/MessageRouterScreen.tsx @@ -1,9 +1,12 @@ -import { StackActions, useNavigation } from "@react-navigation/native"; +import { StackActions } from "@react-navigation/native"; import React, { useCallback, useEffect, useRef } from "react"; import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; import { LoadingErrorComponent } from "../../../components/LoadingErrorComponent"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { + IOStackNavigationRouteProps, + useIONavigation +} from "../../../navigation/params/AppParamsList"; import { MessagesParamsList } from "../navigation/params"; import ROUTES from "../../../navigation/routes"; import { useIODispatch, useIOSelector } from "../../../store/hooks"; @@ -41,7 +44,7 @@ export const MessageRouterScreen = ( const messageId = props.route.params.messageId; const fromPushNotification = props.route.params.fromNotification; const dispatch = useIODispatch(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const isFirstRendering = useRef(true); const showSpinner = useIOSelector(showSpinnerFromMessageGetStatusSelector); const thirdPartyMessageDetailsError = useIOSelector( diff --git a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap index 18daafbbdfa..0c3bd733091 100644 --- a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap +++ b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`MessageAttachment Should match the snapshot when there is an error 1`] = ` +exports[`MessageAttachment Should match the snapshot when everything went fine 1`] = ` - - - - - - - - - - - - - PDF Preview - - - - - - - - - - - - - - - - - - - + - - - - + - - - - + - + + + + + + + + + + + + + + + + - + Loading document... + + + + + + + + + + + - + - + + + Save or share + + + + + + + + + + + + + + + + - - + + + + + + + + PDF Preview + + + - + - - - + > + + + + + + + + - - There is a temporary problem, please try again. - - - - If the problem is not resolved, report it with the '?' icon at the top right, thank you! - - - + + @@ -734,12 +885,26 @@ exports[`MessageAttachment Should match the snapshot when there is an error 1`] + `; -exports[`MessageAttachment Should match the snapshot when everything went fine 1`] = ` +exports[`MessageAttachment Should match the snapshot when there is an error 1`] = ` - - - - - - - - - - - - - PDF Preview - - - - - - - - - - - - - - - - - - - + - @@ -1228,74 +1081,57 @@ exports[`MessageAttachment Should match the snapshot when everything went fine 1 "flex": 1, } } - testID="overlayComponent" > - - - + "current": null, + }, + ] + } + > + - - - - - - + - - - - + /> + + + + + + + + + - - + style={ + Array [ + Object { + "textAlign": "center", + }, + Object { + "fontSize": 24, + "lineHeight": 34, + }, + Object { + "color": "#17324D", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "600", + }, + ] + } + weight="SemiBold" + > + There is a temporary problem, please try again. + + - Loading document... + If the problem is not resolved, report it with the '?' icon at the top right, thank you! - - - + + + + + + + + + + + PDF Preview + + + - - Save or share - + + + + @@ -1632,6 +1630,20 @@ exports[`MessageAttachment Should match the snapshot when everything went fine 1 + diff --git a/ts/features/messages/screens/__tests__/__snapshots__/MessageRouterScreen.test.tsx.snap b/ts/features/messages/screens/__tests__/__snapshots__/MessageRouterScreen.test.tsx.snap index 067edc12415..57f0c7915b5 100644 --- a/ts/features/messages/screens/__tests__/__snapshots__/MessageRouterScreen.test.tsx.snap +++ b/ts/features/messages/screens/__tests__/__snapshots__/MessageRouterScreen.test.tsx.snap @@ -20,614 +20,639 @@ exports[`MessageRouterScreen should match snapshot before starting to retrieve m } > - - - + + /> + + - + - MESSAGE_ROUTER - + + MESSAGE_ROUTER + + + - - - + - - + - - + - - - - - + } + bbHeight={24} + bbWidth={24} + color={4279111443} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0E0F13", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4279111443} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + + - - - - + > + + + > + + - - + + - - - - - + + + + Loading message details in progress... + + - Loading message details in progress... - - + /> + - - + + @@ -661,614 +686,639 @@ exports[`MessageRouterScreen should match snapshot if message data retrieval was } > - - - + + /> + + - + - MESSAGE_ROUTER - + + MESSAGE_ROUTER + + + - - - + - - - - - + + + - - - - - + } + bbHeight={24} + bbWidth={24} + color={4279111443} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0E0F13", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4279111443} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + + - - - - + > + + + > + + - - + + - - - - - + + + + Loading message details in progress... + + - Loading message details in progress... - - + /> + - - + + @@ -1302,630 +1352,626 @@ exports[`MessageRouterScreen should match snapshot on message data retrieval fai } > - - - + + /> + + - + - MESSAGE_ROUTER - + + MESSAGE_ROUTER + + + - - - + - - + - - + - - - - - + } + bbHeight={24} + bbWidth={24} + color={4279111443} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0E0F13", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4279111443} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + + - - - - + > + + - - - - - - + > + + + + + + - - - - - - + } + enableAutomaticScroll={true} + enableOnAndroid={false} + enableResetScrollToCoords={true} + extraHeight={75} + extraScrollHeight={0} + getScrollResponder={[Function]} + handleOnScroll={[Function]} + keyboardDismissMode="interactive" + keyboardOpeningTime={250} + keyboardShouldPersistTaps="handled" + keyboardSpace={0} + onScroll={[Function]} + resetKeyboardSpace={[Function]} + resetScrollToCoords={ + Object { + "x": 0, + "y": 0, + } + } + scrollEventThrottle={1} + scrollForExtraHeightOnAndroid={[Function]} + scrollIntoView={[Function]} + scrollToEnd={[Function]} + scrollToFocusedInput={[Function]} + scrollToPosition={[Function]} + showsVerticalScrollIndicator={true} + style={ + Object { + "backgroundColor": "transparent", + "flex": 1, + } + } + testID="LoadingErrorComponentError" + update={[Function]} + viewIsInsideTabBar={false} + > + - + - There is a temporary problem, please try again. - + /> - + + There is a temporary problem, please try again. + + + + + - - - - - + + - - Cancel - - - - + Cancel + + + + - - Retry - + + Retry + + - - + + @@ -2238,614 +2313,639 @@ exports[`MessageRouterScreen should match snapshot on message data retrieval suc } > - - - + + /> + + - + - MESSAGE_ROUTER - + + MESSAGE_ROUTER + + + - - - + - - + - - + - - - - - + } + bbHeight={24} + bbWidth={24} + color={4279111443} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0E0F13", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4279111443} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + + - - - - + > + + + > + + - - + + - - - - - + + + + Loading message details in progress... + + - Loading message details in progress... - - + /> + - - + + @@ -2879,614 +2979,639 @@ exports[`MessageRouterScreen should match snapshot while retrieving message data } > - - - + + /> + + - + - MESSAGE_ROUTER - + + MESSAGE_ROUTER + + + - - - + - - + - - + - - - - - + } + bbHeight={24} + bbWidth={24} + color={4279111443} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0E0F13", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4279111443} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + + - - - - + > + + + > + + - - + + - - - - - + + + + Loading message details in progress... + + - Loading message details in progress... - - + /> + - - + + diff --git a/ts/features/pn/components/LegacyMessageDetails.tsx b/ts/features/pn/components/LegacyMessageDetails.tsx index 78d59087e5e..b03bf7d4d1b 100644 --- a/ts/features/pn/components/LegacyMessageDetails.tsx +++ b/ts/features/pn/components/LegacyMessageDetails.tsx @@ -18,7 +18,6 @@ import { pnFrontendUrlSelector } from "../../../store/reducers/backendStatus"; import { UIAttachment, UIMessageId } from "../../messages/types"; import { clipboardSetStringWithFeedback } from "../../../utils/clipboard"; import { LegacyMessageAttachments } from "../../messages/components/LegacyMessageAttachments"; -import NavigationService from "../../../navigation/NavigationService"; import PN_ROUTES from "../navigation/routes"; import { PNMessage } from "../store/types/types"; import { NotificationPaymentInfo } from "../../../../definitions/pn/NotificationPaymentInfo"; @@ -33,6 +32,8 @@ import { import { LevelEnum } from "../../../../definitions/content/SectionStatus"; import { ATTACHMENT_CATEGORY } from "../../messages/types/attachmentCategory"; import { maxVisiblePaymentCountGenerator } from "../utils"; +import { MESSAGES_ROUTES } from "../../messages/navigation/routes"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; import { LegacyMessageDetailsContent } from "./LegacyMessageDetailsContent"; import { MessageDetailsHeader } from "./MessageDetailsHeader"; import { MessageDetailsSection } from "./MessageDetailsSection"; @@ -59,6 +60,7 @@ export const LegacyMessageDetails = ({ const viewRef = createRef(); const presentPaymentsBottomSheetRef = useRef<() => void>(); const frontendUrl = useIOSelector(pnFrontendUrlSelector); + const navigation = useIONavigation(); const partitionedAttachments = pipe( message.attachments, @@ -78,13 +80,19 @@ export const LegacyMessageDetails = ({ const openAttachment = useCallback( (attachment: UIAttachment) => { trackPNAttachmentOpening(attachment.category); - NavigationService.navigate(PN_ROUTES.MESSAGE_ATTACHMENT, { - messageId, - attachmentId: attachment.id, - category: attachment.category + navigation.navigate(MESSAGES_ROUTES.MESSAGES_NAVIGATOR, { + screen: PN_ROUTES.MAIN, + params: { + screen: PN_ROUTES.MESSAGE_ATTACHMENT, + params: { + messageId, + attachmentId: attachment.id, + category: attachment.category + } + } }); }, - [messageId] + [messageId, navigation] ); const maxVisiblePaymentCount = maxVisiblePaymentCountGenerator(); diff --git a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap index ec8a030d60f..a3d90d693c2 100644 --- a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap +++ b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap @@ -20,630 +20,655 @@ exports[`MessageDetails component should match the snapshot with default props 1 } > - - - + + /> + + - + - DUMMY_ROUTE - + + DUMMY_ROUTE + + + - - - + - - - - + + + - + + + + + + + + - - - - + Legal value + - - Legal value - - - - - - - - - + + + + + + - - - + - ######## subject ######## - - - + ######## subject ######## + + + + 01 Jan 2020, 00:00 + + - 01 Jan 2020, 00:00 - - - + - - + /> + - + + - ######## abstract ######## - + } + } + style={ + Array [ + Object { + "fontSize": 16, + "lineHeight": 24, + }, + Object { + "color": "#2B2E38", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "400", + }, + ] + } + weight="Regular" + > + ######## abstract ######## + + - - + + diff --git a/ts/features/pn/components/__test__/__snapshots__/MessageF24.test.tsx.snap b/ts/features/pn/components/__test__/__snapshots__/MessageF24.test.tsx.snap index b044f551d36..1a47571638c 100644 --- a/ts/features/pn/components/__test__/__snapshots__/MessageF24.test.tsx.snap +++ b/ts/features/pn/components/__test__/__snapshots__/MessageF24.test.tsx.snap @@ -20,463 +20,488 @@ exports[`MessageF24 component when there are multiple F24 should match the snaps } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - + - Modelli F24 - - - - - + Modelli F24 + + + + + - Se preferisci, puoi pagare questa notifica tramite F24. - - - + weight="Regular" + > + Se preferisci, puoi pagare questa notifica tramite F24. + + - - Vedi modelli F24 - + + Vedi modelli F24 + + @@ -514,593 +539,618 @@ exports[`MessageF24 component when there is only one F24 should match the snapsh } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - + - Modelli F24 - - - - - + Modelli F24 + + + + + - Se preferisci, puoi pagare questa notifica tramite F24. - - - + style={ + Array [ + Object { + "fontSize": 16, + "lineHeight": 24, + }, + Object { + "color": "#17324D", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "400", + }, + ] + } + weight="Regular" + > + Se preferisci, puoi pagare questa notifica tramite F24. + + - - - - - - - - + + + + + + + - invoice.pdf - - - - + invoice.pdf + + + - - - - + + + + + + diff --git a/ts/features/pn/components/__test__/__snapshots__/MessagePaymentItem.test.tsx.snap b/ts/features/pn/components/__test__/__snapshots__/MessagePaymentItem.test.tsx.snap index 0256890a477..f54b42a365f 100644 --- a/ts/features/pn/components/__test__/__snapshots__/MessagePaymentItem.test.tsx.snap +++ b/ts/features/pn/components/__test__/__snapshots__/MessagePaymentItem.test.tsx.snap @@ -20,392 +20,417 @@ exports[`MessagePaymentItem component Should match the snapshot for a loading it } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - - - + + + /> - - - + > + + + + + - - + > + + @@ -442,502 +467,527 @@ exports[`MessagePaymentItem component Should match the snapshot for a payable it } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - - - + } + > + + - - - Due date 23/11/2023 - - - Causale - - - + + Due date 23/11/2023 + + - 0.99 € - - + Causale + + + - - - - + } + style={ + Array [ + Object { + "fontSize": 18, + "lineHeight": 25, + }, + Object { + "color": "#0073E6", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "600", + }, + ] + } + weight="SemiBold" + > + 0.99 € + + + + + + + @@ -974,514 +1024,539 @@ exports[`MessagePaymentItem component Should match the snapshot for a processed } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - - - + } + > + + - - - Codice avviso - - - n1 - - + Codice avviso + + - Revoked + n1 - - - + - - + > + Revoked + + + + + + + + diff --git a/ts/features/pn/components/__test__/__snapshots__/MessagePayments.test.tsx.snap b/ts/features/pn/components/__test__/__snapshots__/MessagePayments.test.tsx.snap index acea4d2038d..c502163f348 100644 --- a/ts/features/pn/components/__test__/__snapshots__/MessagePayments.test.tsx.snap +++ b/ts/features/pn/components/__test__/__snapshots__/MessagePayments.test.tsx.snap @@ -20,281 +20,306 @@ exports[`MessagePayments component Should match the snapshot for a cancelled mes } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - + > + + @@ -326,1167 +351,1192 @@ exports[`MessagePayments component Should match the snapshot for a cancelled mes } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + + /> - - - Pagamenti - - - - - - - - - - - + Pagamenti + + + - - Per l'eventuale rimborso di pagamenti legati a questa notifica, contatta l'ente mittente. - - - - - + + + + + + - + /> - - - Codice avviso - - - n1 - - + "color": "#17324D", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "400", + }, + ] + } + weight="Regular" + > + Per l'eventuale rimborso di pagamenti legati a questa notifica, contatta l'ente mittente. + + + + + + + Codice avviso + + - Paid + n1 - - - + - - - - - - - - - + > + Paid + + + + + + + + + + + + + - - - Codice avviso - - - n2 - - + Codice avviso + + - Paid + n2 - - - + - - + > + Paid + + + + + + + + - - - - + + - - - Codice avviso - - - n3 - - + Codice avviso + + - Paid + n3 - - - + - - + > + Paid + + + + + + + + @@ -1525,506 +1575,531 @@ exports[`MessagePayments component Should match the snapshot for a single loadin } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - + - Avvisi pagoPA - - - - - - - - - - - - + Avvisi pagoPA + + + + + + + + + + + - - - + > + + + + + - - + > + + @@ -2063,966 +2138,991 @@ exports[`MessagePayments component Should match the snapshot for five loading pa } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - + - Avvisi pagoPA - - - - - - - - - - - - + Avvisi pagoPA + + + + + + + + + + + - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + @@ -3061,966 +3161,991 @@ exports[`MessagePayments component Should match the snapshot for five payable pa } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - + } + > - + - Avvisi pagoPA - - - - - - - - - - - - + Avvisi pagoPA + + + + + + + + + + + - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + + + + /> + + width={121} + /> + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + @@ -4059,966 +4184,991 @@ exports[`MessagePayments component Should match the snapshot for five processed } > - - - + + /> + + - + - DUMMY - + + DUMMY + + + - - - + - - + - Avvisi pagoPA - - - - - - - - - - - - + Avvisi pagoPA + + + + + + + + + + + - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + @@ -5057,1006 +5207,1031 @@ exports[`MessagePayments component Should match the snapshot for more than five } > - - - + + /> + + + - + - DUMMY - + + DUMMY + + + - - - + - - + - Avvisi pagoPA - - - - - - - - - - - - + Avvisi pagoPA + + + + + + + + + + + - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + - - - + + + + + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - - + + /> - - - + > + + + + + - - + > + + - - - + /> + > + + diff --git a/ts/features/pn/navigation/navigator.tsx b/ts/features/pn/navigation/navigator.tsx index d837d801971..998adc94e39 100644 --- a/ts/features/pn/navigation/navigator.tsx +++ b/ts/features/pn/navigation/navigator.tsx @@ -18,8 +18,7 @@ export const PnStackNavigator = () => { return ( -): React.ReactElement => { - const { noticeCode, creditorTaxId: maybeCreditorTaxId } = props.route.params; +export const PaidPaymentScreen = (): React.ReactElement => { + const { noticeCode, creditorTaxId: maybeCreditorTaxId } = + useRoute< + Route< + "PN_CANCELLED_MESSAGE_PAID_PAYMENT", + PaidPaymentScreenNavigationParams + > + >().params; const formattedPaymentNoticeNumber = noticeCode .replace(/(\d{4})/g, "$1 ") .trim(); diff --git a/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap b/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap index 4323d0c8345..c92e56d1986 100644 --- a/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap +++ b/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap @@ -20,947 +20,939 @@ exports[`MessageDetailsScreen should match the snapshot when everything went fin } > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + - + + + + + + + + - - - - + Legal value + - - Legal value - + + + + + + + + - + ######## subject ######## + + + + 01 Jan 2020, 00:00 + + + + - + Ċentru tas-Saħħa + + - - + + + + - - + } + /> + + - + + - ######## subject ######## - - - + ######## abstract ######## + + + + + + + + + - 01 Jan 2020, 00:00 - - - - - - Ċentru tas-Saħħa - - - health - - - - - - - - - - - - + + + + + + + - + - ######## abstract ######## - + > + + + + + + + + + + + - + @@ -968,6 +960,20 @@ exports[`MessageDetailsScreen should match the snapshot when everything went fin + @@ -993,711 +999,703 @@ exports[`MessageDetailsScreen should match the snapshot when there is an error 1 } > + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + Qualcosa è andato storto + + + Non è stato possibile recuperare i dettagli del tuo messaggio. Riprova per favore + - + + + + + - Qualcosa è andato storto - - - + - Non è stato possibile recuperare i dettagli del tuo messaggio. Riprova per favore - + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -1705,6 +1703,20 @@ exports[`MessageDetailsScreen should match the snapshot when there is an error 1 + diff --git a/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap b/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap index 8af2ce68b75..ca0c053e30c 100644 --- a/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap +++ b/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap @@ -20,731 +20,721 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p } > - - - + + /> + + - + - PN_CANCELLED_MESSAGE_PAID_PAYMENT - + + PN_CANCELLED_MESSAGE_PAID_PAYMENT + + + - - - + - - + - - + - - - - - + } + bbHeight={24} + bbWidth={24} + color={4279111443} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0E0F13", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4279111443} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + + - - - + - Payment informations - - - - - + Payment informations + + + + + > + + - - + + - - - - - - - - - - - - - + + + + + + + + + + - This notice has been already paid! - - - - - - - + This notice has been already paid! + + + + + + - + - Notice code - - + Notice code + + - 0180 1198 8086 4794 97 - - - - + 0180 1198 8086 4794 97 + + + - - - - + + + + + + - - - + + + @@ -1002,731 +1027,721 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p } > - - - + + /> + + - + - PN_CANCELLED_MESSAGE_PAID_PAYMENT - + + PN_CANCELLED_MESSAGE_PAID_PAYMENT + + + - - - + - - + - - + - - - - - + } + bbHeight={24} + bbWidth={24} + color={4279111443} + focusable={false} + height={24} + importantForAccessibility="no-hide-descendants" + meetOrSlice={0} + minX={0} + minY={0} + style={ + Array [ + Object { + "backgroundColor": "transparent", + "borderWidth": 0, + }, + Object { + "color": "#0E0F13", + }, + Object { + "flex": 0, + "height": 24, + "width": 24, + }, + ] + } + tintColor={4279111443} + vbHeight={24} + vbWidth={24} + width={24} + > + + + + + - - - + - Payment informations - + } + } + numberOfLines={1} + style={ + Array [ + Object { + "fontSize": 16, + "lineHeight": 24, + }, + Object { + "color": "#475A6D", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "400", + }, + ] + } + testID="bodyLabel" + weight="Regular" + > + Payment informations + + - - + > + + - - + + - - - - - - - - - - - - - + + + + + + + + + + - This notice has been already paid! - - - - - - - + This notice has been already paid! + + + + + + - + - Notice code - - + Notice code + + - 0180 1198 8086 4794 97 - - - - + 0180 1198 8086 4794 97 + + + - - - - + + + + + + - - - + - Payee Fiscal Code - - + Payee Fiscal Code + + - 00000000009 - - - - + 00000000009 + + + - - - - + + + + + + - - - + + + diff --git a/ts/features/pn/utils/index.ts b/ts/features/pn/utils/index.ts index a7d4ef91778..c4f43465f2b 100644 --- a/ts/features/pn/utils/index.ts +++ b/ts/features/pn/utils/index.ts @@ -3,7 +3,10 @@ import { identity, pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import * as E from "fp-ts/lib/Either"; import * as RA from "fp-ts/lib/ReadonlyArray"; -import { RptIdFromString } from "@pagopa/io-pagopa-commons/lib/pagopa"; +import { + AmountInEuroCents, + RptIdFromString +} from "@pagopa/io-pagopa-commons/lib/pagopa"; import { Dispatch } from "redux"; import I18n from "../../../i18n"; import { UIService } from "../../../store/reducers/entities/services/types"; @@ -150,6 +153,10 @@ export const initializeAndNavigateToWalletForPayment = ( NavigationService.navigate(ROUTES.WALLET_NAVIGATOR, { screen: ROUTES.PAYMENT_TRANSACTION_SUMMARY, - params: { rptId: eitherRptId.right, startOrigin: "message" } + params: { + rptId: eitherRptId.right, + paymentStartOrigin: "message", + initialAmount: "00000" as AmountInEuroCents + } }); }; diff --git a/ts/features/wallet/bancomat/screen/BancomatDetailScreen.tsx b/ts/features/wallet/bancomat/screen/BancomatDetailScreen.tsx index 3b60b9efad1..cc8cfadc2bf 100644 --- a/ts/features/wallet/bancomat/screen/BancomatDetailScreen.tsx +++ b/ts/features/wallet/bancomat/screen/BancomatDetailScreen.tsx @@ -4,11 +4,10 @@ import { sequenceS } from "fp-ts/lib/Apply"; import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import * as React from "react"; +import { Route, useRoute } from "@react-navigation/native"; import WorkunitGenericFailure from "../../../../components/error/WorkunitGenericFailure"; import { PaymentCardBig } from "../../../../components/ui/cards/payment/PaymentCardBig"; import I18n from "../../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../../navigation/params/WalletParamsList"; import { useIOSelector } from "../../../../store/hooks"; import { profileNameSurnameSelector } from "../../../../store/reducers/profile"; import { paymentMethodByIdSelector } from "../../../../store/reducers/wallet/wallets"; @@ -21,18 +20,17 @@ export type BancomatDetailScreenNavigationParams = Readonly<{ bancomat: BancomatPaymentMethod; }>; -type Props = IOStackNavigationRouteProps< - WalletParamsList, - "WALLET_BANCOMAT_DETAIL" ->; - /** * Detail screen for a bancomat * @constructor */ -const BancomatDetailScreen = ({ route }: Props) => { +const BancomatDetailScreen = () => { + const { idWallet } = + useRoute< + Route<"WALLET_BANCOMAT_DETAIL", BancomatDetailScreenNavigationParams> + >().params.bancomat; const bancomat = useIOSelector(state => - paymentMethodByIdSelector(state, route.params.bancomat.idWallet) + paymentMethodByIdSelector(state, idWallet) ); const bannerViewRef = React.useRef(null); const nameSurname = useIOSelector(profileNameSurnameSelector); diff --git a/ts/features/wallet/cobadge/screen/CobadgeDetailScreen.tsx b/ts/features/wallet/cobadge/screen/CobadgeDetailScreen.tsx index 05b226a6dd2..a3a7a41554b 100644 --- a/ts/features/wallet/cobadge/screen/CobadgeDetailScreen.tsx +++ b/ts/features/wallet/cobadge/screen/CobadgeDetailScreen.tsx @@ -4,11 +4,10 @@ import { sequenceS } from "fp-ts/lib/Apply"; import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import * as React from "react"; +import { Route, useRoute } from "@react-navigation/native"; import WorkunitGenericFailure from "../../../../components/error/WorkunitGenericFailure"; import { PaymentCardBig } from "../../../../components/ui/cards/payment/PaymentCardBig"; import I18n from "../../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../../navigation/params/WalletParamsList"; import { useIOSelector } from "../../../../store/hooks"; import { creditCardByIdSelector } from "../../../../store/reducers/wallet/wallets"; import { CreditCardPaymentMethod } from "../../../../types/pagopa"; @@ -21,17 +20,15 @@ export type CobadgeDetailScreenNavigationParams = Readonly<{ cobadge: CreditCardPaymentMethod; }>; -type Props = IOStackNavigationRouteProps< - WalletParamsList, - "WALLET_COBADGE_DETAIL" ->; - /** * Detail screen for a cobadge card * @constructor */ -const CobadgeDetailScreen = (props: Props) => { - const { cobadge } = props.route.params; +const CobadgeDetailScreen = () => { + const { cobadge } = + useRoute< + Route<"WALLET_COBADGE_DETAIL", CobadgeDetailScreenNavigationParams> + >().params; const card = useIOSelector(state => creditCardByIdSelector(state, cobadge.idWallet) ); diff --git a/ts/features/wallet/creditCard/screen/CreditCardDetailScreen.tsx b/ts/features/wallet/creditCard/screen/CreditCardDetailScreen.tsx index e734d2ec256..2bc63875bb6 100644 --- a/ts/features/wallet/creditCard/screen/CreditCardDetailScreen.tsx +++ b/ts/features/wallet/creditCard/screen/CreditCardDetailScreen.tsx @@ -4,11 +4,10 @@ import { sequenceS } from "fp-ts/lib/Apply"; import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import { IOLogoPaymentExtType } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import LoadingSpinnerOverlay from "../../../../components/LoadingSpinnerOverlay"; import WorkunitGenericFailure from "../../../../components/error/WorkunitGenericFailure"; import { PaymentCardBig } from "../../../../components/ui/cards/payment/PaymentCardBig"; -import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../../navigation/params/WalletParamsList"; import { useIOSelector } from "../../../../store/hooks"; import { creditCardByIdSelector } from "../../../../store/reducers/wallet/wallets"; import { CreditCardPaymentMethod } from "../../../../types/pagopa"; @@ -22,17 +21,15 @@ export type CreditCardDetailScreenNavigationParams = Readonly<{ creditCard: CreditCardPaymentMethod; }>; -type Props = IOStackNavigationRouteProps< - WalletParamsList, - "WALLET_CREDIT_CARD_DETAIL" ->; - /** * Detail screen for a credit card */ -const CreditCardDetailScreen = ({ route }: Props) => { +const CreditCardDetailScreen = () => { const [walletExisted, setWalletExisted] = React.useState(false); - const paramCreditCard: CreditCardPaymentMethod = route.params.creditCard; + const { creditCard: paramCreditCard } = + useRoute< + Route<"WALLET_CREDIT_CARD_DETAIL", CreditCardDetailScreenNavigationParams> + >().params; // We need to read the card from the store to receive the updates // TODO: to avoid this we need a store refactoring for the wallet section (all the component should receive the id and not the wallet, in order to update when needed) const storeCreditCard = useIOSelector(state => diff --git a/ts/features/wallet/creditCard/screen/__tests__/CreditCardDetailScreen.test.tsx b/ts/features/wallet/creditCard/screen/__tests__/CreditCardDetailScreen.test.tsx index 58bfeeb6cb9..f7898d87a47 100644 --- a/ts/features/wallet/creditCard/screen/__tests__/CreditCardDetailScreen.test.tsx +++ b/ts/features/wallet/creditCard/screen/__tests__/CreditCardDetailScreen.test.tsx @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-var-requires */ import { waitFor } from "@testing-library/react-native"; -import * as React from "react"; import { Store, createStore } from "redux"; import { StatusEnum } from "../../../../../../definitions/idpay/InitiativeDTO"; import { EnableableFunctionsEnum } from "../../../../../../definitions/pagopa/EnableableFunctions"; @@ -166,16 +165,12 @@ describe("Test CreditCardDetailScreen", () => { ); }); -const CreditCardWrapper = ( - props: React.ComponentProps -) => ; - const renderDetailScreen = ( store: Store, creditCard: CreditCardPaymentMethod ) => renderScreenWithNavigationStoreContext( - CreditCardWrapper, + CreditCardDetailScreen, ROUTES.WALLET_CREDIT_CARD_DETAIL, { creditCard }, store diff --git a/ts/features/wallet/onboarding/bancomatPay/navigation/navigator.tsx b/ts/features/wallet/onboarding/bancomatPay/navigation/navigator.tsx index cb1353d0cbc..5992ae302db 100644 --- a/ts/features/wallet/onboarding/bancomatPay/navigation/navigator.tsx +++ b/ts/features/wallet/onboarding/bancomatPay/navigation/navigator.tsx @@ -12,8 +12,7 @@ const Stack = createStackNavigator(); const PaymentMethodOnboardingBPayNavigator = () => ( (); const PaymentMethodOnboardingCoBadgeNavigator = () => ( (); export const PaymentMethodOnboardingPayPalOnboardingNavigator = () => ( & ReturnType; @@ -104,7 +105,7 @@ const CheckoutContent = ( * 4. navigate to the checkout completed screen */ const PayPalOnboardingCheckoutScreen = (props: Props) => { - const navigation = useNavigation(); + const navigation = useIONavigation(); const { refreshPMtoken } = props; // refresh the PM at the startup useEffect(() => { @@ -113,8 +114,11 @@ const PayPalOnboardingCheckoutScreen = (props: Props) => { const handleCheckoutCompleted = (outcomeCode: O.Option) => { props.setOutcomeCode(outcomeCode); - navigation.navigate(PAYPAL_ROUTES.ONBOARDING.MAIN, { - screen: PAYPAL_ROUTES.ONBOARDING.CHECKOUT_COMPLETED + navigation.navigate(ROUTES.WALLET_NAVIGATOR, { + screen: PAYPAL_ROUTES.ONBOARDING.MAIN, + params: { + screen: PAYPAL_ROUTES.ONBOARDING.CHECKOUT_COMPLETED + } }); }; diff --git a/ts/features/wallet/onboarding/paypal/screen/PayPalPspSelectionScreen.tsx b/ts/features/wallet/onboarding/paypal/screen/PayPalPspSelectionScreen.tsx index 3973cc68a16..b63938e9d40 100644 --- a/ts/features/wallet/onboarding/paypal/screen/PayPalPspSelectionScreen.tsx +++ b/ts/features/wallet/onboarding/paypal/screen/PayPalPspSelectionScreen.tsx @@ -1,4 +1,3 @@ -import { useNavigation } from "@react-navigation/native"; import React, { useEffect, useState } from "react"; import { SafeAreaView, ScrollView, StyleSheet, View } from "react-native"; import { connect, useDispatch } from "react-redux"; @@ -35,6 +34,8 @@ import { import { payPalPspSelector } from "../store/reducers/searchPsp"; import { IOPayPalPsp } from "../types"; import PAYPAL_ROUTES from "../navigation/routes"; +import { useIONavigation } from "../../../../../navigation/params/AppParamsList"; +import ROUTES from "../../../../../navigation/routes"; type Props = ReturnType & ReturnType; @@ -112,7 +113,7 @@ const PayPalPspSelectionScreen = (props: Props): React.ReactElement | null => { const pspList = getValueOrElse(props.pspList, []); const [selectedPsp, setSelectedPsp] = useState(); const dispatch = useDispatch(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const searchPaypalPsp = () => { dispatch(searchPaypalPspAction.request()); }; @@ -136,8 +137,11 @@ const PayPalPspSelectionScreen = (props: Props): React.ReactElement | null => { onPress: () => { if (selectedPsp) { props.setPspSelected(selectedPsp); - navigation.navigate(PAYPAL_ROUTES.ONBOARDING.MAIN, { - screen: PAYPAL_ROUTES.ONBOARDING.CHECKOUT + navigation.navigate(ROUTES.WALLET_NAVIGATOR, { + screen: PAYPAL_ROUTES.ONBOARDING.MAIN, + params: { + screen: PAYPAL_ROUTES.ONBOARDING.CHECKOUT + } }); } }, diff --git a/ts/features/wallet/onboarding/paypal/screen/PayPalStartOnboardingScreen.tsx b/ts/features/wallet/onboarding/paypal/screen/PayPalStartOnboardingScreen.tsx index cc2d267bc92..163db8d270f 100644 --- a/ts/features/wallet/onboarding/paypal/screen/PayPalStartOnboardingScreen.tsx +++ b/ts/features/wallet/onboarding/paypal/screen/PayPalStartOnboardingScreen.tsx @@ -1,4 +1,3 @@ -import { useNavigation } from "@react-navigation/native"; import React from "react"; import { Dimensions, SafeAreaView, View } from "react-native"; import { connect } from "react-redux"; @@ -16,6 +15,8 @@ import { GlobalState } from "../../../../../store/reducers/types"; import { emptyContextualHelp } from "../../../../../utils/emptyContextualHelp"; import { walletAddPaypalBack, walletAddPaypalCancel } from "../store/actions"; import PAYPAL_ROUTES from "../navigation/routes"; +import { useIONavigation } from "../../../../../navigation/params/AppParamsList"; +import ROUTES from "../../../../../navigation/routes"; type Props = ReturnType & ReturnType; @@ -50,11 +51,14 @@ const PayPalLogo = () => ( const PayPalStartOnboardingScreen = ( props: Props ): React.ReactElement | null => { - const navigationContext = useNavigation(); + const navigationContext = useIONavigation(); const navigateToSearchPsp = () => - navigationContext.navigate(PAYPAL_ROUTES.ONBOARDING.MAIN, { - screen: PAYPAL_ROUTES.ONBOARDING.SEARCH_PSP + navigationContext.navigate(ROUTES.WALLET_NAVIGATOR, { + screen: PAYPAL_ROUTES.ONBOARDING.MAIN, + params: { + screen: PAYPAL_ROUTES.ONBOARDING.SEARCH_PSP + } }); const cancelButtonProps = { diff --git a/ts/features/wallet/onboarding/paypal/screen/__tests__/__snapshots__/PayPalOnboardingCompletedSuccessComponent.test.tsx.snap b/ts/features/wallet/onboarding/paypal/screen/__tests__/__snapshots__/PayPalOnboardingCompletedSuccessComponent.test.tsx.snap index 4b0346d338d..983ed43412f 100644 --- a/ts/features/wallet/onboarding/paypal/screen/__tests__/__snapshots__/PayPalOnboardingCompletedSuccessComponent.test.tsx.snap +++ b/ts/features/wallet/onboarding/paypal/screen/__tests__/__snapshots__/PayPalOnboardingCompletedSuccessComponent.test.tsx.snap @@ -20,502 +20,527 @@ exports[`PayPalOnboardingCompletedSuccessComponent should match the snapshot 1`] } > - - - + + /> + + - + - N/A - + + N/A + + + - - - + - - - + + + - Fatto! - - - + Fatto! + + + - Ora puoi continuare con il pagamento. - - - + } + } + style={ + Array [ + Object { + "textAlign": "center", + }, + Object { + "fontSize": 16, + "lineHeight": 24, + }, + Object { + "color": "#475A6D", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "400", + }, + ] + } + testID="infoScreenBody" + weight="Regular" + > + Ora puoi continuare con il pagamento. + + - - Continua - + + Continua + + diff --git a/ts/features/wallet/paypal/screen/PayPalPspUpdateScreen.tsx b/ts/features/wallet/paypal/screen/PayPalPspUpdateScreen.tsx index 26e50c4bf1e..bff5048f837 100644 --- a/ts/features/wallet/paypal/screen/PayPalPspUpdateScreen.tsx +++ b/ts/features/wallet/paypal/screen/PayPalPspUpdateScreen.tsx @@ -1,4 +1,4 @@ -import { useNavigation } from "@react-navigation/native"; +import { Route, useRoute } from "@react-navigation/native"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import React, { useEffect } from "react"; @@ -23,8 +23,7 @@ import { IOStyles } from "../../../../components/core/variables/IOStyles"; import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; import FooterWithButtons from "../../../../components/ui/FooterWithButtons"; import I18n from "../../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../../navigation/params/WalletParamsList"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; import { pspForPaymentV2, pspSelectedForPaymentV2 @@ -157,28 +156,27 @@ export type PayPalPspUpdateScreenNavigationParams = { idPayment: string; idWallet: number; }; -type Props = IOStackNavigationRouteProps< - WalletParamsList, - "WALLET_PAYPAL_UPDATE_PAYMENT_PSP" ->; /** * This screen is where the user updates the PSP that will be used for the payment * Only 1 psp can be selected */ -const PayPalPspUpdateScreen: React.FunctionComponent = ( - props: Props -) => { +const PayPalPspUpdateScreen: React.FunctionComponent = () => { + const { idPayment, idWallet } = + useRoute< + Route< + "WALLET_PAYPAL_UPDATE_PAYMENT_PSP", + PayPalPspUpdateScreenNavigationParams + > + >().params; const locales = getLocales(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const dispatch = useDispatch(); const pspList = useIOSelector(pspV2ListSelector); - const idPayment = props.route.params.idPayment; - const idWallet = props.route.params.idWallet; const searchPaypalPsp = () => { dispatch(pspForPaymentV2.request({ idPayment, idWallet })); }; - useEffect(searchPaypalPsp, [dispatch]); + useEffect(searchPaypalPsp, [dispatch, idPayment, idWallet]); const goBack = () => navigation.goBack(); return ( diff --git a/ts/features/walletV3/barcode/navigation/navigator.tsx b/ts/features/walletV3/barcode/navigation/navigator.tsx index fd594ab997e..19d348bc12f 100644 --- a/ts/features/walletV3/barcode/navigation/navigator.tsx +++ b/ts/features/walletV3/barcode/navigation/navigator.tsx @@ -16,8 +16,7 @@ const Stack = createStackNavigator(); export const WalletBarcodeNavigator = () => ( (); export const WalletDetailsNavigator = () => ( (); export const WalletOnboardingNavigator = () => ( (); export const WalletPaymentNavigator = () => ( ( name={WalletPaymentRoutes.WALLET_PAYMENT_PICK_METHOD} component={WalletPaymentPickMethodScreen} options={{ - headerShown: true, gestureEnabled: isGestureEnabled }} /> diff --git a/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx b/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx index 2019e066ea5..45a610017c9 100644 --- a/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx +++ b/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx @@ -75,7 +75,8 @@ const WalletPaymentOutcomeScreen = () => { const handleClose = () => { if (paymentStartRoute) { - navigation.navigate(paymentStartRoute.routeName, { + // TODO: this is a workaround to solve type errors need to investigate deeply + navigation.navigate(paymentStartRoute.routeName as any, { screen: paymentStartRoute.routeKey }); return; diff --git a/ts/features/walletV3/payment/store/reducers/index.ts b/ts/features/walletV3/payment/store/reducers/index.ts index 6bcb68d26a3..f69bcd7c5ce 100644 --- a/ts/features/walletV3/payment/store/reducers/index.ts +++ b/ts/features/walletV3/payment/store/reducers/index.ts @@ -50,7 +50,7 @@ export type WalletPaymentState = { authorizationUrl: pot.Pot; startRoute?: { routeName: keyof AppParamsList; - routeKey: keyof NavigatorScreenParams["screen"]; + routeKey: NavigatorScreenParams["screen"]; }; }; diff --git a/ts/features/walletV3/transaction/navigation/navigator.tsx b/ts/features/walletV3/transaction/navigation/navigator.tsx index 9b26df0638d..b5c8f67e073 100644 --- a/ts/features/walletV3/transaction/navigation/navigator.tsx +++ b/ts/features/walletV3/transaction/navigation/navigator.tsx @@ -29,8 +29,7 @@ const Stack = createStackNavigator(); export const WalletTransactionNavigator = () => ( (); export const ZendeskStackNavigator = () => ( @@ -81,7 +82,7 @@ const InnerNavigationContainer = (props: { children: React.ReactElement }) => { const cgnEnabled = useIOSelector(isCGNEnabledSelector); const isFimsEnabled = useIOSelector(isFIMSEnabledSelector) && fimsEnabled; - const linking: LinkingOptions = { + const linking: LinkingOptions = { enabled: !isTestEnv, // disable linking in test env prefixes: [IO_INTERNAL_LINK_PREFIX, IO_UNIVERSAL_LINK_PREFIX], config: { diff --git a/ts/navigation/AuthenticatedStackNavigator.tsx b/ts/navigation/AuthenticatedStackNavigator.tsx index b057251f2f1..649298bc8d2 100644 --- a/ts/navigation/AuthenticatedStackNavigator.tsx +++ b/ts/navigation/AuthenticatedStackNavigator.tsx @@ -101,8 +101,10 @@ const AuthenticatedStackNavigator = () => { return ( diff --git a/ts/navigation/AuthenticationNavigator.tsx b/ts/navigation/AuthenticationNavigator.tsx index af41d43c234..11de0c591fe 100644 --- a/ts/navigation/AuthenticationNavigator.tsx +++ b/ts/navigation/AuthenticationNavigator.tsx @@ -24,8 +24,7 @@ const Stack = createStackNavigator(); const AuthenticationStackNavigator = () => ( ( +const CheckEmailNavigator = () => ( ( ); -export default navigator; +export default CheckEmailNavigator; diff --git a/ts/navigation/NavigationService.ts b/ts/navigation/NavigationService.ts index 3679e48dd66..7ac82487eae 100644 --- a/ts/navigation/NavigationService.ts +++ b/ts/navigation/NavigationService.ts @@ -5,8 +5,10 @@ import { import { Route } from "@react-navigation/routers"; import React from "react"; import { mixpanelTrack } from "../mixpanel"; +import { AppParamsList } from "./params/AppParamsList"; -export const navigationRef = React.createRef(); +export const navigationRef = + React.createRef>(); // eslint-disable-next-line functional/no-let let isNavigationReady: boolean = false; @@ -37,13 +39,27 @@ const withLogging = }; // NavigationContainerComponent -const getNavigator = (): React.RefObject => - navigationRef; +const getNavigator = (): React.RefObject< + NavigationContainerRef +> => navigationRef; // NavigationParams -const navigate = (routeName: string, params?: any) => { +// This definition comes from react-navigation navigate definition. +type NavigationParams = T extends unknown + ? // This condition checks if the params are optional, + // which means it's either undefined or a union with undefined + undefined extends AppParamsList[T] + ? + | [screen: T] // if the params are optional, we don't have to provide it + | [screen: T, params: AppParamsList[T]] + : [screen: T, params: AppParamsList[T]] + : never; + +const navigate = ( + ...args: NavigationParams +) => { if (isNavigationReady) { - navigationRef.current?.navigate(routeName, params); + navigationRef.current?.navigate(...args); } }; diff --git a/ts/navigation/NotAuthenticatedStackNavigator.tsx b/ts/navigation/NotAuthenticatedStackNavigator.tsx index 59b6338b717..8df6174f0d0 100644 --- a/ts/navigation/NotAuthenticatedStackNavigator.tsx +++ b/ts/navigation/NotAuthenticatedStackNavigator.tsx @@ -13,8 +13,7 @@ const Stack = createStackNavigator(); const NotAuthenticatedStackNavigator = () => ( { return ( { return ( ( ( height: 34 } }} + tabBarPosition="top" > ( { const additionalPadding = 10; const bottomInset = insets.bottom === 0 ? additionalPadding : insets.bottom; const isDesignSystemEnabled = useIOSelector(isDesignSystemEnabledSelector); - const navigation = useNavigation>(); + const navigation = useIONavigation(); const navigateToBarcodeScanScreen = () => { navigation.navigate(ROUTES.BARCODE_SCAN); @@ -65,8 +64,9 @@ export const MainTabNavigator = () => { > { isDesignSystemEnabled ? "ReadexPro" : "TitilliumWeb" ) }, - keyboardHidesTabBar: true, - allowFontScaling: false, - activeTintColor: isDesignSystemEnabled + tabBarHideOnKeyboard: true, + tabBarAllowFontScaling: false, + tabBarActiveTintColor: isDesignSystemEnabled ? IOColors["blueIO-500"] : IOColors.blue, - inactiveTintColor: IOColors["grey-850"], - style: [ + tabBarInactiveTintColor: IOColors["grey-850"], + tabBarStyle: [ styles.tabBarStyle, { height: tabBarHeight + bottomInset }, insets.bottom === 0 ? { paddingBottom: additionalPadding } : {} diff --git a/ts/navigation/WalletNavigator.tsx b/ts/navigation/WalletNavigator.tsx index ebfcf759141..93d46f0ac02 100644 --- a/ts/navigation/WalletNavigator.tsx +++ b/ts/navigation/WalletNavigator.tsx @@ -54,8 +54,7 @@ const bpay_cobadge_routes = () => ( const WalletNavigator = () => ( = StackNavigationProp; + +export const useIONavigation = () => + useNavigation>(); diff --git a/ts/navigation/params/WalletParamsList.ts b/ts/navigation/params/WalletParamsList.ts index fec5a2ce8a4..5c2d8884144 100644 --- a/ts/navigation/params/WalletParamsList.ts +++ b/ts/navigation/params/WalletParamsList.ts @@ -29,6 +29,7 @@ import ROUTES from "../routes"; import { BONUS_ROUTES } from "../../features/bonus/common/navigation/navigator"; export type WalletParamsList = { + [ROUTES.WALLET_HOME]: undefined; [ROUTES.WALLET_IDPAY_INITIATIVE_LIST]: IdPayInstrumentInitiativesScreenRouteParams; [ROUTES.WALLET_ADD_PAYMENT_METHOD]: AddPaymentMethodScreenNavigationParams; [ROUTES.WALLET_TRANSACTION_DETAILS]: TransactionDetailsScreenNavigationParams; diff --git a/ts/sagas/startup/__tests__/checkProfileEmailSaga.test.tsx b/ts/sagas/startup/__tests__/checkProfileEmailSaga.test.tsx index a4ab1f78e37..089b64268c5 100644 --- a/ts/sagas/startup/__tests__/checkProfileEmailSaga.test.tsx +++ b/ts/sagas/startup/__tests__/checkProfileEmailSaga.test.tsx @@ -6,7 +6,6 @@ import NavigationService from "../../../navigation/NavigationService"; import ROUTES from "../../../navigation/routes"; import { applicationChangeState } from "../../../store/actions/application"; -import { navigateToEmailReadScreen } from "../../../store/actions/navigation"; import { emailAcknowledged, emailInsert @@ -34,13 +33,6 @@ describe("checkAcknowledgedEmailSaga", () => { jest.useRealTimers(); }); - describe("when user has an email and it is validated", () => { - it("should do nothing", () => - expectSaga(checkAcknowledgedEmailSaga, mockedProfile) - .not.call(navigateToEmailReadScreen) - .run()); - }); - describe("when user is on his first onboarding and he has an email and it is validated", () => { const profileEmailValidatedFirstOnboarding = { ...mockedProfile, @@ -54,7 +46,8 @@ describe("checkAcknowledgedEmailSaga", () => { profileEmailValidatedFirstOnboarding ) .call(NavigationService.navigate, ROUTES.ONBOARDING, { - screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN + screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN, + params: { isOnboarding: true } }) .run(); }); @@ -70,7 +63,8 @@ describe("checkAcknowledgedEmailSaga", () => { // read screen is wrapped in a HOC where if email is validate show ReadScreen // otherwise a screen that remembers to validate it .call(NavigationService.navigate, ROUTES.ONBOARDING, { - screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN + screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN, + params: { isOnboarding: true } }) .dispatch(emailAcknowledged()) .run()); diff --git a/ts/sagas/startup/checkAcknowledgedEmailSaga.ts b/ts/sagas/startup/checkAcknowledgedEmailSaga.ts index 519d6b08b1f..a541f7e36fe 100644 --- a/ts/sagas/startup/checkAcknowledgedEmailSaga.ts +++ b/ts/sagas/startup/checkAcknowledgedEmailSaga.ts @@ -39,7 +39,8 @@ export function* checkAcknowledgedEmailSaga( // An email exists on the user's profile but it is not validated, the conditional // view shows the component that reminds to validate the email address or allows the navigation to edit it. yield* call(NavigationService.navigate, ROUTES.ONBOARDING, { - screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN + screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN, + params: { isOnboarding: true } }); } else { // we can go on, no need to wait @@ -50,11 +51,18 @@ export function* checkAcknowledgedEmailSaga( // EmailInsertScreen knows if the user comes from onboarding or not // if he comes from onboarding, on email inserted the navigation will focus EmailReadScreen to remember the user // to validate it - yield* call(NavigationService.navigate, ROUTES.ONBOARDING, { - screen: isEmailUniquenessValidationEnabled - ? ROUTES.ONBOARDING_READ_EMAIL_SCREEN - : ROUTES.ONBOARDING_INSERT_EMAIL_SCREEN - }); + yield* call( + NavigationService.navigate, + ROUTES.ONBOARDING, + isEmailUniquenessValidationEnabled + ? { + screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN, + params: { isOnboarding: true } + } + : { + screen: ROUTES.ONBOARDING_INSERT_EMAIL_SCREEN + } + ); } // Wait for the user to press "Continue" button after having checked out diff --git a/ts/sagas/startup/checkEmailSaga.ts b/ts/sagas/startup/checkEmailSaga.ts index 91abb3d17f6..61ca275033f 100644 --- a/ts/sagas/startup/checkEmailSaga.ts +++ b/ts/sagas/startup/checkEmailSaga.ts @@ -32,12 +32,12 @@ export function* checkEmailSaga() { if (isProfileEmailAlreadyTaken(userProfile)) { yield* call(NavigationService.navigate, ROUTES.CHECK_EMAIL, { screen: ROUTES.CHECK_EMAIL_ALREADY_TAKEN, - params: { email: userProfile.email } + params: { email: userProfile.email ?? "" } }); } else { yield* call(NavigationService.navigate, ROUTES.CHECK_EMAIL, { screen: ROUTES.CHECK_EMAIL_NOT_VERIFIED, - params: { email: userProfile.email } + params: { email: userProfile.email ?? "" } }); } // Wait for the user to press "Continue" button after having checked out diff --git a/ts/sagas/wallet.ts b/ts/sagas/wallet.ts index 8f69b67b26e..e794d9dd16d 100644 --- a/ts/sagas/wallet.ts +++ b/ts/sagas/wallet.ts @@ -901,8 +901,9 @@ export function* watchBackToEntrypointPaymentSaga(): Iterator { if (entrypointRoute !== undefined) { yield* call( NavigationService.dispatchNavigationAction, - CommonActions.navigate(entrypointRoute.name, { - key: entrypointRoute.key + CommonActions.navigate({ + name: entrypointRoute.name, + merge: true }) ); yield* put(paymentInitializeState()); diff --git a/ts/screens/authentication/LandingScreen.tsx b/ts/screens/authentication/LandingScreen.tsx index 3053331215e..d6c153a2e2e 100644 --- a/ts/screens/authentication/LandingScreen.tsx +++ b/ts/screens/authentication/LandingScreen.tsx @@ -12,7 +12,6 @@ import { View, Alert, StyleSheet } from "react-native"; import DeviceInfo from "react-native-device-info"; import { useDispatch, useStore } from "react-redux"; import { IOColors, Icon, HSpacer, VSpacer } from "@pagopa/io-app-design-system"; -import { useNavigation } from "@react-navigation/native"; import sessionExpiredImg from "../../../img/landing/session_expired.png"; import ButtonDefaultOpacity from "../../components/ButtonDefaultOpacity"; import CieNotSupported from "../../components/cie/CieNotSupported"; @@ -60,6 +59,7 @@ import { useIOSelector } from "../../store/hooks"; import { isSessionExpiredSelector } from "../../store/reducers/authentication"; import { LightModalContext } from "../../components/ui/LightModal"; import { continueWithRootOrJailbreak } from "../../store/actions/persistedPreferences"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; import { trackCieLoginSelected, trackMethodInfo, @@ -175,7 +175,7 @@ export const LandingScreen = () => { const store = useStore(); const dispatch = useDispatch(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const isSessionExpired = useIOSelector(isSessionExpiredSelector); diff --git a/ts/screens/authentication/NewOptInScreen.tsx b/ts/screens/authentication/NewOptInScreen.tsx index 5c088079a8f..c79b4429a29 100644 --- a/ts/screens/authentication/NewOptInScreen.tsx +++ b/ts/screens/authentication/NewOptInScreen.tsx @@ -10,14 +10,13 @@ import { Pictogram, VSpacer } from "@pagopa/io-app-design-system"; -import { useNavigation } from "@react-navigation/native"; import { useStore } from "react-redux"; +import { Route, useRoute } from "@react-navigation/native"; import BaseScreenComponent, { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; import ROUTES from "../../navigation/routes"; -import { AuthenticationParamsList } from "../../navigation/params/AuthenticationParamsList"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; import I18n from "../../i18n"; import { setFastLoginOptIn } from "../../features/fastLogin/store/actions/optInActions"; import { useIODispatch } from "../../store/hooks"; @@ -41,19 +40,15 @@ export type ChosenIdentifier = { identifier: "SPID" | "CIE"; }; -type Props = IOStackNavigationRouteProps< - AuthenticationParamsList, - "AUTHENTICATION_OPT_IN" ->; - -const NewOptInScreen = (props: Props) => { +const NewOptInScreen = () => { const dispatch = useIODispatch(); const { securitySuggestionBottomSheet, presentSecuritySuggestionBottomSheet } = useSecuritySuggestionsBottomSheet(); - - const navigation = useNavigation(); + const { identifier } = + useRoute>().params; + const navigation = useIONavigation(); const store = useStore(); useOnFirstRender(() => { @@ -72,7 +67,7 @@ const NewOptInScreen = (props: Props) => { } navigation.navigate(ROUTES.AUTHENTICATION, { screen: - props.route.params.identifier === "CIE" + identifier === "CIE" ? ROUTES.CIE_PIN_SCREEN : ROUTES.AUTHENTICATION_IDP_SELECTION }); diff --git a/ts/screens/authentication/cie/CieConsentDataUsageScreen.tsx b/ts/screens/authentication/cie/CieConsentDataUsageScreen.tsx index 42ae9307e26..9dc9877ef5e 100644 --- a/ts/screens/authentication/cie/CieConsentDataUsageScreen.tsx +++ b/ts/screens/authentication/cie/CieConsentDataUsageScreen.tsx @@ -11,12 +11,11 @@ import { } from "react-native-webview/lib/WebViewTypes"; import { connect } from "react-redux"; import { VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import LoadingSpinnerOverlay from "../../../components/LoadingSpinnerOverlay"; import GenericErrorComponent from "../../../components/screens/GenericErrorComponent"; import TopScreenComponent from "../../../components/screens/TopScreenComponent"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { AuthenticationParamsList } from "../../../navigation/params/AuthenticationParamsList"; import { loginFailure, loginSuccess @@ -39,24 +38,13 @@ export type CieConsentDataUsageScreenNavigationParams = { cieConsentUri: string; }; -type OwnProps = { - isLoading: boolean; -}; - -type NavigationProps = IOStackNavigationRouteProps< - AuthenticationParamsList, - "CIE_CONSENT_DATA_USAGE" ->; - type State = { hasError: boolean; errorCode?: string; isLoginSuccess?: boolean; }; -type Props = OwnProps & - NavigationProps & - ReturnType & +type Props = ReturnType & ReturnType; const loaderComponent = ( @@ -65,9 +53,14 @@ const loaderComponent = (
); -class CieConsentDataUsageScreen extends React.Component { +type CieConsentDataUsageScreenProps = Props & + CieConsentDataUsageScreenNavigationParams; +class CieConsentDataUsageScreen extends React.Component< + CieConsentDataUsageScreenProps, + State +> { private subscription: NativeEventSubscription | undefined; - constructor(props: Props) { + constructor(props: CieConsentDataUsageScreenProps) { super(props); trackLoginCieConsentDataUsageScreen(); this.state = { @@ -113,7 +106,7 @@ class CieConsentDataUsageScreen extends React.Component { } get cieAuthorizationUri(): string { - return this.props.route.params.cieConsentUri; + return this.props.cieConsentUri; } private handleWebViewError = () => { @@ -224,7 +217,15 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ loginFailure: (error: Error) => dispatch(loginFailure({ error, idp: "cie" })) }); +const CieConsentDataUsageScreenFC = (props: Props) => { + const { cieConsentUri } = + useRoute< + Route<"CIE_CONSENT_DATA_USAGE", CieConsentDataUsageScreenNavigationParams> + >().params; + return ; +}; + export default connect( mapStateToProps, mapDispatchToProps -)(CieConsentDataUsageScreen); +)(CieConsentDataUsageScreenFC); diff --git a/ts/screens/authentication/cie/CieExpiredOrInvalidScreen.tsx b/ts/screens/authentication/cie/CieExpiredOrInvalidScreen.tsx index 15d1ccd241b..06541a5bfd0 100644 --- a/ts/screens/authentication/cie/CieExpiredOrInvalidScreen.tsx +++ b/ts/screens/authentication/cie/CieExpiredOrInvalidScreen.tsx @@ -1,6 +1,5 @@ import { Content } from "native-base"; import * as React from "react"; -import { connect } from "react-redux"; import { VSpacer } from "@pagopa/io-app-design-system"; import { Body } from "../../../components/core/typography/Body"; import { Link } from "../../../components/core/typography/Link"; @@ -10,46 +9,38 @@ import FooterWithButtons from "../../../components/ui/FooterWithButtons"; import { openLink } from "../../../components/ui/Markdown/handlers/link"; import I18n from "../../../i18n"; import { resetToAuthenticationRoute } from "../../../store/actions/navigation"; -import { ReduxProps } from "../../../store/actions/types"; -type Props = ReduxProps; const bookingUrl = I18n.t("cie.booking_url"); const browseToLink = () => openLink(bookingUrl); -class CieExpiredOrInvalidScreen extends React.PureComponent { - constructor(props: Props) { - super(props); - } +const CieExpiredOrInvalidScreen = () => { + const handleGoBack = () => resetToAuthenticationRoute(); - private handleGoBack = () => resetToAuthenticationRoute(); + return ( + + + + {I18n.t("authentication.landing.expiredCardContent")} + + + {I18n.t("authentication.landing.expiredCardHelp")} + + + + + ); +}; - public render(): React.ReactNode { - return ( - - - - {I18n.t("authentication.landing.expiredCardContent")} - - - {I18n.t("authentication.landing.expiredCardHelp")} - - - - - ); - } -} - -export default connect()(CieExpiredOrInvalidScreen); +export default CieExpiredOrInvalidScreen; diff --git a/ts/screens/authentication/cie/CiePinScreen.tsx b/ts/screens/authentication/cie/CiePinScreen.tsx index c80d8ab2f8c..43af96fbe90 100644 --- a/ts/screens/authentication/cie/CiePinScreen.tsx +++ b/ts/screens/authentication/cie/CiePinScreen.tsx @@ -35,7 +35,7 @@ import { IOStackNavigationProp } from "../../../navigation/params/AppParamsList" import { AuthenticationParamsList } from "../../../navigation/params/AuthenticationParamsList"; import ROUTES from "../../../navigation/routes"; import { nfcIsEnabled } from "../../../store/actions/cie"; -import { Dispatch, ReduxProps } from "../../../store/actions/types"; +import { Dispatch } from "../../../store/actions/types"; import variables from "../../../theme/variables"; import { setAccessibilityFocus } from "../../../utils/accessibility"; import { useLegacyIOBottomSheetModal } from "../../../utils/hooks/bottomSheet"; @@ -60,7 +60,7 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ dispatch(loginSuccess({ token, idp })) }); -type Props = ReduxProps & ReturnType; +type Props = ReturnType; const styles = StyleSheet.create({ container: { diff --git a/ts/screens/onboarding/UnlockAccessScreen.tsx b/ts/screens/onboarding/UnlockAccessScreen.tsx index 6be74c5b78a..67f92c9329e 100644 --- a/ts/screens/onboarding/UnlockAccessScreen.tsx +++ b/ts/screens/onboarding/UnlockAccessScreen.tsx @@ -14,18 +14,19 @@ import { } from "@pagopa/io-app-design-system"; import { SafeAreaView } from "react-native-safe-area-context"; import { Text, View } from "react-native"; -import { useNavigation } from "@react-navigation/native"; import BaseScreenComponent from "../../components/screens/BaseScreenComponent"; import I18n from "../../i18n"; import { useIOBottomSheetAutoresizableModal } from "../../utils/hooks/bottomSheet"; import { openWebUrl } from "../../utils/url"; import ROUTES from "../../navigation/routes"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; + type Props = { identifier: "SPID" | "CIE"; }; const UnlockAccessScreen = (props: Props) => { const { identifier } = props; - const navigation = useNavigation(); + const navigation = useIONavigation(); const ModalContent = () => ( @@ -100,7 +101,10 @@ const UnlockAccessScreen = (props: Props) => { testID: "button-link-test", label: I18n.t("authentication.unlock.loginIO"), accessibilityLabel: I18n.t("authentication.unlock.loginIO"), - onPress: () => navigation.navigate(ROUTES.AUTHENTICATION_LANDING) + onPress: () => + navigation.navigate(ROUTES.AUTHENTICATION, { + screen: ROUTES.AUTHENTICATION_LANDING + }) }} > diff --git a/ts/screens/profile/CduEmailInsertScreen.tsx b/ts/screens/profile/CduEmailInsertScreen.tsx index bd801ab76f5..adaa3a4ea91 100644 --- a/ts/screens/profile/CduEmailInsertScreen.tsx +++ b/ts/screens/profile/CduEmailInsertScreen.tsx @@ -26,6 +26,7 @@ import { Alert as AlertComponent, FooterWithButtons } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { H1 } from "../../components/core/typography/H1"; import { LabelledItem } from "../../components/LabelledItem"; import LoadingSpinnerOverlay from "../../components/LoadingSpinnerOverlay"; @@ -33,8 +34,7 @@ import BaseScreenComponent, { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; -import { ProfileParamsList } from "../../navigation/params/ProfileParamsList"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; import { profileUpsert } from "../../store/actions/profile"; import { useIODispatch, useIOSelector } from "../../store/hooks"; import { @@ -66,11 +66,6 @@ export type CduEmailInsertScreenNavigationParams = Readonly<{ isOnboarding: boolean; }>; -type Props = IOStackNavigationRouteProps< - ProfileParamsList, - "INSERT_EMAIL_SCREEN" ->; - const styles = StyleSheet.create({ flex: { flex: 1 @@ -88,9 +83,17 @@ const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { /** * A screen to allow user to insert an email address. */ -const CduEmailInsertScreen = (props: Props) => { +const CduEmailInsertScreen = () => { const viewRef = createRef(); const { showModal } = useContext(LightModalContext); + const { isOnboarding } = + useRoute< + Route< + "ONBOARDING_READ_EMAIL_SCREEN" | "PROFILE_EMAIL_INSERT_SCREEN", + CduEmailInsertScreenNavigationParams + > + >().params; + const navigation = useIONavigation(); const dispatch = useIODispatch(); @@ -103,7 +106,7 @@ const CduEmailInsertScreen = (props: Props) => { ); const isFirstOnBoarding = useIOSelector(isProfileFirstOnBoardingSelector); - const { isOnboarding } = props.route.params ?? {}; + // const { isOnboarding } = props.route.params ?? {}; const flow = getFlowType(isOnboarding, isFirstOnBoarding); @@ -236,8 +239,8 @@ const CduEmailInsertScreen = (props: Props) => { const handleGoBack = useCallback(() => { // goback if the onboarding is completed - props.navigation.goBack(); - }, [props.navigation]); + navigation.goBack(); + }, [navigation]); useOnFirstRender(() => { if (!isFirstOnBoarding) { diff --git a/ts/screens/profile/DeveloperModeSection.tsx b/ts/screens/profile/DeveloperModeSection.tsx index 27f1e8bf0ca..943e5d2d5c1 100644 --- a/ts/screens/profile/DeveloperModeSection.tsx +++ b/ts/screens/profile/DeveloperModeSection.tsx @@ -11,7 +11,6 @@ import { VSpacer } from "@pagopa/io-app-design-system"; import AsyncStorage from "@react-native-async-storage/async-storage"; -import { useNavigation } from "@react-navigation/native"; import I18n from "i18n-js"; import * as React from "react"; import { ComponentProps } from "react"; @@ -48,6 +47,8 @@ import { import { clipboardSetStringWithFeedback } from "../../utils/clipboard"; import { getDeviceId } from "../../utils/device"; import { isDevEnv } from "../../utils/environment"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; + import DSEnableSwitch from "./components/DSEnableSwitch"; type PlaygroundsNavListItem = { @@ -267,7 +268,7 @@ const DeveloperDataSection = () => { }; const DesignSystemSection = () => { - const navigation = useNavigation(); + const navigation = useIONavigation(); return ( @@ -289,7 +290,7 @@ const DesignSystemSection = () => { }; const PlaygroundsSection = () => { - const navigation = useNavigation(); + const navigation = useIONavigation(); const isIdPayTestEnabled = useIOSelector(isIdPayTestEnabledSelector); const playgroundsNavListItems: ReadonlyArray = [ { diff --git a/ts/screens/profile/EmailReadScreen.tsx b/ts/screens/profile/EmailReadScreen.tsx index f40a5e6b135..91d9f207f54 100644 --- a/ts/screens/profile/EmailReadScreen.tsx +++ b/ts/screens/profile/EmailReadScreen.tsx @@ -5,13 +5,15 @@ * - it is displayed during the user onboarding * - it is displayed after the onboarding (navigation from the profile section) */ -import { useNavigation } from "@react-navigation/native"; import * as React from "react"; import EmailReadComponent from "../../components/EmailReadComponent"; import { SingleButton } from "../../components/ui/BlockButtons"; import { useValidatedEmailModal } from "../../hooks/useValidateEmailModal"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; +import { + IOStackNavigationRouteProps, + useIONavigation +} from "../../navigation/params/AppParamsList"; import { ProfileParamsList } from "../../navigation/params/ProfileParamsList"; import ROUTES from "../../navigation/routes"; @@ -22,7 +24,7 @@ type Props = IOStackNavigationRouteProps< const EmailReadScreen = (props: Props) => { useValidatedEmailModal(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const handleGoBack = () => { props.navigation.goBack(); @@ -35,7 +37,10 @@ const EmailReadScreen = (props: Props) => { title: I18n.t("email.edit.cta"), onPress: () => navigation.navigate(ROUTES.PROFILE_NAVIGATOR, { - screen: ROUTES.INSERT_EMAIL_SCREEN + screen: ROUTES.INSERT_EMAIL_SCREEN, + params: { + isOnboarding: false + } }) } }; diff --git a/ts/screens/profile/LanguagesPreferencesScreen.tsx b/ts/screens/profile/LanguagesPreferencesScreen.tsx index 12bd3ad85f8..6e4c5c6c07e 100644 --- a/ts/screens/profile/LanguagesPreferencesScreen.tsx +++ b/ts/screens/profile/LanguagesPreferencesScreen.tsx @@ -8,12 +8,14 @@ import { Alert, SafeAreaView, View } from "react-native"; import { connect } from "react-redux"; import { Locales, TranslationKeys } from "../../../locales/locales"; import SectionStatusComponent from "../../components/SectionStatus"; -import { withLightModalContext } from "../../components/helpers/withLightModalContext"; import { withLoadingSpinner } from "../../components/helpers/withLoadingSpinner"; import { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; import ListItemComponent from "../../components/screens/ListItemComponent"; import { AlertModal } from "../../components/ui/AlertModal"; -import { LightModalContextInterface } from "../../components/ui/LightModal"; +import { + LightModalContext, + LightModalContextInterface +} from "../../components/ui/LightModal"; import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; import I18n, { availableTranslations } from "../../i18n"; import { preferredLanguageSaveSuccess } from "../../store/actions/persistedPreferences"; @@ -28,12 +30,13 @@ import { } from "../../utils/locale"; import { showToast } from "../../utils/showToast"; -type Props = LightModalContextInterface & - ReturnType & +type Props = ReturnType & ReturnType; type State = { isLoading: boolean; selectedLocale?: Locales }; +type LanguagesPreferencesScreenProps = Props & LightModalContextInterface; + const iconSize: IOIconSizeScale = 12; const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { @@ -44,8 +47,11 @@ const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { /** * Allows the user to select one of the available Languages as preferred */ -class LanguagesPreferencesScreen extends React.PureComponent { - constructor(props: Props) { +class LanguagesPreferencesScreen extends React.PureComponent< + LanguagesPreferencesScreenProps, + State +> { + constructor(props: LanguagesPreferencesScreenProps) { super(props); this.state = { isLoading: false }; } @@ -189,7 +195,12 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ ) }); +const LanguagesPreferencesScreenFC = (props: Props) => { + const { ...modalContext } = React.useContext(LightModalContext); + return ; +}; + export default connect( mapStateToProps, mapDispatchToProps -)(withLightModalContext(LanguagesPreferencesScreen)); +)(LanguagesPreferencesScreenFC); diff --git a/ts/screens/profile/PreferencesScreen.tsx b/ts/screens/profile/PreferencesScreen.tsx index 0ec79ffb243..f00725e221d 100644 --- a/ts/screens/profile/PreferencesScreen.tsx +++ b/ts/screens/profile/PreferencesScreen.tsx @@ -15,15 +15,18 @@ import { ComponentProps } from "react"; import { Alert, FlatList, ListRenderItemInfo } from "react-native"; import { connect } from "react-redux"; import { ServicesPreferencesModeEnum } from "../../../definitions/backend/ServicesPreferencesMode"; -import { withLightModalContext } from "../../components/helpers/withLightModalContext"; import { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; -import { LightModalContextInterface } from "../../components/ui/LightModal"; +import { + LightModalContext, + LightModalContextInterface +} from "../../components/ui/LightModal"; import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; import { remindersOptInEnabled } from "../../config"; import I18n from "../../i18n"; import { AppParamsList, - IOStackNavigationRouteProps + IOStackNavigationProp, + useIONavigation } from "../../navigation/params/AppParamsList"; import ROUTES from "../../navigation/routes"; import { @@ -32,7 +35,7 @@ import { navigateToLanguagePreferenceScreen, navigateToServicePreferenceScreen } from "../../store/actions/navigation"; -import { Dispatch, ReduxProps } from "../../store/actions/types"; +import { Dispatch } from "../../store/actions/types"; import { isCustomEmailChannelEnabledSelector, preferredLanguageSelector @@ -54,13 +57,8 @@ import { } from "../../utils/locale"; import { requestWriteCalendarPermission } from "../../utils/permission"; -type OwnProps = IOStackNavigationRouteProps; - -type Props = OwnProps & - ReturnType & - ReturnType & - ReduxProps & - LightModalContextInterface; +type Props = ReturnType & + ReturnType; type PreferencesNavListItem = { value: string; @@ -70,6 +68,9 @@ type PreferencesNavListItem = { "description" | "testID" | "onPress" >; +type PreferencesScreenProps = LightModalContextInterface & + Props & { navigation: IOStackNavigationProp }; + /** * Translates the primary languages of the provided locales. * @@ -105,8 +106,8 @@ const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { body: "profile.preferences.contextualHelpContent" }; -class PreferencesScreen extends React.Component { - constructor(props: Props) { +class PreferencesScreen extends React.Component { + constructor(props: PreferencesScreenProps) { super(props); } @@ -289,7 +290,15 @@ const mapDispatchToProps = (_: Dispatch) => ({ navigateToLanguagePreferenceScreen: () => navigateToLanguagePreferenceScreen() }); +const PreferencesScreenFC = (props: Props) => { + const { ...modalContext } = React.useContext(LightModalContext); + const navigation = useIONavigation(); + return ( + + ); +}; + export default connect( mapStateToProps, mapDispatchToProps -)(withLightModalContext(PreferencesScreen)); +)(PreferencesScreenFC); diff --git a/ts/screens/profile/ProfileDataScreen.tsx b/ts/screens/profile/ProfileDataScreen.tsx index fee1b984f2d..9752a5e8429 100644 --- a/ts/screens/profile/ProfileDataScreen.tsx +++ b/ts/screens/profile/ProfileDataScreen.tsx @@ -3,16 +3,11 @@ import { pipe } from "fp-ts/lib/function"; import { List } from "native-base"; import * as React from "react"; import { connect } from "react-redux"; -import { Dispatch } from "redux"; import { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; import ListItemComponent from "../../components/screens/ListItemComponent"; import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; import { isEmailUniquenessValidationEnabledSelector } from "../../features/fastLogin/store/selectors"; import I18n from "../../i18n"; -import { - navigateToEmailInsertScreen, - navigateToEmailReadScreen -} from "../../store/actions/navigation"; import { hasProfileEmailSelector, isProfileEmailValidatedSelector, @@ -20,9 +15,10 @@ import { profileNameSurnameSelector } from "../../store/reducers/profile"; import { GlobalState } from "../../store/reducers/types"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; +import ROUTES from "../../navigation/routes"; -type Props = ReturnType & - ReturnType; +type Props = ReturnType; const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { title: "profile.preferences.contextualHelpTitle", @@ -33,20 +29,35 @@ const ProfileDataScreen: React.FC = ({ profileEmail, isEmailValidated, isEmailUniquenessValidationEnabled, - navigateToEmailReadScreen, - navigateToEmailInsertScreen, hasProfileEmail, nameSurname }): React.ReactElement => { + const navigation = useIONavigation(); + + const navigateToInsertEmailScreen = React.useCallback(() => { + navigation.navigate(ROUTES.PROFILE_NAVIGATOR, { + screen: ROUTES.INSERT_EMAIL_SCREEN, + params: { + isOnboarding: false + } + }); + }, [navigation]); + + const navigateToReadEmailScreen = React.useCallback(() => { + navigation.navigate(ROUTES.PROFILE_NAVIGATOR, { + screen: ROUTES.READ_EMAIL_SCREEN + }); + }, [navigation]); + const onPressEmail = () => { if (hasProfileEmail) { if (isEmailUniquenessValidationEnabled) { - navigateToEmailInsertScreen(); + navigateToInsertEmailScreen(); } else { - navigateToEmailReadScreen(); + navigateToReadEmailScreen(); } } else { - navigateToEmailInsertScreen(); + navigateToInsertEmailScreen(); } }; return ( @@ -89,11 +100,6 @@ const ProfileDataScreen: React.FC = ({ ); }; -const mapDispatchToProps = (_: Dispatch) => ({ - navigateToEmailReadScreen: () => navigateToEmailReadScreen(), - navigateToEmailInsertScreen: () => navigateToEmailInsertScreen() -}); - const mapStateToProps = (state: GlobalState) => ({ profileEmail: profileEmailSelector(state), isEmailValidated: isProfileEmailValidatedSelector(state), @@ -103,4 +109,4 @@ const mapStateToProps = (state: GlobalState) => ({ isEmailUniquenessValidationEnabledSelector(state) }); -export default connect(mapStateToProps, mapDispatchToProps)(ProfileDataScreen); +export default connect(mapStateToProps)(ProfileDataScreen); diff --git a/ts/screens/profile/RemoveAccountDetailsScreen.tsx b/ts/screens/profile/RemoveAccountDetailsScreen.tsx index 091d97de597..5ed1f0f9c51 100644 --- a/ts/screens/profile/RemoveAccountDetailsScreen.tsx +++ b/ts/screens/profile/RemoveAccountDetailsScreen.tsx @@ -27,13 +27,11 @@ import { RemoveAccountMotivationEnum, RemoveAccountMotivationPayload } from "../../store/actions/profile"; -import { ReduxProps } from "../../store/actions/types"; import { GlobalState } from "../../store/reducers/types"; import { userDataProcessingSelector } from "../../store/reducers/userDataProcessing"; import { withKeyboard } from "../../utils/keyboard"; -type Props = ReduxProps & - ReturnType & +type Props = ReturnType & ReturnType; const getMotivationItems = (): ReadonlyArray< diff --git a/ts/screens/profile/SecurityScreen.tsx b/ts/screens/profile/SecurityScreen.tsx index 357137ea949..9dd37d0df3e 100644 --- a/ts/screens/profile/SecurityScreen.tsx +++ b/ts/screens/profile/SecurityScreen.tsx @@ -1,7 +1,7 @@ import { Divider, ListItemNav } from "@pagopa/io-app-design-system"; -import { useNavigation } from "@react-navigation/native"; import { List } from "native-base"; import React, { useCallback, useEffect, useState } from "react"; +import { useNavigation } from "@react-navigation/native"; import { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; import ListItemComponent from "../../components/screens/ListItemComponent"; import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; @@ -29,6 +29,11 @@ import { trackBiometricActivationAccepted, trackBiometricActivationDeclined } from "../onboarding/biometric&securityChecks/analytics"; +import { + IOStackNavigationProp, + useIONavigation +} from "../../navigation/params/AppParamsList"; +import { IdPayCodeParamsList } from "../../features/idpay/code/navigation/params"; const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { title: "profile.preferences.contextualHelpTitle", @@ -38,24 +43,36 @@ const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { const SecurityScreen = (): React.ReactElement => { const dispatch = useIODispatch(); const isFingerprintEnabled = useIOSelector(isFingerprintEnabledSelector); - const navigation = useNavigation(); + const navigation = + useNavigation>(); + const commonNavigation = useIONavigation(); const isScreenReaderEnabled = useScreenReaderEnabled(); const [isFingerprintAvailable, setIsFingerprintAvailable] = useState(false); const isIdPayEnabled = useIOSelector(isIdPayEnabledSelector); const isIdPayCodeOnboarded = useIOSelector(isIdPayCodeOnboardedSelector); const idPayCodeHandler = () => { - navigation.navigate(IdPayCodeRoutes.IDPAY_CODE_MAIN, { - screen: isIdPayCodeOnboarded - ? IdPayCodeRoutes.IDPAY_CODE_RENEW - : IdPayCodeRoutes.IDPAY_CODE_ONBOARDING - }); + navigation.navigate( + IdPayCodeRoutes.IDPAY_CODE_MAIN, + isIdPayCodeOnboarded + ? { + screen: IdPayCodeRoutes.IDPAY_CODE_RENEW + } + : { + screen: IdPayCodeRoutes.IDPAY_CODE_ONBOARDING, + params: { + initiativeId: undefined + } + } + ); }; const requestIdentificationAndResetPin = useCallback(() => { const onSuccess = () => { void mixpanelTrack("UPDATE_PIN"); - navigation.navigate(ROUTES.PIN_SCREEN); + commonNavigation.navigate(ROUTES.PROFILE_NAVIGATOR, { + screen: ROUTES.PIN_SCREEN + }); }; dispatch( @@ -70,7 +87,7 @@ const SecurityScreen = (): React.ReactElement => { shufflePinPadOnPayment ) ); - }, [dispatch, navigation]); + }, [commonNavigation, dispatch]); const setFingerprintPreference = useCallback( (fingerprintPreference: boolean) => diff --git a/ts/screens/profile/ServicesPreferenceScreen.tsx b/ts/screens/profile/ServicesPreferenceScreen.tsx index 8137c997d36..1a6879add8a 100644 --- a/ts/screens/profile/ServicesPreferenceScreen.tsx +++ b/ts/screens/profile/ServicesPreferenceScreen.tsx @@ -3,7 +3,6 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import * as React from "react"; import { connect } from "react-redux"; import { ServicesPreferencesModeEnum } from "../../../definitions/backend/ServicesPreferencesMode"; -import { withLoadingSpinner } from "../../components/helpers/withLoadingSpinner"; import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; import I18n from "../../i18n"; import { profileUpsert } from "../../store/actions/profile"; @@ -16,6 +15,7 @@ import { GlobalState } from "../../store/reducers/types"; import { getFlowType } from "../../utils/analytics"; import { useOnFirstRender } from "../../utils/hooks/useOnFirstRender"; import { showToast } from "../../utils/showToast"; +import LoadingSpinnerOverlay from "../../components/LoadingSpinnerOverlay"; import { trackServiceConfiguration, trackServiceConfigurationScreen @@ -69,22 +69,24 @@ const ServicesPreferenceScreen = (props: Props): React.ReactElement => { }; return ( - - - - - - {manualConfigBottomSheet} - + + + + + + + {manualConfigBottomSheet} + + ); }; @@ -111,4 +113,4 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ export default connect( mapStateToProps, mapDispatchToProps -)(withLoadingSpinner(ServicesPreferenceScreen)); +)(ServicesPreferenceScreen); diff --git a/ts/screens/profile/mailCheck/EmailAlreadyTakenScreen.tsx b/ts/screens/profile/mailCheck/EmailAlreadyTakenScreen.tsx index 3b0fe9fe066..399e327ddcf 100644 --- a/ts/screens/profile/mailCheck/EmailAlreadyTakenScreen.tsx +++ b/ts/screens/profile/mailCheck/EmailAlreadyTakenScreen.tsx @@ -2,6 +2,7 @@ import * as React from "react"; import { View, SafeAreaView, StyleSheet } from "react-native"; import { Pictogram, VSpacer } from "@pagopa/io-app-design-system"; import * as O from "fp-ts/lib/Option"; +import { Route, useRoute } from "@react-navigation/native"; import I18n from "../../../i18n"; import { Body } from "../../../components/core/typography/Body"; import { H3 } from "../../../components/core/typography/H3"; @@ -9,9 +10,7 @@ import { IOStyles } from "../../../components/core/variables/IOStyles"; import themeVariables from "../../../theme/variables"; import FooterWithButtons from "../../../components/ui/FooterWithButtons"; import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; -import { CheckEmailParamsList } from "../../../navigation/params/CheckEmailParamsList"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import NavigationService from "../../../navigation/NavigationService"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; import ROUTES from "../../../navigation/routes"; import { useIODispatch } from "../../../store/hooks"; import { acknowledgeOnEmailValidation } from "../../../store/actions/profile"; @@ -31,30 +30,33 @@ const styles = StyleSheet.create({ export type OnboardingServicesPreferenceScreenNavigationParams = { isFirstOnboarding: boolean; }; -type Props = IOStackNavigationRouteProps< - CheckEmailParamsList, - "CHECK_EMAIL_ALREADY_TAKEN" ->; export type EmailAlreadyUsedScreenParamList = { email: string; }; -const navigateToInsertEmailScreen = () => { - NavigationService.navigate(ROUTES.ONBOARDING, { - screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN - }); -}; - -const EmailAlreadyTakenScreen = (props: Props) => { - const { email } = props.route.params; +const EmailAlreadyTakenScreen = () => { + const { email } = + useRoute< + Route<"CHECK_EMAIL_ALREADY_TAKEN", EmailAlreadyUsedScreenParamList> + >().params; const dispatch = useIODispatch(); + const navigation = useIONavigation(); + + const navigateToInsertEmailScreen = React.useCallback(() => { + navigation.navigate(ROUTES.ONBOARDING, { + screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN, + params: { + isOnboarding: true + } + }); + }, [navigation]); const confirmButtonOnPress = React.useCallback(() => { dispatch(acknowledgeOnEmailValidation(O.none)); navigateToInsertEmailScreen(); - }, [dispatch]); + }, [dispatch, navigateToInsertEmailScreen]); const continueButtonProps = { onPress: confirmButtonOnPress, diff --git a/ts/screens/profile/mailCheck/ValidateEmailScreen.tsx b/ts/screens/profile/mailCheck/ValidateEmailScreen.tsx index 9ac5b6e87fc..ec2717e5561 100644 --- a/ts/screens/profile/mailCheck/ValidateEmailScreen.tsx +++ b/ts/screens/profile/mailCheck/ValidateEmailScreen.tsx @@ -2,6 +2,8 @@ import * as React from "react"; import { View, SafeAreaView, StyleSheet } from "react-native"; import { Pictogram, VSpacer } from "@pagopa/io-app-design-system"; import * as O from "fp-ts/lib/Option"; +import { useCallback } from "react"; +import { Route, useRoute } from "@react-navigation/native"; import I18n from "../../../i18n"; import { Body } from "../../../components/core/typography/Body"; import { H3 } from "../../../components/core/typography/H3"; @@ -10,12 +12,10 @@ import themeVariables from "../../../theme/variables"; import FooterWithButtons from "../../../components/ui/FooterWithButtons"; import { Link } from "../../../components/core/typography/Link"; import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; -import NavigationService from "../../../navigation/NavigationService"; import ROUTES from "../../../navigation/routes"; import { useIODispatch } from "../../../store/hooks"; import { acknowledgeOnEmailValidation } from "../../../store/actions/profile"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { CheckEmailParamsList } from "../../../navigation/params/CheckEmailParamsList"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; const styles = StyleSheet.create({ mainContainer: { @@ -33,33 +33,33 @@ export type EmailNotVerifiedScreenParamList = { email: string; }; -export type Props = IOStackNavigationRouteProps< - CheckEmailParamsList, - "CHECK_EMAIL_NOT_VERIFIED" ->; - -const ValidateEmailScreen = (props: Props) => { +const ValidateEmailScreen = () => { const dispatch = useIODispatch(); - - const { email } = props.route.params; - - const navigateToInsertEmailScreen = () => { - NavigationService.navigate(ROUTES.ONBOARDING, { - screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN + const navigation = useIONavigation(); + const { email } = + useRoute< + Route<"CHECK_EMAIL_NOT_VERIFIED", EmailNotVerifiedScreenParamList> + >().params; + const navigateToInsertEmailScreen = useCallback(() => { + navigation.navigate(ROUTES.ONBOARDING, { + screen: ROUTES.ONBOARDING_READ_EMAIL_SCREEN, + params: { + isOnboarding: true + } }); - }; + }, [navigation]); const confirmButtonOnPress = React.useCallback(() => { // We dispatch this action to show the InsertEmailScreen with // the validation modal already opened. dispatch(acknowledgeOnEmailValidation(O.some(false))); navigateToInsertEmailScreen(); - }, [dispatch]); + }, [dispatch, navigateToInsertEmailScreen]); const modifyEmailButtonOnPress = React.useCallback(() => { dispatch(acknowledgeOnEmailValidation(O.none)); navigateToInsertEmailScreen(); - }, [dispatch]); + }, [dispatch, navigateToInsertEmailScreen]); const continueButtonProps = { onPress: confirmButtonOnPress, diff --git a/ts/screens/services/ServiceDetailsScreen.tsx b/ts/screens/services/ServiceDetailsScreen.tsx index a747765211f..65eadc8635c 100644 --- a/ts/screens/services/ServiceDetailsScreen.tsx +++ b/ts/screens/services/ServiceDetailsScreen.tsx @@ -7,6 +7,7 @@ import { useEffect, useState } from "react"; import { View, SafeAreaView } from "react-native"; import { connect } from "react-redux"; import { VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { ServiceId } from "../../../definitions/backend/ServiceId"; import { SpecialServiceMetadata } from "../../../definitions/backend/SpecialServiceMetadata"; import { IOStyles } from "../../components/core/variables/IOStyles"; @@ -23,8 +24,7 @@ import TosAndPrivacyBox from "../../components/services/TosAndPrivacyBox"; import Markdown from "../../components/ui/Markdown"; import { FooterTopShadow } from "../../components/FooterTopShadow"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; -import { ServicesParamsList } from "../../navigation/params/ServicesParamsList"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; import { loadServiceDetail } from "../../store/actions/services"; import { Dispatch } from "../../store/actions/types"; import { contentSelector } from "../../store/reducers/content"; @@ -40,6 +40,7 @@ import { GlobalState } from "../../store/reducers/types"; import { getServiceCTA } from "../../features/messages/utils/messages"; import { logosForService } from "../../utils/services"; import { handleItemOnPress } from "../../utils/url"; +import { useIOSelector } from "../../store/hooks"; export type ServiceDetailsScreenNavigationParams = Readonly<{ serviceId: ServiceId; @@ -49,14 +50,8 @@ export type ServiceDetailsScreenNavigationParams = Readonly<{ activate?: boolean; }>; -type OwnProps = IOStackNavigationRouteProps< - ServicesParamsList, - "SERVICE_DETAIL" ->; - type Props = ReturnType & - ReturnType & - OwnProps; + ReturnType; type SpecialServiceWrapper = { isSpecialService: boolean; @@ -74,8 +69,19 @@ const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { */ const ServiceDetailsScreen = (props: Props) => { const [isMarkdownLoaded, setIsMarkdownLoaded] = useState(false); + const navigation = useIONavigation(); + const { serviceId, activate } = + useRoute>() + .params; + + const service = useIOSelector(state => + pipe(serviceByIdSelector(state, serviceId), pot.toUndefined) + ); - const { service, serviceId, loadServiceDetail } = props; + // const serviceId = props.route.params.serviceId; + // const activate = props.route.params.activate; + + const { loadServiceDetail } = props; useEffect(() => { loadServiceDetail(serviceId); }, [serviceId, loadServiceDetail]); @@ -109,7 +115,7 @@ const ServiceDetailsScreen = (props: Props) => { return ( props.navigation.goBack()} + goBack={() => navigation.goBack()} headerTitle={I18n.t("serviceDetail.headerTitle")} contextualHelpMarkdown={contextualHelpMarkdown} faqCategories={["services_detail"]} @@ -190,11 +196,11 @@ const ServiceDetailsScreen = (props: Props) => { <> )} @@ -205,22 +211,14 @@ const ServiceDetailsScreen = (props: Props) => { ); }; -const mapStateToProps = (state: GlobalState, props: OwnProps) => { - const serviceId = props.route.params.serviceId; - const activate = props.route.params.activate; - - return { - serviceId, - activate, - service: pipe(serviceByIdSelector(state, serviceId), pot.toUndefined), - isInboxEnabled: isInboxEnabledSelector(state), - isEmailEnabled: isEmailEnabledSelector(state), - isEmailValidated: isProfileEmailValidatedSelector(state), - content: contentSelector(state), - profile: profileSelector(state), - isDebugModeEnabled: isDebugModeEnabledSelector(state) - }; -}; +const mapStateToProps = (state: GlobalState) => ({ + isInboxEnabled: isInboxEnabledSelector(state), + isEmailEnabled: isEmailEnabledSelector(state), + isEmailValidated: isProfileEmailValidatedSelector(state), + content: contentSelector(state), + profile: profileSelector(state), + isDebugModeEnabled: isDebugModeEnabledSelector(state) +}); const mapDispatchToProps = (dispatch: Dispatch) => ({ loadServiceDetail: (id: ServiceId) => dispatch(loadServiceDetail.request(id)), diff --git a/ts/screens/services/ServicesLocalScreen.tsx b/ts/screens/services/ServicesLocalScreen.tsx index 0de66a244f9..003fe0e7278 100644 --- a/ts/screens/services/ServicesLocalScreen.tsx +++ b/ts/screens/services/ServicesLocalScreen.tsx @@ -1,4 +1,3 @@ -import { useNavigation } from "@react-navigation/native"; import * as React from "react"; import { useCallback } from "react"; import { View, StyleSheet } from "react-native"; @@ -8,6 +7,7 @@ import LocalServicesWebView from "../../components/services/LocalServicesWebView import ROUTES from "../../navigation/routes"; import { showServiceDetails } from "../../store/actions/services"; import { useIODispatch } from "../../store/hooks"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; const styles = StyleSheet.create({ contentWrapper: { @@ -17,7 +17,7 @@ const styles = StyleSheet.create({ const ServicesLocalScreen = () => { const dispatch = useIODispatch(); - const navigation = useNavigation(); + const navigation = useIONavigation(); const onServiceSelect = useCallback( (service: ServicePublic) => { diff --git a/ts/screens/services/ServicesNationalScreen.tsx b/ts/screens/services/ServicesNationalScreen.tsx index 0825e982d96..ff237328f60 100644 --- a/ts/screens/services/ServicesNationalScreen.tsx +++ b/ts/screens/services/ServicesNationalScreen.tsx @@ -1,5 +1,4 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; -import { useNavigation } from "@react-navigation/native"; import * as React from "react"; import { useCallback } from "react"; import { Animated } from "react-native"; @@ -17,11 +16,12 @@ import { visibleServicesDetailLoadStateSelector } from "../../store/reducers/entities/services"; import { userMetadataSelector } from "../../store/reducers/userMetadata"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; const tabScrollOffset = new Animated.Value(0); const ServicesNationalScreen = () => { - const navigation = useNavigation(); + const navigation = useIONavigation(); const dispatch = useIODispatch(); const nationalTabSections = useIOSelector(nationalServicesSectionsSelector); const visibleServicesContentLoadState = useIOSelector( diff --git a/ts/screens/wallet/AddCardScreen.tsx b/ts/screens/wallet/AddCardScreen.tsx index a88f174d539..37b3856d293 100644 --- a/ts/screens/wallet/AddCardScreen.tsx +++ b/ts/screens/wallet/AddCardScreen.tsx @@ -11,8 +11,8 @@ import { Content } from "native-base"; import React, { useState } from "react"; import { Keyboard, SafeAreaView, ScrollView, StyleSheet } from "react-native"; import { Col, Grid } from "react-native-easy-grid"; -import { connect } from "react-redux"; import { IOColors, VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { PaymentRequestsGetResponse } from "../../../definitions/backend/PaymentRequestsGetResponse"; import { Link } from "../../components/core/typography/Link"; import { LabelledItem } from "../../components/LabelledItem"; @@ -22,14 +22,8 @@ import BaseScreenComponent, { import SectionStatusComponent from "../../components/SectionStatus"; import FooterWithButtons from "../../components/ui/FooterWithButtons"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../navigation/params/WalletParamsList"; -import { - navigateBack, - navigateToWalletConfirmCardDetails -} from "../../store/actions/navigation"; -import { Dispatch } from "../../store/actions/types"; -import { GlobalState } from "../../store/reducers/types"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; +import { navigateToWalletConfirmCardDetails } from "../../store/actions/navigation"; import { CreditCard } from "../../types/pagopa"; import { ComponentProps } from "../../types/react"; import { useScreenReaderEnabled } from "../../utils/accessibility"; @@ -64,15 +58,6 @@ export type AddCardScreenNavigationParams = Readonly<{ keyFrom?: string; }>; -type OwnProps = IOStackNavigationRouteProps< - WalletParamsList, - "WALLET_ADD_CARD" ->; - -type Props = ReturnType & - ReturnType & - OwnProps; - const styles = StyleSheet.create({ creditCardForm: { height: 24, @@ -215,11 +200,21 @@ const getAccessibilityLabels = (creditCard: CreditCardState) => ({ : I18n.t("wallet.dummyCard.accessibility.securityCode.4D.error") }); -const AddCardScreen: React.FC = props => { +const AddCardScreen: React.FC = () => { const [creditCard, setCreditCard] = useState( INITIAL_CARD_FORM_STATE ); + const navigation = useIONavigation(); + const { inPayment, keyFrom } = + useRoute>().params; + const navigateToConfirmCardDetailsScreen = (creditCard: CreditCard) => + navigateToWalletConfirmCardDetails({ + creditCard, + inPayment, + keyFrom + }); + const isCardHolderValid = O.isNone(creditCard.holder) ? undefined : isValidCardHolder(creditCard.holder); @@ -263,7 +258,7 @@ const AddCardScreen: React.FC = props => { const secondaryButtonProps = { block: true, bordered: true, - onPress: props.navigateBack, + onPress: navigation.goBack, title: I18n.t("global.buttons.back") }; @@ -442,7 +437,7 @@ const AddCardScreen: React.FC = props => { leftButton={secondaryButtonProps} rightButton={usePrimaryButtonPropsFromState( creditCard, - props.navigateToConfirmCardDetailsScreen, + navigateToConfirmCardDetailsScreen, isValidCardHolder(creditCard.holder), O.toUndefined(maybeCreditCardValidOrExpired(creditCard)) )} @@ -452,19 +447,8 @@ const AddCardScreen: React.FC = props => { ); }; -const mapStateToProps = (_: GlobalState) => ({}); - -const mapDispatchToProps = (_: Dispatch, props: OwnProps) => ({ - navigateBack: () => navigateBack(), - navigateToConfirmCardDetailsScreen: (creditCard: CreditCard) => - navigateToWalletConfirmCardDetails({ - creditCard, - inPayment: props.route.params.inPayment, - keyFrom: props.route.params.keyFrom - }) -}); +export default AddCardScreen; -export default connect(mapStateToProps, mapDispatchToProps)(AddCardScreen); // keep encapsulation strong export const testableAddCardScreen = isTestEnv ? { isCreditCardDateExpiredOrInvalid } diff --git a/ts/screens/wallet/AddPaymentMethodScreen.tsx b/ts/screens/wallet/AddPaymentMethodScreen.tsx index d3514079de0..2445cda4804 100644 --- a/ts/screens/wallet/AddPaymentMethodScreen.tsx +++ b/ts/screens/wallet/AddPaymentMethodScreen.tsx @@ -6,6 +6,7 @@ import * as React from "react"; import { View, SafeAreaView } from "react-native"; import { connect } from "react-redux"; import { VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { PaymentRequestsGetResponse } from "../../../definitions/backend/PaymentRequestsGetResponse"; import BpayLogo from "../../../img/wallet/payment-methods/bancomat_pay.svg"; import CreditCard from "../../../img/wallet/payment-methods/creditcard.svg"; @@ -27,8 +28,6 @@ import { walletAddPaypalStart } from "../../features/wallet/onboarding/paypal/store/actions"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../navigation/params/WalletParamsList"; import { navigateBack, navigateToWalletAddCreditCard @@ -55,13 +54,7 @@ export type AddPaymentMethodScreenNavigationParams = Readonly<{ keyFrom?: string; }>; -type OwnProps = IOStackNavigationRouteProps< - WalletParamsList, - "WALLET_ADD_PAYMENT_METHOD" ->; - -type Props = OwnProps & - ReturnType & +type Props = ReturnType & ReturnType; const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { @@ -76,13 +69,14 @@ const getPaymentMethods = ( isPaymentOnGoing: boolean; isPaypalEnabled: boolean; canOnboardBPay: boolean; - } + }, + navigateToAddCreditCard: () => void ): ReadonlyArray => [ { name: I18n.t("wallet.methods.card.name"), description: I18n.t("wallet.methods.card.description"), icon: CreditCard, - onPress: props.navigateToAddCreditCard, + onPress: navigateToAddCreditCard, status: "implemented", section: "credit_card" }, @@ -149,9 +143,16 @@ const getPaymentMethods = ( const AddPaymentMethodScreen: React.FunctionComponent = ( props: Props ) => { - const inPayment = props.route.params.inPayment; - const canAddOnlyPayablePaymentMethod = - props.route.params.showOnlyPayablePaymentMethods; + const { inPayment, showOnlyPayablePaymentMethods, keyFrom } = + useRoute< + Route<"WALLET_ADD_PAYMENT_METHOD", AddPaymentMethodScreenNavigationParams> + >().params; + + const navigateToAddCreditCard = () => + navigateToWalletAddCreditCard({ + inPayment, + keyFrom + }); const cancelButtonProps = { block: true, @@ -187,26 +188,34 @@ const AddPaymentMethodScreen: React.FunctionComponent = ( {/* since we're paying show only those method can pay with pagoPA */} ) : ( )} @@ -219,17 +228,12 @@ const AddPaymentMethodScreen: React.FunctionComponent = ( ); }; -const mapDispatchToProps = (dispatch: Dispatch, props: OwnProps) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ navigateBack: () => navigateBack(), startBPayOnboarding: () => dispatch(walletAddBPayStart()), startPaypalOnboarding: (onOboardingCompleted: OnOnboardingCompleted) => dispatch(walletAddPaypalStart(onOboardingCompleted)), - startAddBancomat: () => dispatch(walletAddBancomatStart()), - navigateToAddCreditCard: () => - navigateToWalletAddCreditCard({ - inPayment: props.route.params.inPayment, - keyFrom: props.route.params.keyFrom - }) + startAddBancomat: () => dispatch(walletAddBancomatStart()) }); const mapStateToProps = (state: GlobalState) => { diff --git a/ts/screens/wallet/ConfirmCardDetailsScreen.tsx b/ts/screens/wallet/ConfirmCardDetailsScreen.tsx index 41203494a06..2e01409ce06 100644 --- a/ts/screens/wallet/ConfirmCardDetailsScreen.tsx +++ b/ts/screens/wallet/ConfirmCardDetailsScreen.tsx @@ -12,6 +12,7 @@ import { View, Alert, SafeAreaView, StyleSheet } from "react-native"; import { connect } from "react-redux"; import { HSpacer, VSpacer } from "@pagopa/io-app-design-system"; +import { useNavigation, useRoute, Route } from "@react-navigation/native"; import { PaymentRequestsGetResponse } from "../../../definitions/backend/PaymentRequestsGetResponse"; import { TypeEnum } from "../../../definitions/pagopa/Wallet"; import image from "../../../img/wallet/errors/payment-unavailable-icon.png"; @@ -41,7 +42,10 @@ import { isReady } from "../../common/model/RemoteValue"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; +import { + IOStackNavigationProp, + IOStackNavigationRouteProps +} from "../../navigation/params/AppParamsList"; import { WalletParamsList } from "../../navigation/params/WalletParamsList"; import { navigateToAddCreditCardOutcomeCode, @@ -67,6 +71,7 @@ import { CreditCard, Wallet } from "../../types/pagopa"; import { getLocalePrimaryWithFallback } from "../../utils/locale"; import { getLookUpIdPO } from "../../utils/pmLookUpId"; import { showToast } from "../../utils/showToast"; +import { LightModalContext } from "../../components/ui/LightModal"; import { dispatchPickPspOrConfirm } from "./payment/common"; export type ConfirmCardDetailsScreenNavigationParams = Readonly<{ @@ -504,8 +509,32 @@ const mergeProps = ( }; }; -export default connect( +const ConnectedConfirmCardDetailsScreen = connect( mapStateToProps, mapDispatchToProps, mergeProps )(withLoadingSpinner(ConfirmCardDetailsScreen)); + +const ConfirmCardDetailsScreenFC = () => { + const { ...modalContext } = React.useContext(LightModalContext); + const navigation = + useNavigation< + IOStackNavigationProp + >(); + const route = + useRoute< + Route< + "WALLET_CONFIRM_CARD_DETAILS", + ConfirmCardDetailsScreenNavigationParams + > + >(); + return ( + + ); +}; + +export default ConfirmCardDetailsScreenFC; diff --git a/ts/screens/wallet/PaymentHistoryDetailsScreen.tsx b/ts/screens/wallet/PaymentHistoryDetailsScreen.tsx index da733dcbeb1..c8f07cc2978 100644 --- a/ts/screens/wallet/PaymentHistoryDetailsScreen.tsx +++ b/ts/screens/wallet/PaymentHistoryDetailsScreen.tsx @@ -5,6 +5,7 @@ import { Text as NBButtonText } from "native-base"; import { View } from "react-native"; import { connect } from "react-redux"; import { Icon, HSpacer, VSpacer } from "@pagopa/io-app-design-system"; +import { useNavigation, useRoute, Route } from "@react-navigation/native"; import { EnteBeneficiario } from "../../../definitions/backend/EnteBeneficiario"; import { PaymentRequestsGetResponse } from "../../../definitions/backend/PaymentRequestsGetResponse"; import { ToolEnum } from "../../../definitions/content/AssistanceToolConfig"; @@ -27,7 +28,10 @@ import { zendeskSupportStart } from "../../features/zendesk/store/actions"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; +import { + IOStackNavigationProp, + IOStackNavigationRouteProps +} from "../../navigation/params/AppParamsList"; import { WalletParamsList } from "../../navigation/params/WalletParamsList"; import { Dispatch } from "../../store/actions/types"; import { canShowHelpSelector } from "../../store/reducers/assistanceTools"; @@ -422,7 +426,28 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ dispatch(zendeskSelectedCategory(category)) }); -export default connect( +const ConnectedPaymentHistoryDetailsScreen = connect( mapStateToProps, mapDispatchToProps )(PaymentHistoryDetailsScreen); + +const PaymentHistoryDetailsScreenFC = () => { + const navigation = + useNavigation< + IOStackNavigationProp + >(); + const route = + useRoute< + Route< + "PAYMENT_HISTORY_DETAIL_INFO", + PaymentHistoryDetailsScreenNavigationParams + > + >(); + return ( + + ); +}; +export default PaymentHistoryDetailsScreenFC; diff --git a/ts/screens/wallet/TransactionDetailsScreen.tsx b/ts/screens/wallet/TransactionDetailsScreen.tsx index 0d733996dc5..a58e742dda5 100644 --- a/ts/screens/wallet/TransactionDetailsScreen.tsx +++ b/ts/screens/wallet/TransactionDetailsScreen.tsx @@ -12,24 +12,29 @@ import { } from "react-native"; import { connect } from "react-redux"; import { IOColors, VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useNavigation, useRoute } from "@react-navigation/native"; import ButtonDefaultOpacity from "../../components/ButtonDefaultOpacity"; import CopyButtonComponent from "../../components/CopyButtonComponent"; import { Body } from "../../components/core/typography/Body"; import { H2 } from "../../components/core/typography/H2"; import { Link } from "../../components/core/typography/Link"; import { IOStyles } from "../../components/core/variables/IOStyles"; -import { withLightModalContext } from "../../components/helpers/withLightModalContext"; -import { withLoadingSpinner } from "../../components/helpers/withLoadingSpinner"; import ItemSeparatorComponent from "../../components/ItemSeparatorComponent"; import BaseScreenComponent, { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; import FocusAwareStatusBar from "../../components/ui/FocusAwareStatusBar"; -import { LightModalContextInterface } from "../../components/ui/LightModal"; +import { + LightModalContext, + LightModalContextInterface +} from "../../components/ui/LightModal"; import { PaymentSummaryComponent } from "../../components/wallet/PaymentSummaryComponent"; import { SlidedContentComponent } from "../../components/wallet/SlidedContentComponent"; import I18n from "../../i18n"; -import { IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; +import { + IOStackNavigationProp, + IOStackNavigationRouteProps +} from "../../navigation/params/AppParamsList"; import { WalletParamsList } from "../../navigation/params/WalletParamsList"; import { Dispatch } from "../../store/actions/types"; import { backToEntrypointPayment } from "../../store/actions/wallet/payment"; @@ -46,6 +51,7 @@ import { getTransactionIUV } from "../../utils/payment"; import { formatNumberCentsToAmount } from "../../utils/stringBuilder"; +import { withLoadingSpinner } from "../../components/helpers/withLoadingSpinner"; export type TransactionDetailsScreenNavigationParams = Readonly<{ isPaymentCompletedTransaction: boolean; @@ -58,8 +64,10 @@ type OwnProps = IOStackNavigationRouteProps< >; type Props = ReturnType & - ReturnType & - LightModalContextInterface & + ReturnType; + +type TransactionDetailsScreenProps = LightModalContextInterface & + Props & OwnProps; /** @@ -89,10 +97,13 @@ type State = { * a list of information available about a * specific transaction. */ -class TransactionDetailsScreen extends React.Component { +class TransactionDetailsScreen extends React.Component< + TransactionDetailsScreenProps, + State +> { private subscription: NativeEventSubscription | undefined; private navigationEventUnsubscribe!: () => void; - constructor(props: Props) { + constructor(props: TransactionDetailsScreenProps) { super(props); this.state = { showFullReason: false }; } @@ -361,7 +372,31 @@ const mapStateToProps = (state: GlobalState, ownProps: OwnProps) => { }; }; -export default connect( +const ConnectedTransactionDetailsScreen = connect( mapStateToProps, mapDispatchToProps -)(withLightModalContext(withLoadingSpinner(TransactionDetailsScreen))); +)(withLoadingSpinner(TransactionDetailsScreen)); + +const TransactionDetailsScreenFC = () => { + const { ...modalContext } = React.useContext(LightModalContext); + const navigation = + useNavigation< + IOStackNavigationProp + >(); + const route = + useRoute< + Route< + "WALLET_TRANSACTION_DETAILS", + TransactionDetailsScreenNavigationParams + > + >(); + return ( + + ); +}; + +export default TransactionDetailsScreenFC; diff --git a/ts/screens/wallet/__tests__/AddCardScreen.test.tsx b/ts/screens/wallet/__tests__/AddCardScreen.test.tsx index ca0cda09d50..0ccd35a5063 100644 --- a/ts/screens/wallet/__tests__/AddCardScreen.test.tsx +++ b/ts/screens/wallet/__tests__/AddCardScreen.test.tsx @@ -141,19 +141,22 @@ describe("getPaymentMethods", () => { startBPayOnboarding: jest.fn(), startPaypalOnboarding: jest.fn(), startAddBancomat: jest.fn(), - navigateToAddCreditCard: jest.fn(), isPaypalAlreadyAdded: true, isPaypalEnabled: true, canOnboardBPay: false, canPayWithBPay: false }; // TODO: ⚠️ cast to any only to complete the merge, should be removed! - const methods = testableFunctions.getPaymentMethods!(props as any, { - onlyPaymentMethodCanPay: true, - isPaymentOnGoing: true, - isPaypalEnabled: true, - canOnboardBPay: true - }); + const methods = testableFunctions.getPaymentMethods!( + props as any, + { + onlyPaymentMethodCanPay: true, + isPaymentOnGoing: true, + isPaypalEnabled: true, + canOnboardBPay: true + }, + jest.fn() + ); const getMethodStatus = ( methods: ReadonlyArray, @@ -174,12 +177,16 @@ describe("getPaymentMethods", () => { it("paypal should be always notImplemented when the FF is OFF", () => { // TODO: ⚠️ cast to any only to complete the merge, should be removed! - const methods = testableFunctions.getPaymentMethods!(props as any, { - onlyPaymentMethodCanPay: true, - isPaymentOnGoing: true, - isPaypalEnabled: false, - canOnboardBPay: true - }); + const methods = testableFunctions.getPaymentMethods!( + props as any, + { + onlyPaymentMethodCanPay: true, + isPaymentOnGoing: true, + isPaypalEnabled: false, + canOnboardBPay: true + }, + jest.fn() + ); expect( getMethodStatus(methods, I18n.t("wallet.methods.paypal.name")) ).toEqual("notImplemented"); @@ -187,12 +194,16 @@ describe("getPaymentMethods", () => { it("bpay should be always notImplemented if Bpay onboarding FF is OFF", () => { // TODO: ⚠️ cast to any only to complete the merge, should be removed! - const methods = testableFunctions.getPaymentMethods!(props as any, { - onlyPaymentMethodCanPay: true, - isPaymentOnGoing: true, - isPaypalEnabled: true, - canOnboardBPay: false - }); + const methods = testableFunctions.getPaymentMethods!( + props as any, + { + onlyPaymentMethodCanPay: true, + isPaymentOnGoing: true, + isPaypalEnabled: true, + canOnboardBPay: false + }, + jest.fn() + ); expect( getMethodStatus(methods, I18n.t("wallet.methods.bancomatPay.name")) ).toEqual("notImplemented"); @@ -200,12 +211,16 @@ describe("getPaymentMethods", () => { it("bpay should be always implemented if Bpay onboarding FF is ON and onlyPaymentMethodCanPay flag is OFF", () => { // TODO: ⚠️ cast to any only to complete the merge, should be removed! - const methods = testableFunctions.getPaymentMethods!(props as any, { - onlyPaymentMethodCanPay: false, - isPaymentOnGoing: true, - isPaypalEnabled: true, - canOnboardBPay: true - }); + const methods = testableFunctions.getPaymentMethods!( + props as any, + { + onlyPaymentMethodCanPay: false, + isPaymentOnGoing: true, + isPaypalEnabled: true, + canOnboardBPay: true + }, + jest.fn() + ); expect( getMethodStatus(methods, I18n.t("wallet.methods.bancomatPay.name")) ).toEqual("implemented"); @@ -222,7 +237,8 @@ describe("getPaymentMethods", () => { isPaymentOnGoing: true, isPaypalEnabled: true, canOnboardBPay: canPayWithBPay && canOnboardBPay - } + }, + jest.fn() ); expect( getMethodStatus(methods, I18n.t("wallet.methods.bancomatPay.name")) @@ -240,7 +256,8 @@ describe("getPaymentMethods", () => { isPaymentOnGoing: false, isPaypalEnabled: true, canOnboardBPay: canPayWithBPay && canOnboardBPay - } + }, + jest.fn() ); expect( getMethodStatus(methods, I18n.t("wallet.methods.bancomatPay.name")) diff --git a/ts/screens/wallet/__tests__/ConfirmCardDetailScreen.test.tsx b/ts/screens/wallet/__tests__/ConfirmCardDetailScreen.test.tsx index dd42c54e52d..2dc4002a935 100644 --- a/ts/screens/wallet/__tests__/ConfirmCardDetailScreen.test.tsx +++ b/ts/screens/wallet/__tests__/ConfirmCardDetailScreen.test.tsx @@ -67,9 +67,7 @@ const getComponent = () => { } as ConfirmCardDetailsScreenNavigationParams; const ToBeTested: React.FunctionComponent< React.ComponentProps - > = (props: React.ComponentProps) => ( - - ); + > = () => ; const globalState = appReducer(undefined, applicationChangeState("active")); const store = createStore(appReducer, globalState as any); diff --git a/ts/screens/wallet/creditCardOnboardingAttempts/CreditCardOnboardingAttemptDetailScreen.tsx b/ts/screens/wallet/creditCardOnboardingAttempts/CreditCardOnboardingAttemptDetailScreen.tsx index 21b4b83a523..fdf3a62b1ae 100644 --- a/ts/screens/wallet/creditCardOnboardingAttempts/CreditCardOnboardingAttemptDetailScreen.tsx +++ b/ts/screens/wallet/creditCardOnboardingAttempts/CreditCardOnboardingAttemptDetailScreen.tsx @@ -4,6 +4,7 @@ import * as React from "react"; import { View, StyleSheet } from "react-native"; import { useDispatch } from "react-redux"; import { Icon, HSpacer, VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { ToolEnum } from "../../../../definitions/content/AssistanceToolConfig"; import ButtonDefaultOpacity from "../../../components/ButtonDefaultOpacity"; import { Body } from "../../../components/core/typography/Body"; @@ -20,8 +21,7 @@ import { zendeskSupportStart } from "../../../features/zendesk/store/actions"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../navigation/params/WalletParamsList"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; import { useIOSelector } from "../../../store/hooks"; import { canShowHelpSelector } from "../../../store/reducers/assistanceTools"; import { assistanceToolConfigSelector } from "../../../store/reducers/backendStatus"; @@ -43,11 +43,6 @@ export type CreditCardOnboardingAttemptDetailScreenNavigationParams = Readonly<{ attempt: CreditCardInsertion; }>; -type Props = IOStackNavigationRouteProps< - WalletParamsList, - "CREDIT_CARD_ONBOARDING_ATTEMPT_DETAIL" ->; - const styles = StyleSheet.create({ row: { flexDirection: "row", @@ -78,9 +73,16 @@ const renderRow = (label: string, value: string) => ( * This screen shows credit card onboarding attempt details and allows the user * to ask assistance about this attempts */ -const CreditCardOnboardingAttemptDetailScreen = (props: Props) => { +const CreditCardOnboardingAttemptDetailScreen = () => { const dispatch = useDispatch(); - const attempt = props.route.params.attempt; + const { attempt } = + useRoute< + Route< + "CREDIT_CARD_ONBOARDING_ATTEMPT_DETAIL", + CreditCardOnboardingAttemptDetailScreenNavigationParams + > + >().params; + const navigation = useIONavigation(); const assistanceToolConfig = useIOSelector(assistanceToolConfigSelector); const outcomeCodes = useIOSelector(outcomeCodesSelector); const choosenTool = assistanceToolRemoteConfig(assistanceToolConfig); @@ -160,7 +162,7 @@ const CreditCardOnboardingAttemptDetailScreen = (props: Props) => { : undefined; return ( props.navigation.goBack()} + goBack={() => navigation.goBack()} showChat={false} dark={true} headerTitle={I18n.t("wallet.creditCard.onboardingAttempts.title")} diff --git a/ts/screens/wallet/payment/ConfirmPaymentMethodScreen.tsx b/ts/screens/wallet/payment/ConfirmPaymentMethodScreen.tsx index d0cc490ec0e..03ade8ddeef 100644 --- a/ts/screens/wallet/payment/ConfirmPaymentMethodScreen.tsx +++ b/ts/screens/wallet/payment/ConfirmPaymentMethodScreen.tsx @@ -6,6 +6,7 @@ import * as React from "react"; import { View, Alert, SafeAreaView, StyleSheet, Text } from "react-native"; import { connect } from "react-redux"; import { IOColors, Icon, HSpacer, VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { ImportoEuroCents } from "../../../../definitions/backend/ImportoEuroCents"; import { PaymentRequestsGetResponse } from "../../../../definitions/backend/PaymentRequestsGetResponse"; import { PspData } from "../../../../definitions/pagopa/PspData"; @@ -18,13 +19,14 @@ import { H3 } from "../../../components/core/typography/H3"; import { H4 } from "../../../components/core/typography/H4"; import { LabelSmall } from "../../../components/core/typography/LabelSmall"; import { IOStyles } from "../../../components/core/variables/IOStyles"; -import { withLightModalContext } from "../../../components/helpers/withLightModalContext"; -import { withLoadingSpinner } from "../../../components/helpers/withLoadingSpinner"; import BaseScreenComponent, { ContextualHelpPropsMarkdown } from "../../../components/screens/BaseScreenComponent"; import FooterWithButtons from "../../../components/ui/FooterWithButtons"; -import { LightModalContextInterface } from "../../../components/ui/LightModal"; +import { + LightModalContext, + LightModalContextInterface +} from "../../../components/ui/LightModal"; import { getCardIconFromBrandLogo } from "../../../components/wallet/card/Logo"; import { PayWebViewModal } from "../../../components/wallet/PayWebViewModal"; import { SelectionBox } from "../../../components/wallet/SelectionBox"; @@ -38,8 +40,7 @@ import { } from "../../../common/model/RemoteValue"; import { BrandImage } from "../../../features/wallet/component/card/BrandImage"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../navigation/params/WalletParamsList"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; import ROUTES from "../../../navigation/routes"; import { navigateToPaymentOutcomeCode, @@ -90,6 +91,7 @@ import { getLookUpIdPO } from "../../../utils/pmLookUpId"; import { showToast } from "../../../utils/showToast"; import { formatNumberCentsToAmount } from "../../../utils/stringBuilder"; import { openWebUrl } from "../../../utils/url"; +import LoadingSpinnerOverlay from "../../../components/LoadingSpinnerOverlay"; // temporary feature flag since this feature is still WIP // (missing task to complete https://pagopa.atlassian.net/browse/IA-684?filter=10121) @@ -104,15 +106,10 @@ export type ConfirmPaymentMethodScreenNavigationParams = Readonly<{ psps: ReadonlyArray; }>; -type OwnProps = IOStackNavigationRouteProps< - WalletParamsList, - "PAYMENT_CONFIRM_PAYMENT_METHOD" ->; - type Props = ReturnType & - ReturnType & - LightModalContextInterface & - OwnProps; + ReturnType; + +type ConfirmPaymentMethodScreenProps = LightModalContextInterface & Props; const styles = StyleSheet.create({ totalContainer: { @@ -225,7 +222,18 @@ const getPaymentMethodType = ( } }; -const ConfirmPaymentMethodScreen: React.FC = (props: Props) => { +const ConfirmPaymentMethodScreen: React.FC = ( + props: ConfirmPaymentMethodScreenProps +) => { + const navigation = useIONavigation(); + const { rptId, initialAmount, verifica, idPayment, wallet, psps } = + useRoute< + Route< + "PAYMENT_CONFIRM_PAYMENT_METHOD", + ConfirmPaymentMethodScreenNavigationParams + > + >().params; + React.useEffect(() => { // show a toast if we got an error while retrieving pm session token if (O.isSome(props.retrievingSessionTokenError)) { @@ -233,13 +241,28 @@ const ConfirmPaymentMethodScreen: React.FC = (props: Props) => { } }, [props.retrievingSessionTokenError]); + const pickPaymentMethod = () => + navigateToPaymentPickPaymentMethodScreen({ + rptId, + initialAmount, + verifica, + idPayment + }); + const pickPsp = () => + navigateToPaymentPickPspScreen({ + rptId, + initialAmount, + verifica, + idPayment, + psps, + wallet, + chooseToChange: true + }); + const urlPrefix = props.isPagoPATestEnabled ? pagoPaApiUrlPrefixTest : pagoPaApiUrlPrefix; - const verifica: PaymentRequestsGetResponse = props.route.params.verifica; - const wallet: Wallet = props.route.params.wallet; - const idPayment: string = props.route.params.idPayment; const paymentReason = verifica.causaleVersamento; const maybePsp = O.fromNullable(wallet.psp); const isPayingWithPaypal = isRawPayPal(wallet.paymentMethod); @@ -271,7 +294,7 @@ const ConfirmPaymentMethodScreen: React.FC = (props: Props) => { ) ) { // store the rptid of a payment done - props.dispatchPaymentCompleteSuccessfully(props.route.params.rptId); + props.dispatchPaymentCompleteSuccessfully(rptId); // refresh transactions list props.loadTransactions(); } else { @@ -304,17 +327,15 @@ const ConfirmPaymentMethodScreen: React.FC = (props: Props) => { // navigate to the screen where the user can pick the desired psp const handleOnEditPaypalPsp = () => { - props.navigation.navigate(ROUTES.WALLET_PAYPAL_UPDATE_PAYMENT_PSP, { - idWallet: wallet.idWallet, - idPayment + navigation.navigate(ROUTES.WALLET_NAVIGATOR, { + screen: ROUTES.WALLET_PAYPAL_UPDATE_PAYMENT_PSP, + params: { idWallet: wallet.idWallet, idPayment } }); }; // Handle the PSP change, this will trigger // a different callback for a payment with PayPal. - const handleChangePsp = isPayingWithPaypal - ? handleOnEditPaypalPsp - : props.pickPsp; + const handleChangePsp = isPayingWithPaypal ? handleOnEditPaypalPsp : pickPsp; const formData = pipe( props.payStartWebviewPayload, @@ -374,167 +395,171 @@ const ConfirmPaymentMethodScreen: React.FC = (props: Props) => { ); return ( - - - - - - - -

{I18n.t("wallet.ConfirmPayment.total")}

-

{formattedTotal}

-
- - - - - - -

- {I18n.t("wallet.ConfirmPayment.paymentInformations")} -

-
- - - - -

- {paymentReason} -

- - - {formattedSingleAmount} - -
- - - - - - -

- {I18n.t("wallet.ConfirmPayment.payWith")} -

-
- - - - - - - - - - -

- {I18n.t("wallet.ConfirmPayment.transactionCosts")} -

-
- - - - + + + + + + + +

{I18n.t("wallet.ConfirmPayment.total")}

+

{formattedTotal}

+
+ + + + + + +

+ {I18n.t("wallet.ConfirmPayment.paymentInformations")} +

+
+ + + + +

+ {paymentReason} +

+ + + {formattedSingleAmount} + +
+ + + + + + +

+ {I18n.t("wallet.ConfirmPayment.payWith")} +

+
+ + + + + + + + + + +

+ {I18n.t("wallet.ConfirmPayment.transactionCosts")} +

+
+ + + + + + {isPayingWithPaypal && privacyUrl && ( + <> + + + openWebUrl(privacyUrl)} + accessibilityRole="link" + > + + {`${I18n.t( + "wallet.onboarding.paypal.paymentCheckout.privacyDisclaimer" + )} `} + + + + {I18n.t( + "wallet.onboarding.paypal.paymentCheckout.privacyTerms" + )} + + + + )} + + +
+
+ + {O.isSome(props.payStartWebviewPayload) && ( + + )} - {isPayingWithPaypal && privacyUrl && ( - <> - - - openWebUrl(privacyUrl)} - accessibilityRole="link" - > - - {`${I18n.t( - "wallet.onboarding.paypal.paymentCheckout.privacyDisclaimer" - )} `} - - - - {I18n.t( - "wallet.onboarding.paypal.paymentCheckout.privacyTerms" - )} - - - + + props.dispatchPaymentStart({ + idWallet: wallet.idWallet, + idPayment, + language: getLocalePrimaryWithFallback() + }), + `${I18n.t("wallet.ConfirmPayment.pay")} ${formattedTotal}`, + undefined, + undefined, + O.isSome(props.payStartWebviewPayload) )} - - -
-
- - {O.isSome(props.payStartWebviewPayload) && ( - - )} - - - props.dispatchPaymentStart({ - idWallet: wallet.idWallet, - idPayment, - language: getLocalePrimaryWithFallback() - }), - `${I18n.t("wallet.ConfirmPayment.pay")} ${formattedTotal}`, - undefined, - undefined, - O.isSome(props.payStartWebviewPayload) - )} - /> -
-
+
+ + ); }; const mapStateToProps = (state: GlobalState) => { @@ -564,29 +589,12 @@ const mapStateToProps = (state: GlobalState) => { }; }; -const mapDispatchToProps = (dispatch: Dispatch, props: OwnProps) => { +const mapDispatchToProps = (dispatch: Dispatch) => { const dispatchCancelPayment = () => { dispatch(abortRunningPayment()); showToast(I18n.t("wallet.ConfirmPayment.cancelPaymentSuccess"), "success"); }; return { - pickPaymentMethod: () => - navigateToPaymentPickPaymentMethodScreen({ - rptId: props.route.params.rptId, - initialAmount: props.route.params.initialAmount, - verifica: props.route.params.verifica, - idPayment: props.route.params.idPayment - }), - pickPsp: () => - navigateToPaymentPickPspScreen({ - rptId: props.route.params.rptId, - initialAmount: props.route.params.initialAmount, - verifica: props.route.params.verifica, - idPayment: props.route.params.idPayment, - psps: props.route.params.psps, - wallet: props.route.params.wallet, - chooseToChange: true - }), onCancel: () => { ActionSheet.show( { @@ -640,7 +648,12 @@ const mapDispatchToProps = (dispatch: Dispatch, props: OwnProps) => { }; }; +const ConfirmPaymentMethodScreenWithContext = (props: Props) => { + const { ...modalContext } = React.useContext(LightModalContext); + return ; +}; + export default connect( mapStateToProps, mapDispatchToProps -)(withLightModalContext(withLoadingSpinner(ConfirmPaymentMethodScreen))); +)(ConfirmPaymentMethodScreenWithContext); diff --git a/ts/screens/wallet/payment/ManualDataInsertionScreen.tsx b/ts/screens/wallet/payment/ManualDataInsertionScreen.tsx index 4fbf8e07b65..0b8be363e8b 100644 --- a/ts/screens/wallet/payment/ManualDataInsertionScreen.tsx +++ b/ts/screens/wallet/payment/ManualDataInsertionScreen.tsx @@ -18,18 +18,17 @@ import { IOColors, VSpacer } from "@pagopa/io-app-design-system"; import { H1 } from "../../../components/core/typography/H1"; import { Link } from "../../../components/core/typography/Link"; import { IOStyles } from "../../../components/core/variables/IOStyles"; - -import { withLightModalContext } from "../../../components/helpers/withLightModalContext"; import { LabelledItem } from "../../../components/LabelledItem"; import BaseScreenComponent, { ContextualHelpPropsMarkdown } from "../../../components/screens/BaseScreenComponent"; import FooterWithButtons from "../../../components/ui/FooterWithButtons"; -import { LightModalContextInterface } from "../../../components/ui/LightModal"; +import { + LightModalContext, + LightModalContextInterface +} from "../../../components/ui/LightModal"; import { cancelButtonProps } from "../../../components/buttons/ButtonConfigurations"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../navigation/params/WalletParamsList"; import { navigateBack, navigateToPaymentTransactionSummaryScreen, @@ -48,15 +47,10 @@ export type ManualDataInsertionScreenNavigationParams = { isInvalidAmount?: boolean; }; -type OwnProps = IOStackNavigationRouteProps< - WalletParamsList, - "PAYMENT_MANUAL_DATA_INSERTION" ->; +type Props = ReturnType & + ReturnType; -type Props = OwnProps & - ReturnType & - ReturnType & - LightModalContextInterface; +type ManualDataInsertionScreenProps = Props & LightModalContextInterface; type State = Readonly<{ paymentNoticeNumber: O.Option< @@ -93,8 +87,11 @@ const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { * - integrate contextual help to obtain details on the data to insert for manually identifying the transaction * https://www.pivotaltracker.com/n/projects/2048617/stories/157874540 */ -class ManualDataInsertionScreen extends React.Component { - constructor(props: Props) { +class ManualDataInsertionScreen extends React.Component< + ManualDataInsertionScreenProps, + State +> { + constructor(props: ManualDataInsertionScreenProps) { super(props); this.state = { paymentNoticeNumber: O.none, @@ -317,7 +314,12 @@ const mapStateToProps = (state: GlobalState) => ({ hasMethodsCanPay: withPaymentFeatureSelector(state).length > 0 }); +const ManualDataInsertionScreenFC = (props: Props) => { + const { ...modalContext } = React.useContext(LightModalContext); + return ; +}; + export default connect( mapStateToProps, mapDispatchToProps -)(withLightModalContext(ManualDataInsertionScreen)); +)(ManualDataInsertionScreenFC); diff --git a/ts/screens/wallet/payment/PaymentOutcomeCodeMessage.tsx b/ts/screens/wallet/payment/PaymentOutcomeCodeMessage.tsx index 3cf68bc7b43..6eaf2d376f0 100644 --- a/ts/screens/wallet/payment/PaymentOutcomeCodeMessage.tsx +++ b/ts/screens/wallet/payment/PaymentOutcomeCodeMessage.tsx @@ -6,6 +6,7 @@ import { View } from "react-native"; import { widthPercentageToDP } from "react-native-responsive-screen"; import { connect } from "react-redux"; import { Dispatch } from "redux"; +import { Route, useRoute } from "@react-navigation/native"; import { ImportoEuroCents } from "../../../../definitions/backend/ImportoEuroCents"; import paymentCompleted from "../../../../img/pictograms/payment-completed.png"; import { cancelButtonProps } from "../../../components/buttons/ButtonConfigurations"; @@ -17,8 +18,6 @@ import OutcomeCodeMessageComponent from "../../../components/wallet/OutcomeCodeM import { WalletPaymentFeebackBanner } from "../../../features/walletV3/payment/components/WalletPaymentFeedbackBanner"; import { useHardwareBackButton } from "../../../hooks/useHardwareBackButton"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../navigation/params/WalletParamsList"; import { navigateToWalletHome } from "../../../store/actions/navigation"; import { backToEntrypointPayment } from "../../../store/actions/wallet/payment"; import { profileEmailSelector } from "../../../store/reducers/profile"; @@ -35,14 +34,8 @@ export type PaymentOutcomeCodeMessageNavigationParams = Readonly<{ fee: ImportoEuroCents; }>; -type OwnProps = IOStackNavigationRouteProps< - WalletParamsList, - "PAYMENT_OUTCOMECODE_MESSAGE" ->; - type Props = ReturnType & - ReturnType & - OwnProps; + ReturnType; const SuccessBody = ({ emailAddress }: { emailAddress: string }) => ( @@ -101,6 +94,13 @@ const successFooter = (onClose: () => void) => ( * If the outcome code is of type success the render a single buttons footer that allow the user to go to the wallet home. */ const PaymentOutcomeCodeMessage: React.FC = (props: Props) => { + const { fee } = + useRoute< + Route< + "PAYMENT_OUTCOMECODE_MESSAGE", + PaymentOutcomeCodeMessageNavigationParams + > + >().params; const outcomeCode = O.toNullable(props.outcomeCode.outcomeCode); const learnMoreLink = "https://io.italia.it/faq/#pagamenti"; const onLearnMore = () => openWebUrl(learnMoreLink); @@ -114,7 +114,7 @@ const PaymentOutcomeCodeMessage: React.FC = (props: Props) => { if (pot.isSome(props.verifica)) { const totalAmount = (props.verifica.value.importoSingoloVersamento as number) + - (props.route.params.fee as number); + (fee as number); return successComponent( O.getOrElse(() => "")(props.profileEmail), diff --git a/ts/screens/wallet/payment/PickPaymentMethodScreen.tsx b/ts/screens/wallet/payment/PickPaymentMethodScreen.tsx index 03e68268c12..ab3436b6a34 100644 --- a/ts/screens/wallet/payment/PickPaymentMethodScreen.tsx +++ b/ts/screens/wallet/payment/PickPaymentMethodScreen.tsx @@ -10,6 +10,7 @@ import { FlatList, SafeAreaView } from "react-native"; import { ScrollView } from "react-native-gesture-handler"; import { connect } from "react-redux"; import { VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useNavigation, useRoute } from "@react-navigation/native"; import { PaymentRequestsGetResponse } from "../../../../definitions/backend/PaymentRequestsGetResponse"; import { withLoadingSpinner } from "../../../components/helpers/withLoadingSpinner"; import BaseScreenComponent, { @@ -32,7 +33,10 @@ import { } from "../../../common/model/RemoteValue"; import PaymentStatusSwitch from "../../../features/wallet/component/features/PaymentStatusSwitch"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { + IOStackNavigationProp, + IOStackNavigationRouteProps +} from "../../../navigation/params/AppParamsList"; import { WalletParamsList } from "../../../navigation/params/WalletParamsList"; import { navigateBack, @@ -282,7 +286,25 @@ const mapDispatchToProps = (dispatch: Dispatch, props: OwnProps) => ({ }) }); -export default connect( +const ConnectedPickPaymentMethodScreen = connect( mapStateToProps, mapDispatchToProps )(withLoadingSpinner(PickPaymentMethodScreen)); + +const PickPaymentMethodScreenFC = () => { + const navigation = + useNavigation< + IOStackNavigationProp + >(); + const route = + useRoute< + Route< + "PAYMENT_PICK_PAYMENT_METHOD", + PickPaymentMethodScreenNavigationParams + > + >(); + return ( + + ); +}; +export default PickPaymentMethodScreenFC; diff --git a/ts/screens/wallet/payment/PickPspScreen.tsx b/ts/screens/wallet/payment/PickPspScreen.tsx index 77554577f80..edfd5344335 100644 --- a/ts/screens/wallet/payment/PickPspScreen.tsx +++ b/ts/screens/wallet/payment/PickPspScreen.tsx @@ -3,21 +3,23 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import * as React from "react"; import { View, FlatList, SafeAreaView, StyleSheet } from "react-native"; import { connect } from "react-redux"; - import { VSpacer } from "@pagopa/io-app-design-system"; +import { Route, useNavigation, useRoute } from "@react-navigation/native"; import { PaymentRequestsGetResponse } from "../../../../definitions/backend/PaymentRequestsGetResponse"; import { PspData } from "../../../../definitions/pagopa/PspData"; import { H1 } from "../../../components/core/typography/H1"; import { H4 } from "../../../components/core/typography/H4"; import { H5 } from "../../../components/core/typography/H5"; import { IOStyles } from "../../../components/core/variables/IOStyles"; -import { withLightModalContext } from "../../../components/helpers/withLightModalContext"; import ItemSeparatorComponent from "../../../components/ItemSeparatorComponent"; import BaseScreenComponent, { ContextualHelpPropsMarkdown } from "../../../components/screens/BaseScreenComponent"; import FooterWithButtons from "../../../components/ui/FooterWithButtons"; -import { LightModalContextInterface } from "../../../components/ui/LightModal"; +import { + LightModalContext, + LightModalContextInterface +} from "../../../components/ui/LightModal"; import { PspComponent } from "../../../components/wallet/payment/PspComponent"; import { cancelButtonProps } from "../../../components/buttons/ButtonConfigurations"; import { LoadingErrorComponent } from "../../../components/LoadingErrorComponent"; @@ -27,7 +29,10 @@ import { isLoading } from "../../../common/model/RemoteValue"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { + IOStackNavigationProp, + IOStackNavigationRouteProps +} from "../../../navigation/params/AppParamsList"; import { WalletParamsList } from "../../../navigation/params/WalletParamsList"; import { navigateBack } from "../../../store/actions/navigation"; import { Dispatch } from "../../../store/actions/types"; @@ -56,9 +61,9 @@ type OwnProps = IOStackNavigationRouteProps< >; type Props = ReturnType & - ReturnType & - LightModalContextInterface & - OwnProps; + ReturnType; + +type PickPspScreenProps = LightModalContextInterface & Props & OwnProps; const styles = StyleSheet.create({ header: { @@ -77,7 +82,7 @@ const contextualHelpMarkdown: ContextualHelpPropsMarkdown = { /** * Select a PSP to be used for a the current selected wallet */ -class PickPspScreen extends React.Component { +class PickPspScreen extends React.Component { public componentDidMount() { // load all psp in order to offer to the user the complete psps list const idWallet = this.props.route.params.wallet.idWallet; @@ -201,7 +206,26 @@ const mapDispatchToProps = (dispatch: Dispatch, props: OwnProps) => ({ ) }); -export default connect( +const ConnectedPickPspScreen = connect( mapStateToProps, mapDispatchToProps -)(withLightModalContext(PickPspScreen)); +)(PickPspScreen); + +const PickPspScreenFC = () => { + const { ...modalContext } = React.useContext(LightModalContext); + const navigation = + useNavigation< + IOStackNavigationProp + >(); + const route = + useRoute>(); + return ( + + ); +}; + +export default PickPspScreenFC; diff --git a/ts/screens/wallet/payment/TransactionErrorScreen.tsx b/ts/screens/wallet/payment/TransactionErrorScreen.tsx index 78048ae8ef0..51cfc4d1730 100644 --- a/ts/screens/wallet/payment/TransactionErrorScreen.tsx +++ b/ts/screens/wallet/payment/TransactionErrorScreen.tsx @@ -12,6 +12,7 @@ import { ComponentProps } from "react"; import { View, SafeAreaView } from "react-native"; import { connect } from "react-redux"; import { VSpacer, IOPictograms } from "@pagopa/io-app-design-system"; +import { Route, useRoute } from "@react-navigation/native"; import { Detail_v2Enum } from "../../../../definitions/backend/PaymentProblemJson"; import { ToolEnum } from "../../../../definitions/content/AssistanceToolConfig"; import { ZendeskCategory } from "../../../../definitions/content/ZendeskCategory"; @@ -30,8 +31,6 @@ import { } from "../../../features/zendesk/store/actions"; import { useHardwareBackButton } from "../../../hooks/useHardwareBackButton"; import I18n from "../../../i18n"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { WalletParamsList } from "../../../navigation/params/WalletParamsList"; import { navigateToPaymentManualDataInsertion } from "../../../store/actions/navigation"; import { Dispatch } from "../../../store/actions/types"; import { @@ -80,13 +79,7 @@ export type TransactionErrorScreenNavigationParams = { onCancel: () => void; }; -type OwnProps = IOStackNavigationRouteProps< - WalletParamsList, - "PAYMENT_TRANSACTION_ERROR" ->; - -type Props = OwnProps & - ReturnType & +type Props = ReturnType & ReturnType; const imageTimeout: IOPictograms = "inProgress"; @@ -357,9 +350,11 @@ export const errorTransactionUIElements = ( }; const TransactionErrorScreen = (props: Props) => { - const rptId = props.route.params.rptId; - const error = props.route.params.error; - const onCancel = props.route.params.onCancel; + const { rptId, error, onCancel } = + useRoute< + Route<"PAYMENT_TRANSACTION_ERROR", TransactionErrorScreenNavigationParams> + >().params; + const { paymentsHistory } = props; const codiceAvviso = getCodiceAvviso(rptId); diff --git a/ts/store/actions/navigation.ts b/ts/store/actions/navigation.ts index fde450c7bb1..3eba3b61728 100644 --- a/ts/store/actions/navigation.ts +++ b/ts/store/actions/navigation.ts @@ -111,28 +111,6 @@ export const navigateToServicesPreferenceModeSelectionScreen = ( }) ); -/** - * Email - */ - -/** - * @deprecated - */ -export const navigateToEmailReadScreen = () => { - NavigationService.dispatchNavigationAction( - CommonActions.navigate(ROUTES.READ_EMAIL_SCREEN) - ); -}; - -/** - * @deprecated - */ -export const navigateToEmailInsertScreen = () => { - NavigationService.dispatchNavigationAction( - CommonActions.navigate(ROUTES.INSERT_EMAIL_SCREEN) - ); -}; - /** * Service */ diff --git a/yarn.lock b/yarn.lock index 063bfb61df9..febf55c249e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,14 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@apidevtools/json-schema-ref-parser@^9.0.6": version "9.0.9" resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" @@ -84,6 +92,14 @@ dependencies: "@babel/highlight" "^7.18.6" +"@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" @@ -104,6 +120,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + "@babel/core@7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" @@ -190,7 +211,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/core@^7.14.0", "@babel/core@^7.15.0": +"@babel/core@^7.14.0": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.9.tgz#6bae81a06d95f4d0dec5bb9d74bbc1f58babdcfe" integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw== @@ -211,6 +232,27 @@ json5 "^2.2.1" semver "^6.3.0" +"@babel/core@^7.18.8", "@babel/core@^7.20.0": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/core@^7.4.5": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" @@ -286,6 +328,16 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -373,6 +425,17 @@ lru-cache "^5.1.1" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" @@ -468,6 +531,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "@babel/helper-explode-assignable-expression@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" @@ -527,6 +595,14 @@ "@babel/template" "^7.18.10" "@babel/types" "^7.19.0" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -576,6 +652,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" @@ -639,6 +722,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + "@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" @@ -709,6 +799,17 @@ "@babel/traverse" "^7.20.10" "@babel/types" "^7.20.7" +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" @@ -757,6 +858,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== +"@babel/helper-plugin-utils@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + "@babel/helper-regex@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" @@ -870,6 +976,13 @@ dependencies: "@babel/types" "^7.20.2" +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" @@ -926,11 +1039,23 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" @@ -956,6 +1081,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" @@ -971,6 +1101,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + "@babel/helper-wrap-function@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" @@ -1046,6 +1181,15 @@ "@babel/traverse" "^7.20.13" "@babel/types" "^7.20.7" +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -1082,6 +1226,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1", "@babel/parser@^7.7.0": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" @@ -1112,6 +1265,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== +"@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + "@babel/parser@^7.9.4": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" @@ -1365,6 +1523,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-flow@^7.18.0": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" + integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" @@ -2255,6 +2420,15 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.7.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" @@ -2333,6 +2507,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" + globals "^11.1.0" + "@babel/traverse@^7.7.4": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" @@ -2400,6 +2590,15 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2857,6 +3056,15 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -2871,6 +3079,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" @@ -2881,6 +3094,19 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" @@ -3445,55 +3671,65 @@ resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa" integrity sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ== -"@react-navigation/bottom-tabs@^5.11.15": - version "5.11.15" - resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-5.11.15.tgz#f973625cc32d9c5a4067851f084cb11ccd68fe79" - integrity sha512-TBY419W6aN/HZg98xbVp5Bx1HEF5sXuHR5f55W6KMI4k2AvxlwelKD1wbfvEcX2iuQT0YUiiXsACRFUSECYhkw== +"@react-navigation/bottom-tabs@6.5.11": + version "6.5.11" + resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.11.tgz#b6e67a3aa19e60ed9c1139fa0253586c479832d5" + integrity sha512-CBN/NOdxnMvmjw+AJQI1kltOYaClTZmGec5pQ3ZNTPX86ytbIOylDIITKMfTgHZcIEFQDymx1SHeS++PIL3Szw== dependencies: - color "^3.1.3" - react-native-iphone-x-helper "^1.3.0" + "@react-navigation/elements" "^1.3.21" + color "^4.2.3" + warn-once "^0.1.0" -"@react-navigation/core@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-5.16.1.tgz#e0d308bd9bbd930114ce55c4151806b6d7907f69" - integrity sha512-3AToC7vPNeSNcHFLd1h71L6u34hfXoRAS1CxF9Fc4uC8uOrVqcNvphpeFbE0O9Bw6Zpl0BnMFl7E5gaL3KGzNA== +"@react-navigation/core@^6.4.10": + version "6.4.10" + resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.10.tgz#0c52621968b35e3a75e189e823d3b9e3bad77aff" + integrity sha512-oYhqxETRHNHKsipm/BtGL0LI43Hs2VSFoWMbBdHK9OqgQPjTVUitslgLcPpo4zApCcmBWoOLX2qPxhsBda644A== dependencies: - "@react-navigation/routers" "^5.7.4" + "@react-navigation/routers" "^6.1.9" escape-string-regexp "^4.0.0" - nanoid "^3.1.15" - query-string "^6.13.6" + nanoid "^3.1.23" + query-string "^7.1.3" react-is "^16.13.0" + use-latest-callback "^0.1.7" -"@react-navigation/material-top-tabs@^5.x": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@react-navigation/material-top-tabs/-/material-top-tabs-5.3.19.tgz#64f3a933f5d7e86e99f3d57d9f0c1e833ffa7e4f" - integrity sha512-I7bEF99THxxcY7kCUZ5pPmwXr6kgo6L2sg3P1YJo+CcBWSGvGiHyNbZXNs15HuKRuFvEuueChNV9n8QuKBWbDA== +"@react-navigation/elements@^1.3.21": + version "1.3.21" + resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.21.tgz#debac6becc6b6692da09ec30e705e476a780dfe1" + integrity sha512-eyS2C6McNR8ihUoYfc166O1D8VYVh9KIl0UQPI8/ZJVsStlfSTgeEEh+WXge6+7SFPnZ4ewzEJdSAHH+jzcEfg== + +"@react-navigation/material-top-tabs@6.6.5": + version "6.6.5" + resolved "https://registry.yarnpkg.com/@react-navigation/material-top-tabs/-/material-top-tabs-6.6.5.tgz#5cfc33e0d02f2dcd1a0654284704f4eef1d16697" + integrity sha512-ovKc+ltWYJwu3ju5sw1txBTMemlRM85/JceSrkqU++QnL9l0TAPiPxDlO+wJddR1iwi+P6zj5/+QkXR5Ku+trw== dependencies: - color "^3.1.3" + color "^4.2.3" + warn-once "^0.1.0" -"@react-navigation/native@^5.9.8": - version "5.9.8" - resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-5.9.8.tgz#ac76ee6390ea7ce807486ca5c38d903e23433a97" - integrity sha512-DNbcDHXQPSFDLn51kkVVJjT3V7jJy2GztNYZe/2bEg29mi5QEcHHcpifjMCtyFKntAOWzKlG88UicIQ17UEghg== +"@react-navigation/native@6.1.9": + version "6.1.9" + resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.9.tgz#8ef87095cd9c2ed094308c726157c7f6fc28796e" + integrity sha512-AMuJDpwXE7UlfyhIXaUCCynXmv69Kb8NzKgKJO7v0k0L+u6xUTbt6xvshmJ79vsvaFyaEH9Jg5FMzek5/S5qNw== dependencies: - "@react-navigation/core" "^5.16.1" + "@react-navigation/core" "^6.4.10" escape-string-regexp "^4.0.0" - nanoid "^3.1.15" + fast-deep-equal "^3.1.3" + nanoid "^3.1.23" -"@react-navigation/routers@^5.7.4": - version "5.7.4" - resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-5.7.4.tgz#8b5460e841a0c64f6c9a5fbc2a1eb832432d4fb0" - integrity sha512-0N202XAqsU/FlE53Nmh6GHyMtGm7g6TeC93mrFAFJOqGRKznT0/ail+cYlU6tNcPA9AHzZu1Modw1eoDINSliQ== +"@react-navigation/routers@^6.1.9": + version "6.1.9" + resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-6.1.9.tgz#73f5481a15a38e36592a0afa13c3c064b9f90bed" + integrity sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA== dependencies: - nanoid "^3.1.15" + nanoid "^3.1.23" -"@react-navigation/stack@^5.14.9": - version "5.14.9" - resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-5.14.9.tgz#49c7b9316e6fb456e9766c901e0d607862f0ea7d" - integrity sha512-DuvrT9P+Tz8ezZLQYxORZqOGqO+vEufaxlW1hSLw1knLD4jNxkz8TJDXtfKwaz//9gb43UhTNccNM02vm7iPqQ== +"@react-navigation/stack@6.3.20": + version "6.3.20" + resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.3.20.tgz#8eec944888f317bb1ba1ff30e7f513806bea16c2" + integrity sha512-vE6mgZzOgoa5Uy7ayT97Cj+ZIK7DK+JBYVuKUViILlWZy6IWK7HFDuqoChSbZ1ajTIfAxj/acVGg1jkbAKsToA== dependencies: - color "^3.1.3" - react-native-iphone-x-helper "^1.3.0" + "@react-navigation/elements" "^1.3.21" + color "^4.2.3" + warn-once "^0.1.0" "@redux-saga/core@^1.1.3": version "1.1.3" @@ -5751,6 +5987,16 @@ browserslist@^4.21.3: node-releases "^2.0.8" update-browserslist-db "^1.0.10" +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -5986,6 +6232,11 @@ caniuse-lite@^1.0.30001449: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz#022225b91200589196b814b51b1bbe45144cf74f" integrity sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew== +caniuse-lite@^1.0.30001565: + version "1.0.30001579" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz#45c065216110f46d6274311a4b3fcf6278e0852a" + integrity sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -6282,7 +6533,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -6314,10 +6565,10 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-string@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" - integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" @@ -6330,13 +6581,13 @@ color@^3.0.0, color@~3.1.2: color-convert "^1.9.1" color-string "^1.5.2" -color@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" + color-convert "^2.0.1" + color-string "^1.9.0" colorette@^1.0.7: version "1.3.0" @@ -6709,6 +6960,11 @@ convert-source-map@^1.7.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -7130,7 +7386,7 @@ decimal.js@^10.2.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== -decode-uri-component@^0.2.0: +decode-uri-component@^0.2.0, decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== @@ -7548,6 +7804,11 @@ electron-to-chromium@^1.4.284: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz#0e039de59135f44ab9a8ec9025e53a9135eba11f" integrity sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ== +electron-to-chromium@^1.4.601: + version "1.4.639" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz#c6f9cc685f9efb2980d2cfc95a27f8142c9adf28" + integrity sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg== + electron-to-chromium@^1.4.84: version "1.4.107" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz#564257014ab14033b4403a309c813123c58a3fb9" @@ -10931,7 +11192,7 @@ json5@^2.1.0, json5@^2.1.2: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== -json5@^2.2.1, json5@^2.2.2: +json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -11869,7 +12130,7 @@ metro-react-native-babel-preset@0.58.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-preset@0.70.3, metro-react-native-babel-preset@^0.70.3: +metro-react-native-babel-preset@0.70.3: version "0.70.3" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz#1c77ec4544ecd5fb6c803e70b21284d7483e4842" integrity sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg== @@ -11914,6 +12175,50 @@ metro-react-native-babel-preset@0.70.3, metro-react-native-babel-preset@^0.70.3: "@babel/template" "^7.0.0" react-refresh "^0.4.0" +metro-react-native-babel-preset@^0.73.0: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.10.tgz#304b24bb391537d2c987732cc0a9774be227d3f6" + integrity sha512-1/dnH4EHwFb2RKEKx34vVDpUS3urt2WEeR8FYim+ogqALg4sTpG7yeQPxWpbgKATezt4rNfqAANpIyH19MS4BQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + metro-react-native-babel-transformer@0.70.3, metro-react-native-babel-transformer@^0.70.1: version "0.70.3" resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.3.tgz#195597c32488f820aa9e441bbca7c04fe7de7a2d" @@ -12576,11 +12881,6 @@ nan@^2.14.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== -nanoid@^3.1.15: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - nanoid@^3.1.20, nanoid@^3.1.23: version "3.2.0" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" @@ -12752,6 +13052,11 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + node-releases@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96" @@ -13932,16 +14237,6 @@ query-string@6.10.1: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -query-string@^6.13.6: - version "6.14.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" - integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== - dependencies: - decode-uri-component "^0.2.0" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - query-string@^6.8.2: version "6.13.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.1.tgz#d913ccfce3b4b3a713989fe6d39466d92e71ccad" @@ -13951,6 +14246,16 @@ query-string@^6.8.2: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +query-string@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" + integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== + dependencies: + decode-uri-component "^0.2.2" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -14251,11 +14556,6 @@ react-native-iphone-x-helper@^1.0.3: resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772" integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ== -react-native-iphone-x-helper@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010" - integrity sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg== - react-native-keyboard-aware-scroll-view@^0.9.5: version "0.9.5" resolved "https://registry.yarnpkg.com/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.5.tgz#e2e9665d320c188e6b1f22f151b94eb358bf9b71" @@ -14294,6 +14594,11 @@ react-native-modal-datetime-picker@^10.2.0: dependencies: prop-types "^15.7.2" +react-native-pager-view@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-6.2.3.tgz#698f6387fdf06cecc3d8d4792604419cb89cb775" + integrity sha512-dqVpXWFtPNfD3D2QQQr8BP+ullS5MhjRJuF8Z/qml4QTILcrWaW8F5iAxKkQR3Jl0ikcEryG/+SQlNcwlo0Ggg== + react-native-pdf-thumbnail@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/react-native-pdf-thumbnail/-/react-native-pdf-thumbnail-1.2.1.tgz#edf4e13a43098a0004503b2e617f0866f6d4d5a4" @@ -14416,10 +14721,12 @@ react-native-svg@^12.3.0: css-select "^4.2.1" css-tree "^1.0.0-alpha.39" -react-native-tab-view@^2.x: - version "2.16.0" - resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-2.16.0.tgz#cae72c7084394bd328fac5fefb86cd966df37a86" - integrity sha512-ac2DmT7+l13wzIFqtbfXn4wwfgtPoKzWjjZyrK1t+T8sdemuUvD4zIt+UImg03fu3s3VD8Wh/fBrIdcqQyZJWg== +react-native-tab-view@3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-3.5.2.tgz#2789b8af6148b16835869566bf13dc3b0e6c1b46" + integrity sha512-nE5WqjbeEPsWQx4mtz81QGVvgHRhujTNIIZiMCx3Bj6CBFDafbk7XZp9ocmtzXUQaZ4bhtVS43R4FIiR4LboJw== + dependencies: + use-latest-callback "^0.1.5" react-native-vector-icons@^7.0.0: version "7.0.0" @@ -15406,6 +15713,11 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" @@ -16961,6 +17273,14 @@ update-browserslist-db@^1.0.10: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-browserslist-db@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" @@ -16999,6 +17319,11 @@ use-isomorphic-layout-effect@^1.0.0: resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== +use-latest-callback@^0.1.5, use-latest-callback@^0.1.7: + version "0.1.9" + resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.9.tgz#10191dc54257e65a8e52322127643a8940271e2a" + integrity sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw== + use-sync-external-store@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" @@ -17153,6 +17478,11 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +warn-once@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/warn-once/-/warn-once-0.1.1.tgz#952088f4fb56896e73fd4e6a3767272a3fccce43" + integrity sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q== + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" From 48dd0491530d93e669d861f03d8f3b7016f999f2 Mon Sep 17 00:00:00 2001 From: Andrea Piai Date: Tue, 6 Feb 2024 17:35:06 +0100 Subject: [PATCH 008/190] chore(release): 2.53.0-rc.1 --- CHANGELOG.md | 22 ++++++++++++++++++++++ android/app/build.gradle | 4 ++-- ios/ItaliaApp.xcodeproj/project.pbxproj | 4 ++-- ios/ItaliaApp/Info.plist | 2 +- ios/ItaliaAppTests/Info.plist | 2 +- package.json | 2 +- publiccode.yml | 4 ++-- 7 files changed, 31 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3ea94b888d..37c316a95e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,28 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.53.0-rc.1](https://github.com/pagopa/io-app/compare/2.53.0-rc.0...2.53.0-rc.1) (2024-02-06) + + +### Features + +* **Firma con IO:** [[SFEQS-2071](https://pagopa.atlassian.net/browse/SFEQS-2071)] Update `Firma con IO` with new DS components ([#5377](https://github.com/pagopa/io-app/issues/5377)) ([e34d79d](https://github.com/pagopa/io-app/commit/e34d79db5afdb45c5c91247c70afc54f911534aa)) +* [[IOCOM-867](https://pagopa.atlassian.net/browse/IOCOM-867)] Add service info in MessageDetailsScreen ([#5461](https://github.com/pagopa/io-app/issues/5461)) ([b2ea541](https://github.com/pagopa/io-app/commit/b2ea541609ff95afef6be15bb09cbffa682860fa)) + + +### Bug Fixes + +* [[IOBP-458](https://pagopa.atlassian.net/browse/IOBP-458),[IOBP-459](https://pagopa.atlassian.net/browse/IOBP-459)] Added accessibility label to the RNavScreenWithLargeHeader component ([#5467](https://github.com/pagopa/io-app/issues/5467)) ([a57d5e2](https://github.com/pagopa/io-app/commit/a57d5e2342be768bea5f3d5a92ae254dbd3e3725)) +* [[IOPID-1436](https://pagopa.atlassian.net/browse/IOPID-1436)], [[IOPID-1453](https://pagopa.atlassian.net/browse/IOPID-1453)] Delete helper button and header title on email validate screen and add logic to show support buttons in faq screen ([#5484](https://github.com/pagopa/io-app/issues/5484)) ([00743fd](https://github.com/pagopa/io-app/commit/00743fd5708ce4af62039ca7f6422bd22dbd747e)), closes [/github.com/pagopa/io-app/blob/6c076a1fee25c0a0853644d63aa894ff26854aa3/ts/sagas/startup.ts#L492](https://github.com/pagopa//github.com/pagopa/io-app/blob/6c076a1fee25c0a0853644d63aa894ff26854aa3/ts/sagas/startup.ts/issues/L492) +* align podfile.lock io-react-native-zendesk version ([#5483](https://github.com/pagopa/io-app/issues/5483)) ([6c076a1](https://github.com/pagopa/io-app/commit/6c076a1fee25c0a0853644d63aa894ff26854aa3)) + + +### Chores + +* **Cross:** [[IOAPPX-210](https://pagopa.atlassian.net/browse/IOAPPX-210)] Upgrade `react-navigation` to v6 ([#5415](https://github.com/pagopa/io-app/issues/5415)) ([f730e55](https://github.com/pagopa/io-app/commit/f730e55d493df6230319494fad43626bf2070a98)) +* [[IOBP-529](https://pagopa.atlassian.net/browse/IOBP-529)] Retrieve payments methods list from eCommerce client endpoint ([#5479](https://github.com/pagopa/io-app/issues/5479)) ([63fd1c2](https://github.com/pagopa/io-app/commit/63fd1c2a73bd3408996cd35d02e145e9e195579a)) +* 🇩🇪 language adjustments ([#5490](https://github.com/pagopa/io-app/issues/5490)) ([957e245](https://github.com/pagopa/io-app/commit/957e2455330caae4af29f3a33bda6b7360ffb1d2)) + ## [2.53.0-rc.0](https://github.com/pagopa/io-app/compare/2.52.0-rc.0...2.53.0-rc.0) (2024-02-02) diff --git a/android/app/build.gradle b/android/app/build.gradle index d8c0b7bb2ed..872b9229d23 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -144,8 +144,8 @@ android { applicationId "it.pagopa.io.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 100154794 - versionName "2.53.0.0" + versionCode 100154795 + versionName "2.53.0.1" buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() if (isNewArchitectureEnabled()) { // We configure the NDK build only if you decide to opt-in for the New Architecture. diff --git a/ios/ItaliaApp.xcodeproj/project.pbxproj b/ios/ItaliaApp.xcodeproj/project.pbxproj index 269f9dfaf28..03eddd4660e 100644 --- a/ios/ItaliaApp.xcodeproj/project.pbxproj +++ b/ios/ItaliaApp.xcodeproj/project.pbxproj @@ -795,7 +795,7 @@ CODE_SIGN_ENTITLEMENTS = ItaliaApp/ItaliaApp.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = M2X5YQ4BJ7; ENABLE_BITCODE = NO; @@ -836,7 +836,7 @@ CODE_SIGN_ENTITLEMENTS = ItaliaApp/ItaliaApp.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = M2X5YQ4BJ7; ENABLE_BITCODE = NO; diff --git a/ios/ItaliaApp/Info.plist b/ios/ItaliaApp/Info.plist index fb5ab19ec9d..687bf44ccdd 100644 --- a/ios/ItaliaApp/Info.plist +++ b/ios/ItaliaApp/Info.plist @@ -34,7 +34,7 @@ CFBundleVersion - 0 + 1 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/ItaliaAppTests/Info.plist b/ios/ItaliaAppTests/Info.plist index 23908b163b5..1b6212449aa 100644 --- a/ios/ItaliaAppTests/Info.plist +++ b/ios/ItaliaAppTests/Info.plist @@ -19,6 +19,6 @@ CFBundleSignature ???? CFBundleVersion - 0 + 1 \ No newline at end of file diff --git a/package.json b/package.json index 43e2db4bf3b..3ec01a9ec0d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "italia-app", - "version": "2.53.0-rc.0", + "version": "2.53.0-rc.1", "io_backend_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_backend.yaml", "io_public_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_public.yaml", "io_content_specs": "https://raw.githubusercontent.com/pagopa/io-services-metadata/1.0.30/definitions.yml", diff --git a/publiccode.yml b/publiccode.yml index 1ad58474092..31340c83688 100644 --- a/publiccode.yml +++ b/publiccode.yml @@ -5,11 +5,11 @@ publiccodeYmlVersion: '0.2' name: IO logo: "img/app-logo.svg" -releaseDate: '2024-02-02' +releaseDate: '2024-02-06' url: 'https://github.com/pagopa/io-app' applicationSuite: IO landingURL: 'https://io.italia.it/' -softwareVersion: 2.53.0-rc.0 +softwareVersion: 2.53.0-rc.1 developmentStatus: beta softwareType: standalone/mobile roadmap: 'https://io.italia.it/' From a49be25c9a5766e59067801830a89a2b1095d320 Mon Sep 17 00:00:00 2001 From: Alessandro Izzo Date: Wed, 7 Feb 2024 11:53:35 +0100 Subject: [PATCH 009/190] fix: [IOBP-460,IOBP-461,IOBP-463] A11y for list item info components into transaction detail screen (#5478) ## Short description This PR fixes the accessibility for the list item info components, removing the overwriting of the `accessibilityLabel`. ## List of changes proposed in this pull request - Removed the overwritten `accessibilityLabel` on the `ListItemInfo` components ## How to test - Enable the voiceover - Go to the wallet home page - Open the transactions list - Go into a transaction detail with the voiceover --- .../components/WalletTransactionInfoSection.tsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/ts/features/walletV3/transaction/components/WalletTransactionInfoSection.tsx b/ts/features/walletV3/transaction/components/WalletTransactionInfoSection.tsx index b437782e97a..4d24aa3628f 100644 --- a/ts/features/walletV3/transaction/components/WalletTransactionInfoSection.tsx +++ b/ts/features/walletV3/transaction/components/WalletTransactionInfoSection.tsx @@ -72,9 +72,6 @@ const WalletTransactionInfoSection = ({ {psp?.businessName && ( <> @@ -82,9 +79,6 @@ const WalletTransactionInfoSection = ({ )} @@ -93,9 +87,9 @@ const WalletTransactionInfoSection = ({ onPress={() => clipboardSetStringWithFeedback(transaction.id.toString()) } - accessibilityLabel={I18n.t( + accessibilityLabel={`${I18n.t( "transaction.details.info.transactionId" - )} + )}: ${transaction.id.toString()}`} label={I18n.t("transaction.details.info.transactionId")} value={transaction.id.toString()} /> From 7e7c2c9336ecd47eba953f9f0d2999063895496c Mon Sep 17 00:00:00 2001 From: Alessandro Izzo Date: Wed, 7 Feb 2024 16:06:49 +0100 Subject: [PATCH 010/190] chore: [IOBP-533] Navigation to payment confirm screen if method with only one PSP (#5487) ## Short description This PR implements the user experience enhancement while a specific payment method selected during the payment process has only one PSP, it automatically selects it and goes forward to the Payment confirmation screen without choosing the PSP since it's the only one in the list. ## List of changes proposed in this pull request - Moved the `calculateFee` API request into `WalletPaymentPickMethodScreen` while the user taps on the "Continue" button; - Added an additional standard redux action `walletPaymentResetPspList` to reset the PSP list when entering into the screen; ## How to test - Start a new payment flow into the playground; - Try to return only one PSP from the `bundle` list located on the `io-dev-app-server`, more specifically into the `src/features/wallet/payloads/transactions.ts` file - Then try to continue selecting a payment method, you should be able to go forward directly to the confirmation screen. ## Preview https://github.com/pagopa/io-app/assets/34343582/6f5e7610-0982-4305-87e3-cf9fe3e79129 --------- Co-authored-by: Martino Cesari Tomba <60693085+forrest57@users.noreply.github.com> Co-authored-by: Federico Mastrini --- .../handleWalletPaymentCalculateFees.test.ts | 45 ++++++++++++- .../handleWalletPaymentCalculateFees.ts | 13 +++- .../screens/WalletPaymentPickMethodScreen.tsx | 66 +++++++++++++++++-- .../screens/WalletPaymentPickPspScreen.tsx | 44 +------------ .../payment/store/actions/networking.ts | 13 +++- .../walletV3/payment/store/reducers/index.ts | 9 ++- 6 files changed, 136 insertions(+), 54 deletions(-) diff --git a/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentCalculateFees.test.ts b/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentCalculateFees.test.ts index 9488931478e..876597a9f4b 100644 --- a/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentCalculateFees.test.ts +++ b/ts/features/walletV3/payment/saga/networking/__tests__/handleWalletPaymentCalculateFees.test.ts @@ -11,6 +11,7 @@ import { handleWalletPaymentCalculateFees } from "../handleWalletPaymentCalculat import { CalculateFeeRequest } from "../../../../../../../definitions/pagopa/ecommerce/CalculateFeeRequest"; import { selectWalletPaymentSessionToken } from "../../../store/selectors"; import { preferredLanguageSelector } from "../../../../../../store/reducers/persistedPreferences"; +import { walletPaymentPickPsp } from "../../../store/actions/orchestration"; describe("Test handleWalletPaymentCalculateFees saga", () => { const calculateFeesPayload: CalculateFeeRequest & { @@ -23,12 +24,15 @@ describe("Test handleWalletPaymentCalculateFees saga", () => { it(`should put ${getType( walletPaymentCalculateFees.success - )} when calculateFees is 200`, () => { + )} when calculateFees is 200 and bundles are more than one`, () => { const mockCalculateFees = jest.fn(); const calculateFeesResponse: CalculateFeeResponse = { bundles: [ { idBundle: "idBundle" + }, + { + idBundle: "idBundle2" } ], paymentMethodDescription: "paymentMethodDescription", @@ -117,4 +121,43 @@ describe("Test handleWalletPaymentCalculateFees saga", () => { .next() .isDone(); }); + + it(`should put ${getType( + walletPaymentPickPsp + )} with first psp in the list when calculateFees is 200 and bundles is only one in list`, () => { + const mockCalculateFees = jest.fn(); + const calculateFeesResponse: CalculateFeeResponse = { + bundles: [ + { + idBundle: "idBundle" + } + ], + paymentMethodDescription: "paymentMethodDescription", + paymentMethodName: "paymentMethodName", + paymentMethodStatus: PaymentMethodStatusEnum.ENABLED + }; + + testSaga( + handleWalletPaymentCalculateFees, + mockCalculateFees, + walletPaymentCalculateFees.request(calculateFeesPayload) + ) + .next() + .select(preferredLanguageSelector) + .next("IT") + .select(selectWalletPaymentSessionToken) + .next(T_SESSION_TOKEN) + .call( + withRefreshApiCall, + mockCalculateFees(), + walletPaymentCalculateFees.request(calculateFeesPayload) + ) + .next(E.right({ status: 200, value: calculateFeesResponse })) + .next() + .put(walletPaymentPickPsp(calculateFeesResponse.bundles[0])) + .next() + .put(walletPaymentCalculateFees.success(calculateFeesResponse)) + .next() + .isDone(); + }); }); diff --git a/ts/features/walletV3/payment/saga/networking/handleWalletPaymentCalculateFees.ts b/ts/features/walletV3/payment/saga/networking/handleWalletPaymentCalculateFees.ts index dc6450a9d6d..da7e9a10a0b 100644 --- a/ts/features/walletV3/payment/saga/networking/handleWalletPaymentCalculateFees.ts +++ b/ts/features/walletV3/payment/saga/networking/handleWalletPaymentCalculateFees.ts @@ -71,9 +71,20 @@ export function* handleWalletPaymentCalculateFees( ); const chosenPsp = yield* select(walletPaymentPickedPspSelector); // If the sorted psp list has the first element marked as "onUs" and the user has not already chosen a psp, we pre-select the first element - if (bundlesSortedByDefault[0]?.onUs && O.isNone(chosenPsp)) { + if ( + (bundlesSortedByDefault[0]?.onUs && O.isNone(chosenPsp)) || + bundlesSortedByDefault.length === 1 + ) { yield* put(walletPaymentPickPsp(bundlesSortedByDefault[0])); } + if (bundlesSortedByDefault.length === 0) { + yield* put( + walletPaymentCalculateFees.failure({ + ...getGenericError(new Error(`Error: The bundles list is empty`)) + }) + ); + return; + } const sortedResponse: CalculateFeeResponse = { ...res.value, bundles: res.value.bundles diff --git a/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx b/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx index d939d5172de..8e4ec1cc8ed 100644 --- a/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx +++ b/ts/features/walletV3/payment/screens/WalletPaymentPickMethodScreen.tsx @@ -36,19 +36,24 @@ import { useWalletPaymentGoBackHandler } from "../hooks/useWalletPaymentGoBackHa import { useOnTransactionActivationEffect } from "../hooks/useOnTransactionActivationEffect"; import { WalletPaymentRoutes } from "../navigation/routes"; import { + walletPaymentCalculateFees, walletPaymentCreateTransaction, - walletPaymentGetUserWallets + walletPaymentGetUserWallets, + walletPaymentResetPspList } from "../store/actions/networking"; import { walletPaymentPickPaymentMethod } from "../store/actions/orchestration"; import { walletPaymentAllMethodsSelector, walletPaymentAmountSelector, walletPaymentDetailsSelector, + walletPaymentPickedPaymentMethodSelector, + walletPaymentPspListSelector, walletPaymentSavedMethodByIdSelector, walletPaymentTransactionSelector, walletPaymentUserWalletsSelector } from "../store/selectors"; import { WalletPaymentOutcomeEnum } from "../types/PaymentOutcomeEnum"; +import { Transfer } from "../../../../../definitions/pagopa/ecommerce/Transfer"; type SavedMethodState = { kind: "saved"; @@ -86,6 +91,10 @@ const WalletPaymentPickMethodScreen = () => { const paymentMethodsPot = useIOSelector(walletPaymentAllMethodsSelector); const userWalletsPots = useIOSelector(walletPaymentUserWalletsSelector); const transactionPot = useIOSelector(walletPaymentTransactionSelector); + const selectedWalletOption = useIOSelector( + walletPaymentPickedPaymentMethodSelector + ); + const pspListPot = useIOSelector(walletPaymentPspListSelector); // const getGenericMethodById = useIOSelector(walletPaymentGenericMethodByIdSelector); const [waitingTransactionActivation, setWaitingTransactionActivation] = @@ -95,24 +104,66 @@ const WalletPaymentPickMethodScreen = () => { // only when the transaction status becomes ACTIVATED. useOnTransactionActivationEffect( React.useCallback(() => { - navigation.navigate(WalletPaymentRoutes.WALLET_PAYMENT_MAIN, { - screen: WalletPaymentRoutes.WALLET_PAYMENT_PICK_PSP - }); + pipe( + sequenceT(O.Monad)( + pot.toOption(paymentAmountPot), + pot.toOption(transactionPot), + selectedWalletOption + ), + O.map(([paymentAmountInCents, transaction, selectedWallet]) => { + const transferList = transaction.payments.reduce( + (a, p) => [...a, ...(p.transferList ?? [])], + [] as ReadonlyArray + ); + const paymentToken = transaction.payments[0]?.paymentToken; + + dispatch( + walletPaymentCalculateFees.request({ + paymentToken, + paymentMethodId: selectedWallet.paymentMethodId, + walletId: selectedWallet.walletId, + paymentAmount: paymentAmountInCents, + transferList + }) + ); + }) + ); setWaitingTransactionActivation(false); - }, [navigation]) + }, [dispatch, paymentAmountPot, selectedWalletOption, transactionPot]) ); + React.useEffect(() => { + pipe( + pspListPot, + pot.toOption, + O.map(pspList => { + if (pspList.length > 1) { + navigation.navigate(WalletPaymentRoutes.WALLET_PAYMENT_MAIN, { + screen: WalletPaymentRoutes.WALLET_PAYMENT_PICK_PSP + }); + } else if (pspList.length >= 1) { + navigation.navigate(WalletPaymentRoutes.WALLET_PAYMENT_MAIN, { + screen: WalletPaymentRoutes.WALLET_PAYMENT_CONFIRM + }); + } + }) + ); + }, [navigation, pspListPot]); + const alertRef = React.useRef(null); const isLoading = pot.isLoading(paymentMethodsPot) || pot.isLoading(userWalletsPots); const isLoadingTransaction = - pot.isLoading(transactionPot) || waitingTransactionActivation; + pot.isLoading(transactionPot) || + waitingTransactionActivation || + pot.isLoading(pspListPot); const isError = pot.isError(transactionPot) || pot.isError(paymentMethodsPot) || - pot.isError(userWalletsPots); + pot.isError(userWalletsPots) || + pot.isError(pspListPot); const [shouldShowWarningBanner, setShouldShowWarningBanner] = React.useState(false); @@ -124,6 +175,7 @@ const WalletPaymentPickMethodScreen = () => { // currently we do not allow onboarding new methods in payment flow // dispatch(walletPaymentGetAllMethods.request()); dispatch(walletPaymentGetUserWallets.request()); + dispatch(walletPaymentResetPspList()); }, [dispatch]) ); diff --git a/ts/features/walletV3/payment/screens/WalletPaymentPickPspScreen.tsx b/ts/features/walletV3/payment/screens/WalletPaymentPickPspScreen.tsx index a6802e37265..e4ebb4e6c9a 100644 --- a/ts/features/walletV3/payment/screens/WalletPaymentPickPspScreen.tsx +++ b/ts/features/walletV3/payment/screens/WalletPaymentPickPspScreen.tsx @@ -8,13 +8,11 @@ import { VSpacer } from "@pagopa/io-app-design-system"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { useFocusEffect, useNavigation } from "@react-navigation/native"; -import { sequenceT } from "fp-ts/lib/Apply"; +import { useNavigation } from "@react-navigation/native"; import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import React from "react"; import { Bundle } from "../../../../../definitions/pagopa/ecommerce/Bundle"; -import { Transfer } from "../../../../../definitions/pagopa/ecommerce/Transfer"; import { useHeaderSecondLevel } from "../../../../hooks/useHeaderSecondLevel"; import I18n from "../../../../i18n"; import { @@ -28,33 +26,24 @@ import { getSortedPspList } from "../../common/utils"; import { WalletPspListSkeleton } from "../components/WalletPspListSkeleton"; import { useSortPspBottomSheet } from "../hooks/useSortPspBottomSheet"; import { WalletPaymentRoutes } from "../navigation/routes"; -import { walletPaymentCalculateFees } from "../store/actions/networking"; import { walletPaymentPickPsp, walletPaymentResetPickedPsp } from "../store/actions/orchestration"; import { - walletPaymentAmountSelector, - walletPaymentPickedPaymentMethodSelector, walletPaymentPickedPspSelector, - walletPaymentPspListSelector, - walletPaymentTransactionSelector + walletPaymentPspListSelector } from "../store/selectors"; import { WalletPaymentPspSortType } from "../types"; import { WalletPaymentOutcomeEnum } from "../types/PaymentOutcomeEnum"; const WalletPaymentPickPspScreen = () => { - const paymentAmountPot = useIOSelector(walletPaymentAmountSelector); - const selectedWalletOption = useIOSelector( - walletPaymentPickedPaymentMethodSelector - ); const dispatch = useIODispatch(); const navigation = useNavigation>(); const [showFeaturedPsp, setShowFeaturedPsp] = React.useState(true); const [sortType, setSortType] = React.useState("default"); - const transactionPot = useIOSelector(walletPaymentTransactionSelector); const pspListPot = useIOSelector(walletPaymentPspListSelector); const selectedPspOption = useIOSelector(walletPaymentPickedPspSelector); @@ -87,35 +76,6 @@ const WalletPaymentPickPspScreen = () => { supportRequest: true }); - useFocusEffect( - React.useCallback(() => { - pipe( - sequenceT(O.Monad)( - pot.toOption(paymentAmountPot), - pot.toOption(transactionPot), - selectedWalletOption - ), - O.map(([paymentAmountInCents, transaction, selectedWallet]) => { - const transferList = transaction.payments.reduce( - (a, p) => [...a, ...(p.transferList ?? [])], - [] as ReadonlyArray - ); - const paymentToken = transaction.payments[0]?.paymentToken; - - dispatch( - walletPaymentCalculateFees.request({ - paymentToken, - paymentMethodId: selectedWallet.paymentMethodId, - walletId: selectedWallet.walletId, - paymentAmount: paymentAmountInCents, - transferList - }) - ); - }) - ); - }, [dispatch, paymentAmountPot, selectedWalletOption, transactionPot]) - ); - React.useEffect( () => () => { dispatch(walletPaymentResetPickedPsp()); diff --git a/ts/features/walletV3/payment/store/actions/networking.ts b/ts/features/walletV3/payment/store/actions/networking.ts index adbcb57f453..c9fd9e58e4d 100644 --- a/ts/features/walletV3/payment/store/actions/networking.ts +++ b/ts/features/walletV3/payment/store/actions/networking.ts @@ -1,4 +1,8 @@ -import { ActionType, createAsyncAction } from "typesafe-actions"; +import { + ActionType, + createAsyncAction, + createStandardAction +} from "typesafe-actions"; import { AmountEuroCents } from "../../../../../../definitions/pagopa/ecommerce/AmountEuroCents"; import { CalculateFeeRequest } from "../../../../../../definitions/pagopa/ecommerce/CalculateFeeRequest"; import { CalculateFeeResponse } from "../../../../../../definitions/pagopa/ecommerce/CalculateFeeResponse"; @@ -90,6 +94,10 @@ export const walletPaymentAuthorization = createAsyncAction( undefined >(); +export const walletPaymentResetPspList = createStandardAction( + "WALLET_PAYMENT_RESET_PSP_LIST" +)(); + export type WalletPaymentNetworkingActions = | ActionType | ActionType @@ -99,4 +107,5 @@ export type WalletPaymentNetworkingActions = | ActionType | ActionType | ActionType - | ActionType; + | ActionType + | ActionType; diff --git a/ts/features/walletV3/payment/store/reducers/index.ts b/ts/features/walletV3/payment/store/reducers/index.ts index f69bcd7c5ce..11976ca858c 100644 --- a/ts/features/walletV3/payment/store/reducers/index.ts +++ b/ts/features/walletV3/payment/store/reducers/index.ts @@ -25,7 +25,8 @@ import { walletPaymentGetDetails, walletPaymentGetTransactionInfo, walletPaymentGetUserWallets, - walletPaymentNewSessionToken + walletPaymentNewSessionToken, + walletPaymentResetPspList } from "../actions/networking"; import { walletPaymentInitState, @@ -193,6 +194,12 @@ const reducer = ( chosenPsp: O.none }; + case getType(walletPaymentResetPspList): + return { + ...state, + pspList: pot.none + }; + // Transaction case getType(walletPaymentCreateTransaction.request): case getType(walletPaymentGetTransactionInfo.request): From f06e5921ca8652227b82da640a8140b29712331e Mon Sep 17 00:00:00 2001 From: Andrea Date: Wed, 7 Feb 2024 17:33:56 +0100 Subject: [PATCH 011/190] feat: [IOCOM-862,IOCOM-863] New DS on the message's attachments list (#5485) ## Short description This PR adds the attachment section to the message details, following the new DS styles and guidelines. ![Simulator Screenshot - iPhone 15 - 2024-02-06 at 15 00 03](https://github.com/pagopa/io-app/assets/5150343/8c30d138-ef5e-4d68-ac1a-91445f8cce12) ## List of changes proposed in this pull request - New message details screen with attachment section - Reference to the new ModuleAttachment (later to be replaced with the component in the DS package) - Proper selectors for extracting relevant data - Attachment download has been aligned with PN in order to download from the attachment list ## How to test Using the io-dev-api-server, check that attachments are shown, downloaded and cancelled properly --------- Co-authored-by: Alessandro Dell'Oste --- locales/en/index.yml | 2 + locales/it/index.yml | 2 + ts/features/design-system/core/DSModules.tsx | 235 +- ts/features/messages/__mocks__/attachment.ts | 29 +- .../LegacyMessageAttachmentPreview.tsx | 46 +- .../LegacyMessageAttachmentPreview.test.tsx} | 27 +- .../LegacyMessageAttachments.tsx | 50 +- .../LegacyModuleAttachment.tsx} | 18 +- .../MessageDetailsAttachmentItem.tsx | 39 + .../MessageDetailsAttachments.tsx | 41 + .../MessageDetail/ModuleAttachment.tsx | 254 ++ .../LegacyMessageAttachments.test.tsx | 33 +- .../MessageDetailsAttachmentItem.test.tsx | 119 + .../MessageDetailsAttachments.test.tsx | 63 + ...MessageDetailsAttachmentItem.test.tsx.snap | 2286 +++++++++++++++++ .../MessageDetailsAttachments.test.tsx.snap | 1246 +++++++++ .../components/MessageDetail/index.tsx | 24 +- ...ts => useLegacyAttachmentDownload.test.ts} | 42 +- .../messages/hooks/useAttachmentDownload.tsx | 265 +- .../hooks/useLegacyAttachmentDownload.tsx | 194 ++ .../messages/navigation/MessagesNavigator.tsx | 11 +- ts/features/messages/navigation/params.ts | 4 +- .../__test__/handleDownloadAttachment.test.ts | 13 +- .../saga/__test__/handleRequestInit.test.ts | 34 +- .../messages/saga/handleDownloadAttachment.ts | 40 +- .../messages/saga/handleRequestInit.ts | 9 +- .../screens/LegacyMessageAttachment.tsx | 4 +- ...reen.tsx => LegacyMessageDetailScreen.tsx} | 4 +- .../messages/screens/MessageAttachment.tsx | 23 +- .../messages/screens/MessageDetailsScreen.tsx | 44 + .../__tests__/MessageAttachment.test.tsx | 12 +- ts/features/messages/store/actions/index.ts | 42 +- .../messages/store/actions/navigation.ts | 4 +- .../reducers/__tests__/downloads.test.ts | 817 +++++- .../reducers/__tests__/thirdPartyById.test.ts | 85 +- .../reducers/__tests__/transformers.test.ts | 21 +- .../messages/store/reducers/downloads.ts | 142 +- .../messages/store/reducers/thirdPartyById.ts | 27 +- .../messages/store/reducers/transformers.ts | 51 +- .../__tests__/digitalInformationUnit.test.ts | 69 - .../messages/types/digitalInformationUnit.ts | 48 - ts/features/messages/types/index.ts | 34 - ts/features/pn/analytics/index.ts | 4 +- .../pn/components/LegacyMessageDetails.tsx | 16 +- .../components/MessageAttachments.tsx | 42 +- ts/features/pn/components/MessageDetails.tsx | 5 +- ts/features/pn/components/MessageF24.tsx | 19 +- .../__test__/LegacyMessageDetails.test.tsx | 27 +- .../__test__/MessageAttachments.test.tsx | 21 +- .../components/__test__/MessageF24.test.tsx | 23 +- ts/features/pn/hooks/useF24BottomSheet.tsx | 13 +- .../pn/screens/AttachmentPreviewScreen.tsx | 4 +- .../pn/screens/LegacyMessageDetailsScreen.tsx | 8 +- ts/features/pn/store/reducers/index.ts | 4 +- ts/features/pn/store/types/transformers.ts | 6 +- ts/features/pn/store/types/types.ts | 4 +- ts/features/pn/utils/index.ts | 4 +- ts/store/hooks.ts | 8 +- 58 files changed, 5946 insertions(+), 815 deletions(-) rename ts/features/messages/components/{__test__/MessageAttachmentPreview.test.tsx => MessageAttachment/__test__/LegacyMessageAttachmentPreview.test.tsx} (73%) rename ts/features/messages/components/{ => MessageDetail}/LegacyMessageAttachments.tsx (70%) rename ts/features/messages/components/{ModuleAttachment.tsx => MessageDetail/LegacyModuleAttachment.tsx} (92%) create mode 100644 ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx create mode 100644 ts/features/messages/components/MessageDetail/MessageDetailsAttachments.tsx create mode 100644 ts/features/messages/components/MessageDetail/ModuleAttachment.tsx rename ts/features/messages/components/{__test__ => MessageDetail/__tests__}/LegacyMessageAttachments.test.tsx (80%) create mode 100644 ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachmentItem.test.tsx create mode 100644 ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachments.test.tsx create mode 100644 ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachmentItem.test.tsx.snap create mode 100644 ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap rename ts/features/messages/hooks/__tests__/{useAttachmentDownload.test.ts => useLegacyAttachmentDownload.test.ts} (69%) create mode 100644 ts/features/messages/hooks/useLegacyAttachmentDownload.tsx rename ts/features/messages/screens/{MessageDetailScreen.tsx => LegacyMessageDetailScreen.tsx} (98%) create mode 100644 ts/features/messages/screens/MessageDetailsScreen.tsx delete mode 100644 ts/features/messages/types/__tests__/digitalInformationUnit.test.ts delete mode 100644 ts/features/messages/types/digitalInformationUnit.ts rename ts/features/{messages => pn}/components/MessageAttachments.tsx (51%) rename ts/features/{messages => pn}/components/__test__/MessageAttachments.test.tsx (87%) diff --git a/locales/en/index.yml b/locales/en/index.yml index feca83dc088..a777e18e806 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -2620,6 +2620,8 @@ bonus: conjunction: " and " features: messages: + attachmentDownloadFeedback: "Download in progress" + attachments: "Attachments" loading: title: "Loading message details" subtitle: "Please wait" diff --git a/locales/it/index.yml b/locales/it/index.yml index d55a2f36ae3..6735b1ab9e0 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -2620,6 +2620,8 @@ bonus: conjunction: ", " features: messages: + attachmentDownloadFeedback: "Download in corso" + attachments: "Allegati" loading: title: "Sto caricando i dettagli del messaggio" subtitle: "Attendi qualche secondo" diff --git a/ts/features/design-system/core/DSModules.tsx b/ts/features/design-system/core/DSModules.tsx index 8a2d0898d5c..51bea42bc7b 100644 --- a/ts/features/design-system/core/DSModules.tsx +++ b/ts/features/design-system/core/DSModules.tsx @@ -9,11 +9,14 @@ import { PaymentNoticeStatus, VSpacer } from "@pagopa/io-app-design-system"; -import { ModuleAttachment } from "../../messages/components/ModuleAttachment"; import { getBadgeTextByPaymentNoticeStatus } from "../../messages/utils/strings"; import { H2 } from "../../../components/core/typography/H2"; import { DSComponentViewerBox } from "../components/DSComponentViewerBox"; import { DesignSystemScreen } from "../components/DesignSystemScreen"; +import { LegacyModuleAttachment } from "../../messages/components/MessageDetail/LegacyModuleAttachment"; +import { useIOSelector } from "../../../store/hooks"; +import { isDesignSystemEnabledSelector } from "../../../store/reducers/persistedPreferences"; +import { ModuleAttachment } from "../../messages/components/MessageDetail/ModuleAttachment"; const onButtonPress = () => { Alert.alert("Alert", "Action triggered"); @@ -32,113 +35,161 @@ const noticeStatusArray: Array = [ "canceled" ]; -export const DSModules = () => ( - - {theme => ( - -

- ModuleAttachment -

- {renderModuleAttachment()} +export const DSModules = () => { + const isDesignSystemEnabled = useIOSelector(isDesignSystemEnabledSelector); + return ( + + {theme => ( + +

+ ModuleAttachment +

+ {renderModuleAttachment(isDesignSystemEnabled)} - + -

- ModulePaymentNotice -

- {renderModulePaymentNotice()} +

+ ModulePaymentNotice +

+ {renderModulePaymentNotice()} - + -

- ModuleCheckout -

- {renderModuleCheckout()} +

+ ModuleCheckout +

+ {renderModuleCheckout()} - + -

- ButtonExtendedOutline -

- {renderButtonExtendedOutline()} +

+ ButtonExtendedOutline +

+ {renderButtonExtendedOutline()} - + -

- ModuleIDP -

- {renderModuleIDP()} -
- )} -
-); +

+ ModuleIDP +

+ {renderModuleIDP()} +
+ )} +
+ ); +}; -const renderModuleAttachment = () => ( +const renderModuleAttachment = (isDesignSystemEnabled: boolean) => ( - + {isDesignSystemEnabled ? ( + + ) : ( + + )} - + {isDesignSystemEnabled ? ( + + ) : ( + + )} - + {isDesignSystemEnabled ? null : ( + + )} - + {isDesignSystemEnabled ? ( + + ) : ( + + )} - + {isDesignSystemEnabled ? ( + + ) : ( + + )} - + {isDesignSystemEnabled ? ( + + ) : ( + + )} ); diff --git a/ts/features/messages/__mocks__/attachment.ts b/ts/features/messages/__mocks__/attachment.ts index f4523587e7d..d9f86c81fcf 100644 --- a/ts/features/messages/__mocks__/attachment.ts +++ b/ts/features/messages/__mocks__/attachment.ts @@ -1,24 +1,19 @@ -import { Byte } from "../types/digitalInformationUnit"; -import { UIMessageId, UIAttachment, UIAttachmentId } from "../types"; +import { NonEmptyString } from "@pagopa/ts-commons/lib/strings"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; import { ATTACHMENT_CATEGORY } from "../types/attachmentCategory"; -import { message_1 } from "./message"; -export const mockPdfAttachment: UIAttachment = { - messageId: message_1.id as UIMessageId, - id: "1" as UIAttachmentId, - displayName: "invoice.pdf", - contentType: "application/pdf", - size: 1959520 as Byte, - resourceUrl: { href: "https://www.invoicepdf.com/invoice.pdf" }, +export const mockPdfAttachment: ThirdPartyAttachment = { + id: "1" as NonEmptyString, + name: "invoice.pdf" as NonEmptyString, + content_type: "application/pdf" as NonEmptyString, + url: "https://www.invoicepdf.com/invoice.pdf" as NonEmptyString, category: ATTACHMENT_CATEGORY.DOCUMENT }; -export const mockOtherAttachment: UIAttachment = { - messageId: message_1.id as UIMessageId, - id: "2" as UIAttachmentId, - displayName: "image.png", - contentType: "other", - size: 125952 as Byte, - resourceUrl: { href: "htts://www.randomImage.com/image.png" }, +export const mockOtherAttachment: ThirdPartyAttachment = { + id: "2" as NonEmptyString, + name: "image.png" as NonEmptyString, + content_type: "other" as NonEmptyString, + url: "htts://www.randomImage.com/image.png" as NonEmptyString, category: ATTACHMENT_CATEGORY.F24 }; diff --git a/ts/features/messages/components/MessageAttachment/LegacyMessageAttachmentPreview.tsx b/ts/features/messages/components/MessageAttachment/LegacyMessageAttachmentPreview.tsx index c20551a8d11..d87c67299bc 100644 --- a/ts/features/messages/components/MessageAttachment/LegacyMessageAttachmentPreview.tsx +++ b/ts/features/messages/components/MessageAttachment/LegacyMessageAttachmentPreview.tsx @@ -16,7 +16,7 @@ import { } from "../../store/actions"; import { useIODispatch, useIOSelector } from "../../../../store/hooks"; import { downloadPotForMessageAttachmentSelector } from "../../store/reducers/downloads"; -import { UIAttachment, UIMessageId } from "../../types"; +import { UIMessageId } from "../../types"; import variables from "../../../../theme/variables"; import { emptyContextualHelp } from "../../../../utils/emptyContextualHelp"; import { isIos } from "../../../../utils/platform"; @@ -24,11 +24,16 @@ import { isStrictNone } from "../../../../utils/pot"; import { share } from "../../../../utils/share"; import { showToast } from "../../../../utils/showToast"; import { confirmButtonProps } from "../../../../components/buttons/ButtonConfigurations"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; +import { + attachmentContentType, + attachmentDisplayName +} from "../../store/reducers/transformers"; import LegacyPdfViewer from "./LegacyPdfViewer"; type Props = { messageId: UIMessageId; - attachment: UIAttachment; + attachment: ThirdPartyAttachment; enableDownloadAttachment?: boolean; onLoadComplete?: () => void; onPDFError?: () => void; @@ -74,9 +79,14 @@ const renderError = (title: string, body: string) => ( ); const renderPDF = ( + name: string, + mimeType: string, downloadPath: string, isPDFError: boolean, - props: Omit, + props: Omit< + Props, + "enableDownloadAttachment" | "attachment" | "messageId" | "onPDFError" + >, onPDFLoadingError: () => void ) => ( <> @@ -93,7 +103,8 @@ const renderPDF = ( /> )} {renderFooter( - props.attachment, + name, + mimeType, downloadPath, props.onShare, props.onOpen, @@ -103,7 +114,8 @@ const renderPDF = ( ); const renderFooter = ( - attachment: UIAttachment, + name: string, + mimeType: string, downloadPath: string, onShare?: () => void, onOpen?: () => void, @@ -140,9 +152,9 @@ const renderFooter = ( onDownload?.(); ReactNativeBlobUtil.MediaCollection.copyToMediaStore( { - name: attachment.displayName, + name, parentFolder: "", - mimeType: attachment.contentType + mimeType }, "Download", downloadPath @@ -150,7 +162,7 @@ const renderFooter = ( .then(_ => { showToast( I18n.t("messagePDFPreview.savedAtLocation", { - name: attachment.displayName + name }), "success" ); @@ -165,7 +177,7 @@ const renderFooter = ( () => { onOpen?.(); ReactNativeBlobUtil.android - .actionViewIntent(downloadPath, attachment.contentType) + .actionViewIntent(downloadPath, mimeType) .catch(_ => { showToast(I18n.t("messagePDFPreview.errors.opening")); }); @@ -194,10 +206,7 @@ export const LegacyMessageAttachmentPreview = ({ const attachment = props.attachment; const attachmentId = attachment.id; const downloadPot = useIOSelector(state => - downloadPotForMessageAttachmentSelector(state, { - messageId, - id: attachmentId - }) + downloadPotForMessageAttachmentSelector(state, messageId, attachmentId) ); // This component handles the attachment blob download only if // it is a generic attachment (not a PN one, since that flow @@ -239,8 +248,9 @@ export const LegacyMessageAttachmentPreview = ({ if (shouldDownloadAttachment) { dispatch( downloadAttachment.request({ - ...attachment, - skipMixpanelTrackingOnFailure: true + attachment, + messageId, + skipMixpanelTrackingOnFailure: false }) ); } else if ( @@ -259,6 +269,7 @@ export const LegacyMessageAttachmentPreview = ({ downloadPot, dispatch, enableDownloadAttachment, + messageId, navigation, shouldDownloadAttachment ]); @@ -267,6 +278,9 @@ export const LegacyMessageAttachmentPreview = ({ const shouldDisplayPDFPreview = pot.isSome(downloadPot) && !pot.isError(downloadPot); + const name = attachmentDisplayName(attachment); + const mimeType = attachmentContentType(attachment); + return ( ; -jest.mock("../MessageAttachment/LegacyPdfViewer", () => () => mockPdfViewer); +jest.mock("../LegacyPdfViewer", () => () => mockPdfViewer); describe("MessageAttachmentPreview", () => { describe("when enableDownloadAttachment is false", () => { @@ -22,12 +23,12 @@ describe("MessageAttachmentPreview", () => { const { component } = renderComponent( { enableDownloadAttachment: false, - messageId: mockPdfAttachment.messageId, + messageId: messageId_1, attachment: mockPdfAttachment, onOpen: mockOpen }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: pot.some({ path: "path", attachment: mockPdfAttachment @@ -43,12 +44,12 @@ describe("MessageAttachmentPreview", () => { const { component } = renderComponent( { enableDownloadAttachment: false, - messageId: mockPdfAttachment.messageId, + messageId: messageId_1, attachment: mockPdfAttachment, onOpen: mockOpen }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: pot.some({ path: "path", attachment: mockPdfAttachment diff --git a/ts/features/messages/components/LegacyMessageAttachments.tsx b/ts/features/messages/components/MessageDetail/LegacyMessageAttachments.tsx similarity index 70% rename from ts/features/messages/components/LegacyMessageAttachments.tsx rename to ts/features/messages/components/MessageDetail/LegacyMessageAttachments.tsx index d1b108da65e..eed4699d859 100644 --- a/ts/features/messages/components/LegacyMessageAttachments.tsx +++ b/ts/features/messages/components/MessageDetail/LegacyMessageAttachments.tsx @@ -7,25 +7,31 @@ import { } from "react-native"; import { Divider, IOColors, Icon } from "@pagopa/io-app-design-system"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { H5 } from "../../../components/core/typography/H5"; -import I18n from "../../../i18n"; -import { UIAttachment } from "../types"; -import { ContentTypeValues } from "../types/contentType"; -import { formatByte } from "../types/digitalInformationUnit"; -import { useAttachmentDownload } from "../hooks/useAttachmentDownload"; +import { H5 } from "../../../../components/core/typography/H5"; +import I18n from "../../../../i18n"; +import { ContentTypeValues } from "../../types/contentType"; +import { useLegacyAttachmentDownload } from "../../hooks/useLegacyAttachmentDownload"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; +import { UIMessageId } from "../../types"; +import { + attachmentContentType, + attachmentDisplayName +} from "../../store/reducers/transformers"; type PartialProps = { disabled?: boolean; downloadAttachmentBeforePreview?: boolean; - openPreview: (attachment: UIAttachment) => void; + openPreview: (attachment: ThirdPartyAttachment) => void; }; -type MessageAttachmentProps = { - attachment: UIAttachment; +type LegacyMessageAttachmentProps = { + attachment: ThirdPartyAttachment; + messageId: UIMessageId; } & PartialProps; type LegacyMessageAttachmentsProps = { - attachments: ReadonlyArray; + attachments: ReadonlyArray; + messageId: UIMessageId; } & PartialProps; const styles = StyleSheet.create({ @@ -60,9 +66,7 @@ const styles = StyleSheet.create({ * @param props * @constructor */ -const AttachmentIcon = (props: { - contentType: UIAttachment["contentType"]; -}) => { +const LegacyAttachmentIcon = (props: { contentType: string }) => { switch (props.contentType) { case ContentTypeValues.applicationPdf: return ; @@ -77,12 +81,15 @@ const AttachmentIcon = (props: { * @param props * @constructor */ -const AttachmentItem = (props: MessageAttachmentProps) => { - const { downloadPot, onAttachmentSelect } = useAttachmentDownload( +const LegacyAttachmentItem = (props: LegacyMessageAttachmentProps) => { + const { downloadPot, onAttachmentSelect } = useLegacyAttachmentDownload( props.attachment, + props.messageId, props.downloadAttachmentBeforePreview, props.openPreview ); + const name = attachmentDisplayName(props.attachment); + const mimeType = attachmentContentType(props.attachment); return ( { onPress={onAttachmentSelect} disabled={!!props.disabled || pot.isLoading(downloadPot)} accessible={true} - accessibilityLabel={props.attachment.displayName} + accessibilityLabel={name} accessibilityRole="button" testID="MessageAttachmentTouchable" > - +
{ ellipsizeMode={"middle"} numberOfLines={2} > - {props.attachment.displayName} + {name}
- {typeof props.attachment.size !== "undefined" && ( -
- {formatByte(props.attachment.size)} -
- )}
{pot.isLoading(downloadPot) ? ( {attachments.map((attachment, index) => ( - + {index < attachments.length - 1 && } ))} diff --git a/ts/features/messages/components/ModuleAttachment.tsx b/ts/features/messages/components/MessageDetail/LegacyModuleAttachment.tsx similarity index 92% rename from ts/features/messages/components/ModuleAttachment.tsx rename to ts/features/messages/components/MessageDetail/LegacyModuleAttachment.tsx index 121a64990e2..9e56b8a7569 100644 --- a/ts/features/messages/components/ModuleAttachment.tsx +++ b/ts/features/messages/components/MessageDetail/LegacyModuleAttachment.tsx @@ -30,7 +30,7 @@ import Animated, { withSpring } from "react-native-reanimated"; import Placeholder from "rn-placeholder"; -import I18n from "../../../i18n"; +import I18n from "../../../../i18n"; type PartialProps = WithTestID<{ title: string; @@ -41,11 +41,11 @@ type PartialProps = WithTestID<{ onPress: (event: GestureResponderEvent) => void; }>; -export type ModuleAttachmentProps = PartialProps & +export type LegacyModuleAttachmentProps = PartialProps & Pick; const formatMap: Record< - NonNullable, + NonNullable, IOIcons > = { doc: "docAttach", @@ -78,13 +78,13 @@ const DISABLED_OPACITY = 0.5; const ICON_SIZE: IOIconSizeScale = 32; const MARGIN_SIZE: IOSpacingScale = 16; -const ModuleAttachmentContent = ({ +const LegacyModuleAttachmentContent = ({ isFetching, format, title, subtitle }: Pick< - ModuleAttachmentProps, + LegacyModuleAttachmentProps, "isFetching" | "format" | "title" | "subtitle" >) => { const IconOrActivityIndicatorComponent = () => { @@ -137,7 +137,7 @@ const ModuleAttachmentContent = ({ }; /** - * The `ModuleAttachment` component is a custom button component with an extended outline style. + * The `LegacyModuleAttachment` component is a custom button component with an extended outline style. * It provides an animated scaling effect when pressed. * * @param {boolean} isLoading - If true, displays a skeleton loading component. @@ -149,7 +149,7 @@ const ModuleAttachmentContent = ({ * @param {string} iconName - The icon name to display. * @param {function} onPress - The function to be executed when the item is pressed. */ -export const ModuleAttachment = ({ +export const LegacyModuleAttachment = ({ isLoading = false, isFetching = false, disabled = false, @@ -157,7 +157,7 @@ export const ModuleAttachment = ({ accessibilityLabel, onPress, ...rest -}: ModuleAttachmentProps) => { +}: LegacyModuleAttachmentProps) => { const isPressed: Animated.SharedValue = useSharedValue(0); // Scaling transformation applied when the button is pressed @@ -223,7 +223,7 @@ export const ModuleAttachment = ({ { opacity: disabled ? DISABLED_OPACITY : 1 } ]} > - + ); diff --git a/ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx b/ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx new file mode 100644 index 00000000000..6fb01c633db --- /dev/null +++ b/ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx @@ -0,0 +1,39 @@ +import React from "react"; +import { VSpacer } from "@pagopa/io-app-design-system"; +import { ServiceId } from "../../../../../definitions/backend/ServiceId"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; +import { UIMessageId } from "../../types"; +import { useAttachmentDownload } from "../../hooks/useAttachmentDownload"; +import I18n from "../../../../i18n"; +import { ModuleAttachment } from "./ModuleAttachment"; + +type MessageDetailsAttachmentItemProps = { + attachment: ThirdPartyAttachment; + bottomSpacer?: boolean; + messageId: UIMessageId; + serviceId?: ServiceId; +}; + +export const MessageDetailsAttachmentItem = ({ + attachment, + bottomSpacer, + messageId, + serviceId +}: MessageDetailsAttachmentItemProps) => { + const { displayName, isFetching, onModuleAttachmentPress } = + useAttachmentDownload(messageId, attachment, false, serviceId); + return ( + <> + void onModuleAttachmentPress()} + /> + {bottomSpacer && } + + ); +}; diff --git a/ts/features/messages/components/MessageDetail/MessageDetailsAttachments.tsx b/ts/features/messages/components/MessageDetail/MessageDetailsAttachments.tsx new file mode 100644 index 00000000000..037a94568f7 --- /dev/null +++ b/ts/features/messages/components/MessageDetail/MessageDetailsAttachments.tsx @@ -0,0 +1,41 @@ +import * as React from "react"; +import { ListItemHeader } from "@pagopa/io-app-design-system"; +import { UIMessageId } from "../../types"; +import { useIOSelector } from "../../../../store/hooks"; +import { thirdPartyMessageAttachments } from "../../store/reducers/thirdPartyById"; +import I18n from "../../../../i18n"; +import { MessageDetailsAttachmentItem } from "./MessageDetailsAttachmentItem"; + +export type MessageDetailsAttachmentsProps = { + messageId: UIMessageId; +}; + +export const MessageDetailsAttachments = ({ + messageId +}: MessageDetailsAttachmentsProps) => { + const attachments = useIOSelector(state => + thirdPartyMessageAttachments(state, messageId) + ); + + const attachmentCount = attachments.length; + if (attachmentCount === 0) { + return null; + } + + return ( + <> + + {attachments.map((attachment, index) => ( + + ))} + + ); +}; diff --git a/ts/features/messages/components/MessageDetail/ModuleAttachment.tsx b/ts/features/messages/components/MessageDetail/ModuleAttachment.tsx new file mode 100644 index 00000000000..675b1fa3af8 --- /dev/null +++ b/ts/features/messages/components/MessageDetail/ModuleAttachment.tsx @@ -0,0 +1,254 @@ +import React, { useCallback } from "react"; +import { + GestureResponderEvent, + Pressable, + PressableProps, + StyleSheet, + View +} from "react-native"; +import { + Badge, + IOColors, + IOListItemVisualParams, + IOScaleValues, + IOSpringValues, + Icon, + LabelSmall, + LoadingSpinner, + VSpacer, + WithTestID, + useIOTheme +} from "@pagopa/io-app-design-system"; +import Animated, { + Extrapolate, + interpolate, + useAnimatedStyle, + useDerivedValue, + useSharedValue, + withSpring +} from "react-native-reanimated"; +import Placeholder from "rn-placeholder"; + +type PartialProps = WithTestID<{ + title: string; + format: "doc" | "pdf"; + isLoading?: boolean; + loadingAccessibilityLabel?: string; + isFetching?: boolean; + fetchingAccessibilityLabel?: string; + onPress: (event: GestureResponderEvent) => void; +}>; + +export type ModuleAttachmentProps = PartialProps & + Pick< + PressableProps, + "onPress" | "accessibilityLabel" | "disabled" | "testID" + >; + +type SkeletonComponentProps = { + loadingAccessibilityLabel?: string; +}; + +const styles = StyleSheet.create({ + button: { + flexDirection: "row", + alignItems: "center", + paddingHorizontal: 16, + paddingVertical: 16, + borderRadius: 8, + borderColor: IOColors.bluegreyLight, + backgroundColor: IOColors.white, + borderStyle: "solid", + borderWidth: 1 + }, + innerContent: { + flex: 1, + flexDirection: "column" + }, + rightSection: { + marginLeft: IOListItemVisualParams.iconMargin, + alignItems: "center" + } +}); + +const DISABLED_OPACITY = 0.5; + +const ModuleAttachmentContent = ({ + isFetching, + format, + title, + testID +}: Pick< + ModuleAttachmentProps, + "isFetching" | "format" | "title" | "testID" +>) => { + const theme = useIOTheme(); + const IconOrActivityIndicatorComponent = () => { + if (isFetching) { + const activityIndicatorTestId = testID + ? `${testID}_activityIndicator` + : undefined; + return ; + } + + return ( + + ); + }; + + return ( + <> + + + {title} + + + + + + + + + + + ); +}; + +/** + * The `ModuleAttachment` component is a custom button component with an extended outline style. + * It provides an animated scaling effect when pressed. + * + * @param {string} accessibilityLabel - Optional accessibility label. + * @param {boolean} disabled - If true, the button is disabled. + * @param {string} fetchingAccessibilityLabel - Optional accessibility label to use during fetching. + * @param {string} format - Badge content. PDF or DOC. + * @param {boolean} isLoading - If true, displays a skeleton loading component. + * @param {boolean} isFetching - If true, displays an activity indicator. + * @param {string} loadingAccessibilityLabel - Optional accessibility label to use during loading. + * @param {function} onPress - The function to be executed when the item is pressed. + * @param {string} testID - The test ID for testing purposes. + * @param {string} title - The title text to display. + * + */ +export const ModuleAttachment = ({ + accessibilityLabel, + disabled = false, + fetchingAccessibilityLabel, + format, + isLoading = false, + isFetching = false, + loadingAccessibilityLabel, + onPress, + testID, + title +}: ModuleAttachmentProps) => { + const isPressed: Animated.SharedValue = useSharedValue(0); + + // Scaling transformation applied when the button is pressed + const animationScaleValue = IOScaleValues?.magnifiedButton?.pressedState; + + const scaleTraversed = useDerivedValue(() => + withSpring(isPressed.value, IOSpringValues.button) + ); + + // Interpolate animation values from `isPressed` values + const animatedStyle = useAnimatedStyle(() => { + const scale = interpolate( + scaleTraversed.value, + [0, 1], + [1, animationScaleValue], + Extrapolate.CLAMP + ); + + return { + transform: [{ scale }] + }; + }); + + const onPressIn = useCallback(() => { + // eslint-disable-next-line functional/immutable-data + isPressed.value = 1; + }, [isPressed]); + + const onPressOut = useCallback(() => { + // eslint-disable-next-line functional/immutable-data + isPressed.value = 0; + }, [isPressed]); + + const handleOnPress = useCallback( + (event: GestureResponderEvent) => { + if (isFetching) { + return; + } + onPress(event); + }, + [isFetching, onPress] + ); + + if (isLoading) { + return ( + + ); + } + + const pressableAccessibilityLabel = + (isFetching && !!fetchingAccessibilityLabel + ? fetchingAccessibilityLabel + : accessibilityLabel) ?? title; + return ( + + + + + + ); +}; + +const SkeletonComponent = ({ + loadingAccessibilityLabel +}: SkeletonComponentProps) => ( + + + + + + + +); diff --git a/ts/features/messages/components/__test__/LegacyMessageAttachments.test.tsx b/ts/features/messages/components/MessageDetail/__tests__/LegacyMessageAttachments.test.tsx similarity index 80% rename from ts/features/messages/components/__test__/LegacyMessageAttachments.test.tsx rename to ts/features/messages/components/MessageDetail/__tests__/LegacyMessageAttachments.test.tsx index 52eb7e44539..d59b81cc351 100644 --- a/ts/features/messages/components/__test__/LegacyMessageAttachments.test.tsx +++ b/ts/features/messages/components/MessageDetail/__tests__/LegacyMessageAttachments.test.tsx @@ -2,20 +2,21 @@ import React from "react"; import { act } from "@testing-library/react-native"; import * as pot from "@pagopa/ts-commons/lib/pot"; 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 { applicationChangeState } from "../../../../../store/actions/application"; +import { appReducer } from "../../../../../store/reducers"; +import { GlobalState } from "../../../../../store/reducers/types"; +import { renderScreenWithNavigationStoreContext } from "../../../../../utils/testWrapper"; import { LegacyMessageAttachments } from "../LegacyMessageAttachments"; -import { Downloads } from "../../store/reducers/downloads"; -import { mockPdfAttachment } from "../../__mocks__/attachment"; -import { downloadAttachment } from "../../store/actions"; -import { MESSAGES_ROUTES } from "../../navigation/routes"; +import { Downloads } from "../../../store/reducers/downloads"; +import { mockPdfAttachment } from "../../../__mocks__/attachment"; +import { downloadAttachment } from "../../../store/actions"; +import { MESSAGES_ROUTES } from "../../../navigation/routes"; +import { messageId_1 } from "../../../__mocks__/messages"; const mockOpenPreview = jest.fn(); const mockShowToast = jest.fn(); -jest.mock("../../../../utils/showToast", () => ({ +jest.mock("../../../../../utils/showToast", () => ({ showToast: () => mockShowToast() })); @@ -35,10 +36,11 @@ describe("LegacyMessageAttachments", () => { const { component } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: jest.fn() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: loadingPot } } @@ -64,10 +66,11 @@ describe("LegacyMessageAttachments", () => { const { component } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: jest.fn() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: notLoadingPot } } @@ -84,10 +87,11 @@ describe("LegacyMessageAttachments", () => { const { store } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: jest.fn() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: pot.noneLoading } } @@ -97,6 +101,7 @@ describe("LegacyMessageAttachments", () => { store.dispatch( downloadAttachment.failure({ attachment: mockPdfAttachment, + messageId: messageId_1, error: new Error() }) ) @@ -110,10 +115,11 @@ describe("LegacyMessageAttachments", () => { const { store } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: mockOpenPreview() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: pot.noneLoading } } @@ -123,6 +129,7 @@ describe("LegacyMessageAttachments", () => { store.dispatch( downloadAttachment.success({ path: "path", + messageId: messageId_1, attachment: mockPdfAttachment }) ) diff --git a/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachmentItem.test.tsx b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachmentItem.test.tsx new file mode 100644 index 00000000000..ce9a1a34c4f --- /dev/null +++ b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachmentItem.test.tsx @@ -0,0 +1,119 @@ +import * as React from "react"; +import { createStore } from "redux"; +import { applicationChangeState } from "../../../../../store/actions/application"; +import { preferencesDesignSystemSetEnabled } from "../../../../../store/actions/persistedPreferences"; +import { appReducer } from "../../../../../store/reducers"; +import { downloadAttachment } from "../../../store/actions"; +import { UIMessageId } from "../../../types"; +import { renderScreenWithNavigationStoreContext } from "../../../../../utils/testWrapper"; +import { MessageDetailsAttachmentItem } from "../MessageDetailsAttachmentItem"; +import { ThirdPartyAttachment } from "../../../../../../definitions/backend/ThirdPartyAttachment"; +import { ServiceId } from "../../../../../../definitions/backend/ServiceId"; + +describe("MessageDetailsAttachmentItem", () => { + it("Should match snapshot with required parameters", () => { + const messageId = "01HNWXJG52YS359GWSYSRK2BWC" as UIMessageId; + const thirdPartyAttachment = { + id: "1", + url: "https://invalid.url", + content_type: "application/pdf", + name: "A PDF File", + category: "DOCUMENT" + } as ThirdPartyAttachment; + + const component = renderScreen(thirdPartyAttachment, messageId); + expect(component.toJSON()).toMatchSnapshot(); + }); + it("Should match snapshot with all parameters", () => { + const messageId = "01HNWXJG52YS359GWSYSRK2BWC" as UIMessageId; + const thirdPartyAttachment = { + id: "1", + url: "https://invalid.url", + content_type: "application/pdf", + name: "A PDF File", + category: "DOCUMENT" + } as ThirdPartyAttachment; + const serviceId = "01HNWXKWAGWPHV7VGMQ21EZPSA" as ServiceId; + + const component = renderScreen( + thirdPartyAttachment, + messageId, + serviceId, + true + ); + expect(component.toJSON()).toMatchSnapshot(); + }); + it("Should match snapshot when the attachment has no name", () => { + const messageId = "01HNWXJG52YS359GWSYSRK2BWC" as UIMessageId; + const thirdPartyAttachment = { + id: "1", + url: "https://invalid.url", + content_type: "application/pdf", + category: "DOCUMENT" + } as ThirdPartyAttachment; + + const component = renderScreen(thirdPartyAttachment, messageId); + expect(component.toJSON()).toMatchSnapshot(); + }); + it("Should match snapshot when is fetching the attachment", () => { + const messageId = "01HNWXJG52YS359GWSYSRK2BWC" as UIMessageId; + const thirdPartyAttachment = { + id: "1", + url: "https://invalid.url", + content_type: "application/pdf", + category: "DOCUMENT" + } as ThirdPartyAttachment; + + const component = renderScreen( + thirdPartyAttachment, + messageId, + undefined, + undefined, + true + ); + expect(component.toJSON()).toMatchSnapshot(); + }); +}); + +const renderScreen = ( + attachment: ThirdPartyAttachment, + messageId: UIMessageId, + serviceId?: ServiceId, + bottomSpacer?: boolean, + isFetching?: boolean +) => { + const initialState = appReducer(undefined, applicationChangeState("active")); + const designSystemState = appReducer( + initialState, + preferencesDesignSystemSetEnabled({ isDesignSystemEnabled: true }) + ); + const finalState = appReducer( + designSystemState, + isFetching + ? downloadAttachment.request({ + attachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + : downloadAttachment.success({ + messageId, + attachment, + path: "file:///fileName.pdf" + }) + ); + const store = createStore(appReducer, finalState as any); + + return renderScreenWithNavigationStoreContext( + () => ( + + ), + "DUMMY", + {}, + store + ); +}; diff --git a/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachments.test.tsx b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachments.test.tsx new file mode 100644 index 00000000000..2310ea1cf41 --- /dev/null +++ b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsAttachments.test.tsx @@ -0,0 +1,63 @@ +import * as React from "react"; +import { createStore } from "redux"; +import { applicationChangeState } from "../../../../../store/actions/application"; +import { preferencesDesignSystemSetEnabled } from "../../../../../store/actions/persistedPreferences"; +import { appReducer } from "../../../../../store/reducers"; +import { UIMessageId } from "../../../types"; +import { MessageDetailsAttachments } from "../MessageDetailsAttachments"; +import { renderScreenWithNavigationStoreContext } from "../../../../../utils/testWrapper"; +import { loadThirdPartyMessage } from "../../../store/actions"; +import { ThirdPartyMessage } from "../../../../../../definitions/backend/ThirdPartyMessage"; +import { ThirdPartyMessageWithContent } from "../../../../../../definitions/backend/ThirdPartyMessageWithContent"; +import { ThirdPartyAttachment } from "../../../../../../definitions/backend/ThirdPartyAttachment"; + +describe("MessageDetailsAttachments", () => { + it("Should match snapshot with no attachments", () => { + const messageId = "01HNWYRT55GXGPXR16BW2MSBVY" as UIMessageId; + const component = renderScreen(messageId); + expect(component.toJSON()).toMatchSnapshot(); + }); + it("Should match snapshot with 1 attachment", () => { + const messageId = "01HNWYRT55GXGPXR16BW2MSBVY" as UIMessageId; + const component = renderScreen(messageId, 1); + expect(component.toJSON()).toMatchSnapshot(); + }); + it("Should match snapshot with 10 attachments", () => { + const messageId = "01HNWYRT55GXGPXR16BW2MSBVY" as UIMessageId; + const component = renderScreen(messageId, 10); + expect(component.toJSON()).toMatchSnapshot(); + }); +}); + +const renderScreen = (messageId: UIMessageId, attachmentCount: number = 0) => { + const initialState = appReducer(undefined, applicationChangeState("active")); + const designSystemState = appReducer( + initialState, + preferencesDesignSystemSetEnabled({ isDesignSystemEnabled: true }) + ); + + const attachments = Array(attachmentCount).map(index => ({ + id: `${index}`, + url: `https://invalid.url/${index}.pdf` + })) as Array; + + const finalState = appReducer( + designSystemState, + loadThirdPartyMessage.success({ + id: messageId, + content: { + third_party_message: { + attachments + } as ThirdPartyMessage + } as ThirdPartyMessageWithContent + }) + ); + const store = createStore(appReducer, finalState as any); + + return renderScreenWithNavigationStoreContext( + () => , + "DUMMY", + {}, + store + ); +}; diff --git a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachmentItem.test.tsx.snap b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachmentItem.test.tsx.snap new file mode 100644 index 00000000000..293e0babe44 --- /dev/null +++ b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachmentItem.test.tsx.snap @@ -0,0 +1,2286 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`MessageDetailsAttachmentItem Should match snapshot when is fetching the attachment 1`] = ` + + + + + + + + + + + + + + + DUMMY + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + PDF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +exports[`MessageDetailsAttachmentItem Should match snapshot when the attachment has no name 1`] = ` + + + + + + + + + + + + + + + DUMMY + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + PDF + + + + + + + + + + + + + + + + + + + + + + + + +`; + +exports[`MessageDetailsAttachmentItem Should match snapshot with all parameters 1`] = ` + + + + + + + + + + + + + + + DUMMY + + + + + + + + + + + + + + + + + + + + + A PDF File + + + + + + PDF + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +exports[`MessageDetailsAttachmentItem Should match snapshot with required parameters 1`] = ` + + + + + + + + + + + + + + + DUMMY + + + + + + + + + + + + + + + + + + + + + A PDF File + + + + + + PDF + + + + + + + + + + + + + + + + + + + + + + + + +`; diff --git a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap new file mode 100644 index 00000000000..dc9dbb6a234 --- /dev/null +++ b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap @@ -0,0 +1,1246 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`MessageDetailsAttachments Should match snapshot with 1 attachment 1`] = ` + + + + + + + + + + + + + + + DUMMY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attachments + + + + + + + + + + + + + + + + +`; + +exports[`MessageDetailsAttachments Should match snapshot with 10 attachments 1`] = ` + + + + + + + + + + + + + + + DUMMY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attachments + + + + + + + + + + + + + + + + +`; + +exports[`MessageDetailsAttachments Should match snapshot with no attachments 1`] = ` + + + + + + + + + + + + + + + DUMMY + + + + + + + + + + + + + + + + + + + + + + + + + + +`; diff --git a/ts/features/messages/components/MessageDetail/index.tsx b/ts/features/messages/components/MessageDetail/index.tsx index 245dc7c0bad..aba376619fa 100644 --- a/ts/features/messages/components/MessageDetail/index.tsx +++ b/ts/features/messages/components/MessageDetail/index.tsx @@ -16,16 +16,13 @@ import I18n from "../../../../i18n"; import { OrganizationFiscalCode } from "../../../../../definitions/backend/OrganizationFiscalCode"; import { ServiceMetadata } from "../../../../../definitions/backend/ServiceMetadata"; import { ThirdPartyMessageWithContent } from "../../../../../definitions/backend/ThirdPartyMessageWithContent"; -import { LegacyMessageAttachments } from "../LegacyMessageAttachments"; import { useIOSelector } from "../../../../store/hooks"; import { messageMarkdownSelector, messageTitleSelector, thirdPartyFromIdSelector } from "../../store/reducers/thirdPartyById"; - -import { UIAttachment, UIMessage, UIMessageDetails } from "../../types"; -import { attachmentsFromThirdPartyMessage } from "../../store/reducers/transformers"; +import { UIMessage, UIMessageDetails, UIMessageId } from "../../types"; import { UIService } from "../../../../store/reducers/entities/services/types"; import variables from "../../../../theme/variables"; import { cleanMarkdownFromCTAs } from "../../utils/messages"; @@ -38,6 +35,8 @@ import { } from "../../../../navigation/params/AppParamsList"; import StatusContent from "../../../../components/SectionStatus/StatusContent"; import { MESSAGES_ROUTES } from "../../navigation/routes"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; +import { LegacyMessageAttachments } from "./LegacyMessageAttachments"; import CtaBar from "./CtaBar"; import { RemoteContentBanner } from "./RemoteContentBanner"; import { HeaderDueDateBar } from "./HeaderDueDateBar"; @@ -157,7 +156,7 @@ const MessageDetailsComponent = ({ const serviceIdOpt = service?.id; const openAttachment = useCallback( - (attachment: UIAttachment) => { + (attachment: ThirdPartyAttachment) => { navigation.navigate(MESSAGES_ROUTES.MESSAGES_NAVIGATOR, { screen: MESSAGES_ROUTES.MESSAGE_DETAIL_ATTACHMENT, params: { @@ -172,18 +171,21 @@ const MessageDetailsComponent = ({ ); const renderThirdPartyAttachments = useCallback( - (thirdPartyMessage: ThirdPartyMessageWithContent): React.ReactNode => { + ( + messageId: UIMessageId, + thirdPartyMessage: ThirdPartyMessageWithContent + ): React.ReactNode => { // In order not to break or refactor existing PN code, the backend // model for third party attachments is converted into in-app // model for attachments when the user generates the request. This // is not a speed intensive operation nor a memory consuming task, // since the attachment count should be negligible - const maybeThirdPartyMessageAttachments = - attachmentsFromThirdPartyMessage(thirdPartyMessage); - return O.isSome(maybeThirdPartyMessageAttachments) ? ( + const attachmentsOpt = thirdPartyMessage.third_party_message.attachments; + return attachmentsOpt ? ( @@ -244,7 +246,7 @@ const MessageDetailsComponent = ({ _ => renderThirdPartyAttachmentsLoading(), _ => renderThirdPartyAttachmentsError(), thirdPartyMessage => - renderThirdPartyAttachments(thirdPartyMessage), + renderThirdPartyAttachments(messageId, thirdPartyMessage), _ => renderThirdPartyAttachmentsLoading(), _ => renderThirdPartyAttachmentsLoading(), _ => renderThirdPartyAttachmentsError() diff --git a/ts/features/messages/hooks/__tests__/useAttachmentDownload.test.ts b/ts/features/messages/hooks/__tests__/useLegacyAttachmentDownload.test.ts similarity index 69% rename from ts/features/messages/hooks/__tests__/useAttachmentDownload.test.ts rename to ts/features/messages/hooks/__tests__/useLegacyAttachmentDownload.test.ts index e244adbf5fe..0c455ee86fb 100644 --- a/ts/features/messages/hooks/__tests__/useAttachmentDownload.test.ts +++ b/ts/features/messages/hooks/__tests__/useLegacyAttachmentDownload.test.ts @@ -1,5 +1,9 @@ import { mockOtherAttachment } from "../../__mocks__/attachment"; -import { testableFunctions } from "../useAttachmentDownload"; +import { + attachmentContentType, + attachmentDisplayName +} from "../../store/reducers/transformers"; +import { testableFunctions } from "../useLegacyAttachmentDownload"; const path = "/tmp/path.pdf"; @@ -46,14 +50,18 @@ describe("Open attachment", function () { Promise.resolve() ); - await taskCopyToMediaStore(mockOtherAttachment, path)(); + const name = attachmentDisplayName(mockOtherAttachment); + const mimeType = attachmentContentType(mockOtherAttachment); + await taskCopyToMediaStore(name, mimeType, path)(); expect(mockMediaCollectionCopyToMediaStore).toBeCalledTimes(1); }); it("Should add an existing file to Downloads app", async () => { mockAndroidAddCompleteDownload.mockImplementation(() => Promise.resolve()); - await taskAddCompleteDownload(mockOtherAttachment, path)(); + const name = attachmentDisplayName(mockOtherAttachment); + const mimeType = attachmentContentType(mockOtherAttachment); + await taskAddCompleteDownload(name, mimeType, path)(); expect(mockAndroidAddCompleteDownload).toBeCalledTimes(1); }); @@ -64,10 +72,9 @@ describe("Open attachment", function () { }); it("Should display an options menu", async () => { - await taskDownloadFileIntoAndroidPublicFolder( - mockOtherAttachment, - path - )(); + const name = attachmentDisplayName(mockOtherAttachment); + const mimeType = attachmentContentType(mockOtherAttachment); + await taskDownloadFileIntoAndroidPublicFolder(name, mimeType, path)(); expect(mockIosPresentOptionsMenu).toBeCalledTimes(1); }); }); @@ -86,10 +93,9 @@ describe("Open attachment", function () { Promise.resolve() ); - await taskDownloadFileIntoAndroidPublicFolder( - mockOtherAttachment, - path - )(); + const name = attachmentDisplayName(mockOtherAttachment); + const mimeType = attachmentContentType(mockOtherAttachment); + await taskDownloadFileIntoAndroidPublicFolder(name, mimeType, path)(); expect(mockMediaCollectionCopyToMediaStore).toBeCalledTimes(1); expect(mockAndroidAddCompleteDownload).toBeCalledTimes(1); expect(mockShowToast).not.toHaveBeenCalled(); @@ -100,10 +106,9 @@ describe("Open attachment", function () { Promise.reject(new Error("Error on reject")) ); - await taskDownloadFileIntoAndroidPublicFolder( - mockOtherAttachment, - path - )(); + const name = attachmentDisplayName(mockOtherAttachment); + const mimeType = attachmentContentType(mockOtherAttachment); + await taskDownloadFileIntoAndroidPublicFolder(name, mimeType, path)(); expect(mockShowToast).toBeCalledTimes(1); }); @@ -115,10 +120,9 @@ describe("Open attachment", function () { Promise.reject(new Error("Error on reject")) ); - await taskDownloadFileIntoAndroidPublicFolder( - mockOtherAttachment, - path - )(); + const name = attachmentDisplayName(mockOtherAttachment); + const mimeType = attachmentContentType(mockOtherAttachment); + await taskDownloadFileIntoAndroidPublicFolder(name, mimeType, path)(); expect(mockShowToast).toBeCalledTimes(1); }); }); diff --git a/ts/features/messages/hooks/useAttachmentDownload.tsx b/ts/features/messages/hooks/useAttachmentDownload.tsx index ad51a2fa9a9..26e45403fc5 100644 --- a/ts/features/messages/hooks/useAttachmentDownload.tsx +++ b/ts/features/messages/hooks/useAttachmentDownload.tsx @@ -1,186 +1,127 @@ -import { useCallback, useEffect, useState } from "react"; -import * as pot from "@pagopa/ts-commons/lib/pot"; -import ReactNativeBlobUtil from "react-native-blob-util"; +import { useCallback, useEffect } from "react"; import RNFS from "react-native-fs"; -import { identity, pipe } from "fp-ts/lib/function"; -import * as E from "fp-ts/lib/Either"; -import * as TE from "fp-ts/lib/TaskEither"; -import i18n from "../../../i18n"; -import { useIODispatch, useIOSelector } from "../../../store/hooks"; -import { ContentTypeValues } from "../types/contentType"; -import { isAndroid } from "../../../utils/platform"; -import { showToast } from "../../../utils/showToast"; +import { useIONavigation } from "../../../navigation/params/AppParamsList"; +import { useIODispatch, useIOSelector, useIOStore } from "../../../store/hooks"; +import { + downloadedMessageAttachmentSelector, + hasErrorOccourredOnRequestedDownloadSelector, + isDownloadingMessageAttachmentSelector, + isRequestedAttachmentDownloadSelector +} from "../store/reducers/downloads"; +import { UIMessageId } from "../types"; import { cancelPreviousAttachmentDownload, + clearRequestedAttachmentDownload, downloadAttachment } from "../store/actions"; -import { UIAttachment } from "../types"; -import { downloadPotForMessageAttachmentSelector } from "../store/reducers/downloads"; -import { isTestEnv } from "../../../utils/environment"; +import { MESSAGES_ROUTES } from "../navigation/routes"; +import { ServiceId } from "../../../../definitions/backend/ServiceId"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; +import { attachmentDisplayName } from "../store/reducers/transformers"; +import I18n from "../../../i18n"; +import { IOToast } from "../../../components/Toast"; import { trackPNAttachmentDownloadFailure } from "../../pn/analytics"; import { trackThirdPartyMessageAttachmentShowPreview } from "../analytics"; -const taskCopyToMediaStore = ( - { displayName, contentType }: UIAttachment, - path: string -) => - TE.tryCatch( - () => - ReactNativeBlobUtil.MediaCollection.copyToMediaStore( - { - name: displayName, - parentFolder: "", - mimeType: contentType - }, - "Download", - path - ), - E.toError - ); - -const taskAddCompleteDownload = ( - { displayName, contentType }: UIAttachment, - path: string -) => - TE.tryCatch( - () => - ReactNativeBlobUtil.android.addCompleteDownload({ - mime: contentType, - title: displayName, - showNotification: true, - description: displayName, - path - }), - E.toError - ); - -const taskDownloadFileIntoAndroidPublicFolder = ( - attachment: UIAttachment, - path: string -) => - pipe( - isAndroid, - TE.fromPredicate(identity, () => undefined), - TE.mapLeft(() => ReactNativeBlobUtil.ios.presentOptionsMenu(path)), - TE.chain(_ => - pipe( - taskCopyToMediaStore(attachment, path), - TE.chain(downloadFilePath => - taskAddCompleteDownload(attachment, downloadFilePath) - ), - TE.mapLeft(_ => - showToast(i18n.t("messageDetails.attachments.failing.details")) - ) - ) - ) - ); - -export const testableFunctions = isTestEnv - ? { - taskCopyToMediaStore, - taskAddCompleteDownload, - taskDownloadFileIntoAndroidPublicFolder - } - : undefined; - -// This hook has a different behaviour if the attachment is a PN -// one or a generic third-party attachment. -// When selecting a PN attachment, this hook takes care of downloading -// the attachment before going into the attachment preview component. -// If the attachment is from a third-party message (generic attachment) -// then the download is delegated to another part of the application export const useAttachmentDownload = ( - attachment: UIAttachment, - downloadAttachmentBeforePreview: boolean = false, - openPreview: (attachment: UIAttachment) => void + messageId: UIMessageId, + attachment: ThirdPartyAttachment, + isPN: boolean, + serviceId?: ServiceId ) => { - const [isLoading, setIsLoading] = useState(false); + const attachmentId = attachment.id; + const dispatch = useIODispatch(); + const navigation = useIONavigation(); + const store = useIOStore(); - const downloadPot = useIOSelector(state => - downloadPotForMessageAttachmentSelector(state, attachment) + const download = useIOSelector(state => + downloadedMessageAttachmentSelector(state, messageId, attachmentId) + ); + const isFetching = useIOSelector(state => + isDownloadingMessageAttachmentSelector(state, messageId, attachmentId) ); - const openAttachment = useCallback(async () => { - const download = pot.toUndefined(downloadPot); - - if (pot.isError(downloadPot)) { - trackPNAttachmentDownloadFailure(attachment.category); - showToast(i18n.t("messageDetails.attachments.failing.details")); - } else if (download) { - const { path, attachment } = download; - - if (attachment.contentType === ContentTypeValues.applicationPdf) { - openPreview(attachment); + const doNavigate = useCallback(() => { + dispatch(clearRequestedAttachmentDownload()); + navigation.navigate(MESSAGES_ROUTES.MESSAGES_NAVIGATOR, { + screen: MESSAGES_ROUTES.MESSAGE_DETAIL_ATTACHMENT, + params: { + messageId, + serviceId, + attachmentId, + isPN: false + } + }); + }, [attachmentId, dispatch, messageId, navigation, serviceId]); + const checkPathAndNavigate = useCallback( + async (downloadPath: string) => { + if (await RNFS.exists(downloadPath)) { + doNavigate(); } else { - await taskDownloadFileIntoAndroidPublicFolder(attachment, path)(); + dispatch(clearRequestedAttachmentDownload()); } - } - }, [downloadPot, openPreview, attachment.category]); - - useEffect(() => { - const wasLoading = isLoading; - const isStillLoading = pot.isLoading(downloadPot); - - if (wasLoading && !isStillLoading) { - void openAttachment(); - } - setIsLoading(isStillLoading); - }, [downloadPot, isLoading, setIsLoading, openAttachment]); - - const downloadAttachmentIfNeeded = async () => { - if (pot.isLoading(downloadPot)) { + }, + [dispatch, doNavigate] + ); + const onModuleAttachmentPress = useCallback(async () => { + if (isFetching) { return; } - // Do not download the attachment for generic third party message - if (!downloadAttachmentBeforePreview) { + if (!isPN) { trackThirdPartyMessageAttachmentShowPreview(); - openPreview(attachment); - return; } - await pipe( - downloadPot, - pot.toOption, - TE.fromOption(() => undefined), - TE.chain(download => - TE.tryCatch( - () => RNFS.exists(download.path), - () => undefined - ) - ), - TE.filterOrElse(identity, () => undefined), - TE.mapLeft(() => { - dispatch( - downloadAttachment.request({ - ...attachment, - skipMixpanelTrackingOnFailure: false - }) - ); - }), - TE.chainW(() => - TE.tryCatch( - () => { - // We must dispatch this action in order to cancel any - // other download that may be running (since we support - // selecting other attachments while cancelling the - // previous selected attachment's download) - dispatch(cancelPreviousAttachmentDownload()); - return openAttachment(); - }, - () => undefined - ) - ) - )(); - }; - - const onAttachmentSelect = () => { - void downloadAttachmentIfNeeded(); - }; + // Make sure to cancel whatever download may already be running + dispatch(cancelPreviousAttachmentDownload()); + + if (download && (await RNFS.exists(download.path))) { + doNavigate(); + } else { + dispatch( + downloadAttachment.request({ + attachment, + messageId, + skipMixpanelTrackingOnFailure: isPN + }) + ); + } + }, [attachment, dispatch, download, doNavigate, isFetching, isPN, messageId]); - return { - downloadPot, - onAttachmentSelect - }; + const attachmentCategory = attachment.category; + useEffect(() => { + const state = store.getState(); + if ( + download && + isRequestedAttachmentDownloadSelector(state, messageId, attachmentId) + ) { + void checkPathAndNavigate(download.path); + } else if ( + hasErrorOccourredOnRequestedDownloadSelector( + state, + messageId, + attachmentId + ) + ) { + dispatch(clearRequestedAttachmentDownload()); + if (isPN) { + trackPNAttachmentDownloadFailure(attachmentCategory); + } + IOToast.error(I18n.t("messageDetails.attachments.failing.details")); + } + }, [ + attachmentCategory, + attachmentId, + checkPathAndNavigate, + dispatch, + doNavigate, + download, + isPN, + messageId, + store + ]); + + const displayName = attachmentDisplayName(attachment); + return { displayName, isFetching, onModuleAttachmentPress }; }; diff --git a/ts/features/messages/hooks/useLegacyAttachmentDownload.tsx b/ts/features/messages/hooks/useLegacyAttachmentDownload.tsx new file mode 100644 index 00000000000..b6962dd6f6c --- /dev/null +++ b/ts/features/messages/hooks/useLegacyAttachmentDownload.tsx @@ -0,0 +1,194 @@ +import { useCallback, useEffect, useState } from "react"; +import * as pot from "@pagopa/ts-commons/lib/pot"; +import ReactNativeBlobUtil from "react-native-blob-util"; +import RNFS from "react-native-fs"; +import { identity, pipe } from "fp-ts/lib/function"; +import * as E from "fp-ts/lib/Either"; +import * as TE from "fp-ts/lib/TaskEither"; +import i18n from "../../../i18n"; +import { useIODispatch, useIOSelector } from "../../../store/hooks"; +import { ContentTypeValues } from "../types/contentType"; +import { isAndroid } from "../../../utils/platform"; +import { showToast } from "../../../utils/showToast"; +import { + cancelPreviousAttachmentDownload, + downloadAttachment +} from "../store/actions"; +import { downloadPotForMessageAttachmentSelector } from "../store/reducers/downloads"; +import { isTestEnv } from "../../../utils/environment"; +import { trackPNAttachmentDownloadFailure } from "../../pn/analytics"; +import { trackThirdPartyMessageAttachmentShowPreview } from "../analytics"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; +import { UIMessageId } from "../types"; +import { + attachmentContentType, + attachmentDisplayName +} from "../store/reducers/transformers"; + +const taskCopyToMediaStore = (name: string, mimeType: string, path: string) => + TE.tryCatch( + () => + ReactNativeBlobUtil.MediaCollection.copyToMediaStore( + { + name, + parentFolder: "", + mimeType + }, + "Download", + path + ), + E.toError + ); + +const taskAddCompleteDownload = (name: string, mime: string, path: string) => + TE.tryCatch( + () => + ReactNativeBlobUtil.android.addCompleteDownload({ + mime, + title: name, + showNotification: true, + description: name, + path + }), + E.toError + ); + +const taskDownloadFileIntoAndroidPublicFolder = ( + name: string, + mimeType: string, + path: string +) => + pipe( + isAndroid, + TE.fromPredicate(identity, () => undefined), + TE.mapLeft(() => ReactNativeBlobUtil.ios.presentOptionsMenu(path)), + TE.chain(_ => + pipe( + taskCopyToMediaStore(name, mimeType, path), + TE.chain(downloadFilePath => + taskAddCompleteDownload(name, mimeType, downloadFilePath) + ), + TE.mapLeft(_ => + showToast(i18n.t("messageDetails.attachments.failing.details")) + ) + ) + ) + ); + +export const testableFunctions = isTestEnv + ? { + taskCopyToMediaStore, + taskAddCompleteDownload, + taskDownloadFileIntoAndroidPublicFolder + } + : undefined; + +// This hook has a different behaviour if the attachment is a PN +// one or a generic third-party attachment. +// When selecting a PN attachment, this hook takes care of downloading +// the attachment before going into the attachment preview component. +// If the attachment is from a third-party message (generic attachment) +// then the download is delegated to another part of the application +export const useLegacyAttachmentDownload = ( + attachment: ThirdPartyAttachment, + messageId: UIMessageId, + downloadAttachmentBeforePreview: boolean = false, + openPreview: (attachment: ThirdPartyAttachment) => void +) => { + const [isLoading, setIsLoading] = useState(false); + const dispatch = useIODispatch(); + + const downloadPot = useIOSelector(state => + downloadPotForMessageAttachmentSelector(state, messageId, attachment.id) + ); + + const openAttachment = useCallback(async () => { + const download = pot.toUndefined(downloadPot); + + if (pot.isError(downloadPot)) { + trackPNAttachmentDownloadFailure(attachment.category); + showToast(i18n.t("messageDetails.attachments.failing.details")); + } else if (download) { + const { path, attachment } = download; + + const contentType = attachmentContentType(attachment); + if (contentType === ContentTypeValues.applicationPdf) { + openPreview(attachment); + } else { + const name = attachmentDisplayName(attachment); + await taskDownloadFileIntoAndroidPublicFolder( + name, + contentType, + path + )(); + } + } + }, [downloadPot, openPreview, attachment.category]); + + useEffect(() => { + const wasLoading = isLoading; + const isStillLoading = pot.isLoading(downloadPot); + + if (wasLoading && !isStillLoading) { + void openAttachment(); + } + setIsLoading(isStillLoading); + }, [downloadPot, isLoading, setIsLoading, openAttachment]); + + const downloadAttachmentIfNeeded = async () => { + if (pot.isLoading(downloadPot)) { + return; + } + + // Do not download the attachment for generic third party message + if (!downloadAttachmentBeforePreview) { + trackThirdPartyMessageAttachmentShowPreview(); + openPreview(attachment); + return; + } + + await pipe( + downloadPot, + pot.toOption, + TE.fromOption(() => undefined), + TE.chain(download => + TE.tryCatch( + () => RNFS.exists(download.path), + () => undefined + ) + ), + TE.filterOrElse(identity, () => undefined), + TE.mapLeft(() => { + dispatch( + downloadAttachment.request({ + attachment, + messageId, + skipMixpanelTrackingOnFailure: true + }) + ); + }), + TE.chainW(() => + TE.tryCatch( + () => { + // We must dispatch this action in order to cancel any + // other download that may be running (since we support + // selecting other attachments while cancelling the + // previous selected attachment's download) + dispatch(cancelPreviousAttachmentDownload()); + return openAttachment(); + }, + () => undefined + ) + ) + )(); + }; + + const onAttachmentSelect = () => { + void downloadAttachmentIfNeeded(); + }; + + return { + downloadPot, + onAttachmentSelect + }; +}; diff --git a/ts/features/messages/navigation/MessagesNavigator.tsx b/ts/features/messages/navigation/MessagesNavigator.tsx index 6a0f3310b80..51c0cdceeb8 100644 --- a/ts/features/messages/navigation/MessagesNavigator.tsx +++ b/ts/features/messages/navigation/MessagesNavigator.tsx @@ -2,7 +2,8 @@ import { createStackNavigator } from "@react-navigation/stack"; import * as React from "react"; import { EUCovidCertStackNavigator } from "../../euCovidCert/navigation/navigator"; import EUCOVIDCERT_ROUTES from "../../euCovidCert/navigation/routes"; -import MessageDetailScreen from "../screens/MessageDetailScreen"; +import LegacyMessageDetailScreen from "../screens/LegacyMessageDetailScreen"; +import { MessageDetailsScreen } from "../screens/MessageDetailsScreen"; import { MessageRouterScreen } from "../screens/MessageRouterScreen"; import { PnStackNavigator } from "../../pn/navigation/navigator"; import PN_ROUTES from "../../pn/navigation/routes"; @@ -36,9 +37,13 @@ export const MessagesStackNavigator = () => { diff --git a/ts/features/messages/navigation/params.ts b/ts/features/messages/navigation/params.ts index ae6f1f95751..3dc7ce2f20f 100644 --- a/ts/features/messages/navigation/params.ts +++ b/ts/features/messages/navigation/params.ts @@ -2,7 +2,7 @@ import { NavigatorScreenParams } from "@react-navigation/native"; import EUCOVIDCERT_ROUTES from "../../euCovidCert/navigation/routes"; import PN_ROUTES from "../../pn/navigation/routes"; import { MessageRouterScreenNavigationParams } from "../screens/MessageRouterScreen"; -import { MessageDetailScreenNavigationParams } from "../screens/MessageDetailScreen"; +import { MessageDetailsScreenNavigationParams } from "../screens/MessageDetailsScreen"; import { EUCovidCertParamsList } from "../../euCovidCert/navigation/params"; import { PnParamsList } from "../../pn/navigation/params"; import { MessageAttachmentNavigationParams } from "../screens/MessageAttachment"; @@ -10,7 +10,7 @@ import { MESSAGES_ROUTES } from "./routes"; export type MessagesParamsList = { [MESSAGES_ROUTES.MESSAGE_ROUTER]: MessageRouterScreenNavigationParams; - [MESSAGES_ROUTES.MESSAGE_DETAIL]: MessageDetailScreenNavigationParams; + [MESSAGES_ROUTES.MESSAGE_DETAIL]: MessageDetailsScreenNavigationParams; [MESSAGES_ROUTES.MESSAGE_DETAIL_ATTACHMENT]: MessageAttachmentNavigationParams; [EUCOVIDCERT_ROUTES.MAIN]: NavigatorScreenParams; [PN_ROUTES.MAIN]: NavigatorScreenParams; diff --git a/ts/features/messages/saga/__test__/handleDownloadAttachment.test.ts b/ts/features/messages/saga/__test__/handleDownloadAttachment.test.ts index f521707505e..69db2e31079 100644 --- a/ts/features/messages/saga/__test__/handleDownloadAttachment.test.ts +++ b/ts/features/messages/saga/__test__/handleDownloadAttachment.test.ts @@ -12,6 +12,7 @@ import { lollipopKeyTagSelector, lollipopPublicKeySelector } from "../../../lollipop/store/reducers/lollipop"; +import { messageId_1 } from "../../__mocks__/messages"; const savePath = "/tmp/attachment.pdf"; const serviceId = "service0000001" as ServiceId; @@ -42,7 +43,8 @@ describe("downloadAttachment given an attachment", () => { downloadAttachmentWorker, "token" as SessionToken, downloadAttachment.request({ - ...attachment, + attachment, + messageId: messageId_1, skipMixpanelTrackingOnFailure: false }) ) @@ -62,6 +64,7 @@ describe("downloadAttachment given an attachment", () => { .put( downloadAttachment.success({ attachment, + messageId: messageId_1, path: savePath }) ) @@ -74,7 +77,8 @@ describe("downloadAttachment given an attachment", () => { downloadAttachmentWorker, "token" as SessionToken, downloadAttachment.request({ - ...attachment, + attachment, + messageId: messageId_1, skipMixpanelTrackingOnFailure: false }) ) @@ -93,6 +97,7 @@ describe("downloadAttachment given an attachment", () => { .put( downloadAttachment.failure({ attachment, + messageId: messageId_1, error: new Error( I18n.t("messageDetails.attachments.downloadFailed") ) @@ -107,7 +112,8 @@ describe("downloadAttachment given an attachment", () => { downloadAttachmentWorker, "token" as SessionToken, downloadAttachment.request({ - ...attachment, + attachment, + messageId: messageId_1, skipMixpanelTrackingOnFailure: false }) ) @@ -126,6 +132,7 @@ describe("downloadAttachment given an attachment", () => { .put( downloadAttachment.failure({ attachment, + messageId: messageId_1, error: new Error(I18n.t("messageDetails.attachments.badFormat")) }) ) diff --git a/ts/features/messages/saga/__test__/handleRequestInit.test.ts b/ts/features/messages/saga/__test__/handleRequestInit.test.ts index 65a6987e8e2..39a0763db74 100644 --- a/ts/features/messages/saga/__test__/handleRequestInit.test.ts +++ b/ts/features/messages/saga/__test__/handleRequestInit.test.ts @@ -5,13 +5,14 @@ import { handleRequestInit, testableHandleRequestInitFactory } from "../handleRequestInit"; -import { UIAttachment } from "../../types"; import { lollipopKeyTagSelector, lollipopPublicKeySelector } from "../../../lollipop/store/reducers/lollipop"; import { generateKeyInfo } from "../../../lollipop/saga"; import { lollipopRequestInit } from "../../../lollipop/utils/fetch"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; +import { messageId_1 } from "../../__mocks__/messages"; const handleRequestInitFactory = testableHandleRequestInitFactory!; @@ -29,13 +30,15 @@ describe("handleDownloadAttachment", () => { it("handleRequestInit should follow the proper flow and return the enhanced lollipop headers", () => { const data = fetchParametersCommonInputData(); + const attachmentFullUrl = `undefined/api/v1/third-party-messages/${data.messageId}/attachments/${data.attachmentFullUrl}`; testSaga( handleRequestInit, { - resourceUrl: { - href: data.attachmentFullUrl - } - } as UIAttachment, + id: data.attachmentId, + name: data.attachmentName, + url: data.attachmentFullUrl + } as ThirdPartyAttachment, + data.messageId, data.bearerToken, data.nonce ) @@ -50,26 +53,28 @@ describe("handleDownloadAttachment", () => { lollipopRequestInit, { nonce: data.nonce }, data.keyInfo, - data.attachmentFullUrl, + attachmentFullUrl, { headers: data.headers, method: "GET" } ) .next({ headers: data.enhancedHeaders }) .returns({ method: "GET", - attachmentFullUrl: data.attachmentFullUrl, + attachmentFullUrl, headers: data.enhancedHeaders }); }); it("handleRequestInit should follow the proper flow and return standard headers when lollipopRequestInit fails", () => { const data = fetchParametersCommonInputData(); + const attachmentFullUrl = `undefined/api/v1/third-party-messages/${data.messageId}/attachments/${data.attachmentFullUrl}`; testSaga( handleRequestInit, { - resourceUrl: { - href: data.attachmentFullUrl - } - } as UIAttachment, + id: data.attachmentId, + name: data.attachmentName, + url: data.attachmentFullUrl + } as ThirdPartyAttachment, + data.messageId, data.bearerToken, data.nonce ) @@ -84,13 +89,13 @@ describe("handleDownloadAttachment", () => { lollipopRequestInit, { nonce: data.nonce }, data.keyInfo, - data.attachmentFullUrl, + attachmentFullUrl, { headers: data.headers, method: "GET" } ) .next({ headers: undefined }) .returns({ method: "GET", - attachmentFullUrl: data.attachmentFullUrl, + attachmentFullUrl, headers: data.headers }); }); @@ -118,6 +123,9 @@ const fetchParametersCommonInputData = () => { publicKey, publicKeyThumbprint: "thumbprint" }, + messageId: messageId_1, + attachmentId: "1", + attachmentName: "1.pdf", attachmentFullUrl: "https://my.attachment/full/url", headers, enhancedHeaders: { diff --git a/ts/features/messages/saga/handleDownloadAttachment.ts b/ts/features/messages/saga/handleDownloadAttachment.ts index aaddf73c202..e485c734910 100644 --- a/ts/features/messages/saga/handleDownloadAttachment.ts +++ b/ts/features/messages/saga/handleDownloadAttachment.ts @@ -23,7 +23,7 @@ import { cancelPreviousAttachmentDownload, downloadAttachment } from "../store/actions"; -import { UIAttachment, UIMessageId } from "../types"; +import { UIMessageId } from "../types"; import { ServiceId } from "../../../../definitions/backend/ServiceId"; import { getServiceByMessageId } from "../store/reducers/paginatedById"; import { @@ -32,6 +32,7 @@ import { trackThirdPartyMessageAttachmentUnavailable } from "../analytics"; import { getHeaderByKey } from "../utils/strings"; +import { attachmentDisplayName } from "../store/reducers/transformers"; import { handleRequestInit } from "./handleRequestInit"; export const AttachmentsDirectoryPath = @@ -41,14 +42,8 @@ export const AttachmentsDirectoryPath = * Builds the save path for the given attachment * @param attachment */ -const savePath = (attachment: UIAttachment) => - AttachmentsDirectoryPath + - "/" + - attachment.messageId + - "/" + - attachment.id + - "/" + - attachment.displayName; +const savePath = (messageId: UIMessageId, attachmentId: string, name: string) => + `${AttachmentsDirectoryPath}/${messageId}/${attachmentId}/${name}`; const getDelayMilliseconds = (headers: Record) => pipe( @@ -80,20 +75,23 @@ export function* downloadAttachmentWorker( bearerToken: SessionToken, action: ActionType ): SagaIterator { - const { skipMixpanelTrackingOnFailure, ...attachment } = action.payload; - const messageId = attachment.messageId; + const { attachment, messageId, skipMixpanelTrackingOnFailure } = + action.payload; const serviceId = yield* select(getServiceByMessageId, messageId); + const name = attachmentDisplayName(attachment); + while (true) { try { const config = yield* call(ReactNativeBlobUtil.config, { - path: savePath(attachment), + path: savePath(messageId, attachment.id, name), timeout: fetchTimeout }); const { method, attachmentFullUrl, headers } = yield* call( handleRequestInit, attachment, + messageId, bearerToken, uuid() ); @@ -109,7 +107,7 @@ export function* downloadAttachmentWorker( if (status === 200) { const path = result.path(); - yield* put(downloadAttachment.success({ attachment, path })); + yield* put(downloadAttachment.success({ attachment, messageId, path })); } else if (status === 503) { const waitingMs = getDelayMilliseconds(rest.headers); if (waitingMs >= 0) { @@ -121,7 +119,7 @@ export function* downloadAttachmentWorker( trackFailureEvent( skipMixpanelTrackingOnFailure, status, - attachment.messageId, + messageId, serviceId ); // In this case we produce a taking error that can be @@ -131,18 +129,16 @@ export function* downloadAttachmentWorker( ? "messageDetails.attachments.badFormat" : "messageDetails.attachments.downloadFailed"; const error = new Error(I18n.t(errorKey)); - yield* put(downloadAttachment.failure({ attachment, error })); + yield* put( + downloadAttachment.failure({ attachment, messageId, error }) + ); } } catch (error) { - trackFailureEvent( - skipMixpanelTrackingOnFailure, - 0, - attachment.messageId, - serviceId - ); + trackFailureEvent(skipMixpanelTrackingOnFailure, 0, messageId, serviceId); yield* put( downloadAttachment.failure({ attachment, + messageId, error: getError(error) }) ); @@ -150,7 +146,7 @@ export function* downloadAttachmentWorker( // In this way, the download pot's status // in the reducer will be properly updated. if (yield* cancelled()) { - yield* put(downloadAttachment.cancel(attachment)); + yield* put(downloadAttachment.cancel({ attachment, messageId })); } } break; diff --git a/ts/features/messages/saga/handleRequestInit.ts b/ts/features/messages/saga/handleRequestInit.ts index b44062de94a..88c04054db5 100644 --- a/ts/features/messages/saga/handleRequestInit.ts +++ b/ts/features/messages/saga/handleRequestInit.ts @@ -1,5 +1,4 @@ import { call, select } from "typed-redux-saga/macro"; -import { UIAttachment } from "../types"; import { lollipopKeyTagSelector, lollipopPublicKeySelector @@ -8,11 +7,15 @@ import { generateKeyInfo } from "../../lollipop/saga"; import { LollipopConfig } from "../../lollipop"; import { lollipopRequestInit } from "../../lollipop/utils/fetch"; import { isTestEnv } from "../../../utils/environment"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; +import { attachmentDownloadUrl } from "../store/reducers/transformers"; +import { UIMessageId } from "../types"; type HeaderType = Record; export function* handleRequestInit( - attachment: UIAttachment, + attachment: ThirdPartyAttachment, + messageId: UIMessageId, bearerToken: string, nonce: string ) { @@ -24,7 +27,7 @@ export function* handleRequestInit( const publicKey = yield* select(lollipopPublicKeySelector); const keyInfo = yield* call(generateKeyInfo, keyTag, publicKey); - const attachmentFullUrl = attachment.resourceUrl.href; + const attachmentFullUrl = attachmentDownloadUrl(messageId, attachment); const requestInit = { headers: { diff --git a/ts/features/messages/screens/LegacyMessageAttachment.tsx b/ts/features/messages/screens/LegacyMessageAttachment.tsx index d60ee13fd11..2a409ad1563 100644 --- a/ts/features/messages/screens/LegacyMessageAttachment.tsx +++ b/ts/features/messages/screens/LegacyMessageAttachment.tsx @@ -8,7 +8,7 @@ import { MessagesParamsList } from "../navigation/params"; import { showToast } from "../../../utils/showToast"; import { getServiceByMessageId } from "../store/reducers/paginatedById"; import { useIOSelector } from "../../../store/hooks"; -import { thirdPartyMessageUIAttachment } from "../store/reducers/thirdPartyById"; +import { thirdPartyMessageAttachment } from "../store/reducers/thirdPartyById"; import { trackThirdPartyMessageAttachmentCorruptedFile, trackThirdPartyMessageAttachmentPreviewSuccess, @@ -32,7 +32,7 @@ export const LegacyMessageDetailAttachment = ( ); const maybeThirdPartyMessageUIAttachment = useIOSelector(state => - thirdPartyMessageUIAttachment(state)(messageId)(attachmentId) + thirdPartyMessageAttachment(state)(messageId)(attachmentId) ); useEffect(() => { diff --git a/ts/features/messages/screens/MessageDetailScreen.tsx b/ts/features/messages/screens/LegacyMessageDetailScreen.tsx similarity index 98% rename from ts/features/messages/screens/MessageDetailScreen.tsx rename to ts/features/messages/screens/LegacyMessageDetailScreen.tsx index 5f494e9209b..4b43a39053a 100644 --- a/ts/features/messages/screens/MessageDetailScreen.tsx +++ b/ts/features/messages/screens/LegacyMessageDetailScreen.tsx @@ -67,7 +67,7 @@ const renderLoadingState = () => (
); -const MessageDetailScreen = () => { +const LegacyMessageDetailScreen = () => { const { messageId, serviceId } = useRoute>() .params; @@ -168,4 +168,4 @@ const MessageDetailScreen = () => { ); }; -export default MessageDetailScreen; +export default LegacyMessageDetailScreen; diff --git a/ts/features/messages/screens/MessageAttachment.tsx b/ts/features/messages/screens/MessageAttachment.tsx index 5945c03aed9..fb6c58d4c9b 100644 --- a/ts/features/messages/screens/MessageAttachment.tsx +++ b/ts/features/messages/screens/MessageAttachment.tsx @@ -6,7 +6,7 @@ import { FooterWithButtons } from "@pagopa/io-app-design-system"; import I18n from "../../../i18n"; import { useIOSelector } from "../../../store/hooks"; import { downloadedMessageAttachmentSelector } from "../store/reducers/downloads"; -import { UIAttachment, UIAttachmentId, UIMessageId } from "../types"; +import { UIMessageId } from "../types"; import { isIos } from "../../../utils/platform"; import { share } from "../../../utils/share"; import { IOToast } from "../../../components/Toast"; @@ -28,16 +28,21 @@ import { trackPNAttachmentShare } from "../../pn/analytics"; import { OperationResultScreenContent } from "../../../components/screens/OperationResultScreenContent"; +import { + attachmentContentType, + attachmentDisplayName +} from "../store/reducers/transformers"; export type MessageAttachmentNavigationParams = Readonly<{ messageId: UIMessageId; - attachmentId: UIAttachmentId; + attachmentId: string; isPN: boolean; serviceId?: ServiceId; }>; const renderFooter = ( - attachment: UIAttachment, + name: string, + mimeType: string, downloadPath: string, isPN: boolean, attachmentCategory?: string @@ -81,9 +86,9 @@ const renderFooter = ( onDownload(isPN, attachmentCategory); ReactNativeBlobUtil.MediaCollection.copyToMediaStore( { - name: attachment.displayName, + name, parentFolder: "", - mimeType: attachment.contentType + mimeType }, "Download", downloadPath @@ -91,7 +96,7 @@ const renderFooter = ( .then(_ => { IOToast.show( I18n.t("messagePDFPreview.savedAtLocation", { - name: attachment.displayName + name }) ); }) @@ -109,7 +114,7 @@ const renderFooter = ( onPress: () => { onOpen(isPN, attachmentCategory); ReactNativeBlobUtil.android - .actionViewIntent(downloadPath, attachment.contentType) + .actionViewIntent(downloadPath, mimeType) .catch(_ => { IOToast.error(I18n.t("messagePDFPreview.errors.opening")); }); @@ -215,6 +220,8 @@ export const MessageAttachment = ( /> ); } + const name = attachmentDisplayName(attachmentOpt); + const mimeType = attachmentContentType(attachmentOpt); return ( <> {isPDFRenderingError ? ( @@ -230,7 +237,7 @@ export const MessageAttachment = ( onLoadComplete={() => onLoadComplete(isPN, attachmentCategory)} /> )} - {renderFooter(attachmentOpt, downloadPathOpt, isPN, attachmentCategory)} + {renderFooter(name, mimeType, downloadPathOpt, isPN, attachmentCategory)} ); }; diff --git a/ts/features/messages/screens/MessageDetailsScreen.tsx b/ts/features/messages/screens/MessageDetailsScreen.tsx new file mode 100644 index 00000000000..df59a1b4c61 --- /dev/null +++ b/ts/features/messages/screens/MessageDetailsScreen.tsx @@ -0,0 +1,44 @@ +import React, { useCallback } from "react"; +import { ScrollView } from "react-native"; +import { ContentWrapper, IOStyles } from "@pagopa/io-app-design-system"; +import { useNavigation } from "@react-navigation/native"; +import { SafeAreaView } from "react-native-safe-area-context"; +import { UIMessageId } from "../types"; +import { ServiceId } from "../../../../definitions/backend/ServiceId"; +import { MessagesParamsList } from "../navigation/params"; +import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; +import { MessageDetailsAttachments } from "../components/MessageDetail/MessageDetailsAttachments"; +import { useIODispatch } from "../../../store/hooks"; +import { cancelPreviousAttachmentDownload } from "../store/actions"; + +export type MessageDetailsScreenNavigationParams = { + messageId: UIMessageId; + serviceId: ServiceId; +}; + +export const MessageDetailsScreen = ( + props: IOStackNavigationRouteProps +) => { + const messageId = props.route.params.messageId; + const dispatch = useIODispatch(); + const navigation = useNavigation(); + const goBack = useCallback(() => { + dispatch(cancelPreviousAttachmentDownload()); + navigation.goBack(); + }, [dispatch, navigation]); + useHeaderSecondLevel({ + title: "", + goBack, + supportRequest: true + }); + return ( + + + + + + + + ); +}; diff --git a/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx b/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx index 5531553a12f..fee3cf8d885 100644 --- a/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx +++ b/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx @@ -1,5 +1,5 @@ import { createStore } from "redux"; -import { UIAttachment, UIAttachmentId, UIMessageId } from "../../types"; +import { UIMessageId } from "../../types"; import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWrapper"; import { MESSAGES_ROUTES } from "../../navigation/routes"; import { appReducer } from "../../../../store/reducers"; @@ -8,18 +8,19 @@ import { MessageAttachment } from "../MessageAttachment"; import { ServiceId } from "../../../../../definitions/backend/ServiceId"; import { downloadAttachment } from "../../store/actions"; import { preferencesDesignSystemSetEnabled } from "../../../../store/actions/persistedPreferences"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; describe("MessageAttachment", () => { it("Should match the snapshot when there is an error", () => { const messageId = "01HMZWRG7549N76017YR8YBSG2" as UIMessageId; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const serviceId = "01HMZXFS84T1Q1BN6GXRYT63VJ" as ServiceId; const screen = renderScreen(messageId, attachmentId, serviceId, "failure"); expect(screen.toJSON()).toMatchSnapshot(); }); it("Should match the snapshot when everything went fine", () => { const messageId = "01HMZWRG7549N76017YR8YBSG2" as UIMessageId; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const serviceId = "01HMZXFS84T1Q1BN6GXRYT63VJ" as ServiceId; const screen = renderScreen(messageId, attachmentId, serviceId, "success"); expect(screen.toJSON()).toMatchSnapshot(); @@ -28,7 +29,7 @@ describe("MessageAttachment", () => { const renderScreen = ( messageId: UIMessageId, - attachmentId: UIAttachmentId, + attachmentId: string, serviceId: ServiceId, configuration: "failure" | "success" ) => { @@ -40,7 +41,8 @@ const renderScreen = ( const withDownloadState = appReducer( designSystemState, downloadAttachment.success({ - attachment: { id: attachmentId, messageId } as UIAttachment, + attachment: { id: attachmentId } as ThirdPartyAttachment, + messageId, path: "file:///fileName.pdf" }) ); diff --git a/ts/features/messages/store/actions/index.ts b/ts/features/messages/store/actions/index.ts index 2b6a2c418b1..d19b5be0944 100644 --- a/ts/features/messages/store/actions/index.ts +++ b/ts/features/messages/store/actions/index.ts @@ -7,18 +7,16 @@ import { import { ThirdPartyMessageWithContent } from "../../../../../definitions/backend/ThirdPartyMessageWithContent"; import { ServiceId } from "../../../../../definitions/backend/ServiceId"; import { - UIAttachment, UIMessage, UIMessageDetails, UIMessageId, - WithSkipMixpanelTrackingOnFailure, WithUIMessageId } from "../../types"; import { MessageGetStatusFailurePhaseType } from "../reducers/messageGetStatus"; import { MessageCategory } from "../../../../../definitions/backend/MessageCategory"; import { ThirdPartyMessagePrecondition } from "../../../../../definitions/backend/ThirdPartyMessagePrecondition"; -import { Download, DownloadError } from "../reducers/downloads"; import { MessagesStatus } from "../reducers/messagesStatus"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; export type ThirdPartyMessageActions = ActionType; @@ -219,6 +217,29 @@ export const resetMigrationStatus = createAction( "MESSAGES_MIGRATE_TO_PAGINATED_DONE" ); +export type DownloadAttachmentRequest = { + attachment: ThirdPartyAttachment; + messageId: UIMessageId; + skipMixpanelTrackingOnFailure: boolean; +}; + +export type DownloadAttachmentSuccess = { + attachment: ThirdPartyAttachment; + messageId: UIMessageId; + path: string; +}; + +export type DownloadAttachmentError = { + attachment: ThirdPartyAttachment; + error: Error; + messageId: UIMessageId; +}; + +export type DownloadAttachmentCancel = { + attachment: ThirdPartyAttachment; + messageId: UIMessageId; +}; + /** * The user requests an attachment download. */ @@ -228,22 +249,26 @@ export const downloadAttachment = createAsyncAction( "DOWNLOAD_ATTACHMENT_FAILURE", "DOWNLOAD_ATTACHMENT_CANCEL" )< - WithSkipMixpanelTrackingOnFailure, - Download, - DownloadError, - UIAttachment + DownloadAttachmentRequest, + DownloadAttachmentSuccess, + DownloadAttachmentError, + DownloadAttachmentCancel >(); export const cancelPreviousAttachmentDownload = createAction( "CANCEL_PREVIOUS_ATTACHMENT_DOWNLOAD" ); +export const clearRequestedAttachmentDownload = createAction( + "CLEAR_REQUESTED_ATTACHMNET_DOWNLOAD" +); + /** * This action removes any cached data in order to perform another download. */ export const removeCachedAttachment = createStandardAction( "REMOVE_CACHED_ATTACHMENT" -)(); +)(); export type MessagesActions = ActionType< | typeof reloadAllMessages @@ -258,6 +283,7 @@ export type MessagesActions = ActionType< | typeof loadThirdPartyMessage | typeof downloadAttachment | typeof cancelPreviousAttachmentDownload + | typeof clearRequestedAttachmentDownload | typeof removeCachedAttachment | typeof getMessagePrecondition | typeof clearMessagePrecondition diff --git a/ts/features/messages/store/actions/navigation.ts b/ts/features/messages/store/actions/navigation.ts index aaf9def0108..529ab72212b 100644 --- a/ts/features/messages/store/actions/navigation.ts +++ b/ts/features/messages/store/actions/navigation.ts @@ -1,13 +1,13 @@ import { CommonActions } from "@react-navigation/native"; import { MESSAGES_ROUTES } from "../../navigation/routes"; -import { MessageDetailScreenNavigationParams } from "../../screens/MessageDetailScreen"; import { MessageRouterScreenNavigationParams } from "../../screens/MessageRouterScreen"; +import { MessageDetailsScreenNavigationParams } from "../../screens/MessageDetailsScreen"; /** * Open the Message Detail screen supporting the new UIMessage type. */ export const navigateToMessageDetailScreenAction = ( - params: MessageDetailScreenNavigationParams + params: MessageDetailsScreenNavigationParams ) => CommonActions.navigate(MESSAGES_ROUTES.MESSAGES_NAVIGATOR, { screen: MESSAGES_ROUTES.MESSAGE_DETAIL, diff --git a/ts/features/messages/store/reducers/__tests__/downloads.test.ts b/ts/features/messages/store/reducers/__tests__/downloads.test.ts index 49bee044cdd..14cb4db2f93 100644 --- a/ts/features/messages/store/reducers/__tests__/downloads.test.ts +++ b/ts/features/messages/store/reducers/__tests__/downloads.test.ts @@ -1,34 +1,42 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import { mockPdfAttachment } from "../../../__mocks__/attachment"; -import { downloadAttachment, removeCachedAttachment } from "../../actions"; import { - Download, - DownloadError, + DownloadAttachmentCancel, + DownloadAttachmentError, + DownloadAttachmentRequest, + DownloadAttachmentSuccess, + clearRequestedAttachmentDownload, + downloadAttachment, + removeCachedAttachment +} from "../../actions"; +import { Downloads, INITIAL_STATE, + downloadPotForMessageAttachmentSelector, downloadedMessageAttachmentSelector, - downloadsReducer + downloadsReducer, + hasErrorOccourredOnRequestedDownloadSelector, + isDownloadingMessageAttachmentSelector, + isRequestedAttachmentDownloadSelector } from "../downloads"; -import { - UIAttachment, - UIAttachmentId, - UIMessageId, - WithSkipMixpanelTrackingOnFailure -} from "../../../types"; +import { UIMessageId } from "../../../types"; import { GlobalState } from "../../../../../store/reducers/types"; +import { appReducer } from "../../../../../store/reducers"; +import { applicationChangeState } from "../../../../../store/actions/application"; +import { ThirdPartyAttachment } from "../../../../../../definitions/backend/ThirdPartyAttachment"; const path = "/path/attachment.pdf"; describe("downloadedMessageAttachmentSelector", () => { it("Should return undefined for an unmatching messageId", () => { - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const successDownload = { attachment: { - messageId: "01HMXFQ803Q8JGQECKQF0EX6KX" as UIMessageId, id: attachmentId - } as UIAttachment, + } as ThirdPartyAttachment, + messageId: "01HMXFQ803Q8JGQECKQF0EX6KX" as UIMessageId, path: "randomPath" - } as Download; + } as DownloadAttachmentSuccess; const downloadSuccessAction = downloadAttachment.success(successDownload); const downloadsState = downloadsReducer( INITIAL_STATE, @@ -54,11 +62,11 @@ describe("downloadedMessageAttachmentSelector", () => { const unrelatedAttachmentId = "2"; const successDownload = { attachment: { - messageId, id: unrelatedAttachmentId - } as UIAttachment, + } as ThirdPartyAttachment, + messageId, path: "randomPath" - } as Download; + } as DownloadAttachmentSuccess; const downloadSuccessAction = downloadAttachment.success(successDownload); const downloadsState = downloadsReducer( INITIAL_STATE, @@ -71,7 +79,7 @@ describe("downloadedMessageAttachmentSelector", () => { } } } as GlobalState; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const downloadedAttachment = downloadedMessageAttachmentSelector( globalState, messageId, @@ -81,12 +89,12 @@ describe("downloadedMessageAttachmentSelector", () => { }); it("Should return undefined for an attachment that is loading", () => { const messageId = "01HMXFE7192J01KNK02BJAPMBR" as UIMessageId; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const uiAttachmentRequest = { messageId, - id: attachmentId, + attachment: { id: attachmentId } as ThirdPartyAttachment, skipMixpanelTrackingOnFailure: true - } as WithSkipMixpanelTrackingOnFailure; + } as DownloadAttachmentRequest; const downloadRequestAction = downloadAttachment.request(uiAttachmentRequest); const downloadsState = downloadsReducer( @@ -109,14 +117,14 @@ describe("downloadedMessageAttachmentSelector", () => { }); it("Should return undefined for an attachment that got an error", () => { const messageId = "01HMXFE7192J01KNK02BJAPMBR" as UIMessageId; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const failedDownload = { attachment: { - messageId, id: attachmentId - } as UIAttachment, + } as ThirdPartyAttachment, + messageId, error: new Error("An error") - } as DownloadError; + } as DownloadAttachmentError; const downloadFailureAction = downloadAttachment.failure(failedDownload); const downloadsState = downloadsReducer( INITIAL_STATE, @@ -138,11 +146,11 @@ describe("downloadedMessageAttachmentSelector", () => { }); it("Should return undefined for an attachment that was cancelled before finishing the download", () => { const messageId = "01HMXFE7192J01KNK02BJAPMBR" as UIMessageId; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const uiAttachmentCancelled = { messageId, - id: attachmentId - } as UIAttachment; + attachment: { id: attachmentId } as ThirdPartyAttachment + } as DownloadAttachmentCancel; const downloadCancelAction = downloadAttachment.cancel( uiAttachmentCancelled ); @@ -166,14 +174,14 @@ describe("downloadedMessageAttachmentSelector", () => { }); it("Should return undefined for an attachment that was removed by a removeCachedAttachment action", () => { const messageId = "01HMXFE7192J01KNK02BJAPMBR" as UIMessageId; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const successDownload = { attachment: { - messageId, id: attachmentId - } as UIAttachment, + } as ThirdPartyAttachment, + messageId, path: "randomPath" - } as Download; + } as DownloadAttachmentSuccess; const removedCachedAttachmentAction = removeCachedAttachment(successDownload); const downloadsState = downloadsReducer( @@ -196,15 +204,15 @@ describe("downloadedMessageAttachmentSelector", () => { }); it("Should return data for a matching downloaded attachment", () => { const messageId = "01HMXFE7192J01KNK02BJAPMBR" as UIMessageId; - const attachmentId = "1" as UIAttachmentId; + const attachmentId = "1"; const downloadPath = "randomPath"; const successDownload = { attachment: { - messageId, id: attachmentId - } as UIAttachment, + } as ThirdPartyAttachment, + messageId, path: downloadPath - } as Download; + } as DownloadAttachmentSuccess; const downloadSuccessAction = downloadAttachment.success(successDownload); const downloadsState = downloadsReducer( INITIAL_STATE, @@ -224,13 +232,14 @@ describe("downloadedMessageAttachmentSelector", () => { ); expect(downloadedAttachment).toBeDefined(); expect(downloadedAttachment?.attachment).toBeDefined(); - expect(downloadedAttachment?.attachment.messageId).toBe(messageId); expect(downloadedAttachment?.attachment.id).toBe(attachmentId); expect(downloadedAttachment?.path).toBe(downloadPath); }); }); describe("downloadsReducer", () => { + const messageId = "01HP08KKPY65CBF4TRPHGJJ1GT" as UIMessageId; + describe("given no download", () => { const initialState = {}; @@ -240,7 +249,8 @@ describe("downloadsReducer", () => { const afterRequestState = downloadsReducer( initialState, downloadAttachment.request({ - ...attachment, + attachment, + messageId, skipMixpanelTrackingOnFailure: false }) ); @@ -248,9 +258,14 @@ describe("downloadsReducer", () => { it("then it returns pot.loading", () => { expect( pot.isLoading( - afterRequestState[attachment.messageId][attachment.id] ?? pot.none + afterRequestState[messageId]?.[attachment.id] ?? pot.none ) ).toBeTruthy(); + expect(afterRequestState.requestedDownload).toBeDefined(); + expect(afterRequestState.requestedDownload?.messageId).toBe(messageId); + expect(afterRequestState.requestedDownload?.attachmentId).toBe( + attachment.id + ); }); describe("and the request succeeds", () => { @@ -261,11 +276,19 @@ describe("downloadsReducer", () => { afterRequestState, downloadAttachment.success({ attachment, + messageId, path }) - )[attachment.messageId][attachment.id] ?? pot.none + )[messageId]?.[attachment.id] ?? pot.none ) ).toBeTruthy(); + expect(afterRequestState.requestedDownload).toBeDefined(); + expect(afterRequestState.requestedDownload?.messageId).toBe( + messageId + ); + expect(afterRequestState.requestedDownload?.attachmentId).toBe( + attachment.id + ); }); }); @@ -277,11 +300,19 @@ describe("downloadsReducer", () => { afterRequestState, downloadAttachment.failure({ attachment, + messageId, error: new Error() }) - )[attachment.messageId][attachment.id] ?? pot.none + )[messageId]?.[attachment.id] ?? pot.none ) ).toBeTruthy(); + expect(afterRequestState.requestedDownload).toBeDefined(); + expect(afterRequestState.requestedDownload?.messageId).toBe( + messageId + ); + expect(afterRequestState.requestedDownload?.attachmentId).toBe( + attachment.id + ); }); }); }); @@ -290,7 +321,7 @@ describe("downloadsReducer", () => { describe("given a downloaded attachment", () => { const attachment = mockPdfAttachment; const initialState: Downloads = { - [attachment.messageId]: { + [messageId]: { [attachment.id]: pot.some({ attachment, path }) } }; @@ -301,11 +332,709 @@ describe("downloadsReducer", () => { pot.isNone( downloadsReducer( initialState, - removeCachedAttachment({ attachment, path }) - )[attachment.messageId][attachment.id] ?? pot.none + removeCachedAttachment({ attachment, messageId, path }) + )[messageId]?.[attachment.id] ?? pot.none ) ).toBeTruthy(); + expect(initialState.requestedDownload).toBeUndefined(); }); }); }); + + describe("given a downloading attachment", () => { + const attachment = mockPdfAttachment; + const initialState = downloadsReducer( + undefined, + downloadAttachment.request({ + attachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + + expect(initialState.requestedDownload).toBeDefined(); + expect(initialState.requestedDownload?.messageId).toBe(messageId); + expect(initialState.requestedDownload?.attachmentId).toBe(attachment.id); + + it("Should return pot.none and clear the requestedDownload after a downloadAttachment.cancel action", () => { + const cancelState = downloadsReducer( + initialState, + downloadAttachment.cancel({ + attachment, + messageId + }) + ); + const potNone = cancelState[messageId]?.[attachment.id]; + expect(potNone).toBeDefined(); + expect(pot.isNone(potNone!)).toBeTruthy(); + expect(cancelState.requestedDownload).toBeUndefined(); + }); + it("Should clear the requestedDownload after a clearRequestedAttachmentDownload action", () => { + const cancelState = downloadsReducer( + initialState, + clearRequestedAttachmentDownload() + ); + expect(cancelState.requestedDownload).toBeUndefined(); + }); + }); + + describe("isDownloadingMessageAttachmentSelector", () => { + it("should return false on initial state", () => { + const initialState = appReducer( + undefined, + applicationChangeState("active") + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + initialState, + messageId, + mockPdfAttachment.id + ); + expect(isDownloadingMessage).toBeFalsy(); + }); + it("should return true on a matching download", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + initialState, + messageId, + mockPdfAttachment.id + ); + expect(isDownloadingMessage).toBeTruthy(); + }); + it("should return false on a messageId-unmatching download", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + initialState, + "01HNWPGF3TY9WQYGX5JYAW816W" as UIMessageId, + mockPdfAttachment.id + ); + expect(isDownloadingMessage).toBeFalsy(); + }); + it("should return false on an attachmentId-unmatching download", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + initialState, + messageId, + "potato" + ); + expect(isDownloadingMessage).toBeFalsy(); + }); + it("should return false on a successful downloaded attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const successState = appReducer( + initialState, + downloadAttachment.success({ + attachment: mockPdfAttachment, + messageId, + path: `file:///${mockPdfAttachment.id}.pdf` + }) + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + successState, + messageId, + mockPdfAttachment.id + ); + expect(isDownloadingMessage).toBeFalsy(); + }); + it("should return false on a failed downloaded attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.failure({ + attachment: mockPdfAttachment, + messageId, + error: new Error("") + }) + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + failureState, + messageId, + mockPdfAttachment.id + ); + expect(isDownloadingMessage).toBeFalsy(); + }); + it("should return false on a cancelled downloaded attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const cancelledState = appReducer( + initialState, + downloadAttachment.cancel({ + attachment: mockPdfAttachment, + messageId + }) + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + cancelledState, + messageId, + mockPdfAttachment.id + ); + expect(isDownloadingMessage).toBeFalsy(); + }); + it("should return true on a cleared stated", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const clearedState = appReducer( + initialState, + clearRequestedAttachmentDownload() + ); + const isDownloadingMessage = isDownloadingMessageAttachmentSelector( + clearedState, + messageId, + mockPdfAttachment.id + ); + expect(isDownloadingMessage).toBeTruthy(); + }); + }); + + describe("hasErrorOccourredOnMessageAttachmentDownloadSelector", () => { + it("should return false on initial state", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const isError = hasErrorOccourredOnRequestedDownloadSelector( + initialState, + messageId, + mockPdfAttachment.id + ); + expect(isError).toBeFalsy(); + }); + it("should return false on a messageId-unmatching attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.failure({ + attachment: mockPdfAttachment, + messageId, + error: new Error("") + }) + ); + const isError = hasErrorOccourredOnRequestedDownloadSelector( + failureState, + "01HNWQ5YDG02JFGFH9523AC04Z" as UIMessageId, + mockPdfAttachment.id + ); + expect(isError).toBeFalsy(); + }); + it("should return false on an attachmentId-unmatching attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.failure({ + attachment: mockPdfAttachment, + messageId, + error: new Error("") + }) + ); + const isError = hasErrorOccourredOnRequestedDownloadSelector( + failureState, + messageId, + "potato" + ); + expect(isError).toBeFalsy(); + }); + it("should return true on a failed attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.failure({ + attachment: mockPdfAttachment, + messageId, + error: new Error("") + }) + ); + const isError = hasErrorOccourredOnRequestedDownloadSelector( + failureState, + messageId, + mockPdfAttachment.id + ); + expect(isError).toBeTruthy(); + }); + it("should return false on a successful attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.success({ + attachment: mockPdfAttachment, + messageId, + path: `file:///${mockPdfAttachment.id}.pdf` + }) + ); + const isError = hasErrorOccourredOnRequestedDownloadSelector( + failureState, + messageId, + mockPdfAttachment.id + ); + expect(isError).toBeFalsy(); + }); + it("should return false on a cancelled attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.cancel({ + attachment: mockPdfAttachment, + messageId + }) + ); + const isError = hasErrorOccourredOnRequestedDownloadSelector( + failureState, + messageId, + mockPdfAttachment.id + ); + expect(isError).toBeFalsy(); + }); + it("should return false on a failed attachment after clear state", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.failure({ + attachment: mockPdfAttachment, + messageId, + error: new Error("") + }) + ); + const clearState = appReducer( + failureState, + clearRequestedAttachmentDownload() + ); + const isError = hasErrorOccourredOnRequestedDownloadSelector( + clearState, + messageId, + mockPdfAttachment.id + ); + expect(isError).toBeFalsy(); + }); + }); + + describe("downloadPotForMessageAttachmentSelector", () => { + it("should return pot.none on initial state", () => { + const initialState = appReducer( + undefined, + applicationChangeState("active") + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + initialState, + messageId, + mockPdfAttachment.id + ); + expect(pot.isNone(downloadPot)).toBeTruthy(); + }); + it("should return pot.none on unmatching-messageId attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + initialState, + "01HNWR6BGZ3M8FN9Y61XS37K8C" as UIMessageId, + mockPdfAttachment.id + ); + expect(pot.isNone(downloadPot)).toBeTruthy(); + }); + it("should return pot.none on unmatching-attachmentId attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + initialState, + messageId, + "potato" + ); + expect(pot.isNone(downloadPot)).toBeTruthy(); + }); + it("should return pot.loading on a requested attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + initialState, + messageId, + mockPdfAttachment.id + ); + expect(pot.isLoading(downloadPot)).toBeTruthy(); + }); + it("should return pot.some on a successful attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const successfulState = appReducer( + initialState, + downloadAttachment.success({ + attachment: mockPdfAttachment, + messageId, + path: `file:///${mockPdfAttachment.id}.pdf` + }) + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + successfulState, + messageId, + mockPdfAttachment.id + ); + expect(pot.isSome(downloadPot)).toBeTruthy(); + }); + it("should return pot.error on a failed attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failureState = appReducer( + initialState, + downloadAttachment.failure({ + attachment: mockPdfAttachment, + messageId, + error: new Error("") + }) + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + failureState, + messageId, + mockPdfAttachment.id + ); + expect(pot.isError(downloadPot)).toBeTruthy(); + }); + it("should return pot.error on a cancelled attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const cancelledState = appReducer( + initialState, + downloadAttachment.cancel({ + attachment: mockPdfAttachment, + messageId + }) + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + cancelledState, + messageId, + mockPdfAttachment.id + ); + expect(pot.isNone(downloadPot)).toBeTruthy(); + }); + it("should return pot.error on a removed cached attachment", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const cachedState = appReducer( + initialState, + removeCachedAttachment({ + attachment: mockPdfAttachment, + messageId, + path: `file:///${mockPdfAttachment.id}.pdf` + }) + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + cachedState, + messageId, + mockPdfAttachment.id + ); + expect(pot.isNone(downloadPot)).toBeTruthy(); + }); + it("should return pot.some on a downloading attachment after clear requested download", () => { + const initialState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const clearRequestedState = appReducer( + initialState, + clearRequestedAttachmentDownload() + ); + const downloadPot = downloadPotForMessageAttachmentSelector( + clearRequestedState, + messageId, + mockPdfAttachment.id + ); + expect(pot.isLoading(downloadPot)).toBeTruthy(); + }); + }); + + describe("isRequestedAttachmentDownloadSelector", () => { + it("should return false on initial state", () => { + const initialState = appReducer( + undefined, + applicationChangeState("active") + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + initialState, + messageId, + mockPdfAttachment.id + ); + expect(isRequestedAttachmentDownload).toBeFalsy(); + }); + it("should return true on matching downloading attachment", () => { + const downloadingAttachmentState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + downloadingAttachmentState, + messageId, + mockPdfAttachment.id + ); + expect(isRequestedAttachmentDownload).toBeTruthy(); + }); + it("should return false on an messageId-unmatching downloading attachment", () => { + const downloadingAttachmentState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + downloadingAttachmentState, + "01HNWNXS6G2Y86HEFQ3AYSQA1Q" as UIMessageId, + mockPdfAttachment.id + ); + expect(isRequestedAttachmentDownload).toBeFalsy(); + }); + it("should return false on an attachmentId-unmatching downloading attachment", () => { + const downloadingAttachmentState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + downloadingAttachmentState, + messageId, + "potato" + ); + expect(isRequestedAttachmentDownload).toBeFalsy(); + }); + it("should return true on successful downloaded attachment", () => { + const downloadingAttachmentState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const successfulDownloadState = appReducer( + downloadingAttachmentState, + downloadAttachment.success({ + attachment: mockPdfAttachment, + messageId, + path: `file:///${mockPdfAttachment.id}.pdf` + }) + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + successfulDownloadState, + messageId, + mockPdfAttachment.id + ); + expect(isRequestedAttachmentDownload).toBeTruthy(); + }); + it("should return true on failed downloaded attachment", () => { + const downloadingAttachmentState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const failedDownloadState = appReducer( + downloadingAttachmentState, + downloadAttachment.failure({ + attachment: mockPdfAttachment, + messageId, + error: new Error("") + }) + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + failedDownloadState, + messageId, + mockPdfAttachment.id + ); + expect(isRequestedAttachmentDownload).toBeTruthy(); + }); + it("should return false on matching cancelled attachment download", () => { + const downloadingAttachmentState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const cancelledDownloadState = appReducer( + downloadingAttachmentState, + downloadAttachment.cancel({ + attachment: mockPdfAttachment, + messageId + }) + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + cancelledDownloadState, + messageId, + mockPdfAttachment.id + ); + expect(isRequestedAttachmentDownload).toBeFalsy(); + }); + it("should return false on clear requested download", () => { + const downloadingAttachmentState = appReducer( + undefined, + downloadAttachment.request({ + attachment: mockPdfAttachment, + messageId, + skipMixpanelTrackingOnFailure: false + }) + ); + const clearRequestedDownloadState = appReducer( + downloadingAttachmentState, + clearRequestedAttachmentDownload() + ); + const isRequestedAttachmentDownload = + isRequestedAttachmentDownloadSelector( + clearRequestedDownloadState, + messageId, + mockPdfAttachment.id + ); + expect(isRequestedAttachmentDownload).toBeFalsy(); + }); + }); }); diff --git a/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts b/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts index 98a572d8fc8..34490d1c8af 100644 --- a/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts +++ b/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts @@ -7,11 +7,16 @@ import { isThirdPartyMessageSelector, messageMarkdownSelector, messageTitleSelector, - thirdPartyFromIdSelector + thirdPartyFromIdSelector, + thirdPartyMessageAttachments } from "../thirdPartyById"; import { UIMessageDetails, UIMessageId } from "../../../types"; -import { ThirdPartyMessageDetails } from "../../../../../../definitions/backend/ThirdPartyMessage"; +import { + ThirdPartyMessage, + ThirdPartyMessageDetails +} from "../../../../../../definitions/backend/ThirdPartyMessage"; import { ServiceId } from "../../../../../../definitions/backend/ServiceId"; +import { ThirdPartyAttachment } from "../../../../../../definitions/backend/ThirdPartyAttachment"; describe("thirdPartyFromIdSelector", () => { it("Should return pot none for an unmatching message id", () => { @@ -277,3 +282,79 @@ describe("messageMarkdownSelector", () => { expect(messageMarkdown).toBe(thirdPartyMarkdown); }); }); + +describe("thirdPartyMessageAttachments", () => { + it("should return an empty array on initial state", () => { + const messageId = "01HNWRS7DP721KTC3SMCJ7G82E" as UIMessageId; + const initialState = appReducer( + undefined, + applicationChangeState("active") + ); + const attachments = thirdPartyMessageAttachments(initialState, messageId); + expect(attachments).toBeDefined(); + expect(attachments.length).toBe(0); + }); + it("should return an empty array on a third party message with no attachments", () => { + const messageId = "01HNWRS7DP721KTC3SMCJ7G82E" as UIMessageId; + const loadedThirdPartyMessage = appReducer( + undefined, + loadThirdPartyMessage.success({ + id: messageId, + content: { + third_party_message: {} + } as ThirdPartyMessageWithContent + }) + ); + const attachments = thirdPartyMessageAttachments( + loadedThirdPartyMessage, + messageId + ); + expect(attachments).toBeDefined(); + expect(attachments.length).toBe(0); + }); + it("should return an empty array on a third party message with empty attachments", () => { + const messageId = "01HNWRS7DP721KTC3SMCJ7G82E" as UIMessageId; + const loadedThirdPartyMessage = appReducer( + undefined, + loadThirdPartyMessage.success({ + id: messageId, + content: { + third_party_message: { + attachments: [] + } as ThirdPartyMessage + } as ThirdPartyMessageWithContent + }) + ); + const attachments = thirdPartyMessageAttachments( + loadedThirdPartyMessage, + messageId + ); + expect(attachments).toBeDefined(); + expect(attachments.length).toBe(0); + }); + it("should return an empty array on a third party message with empty attachments", () => { + const messageId = "01HNWRS7DP721KTC3SMCJ7G82E" as UIMessageId; + const thirdPartyAttachment = { + id: "1", + url: "https://invalid.url" + } as ThirdPartyAttachment; + const loadedThirdPartyMessage = appReducer( + undefined, + loadThirdPartyMessage.success({ + id: messageId, + content: { + third_party_message: { + attachments: [thirdPartyAttachment] + } as ThirdPartyMessage + } as ThirdPartyMessageWithContent + }) + ); + const attachments = thirdPartyMessageAttachments( + loadedThirdPartyMessage, + messageId + ); + expect(attachments).toBeDefined(); + expect(attachments.length).toBe(1); + expect(attachments[0]).toMatchObject(thirdPartyAttachment); + }); +}); diff --git a/ts/features/messages/store/reducers/__tests__/transformers.test.ts b/ts/features/messages/store/reducers/__tests__/transformers.test.ts index 1cc5873396e..df2802db384 100644 --- a/ts/features/messages/store/reducers/__tests__/transformers.test.ts +++ b/ts/features/messages/store/reducers/__tests__/transformers.test.ts @@ -1,7 +1,8 @@ import { CreatedMessageWithContentAndAttachments } from "../../../../../../definitions/backend/CreatedMessageWithContentAndAttachments"; +import { ThirdPartyAttachment } from "../../../../../../definitions/backend/ThirdPartyAttachment"; import { message_1 } from "../../../__mocks__/message"; -import { toUIMessageDetails } from "../transformers"; +import { attachmentDisplayName, toUIMessageDetails } from "../transformers"; const inputWithoutDueDate: CreatedMessageWithContentAndAttachments = { ...message_1, @@ -18,3 +19,21 @@ describe("`toUIMessageDetails` function", () => { }); }); }); + +describe("attachmentDisplayName", () => { + it("should properly convert name giving a display name source", () => { + const thirdPartyAttachment = { + id: "1", + name: "The name" + } as ThirdPartyAttachment; + const displayName = attachmentDisplayName(thirdPartyAttachment); + expect(displayName).toBe(thirdPartyAttachment.name); + }); + it("should properly convert name giving an unavailable name source", () => { + const thirdPartyAttachment = { + id: "1" + } as ThirdPartyAttachment; + const displayName = attachmentDisplayName(thirdPartyAttachment); + expect(displayName).toBe(thirdPartyAttachment.id); + }); +}); diff --git a/ts/features/messages/store/reducers/downloads.ts b/ts/features/messages/store/reducers/downloads.ts index 3cf6630f74e..e3234a27905 100644 --- a/ts/features/messages/store/reducers/downloads.ts +++ b/ts/features/messages/store/reducers/downloads.ts @@ -1,9 +1,13 @@ import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { createSelector } from "reselect"; import { getType } from "typesafe-actions"; -import { downloadAttachment, removeCachedAttachment } from "../actions"; +import { + DownloadAttachmentCancel, + clearRequestedAttachmentDownload, + downloadAttachment, + removeCachedAttachment +} from "../actions"; import { Action } from "../../../../store/actions/types"; import { IndexedById } from "../../../../store/helpers/indexer"; import { @@ -13,22 +17,28 @@ import { toSome } from "../../../../store/reducers/IndexedByIdPot"; import { GlobalState } from "../../../../store/reducers/types"; -import { UIAttachment, UIMessageId, UIAttachmentId } from "../../types"; +import { UIMessageId } from "../../types"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; export type Download = { - attachment: UIAttachment; + attachment: ThirdPartyAttachment; path: string; }; -export type DownloadError = { - attachment: UIAttachment; - error: T; +export type DownloadError = { + attachment: ThirdPartyAttachment; + error: Error; +}; + +type RequestedDownload = { + messageId: UIMessageId; + attachmentId: string; }; export type Downloads = Record< UIMessageId, - IndexedById> ->; + IndexedById> | undefined +> & { requestedDownload?: RequestedDownload }; export const INITIAL_STATE: Downloads = {}; @@ -44,16 +54,20 @@ export const downloadsReducer = ( return { ...state, [action.payload.messageId]: toLoading( - action.payload.id, + action.payload.attachment.id, state[action.payload.messageId] ?? {} - ) + ), + requestedDownload: { + messageId: action.payload.messageId, + attachmentId: action.payload.attachment.id + } }; case getType(downloadAttachment.success): return { ...state, - [action.payload.attachment.messageId]: toSome( + [action.payload.messageId]: toSome( action.payload.attachment.id, - state[action.payload.attachment.messageId] ?? {}, + state[action.payload.messageId] ?? {}, { attachment: action.payload.attachment, path: action.payload.path @@ -63,9 +77,9 @@ export const downloadsReducer = ( case getType(downloadAttachment.failure): return { ...state, - [action.payload.attachment.messageId]: toError( + [action.payload.messageId]: toError( action.payload.attachment.id, - state[action.payload.attachment.messageId] ?? {}, + state[action.payload.messageId] ?? {}, action.payload.error ) }; @@ -74,18 +88,27 @@ export const downloadsReducer = ( return { ...state, [action.payload.messageId]: toNone( - action.payload.id, + action.payload.attachment.id, state[action.payload.messageId] ?? {} + ), + requestedDownload: requestDownloadAfterCancelledAction( + state, + action.payload ) }; case getType(removeCachedAttachment): return { ...state, - [action.payload.attachment.messageId]: toNone( + [action.payload.messageId]: toNone( action.payload.attachment.id, - state[action.payload.attachment.messageId] ?? {} + state[action.payload.messageId] ?? {} ) }; + case getType(clearRequestedAttachmentDownload): + return { + ...state, + requestedDownload: undefined + }; } return state; }; @@ -93,27 +116,56 @@ export const downloadsReducer = ( /** * From attachment to the download pot */ -export const downloadPotForMessageAttachmentSelector = createSelector( - [ - (state: GlobalState) => state.entities.messages.downloads, - ( - _: GlobalState, - attachment: { messageId: UIMessageId; id: UIAttachmentId } - ) => attachment - ], - (downloads, attachment): pot.Pot => { - const download = downloads[attachment.messageId]; - if (download) { - return download[attachment.id] ?? pot.none; - } - return pot.none; - } -); +export const downloadPotForMessageAttachmentSelector = ( + state: GlobalState, + messageId: UIMessageId, + attachmentId: string +) => state.entities.messages.downloads[messageId]?.[attachmentId] ?? pot.none; + +export const isRequestedAttachmentDownloadSelector = ( + state: GlobalState, + messageId: UIMessageId, + attachmentId: string +) => + isRequestedDownloadMatch( + state.entities.messages.downloads.requestedDownload, + messageId, + attachmentId + ); + +export const isDownloadingMessageAttachmentSelector = ( + state: GlobalState, + messageId: UIMessageId, + attachmentId: string +) => + pipe( + state.entities.messages.downloads[messageId], + O.fromNullable, + O.chainNullableK(messageDownloads => messageDownloads[attachmentId]), + O.getOrElseW(() => pot.none), + pot.isLoading + ); + +export const hasErrorOccourredOnRequestedDownloadSelector = ( + state: GlobalState, + messageId: UIMessageId, + attachmentId: string +) => + pipe( + state.entities.messages.downloads[messageId], + O.fromNullable, + O.chainNullableK(messageDownloads => messageDownloads[attachmentId]), + O.filter(() => + isRequestedAttachmentDownloadSelector(state, messageId, attachmentId) + ), + O.getOrElseW(() => pot.none), + downloadPot => pot.isError(downloadPot) && !pot.isSome(downloadPot) + ); export const downloadedMessageAttachmentSelector = ( state: GlobalState, messageId: UIMessageId, - attachmentId: UIAttachmentId + attachmentId: string ) => pipe( state.entities.messages.downloads[messageId], @@ -123,3 +175,23 @@ export const downloadedMessageAttachmentSelector = ( O.flatten, O.toUndefined ); + +const isRequestedDownloadMatch = ( + requestedDownload: RequestedDownload | undefined, + messageId: UIMessageId, + attachmentId: string +) => + !!requestedDownload && + requestedDownload.messageId === messageId && + requestedDownload.attachmentId === attachmentId; +const requestDownloadAfterCancelledAction = ( + state: Downloads, + cancelActionPayload: DownloadAttachmentCancel +) => + isRequestedDownloadMatch( + state.requestedDownload, + cancelActionPayload.messageId, + cancelActionPayload.attachment.id + ) + ? undefined + : state.requestedDownload; diff --git a/ts/features/messages/store/reducers/thirdPartyById.ts b/ts/features/messages/store/reducers/thirdPartyById.ts index 8eba504dd75..6fd7ebe0339 100644 --- a/ts/features/messages/store/reducers/thirdPartyById.ts +++ b/ts/features/messages/store/reducers/thirdPartyById.ts @@ -3,6 +3,7 @@ import { NonEmptyString } from "@pagopa/ts-commons/lib/strings"; import { getType } from "typesafe-actions"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; import { ThirdPartyMessageWithContent } from "../../../../../definitions/backend/ThirdPartyMessageWithContent"; import { loadThirdPartyMessage, reloadAllMessages } from "../actions"; import { Action } from "../../../../store/actions/types"; @@ -14,8 +15,7 @@ import { } from "../../../../store/reducers/IndexedByIdPot"; import { GlobalState } from "../../../../store/reducers/types"; import { RemoteContentDetails } from "../../../../../definitions/backend/RemoteContentDetails"; -import { UIAttachmentId, UIMessageDetails, UIMessageId } from "../../types"; -import { attachmentFromThirdPartyMessage } from "./transformers"; +import { UIMessageDetails, UIMessageId } from "../../types"; export type ThirdPartyById = IndexedById< pot.Pot @@ -84,10 +84,23 @@ export const messageMarkdownSelector = ( messageContent.markdown ); -export const thirdPartyMessageUIAttachment = +export const thirdPartyMessageAttachments = ( + state: GlobalState, + ioMessageId: UIMessageId +): ReadonlyArray => + pipe( + thirdPartyFromIdSelector(state, ioMessageId), + pot.toOption, + O.chainNullableK( + thirdPartyMessage => thirdPartyMessage.third_party_message.attachments + ), + O.getOrElse>(() => []) + ); + +export const thirdPartyMessageAttachment = (state: GlobalState) => (ioMessageId: UIMessageId) => - (thirdPartyMessageAttachmentId: UIAttachmentId) => + (thirdPartyMessageAttachmentId: string): O.Option => pipe( thirdPartyFromIdSelector(state, ioMessageId), pot.toOption, @@ -100,12 +113,6 @@ export const thirdPartyMessageUIAttachment = thirdPartyMessageAttachment.id === (thirdPartyMessageAttachmentId as string as NonEmptyString) ) - ), - O.map(thirdPartyMessageAttachment => - attachmentFromThirdPartyMessage( - ioMessageId, - thirdPartyMessageAttachment - ) ) ); diff --git a/ts/features/messages/store/reducers/transformers.ts b/ts/features/messages/store/reducers/transformers.ts index c6a3aaabaaf..a11141fe2c8 100644 --- a/ts/features/messages/store/reducers/transformers.ts +++ b/ts/features/messages/store/reducers/transformers.ts @@ -1,5 +1,3 @@ -import { pipe } from "fp-ts/lib/function"; -import * as O from "fp-ts/lib/Option"; import { CreatedMessageWithContentAndAttachments } from "../../../../../definitions/backend/CreatedMessageWithContentAndAttachments"; import { EnrichedMessage } from "../../../../../definitions/backend/EnrichedMessage"; import { MessageCategory } from "../../../../../definitions/backend/MessageCategory"; @@ -7,14 +5,11 @@ import { TagEnum } from "../../../../../definitions/backend/MessageCategoryBase" import { MessageStatusAttributes } from "../../../../../definitions/backend/MessageStatusAttributes"; import { PublicMessage } from "../../../../../definitions/backend/PublicMessage"; import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; -import { ThirdPartyMessageWithContent } from "../../../../../definitions/backend/ThirdPartyMessageWithContent"; import { apiUrlPrefix } from "../../../../config"; import { ContentTypeValues } from "../../types/contentType"; import { EUCovidCertificate, PaymentData, - UIAttachment, - UIAttachmentId, UIMessage, UIMessageDetails, UIMessageId @@ -107,43 +102,15 @@ export const toUIMessageDetails = ( }; }; -const generateAttachmentUrl = (messageId: string, attachmentUrl: string) => - `${apiUrlPrefix}/api/v1/third-party-messages/${messageId}/attachments/${attachmentUrl.replace( +export const attachmentDisplayName = (attachment: ThirdPartyAttachment) => + attachment.name ?? attachment.id; +export const attachmentContentType = (attachment: ThirdPartyAttachment) => + attachment.content_type ?? ContentTypeValues.applicationOctetStream; +export const attachmentDownloadUrl = ( + messageId: UIMessageId, + attachment: ThirdPartyAttachment +) => + `${apiUrlPrefix}/api/v1/third-party-messages/${messageId}/attachments/${attachment.url.replace( /^\//g, // note that attachmentUrl might contains a / at the beginning, so let's strip it "" )}`; - -export const attachmentsFromThirdPartyMessage = ( - messageFromApi: ThirdPartyMessageWithContent -): O.Option> => - pipe( - messageFromApi.third_party_message.attachments, - O.fromNullable, - O.map(thirdPartyMessageAttachmentArray => - thirdPartyMessageAttachmentArray.map(thirdPartyMessageAttachment => - attachmentFromThirdPartyMessage( - messageFromApi.id, - thirdPartyMessageAttachment - ) - ) - ) - ); - -export const attachmentFromThirdPartyMessage = ( - thirdPartyMessageId: string, - thirPartyMessageAttachment: ThirdPartyAttachment -): UIAttachment => ({ - messageId: thirdPartyMessageId as UIMessageId, - id: thirPartyMessageAttachment.id as string as UIAttachmentId, - displayName: thirPartyMessageAttachment.name ?? thirPartyMessageAttachment.id, - contentType: - thirPartyMessageAttachment.content_type ?? - ContentTypeValues.applicationOctetStream, - resourceUrl: { - href: generateAttachmentUrl( - thirdPartyMessageId, - thirPartyMessageAttachment.url - ) - }, - category: thirPartyMessageAttachment.category -}); diff --git a/ts/features/messages/types/__tests__/digitalInformationUnit.test.ts b/ts/features/messages/types/__tests__/digitalInformationUnit.test.ts deleted file mode 100644 index 431b437bb66..00000000000 --- a/ts/features/messages/types/__tests__/digitalInformationUnit.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Byte, formatByte } from "../digitalInformationUnit"; - -describe("formatDigitalInformationUnit", () => { - jest.useFakeTimers(); - describe("When formatByte is called", () => { - describe("And the argument is < 1024", () => { - it("Should format using B", () => { - const formatted0Bytes = formatByte(0 as Byte); - expect(formatted0Bytes).toBe("0.00 B"); - const formattedBytes = formatByte(125 as Byte); - expect(formattedBytes).toBe("125.00 B"); - const formatted1024Bytes = formatByte(1023 as Byte); - expect(formatted1024Bytes).toBe("1,023.00 B"); - }); - }); - describe("And the argument is 1024 <= x < 1024*1024", () => { - it("Should format using kB", () => { - const formatted = formatByte(1024 as Byte); - expect(formatted).toBe("1.00 kB"); - const formattedMax = formatByte((1024 * 1024 - 1) as Byte); - expect(formattedMax).toBe("1,024.00 kB"); - }); - }); - describe("And the argument is 1024*1024 <= x < 1024*1024*1024", () => { - it("Should format using MB", () => { - const formatted = formatByte((1024 * 1024) as Byte); - expect(formatted).toBe("1.00 MB"); - const formattedMax = formatByte((1024 * 1024 * 1024 - 1) as Byte); - expect(formattedMax).toBe("1,024.00 MB"); - }); - }); - describe("And the argument is 1024*1024*1024 <= x < 1024*1024*1024*1024", () => { - it("Should format using GB", () => { - const formatted = formatByte((1024 * 1024 * 1024) as Byte); - expect(formatted).toBe("1.00 GB"); - const formattedMax = formatByte( - (1024 * 1024 * 1024 * 1024 - 1) as Byte - ); - expect(formattedMax).toBe("1,024.00 GB"); - }); - }); - describe("And the argument is 1024*1024*1024*1024 <= x", () => { - it("Should format using TB", () => { - const formatted = formatByte((1024 * 1024 * 1024 * 1024) as Byte); - expect(formatted).toBe("1.00 TB"); - const formatted1 = formatByte( - (1024 * 1024 * 1024 * 1024 * 1024 * 1024) as Byte - ); - expect(formatted1).toBe("1,048,576.00 TB"); - - const formatted2 = formatByte( - (1024 * - 1024 * - 1024 * - 1024 * - 1024 * - 1024 * - 1024 * - 1024 * - 1024 * - 1024 * - 1024 * - 1024) as Byte - ); - expect(formatted2).toBe("1.2089258196146292e+24 TB"); - }); - }); - }); -}); diff --git a/ts/features/messages/types/digitalInformationUnit.ts b/ts/features/messages/types/digitalInformationUnit.ts deleted file mode 100644 index 0cd7b930030..00000000000 --- a/ts/features/messages/types/digitalInformationUnit.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { IUnitTag } from "@pagopa/ts-commons/lib/units"; -import I18n from "../../../i18n"; - -export type Byte = number & IUnitTag<"Byte">; -export type KiloByte = number & IUnitTag<"KiloByte">; -export type MegaByte = number & IUnitTag<"MegaByte">; -export type GigaByte = number & IUnitTag<"GigaByte">; -export type TeraByte = number & IUnitTag<"TeraByte">; - -const unitOrder = ["B", "kB", "MB", "GB", "TB"]; - -/** - * Generate a textual representation for a Digital Information Unit - * @param b - * @param startIndex the starting Digital Information Unit - */ -const internalFormatDigitalInformationUnit = ( - b: number, - startIndex: number -) => { - // eslint-disable-next-line functional/no-let - let acc: number = b; - // eslint-disable-next-line functional/no-let - let index = startIndex; - while (acc >= 1024 && index < unitOrder.length - 1) { - acc /= 1024; - index++; - } - const formatRepresentation = I18n.toNumber(acc, { - precision: 2, - delimiter: I18n.t("global.localization.delimiterSeparator"), - separator: I18n.t("global.localization.decimalSeparator") - }); - - return `${formatRepresentation} ${unitOrder[index]}`; -}; - -export const formatByte = (b: Byte) => - internalFormatDigitalInformationUnit(b, 0); - -export const formatKiloByte = (kB: KiloByte) => - internalFormatDigitalInformationUnit(kB, 1); -export const formatMegaByte = (mB: MegaByte) => - internalFormatDigitalInformationUnit(mB, 2); -export const formatGigaByte = (gB: GigaByte) => - internalFormatDigitalInformationUnit(gB, 3); -export const formatTeraByte = (tB: TeraByte) => - internalFormatDigitalInformationUnit(tB, 4); diff --git a/ts/features/messages/types/index.ts b/ts/features/messages/types/index.ts index 7c8fd6d587a..f90227f2b8a 100644 --- a/ts/features/messages/types/index.ts +++ b/ts/features/messages/types/index.ts @@ -1,5 +1,4 @@ import { IUnitTag } from "@pagopa/ts-commons/lib/units"; -import { ValidUrl } from "@pagopa/ts-commons/lib/url"; import { CreatedMessageWithContentAndAttachments } from "../../../../definitions/backend/CreatedMessageWithContentAndAttachments"; import { FiscalCode } from "../../../../definitions/backend/FiscalCode"; import { MessageBodyMarkdown } from "../../../../definitions/backend/MessageBodyMarkdown"; @@ -10,7 +9,6 @@ import { PublicMessage } from "../../../../definitions/backend/PublicMessage"; import { ServiceId } from "../../../../definitions/backend/ServiceId"; import { TimeToLiveSeconds } from "../../../../definitions/backend/TimeToLiveSeconds"; import { MessageCategory } from "../../../../definitions/backend/MessageCategory"; -import { Byte } from "./digitalInformationUnit"; /** * The unique ID of a UIMessage and UIMessageDetails, used to avoid passing the wrong ID as parameters @@ -67,35 +65,3 @@ export type PaymentData = { invalidAfterDueDate?: boolean; noticeNumber: PaymentNoticeNumber; }; - -export type Attachment = { - name: string; - content: string; - mimeType: string; -}; - -export type UIAttachmentId = string & IUnitTag<"UIAttachmentId">; - -export type WithSkipMixpanelTrackingOnFailure = T & { - skipMixpanelTrackingOnFailure: boolean; -}; - -/** - * Represent an attachment with the metadata and resourceUrl to retrieve the attachment - */ -export type UIAttachment = { - // the message ID that contains the attachment - messageId: UIMessageId; - // the ID of the attachment (only guaranteed to be unique per message) - id: UIAttachmentId; - // a display name for the file - displayName: string; - // a generic content type for a file - contentType: string; - // size (in Byte) of the attachment, for display purpose - size?: Byte; - // The url that can be used to retrieve the resource - resourceUrl: ValidUrl; - // This category is needed to distinguish between generic and f24 attachments - category?: string; -}; diff --git a/ts/features/pn/analytics/index.ts b/ts/features/pn/analytics/index.ts index b3a1c4ccaa6..e8fbfbfe2dc 100644 --- a/ts/features/pn/analytics/index.ts +++ b/ts/features/pn/analytics/index.ts @@ -4,12 +4,12 @@ import * as O from "fp-ts/lib/Option"; import { mixpanelTrack } from "../../../mixpanel"; import { PNMessage } from "../../pn/store/types/types"; import { NotificationStatusHistoryElement } from "../../../../definitions/pn/NotificationStatusHistoryElement"; -import { UIAttachment } from "../../messages/types"; import { booleanToYesNo, buildEventProperties, numberToYesNoOnThreshold } from "../../../utils/analytics"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; export interface TrackPNPaymentStatus { paymentCount: number; @@ -180,7 +180,7 @@ export function trackPNNotificationLoadSuccess(pnMessage: PNMessage) { buildEventProperties("TECH", undefined, { NOTIFICATION_LAST_STATUS: status, HAS_ATTACHMENTS: pipe( - pnMessage.attachments as Array, + pnMessage.attachments as Array, O.fromNullable, O.map(A.isNonEmpty), O.getOrElse(() => false) diff --git a/ts/features/pn/components/LegacyMessageDetails.tsx b/ts/features/pn/components/LegacyMessageDetails.tsx index b03bf7d4d1b..0b5772216b8 100644 --- a/ts/features/pn/components/LegacyMessageDetails.tsx +++ b/ts/features/pn/components/LegacyMessageDetails.tsx @@ -15,9 +15,9 @@ import { H5 } from "../../../components/core/typography/H5"; import I18n from "../../../i18n"; import { useIOSelector } from "../../../store/hooks"; import { pnFrontendUrlSelector } from "../../../store/reducers/backendStatus"; -import { UIAttachment, UIMessageId } from "../../messages/types"; +import { UIMessageId } from "../../messages/types"; import { clipboardSetStringWithFeedback } from "../../../utils/clipboard"; -import { LegacyMessageAttachments } from "../../messages/components/LegacyMessageAttachments"; +import { LegacyMessageAttachments } from "../../messages/components/MessageDetail/LegacyMessageAttachments"; import PN_ROUTES from "../navigation/routes"; import { PNMessage } from "../store/types/types"; import { NotificationPaymentInfo } from "../../../../definitions/pn/NotificationPaymentInfo"; @@ -32,6 +32,7 @@ import { import { LevelEnum } from "../../../../definitions/content/SectionStatus"; import { ATTACHMENT_CATEGORY } from "../../messages/types/attachmentCategory"; import { maxVisiblePaymentCountGenerator } from "../utils"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; import { MESSAGES_ROUTES } from "../../messages/navigation/routes"; import { useIONavigation } from "../../../navigation/params/AppParamsList"; import { LegacyMessageDetailsContent } from "./LegacyMessageDetailsContent"; @@ -65,7 +66,7 @@ export const LegacyMessageDetails = ({ const partitionedAttachments = pipe( message.attachments, O.fromNullable, - O.getOrElse>(() => []), + O.getOrElse>(() => []), RA.partition(attachment => attachment.category === ATTACHMENT_CATEGORY.F24) ); @@ -78,7 +79,7 @@ export const LegacyMessageDetails = ({ : undefined; const openAttachment = useCallback( - (attachment: UIAttachment) => { + (attachment: ThirdPartyAttachment) => { trackPNAttachmentOpening(attachment.category); navigation.navigate(MESSAGES_ROUTES.MESSAGES_NAVIGATOR, { screen: PN_ROUTES.MAIN, @@ -137,6 +138,7 @@ export const LegacyMessageDetails = ({ @@ -153,7 +155,11 @@ export const LegacyMessageDetails = ({ {!isCancelled && RA.isNonEmpty(f24List) ? ( <> - + ) : null} diff --git a/ts/features/messages/components/MessageAttachments.tsx b/ts/features/pn/components/MessageAttachments.tsx similarity index 51% rename from ts/features/messages/components/MessageAttachments.tsx rename to ts/features/pn/components/MessageAttachments.tsx index 981f42200d5..4c43ab765eb 100644 --- a/ts/features/messages/components/MessageAttachments.tsx +++ b/ts/features/pn/components/MessageAttachments.tsx @@ -2,29 +2,39 @@ import React from "react"; import { View } from "react-native"; import * as pot from "@pagopa/ts-commons/lib/pot"; import { VSpacer, WithTestID } from "@pagopa/io-app-design-system"; -import { UIAttachment } from "../types"; -import { ContentTypeValues } from "../types/contentType"; -import { useAttachmentDownload } from "../hooks/useAttachmentDownload"; -import { ModuleAttachment, ModuleAttachmentProps } from "./ModuleAttachment"; +import { ContentTypeValues } from "../../messages/types/contentType"; +import { + LegacyModuleAttachment, + LegacyModuleAttachmentProps +} from "../../messages/components/MessageDetail/LegacyModuleAttachment"; +import { useLegacyAttachmentDownload } from "../../messages/hooks/useLegacyAttachmentDownload"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; +import { UIMessageId } from "../../messages/types"; +import { + attachmentContentType, + attachmentDisplayName +} from "../../messages/store/reducers/transformers"; type PartialProps = { downloadAttachmentBeforePreview?: boolean; - openPreview: (attachment: UIAttachment) => void; + openPreview: (attachment: ThirdPartyAttachment) => void; }; type MessageAttachmentProps = { - attachment: UIAttachment; + attachment: ThirdPartyAttachment; + messageId: UIMessageId; } & PartialProps; type MessageAttachmentsProps = WithTestID< { - attachments: ReadonlyArray; + attachments: ReadonlyArray; + messageId: UIMessageId; } & PartialProps >; const getFormatByContentType = ( - contentType: UIAttachment["contentType"] -): ModuleAttachmentProps["format"] => { + contentType: string +): LegacyModuleAttachmentProps["format"] => { switch (contentType) { case ContentTypeValues.applicationPdf: return "pdf"; @@ -36,19 +46,23 @@ const getFormatByContentType = ( const AttachmentItem = ({ attachment, openPreview, - downloadAttachmentBeforePreview + downloadAttachmentBeforePreview, + messageId }: MessageAttachmentProps) => { - const { downloadPot, onAttachmentSelect } = useAttachmentDownload( + const { downloadPot, onAttachmentSelect } = useLegacyAttachmentDownload( attachment, + messageId, downloadAttachmentBeforePreview, openPreview ); + const name = attachmentDisplayName(attachment); + const mimeType = attachmentContentType(attachment); return ( - diff --git a/ts/features/pn/components/MessageDetails.tsx b/ts/features/pn/components/MessageDetails.tsx index bb5ce071485..97026526f6d 100644 --- a/ts/features/pn/components/MessageDetails.tsx +++ b/ts/features/pn/components/MessageDetails.tsx @@ -6,12 +6,13 @@ import * as RA from "fp-ts/lib/ReadonlyArray"; import * as SEP from "fp-ts/lib/Separated"; import { HSpacer, IOStyles, Tag, VSpacer } from "@pagopa/io-app-design-system"; import { ServicePublic } from "../../../../definitions/backend/ServicePublic"; -import { UIAttachment, UIMessageId } from "../../messages/types"; +import { UIMessageId } from "../../messages/types"; import { PNMessage } from "../store/types/types"; import { NotificationPaymentInfo } from "../../../../definitions/pn/NotificationPaymentInfo"; import { MessageDetailHeader } from "../../messages/components/MessageDetail/MessageDetailHeader"; import { ATTACHMENT_CATEGORY } from "../../messages/types/attachmentCategory"; import I18n from "../../../i18n"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; import { MessageDetailsContent } from "./MessageDetailsContent"; type MessageDetailsProps = { @@ -25,7 +26,7 @@ export const MessageDetails = ({ message, service }: MessageDetailsProps) => { const partitionedAttachments = pipe( message.attachments, O.fromNullable, - O.getOrElse>(() => []), + O.getOrElse>(() => []), RA.partition(attachment => attachment.category === ATTACHMENT_CATEGORY.F24) ); diff --git a/ts/features/pn/components/MessageF24.tsx b/ts/features/pn/components/MessageF24.tsx index 04a5b07a71a..1480b24523f 100644 --- a/ts/features/pn/components/MessageF24.tsx +++ b/ts/features/pn/components/MessageF24.tsx @@ -8,18 +8,24 @@ import { } from "@pagopa/io-app-design-system"; import I18n from "../../../i18n"; import { trackPNShowF24 } from "../analytics"; -import { UIAttachment } from "../../messages/types"; import { useF24BottomSheet } from "../hooks/useF24BottomSheet"; -import { MessageAttachments } from "../../messages/components/MessageAttachments"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; +import { UIMessageId } from "../../messages/types"; +import { MessageAttachments } from "./MessageAttachments"; import { MessageDetailsSection } from "./MessageDetailsSection"; type Props = { - attachments: ReadonlyArray; - openPreview: (attachment: UIAttachment) => void; + attachments: ReadonlyArray; + messageId: UIMessageId; + openPreview: (attachment: ThirdPartyAttachment) => void; }; -const MessageF24Content = ({ attachments, openPreview }: Props) => { - const { present, bottomSheet } = useF24BottomSheet(attachments, openPreview); +const MessageF24Content = ({ attachments, messageId, openPreview }: Props) => { + const { present, bottomSheet } = useF24BottomSheet( + attachments, + messageId, + openPreview + ); if (attachments.length === 1) { return ( @@ -27,6 +33,7 @@ const MessageF24Content = ({ attachments, openPreview }: Props) => { testID="f24-list-container" attachments={attachments.slice(0, 1)} downloadAttachmentBeforePreview={true} + messageId={messageId} openPreview={openPreview} /> ); diff --git a/ts/features/pn/components/__test__/LegacyMessageDetails.test.tsx b/ts/features/pn/components/__test__/LegacyMessageDetails.test.tsx index a7ec40d4d30..402fa3aa99e 100644 --- a/ts/features/pn/components/__test__/LegacyMessageDetails.test.tsx +++ b/ts/features/pn/components/__test__/LegacyMessageDetails.test.tsx @@ -8,18 +8,19 @@ import { LegacyMessageDetails } from "../LegacyMessageDetails"; import { GlobalState } from "../../../../store/reducers/types"; import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWrapper"; import PN_ROUTES from "../../navigation/routes"; -import { UIAttachment, UIMessageId } from "../../../messages/types"; +import { UIMessageId } from "../../../messages/types"; import { PNMessage } from "../../store/types/types"; import { Download } from "../../../messages/store/reducers/downloads"; import { NotificationRecipient } from "../../../../../definitions/pn/NotificationRecipient"; import { ATTACHMENT_CATEGORY } from "../../../messages/types/attachmentCategory"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; const mockedOnAttachmentSelect = jest.fn(); -jest.mock("../../../messages/hooks/useAttachmentDownload", () => ({ - useAttachmentDownload: ( - _attachment: UIAttachment, - _openPreview: (attachment: UIAttachment) => void +jest.mock("../../../messages/hooks/useLegacyAttachmentDownload", () => ({ + useLegacyAttachmentDownload: ( + _attachment: ThirdPartyAttachment, + _openPreview: (attachment: ThirdPartyAttachment) => void ) => ({ onAttachmentSelect: mockedOnAttachmentSelect, downloadPot: { kind: "PotNone" } as pot.Pot @@ -146,22 +147,20 @@ const generatePnMessage = (): PNMessage => ({ ] as Array, attachments: [ { - messageId: generateTestMessageId(), id: "1", - displayName: "A First Attachment", - contentType: "application/pdf", + name: "A First Attachment", + content_type: "application/pdf", category: ATTACHMENT_CATEGORY.DOCUMENT, - resourceUrl: { href: "/resource/attachment1.pdf" } + url: "/resource/attachment1.pdf" }, { - messageId: generateTestMessageId(), id: "2", - displayName: "A Second Attachment", - contentType: "application/pdf", + name: "A Second Attachment", + content_type: "application/pdf", category: ATTACHMENT_CATEGORY.DOCUMENT, - resourceUrl: { href: "/resource/attachment2.pdf" } + url: "/resource/attachment2.pdf" } - ] as Array + ] as Array }); const generateComponentProperties = (pnMessage: PNMessage) => ({ payments: undefined, diff --git a/ts/features/messages/components/__test__/MessageAttachments.test.tsx b/ts/features/pn/components/__test__/MessageAttachments.test.tsx similarity index 87% rename from ts/features/messages/components/__test__/MessageAttachments.test.tsx rename to ts/features/pn/components/__test__/MessageAttachments.test.tsx index fae4747db93..d4eaa98d24b 100644 --- a/ts/features/messages/components/__test__/MessageAttachments.test.tsx +++ b/ts/features/pn/components/__test__/MessageAttachments.test.tsx @@ -7,10 +7,11 @@ import { appReducer } from "../../../../store/reducers"; import { GlobalState } from "../../../../store/reducers/types"; import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWrapper"; import { MessageAttachments } from "../MessageAttachments"; -import { Downloads } from "../../store/reducers/downloads"; -import { mockPdfAttachment } from "../../__mocks__/attachment"; -import { downloadAttachment } from "../../store/actions"; +import { Downloads } from "../../../messages/store/reducers/downloads"; +import { mockPdfAttachment } from "../../../messages/__mocks__/attachment"; +import { downloadAttachment } from "../../../messages/store/actions"; import I18n from "../../../../i18n"; +import { messageId_1 } from "../../../messages/__mocks__/messages"; const mockOpenPreview = jest.fn(); const mockShowToast = jest.fn(); @@ -35,10 +36,11 @@ describe("MessageAttachments", () => { const { component } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: jest.fn() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: loadingPot } } @@ -66,10 +68,11 @@ describe("MessageAttachments", () => { const { component } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: jest.fn() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: notLoadingPot } } @@ -88,10 +91,11 @@ describe("MessageAttachments", () => { const { store } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: jest.fn() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: pot.noneLoading } } @@ -101,6 +105,7 @@ describe("MessageAttachments", () => { store.dispatch( downloadAttachment.failure({ attachment: mockPdfAttachment, + messageId: messageId_1, error: new Error() }) ) @@ -114,10 +119,11 @@ describe("MessageAttachments", () => { const { store } = renderComponent( { attachments: [mockPdfAttachment], + messageId: messageId_1, openPreview: mockOpenPreview() }, { - [mockPdfAttachment.messageId]: { + [messageId_1]: { [mockPdfAttachment.id]: pot.noneLoading } } @@ -127,6 +133,7 @@ describe("MessageAttachments", () => { store.dispatch( downloadAttachment.success({ path: "path", + messageId: messageId_1, attachment: mockPdfAttachment }) ) diff --git a/ts/features/pn/components/__test__/MessageF24.test.tsx b/ts/features/pn/components/__test__/MessageF24.test.tsx index 688d10fc5bc..c0fae4fb6c3 100644 --- a/ts/features/pn/components/__test__/MessageF24.test.tsx +++ b/ts/features/pn/components/__test__/MessageF24.test.tsx @@ -2,7 +2,6 @@ import React from "react"; import { createStore } from "redux"; import { act, fireEvent, within } from "@testing-library/react-native"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { UIAttachment } from "../../../messages/types"; import { MessageF24 } from "../MessageF24"; import I18n from "../../../../i18n"; import { @@ -13,13 +12,15 @@ import { appReducer } from "../../../../store/reducers"; import { applicationChangeState } from "../../../../store/actions/application"; import { Download } from "../../../messages/store/reducers/downloads"; import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWrapper"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; +import { messageId_1 } from "../../../messages/__mocks__/messages"; const mockOpenPreview = jest.fn(); -jest.mock("../../../messages/hooks/useAttachmentDownload", () => ({ - useAttachmentDownload: ( - _attachment: UIAttachment, - _openPreview: (attachment: UIAttachment) => void +jest.mock("../../../messages/hooks/useLegacyAttachmentDownload", () => ({ + useLegacyAttachmentDownload: ( + _attachment: ThirdPartyAttachment, + _openPreview: (attachment: ThirdPartyAttachment) => void ) => ({ onAttachmentSelect: mockOpenPreview, downloadPot: { kind: "PotNone" } as pot.Pot @@ -110,14 +111,20 @@ describe("MessageF24 component", () => { }); const renderComponent = ( - attachments: ReadonlyArray, - openPreview: (attachment: UIAttachment) => void + attachments: ReadonlyArray, + openPreview: (attachment: ThirdPartyAttachment) => void ) => { const globalState = appReducer(undefined, applicationChangeState("active")); const store = createStore(appReducer, globalState as any); return renderScreenWithNavigationStoreContext( - () => , + () => ( + + ), "DUMMY", {}, store diff --git a/ts/features/pn/hooks/useF24BottomSheet.tsx b/ts/features/pn/hooks/useF24BottomSheet.tsx index dc0f4d8befc..b99a4e12241 100644 --- a/ts/features/pn/hooks/useF24BottomSheet.tsx +++ b/ts/features/pn/hooks/useF24BottomSheet.tsx @@ -1,12 +1,14 @@ import React from "react"; -import { MessageAttachments } from "../../messages/components/MessageAttachments"; -import { UIAttachment } from "../../messages/types"; +import { MessageAttachments } from "../components/MessageAttachments"; import { useIOBottomSheetAutoresizableModal } from "../../../utils/hooks/bottomSheet"; import I18n from "../../../i18n"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; +import { UIMessageId } from "../../messages/types"; export const useF24BottomSheet = ( - attachments: ReadonlyArray, - openPreview: (attachment: UIAttachment) => void + attachments: ReadonlyArray, + messageId: UIMessageId, + openPreview: (attachment: ThirdPartyAttachment) => void ) => { const { present, bottomSheet, dismiss } = useIOBottomSheetAutoresizableModal( { @@ -15,7 +17,8 @@ export const useF24BottomSheet = ( testID="f24-list-container-bs" attachments={attachments} downloadAttachmentBeforePreview={true} - openPreview={(attachment: UIAttachment) => { + messageId={messageId} + openPreview={(attachment: ThirdPartyAttachment) => { dismiss(); openPreview(attachment); }} diff --git a/ts/features/pn/screens/AttachmentPreviewScreen.tsx b/ts/features/pn/screens/AttachmentPreviewScreen.tsx index e516603718a..c5d7767385d 100644 --- a/ts/features/pn/screens/AttachmentPreviewScreen.tsx +++ b/ts/features/pn/screens/AttachmentPreviewScreen.tsx @@ -3,7 +3,7 @@ import { pipe } from "fp-ts/lib/function"; import * as B from "fp-ts/lib/boolean"; import * as O from "fp-ts/lib/Option"; import { PnParamsList } from "../navigation/params"; -import { UIMessageId, UIAttachmentId } from "../../messages/types"; +import { UIMessageId } from "../../messages/types"; import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; import { useIOSelector } from "../../../store/hooks"; import { pnMessageAttachmentSelector } from "../store/reducers"; @@ -19,7 +19,7 @@ import { LegacyMessageAttachmentPreview } from "../../messages/components/Messag export type AttachmentPreviewScreenNavigationParams = Readonly<{ messageId: UIMessageId; - attachmentId: UIAttachmentId; + attachmentId: string; category?: string; }>; diff --git a/ts/features/pn/screens/LegacyMessageDetailsScreen.tsx b/ts/features/pn/screens/LegacyMessageDetailsScreen.tsx index 7d2ad7d08a2..1e0f6996b6c 100644 --- a/ts/features/pn/screens/LegacyMessageDetailsScreen.tsx +++ b/ts/features/pn/screens/LegacyMessageDetailsScreen.tsx @@ -4,12 +4,11 @@ import * as O from "fp-ts/lib/Option"; import React from "react"; import { SafeAreaView } from "react-native"; import { useFocusEffect, useNavigation } from "@react-navigation/native"; -import { useStore } from "react-redux"; import { IOStyles } from "../../../components/core/variables/IOStyles"; import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; import I18n from "../../../i18n"; import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { useIODispatch, useIOSelector } from "../../../store/hooks"; +import { useIODispatch, useIOSelector, useIOStore } from "../../../store/hooks"; import { serviceByIdSelector } from "../../../store/reducers/entities/services/servicesById"; import { emptyContextualHelp } from "../../../utils/emptyContextualHelp"; import { useOnFirstRender } from "../../../utils/hooks/useOnFirstRender"; @@ -32,7 +31,6 @@ import { startPaymentStatusTracking, updatePaymentForMessage } from "../store/actions"; -import { GlobalState } from "../../../store/reducers/types"; import { selectedPaymentIdSelector } from "../store/reducers/payments"; import { InfoScreenComponent } from "../../../components/infoScreen/InfoScreenComponent"; import { renderInfoRasterImage } from "../../../components/infoScreen/imageRendering"; @@ -80,10 +78,10 @@ export const LegacyMessageDetailsScreen = ( } }); - const store = useStore(); + const store = useIOStore(); useFocusEffect( React.useCallback(() => { - const globalState = store.getState() as GlobalState; + const globalState = store.getState(); const selectedPaymentId = selectedPaymentIdSelector(globalState); if (selectedPaymentId) { dispatch(clearSelectedPayment()); diff --git a/ts/features/pn/store/reducers/index.ts b/ts/features/pn/store/reducers/index.ts index fb602d51ee6..609b1bc66ed 100644 --- a/ts/features/pn/store/reducers/index.ts +++ b/ts/features/pn/store/reducers/index.ts @@ -6,7 +6,7 @@ import * as O from "fp-ts/lib/Option"; import { Action } from "../../../../store/actions/types"; import { thirdPartyFromIdSelector } from "../../../messages/store/reducers/thirdPartyById"; import { toPNMessage } from "../types/transformers"; -import { UIAttachmentId, UIMessageId } from "../../../messages/types"; +import { UIMessageId } from "../../../messages/types"; import { GlobalState } from "../../../../store/reducers/types"; import { pnActivationReducer, PnActivationState } from "./activation"; import { MultiplePaymentState, paymentsReducer } from "./payments"; @@ -29,7 +29,7 @@ export const pnMessageFromIdSelector = createSelector( export const pnMessageAttachmentSelector = (state: GlobalState) => (ioMessageId: UIMessageId) => - (pnMessageAttachmentId: UIAttachmentId) => + (pnMessageAttachmentId: string) => pipe( pnMessageFromIdSelector(state, ioMessageId), pot.toOption, diff --git a/ts/features/pn/store/types/transformers.ts b/ts/features/pn/store/types/transformers.ts index 3b0c5269074..c9beacf92aa 100644 --- a/ts/features/pn/store/types/transformers.ts +++ b/ts/features/pn/store/types/transformers.ts @@ -2,7 +2,6 @@ import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import { ThirdPartyMessageWithContent } from "../../../../../definitions/backend/ThirdPartyMessageWithContent"; import { ThirdPartyMessage } from "../../../../../definitions/pn/ThirdPartyMessage"; -import { attachmentsFromThirdPartyMessage } from "../../../messages/store/reducers/transformers"; import { PNMessage } from "./types"; export const toPNMessage = ( @@ -16,9 +15,6 @@ export const toPNMessage = ( O.map(details => ({ ...details, created_at: messageFromApi.created_at, - attachments: pipe( - attachmentsFromThirdPartyMessage(messageFromApi), - O.toUndefined - ) + attachments: messageFromApi.third_party_message.attachments })) ); diff --git a/ts/features/pn/store/types/types.ts b/ts/features/pn/store/types/types.ts index 192e7d9652a..f8151d19877 100644 --- a/ts/features/pn/store/types/types.ts +++ b/ts/features/pn/store/types/types.ts @@ -1,7 +1,7 @@ +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; import { IOReceivedNotification } from "../../../../../definitions/pn/IOReceivedNotification"; -import { UIAttachment } from "../../../messages/types"; export type PNMessage = IOReceivedNotification & { created_at: Date; - attachments?: ReadonlyArray; + attachments?: ReadonlyArray; }; diff --git a/ts/features/pn/utils/index.ts b/ts/features/pn/utils/index.ts index c4f43465f2b..0b4ac8bb4f1 100644 --- a/ts/features/pn/utils/index.ts +++ b/ts/features/pn/utils/index.ts @@ -23,7 +23,7 @@ import ROUTES from "../../../navigation/routes"; import { setSelectedPayment } from "../store/actions"; import { trackPNPaymentStart } from "../analytics"; import { ATTACHMENT_CATEGORY } from "../../messages/types/attachmentCategory"; -import { UIAttachment } from "../../messages/types"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; export const maxVisiblePaymentCountGenerator = () => 5; @@ -128,7 +128,7 @@ export const containsF24FromPNMessagePot = ( pipe( pot.getOrElse(potMessage, O.none), O.chainNullableK(message => message.attachments), - O.getOrElse>(() => []), + O.getOrElse>(() => []), RA.some(attachment => attachment.category === ATTACHMENT_CATEGORY.F24) ); diff --git a/ts/store/hooks.ts b/ts/store/hooks.ts index cf9150bee82..b42785341b1 100644 --- a/ts/store/hooks.ts +++ b/ts/store/hooks.ts @@ -1,6 +1,12 @@ -import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"; +import { + TypedUseSelectorHook, + useDispatch, + useSelector, + useStore +} from "react-redux"; import { AppDispatch } from "../App"; import { GlobalState } from "./reducers/types"; export const useIODispatch = () => useDispatch(); export const useIOSelector: TypedUseSelectorHook = useSelector; +export const useIOStore = () => useStore(); From 333a40e845440b27a7bbf38843b8743409d89082 Mon Sep 17 00:00:00 2001 From: Alessandro Izzo Date: Wed, 7 Feb 2024 20:45:19 +0100 Subject: [PATCH 012/190] fix: [IABT-1530] Enabled header shown property on Transaction details screens (#5493) ## Short description This PR fixes the header into new transaction details screens ## List of changes proposed in this pull request - Enabled `headerShown` for the WalletTransactionNavigator ## How to test - Enable the new design system flag - Go into a transaction details trough wallet home screen; ## Preview |Before|After| |-|-| | | | --- ts/features/walletV3/transaction/navigation/navigator.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/features/walletV3/transaction/navigation/navigator.tsx b/ts/features/walletV3/transaction/navigation/navigator.tsx index b5c8f67e073..075389eff64 100644 --- a/ts/features/walletV3/transaction/navigation/navigator.tsx +++ b/ts/features/walletV3/transaction/navigation/navigator.tsx @@ -29,7 +29,7 @@ const Stack = createStackNavigator(); export const WalletTransactionNavigator = () => ( Date: Thu, 8 Feb 2024 18:18:01 +0100 Subject: [PATCH 013/190] feat: [IOCOM-849,IOCOM-850] Add `MessageDetailsComponent` in the detail of a message (#5495) ## Short description This PR adds the `MessageDetailsComponent` in the detail of a message. If message is expired, the tag _expired_ will be displayed.
Details

| with payment and due date - valid | with payment and due date - expired | | - | - | | | |

## List of changes proposed in this pull request - added the `MessageDetailsComponent` in the detail of a message - added the tag _expired_ - update langs - added tests ## How to test Using `io-dev-api-server`, generate messages with valid/invalid `due_date`. Open the message and check that the data is displayed correctly. --- locales/en/index.yml | 2 + locales/it/index.yml | 2 + ts/features/messages/__mocks__/message.ts | 32 + .../MessageDetail/MessageDetailHeader.tsx | 60 -- .../MessageDetail/MessageDetailsHeader.tsx | 85 ++ .../MessageDetail/MessageDetailsTagBox.tsx | 20 + .../__tests__/MessageDetailHeader.test.tsx | 47 - .../__tests__/MessageDetailsHeader.test.tsx | 61 ++ .../MessageDetailHeader.test.tsx.snap | 322 ------- .../MessageDetailsHeader.test.tsx.snap | 574 +++++++++++++ .../messages/screens/MessageDetailsScreen.tsx | 96 ++- .../__tests__/MessageDetailsScreen.test.tsx | 167 ++++ .../reducers/__tests__/detailsById.test.ts | 88 +- .../reducers/__tests__/thirdPartyById.test.ts | 114 ++- .../messages/store/reducers/detailsById.ts | 18 + .../messages/store/reducers/thirdPartyById.ts | 15 +- ts/features/messages/utils/index.ts | 2 + ts/features/pn/components/MessageDetails.tsx | 62 +- .../__test__/MessageDetails.test.tsx | 27 +- .../MessageDetails.test.tsx.snap | 603 +++++++------ .../pn/screens/MessageDetailsScreen.tsx | 7 +- .../MessageDetailsScreen.test.tsx.snap | 811 +++++++++--------- 22 files changed, 2049 insertions(+), 1166 deletions(-) delete mode 100644 ts/features/messages/components/MessageDetail/MessageDetailHeader.tsx create mode 100644 ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx create mode 100644 ts/features/messages/components/MessageDetail/MessageDetailsTagBox.tsx delete mode 100644 ts/features/messages/components/MessageDetail/__tests__/MessageDetailHeader.test.tsx create mode 100644 ts/features/messages/components/MessageDetail/__tests__/MessageDetailsHeader.test.tsx delete mode 100644 ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailHeader.test.tsx.snap create mode 100644 ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap create mode 100644 ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx diff --git a/locales/en/index.yml b/locales/en/index.yml index a777e18e806..86b799c8249 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -2628,6 +2628,8 @@ features: updateBottomSheet: title: "Aggiorna l'app IO" subtitle: "Per usare questa funzionalità è richiesta la versione {{value}} di app IO. Aggiorna l’app per continuare." + badge: + dueDate: Expired on {{date}} at {{time}} euCovidCertificate: save: album: "IO" diff --git a/locales/it/index.yml b/locales/it/index.yml index 6735b1ab9e0..82d6f415927 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -2628,6 +2628,8 @@ features: updateBottomSheet: title: "Aggiorna l'app IO" subtitle: "Per usare questa funzionalità è richiesta la versione {{value}} di app IO. Aggiorna l’app per continuare." + badge: + dueDate: Scaduto il {{date}} alle ore {{time}} euCovidCertificate: save: album: "IO" diff --git a/ts/features/messages/__mocks__/message.ts b/ts/features/messages/__mocks__/message.ts index 5a77b7449b1..08bae54cd57 100644 --- a/ts/features/messages/__mocks__/message.ts +++ b/ts/features/messages/__mocks__/message.ts @@ -1,5 +1,6 @@ import { CreatedMessageWithContentAndAttachments } from "../../../../definitions/backend/CreatedMessageWithContentAndAttachments"; import { FiscalCode } from "../../../../definitions/backend/FiscalCode"; +import { PaymentDataWithRequiredPayee } from "../../../../definitions/backend/PaymentDataWithRequiredPayee"; import { UIMessageDetails } from "../types"; import { toUIMessageDetails } from "../store/reducers/transformers"; @@ -22,6 +23,37 @@ export const message_1: CreatedMessageWithContentAndAttachments = { sender_service_id: service_1.service_id }; +export const messageWithValidPayment: CreatedMessageWithContentAndAttachments = + { + ...message_1, + created_at: new Date("2024-01-01T14:16:41Z"), + content: { + ...message_1.content, + payment_data: { + notice_number: "075970423479738892", + amount: 698, + invalid_after_due_date: true, + payee: { fiscal_code: "00000000003" } + } as PaymentDataWithRequiredPayee + } + }; + +export const messageWithExpairedPayment: CreatedMessageWithContentAndAttachments = + { + ...message_1, + created_at: new Date("2024-01-01T14:16:41Z"), + content: { + ...message_1.content, + due_date: new Date("2024-02-03T14:16:41Z"), + payment_data: { + notice_number: "075970423479738892", + amount: 698, + invalid_after_due_date: true, + payee: { fiscal_code: "00000000003" } + } as PaymentDataWithRequiredPayee + } + }; + export const paymentValidInvalidAfterDueDate: CreatedMessageWithContentAndAttachments = { created_at: "2021-11-23T13:29:54.771Z", diff --git a/ts/features/messages/components/MessageDetail/MessageDetailHeader.tsx b/ts/features/messages/components/MessageDetail/MessageDetailHeader.tsx deleted file mode 100644 index ae3acb5fb8a..00000000000 --- a/ts/features/messages/components/MessageDetail/MessageDetailHeader.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { PropsWithChildren } from "react"; -import { - ContentWrapper, - Divider, - H3, - LabelSmall, - VSpacer -} from "@pagopa/io-app-design-system"; -import { localeDateFormat } from "../../../../utils/locale"; -import I18n from "../../../../i18n"; -import { ServicePublic } from "../../../../../definitions/backend/ServicePublic"; -import { logosForService } from "../../../../utils/services"; -import { OrganizationHeader } from "./OrganizationHeader"; - -export type MessageDetailHeaderProps = PropsWithChildren<{ - createdAt: Date; - subject: string; - sender?: string; - service?: ServicePublic; -}>; - -const MessageHeaderContent = ({ - subject, - createdAt -}: MessageDetailHeaderProps) => ( - <> -

{subject}

- - - {localeDateFormat( - createdAt, - I18n.t("global.dateFormats.fullFormatShortMonthLiteralWithTime") - )} - - -); - -export const MessageDetailHeader = ({ - children, - service, - ...rest -}: MessageDetailHeaderProps) => ( - - {children} - - - - {service && ( - <> - {/* TODO: update logoUri when MultiImage component will be available in DS */} - - - - )} - -); diff --git a/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx b/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx new file mode 100644 index 00000000000..a34d747d0ac --- /dev/null +++ b/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx @@ -0,0 +1,85 @@ +import React, { PropsWithChildren } from "react"; +import { StyleSheet, View } from "react-native"; +import { + ContentWrapper, + Divider, + H3, + LabelSmall, + VSpacer +} from "@pagopa/io-app-design-system"; +import { pipe } from "fp-ts/lib/function"; +import * as O from "fp-ts/lib/Option"; +import * as pot from "@pagopa/ts-commons/lib/pot"; +import { ServiceId } from "../../../../../definitions/backend/ServiceId"; +import { localeDateFormat } from "../../../../utils/locale"; +import I18n from "../../../../i18n"; +import { logosForService } from "../../../../utils/services"; +import { useIOSelector } from "../../../../store/hooks"; +import { serviceByIdSelector } from "../../../../store/reducers/entities/services/servicesById"; +import { gapBetweenItemsInAGrid } from "../../utils"; +import { OrganizationHeader } from "./OrganizationHeader"; + +const styles = StyleSheet.create({ + tagsWrapper: { + flexDirection: "row", + flexWrap: "wrap", + justifyContent: "flex-start", + marginHorizontal: -(gapBetweenItemsInAGrid / 2), + marginVertical: -(gapBetweenItemsInAGrid / 2) + } +}); + +export type MessageDetailsHeaderProps = PropsWithChildren<{ + createdAt: Date; + subject: string; + serviceId: ServiceId; +}>; + +const MessageDetailsHeaderContent = ({ + subject, + createdAt +}: Pick) => ( + <> +

{subject}

+ + + {localeDateFormat( + createdAt, + I18n.t("global.dateFormats.fullFormatShortMonthLiteralWithTime") + )} + + +); + +export const MessageDetailsHeader = ({ + children, + serviceId, + ...rest +}: MessageDetailsHeaderProps) => { + const service = pipe( + useIOSelector(state => serviceByIdSelector(state, serviceId)), + pot.toOption, + O.toUndefined + ); + + return ( + + {children} + + + + + {service && ( + <> + {/* TODO: update logoUri when MultiImage component will be available in DS */} + + + + )} + + ); +}; diff --git a/ts/features/messages/components/MessageDetail/MessageDetailsTagBox.tsx b/ts/features/messages/components/MessageDetail/MessageDetailsTagBox.tsx new file mode 100644 index 00000000000..ef1906e3992 --- /dev/null +++ b/ts/features/messages/components/MessageDetail/MessageDetailsTagBox.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { StyleSheet, View } from "react-native"; +import { gapBetweenItemsInAGrid } from "../../utils"; + +const styles = StyleSheet.create({ + tagWrapper: { + marginHorizontal: gapBetweenItemsInAGrid / 2, + marginVertical: gapBetweenItemsInAGrid / 2 + } +}); + +export type MessageDetailsTagBoxProps = { + children: React.ReactNode; +}; + +export const MessageDetailsTagBox = ({ + children +}: MessageDetailsTagBoxProps) => ( + {children} +); diff --git a/ts/features/messages/components/MessageDetail/__tests__/MessageDetailHeader.test.tsx b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailHeader.test.tsx deleted file mode 100644 index 145c99ef552..00000000000 --- a/ts/features/messages/components/MessageDetail/__tests__/MessageDetailHeader.test.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React, { ComponentProps } from "react"; -import { render } from "@testing-library/react-native"; -import { MessageDetailHeader } from "../MessageDetailHeader"; -import { ServicePublic } from "../../../../../../definitions/backend/ServicePublic"; - -const service = { - service_id: "serviceId", - service_name: "health", - organization_name: "Organization foo", - department_name: "Department one", - organization_fiscal_code: "OFSAAAAAA" -} as ServicePublic; - -const defaultProps: ComponentProps = { - subject: "Subject", - createdAt: new Date("2021-10-18T16:00:30.541Z") -}; - -describe("MessageDetailHeader component", () => { - it("should match the snapshot with default props", () => { - const component = render(); - expect(component.toJSON()).toMatchSnapshot(); - }); - - it("should match the snapshot with all props", () => { - const component = render( - - ); - expect(component.toJSON()).toMatchSnapshot(); - }); - - it("should render the organization info when the service is defined", () => { - const component = render( - - ); - expect(component.queryByText(service.organization_name)).not.toBeNull(); - expect(component.queryByText(service.service_name)).not.toBeNull(); - }); -}); diff --git a/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsHeader.test.tsx b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsHeader.test.tsx new file mode 100644 index 00000000000..43f6ae34900 --- /dev/null +++ b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsHeader.test.tsx @@ -0,0 +1,61 @@ +import React, { ComponentProps } from "react"; +import { Action, Store } from "redux"; +import configureMockStore from "redux-mock-store"; +import { MessageDetailsHeader } from "../MessageDetailsHeader"; +import { ServiceId } from "../../../../../../definitions/backend/ServiceId"; +import { appReducer } from "../../../../../store/reducers"; +import { applicationChangeState } from "../../../../../store/actions/application"; +import { GlobalState } from "../../../../../store/reducers/types"; +import { renderScreenWithNavigationStoreContext } from "../../../../../utils/testWrapper"; +import { loadServiceDetail } from "../../../../../store/actions/services"; +import { service_1 } from "../../../__mocks__/messages"; +import { reproduceSequence } from "../../../../../utils/tests"; + +const defaultProps: ComponentProps = { + createdAt: new Date("2021-10-18T16:00:30.541Z"), + serviceId: service_1.service_id, + subject: "#### Subject ####" +}; + +describe("MessageDetailsHeader component", () => { + it("should match the snapshot with default props", () => { + const { component } = renderComponent(defaultProps); + expect(component.toJSON()).toMatchSnapshot(); + }); + + it("should NOT render the organization info when the serviceId is invalid", () => { + const { component } = renderComponent({ + ...defaultProps, + serviceId: "invalid" as ServiceId + }); + expect(component.queryByText(service_1.organization_name)).toBeNull(); + expect(component.queryByText(service_1.service_name)).toBeNull(); + }); +}); + +const renderComponent = ( + props: React.ComponentProps +) => { + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadServiceDetail.success(service_1) + ]; + + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const mockStore = configureMockStore(); + const store: Store = mockStore(state); + + return { + component: renderScreenWithNavigationStoreContext( + () => , + "DUMMY_ROUTE", + {}, + store + ), + store + }; +}; diff --git a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailHeader.test.tsx.snap b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailHeader.test.tsx.snap deleted file mode 100644 index 434badfbbc3..00000000000 --- a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailHeader.test.tsx.snap +++ /dev/null @@ -1,322 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`MessageDetailHeader component should match the snapshot with all props 1`] = ` - - - Subject - - - - 18 Oct 2021, 16:00 - - - - - - - Organization foo - - - health - - - - - - - - - - -`; - -exports[`MessageDetailHeader component should match the snapshot with default props 1`] = ` - - - Subject - - - - 18 Oct 2021, 16:00 - - - - -`; diff --git a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap new file mode 100644 index 00000000000..0dba351b97c --- /dev/null +++ b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap @@ -0,0 +1,574 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`MessageDetailsHeader component should match the snapshot with default props 1`] = ` + + + + + + + + + + + + + + + DUMMY_ROUTE + + + + + + + + + + + + + + + + + + + + + #### Subject #### + + + + 18 Oct 2021, 16:00 + + + + + + + Ċentru tas-Saħħa + + + health + + + + + + + + + + + + + + + + + + + + + +`; diff --git a/ts/features/messages/screens/MessageDetailsScreen.tsx b/ts/features/messages/screens/MessageDetailsScreen.tsx index df59a1b4c61..83dac467b2d 100644 --- a/ts/features/messages/screens/MessageDetailsScreen.tsx +++ b/ts/features/messages/screens/MessageDetailsScreen.tsx @@ -1,6 +1,14 @@ import React, { useCallback } from "react"; import { ScrollView } from "react-native"; -import { ContentWrapper, IOStyles } from "@pagopa/io-app-design-system"; +import { + ContentWrapper, + IOStyles, + Tag, + VSpacer +} from "@pagopa/io-app-design-system"; +import { pipe } from "fp-ts/lib/function"; +import * as O from "fp-ts/lib/Option"; +import * as pot from "@pagopa/ts-commons/lib/pot"; import { useNavigation } from "@react-navigation/native"; import { SafeAreaView } from "react-native-safe-area-context"; import { UIMessageId } from "../types"; @@ -8,9 +16,23 @@ import { ServiceId } from "../../../../definitions/backend/ServiceId"; import { MessagesParamsList } from "../navigation/params"; import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; -import { MessageDetailsAttachments } from "../components/MessageDetail/MessageDetailsAttachments"; -import { useIODispatch } from "../../../store/hooks"; +import { useIODispatch, useIOSelector } from "../../../store/hooks"; import { cancelPreviousAttachmentDownload } from "../store/actions"; +import { getPaginatedMessageById } from "../store/reducers/paginatedById"; +import { + hasAttachmentsSelector, + messageTitleSelector +} from "../store/reducers/thirdPartyById"; +import { MessageDetailsAttachments } from "../components/MessageDetail/MessageDetailsAttachments"; +import { OperationResultScreenContent } from "../../../components/screens/OperationResultScreenContent"; +import { MessageDetailsHeader } from "../components/MessageDetail/MessageDetailsHeader"; +import I18n from "../../../i18n"; +import { + messageDetailsByIdSelector, + messageDetailsExpiringInfoSelector +} from "../store/reducers/detailsById"; +import { localeDateFormat } from "../../../utils/locale"; +import { MessageDetailsTagBox } from "../components/MessageDetail/MessageDetailsTagBox"; export type MessageDetailsScreenNavigationParams = { messageId: UIMessageId; @@ -20,21 +42,87 @@ export type MessageDetailsScreenNavigationParams = { export const MessageDetailsScreen = ( props: IOStackNavigationRouteProps ) => { - const messageId = props.route.params.messageId; + const { messageId, serviceId } = props.route.params; const dispatch = useIODispatch(); const navigation = useNavigation(); + + const message = pipe( + useIOSelector(state => getPaginatedMessageById(state, messageId)), + pot.toOption, + O.toUndefined + ); + + const messageDetails = pipe( + useIOSelector(state => messageDetailsByIdSelector(state, messageId)), + pot.toOption, + O.toUndefined + ); + + const hasAttachments = useIOSelector(state => + hasAttachmentsSelector(state, messageId) + ); + + const subject = + useIOSelector(state => messageTitleSelector(state, messageId)) ?? ""; + + const expiringInfo = useIOSelector(state => + messageDetailsExpiringInfoSelector(state, messageId, Date.now()) + ); + const goBack = useCallback(() => { dispatch(cancelPreviousAttachmentDownload()); navigation.goBack(); }, [dispatch, navigation]); + useHeaderSecondLevel({ title: "", goBack, supportRequest: true }); + + if (message === undefined || messageDetails === undefined) { + return ( + + ); + } + return ( + + {hasAttachments && ( + + + + )} + {messageDetails.dueDate && expiringInfo === "expired" && ( + + + + )} + + diff --git a/ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx b/ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx new file mode 100644 index 00000000000..2f2b717a321 --- /dev/null +++ b/ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx @@ -0,0 +1,167 @@ +import configureMockStore from "redux-mock-store"; +import { Action, Store } from "redux"; +import { MESSAGES_ROUTES } from "../../navigation/routes"; +import { GlobalState } from "../../../../store/reducers/types"; +import { appReducer } from "../../../../store/reducers"; +import { MessageDetailsScreen } from "../MessageDetailsScreen"; +import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWrapper"; +import { reproduceSequence } from "../../../../utils/tests"; +import { + loadMessageById, + loadMessageDetails, + loadThirdPartyMessage +} from "../../../messages/store/actions"; +import { + toUIMessage, + toUIMessageDetails +} from "../../../messages/store/reducers/transformers"; +import { + messageWithExpairedPayment, + messageWithValidPayment, + message_1 +} from "../../../messages/__mocks__/message"; +import { loadServiceDetail } from "../../../../store/actions/services"; +import { service_1 } from "../../../messages/__mocks__/messages"; +import { applicationChangeState } from "../../../../store/actions/application"; +import { ThirdPartyMessageWithContent } from "../../../../../definitions/backend/ThirdPartyMessageWithContent"; +import { ATTACHMENT_CATEGORY } from "../../types/attachmentCategory"; +import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; +import { UIMessageId } from "../../types"; + +export const thirdPartyMessage: ThirdPartyMessageWithContent = { + ...message_1, + created_at: new Date("2020-01-01T00:00:00.000Z"), + third_party_message: { + attachments: [ + { + id: "1", + name: "A First Attachment", + content_type: "application/pdf", + category: ATTACHMENT_CATEGORY.DOCUMENT, + url: "/resource/attachment1.pdf" + }, + { + id: "2", + name: "A Second Attachment", + content_type: "application/pdf", + category: ATTACHMENT_CATEGORY.DOCUMENT, + url: "/resource/attachment2.pdf" + } + ] as Array + } +}; + +describe("MessageDetailsScreen", () => { + it("should display the attachment tag if there are attachments", () => { + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageById.success(toUIMessage(message_1)), + loadServiceDetail.success(service_1), + loadMessageDetails.success( + toUIMessageDetails(messageWithExpairedPayment) + ), + loadThirdPartyMessage.success({ + id: message_1.id as UIMessageId, + content: thirdPartyMessage + }) + ]; + + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const mockStore = configureMockStore(); + const store: Store = mockStore(state); + + const { component } = renderComponent(store); + expect(component.queryByTestId("attachment-tag")).not.toBeNull(); + }); + + it("should NOT display the attachment tag if there are no attachments", () => { + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageById.success(toUIMessage(message_1)), + loadServiceDetail.success(service_1), + loadMessageDetails.success( + toUIMessageDetails(messageWithExpairedPayment) + ), + loadThirdPartyMessage.success({ + id: message_1.id as UIMessageId, + content: { + ...thirdPartyMessage, + third_party_message: { + attachments: [] + } + } + }) + ]; + + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const mockStore = configureMockStore(); + const store: Store = mockStore(state); + + const { component } = renderComponent(store); + expect(component.queryByTestId("attachment-tag")).toBeNull(); + }); + + it("should display the error tag if the payment is expired", () => { + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageById.success(toUIMessage(message_1)), + loadServiceDetail.success(service_1), + loadMessageDetails.success(toUIMessageDetails(messageWithExpairedPayment)) + ]; + + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const mockStore = configureMockStore(); + const store: Store = mockStore(state); + + const { component } = renderComponent(store); + expect(component.queryByTestId("due-date-tag")).not.toBeNull(); + }); + + it("should NOT display the error tag if the payment is valid", () => { + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageById.success(toUIMessage(message_1)), + loadServiceDetail.success(service_1), + loadMessageDetails.success(toUIMessageDetails(messageWithValidPayment)) + ]; + + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const mockStore = configureMockStore(); + const store: Store = mockStore(state); + + const { component } = renderComponent(store); + expect(component.queryByTestId("due-date-tag")).toBeNull(); + }); +}); + +const renderComponent = (store: Store) => { + const { id, sender_service_id } = message_1; + + return { + component: renderScreenWithNavigationStoreContext( + MessageDetailsScreen, + MESSAGES_ROUTES.MESSAGE_DETAIL, + { + messageId: id, + serviceId: sender_service_id + }, + store + ) + }; +}; diff --git a/ts/features/messages/store/reducers/__tests__/detailsById.test.ts b/ts/features/messages/store/reducers/__tests__/detailsById.test.ts index 4128a4afd77..d9b8a4f9f8a 100644 --- a/ts/features/messages/store/reducers/__tests__/detailsById.test.ts +++ b/ts/features/messages/store/reducers/__tests__/detailsById.test.ts @@ -8,7 +8,8 @@ import { import { loadMessageDetails } from "../../actions"; import reducer, { detailedMessageHasThirdPartyDataSelector, - messageDetailsByIdSelector + messageDetailsByIdSelector, + messageDetailsExpiringInfoSelector } from "../detailsById"; import { UIMessageDetails, UIMessageId } from "../../../types"; import { applicationChangeState } from "../../../../../store/actions/application"; @@ -121,3 +122,88 @@ describe("detailedMessageHasThirdPartyDataSelector", () => { expect(hasThirdPartyData).toBe(true); }); }); + +describe("messageDetailsExpiringInfoSelector", () => { + it("should return `does_not_expire` when `paymentData` is not defined", () => { + const messageId = "m1" as UIMessageId; + const action = loadMessageDetails.success({ + id: messageId + } as UIMessageDetails); + const state = appReducer(undefined, action); + + const expiringInfo = messageDetailsExpiringInfoSelector( + state, + messageId, + new Date("01/05/2023").getTime() + ); + expect(expiringInfo).toBe("does_not_expire"); + }); + + it("should return `does_not_expire` when `paymentData` is defined and `dueDate` is not", () => { + const messageId = "m1" as UIMessageId; + const action = loadMessageDetails.success({ + id: messageId, + paymentData: { + amount: 99, + noticeNumber: "123", + payee: { + fiscalCode: "123" + } + } + } as UIMessageDetails); + const state = appReducer(undefined, action); + + const expiringInfo = messageDetailsExpiringInfoSelector( + state, + messageId, + new Date("01/05/2023").getTime() + ); + expect(expiringInfo).toBe("does_not_expire"); + }); + + it("should return `expired` when there is a `paymentData` is defined and `dueDate` has passed", () => { + const messageId = "m1" as UIMessageId; + const action = loadMessageDetails.success({ + id: messageId, + dueDate: new Date("01/01/2023"), + paymentData: { + amount: 99, + noticeNumber: "123", + payee: { + fiscalCode: "123" + } + } + } as UIMessageDetails); + const state = appReducer(undefined, action); + + const expiringInfo = messageDetailsExpiringInfoSelector( + state, + messageId, + new Date("01/05/2023").getTime() + ); + expect(expiringInfo).toBe("expired"); + }); + + it("should return `expiring` when there is a `paymentData` is defined and `dueDate` has not passed", () => { + const messageId = "m1" as UIMessageId; + const action = loadMessageDetails.success({ + id: messageId, + dueDate: new Date("01/05/2023"), + paymentData: { + amount: 99, + noticeNumber: "123", + payee: { + fiscalCode: "123" + } + } + } as UIMessageDetails); + const state = appReducer(undefined, action); + + const expiringInfo = messageDetailsExpiringInfoSelector( + state, + messageId, + new Date("01/01/2023").getTime() + ); + expect(expiringInfo).toBe("expiring"); + }); +}); diff --git a/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts b/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts index 34490d1c8af..7e87b302461 100644 --- a/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts +++ b/ts/features/messages/store/reducers/__tests__/thirdPartyById.test.ts @@ -1,9 +1,11 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; +import { Action } from "redux"; import { appReducer } from "../../../../../store/reducers"; import { ThirdPartyMessageWithContent } from "../../../../../../definitions/backend/ThirdPartyMessageWithContent"; import { loadMessageDetails, loadThirdPartyMessage } from "../../actions"; import { applicationChangeState } from "../../../../../store/actions/application"; import { + hasAttachmentsSelector, isThirdPartyMessageSelector, messageMarkdownSelector, messageTitleSelector, @@ -17,6 +19,8 @@ import { } from "../../../../../../definitions/backend/ThirdPartyMessage"; import { ServiceId } from "../../../../../../definitions/backend/ServiceId"; import { ThirdPartyAttachment } from "../../../../../../definitions/backend/ThirdPartyAttachment"; +import { GlobalState } from "../../../../../store/reducers/types"; +import { reproduceSequence } from "../../../../../utils/tests"; describe("thirdPartyFromIdSelector", () => { it("Should return pot none for an unmatching message id", () => { @@ -173,6 +177,37 @@ describe("messageTitleSelector", () => { const messageTitle = messageTitleSelector(finalState, messageId); expect(messageTitle).toBe(thirdPartySubject); }); + it("should return the message title when we have the detail and third party message with bad typed details", () => { + const messageId = "m1" as UIMessageId; + const content = { + id: messageId as string, + third_party_message: { + details: { + randomProperty: 5 + } as ThirdPartyMessageDetails + } + } as ThirdPartyMessageWithContent; + const detailsSubject = "message subject"; + + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageDetails.success({ + id: messageId, + subject: detailsSubject + } as UIMessageDetails), + loadThirdPartyMessage.success({ + id: messageId, + content + }) + ]; + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const messageTitle = messageTitleSelector(state, messageId); + expect(messageTitle).toBe(detailsSubject); + }); }); describe("messageMarkdownSelector", () => { @@ -233,7 +268,7 @@ describe("messageMarkdownSelector", () => { const messageMarkdown = messageMarkdownSelector(state, messageId); expect(messageMarkdown).toBeUndefined(); }); - it("Should return the message title for a matching loaded third party message with proper typed details", () => { + it("Should return the message markdown for a matching loaded third party message with proper typed details", () => { const messageId = "m1" as UIMessageId; const markdown = "This is a more than 80 characters message markdown length. The decoder needs this"; @@ -254,7 +289,7 @@ describe("messageMarkdownSelector", () => { const messageMarkdown = messageMarkdownSelector(state, messageId); expect(messageMarkdown).toBe(markdown); }); - it("Should return the third party message title when there are both detailed and third party message", () => { + it("Should return the third party message markdown when there are both detailed and third party message", () => { const messageId = "m1" as UIMessageId; const thirdPartyMarkdown = "This is a more than 80 characters message markdown length. The decoder needs this"; @@ -281,6 +316,37 @@ describe("messageMarkdownSelector", () => { const messageMarkdown = messageMarkdownSelector(finalState, messageId); expect(messageMarkdown).toBe(thirdPartyMarkdown); }); + it("should return the message markdown when we have the detail and third-party message with bad typed details", () => { + const messageId = "m1" as UIMessageId; + const content = { + id: messageId as string, + third_party_message: { + details: { + randomProperty: 5 + } as ThirdPartyMessageDetails + } + } as ThirdPartyMessageWithContent; + const detailsMarkdown = "message markdown"; + + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageDetails.success({ + id: messageId, + subject: detailsMarkdown + } as UIMessageDetails), + loadThirdPartyMessage.success({ + id: messageId, + content + }) + ]; + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const messageTitle = messageTitleSelector(state, messageId); + expect(messageTitle).toBe(detailsMarkdown); + }); }); describe("thirdPartyMessageAttachments", () => { @@ -358,3 +424,47 @@ describe("thirdPartyMessageAttachments", () => { expect(attachments[0]).toMatchObject(thirdPartyAttachment); }); }); + +describe("hasAttachmentsSelector", () => { + it("should return false if there are no attachments", () => { + const messageId = "01HNWRS7DP721KTC3SMCJ7G82E" as UIMessageId; + const loadedThirdPartyMessage = appReducer( + undefined, + loadThirdPartyMessage.success({ + id: messageId, + content: { + third_party_message: {} + } as ThirdPartyMessageWithContent + }) + ); + const hasAttachments = hasAttachmentsSelector( + loadedThirdPartyMessage, + messageId + ); + expect(hasAttachments).toBe(false); + }); + + it("should return true if there are attachments", () => { + const messageId = "01HNWRS7DP721KTC3SMCJ7G82E" as UIMessageId; + const thirdPartyAttachment = { + id: "1", + url: "https://invalid.url" + } as ThirdPartyAttachment; + const loadedThirdPartyMessage = appReducer( + undefined, + loadThirdPartyMessage.success({ + id: messageId, + content: { + third_party_message: { + attachments: [thirdPartyAttachment] + } as ThirdPartyMessage + } as ThirdPartyMessageWithContent + }) + ); + const hasAttachments = hasAttachmentsSelector( + loadedThirdPartyMessage, + messageId + ); + expect(hasAttachments).toBe(true); + }); +}); diff --git a/ts/features/messages/store/reducers/detailsById.ts b/ts/features/messages/store/reducers/detailsById.ts index 052c1fc3eba..b06cc755d4c 100644 --- a/ts/features/messages/store/reducers/detailsById.ts +++ b/ts/features/messages/store/reducers/detailsById.ts @@ -86,4 +86,22 @@ export const detailedMessageHasThirdPartyDataSelector = ( ) ); +export const messageDetailsExpiringInfoSelector = ( + state: GlobalState, + id: string, + referenceDateMilliseconds: number +) => + pipe( + messageDetailsByIdSelector(state, id), + pot.toOption, + O.filter(messageDetails => !!messageDetails.paymentData), + O.chainNullableK(messageDetails => messageDetails.dueDate), + O.map(dueDate => { + const remainingMilliseconds = + dueDate.getTime() - referenceDateMilliseconds; + return remainingMilliseconds > 0 ? "expiring" : "expired"; + }), + O.getOrElseW(() => "does_not_expire" as const) + ); + export default reducer; diff --git a/ts/features/messages/store/reducers/thirdPartyById.ts b/ts/features/messages/store/reducers/thirdPartyById.ts index 6fd7ebe0339..c88aa3d83d4 100644 --- a/ts/features/messages/store/reducers/thirdPartyById.ts +++ b/ts/features/messages/store/reducers/thirdPartyById.ts @@ -3,6 +3,7 @@ import { NonEmptyString } from "@pagopa/ts-commons/lib/strings"; import { getType } from "typesafe-actions"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; +import * as RA from "fp-ts/lib/ReadonlyArray"; import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; import { ThirdPartyMessageWithContent } from "../../../../../definitions/backend/ThirdPartyMessageWithContent"; import { loadThirdPartyMessage, reloadAllMessages } from "../actions"; @@ -84,6 +85,11 @@ export const messageMarkdownSelector = ( messageContent.markdown ); +export const hasAttachmentsSelector = ( + state: GlobalState, + ioMessageId: UIMessageId +) => pipe(thirdPartyMessageAttachments(state, ioMessageId), RA.isNonEmpty); + export const thirdPartyMessageAttachments = ( state: GlobalState, ioMessageId: UIMessageId @@ -139,5 +145,12 @@ const messageContentSelector = ( ) ) ), - O.toUndefined + O.getOrElse(() => + pipe( + state.entities.messages.detailsById[ioMessageId] ?? pot.none, + pot.toOption, + O.map(extractionFunction), + O.toUndefined + ) + ) ); diff --git a/ts/features/messages/utils/index.ts b/ts/features/messages/utils/index.ts index 5160e625b9e..7c4733d3277 100644 --- a/ts/features/messages/utils/index.ts +++ b/ts/features/messages/utils/index.ts @@ -4,6 +4,8 @@ import { UIMessageDetails } from "../types"; import { getExpireStatus } from "../../../utils/dates"; import { MessagePaymentExpirationInfo } from "./messages"; +export const gapBetweenItemsInAGrid = 8; + const networkErrorToError = (networkError: NetworkError) => networkError.kind === "timeout" ? new Error("timeout") : networkError.value; diff --git a/ts/features/pn/components/MessageDetails.tsx b/ts/features/pn/components/MessageDetails.tsx index 97026526f6d..bdeab87cf1c 100644 --- a/ts/features/pn/components/MessageDetails.tsx +++ b/ts/features/pn/components/MessageDetails.tsx @@ -1,28 +1,28 @@ import React from "react"; -import { ScrollView, View } from "react-native"; +import { ScrollView } from "react-native"; +import { SafeAreaView } from "react-native-safe-area-context"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import * as RA from "fp-ts/lib/ReadonlyArray"; import * as SEP from "fp-ts/lib/Separated"; -import { HSpacer, IOStyles, Tag, VSpacer } from "@pagopa/io-app-design-system"; -import { ServicePublic } from "../../../../definitions/backend/ServicePublic"; -import { UIMessageId } from "../../messages/types"; -import { PNMessage } from "../store/types/types"; +import { IOStyles, Tag, VSpacer } from "@pagopa/io-app-design-system"; +import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; import { NotificationPaymentInfo } from "../../../../definitions/pn/NotificationPaymentInfo"; -import { MessageDetailHeader } from "../../messages/components/MessageDetail/MessageDetailHeader"; -import { ATTACHMENT_CATEGORY } from "../../messages/types/attachmentCategory"; +import { ServiceId } from "../../../../definitions/backend/ServiceId"; import I18n from "../../../i18n"; -import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; +import { PNMessage } from "../store/types/types"; +import { ATTACHMENT_CATEGORY } from "../../messages/types/attachmentCategory"; +import { MessageDetailsHeader } from "../../messages/components/MessageDetail/MessageDetailsHeader"; +import { MessageDetailsTagBox } from "../../messages/components/MessageDetail/MessageDetailsTagBox"; import { MessageDetailsContent } from "./MessageDetailsContent"; type MessageDetailsProps = { message: PNMessage; - messageId: UIMessageId; - service?: ServicePublic; + serviceId: ServiceId; payments?: ReadonlyArray; }; -export const MessageDetails = ({ message, service }: MessageDetailsProps) => { +export const MessageDetails = ({ message, serviceId }: MessageDetailsProps) => { const partitionedAttachments = pipe( message.attachments, O.fromNullable, @@ -33,28 +33,28 @@ export const MessageDetails = ({ message, service }: MessageDetailsProps) => { const attachmentList = SEP.left(partitionedAttachments); return ( - - - - + + + + + + {attachmentList.length > 0 && ( - <> - + - + )} - - - - - + + + + + ); }; diff --git a/ts/features/pn/components/__test__/MessageDetails.test.tsx b/ts/features/pn/components/__test__/MessageDetails.test.tsx index a87f86291be..f5eb4e9dcd2 100644 --- a/ts/features/pn/components/__test__/MessageDetails.test.tsx +++ b/ts/features/pn/components/__test__/MessageDetails.test.tsx @@ -10,28 +10,22 @@ import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWr import { PNMessage } from "../../store/types/types"; import { thirdPartyMessage } from "../../__mocks__/message"; import { toPNMessage } from "../../store/types/transformers"; -import { UIMessageId } from "../../../messages/types"; import I18n from "../../../../i18n"; +import { serviceId_1 } from "../../../messages/__mocks__/messages"; const pnMessage = pipe(thirdPartyMessage, toPNMessage, O.toUndefined)!; describe("MessageDetails component", () => { it("should match the snapshot with default props", () => { const { component } = renderComponent( - generateComponentProperties( - thirdPartyMessage.id as UIMessageId, - pnMessage - ) + generateComponentProperties(pnMessage) ); expect(component).toMatchSnapshot(); }); it("should display the legalMessage tag", () => { const { component } = renderComponent( - generateComponentProperties( - thirdPartyMessage.id as UIMessageId, - pnMessage - ) + generateComponentProperties(pnMessage) ); expect( component.queryByText(I18n.t("features.pn.details.badge.legalValue")) @@ -40,17 +34,14 @@ describe("MessageDetails component", () => { it("should display the attachment tag if there are attachments", () => { const { component } = renderComponent( - generateComponentProperties( - thirdPartyMessage.id as UIMessageId, - pnMessage - ) + generateComponentProperties(pnMessage) ); expect(component.queryByTestId("attachment-tag")).not.toBeNull(); }); it("should NOT display the attachment tag if there are no attachments", () => { const { component } = renderComponent( - generateComponentProperties(thirdPartyMessage.id as UIMessageId, { + generateComponentProperties({ ...pnMessage, attachments: [] }) @@ -59,14 +50,10 @@ describe("MessageDetails component", () => { }); }); -const generateComponentProperties = ( - messageId: UIMessageId, - message: PNMessage -) => ({ - messageId, +const generateComponentProperties = (message: PNMessage) => ({ message, payments: undefined, - service: undefined + serviceId: serviceId_1 }); const renderComponent = ( diff --git a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap index a3d90d693c2..4145f2982c0 100644 --- a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap +++ b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap @@ -319,355 +319,390 @@ exports[`MessageDetails component should match the snapshot with default props 1 } } > - - - + + + - - - + + + + + + + + + Legal value + + + + + + + - - + tintColor={4283784304} + vbHeight={24} + vbWidth={24} + width={16} + > + + + + + + - - Legal value - - - - - - - - - - - - - + ######## subject ######## + + - ######## subject ######## - - - + + 01 Jan 2020, 00:00 + + - 01 Jan 2020, 00:00 - - - + - - + /> + - + + - ######## abstract ######## - + } + } + style={ + Array [ + Object { + "fontSize": 16, + "lineHeight": 24, + }, + Object { + "color": "#2B2E38", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "400", + }, + ] + } + weight="Regular" + > + ######## abstract ######## + + - - + +
diff --git a/ts/features/pn/screens/MessageDetailsScreen.tsx b/ts/features/pn/screens/MessageDetailsScreen.tsx index dc68816b0b1..85f6de1033b 100644 --- a/ts/features/pn/screens/MessageDetailsScreen.tsx +++ b/ts/features/pn/screens/MessageDetailsScreen.tsx @@ -13,7 +13,6 @@ import { ServiceId } from "../../../../definitions/backend/ServiceId"; import I18n from "../../../i18n"; import { useIODispatch, useIOSelector } from "../../../store/hooks"; import { UIMessageId } from "../../messages/types"; -import { serviceByIdSelector } from "../../../store/reducers/entities/services/servicesById"; import { useOnFirstRender } from "../../../utils/hooks/useOnFirstRender"; import { MessageDetails } from "../components/MessageDetails"; import { PnParamsList } from "../navigation/params"; @@ -57,9 +56,6 @@ export const MessageDetailsScreen = () => { const { messageId, serviceId, firstTimeOpening } = route.params; - const service = pot.toUndefined( - useIOSelector(state => serviceByIdSelector(state, serviceId)) - ); const currentFiscalCode = useIOSelector(profileFiscalCodeSelector); const messagePot = useIOSelector(state => pnMessageFromIdSelector(state, messageId) @@ -129,9 +125,8 @@ export const MessageDetailsScreen = () => { ), message => ( ) diff --git a/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap b/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap index c92e56d1986..1d7bbc1acbd 100644 --- a/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap +++ b/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap @@ -178,135 +178,338 @@ exports[`MessageDetailsScreen should match the snapshot when everything went fin } } > - - - + + + - - - + + + + + + + + + Legal value + + + + + + + - - + tintColor={4283784304} + vbHeight={24} + vbWidth={24} + width={16} + > + + + + + + - - Legal value - + + ######## subject ######## + + + + 01 Jan 2020, 00:00 + + + @@ -314,350 +517,182 @@ exports[`MessageDetailsScreen should match the snapshot when everything went fin style={ Object { "alignItems": "center", - "alignSelf": "flex-start", - "backgroundColor": "#FFFFFF", - "borderColor": "#E8EBF1", - "borderRadius": 6, - "borderWidth": 1, "flexDirection": "row", - "justifyContent": "center", - "paddingHorizontal": 8, + "justifyContent": "space-between", "paddingVertical": 6, } } - testID="attachment-tag" > - + Ċentru tas-Saħħa + + - - - - + health + - - - - - ######## subject ######## - - - - 01 Jan 2020, 00:00 - - - - - - - Ċentru tas-Saħħa - - - health - + + + + - - - - + /> - - - - + + - ######## abstract ######## - + } + } + style={ + Array [ + Object { + "fontSize": 16, + "lineHeight": 24, + }, + Object { + "color": "#2B2E38", + "fontFamily": "Titillium Web", + "fontStyle": "normal", + "fontWeight": "400", + }, + ] + } + weight="Regular" + > + ######## abstract ######## + + - - + + Date: Thu, 8 Feb 2024 21:08:30 +0100 Subject: [PATCH 014/190] chore(Cross): [IOAPPX-218] Add the new `Titillium Sans Pro` typeface to the codebase (#5459) --- .../assets/fonts/TitilliumSansPro-Black.otf | Bin 0 -> 120080 bytes .../fonts/TitilliumSansPro-BlackItalic.otf | Bin 0 -> 114036 bytes .../assets/fonts/TitilliumSansPro-Bold.otf | Bin 0 -> 112000 bytes .../fonts/TitilliumSansPro-BoldItalic.otf | Bin 0 -> 104000 bytes .../assets/fonts/TitilliumSansPro-Italic.otf | Bin 0 -> 99012 bytes .../assets/fonts/TitilliumSansPro-Light.otf | Bin 0 -> 109008 bytes .../fonts/TitilliumSansPro-LightItalic.otf | Bin 0 -> 107036 bytes .../assets/fonts/TitilliumSansPro-Regular.otf | Bin 0 -> 106736 bytes .../fonts/TitilliumSansPro-Semibold.otf | Bin 0 -> 112664 bytes .../fonts/TitilliumSansPro-SemiboldItalic.otf | Bin 0 -> 110452 bytes .../assets/fonts/TitilliumSansPro-Thin.otf | Bin 0 -> 103536 bytes .../fonts/TitilliumSansPro-ThinItalic.otf | Bin 0 -> 99344 bytes android/link-assets-manifest.json | 48 +++++++++ assets/fonts/TitilliumSansPro-OFL.txt | 92 ++++++++++++++++++ .../TitilliumSansPro-Black.otf | Bin 0 -> 120080 bytes .../TitilliumSansPro-BlackItalic.otf | Bin 0 -> 114036 bytes .../TitilliumSansPro-Bold.otf | Bin 0 -> 112000 bytes .../TitilliumSansPro-BoldItalic.otf | Bin 0 -> 104000 bytes .../TitilliumSansPro-Italic.otf | Bin 0 -> 99012 bytes .../TitilliumSansPro-Light.otf | Bin 0 -> 109008 bytes .../TitilliumSansPro-LightItalic.otf | Bin 0 -> 107036 bytes .../TitilliumSansPro-Regular.otf | Bin 0 -> 106736 bytes .../TitilliumSansPro-Semibold.otf | Bin 0 -> 112664 bytes .../TitilliumSansPro-SemiboldItalic.otf | Bin 0 -> 110452 bytes .../TitilliumSansPro-Thin.otf | Bin 0 -> 103536 bytes .../TitilliumSansPro-ThinItalic.otf | Bin 0 -> 99344 bytes ios/ItaliaApp.xcodeproj/project.pbxproj | 48 +++++++++ ios/ItaliaApp/Info.plist | 12 +++ ios/link-assets-manifest.json | 48 +++++++++ package.json | 2 +- react-native.config.js | 1 + ts/components/core/fonts.ts | 4 + .../MessageAttachment.test.tsx.snap | 31 +++--- yarn.lock | 8 +- 34 files changed, 276 insertions(+), 18 deletions(-) create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-Black.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-BlackItalic.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-Bold.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-BoldItalic.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-Italic.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-Light.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-LightItalic.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-Regular.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-Semibold.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-SemiboldItalic.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-Thin.otf create mode 100644 android/app/src/main/assets/fonts/TitilliumSansPro-ThinItalic.otf create mode 100644 assets/fonts/TitilliumSansPro-OFL.txt create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-Black.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-BlackItalic.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-Bold.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-BoldItalic.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-Italic.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-Light.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-LightItalic.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-Regular.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-Semibold.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-SemiboldItalic.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-Thin.otf create mode 100644 assets/fonts/TitilliumSansPro/TitilliumSansPro-ThinItalic.otf diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-Black.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-Black.otf new file mode 100644 index 0000000000000000000000000000000000000000..3cd95e37eafb43b6302c6e064fa23a909f2b3bc1 GIT binary patch literal 120080 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

Dr^4?zJ}(c>{Xr8J}| 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%0Dd7&ka<1>h{h*O3=jvHKmt;g2;g7Mr~u$6$f(T! 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-BlackItalic.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-BlackItalic.otf new file mode 100644 index 0000000000000000000000000000000000000000..a6fd8bc8af77929e8aed7e77372e482f2ed24dc1 GIT binary patch literal 114036 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

d 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 KSh`}-oBsz#C!x&% literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-BoldItalic.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-BoldItalic.otf new file mode 100644 index 0000000000000000000000000000000000000000..bdf1aaedfc9c0e37eb5a495fc0b3257426dbd342 GIT binary patch literal 104000 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-Italic.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-Italic.otf new file mode 100644 index 0000000000000000000000000000000000000000..51f58e72f82d33f60f8f6bfa9af4361728e39ea7 GIT binary patch literal 99012 zcmd432V7J~*DyZ!UhW0@D_^ zsIkQ!3yL+0y(UIYVoPT6V)lRTEGRy2p7(qHzxVxpzYm=|<<6WrbLPxBXU^Q&xP*i_ zWQQgo1_g&jL}-e)v}uM=ldljuSr*wnJc7H*twrde4MNB(GCr>F)JK6sAm0`tV^U<_ z#89W2)zOH`pMsFGYh2&<{_Fbuk%o|b2GmbY&o>lZzLo`TUEL7kl5#Q)87&#}eRy{j zf<6ZdY!2D_K>ZxZH_OQ{9dY}!s6P;*>=3daly4YO#3aYVD^v-AD=_3|Hd+194E0|i zWZkx?u%y(y0r>;IMetsOP&{IiAw^ljdbv%&5QolxB8GViCFsGO!58aev+D0xtgF>9 zL?dems`ntF$#J0$uW>5+}7KPLPXgm{#hSE*Vw`e;wo@UH%s0d^QW6P$( z%@+Yy54xTC6_tbrLSId39yO(EkSnzwwV*`Qocaku65^?9^9AZ1azVF|0^K&3Q5TSc zvO-NE@4`4D7wH{^r8eeAq+J5!Hz6ykKhOrF_EaV6M_)p*)FJb2>MZ2910Dv{8vSK{ zNu`-D0UkPZ%lr#<1nH@}Ku1sHN_R#b;QcGe|4o&lczOaFLVX3XFNz@P3KUPxMMaR8 z0gipC_dvhSs4uEU-6(hSYH9)MPxm*AbRvY$Q5$MC&`zT9e-oGl^EoMyIRN@gb5I{7 z`Zo;pRHXYre`yXH24B<>^1fsaqxn7%;2dV2qdF{40EWL~5>X%H-PBF&2> z&_2lf!+c0{(jY*;J?ir9$-GE&BL!(rYRnI%SfWooZvQq7JSyQL(TT(ozsgZ_i6+wg z6W#?J|7{FBP2DnIB=nTdFgmq_v@r2N;kv%g5wM7MH6}=sm11|`)%={blBd1%K zE9r5t-m`)Bi_PByFX$iyL2!ehq9ai--3;VbFogOwQZJ9{Ws)?{b)kNq>(>W~CnJBl z32OC0Zb`DMVK{{RXpm+9CHOR4TV^w80}sLrAn)pB9^gpi9#vfz*U3Nz$2e*mDZ;uHzk=_A0*k?Fyupf7nBL|bRdzbl3bO-F3=D4Yq~xLSxaPW zJx~10x+d$lUbfcDS4qa!%UNknSAp!6;_JwPlH@L|k^d4TS^EzG_@hn+nEwD63aTw~ zgfa-`vJW!bBDbv|f05!qeoJtO90z$^ACvWGu7WyC8IbMuflfuy4g0NMdzLcuXc9M& zHPSl#5G1{jV6KGlhZHR9(Y%o82uV-Whg?|S{gD7Dm~T+6Q3ASzk|}GDd(I&1PV?k zGI|U8tu@G3Pmm$4&;Y1680vMU6fhQh6bAJ}px?ph4ak7js5jK>K`TKwEkptI5QwLv zW^_8lGa#Oe+JMgTqz#b&5_l~N;w%UYpnM+W%VCYeJ0{jFqPqx5){YdYx0V2F1;N}R z6afLOEuaBH>mf+C&RD3^3u5W-1+hV7sH^!pLgo<=vS3Vsls$|&8^)JyzC-l@UhDz7 zlLxsdgZcx3{{2B_P@wZDu87zyR5GhibbesK^6Lg)*j4}=~NVjyHg$b^spL9+Oyy1gMlee*g9 z%OEU=upPoK2wNf4K-dX&%Im^Jh$lc8384tWObA~<7zY8ULh2PloM&l^dRYC5JpQkQ z*GO&ke(X`* zOM8+O2yzGtbRX7VSMzgfBiI%BD8kABc6UGI$vgpl83%ei9>NBYQSDI#(-iF8_NXz$ z!AuVn2Jc%)dopH^nM26xPqXU%Th05+_4OAK@l1zCxJ zrVK+MeZ`A`R^G5Xh%d5+?9R zA!qWG(lp{AXDPQrjgebjnnj+-uP)624f@ojdDIA`kEOm{gS4Ea8AMsx0@QtI4D70< zGzI%eZC#p1c2vK*Gy}RIqb_ZQ{9zwysn5cAFW03x;9-}#v^BaAUUI|OWPtn z<6W1QHRzWIdorc2+^#{|p3;C_Xz5Gdpxm(mo=zX}gn_zRZL!p+DCA;wtS(K1E&5Yk znn8Nju`X?eg4l?f$CxP;u&+`PQpvV2WnLqUlqzPK>D)R32({$I;AmKRBx#U;6g z1sXpeUtix&k$EGFa!ND-K7Ky_8t(uD=I2{(sObR zd4@Ef+|u?a3>Bgxkn+VS7xYFBDn%OPjnY9!X;2!JYfuQ}(!rk2fLYClS_UY~fLMb< zp(GFfWs+LO&{it7yh{X#X^<}f_-&!I5Z>lM&0|DU#58C*Wf1RM$ zDAW_M@AMB)>S0(Qv?DP7lfE>c^p;dN(pf$mbN#6uCJCuu$OB{V99b`s4b zZnxC1a8@SaIf*MZz=slFOI$9|TH<%9bu@6B2CT0l$V=St5pqv}luk+|?v~ccKXH!4 zADRZ3ecEq5HU_ZC3;@rvmMp8X0`d|b(u$M%4FNk)N|ypHG*E7#jD;>GfQcjpilDRv zdX#9I2XP^kW&>s7pnXqx7LZYuKrQKwBq0niMhj*uLKQ;*{Pqu|Gc+P+tv3aX+==k5Qz36u@x5z ziqnw-=PT?agQ2fHu$EV%O=v6Hi4LHX=oHuqPbiAwDFvmZ+^Ik+j!LAGse#mB%0T5) zK)O5KpB_l((8cuU^pEr%#)`3F>=*^pl<{VK z7(YhG1TpiNZU&^;q>(^<4Er^>Xzp^=9=B_4n#S z>XYj8>g(z!>Nn~d4X<(0s5EMgm!^frR}-M=sOhd5qAAjh)O@blq}ihRR`b2)kf*Ds zmuCx4AJ0CX13Xhahj@POx!8;L;=CNZoV`?DYOgk4QC_KDnay&VJ!@ueeztjK^QxBP zMA{5qX_(^>kn#CIkyU6j+J<(agFulV(F61|SS@yx3*|~Rp*m3UR1(#X8bqZ~X;cCA zWgSJ%Q$JHCs+M-6)wB=o|1T6dMc-f$!!a_(87R`?A1FerWoos$wOX(4s!mc5P!Cm) zQBP3MArx7u-UJlcr#`4Yp+2krN&Q&;T5ZxGjY8w5X`;~pMcQlpH67|GQmUEo4-|>_ z?CUv@P~@vRia0f(NJg{NI*ObFij<4s05?A{KQuow!!FZ&48jozV2PQ3fN&DR2?$UQ z&$SR%Ls$u6k@=)~s=3O1Q+m_z&pgQ-WA0^+HpiJ$&FO#l`8(9|);!o8Ywl@|G>4l* z&B5>2{oSi}@B7q0?HjhOPd{9R(4+W=&!qeVX&3zA@1aggK5%`Yc;NiN>46;1I6NP^ z+<*Px@`Ls8Z_>l{4_7~2`e6Bk#Sa7TD<1?rXo=AMs{0r3AHBZ_p?muK3HRDS>~+uM zp5iXPd;jj8yQ}Xux?{RE^7ew;vu{n}!s_fr=!LR@0G2R`-5_>_&;&wTDNt$fobfT# zqev~H)>AvEUDQ76Fm;3?l&gPdiQ(OT>hPy!A9K_uY74wSO`V0c_l$Z${Y?WNQh+CC zNz*dgj+WCdG+;!#(tun2AKk1z_3vUDMr8S;>AD!G_}~4}o#`GZAJ)Aa-53?q13^BP zftRuossNAB6j(!R&^ojMeS=P;Gw2+g0bM{J~MHx=(#UJ(2bv)aTS=Sg|iDD~g4+`x_Mj z@+^b;mKsG}1L^iVNV|>HQ0f3RmbyWeQI#0o=3{^#4q$W@|sY%prYBF_)x=Y=orcn>6 z&!|V#4C*O0llm1n;W;&zdPOau-cpg&Vl%|FQaReA322jHz(FF7vY!Mfu z6`;U&!nWxII*TsC!Q5?Nny0`JZ;?pEwksu2&8XItFQunCQ(?egE##JS>$ol4KJFlQlB?uyaQC?9+-t7JnzgpGR#>a7n_IWF4zTWM9bz429cP_n z-QRkMb(VF$b*c4e>uJ_At>;-UwO(!gjr9)e1J=i^&sblyzG{8T`l0o&)-SEG_1`wE zjh&6NO=BC4O$(cLHd>obHla4XZTi_5Y=+tt+l;cAVl&fbfz5K8jW)Y%4%i&CIb(Ct z=DN*Yn|J_qsr0K(c7`Tqu#NLV|T|Mj(r^aJEl1fbu4xq<2coEmg54) zm5!SncRL<*JmFaB_><#3$ES`j9p5=wIoUh8I;ovnIQcqta0+#baY}GXamscoavI?@ z!RZU9xlYTR);eu-+UIoC>8#Ubr<+cXoqlur%js`t8)s){cV{nWZ)YE8y>l1m?#?mJ zeVhk48=Om>zjR*Wyv})t^Iqq}&c~e3IA3(W?)<>{ne!XxS_P{}SBx=~`lK65G7UZ@ zCBA-n($l}JAlEk_Gz=oY@K9e8g@lBJ8`8^4GY#3rhVo2O*+2>`$@JXf^s@Y{yvz}n zJh*K#>S|@=W)^3bB`-XO?Fg8ayq=p|~tR&rnuc*f7(Fv@9miKBQ$adG;kGCFI#RJu?G5 zY=)A$IDynCCC@}l2W6HhQJT3j>5(n3C)`Cc zp+T0&QX@JY($?2k8{!+_>n8#B3zyLL^$XBjqR^gz z2?0S${K5k)!wRsBSZf)GmIxj{t&Y^xN@Mj4*IGbCSO9kD9$t_g_Ytw~q&t6q3!E^C zO3=B5s@?T*WGxXcA+U57SS0cb*IBCR!uozX4u3xja(W9^dJ9E5geO>t=j%sGfOwYn z`nrhp?XT4)Hoz``bQ`WsB=jPgKuf&<3sf>Jzwi#0k%vjc0BVO5sYa@YNCSis`H><+ z=EuSK2Bd$)JN?s{_OrC|4JD0zyJyzp1oFIt)Q7*$@+wr~Sjb6*e&K!**@Tm_KLVCs z`}qfCe+u8Q=no>Hu)(m&^!oePts+8m zn2ExFWlzgEbr#5VGo-V~6rF{`brB_>(#YS>GDN)vYkffJ2QHQ94-;bWMh<59(0X0A@_ z0U;emWfm9uNDq?8C@9Pa2Ba>XhV;u*6^p6p&PA zZgx&7NfqSQ0fL_VeS;*Hf=C)aL=vSTl2C+58U#erj6o!=euyMWKqO5ZL>5E~%JRW# z$n=q72|p4O{G=4Yk0d1gq=bYYi3xsE%7UMiBKS!O(m|kvpRccF+4+VNPVf!2;1_7Y zFVKQtpas7`3x0tX`~s!v_4m_BQv`ykE=QXC=}2=w9ck`Iq#D#D&HZ$wxgS~BP$)4y zM1)pw3TDY!Xk`KIO9Z#Sudf9&Ukg=xi*pMzhzVAlnc@qNmGV?*m)Pw&} z@@b_Ku!x{$9S%|@Qu47u=!=e?NaR|NeE947JQE zS+}srEz{Y-GXEV&OEy4o=)M3l9iWB-iS?6Sn4d;8hLn(K7C=-2L}5Pl zOSR72CpHMYAoCdD8$y=-$7a$@`UdzB_6_h00KuDp$*dh4bou^()tGJ5R(2dlm>6KAJcvf zAo&G+EDz9qOaq3wA(E=FC=81Z3g}Ksh_()hAn8c*j3Uoy@{A$R9^~1RJbRI6EP2L} zXFPfKCeJ?P*_S*M$TN{VlgKlfJo}MnfASnao&+~7QD$1AAGHKGEx}DoaMKdpv;;RT z!A(nW(-PdY1UD_gO-pdo65O-|H!Z79tpa7KI%~){d{f-oo|^ z?=G!0>Af`nepz`^LlfXbC!UF>(;QoQcB!x&)?+{6g z)?Z7EXn!p+f*~R*LrW}Q$Pp!>)f4fq)e}jj)f1tl)e~Kz)dvy1Uj%wk(yLM|=~WUF zy(*=MUL^@huSy9?uacPPRViiBt5S;SRVhIrOKVYrEX5LJ5);T$ia;g_39^)sAd{Ft zmQohTQi?#967`U^b&$1nkhP`tkhS%YwZv9|M%p^a+LC(6+7FPm^^mpokacyCb#;(+ zA0X@MA?xZP>*^ruK0wxefUK*BtgDBtuY;_wgRK7mSzixXUk_Pd2U-6Cvi<{PeLZA7 zfn1s;!7a^_pu&^Tp)`v?gh--pX_f>Ho@D%`Sr$m8Sp-gL*1u?RNi+XTQJuP%rpG@A zKG*?^PpXw!kRf?ONHYIJ5}4CBJiuZO`GEmjTqv=tZ>Yu82njJ17Z+BPfhhnH(ZM7o zSsElEDQc2PD=f_+iL#=Mg0RA(k)*O_kazl^R+_YtnhTYd*JZsF@p5(M3nC?j@!U4(%dLg}z{+2#WpP{eO59w!&I~<57 zGZoAv@cu7lHi6&&0CS4Dz+7gknS0>*|DAcuyaPY~VDRg2wK{Hf-s-N^6RY1?TkziN z*bufKc&p$|vbbSf8F=JB=jL$B zxb@sNZZCI&JI7t-s<{W&F4j8hFzamaxPN86&-%Xg3mXUUqxZ1Mvl(GC$!40(Y@5wC z`)q!+xnT3qrpDIE*44JLZ3y_sN7&A^U1|G+?Qz=+whwII*qXr$u9E3wak3m)xonc` zOW6|Hdf6`7N!bnAE!kt)U%U;k;G6O7!1LXUPv#B$Fusf*&wtL(=2wExdmn!kJl;R? zcln?B-}%4nbarKSSL|-s-LZGEkFj56|JMF*c_Z*PPY1v9RR`7~#$mL>5r^lF%^iar zL%_qE;yBxJ1^9DcI=*#k41U{qr&6bx;H^F3ROR%$b0gZ*;lQgGRqL`mK@ZX6x3-t+`u(Td-R%w*hXMZo}Qix_$08-))uKR=2%wN8Qf2 zU2?na_KVwVxA%>08Y>#B8@Fn#ZQKP1y=$UuVpYJ2)0&8LSO^^d6Jy#cu2G&6!~=Mc z7>`eR)OI(OEAbt?8s9d#;Wao&^cUxgm&C>5lUh%4jTnUe@LV;|Ev{nu7efR-KkoZ< z_q5<%MvqmQtnuXTHERA{Tcw!XYF$4(-~t;coO@d7{blBxP4&y9^{`K01) z2j_Y4rbo(khsEUIa(l3RO~yrm7hAoLXZZnweCoLIos6n0oN@7s#b?!5@g3GEdaUiK z=4;-}5O`cH$j4v6k!I9+0y3i|6Hp~@%oX_Ymm@BinpE=QnoD>vuQb`>OZc6sD?W*n z#J=LUwKDOBXsYcf{vh_pz3}&H`2~EDjpO)<7i*Liyi!C*`@eW{ca>4S@B(Y}D+`Ir zUw&o7%q_FmsWCT`#Z6~bZ^c%sXYtzt#r|EyeqyltIc|AbkSnXXe!_$I9E;m?xK&Mj zx}dA!Sg}1PpCjC_ar<20jh!{28O3Y&Z(aDqoXzT^_)9i~OAzO=le5PsrKx!1gki<1 zA)ChS+OTG>QOz3<&Dpbl;iQV(!Z8)<7;bzLkY}NCvqY+NAeB*&uPiskT^?J(@4SvT zT<4v;G+|SDiVv= z#e;IkCr=rsP84Ue*SKSN!6G4~Eug%zye7ValJH&fn+#tQuMFkNTT85C?46XN8aaFH{0VB_dEn)pS7NW=*lT^R@VGG$ZzCXuFK~*L zMWPaFD^fRLC40|H2;}zSG$7s(F^v^RbNE|RI;-WxowdVQx$*}03yx#)H{1d-4zM%S z#IvHB6IDrPHYTZQo!-!fln`tso*CL17cmP z;VLLTwtUNe5BcTHa#La@UxnwM$DdV6WR+dwkH0*2@;I+FJ{?_&y-!@l^y%Ww;VaY; zE7;V9BNy#b?OVD1r?XE-8`VqBu}1G@p`v3-us(iM?x~ULi{?kT*cw`P($qaG6CD%6>u;t2Crp;`qs3W!lm28MV06g zBW@FuyM?X6ay75KB&@#5;wId}e3b%y?t`I8m zk3eK zO+-QLB~B0v#bR**z!@T7j~Z__ii37qF#yT~cl5!NaMa>TF&cwNs%5Nt0t8<{e(8tu zaKF@UqKAhbUsoQ+Q(4@G<2TJ)_suTVp~7!MLi!C2FIYTk>0}_oJ)sLH$1bOFPi(Wl zYOGP+7eunLg9XVWP$7;JZNhPhAU__!UgQEnD28!jGZ2x0Q-6W)!Zod($ZAUC(we)A zRw;)uTJ6DGBx%H_lGN^pNbG$Nvn#$_rRJ~fDDD|OR4dwf$mgDBjTN7dDxNa`zykGM zlguJ0>jW=9{*K@bJ(URjLqYKtQX9C1r&w_VtS)$rk7uC(N;N0(0X&c&UxoKx#G#ic ze*Dh@#ZNq0RF0b*sXobjf0umY>D^br$U`^QUV9(2sSsqlweq`RYZ76M9k>#aWAAXh zMJPF&T=-*nK8pi5-i&%qK=}KMJUe&$!Xw|Re#$-^+7kLPeRq-Kr(CLW0>+SPdI=@~8!zE1tjDdp91|IFRuA#E=&imr^CV0w@ZP@Vr&+~~#~|gdnGRl~ zHrL1){21hs*xpr14Gp@tInFOHry36kD1Kic(2h)~dV(Q)4edJjWfy zb6GrxTYR1cmHz|&jK$|U9;g2YYEF4vSbCQgf8)kSv3M3YtwOvj-UE60?*V%WwJMG$ z!#3bnO3>Z`McpIXsBlMEob6!Yt_4MnTW}WyIpFr(g4=e2+ja|X&pEzknNo3ElA13- zYF-uoG)-qG3$IP(AP40Pj>h2tD^57SAwNcJ6f1TW?IMb|{s{bZI>TgZs#@`qt!=@L z4QKH+ZrX76-!QtG7f0+D`2B)BDm5ZINOk!u<&j+*&+k*u|7^kZ)zj{eayu|_?MQ>F zdtAPzW%`CDD}=XA!x)(1h8xoH)N0gO(*?*^DYCpoJj3 zm3uZ|m*eXejmu3h6y5rkj9IV)P~Ew4!?v}{Mwft(Jg0cn(zR-NKVdn5dduPMM2iuD z4-(2-(nWfhuhxBb2`043^`wi;OYuMgjSFHJ7 zbz%2S>~sw?C9rChufD^_ar~8U^F$;%B#GO_?%_i=VM@)LBJojNV`A_jaWIY-Pt`_> zN5q<1mOuFj7XHKvXKbt*c!6&qz2xtEC^r?FuGd5l-3U@lJWJ;2EC)7;WCDEC#0vDh zsQe)Yw>Wol!Tdu!3+#{4*1kG%kZ1+sxC@Nv5s;%3CmtbGF9%BT^MEd38ngku%^Q!6 z+xv3Q=_@~EuTRM?1kukcpRYgq<3smjYf6TM$4+SRnFn8FR8Q`~8egos&Wmk_UG>Ku z+;P)KN3h=(5TJLsRd3i1oZJ+~ExE*snEPt2sh?>KkDX1^m7cZJp%Y2(SPVbv;&p~M z{&D8{D)q8z7}4ImSJ6stR8lq$6htPB^k#XgO;R- zh5f|OM46=L3o57;p!dJMh= z!`gbruFc#FiuJb%NrK|{33~-hn>r|=!o@uo?o_VHPl!zqZ?A?o*}}vs)9oti)lWG0 zI%8U6`dhiQk~Own-(F0N6`j00f1h@xRQ<4!Jvm}+Zhw_Q7#qVHu~q3UJn#&5eRBd# zo{FGlnbjo$B?ToT^;3pU>osNQ*zmk`pK0S`+_3vsr}wVM4s&+QK0SN$!V^2U-u`;w zX}9hxOSUdNF?-|k@8|8ZQLJ2x`SjDG@D()pW!l2bF%dS3BU7?Rr%cMQk=JftEy!y} zuLe`73eTD{T1qMNzZg;`h z>CjP>i!P$=<-VAH_{&bCS`r^{hsu>_*@og?Y;#?YRk*`#?1){kZTRt~+IDG1HCAuA^9%NLKYD+>(W6#h z>+o-N!eLN*Yd|3$5?*5$;a^N|#SJi>c(VT!PlGq<0ezPcS{4B*{TH4ljfi8N!K0up;xhIUoo9IB^EZ!F&!x!U-jw z23t<{lpr@XPgmjvxDXfP3AmTo1PkI|agJC7|0auZSS70PAP;dNzM{kfLEiVl z1z7va3(TJZVwBh$c82=quW>V2-SyknQ-b>17yrSw6&CnvOu-5lchufe`kyzv{^R;L zMzv%M`IUzB9Ju(@^&j`0*{A+-@3{llRbNkEXjJ#)Cg)5{$M7e_fSy1piRwY?^yZ@dDGX zpEkYyk4<4q4pQfA75=G$+HAVd;4s`s;7t^st;BLr8-lRx9E%OGs;jw!f?|ibx%T}? z(|cCbaq@C}?Gio%?P}Z^90BVOKj$J~34#WLeJv>N81W1X`u;pV0~tRsocQ-Il>3AN zZXF2mZXj_V9q)@Z&M)y%MJm?E2#S>h#%1IrxhqnA1bIE@&SMuIo4wDdGG2XHxo>3= zY$^LU*iz1uY{jGBseZ~m+!@rh6IkS?Q&rSB(-p>aN-~MsabqG`{D7NUT$@}wx=6HR ze-b2nTE*dLll$yicOWN+hl05Q4BewPk}ct;n7XimoY=p%3uNY-BBf1lt$>vRFKL3G zS>vs@|Gc>k^97+lU%0NgaUB-nzifheWvU>`bHsqI>hp8J3X!;I3~+6|Q*t zbj$XKH&uVd?GPCl(`hB_ehBpx7jd{LNV)hH?0zhY=^B2^Dt1&0ii=NS)}CUIq$AGP z@DasI>}z_eRHXj;fK{wKu4Ahj?k40o^O*93yTaq&xGRW*gD=N%RVM3eRK95ggReQ)#CsQQnFhB<8ZyiuzCL?e3Ygwv zjCfV^*+qN<76AVXhfDG97vgSMA)+0Ag!h{$wmm0~5D&J(2c;UY#g%3h=JUo=flRY} zFSlm#il=3~e$m;?CH)Zu=u< zNj|>Cm)Ke-&QE-PWFl+4vitspqvh>%1O3E+p!REkP%uanTT>tz(uHKbO(aWfF<4q> zIDRpRj5IDu?00kuYuvbO)4HXj3kMD#k&qiZAKFIlPCI*R@44&yhHvSen?Gj84E5m! zYgT{jzV+Y~3Fp_ft#Js9ZNbc?Gnc4m%-FDWz5Cil6G}414mAuPy=;?*db zYv;l-6@??m6irYYxY2VbE?lmX-^3S`cg`R9^Wm|An5cp2or=}Xxqi!st~;!P4aheb zSU`&dKz{{hoe(F9QDb9pv{K)AIsq}nt+smI=Bg9m z{h6t}_~YrvtJQC~Bcs2~iBtJS_lKQ-w^i4HBFFI>)_C>LUk)$MNfu$j^cI^8i3bZ( z4g{T2+f;c8-;;=4y{({A%M>s+G#>KlOO}4I%pDIpi*s>{OCt^pS?95QSD*EzgIRvT zd3Mr(-jfpDJ##nzid$CWGdS`4%CQr_0}6rMTLSxlEKZDlFS0m`l)*~@k6wAuT3Zj z&E<`Edx5Ec&Dl&fmZ%y&0V#_3iM_$rlrOq=b>4u%6V#)+v!Vyb8@?&ow{<^wkiI&} z8ndR3Eg!#V1+NU_MrtM3vWx3g?(2upxf}=Kg-fqX+%>Kj3v`%PA^9ba_rs`;ikKdF zLbL&WXhyH3K0{z86D#m6@b+Sx!{AzSC0g(k#^=G6WD!7o2SM5d;`mF{rfZUM%2!oM zZaFIHU2ldb9;*hMi7VXJ`Qzb(-?Ef}aq}cWm@n+XgJ6}(S5&JNPwPDb9(-+YCGKUi zX20Q9*IKiDznz7bub&q*7o$mJJ2pgZNsP4yj-g;Dc7_A9 zY9bp1w?!leMrRmJpHMMJ^oH%BLE1op)aQ-;=4Xkn*`iYmn4a0(!XH_2Hb~G9#s|NA zQ1$*~@eB4G$8Vj#amyanvAiuE`5h}(Z`h+cQm`?Kf2aR&G=VjjfBSv&NEHqL^b@d1Kh2rrXv(4qdrF{)(ZAWlZ z41SD;g5RWppRD-~pVZ7QgEXW?pvYp2u(xO9UHiTg@AM+2rg*BwLiGw4CkiOZ|)RP za1RiEXc6vD!`&?EXCCEK)a%DoFhgH=htpLw0-<3P{l*4iDzlnp zwaesL0Ejm*Z;rkPDQn{2o!wAyB;%~_jAwvKQKD9Lt+?dP^{Weze=S!Y?WEL;`~2b-g1 zU&*fXt@w_7H$I#n#Fz3Xc+swfT`#*KcBAcP*?n(!*1o;HQEn^Gkk5dNEI|%q94WYp zlH*w6_^sm~j(@|Ik}*y*-~tJD);dpi{@MAR!cL)91SyggMT(hwz}+h z`O)Qp%R8lmvbi!y*+-eE%vX+8exY2eJg&UyDu=_zX|8i!kGbA*ecDLd=vbrsjb6Js zx_PgBi${1K@x0>s)YI&x@M`AeHb%p4og`^V7}$YQeWiY?0eyN{h8E zuC#dC;(g1&mKiN4wcOG2Sj&ek-+4QDdwX~D?&n?P{kivF-eN1hm18S)E3Z~9T6Jv| z+G=^L&8_yeI@#)St5>Z(TDNT-+&Zase(O=K=d@nfdS~l%t?#$7Zxh=lw~evQi8lA! zc51t!?WVRj+9}!vx7+1|d^-6|^x5Hax4moo9__zuzqb9c_RoD;Uw7Z;zMXwDd}sO| z_Wi|=_Ve`X>$k_hxqk=$UjAABh5nQL=lg>_6woUmJ77$}=K)6oZUns2I%>nTgS8{I zM(uj-cJ24t^V*x*_d0u>UYD*b)6LMW)$P)W`p)_x`V##V{a5-sfr`K>fr|q-2ObT4 z9%K{b6x2GXdr)N1*r0Vm+k%b-UF_i9p;L#r4g)(Z>aerJ$qx5A{MM20sOcEmF{k6Z zPR%}vrY#(z3Hs%+@kZG&O5uPx^(MO+~sapm#!_lcI;Zwby?S)T~Bwt-;L?k zrdzjeL%L1qcA(pxV7p*laPQy&!5P67!PA4k4&D@eB=}(n8{!j;m{kQPs6;!^1`aRtGfGkkLo_X``6vS>wc&EFX41}qwta8 zd%}-|-wnqRRuRo30wNYhoQ=32X&vbwIWV#?az^BV$itCGBQHfhiNsMhQ9)6qQIn$< zMs0}tF6vxVO|)&aD%v-?OLS~>dUQ$j?&!18_oDxZp<>)(TE}#X=^K+CQyw!bW=+iQ zm{T!#V*cpC^ls=?CtZ*?ZjRj+yEFFN*uAmmV(-TO7W+O<9w)^0j!TOx zi<=&|Bko$<`*>NrDt>VM)c8&D2jb7fKjGN&xIgiH;`7AXB+sP4r1+%Nq!CHelU5{cO*)xmN_I>3OAb#SoV+giQ1a#E=lz&| zjr-;F8`tmae*5~}>u=lNyMK6pL;sQef9QX;|F8Yc13U(#4wy7x?SOp)&JDOb;O~Ks z1APWY4jepi^1vkn4-b4g$aPTXL5YKk2Yoqc&7kiGog8#|(A&XIgM$X=51ul3-QW|0 z-=?rB4k@iuLQ_&wW~XdRIh^vx5Z#agLuL)xIppGyH>uXCj;X5Dz|_dp#i^T952c<@ zy`B0zRWvXLXM?w)lOf)aZYVQMHmo*$YdB-5Has=dq_JuCY05P3w4AhW(vGLyO>dH3 zk-jngZiZb(QpW0xUo-792WEbj`A1f}tjw&>v#w=lWv|UXm(wICGUvOTH@O{i2j{LG z>NvFT(3QiOVXcO3&SUd@@`CgF=S|8xm-i&!DqqMSm%lE5PyVU=s|9?4P|&8Jb3u=S z@df(|?i9Q#lohrv>{6IeIJIzp;on6~i}XcNMg59~6^$*LS+uff=WzLO?eNgydBZmk ze>ME?;>hBJ;)>!4#h({1F5XsrxcF-E^O89wk4uM^-Y<(R8&S5g>_)k5d5`iL)5THW z)ja%;O0Mx{a0_WaJ>YLWYl4H}0q^u|?VG>BffQBqkTuCTG3xz8RxUn)|3*xi9#v4Q zaXEu$LZi-H+uA%hA{6b#5r4_#Vy5XUTugxvbUlNo))Xkaa;ai5dx3lCdVxEFi(#uJ zKMZc3&@;Wx;iz-H&Ny#3T~mB(YUa8Fhq9RA7M){7hTDbV#HT*96Gy=J8JS`PEBbH^ zG7LAahg2&=jFQ?|GFf6MxEKg9A5O|BDn0Q8#+HXg@)gC|LQuf$q=O-IgVzp?my!74qx9WMYhtFe^ zmgO(quUc2@uDprIuxH0?t{9>U?cYh{)$)h9vFwZU*x|h5J(kJD%ripmknaSA2wqWV zL4IT6c|&$|W!gibX?yg>bzHt~gcHr>76~jatcW}dv51%{xTBSJnFkwf4THIT^ zSNUw$Im~~r#?8fiwpU72R-}9Iz@1k;a3p@C{At^XYkSv@7}70cut*P9kJvDA^Dg-M zz%0$S5l&m|u^l+hEEBF+X_<049LYG>d6+V)!#LwgI0J2@5-Y;RR&W+RA2yziO^XlVrWF*pp|3Fbt*MDJ4LgDJ_mJqy z?Z%1$OVdPW&+0tGpIt@Nc~kmdH@_8~S@|^lWfgVYl)>Od;K&vG=w!GLXAlRlmtfKc zu(%I6;`@+fI42ihUQ5+oNYvA}^o;Y4+>ISC*%kXw3 ze8yBTE`~J)a*JW-dzZt*G5ANgUv6H&tO`@n`$Wdi`-*UFe?@dip9oKXwLE*I%p|{+ zcMBYI?lrDTa!QMng}T#OC~YlN^knM}=7I${T9!_8J>y0xDN^TQWq)DxEWzXl z?&9s>L*?aZI%kBO#>LyLKsqmQ%&)&+O3w;PFB8u zlx+7G!tVXDCDVl`<79_k3gR1}8yrdi?Qj@_<4rO11hI{H0}m6#v-k#-mrBxO2q{mg z?W@Fj!nEC{aa5&gBx6d$v{J0ZT}&>x%hEfw!^ELudzqZXq0)@{R$+M+bxfL6%H*$v za}|>h9QkI53zQ_`!^sJtbpQx+rc@=a6uZ>Ah+Rf^Fb%^)7oVwh!T?CrNK$MoIME%e z8B>bsmhy4*cgR`r6q8W8=HUrSwWs#|`N*u$yY+tno(mS#IvO`TMqS zyLhniqqF-DKUdY#wYNa#nS#Y3=dto~#98==3pYLQysa8{xsJzP#U(csKTN1enySR< zhw%@%5svf3R^k`62Jn!{;AbOBv3n~#^@nG$?Up{>YB6z$nAN-zJ_7-#=8@$ZeQ@jsz21baW8gWub`#L?qc64@c*bh6!#{0?iq6X`Qz6{HT0M` zYu%s+?ocSc#O;;WcY&|Z^T?0zl}Eg|fHek*Twr?9+S7346CpZ$g7~pd5g!VE^#3Oj zU$zpv3*yejvhCYsrqnx`w-irJe%MtIzk^c`#mfc47;qs?69!GZXu5fkIu5+tb%FA+ ztikE7hx`;~1bON%nW<{MAn&_Fw%N3sFSos6vNX=12oQ*8G-~~862TPx#HVInPLQd=d$lJAyXCyUmd6}}pr+kiO2j zC>@Eb<-Pw9%;K)&Qti%RVN zfB0&|a zjZ7ZDQaXm(0mo1m;d{9q;C+<$B42}~38gaJOYjimYMEVvyf@AfoK5QMil;ctt&c*hC9(I#~Bl6+U)4qY)rbcy?_)K{OK1DU&#E$n5t|&|to5hPkUhzGbfSbBE z@$X$WsVb=*Fhu|H%EveF8$Ei6$JxsqZc~#EADYS6b`*m;iK$|TmRtHfQm5dyO6+?Y zw*%|v$8plPaI07&*b+hgMyx*y_D30^%+?C$75F`N15$Y$fsq%DPnE$)cFGh*CVSU0 zz=^>^G-SqhWaVDO6Hh(6%;0X7O3R@FZUj{FwY>PR{(0QGQfWEgn*@gs|KX9KT(l#o zQQ4+N3>@e#R*D7UV)h;f2fNADVlw*^=Z&Z0e7um=aq#hAQZP;e7r0#0Q%3y?xOJ_^ z&2r!&+K8jT3)}ESL@ug~7fkd8IK>>ynBw6plz;geYfK0BxB${1M^sii-@7ri8qWI$ z;LbnD#49in?-DAg(RdSsmjI{1u}$jV3DALD%&rNqbjG38LvJXK;26{3=fX5xaB)hN z^AS_FVx?&r{#H3+A8QOAoTXNzZj~)hVU5@J?^XkBJy8C4lRKuUVz42eLn>4dZBud2 zs0)cl;e;U8`RFZ0Kiuz{Qn9E+v}G$fMG$<$!G1UM%siuNJ{+_MPw5|&yYk1qb8r{j z_E7Z{`1%yA|AYmpGt}#_J-FbCMHwslPwFN5iOwoTKfgnUU#6+$TH|@V`y7tFKut8w zWK3nI$I8V3t?RO+X35!N;{x@_K#*pz2f4t-!m*kjzMi|vJ@}eEXWePEv~M|$ceA(~ z+1_;H793*#TD^ATS@(U_6Tn!jczYg?I=`!8b%pb@3wV5$;x>MZn<$TUKkcQs<^iHVUCBH=%B}h z$?+;U2U}u~y~cvEYecbkQB>?*P%L0CSfj=Q_TDujqM~90u}}mN#oiT+#*#J1J;!{{ zo;jfA=DzQJ|G)2da}&;<-Dk}%Ydz~(?R%eXDh&1?-=Vul;NqZPf^D^$Ms>J%RhY1O z=kx=f@~!=cSFYRR#oCj*HSOw^t7i`ScloJttEL?X{C3J_`6Z0nw!V~p$^D#~jMcS6 zp&Oz+3br=pcr}Mx0&FotME&xD+rEogC%1m@ss0Rf(d%&OY`&V^wk~c3g zMgQB9D+H6d5QOVOP)`#f1FVPk0E+vYs>t>B)hl1N*ShR}>1yaT64L`S?fiX-7}(JR9qAx!0cBYi)Jc4qAEKBmL;%yTJ7xdpQ|<$RqZIJ+L0! zba2l>+r}9?r|+JbH)+zQiGCgfhW8F0V;leL&=mugn&PVQ^qZa2f zkC(`1s=P{jBDd}|40SncBFkkedc_R<%NXkpDk{XS3W#jr+0_S~oY7SX zi(7F#YSpyivuv}+m7XtjnD0O0XOAxX2A+;Qyfw@g{Oii;XFPw630*X8$?WAt*iP2k zN)h5J7$PFX=K#lVUA6HyTZ%Zjr4SYnJZRMP)f;TsnGYtJQm`?r1L#}paT+gZ-nyOq z1MJ&X1PdQ1`5b$8>>eK|MJGJRK%Z5%o)_0=3$fzCazeb=_nmNb?e^b}dYlT_>|-k_ zZezu)>z@fR;^uX;#*UmasJEAewYR&*nKB8dD|2~#y*1TpXUO-AiCiy`&jm9b#!a?F z0M6L^TJZp*cumoA?fJ0k$v0ywQ1UG)V9Ou@}VRel4M$;ZZOj} z)g$LtH=Gs2t!^h3%emF@Kbwl|m^Rg_0&t~u&N)onp_OJzDGQDj|Ez(*C{bi(tJh$8%U*2$%&t{k*oixq&i^1FD}XpLc0kUMY#f2scra0O%%BT%g+W0 zmfd0Jy9d(Fc(p)TMIE0kN22gB6ps8+x#DP#BZ~-YE0%(ci^BQiJ2sv5I5B!#`#wIn zJ56g3@0{g3_AZ+oG}wRi@G-XHkg&VXzR-qvMPBRjP>~}-0ia&%GGD@9BPIN$Tl(Z4 zE{3s>qc;V)z6%hXY^$S;-rKbKe8 zHq*rji9K_qc2|0+8OM1CuAW7y_hvQf!w@PaY56{$>W*u^y_A*mNftcUyK@RH+rN?D zt8aHp^4s;2{C*ey>-gs5DrByuuC?A0zCr3J4axh`r5sien4lQO-OxUHq~Fz>#1H{;XKfdeU#n zy#wt-C?(01=mkFU-PT@*O4~YE5~j+6LATsEoqz zX(4!9%N^O}B>rOxUQ~$wqn2X4sNL#*yr?w&Mfp1-kgb-2H-Tj6jJzdw#u2?!p}lWQ zNuRED56twSu~Np7T|@aI@!od|dtju}57KUWgF|U8f2o@zf@kb5@oHVn)CJXk=ZJ<| z7k!O-Gk;g^hjEZTnAQ9-$) z%bM9qQ zrKH&p)MBRdYHxs}>4BByrLsQVNMdCGUM%xlH)?@vV_sJF!U-l(8T=~K|Ab)CZ=JB& zD@nmIqxX58yVYxNr-s6ofxTDs_KZ-PM|9sl$g5rLql3@h6viKjo_@^p^ZV)E1GC2O zu(2#{qA-2^?5(>!PO*YkdJe?=it$TE4a)Js88m3g+R-*kYKEe&$Ge>C5Lzhw$68Fp zSp7#m1r~aIbjkb{@Q&l~Gq^B6`wYgdJE5>H+F_Kfhk1X%VbJQgn1LuQWu`<|@gi`u zRR^I`H&(f&vKiXuif|A~YEJFk)v32}ZO*;Q?*W>Neh|s;Dgdrfqda@=dzHD{-~rc= zF>3-H;ZJYx8~#(}F6Ef)WtlxKF(A-hBhj6f-FSJY*=<}p3#&V<@;D}FJNP%{s;(E_ zZ#sG8uIK5kfdl-*u~*0$O|Y-#GU0NShp;)?L^!Va0?I9?d%YdH1OOYnW{k z^mj><6RGBf_fL)o@A2Pes}e6vST%V?gvaJh;R*X~a%B9zm}6Hxl6;SsMh(oZRxeg_ zuou4&15wZK#L;T2N($?#?XQU2Z#CS0%PSV#it!W|;~2Fm9(KuAKF>d(grs%-Px<}u zu!ElewvLBD3z4*$qxkl46klW+iT$AUL0jX{R;1CEo)fJ_(K?=SAJ2Fg8Ov&Yd?eig z#U=;hVjdN#$cIq`oq1VRLd{X?>I#y)3vwL=xenC!px!{#8)ek{^1_t(8GIN=T-4>r zxZ4FekGLS~Xl;)V?uAjIxbg?Npz0$oS0z5iJP-6ap_tkdo1;zoG$%k9Pb$UL1<1lD zhK?Y|^p^@n@pKg3b(DmoC`^Tc3^^$SrESk|?RIEjZ1SntgxLNE+PCQ1skM#u*Jhy7 z5OnfXdFWQuIiq-`xrODE(TN?-hMkm8deii9iS^ND@Q$A39Sz|fJ>`N)IO&bD&3IYB zkjqQ%5jQC)jiRo}Bh`6lt=_};T-vy3(@9z9vQ~W)4gr-ey!|v>+$u6AKB=Vg9ma1z=|$J5oRz-b8XJAzlZ1u!D+l7BRuaqj*%nV_El2aI%?PXGX1id5=uzyvh%?d3Bc5Kl!z7PE8bEDZ|PYXX^QsjQ^8UXP+_{6 ziq)1%Ib8QkFg<)-N}4%6iOwa`#URt6Ta=MursMX1!TYxLrk><=>q(n6^`=!V64vZk zX;!LISyqh6_Zq=+Fe09&;%;6z;B?Cb+rv|1kFl?s_ukZLZR1r%CU%Gp`EAOs$wk;t zS{Eys6XPG=xX}}!{VwAgwyEyfphwJIFH5_o3Kgy@L181Ot4r|(T*L>E4*8$rsBu_= zN+s%$)aHz$R>u@K*4EY3f3(HyHq?LUsup8{n_=sqg?!An_?WXXyH?Ey1@t`l8j<05 zbq1P9M-#uJiC$Vb9!E+K`YE&xQ$Io*(i<;99gR&U>GkcT+pnS7t7lg8s`Ft84E!Fr zaQFh1%TdNd*S#39ybZ5$OXNx)f5_Hl;J47uo^g_wJdFHs(z`IVGCy3ENwPP>JONJ>RMb= zXl3xLC1#+q@hjx&0R5#Of+>co>cY)wWSUjW3HB~QS19Kucqv!?iLc3L6(OnA_nzk-VIstDm{HxEex@7Jq@~| zt7>MWCrt?}hOgZfAZ&h`d>e-Y<2|!_rn;h~IijoT>wBI!V?UTtUeY>#zV_++L7q5$ zKbVS#ZC@(j zK2*4mwjx^;vh72*>Dm*%+U><+Hv((jzN=CM>vw_b=D@e<4nCY*_%?klEuoT%?(z(M zeg~el2o!<)uD{BF8YD;6J3C}r>$y|%w(QcsZ}--)a>W=>)}@pmMQU z!KM!two2LpNA;g1t{$e{eD7AI7v@1-1vS1yI8HwStI-gW1&-)) z5?_Gx#9>Ju3?Znkjj6Ba$})2GD6MGU=jO^nuKbl1ma6CCQ~cdv#Y91{kCrI33Fgy( z_U+`i3=e>>>BLK^g8pK@q&#pxkiIp8>ZHrTUOIK%xVax?!d>=`f#wgne@E_UnOR`r*^--vh7Fd z!dcTf7=EnnB;4^vw^gdNQFMXrqR3CZX(S{z%Nrv5)EhFp-ft;i^4qw zuZ`Bh&Qn@p^U$I4VJUWrJI{FFUV|&lBS-dBg`E#cwATtU?Zb9Y#FwxnqRT@ly?TF8;dtSW)w~kbu=idRrso4%ORCh3J@- zBeZk<2~W{nYM4ARj@f)UPepyMSz&p5t@Xuie7@0_>*&i5Z>`ZZi1J1T$JH8{N-uzm zZpiG+rC)?^#&$o}OBf1e(Q3oNa2Ne%K2_)%+;^_fH%Efwei)WUFEJqvnWN0W2;aml zFtSk%Nj-%_|7k~d1BGvztAgOso%6N!anv5;yq)Pn1TSj!G=%8Q$I?b_Ab*|N`R5wq z7&}J6?dy3Qu2-4(c9v?7tMi>OuAia~$CvY?Hl(J0i);6xLT3pdO%dF_QdRYnPY3p7 zx@VuzSz?LWI_#PuYDl1@nx-YU8?3ZTc29uAv|724T5F%O1|LivF|7QGPBwWDTUVFG zGavTtnKD$vOCA^bYz3C4J!}&VwvyKcI!xUXGp6B;;HCj%UMaLM69-**X0y=hkjp<` zp<40K>i>KZ3lFV5-|HwvrpbY!YUEifGtWwWvet`kiQ(sPqu$-)F)QoYulXY$Zi?r;812r?B_I>m8)Nd!Dat{pc5*{1y#`9RtIg_6+AAeI=oDQ0)yHujU)NB$A9)zhS$nqNq*H=k?(RR)cX^!&#?v6 zg4)ijo^vU}3CJxM3iQ0bgp-N*s>7%x7Z`lkmKkmxH^a7%#}J?wI5+#K7W zIygq#syi(WLKQvO z!9WGJtVH$e%M=`Bx`Z$DjQaY2W*uR(Sbb=kxL;De;7tP`dY(KEAtf)xqF>45^ecG= zzM4=irG@h8R28S6s?-2{KNa|?if6yfbz;fasjaRRy9cegJ3PgYgA}7~ z2$WL!8tlpGbI|r~EWzcexiXBEPOL_iW)*4QOW%t&Zr+t}%0{Nu$#L7s150q>88{>A zJK90%4o6{0g%*jh{N3V~zo`v`R^9sgb#)$3c3nP?k8)qMWN0*;{`hjX+H=3cHaa41 z>DE9R0%QH(e06Y0*S0FI8^XQYprdp24W%`BiAXhVwGn z{9ymCj8x5$I7#Wp6;-^5neIYA;zMSMW1&+-lUfw_*gO>QRq%&kus#oF+ptTAE4$gZBl+AYDdIbm{ZL5>bPJ>&4} zQ&CiUw{CeUqOdyLKhgAtVzDKH*nrii0*a>CU9(I#pTjH;G8MM`n#7J}O6+S@tt$Oa zFXaPjJKT)g;bwH;d&Sa}iYp7|@Ec9@%QzL%-3)mL%~qSkkPL#P#RBsjzM(S}@mzgb zXgYOmdbpRoDxUTWNeg%38odf&fI(qCQ+~3s5V3X}Sa_yD2Xu7hdUk3MsIvEOR7f19h zNgaUK?leC08^yoL9L`C&U>tV1!fjQp!0)oLo`)Fc}7qmz*ac8&JZYnA=zU#~;+(3>J$K z*4kouHVyuEP7q!fbs9}W*4xOshkbG*vaoLa3BZPb&~4dIZLAlCN!Ti}&a5EH^dSHZ z50Z!)d166)9`*`XsAmumWA)55ja#ql!7f`{WL8H7;k-x{?G*&7O`R1THPG{lT0+l0 zL&c$LOHTHBVlAx%Tz^oq9>A;9E4FEwr8nUsWuH;cU5+O%|d=oarXxM`so$;E~@Yka1NN zSw7}Jn*8BOYMD9x3dLWcxmQd(Zjt?_ncCXBTBid!_heh@!-M_G4V=|`S|?jr{hd`= zrP5`fcrK9E1mHLCOYo&ya@w}$>aw^K9%O5mz}%`<8X9J6pslx(lyu>J<~2a@SlfQ> zt1z>tcb~)ey)1sWr3Ll|Nv75I0%qD|Z=lmBwQ$^rMJyL=s@lHO*APKHVBv1~h7q8ENA9VuCtOT$3zlrNFE~&*}BbGhm&&xn!fDdX!Ks zX{^>|bySim-Tp5#^;6qhS-u)loVZUrC{RIBZSdhcxP)n*jz_{Y(Q<;sMCzYtI+v~@ z&=FOK++EziIrFer^EKN7E_jm51rpyT2Auo(XTO2X`g@zaI!ctWB57b!WYiydl&TKE&{V%1)WzLn%bS^ygeG72dd zjxlJjgrWuzlcQ@>XdK63(l??vb3Zxp9+eVk9PWnQ#8k3?feL?qBc_vk*R?fSDS?dx z47Z!um{|blJd|YGtZp`|lPTEB&XYjzNmz3YN0M@ro2s6yoS=1N`K{`Yc*8$(U}utP zt2)CBtzBO$od?G3JrgE*t39aPniS2G$_XX8x!0L{ZP+6<@R8|~I@PS!19%nw&l}k- zvcmrQL~Xe$3;eOr^)4J7B_;n?x(F(5$4lS?&f3 zQdPTRe=g~Wjz#0YO0o(ZcmTpHoDkO30iIq|VHoqA16_5MR`OZ3S zhbgSShJ8+WHH6Ag4bIOHc!%MyeVwA0HQkZg>hU=;gsIGM5-klF6t-fM| zP|jbIeePn$daqXE4-#(mCqI^i6;SW0K}%;SIe_=nia1Ud;|4-*sZ)=@l6&3$d{VA0 z7x5dP>-IyOV!ED$&2_hWT7InFht2gNY_5-YN!sa;t9B~#`}5bi#q}jOQoX;R+z3gb zWl6L;$#fz^t#rq%<^yD#It8+CSkYiF%~uR;EwIJ|V%QJV&6AeDpyjlXzHRb|eP4l9 z9v|ivimL;aT=&ohU;W$Q#}b+MkSev=*Z3A@(>GLThnHmx_#^kimp9ox^3E@}<=5&- z=mXaS!1Tk;;sD36VkH|fOWmUbb_RRNuZs_D+o-rl$@uzI>KVE32(v9s0QxQe*ebU2 z3;a)}c|1OQg$meU^5?FtF#JF3*>Ugnn-@+$LfNbrfj}m8xUb;l>(JOb9wXUsujNJ#q+DN@&t*fu_CT#`y3X%xaI=S>7CUu37Q9@}5 z<`Itbs*h2OVQvC@k(;oRC0ONWTls2~C64AR&l|S%ERFa-afWcayGn0b^CP{^ zG@|au`0qi3;7o+&5(Ffe09SnimN_EyCxkOHCnizDF!IihXe8?2wVU#iH7h2~oS6de zj&?!r&};#Jr5h)Kz~VF;_*oE0P}sEojaVTEocx4;1;A!Df}X4R$C9~*Y`u@F3`G$7 zD1R)?AMjRnrPO>{^%*wD-4L6ztNOfO6*5II zD%67><}zkFrwioDzYq^#u$imHJq*v{VUnc}w2XHm>L@ zcTh>!EZ3Cs{3}NW#1t(i=|8w8jK1dDPY<)IKx6lZBU-0D9LBTgP;K=QI`9N)2uY#w z(^u2Y$0(+3{Rz zE$pEu!?=!LjJ46c1F@iftKeZ!ecI%AP69?&=~27)v%J_>G;}!!PU!0q z)@}nmamnt6)jJ-m_a&^}R~+X@K>rKleIj4KGx_?RbwNjI?1D^0d~~&b26b>Uru_pl z!r8O|kJv}07b^cZD8vFP2eC78p8&N3CdKB6-lzcDPX*ZMn?Q}X1rQqe{!N%B61nxx z0Q|Gk+OlF2PkmDtW*}WZ_PhEU7SY*`Xz0i8KtJ}oP7G?~%vBy?fzs7Ss3{g|h<=X6 zjU+e^Xw4j%r6nU57HOx3iC^`VA{+7OAVmmA0ka3`xbT&pBf^YXcw!IY7YY^ek zQWfMRU+dI*1;tkEJml#zofpWHFC6d@02w6t!ds!9l%liefG-Ya)Md(s816>L`A~gv zzXUt#I??}!eiFPIvOdIq^0vx+VC$+-=`4!pvJ#W=PB3PQs)*b<7D3EB(T@;-x#;HhpJY=VblwHF|^ z>wp2J=$1GjW^(Lsax`2nGIl9DSyC}r-H^keu0~niSSR0v*)IlWzgu&ZUCMc$OGh_A z-})KAAymB!jm0DFm^ByBVEcDKgAQlN#X;CO4k8pl2zg|vj)m}&_lMqG`u_rS$aM>$ zg823n0(5S!BLRFg688?V>E0niOGgE#QwT1toXZM^zcdQxO18^f$(9D|c}cA;XK0P& z@P{t9%)0@E50E(*?!6JH;P@lsZ^&yfjJT142+4thpHBQG)o-!KT%!6gy>|qT!7Ws8zw}~W@!}Z9E(C( z-ZY4d(o=6POD|#}OwAmfdn^Ay=WUa-ihyba2=rzfc`ptv9Q-04MRSgE;%?HLx^Oe?c!nF0u~_fmC%e00x&wm5^sQr!e+^5EJ~ zA;Bxa(#|-08+<(f=7z-l9d~iYZbt!%@$CACrZ_!(`?2Y4JrNriZ}A-zJI8t{T^+}e zoa58PkJ)e<#n(LFk&bkT@*5}b&%d`Le#APRW56}*fQNOIg_X{NPvV)A`!C}MrIcf& zjtZJ0!N!{ng=IN~Wjn_5G^2jQWh$8C%DEYLx?`h{vgURjSiVOF(&}87Ds>oKswO)c zfP|QSvu}mcfUU*OIqnh-(jBbAX_J|Dqk`Gs(|iaI^l@Qgfd#C$u!Ep$wBsg)vDU4P7*t)dDt;Wp6 zZs0F;l{wS}}s^G4!%z7Wlm z8nJ!+HR)5$E1F8HQBhm{<>^_tX`3JOVck{{`*?xEZhxHXqXbfGZsN`<$8${O&f{@< zmUy0Jx0~=rp@o=-YYLl(UoY_s*Cn+2J^g`Jw>wx97@Be{%c+g8 zksrroy}(|U?WlbcRPK0I3c8qYbD!NCX%AfJRa2L5J+(qt1m3mdf!lpkeQ=wr6 z*eTMvv)q%-QWdRnF)6C4vNwoAVZ9E%4u`rWhMqgZP?As8rX7Zx9bjL34ng!+{LQtl zvSUDLi5tK5ZgAr_--Z5kxQ?Pu_>GoPUWGh zFp7crwKH3UEEUHF=UhWB=oyyojD=UlvQPZ#JRpN!tJ6Wy*sHMl-J<3ADzmXs-NHsS zLc5lOS>r}eJ(Pr5t%fzYk9I?ct7XAR|24*)&W-eKFzyu2KFwnpjFbL>W=;1%%z>S8 zT5qZ*>6G3p*o|T+k9B~*ZIJurhtV)+>-6^rTed=`AKI`kSk;M3it%0AA`R@egz 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

GY}fv27e01kvzv0f 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-LightItalic.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-LightItalic.otf new file mode 100644 index 0000000000000000000000000000000000000000..3146a822c968567aebad3e50278374000bfd1938 GIT binary patch literal 107036 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 F{C_Z3b7}wp literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-Regular.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..4bd7bcf2d5a0e95328adb68c0caee082a1a105ee GIT binary patch literal 106736 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-Semibold.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-Semibold.otf new file mode 100644 index 0000000000000000000000000000000000000000..fc7186dda8264320af806b68ad378da24513b554 GIT binary patch literal 112664 zcmdqJcUTn3*C<>)Gd%;-Fu*i}3QRMIIS^+Cvl0arL4pAzIY^Rd#2m+*(<#pK-gd8s-bm?qY|A0WhUR~@EdN~szO4KzhG~(=jpHzfi%|+;FP}hhkUz^Ic z!H8OW40xmZnb36Jm|{;AynZ1EJGrp z6d{o(!1@C+Uy&a*5w#IzATP>@nu(U7MxyPgF}jD^P!7lyf-|)T-n%0m`U^FnRztgT z)PY)x6rzF1n_3L16uF7)P-{^`XxkWhiu{m{Dn)8h6w*V!HTn~Eq$H>zz~}t;aA+lJj zB*FU|s5zB|97Gz_nR*9!e?tybF=DCr$d0;)Cl^HMh$?@ov0Qtrp-_{0s4=H zFdem^HX=ttV}Z{9O%O*_^FknVAke=~pv38}Ib5J+H+>&Qu4(bMB z4urYt3-qa>_y1}tZiHNfc_DKm(4;27d_0GFK#&$gcr5ZlExyl(Fei0`z<0tk%t_rK z%!x2}Bn8^k;v~@NKjwi)36IpK0>8S$oC!1mz7gmq;P>CA0#5@^0Ua^m{3q~sJs5*I z;qjN%-zdlGw^06`dJS-Z&nPkA%_0lnD{CqOnG?DTJSXtKkP5UH#$`%disvAmI1HXa z9t2*jNgF}k)&gJtmlWiM@TxFZ0&RXyJ!_wdECC-2vP5WAD^tMFM7HXr)Cpuo9RMB` zLJ{bT-y!uu9#lg}uYfLb0-kM$>es^jcly1Lfk-Fm1$yT_Y6867is+vr)P!0IGPDYG z(eKDwBuDPl8WbriMIFSyK)sym0MQYU*`BBY(8UFGhJ#28x@Q#3$zYI;S)d<4<{$(> z@PiO2>H%Z$23b#nP%9s``lwbX3G-YVYUa7FjEE)xd=7bi*IU9o*A16J7lAJOFTow= z$*lS%1duJrJ0ly&Uk80h)#|)jy$5tB`j2{9T`B0m+CX?g;D_&_`XkBLmCJwU1z8ky zW^E93XWftw@0x(V5cFx?a1h!4B-aAJfUYGvww5RUCEtSl*6P+;{Yqq|R?iCZTmo}y zlI!N*^{$|M>jszV&xGe)s*6P=0DprFfV`AI0385wTneEF=)(8aXCd5yaELDp(Rt?ZHK>KCNEuCA$@7j#P! z$U_p?*(9)kL@uE(!A8^#qmV|BLsO{6wRwT|LS7UIH2$~l0^1_UA_;>033Jv5_)f6P zZpaZmM>2{9nDs$c9H3qUWKT7PX9?IMcjQPlNA*d)GLY%odX9DKiIMWBdUfHM>Nya2 zqMCZmYT*4Z)B~I406MFYXegw!f%noOodfAy(BU&dUWG9)hI~BOu3X43h5RxI(}5@8 zSq%0KJw{0Ic7#BEHU*Gpg#LyQ2%!Z8!5i8LLGX3PK%Edsg}-m8EBGKzD7v}~iK@X5 ztd6CeKu0-&Zq7!HNa%-pQvIMmE#Rd^EvZ=G(^#PMzn&=?e5HM;jaUwPEfsl)`V)W2 zpUj1zgWOR!Q6h|E2>1d+z`saDZsO6%lY}(X9Iyeu?tcs(|El9v^9(-Xe`yOveuD;NK$DWo*sD4fzH2@I@z)h8NZJaf<4yL1+QMKvbpZ6eJp0=ON@ojjZXH z0$m9&Apl@_=TMWE)G4QtGiq2IV*@}+Lo&{LqRsg4;^h`E})Ins+; z)#T-M`el%-IJTzTqE6nD(un8Qlq>3#Tcbvj-8JPl$XZf^0}#nhQf4ZrC}b=7yCyF} z?Px_!UX1i~P)%Nf+R%kHc^YZy1Cc4YDQRgbdFh&nn2a1vSazl+A|X8`HZv_gJRvDB zEhf8nLUv9{W`@SY)!p5_eb=-RS;;vXFINv&Pfar~51mKz?;r#S0HAe5Y8s8z^Z6aER<`2m*e1H42nky zC>?6WKv_Jb8srNlY49(B)XIjoLaFIp6hMrH=L~?~3Q9BKZ8Fr%Mmg{l1Lg6M`azih zF%3d2a)lBf0#Q>3AEACWw9Fx`^C6Chnvu{>=uhZB1?2%|8Wcg`3iZRFMJ6eUh1%iJ zCJE{Yy<{T~Xzfn^wTJ$LP!AYK`~Lv17MclGYk)4m`d{tWM5|c9A`M#gCb;JSrkOBu z%}+RVg&HGZ4w4CFyZ}1^Lr6_9_fz~w)4 zqrhQqKzX55;Hp5hq{}3y1@J83A;_T6uMg@) z^0`0@4V0TGW1>qAj7883Sx}k-Jqk2UgESLLlYlaz(7wli;LQIji4ibPL3h;3Lnw?| zphONp7N7}wCI;wY;>I7EC=EqH?*f&wi4GE|s;QY@VIJZDrtn4>n?P*=o*?-{;raht z%S1A^|Ea$mGz@06cFzCTd;7UvZC`>l1!E4uRc{569$S(*`=>6)#Y?V4XThc(BY?VKArH*t1#4tI`r9^^dOdAjqm zhN6bjhE@%g4ec9p4O=!0YB;1}LZjqHZyHrMzTEgq!o6A;cpI12&FAzlw*ErcQnORLXSPp&S8U5|hL zRZpnyRvl6uTpe0Hq&n`O@PB+w6{-hT_pI(w-L*QP+PAvPw+;V_`Hbv-Z@zd*1Pd#0V&=dXB$R{l!ZTQ6L3Hum7e){;)a{wVOCDJcXYtq%cCW?*jyQLtL2T2ZkO&-@W;QKXhq8>!vYUg{9_8+DQ* zl&gJbO5xoR>bIZEemqfIsqOIoB6S&L?+x{q`bPx)3jt!ODKCTFSe(2sd2UsMkjz^>&akfC*G z1KNbPpo{1d?6Y1$*HAGP47#HmwF+ctEy&Oo*e7{HMN`|TelWhlK%W8B4l0Q{1bV2H zii4etXRuRLCaM5QJ3uAF_=mzS-3yS%H0n6)pS%X0bOQEY-=cTuJ(UAHxF66*>UU~5 zbrV&fPt*vY)p+UwHHmsk&7fWgYZhucRR$9Kfs#-($nIZMAn3Dr>Q`zcbsMzXJJ5EU zsZ{DHHHNxJ<-?7d48yLoK8#Ll SIIW>!V4V>^N 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 z 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 LKrMZ;8bAIY(j%sW literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/TitilliumSansPro-Thin.otf b/android/app/src/main/assets/fonts/TitilliumSansPro-Thin.otf new file mode 100644 index 0000000000000000000000000000000000000000..e9f73560c4283021296a9449b57ba8a665b3f1c6 GIT binary patch literal 103536 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 >$){? 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 literal 0 HcmV?d00001 diff --git a/android/link-assets-manifest.json b/android/link-assets-manifest.json index 2327e470f54..2b9428a8c65 100644 --- a/android/link-assets-manifest.json +++ b/android/link-assets-manifest.json @@ -45,6 +45,54 @@ "path": "assets/fonts/TitilliumWeb/TitilliumWeb-SemiBoldItalic.ttf", "sha1": "f81d3a5f38c6bda1fb3547bf91fe0b68b54066c5" }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Black.otf", + "sha1": "becf8bd5053f5529785c9d1d975f2d6f54446d47" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-BlackItalic.otf", + "sha1": "079c243911ef9d6cbb25f5e25b0a0fcdc80e217a" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Bold.otf", + "sha1": "5348d5fdb96da25b0b444b6cf433100e17b2c944" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-BoldItalic.otf", + "sha1": "19b6af581aa9de369c5551b5c81af4567e96fd33" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Italic.otf", + "sha1": "149caa0987bb4765e34a34ccc315d89a9d5b259c" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Light.otf", + "sha1": "096f9b521b0fc0e7ebe6c60890fbfe312e7e4b01" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-LightItalic.otf", + "sha1": "9a74303f47edd127dc6f2c48301c9b0d4ffbbf17" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Regular.otf", + "sha1": "0a8be559a9a9d8ce47eb6ca3de9db16f42a00580" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Semibold.otf", + "sha1": "fa6cff8c0046996bc9fb124abf5799408eb3b369" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-SemiboldItalic.otf", + "sha1": "8502e9c211803bb2b0446348c69cf56763c987a3" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Thin.otf", + "sha1": "dd3f889e6ca51de7e2006418b0125c02421fe574" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-ThinItalic.otf", + "sha1": "fb0f0fcc215d93fd4241f3af18408b7c42b33b3d" + }, { "path": "assets/fonts/ReadexPro/ReadexPro-Regular.ttf", "sha1": "93e4080794b725f216a94b57ed62a51bc77bce91" diff --git a/assets/fonts/TitilliumSansPro-OFL.txt b/assets/fonts/TitilliumSansPro-OFL.txt new file mode 100644 index 00000000000..5ffcfe18ea6 --- /dev/null +++ b/assets/fonts/TitilliumSansPro-OFL.txt @@ -0,0 +1,92 @@ +Copyright (c) 2024 The Titillium Pro Project Authors (https://github.com/chialab/titillium_pro) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-Black.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-Black.otf new file mode 100644 index 0000000000000000000000000000000000000000..3cd95e37eafb43b6302c6e064fa23a909f2b3bc1 GIT binary patch literal 120080 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

Dr^4?zJ}(c>{Xr8J}| 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%0Dd7&ka<1>h{h*O3=jvHKmt;g2;g7Mr~u$6$f(T! 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-BlackItalic.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-BlackItalic.otf new file mode 100644 index 0000000000000000000000000000000000000000..a6fd8bc8af77929e8aed7e77372e482f2ed24dc1 GIT binary patch literal 114036 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

d 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 KSh`}-oBsz#C!x&% literal 0 HcmV?d00001 diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-BoldItalic.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-BoldItalic.otf new file mode 100644 index 0000000000000000000000000000000000000000..bdf1aaedfc9c0e37eb5a495fc0b3257426dbd342 GIT binary patch literal 104000 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-Italic.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-Italic.otf new file mode 100644 index 0000000000000000000000000000000000000000..51f58e72f82d33f60f8f6bfa9af4361728e39ea7 GIT binary patch literal 99012 zcmd432V7J~*DyZ!UhW0@D_^ zsIkQ!3yL+0y(UIYVoPT6V)lRTEGRy2p7(qHzxVxpzYm=|<<6WrbLPxBXU^Q&xP*i_ zWQQgo1_g&jL}-e)v}uM=ldljuSr*wnJc7H*twrde4MNB(GCr>F)JK6sAm0`tV^U<_ z#89W2)zOH`pMsFGYh2&<{_Fbuk%o|b2GmbY&o>lZzLo`TUEL7kl5#Q)87&#}eRy{j zf<6ZdY!2D_K>ZxZH_OQ{9dY}!s6P;*>=3daly4YO#3aYVD^v-AD=_3|Hd+194E0|i zWZkx?u%y(y0r>;IMetsOP&{IiAw^ljdbv%&5QolxB8GViCFsGO!58aev+D0xtgF>9 zL?dems`ntF$#J0$uW>5+}7KPLPXgm{#hSE*Vw`e;wo@UH%s0d^QW6P$( z%@+Yy54xTC6_tbrLSId39yO(EkSnzwwV*`Qocaku65^?9^9AZ1azVF|0^K&3Q5TSc zvO-NE@4`4D7wH{^r8eeAq+J5!Hz6ykKhOrF_EaV6M_)p*)FJb2>MZ2910Dv{8vSK{ zNu`-D0UkPZ%lr#<1nH@}Ku1sHN_R#b;QcGe|4o&lczOaFLVX3XFNz@P3KUPxMMaR8 z0gipC_dvhSs4uEU-6(hSYH9)MPxm*AbRvY$Q5$MC&`zT9e-oGl^EoMyIRN@gb5I{7 z`Zo;pRHXYre`yXH24B<>^1fsaqxn7%;2dV2qdF{40EWL~5>X%H-PBF&2> z&_2lf!+c0{(jY*;J?ir9$-GE&BL!(rYRnI%SfWooZvQq7JSyQL(TT(ozsgZ_i6+wg z6W#?J|7{FBP2DnIB=nTdFgmq_v@r2N;kv%g5wM7MH6}=sm11|`)%={blBd1%K zE9r5t-m`)Bi_PByFX$iyL2!ehq9ai--3;VbFogOwQZJ9{Ws)?{b)kNq>(>W~CnJBl z32OC0Zb`DMVK{{RXpm+9CHOR4TV^w80}sLrAn)pB9^gpi9#vfz*U3Nz$2e*mDZ;uHzk=_A0*k?Fyupf7nBL|bRdzbl3bO-F3=D4Yq~xLSxaPW zJx~10x+d$lUbfcDS4qa!%UNknSAp!6;_JwPlH@L|k^d4TS^EzG_@hn+nEwD63aTw~ zgfa-`vJW!bBDbv|f05!qeoJtO90z$^ACvWGu7WyC8IbMuflfuy4g0NMdzLcuXc9M& zHPSl#5G1{jV6KGlhZHR9(Y%o82uV-Whg?|S{gD7Dm~T+6Q3ASzk|}GDd(I&1PV?k zGI|U8tu@G3Pmm$4&;Y1680vMU6fhQh6bAJ}px?ph4ak7js5jK>K`TKwEkptI5QwLv zW^_8lGa#Oe+JMgTqz#b&5_l~N;w%UYpnM+W%VCYeJ0{jFqPqx5){YdYx0V2F1;N}R z6afLOEuaBH>mf+C&RD3^3u5W-1+hV7sH^!pLgo<=vS3Vsls$|&8^)JyzC-l@UhDz7 zlLxsdgZcx3{{2B_P@wZDu87zyR5GhibbesK^6Lg)*j4}=~NVjyHg$b^spL9+Oyy1gMlee*g9 z%OEU=upPoK2wNf4K-dX&%Im^Jh$lc8384tWObA~<7zY8ULh2PloM&l^dRYC5JpQkQ z*GO&ke(X`* zOM8+O2yzGtbRX7VSMzgfBiI%BD8kABc6UGI$vgpl83%ei9>NBYQSDI#(-iF8_NXz$ z!AuVn2Jc%)dopH^nM26xPqXU%Th05+_4OAK@l1zCxJ zrVK+MeZ`A`R^G5Xh%d5+?9R zA!qWG(lp{AXDPQrjgebjnnj+-uP)624f@ojdDIA`kEOm{gS4Ea8AMsx0@QtI4D70< zGzI%eZC#p1c2vK*Gy}RIqb_ZQ{9zwysn5cAFW03x;9-}#v^BaAUUI|OWPtn z<6W1QHRzWIdorc2+^#{|p3;C_Xz5Gdpxm(mo=zX}gn_zRZL!p+DCA;wtS(K1E&5Yk znn8Nju`X?eg4l?f$CxP;u&+`PQpvV2WnLqUlqzPK>D)R32({$I;AmKRBx#U;6g z1sXpeUtix&k$EGFa!ND-K7Ky_8t(uD=I2{(sObR zd4@Ef+|u?a3>Bgxkn+VS7xYFBDn%OPjnY9!X;2!JYfuQ}(!rk2fLYClS_UY~fLMb< zp(GFfWs+LO&{it7yh{X#X^<}f_-&!I5Z>lM&0|DU#58C*Wf1RM$ zDAW_M@AMB)>S0(Qv?DP7lfE>c^p;dN(pf$mbN#6uCJCuu$OB{V99b`s4b zZnxC1a8@SaIf*MZz=slFOI$9|TH<%9bu@6B2CT0l$V=St5pqv}luk+|?v~ccKXH!4 zADRZ3ecEq5HU_ZC3;@rvmMp8X0`d|b(u$M%4FNk)N|ypHG*E7#jD;>GfQcjpilDRv zdX#9I2XP^kW&>s7pnXqx7LZYuKrQKwBq0niMhj*uLKQ;*{Pqu|Gc+P+tv3aX+==k5Qz36u@x5z ziqnw-=PT?agQ2fHu$EV%O=v6Hi4LHX=oHuqPbiAwDFvmZ+^Ik+j!LAGse#mB%0T5) zK)O5KpB_l((8cuU^pEr%#)`3F>=*^pl<{VK z7(YhG1TpiNZU&^;q>(^<4Er^>Xzp^=9=B_4n#S z>XYj8>g(z!>Nn~d4X<(0s5EMgm!^frR}-M=sOhd5qAAjh)O@blq}ihRR`b2)kf*Ds zmuCx4AJ0CX13Xhahj@POx!8;L;=CNZoV`?DYOgk4QC_KDnay&VJ!@ueeztjK^QxBP zMA{5qX_(^>kn#CIkyU6j+J<(agFulV(F61|SS@yx3*|~Rp*m3UR1(#X8bqZ~X;cCA zWgSJ%Q$JHCs+M-6)wB=o|1T6dMc-f$!!a_(87R`?A1FerWoos$wOX(4s!mc5P!Cm) zQBP3MArx7u-UJlcr#`4Yp+2krN&Q&;T5ZxGjY8w5X`;~pMcQlpH67|GQmUEo4-|>_ z?CUv@P~@vRia0f(NJg{NI*ObFij<4s05?A{KQuow!!FZ&48jozV2PQ3fN&DR2?$UQ z&$SR%Ls$u6k@=)~s=3O1Q+m_z&pgQ-WA0^+HpiJ$&FO#l`8(9|);!o8Ywl@|G>4l* z&B5>2{oSi}@B7q0?HjhOPd{9R(4+W=&!qeVX&3zA@1aggK5%`Yc;NiN>46;1I6NP^ z+<*Px@`Ls8Z_>l{4_7~2`e6Bk#Sa7TD<1?rXo=AMs{0r3AHBZ_p?muK3HRDS>~+uM zp5iXPd;jj8yQ}Xux?{RE^7ew;vu{n}!s_fr=!LR@0G2R`-5_>_&;&wTDNt$fobfT# zqev~H)>AvEUDQ76Fm;3?l&gPdiQ(OT>hPy!A9K_uY74wSO`V0c_l$Z${Y?WNQh+CC zNz*dgj+WCdG+;!#(tun2AKk1z_3vUDMr8S;>AD!G_}~4}o#`GZAJ)Aa-53?q13^BP zftRuossNAB6j(!R&^ojMeS=P;Gw2+g0bM{J~MHx=(#UJ(2bv)aTS=Sg|iDD~g4+`x_Mj z@+^b;mKsG}1L^iVNV|>HQ0f3RmbyWeQI#0o=3{^#4q$W@|sY%prYBF_)x=Y=orcn>6 z&!|V#4C*O0llm1n;W;&zdPOau-cpg&Vl%|FQaReA322jHz(FF7vY!Mfu z6`;U&!nWxII*TsC!Q5?Nny0`JZ;?pEwksu2&8XItFQunCQ(?egE##JS>$ol4KJFlQlB?uyaQC?9+-t7JnzgpGR#>a7n_IWF4zTWM9bz429cP_n z-QRkMb(VF$b*c4e>uJ_At>;-UwO(!gjr9)e1J=i^&sblyzG{8T`l0o&)-SEG_1`wE zjh&6NO=BC4O$(cLHd>obHla4XZTi_5Y=+tt+l;cAVl&fbfz5K8jW)Y%4%i&CIb(Ct z=DN*Yn|J_qsr0K(c7`Tqu#NLV|T|Mj(r^aJEl1fbu4xq<2coEmg54) zm5!SncRL<*JmFaB_><#3$ES`j9p5=wIoUh8I;ovnIQcqta0+#baY}GXamscoavI?@ z!RZU9xlYTR);eu-+UIoC>8#Ubr<+cXoqlur%js`t8)s){cV{nWZ)YE8y>l1m?#?mJ zeVhk48=Om>zjR*Wyv})t^Iqq}&c~e3IA3(W?)<>{ne!XxS_P{}SBx=~`lK65G7UZ@ zCBA-n($l}JAlEk_Gz=oY@K9e8g@lBJ8`8^4GY#3rhVo2O*+2>`$@JXf^s@Y{yvz}n zJh*K#>S|@=W)^3bB`-XO?Fg8ayq=p|~tR&rnuc*f7(Fv@9miKBQ$adG;kGCFI#RJu?G5 zY=)A$IDynCCC@}l2W6HhQJT3j>5(n3C)`Cc zp+T0&QX@JY($?2k8{!+_>n8#B3zyLL^$XBjqR^gz z2?0S${K5k)!wRsBSZf)GmIxj{t&Y^xN@Mj4*IGbCSO9kD9$t_g_Ytw~q&t6q3!E^C zO3=B5s@?T*WGxXcA+U57SS0cb*IBCR!uozX4u3xja(W9^dJ9E5geO>t=j%sGfOwYn z`nrhp?XT4)Hoz``bQ`WsB=jPgKuf&<3sf>Jzwi#0k%vjc0BVO5sYa@YNCSis`H><+ z=EuSK2Bd$)JN?s{_OrC|4JD0zyJyzp1oFIt)Q7*$@+wr~Sjb6*e&K!**@Tm_KLVCs z`}qfCe+u8Q=no>Hu)(m&^!oePts+8m zn2ExFWlzgEbr#5VGo-V~6rF{`brB_>(#YS>GDN)vYkffJ2QHQ94-;bWMh<59(0X0A@_ z0U;emWfm9uNDq?8C@9Pa2Ba>XhV;u*6^p6p&PA zZgx&7NfqSQ0fL_VeS;*Hf=C)aL=vSTl2C+58U#erj6o!=euyMWKqO5ZL>5E~%JRW# z$n=q72|p4O{G=4Yk0d1gq=bYYi3xsE%7UMiBKS!O(m|kvpRccF+4+VNPVf!2;1_7Y zFVKQtpas7`3x0tX`~s!v_4m_BQv`ykE=QXC=}2=w9ck`Iq#D#D&HZ$wxgS~BP$)4y zM1)pw3TDY!Xk`KIO9Z#Sudf9&Ukg=xi*pMzhzVAlnc@qNmGV?*m)Pw&} z@@b_Ku!x{$9S%|@Qu47u=!=e?NaR|NeE947JQE zS+}srEz{Y-GXEV&OEy4o=)M3l9iWB-iS?6Sn4d;8hLn(K7C=-2L}5Pl zOSR72CpHMYAoCdD8$y=-$7a$@`UdzB_6_h00KuDp$*dh4bou^()tGJ5R(2dlm>6KAJcvf zAo&G+EDz9qOaq3wA(E=FC=81Z3g}Ksh_()hAn8c*j3Uoy@{A$R9^~1RJbRI6EP2L} zXFPfKCeJ?P*_S*M$TN{VlgKlfJo}MnfASnao&+~7QD$1AAGHKGEx}DoaMKdpv;;RT z!A(nW(-PdY1UD_gO-pdo65O-|H!Z79tpa7KI%~){d{f-oo|^ z?=G!0>Af`nepz`^LlfXbC!UF>(;QoQcB!x&)?+{6g z)?Z7EXn!p+f*~R*LrW}Q$Pp!>)f4fq)e}jj)f1tl)e~Kz)dvy1Uj%wk(yLM|=~WUF zy(*=MUL^@huSy9?uacPPRViiBt5S;SRVhIrOKVYrEX5LJ5);T$ia;g_39^)sAd{Ft zmQohTQi?#967`U^b&$1nkhP`tkhS%YwZv9|M%p^a+LC(6+7FPm^^mpokacyCb#;(+ zA0X@MA?xZP>*^ruK0wxefUK*BtgDBtuY;_wgRK7mSzixXUk_Pd2U-6Cvi<{PeLZA7 zfn1s;!7a^_pu&^Tp)`v?gh--pX_f>Ho@D%`Sr$m8Sp-gL*1u?RNi+XTQJuP%rpG@A zKG*?^PpXw!kRf?ONHYIJ5}4CBJiuZO`GEmjTqv=tZ>Yu82njJ17Z+BPfhhnH(ZM7o zSsElEDQc2PD=f_+iL#=Mg0RA(k)*O_kazl^R+_YtnhTYd*JZsF@p5(M3nC?j@!U4(%dLg}z{+2#WpP{eO59w!&I~<57 zGZoAv@cu7lHi6&&0CS4Dz+7gknS0>*|DAcuyaPY~VDRg2wK{Hf-s-N^6RY1?TkziN z*bufKc&p$|vbbSf8F=JB=jL$B zxb@sNZZCI&JI7t-s<{W&F4j8hFzamaxPN86&-%Xg3mXUUqxZ1Mvl(GC$!40(Y@5wC z`)q!+xnT3qrpDIE*44JLZ3y_sN7&A^U1|G+?Qz=+whwII*qXr$u9E3wak3m)xonc` zOW6|Hdf6`7N!bnAE!kt)U%U;k;G6O7!1LXUPv#B$Fusf*&wtL(=2wExdmn!kJl;R? zcln?B-}%4nbarKSSL|-s-LZGEkFj56|JMF*c_Z*PPY1v9RR`7~#$mL>5r^lF%^iar zL%_qE;yBxJ1^9DcI=*#k41U{qr&6bx;H^F3ROR%$b0gZ*;lQgGRqL`mK@ZX6x3-t+`u(Td-R%w*hXMZo}Qix_$08-))uKR=2%wN8Qf2 zU2?na_KVwVxA%>08Y>#B8@Fn#ZQKP1y=$UuVpYJ2)0&8LSO^^d6Jy#cu2G&6!~=Mc z7>`eR)OI(OEAbt?8s9d#;Wao&^cUxgm&C>5lUh%4jTnUe@LV;|Ev{nu7efR-KkoZ< z_q5<%MvqmQtnuXTHERA{Tcw!XYF$4(-~t;coO@d7{blBxP4&y9^{`K01) z2j_Y4rbo(khsEUIa(l3RO~yrm7hAoLXZZnweCoLIos6n0oN@7s#b?!5@g3GEdaUiK z=4;-}5O`cH$j4v6k!I9+0y3i|6Hp~@%oX_Ymm@BinpE=QnoD>vuQb`>OZc6sD?W*n z#J=LUwKDOBXsYcf{vh_pz3}&H`2~EDjpO)<7i*Liyi!C*`@eW{ca>4S@B(Y}D+`Ir zUw&o7%q_FmsWCT`#Z6~bZ^c%sXYtzt#r|EyeqyltIc|AbkSnXXe!_$I9E;m?xK&Mj zx}dA!Sg}1PpCjC_ar<20jh!{28O3Y&Z(aDqoXzT^_)9i~OAzO=le5PsrKx!1gki<1 zA)ChS+OTG>QOz3<&Dpbl;iQV(!Z8)<7;bzLkY}NCvqY+NAeB*&uPiskT^?J(@4SvT zT<4v;G+|SDiVv= z#e;IkCr=rsP84Ue*SKSN!6G4~Eug%zye7ValJH&fn+#tQuMFkNTT85C?46XN8aaFH{0VB_dEn)pS7NW=*lT^R@VGG$ZzCXuFK~*L zMWPaFD^fRLC40|H2;}zSG$7s(F^v^RbNE|RI;-WxowdVQx$*}03yx#)H{1d-4zM%S z#IvHB6IDrPHYTZQo!-!fln`tso*CL17cmP z;VLLTwtUNe5BcTHa#La@UxnwM$DdV6WR+dwkH0*2@;I+FJ{?_&y-!@l^y%Ww;VaY; zE7;V9BNy#b?OVD1r?XE-8`VqBu}1G@p`v3-us(iM?x~ULi{?kT*cw`P($qaG6CD%6>u;t2Crp;`qs3W!lm28MV06g zBW@FuyM?X6ay75KB&@#5;wId}e3b%y?t`I8m zk3eK zO+-QLB~B0v#bR**z!@T7j~Z__ii37qF#yT~cl5!NaMa>TF&cwNs%5Nt0t8<{e(8tu zaKF@UqKAhbUsoQ+Q(4@G<2TJ)_suTVp~7!MLi!C2FIYTk>0}_oJ)sLH$1bOFPi(Wl zYOGP+7eunLg9XVWP$7;JZNhPhAU__!UgQEnD28!jGZ2x0Q-6W)!Zod($ZAUC(we)A zRw;)uTJ6DGBx%H_lGN^pNbG$Nvn#$_rRJ~fDDD|OR4dwf$mgDBjTN7dDxNa`zykGM zlguJ0>jW=9{*K@bJ(URjLqYKtQX9C1r&w_VtS)$rk7uC(N;N0(0X&c&UxoKx#G#ic ze*Dh@#ZNq0RF0b*sXobjf0umY>D^br$U`^QUV9(2sSsqlweq`RYZ76M9k>#aWAAXh zMJPF&T=-*nK8pi5-i&%qK=}KMJUe&$!Xw|Re#$-^+7kLPeRq-Kr(CLW0>+SPdI=@~8!zE1tjDdp91|IFRuA#E=&imr^CV0w@ZP@Vr&+~~#~|gdnGRl~ zHrL1){21hs*xpr14Gp@tInFOHry36kD1Kic(2h)~dV(Q)4edJjWfy zb6GrxTYR1cmHz|&jK$|U9;g2YYEF4vSbCQgf8)kSv3M3YtwOvj-UE60?*V%WwJMG$ z!#3bnO3>Z`McpIXsBlMEob6!Yt_4MnTW}WyIpFr(g4=e2+ja|X&pEzknNo3ElA13- zYF-uoG)-qG3$IP(AP40Pj>h2tD^57SAwNcJ6f1TW?IMb|{s{bZI>TgZs#@`qt!=@L z4QKH+ZrX76-!QtG7f0+D`2B)BDm5ZINOk!u<&j+*&+k*u|7^kZ)zj{eayu|_?MQ>F zdtAPzW%`CDD}=XA!x)(1h8xoH)N0gO(*?*^DYCpoJj3 zm3uZ|m*eXejmu3h6y5rkj9IV)P~Ew4!?v}{Mwft(Jg0cn(zR-NKVdn5dduPMM2iuD z4-(2-(nWfhuhxBb2`043^`wi;OYuMgjSFHJ7 zbz%2S>~sw?C9rChufD^_ar~8U^F$;%B#GO_?%_i=VM@)LBJojNV`A_jaWIY-Pt`_> zN5q<1mOuFj7XHKvXKbt*c!6&qz2xtEC^r?FuGd5l-3U@lJWJ;2EC)7;WCDEC#0vDh zsQe)Yw>Wol!Tdu!3+#{4*1kG%kZ1+sxC@Nv5s;%3CmtbGF9%BT^MEd38ngku%^Q!6 z+xv3Q=_@~EuTRM?1kukcpRYgq<3smjYf6TM$4+SRnFn8FR8Q`~8egos&Wmk_UG>Ku z+;P)KN3h=(5TJLsRd3i1oZJ+~ExE*snEPt2sh?>KkDX1^m7cZJp%Y2(SPVbv;&p~M z{&D8{D)q8z7}4ImSJ6stR8lq$6htPB^k#XgO;R- zh5f|OM46=L3o57;p!dJMh= z!`gbruFc#FiuJb%NrK|{33~-hn>r|=!o@uo?o_VHPl!zqZ?A?o*}}vs)9oti)lWG0 zI%8U6`dhiQk~Own-(F0N6`j00f1h@xRQ<4!Jvm}+Zhw_Q7#qVHu~q3UJn#&5eRBd# zo{FGlnbjo$B?ToT^;3pU>osNQ*zmk`pK0S`+_3vsr}wVM4s&+QK0SN$!V^2U-u`;w zX}9hxOSUdNF?-|k@8|8ZQLJ2x`SjDG@D()pW!l2bF%dS3BU7?Rr%cMQk=JftEy!y} zuLe`73eTD{T1qMNzZg;`h z>CjP>i!P$=<-VAH_{&bCS`r^{hsu>_*@og?Y;#?YRk*`#?1){kZTRt~+IDG1HCAuA^9%NLKYD+>(W6#h z>+o-N!eLN*Yd|3$5?*5$;a^N|#SJi>c(VT!PlGq<0ezPcS{4B*{TH4ljfi8N!K0up;xhIUoo9IB^EZ!F&!x!U-jw z23t<{lpr@XPgmjvxDXfP3AmTo1PkI|agJC7|0auZSS70PAP;dNzM{kfLEiVl z1z7va3(TJZVwBh$c82=quW>V2-SyknQ-b>17yrSw6&CnvOu-5lchufe`kyzv{^R;L zMzv%M`IUzB9Ju(@^&j`0*{A+-@3{llRbNkEXjJ#)Cg)5{$M7e_fSy1piRwY?^yZ@dDGX zpEkYyk4<4q4pQfA75=G$+HAVd;4s`s;7t^st;BLr8-lRx9E%OGs;jw!f?|ibx%T}? z(|cCbaq@C}?Gio%?P}Z^90BVOKj$J~34#WLeJv>N81W1X`u;pV0~tRsocQ-Il>3AN zZXF2mZXj_V9q)@Z&M)y%MJm?E2#S>h#%1IrxhqnA1bIE@&SMuIo4wDdGG2XHxo>3= zY$^LU*iz1uY{jGBseZ~m+!@rh6IkS?Q&rSB(-p>aN-~MsabqG`{D7NUT$@}wx=6HR ze-b2nTE*dLll$yicOWN+hl05Q4BewPk}ct;n7XimoY=p%3uNY-BBf1lt$>vRFKL3G zS>vs@|Gc>k^97+lU%0NgaUB-nzifheWvU>`bHsqI>hp8J3X!;I3~+6|Q*t zbj$XKH&uVd?GPCl(`hB_ehBpx7jd{LNV)hH?0zhY=^B2^Dt1&0ii=NS)}CUIq$AGP z@DasI>}z_eRHXj;fK{wKu4Ahj?k40o^O*93yTaq&xGRW*gD=N%RVM3eRK95ggReQ)#CsQQnFhB<8ZyiuzCL?e3Ygwv zjCfV^*+qN<76AVXhfDG97vgSMA)+0Ag!h{$wmm0~5D&J(2c;UY#g%3h=JUo=flRY} zFSlm#il=3~e$m;?CH)Zu=u< zNj|>Cm)Ke-&QE-PWFl+4vitspqvh>%1O3E+p!REkP%uanTT>tz(uHKbO(aWfF<4q> zIDRpRj5IDu?00kuYuvbO)4HXj3kMD#k&qiZAKFIlPCI*R@44&yhHvSen?Gj84E5m! zYgT{jzV+Y~3Fp_ft#Js9ZNbc?Gnc4m%-FDWz5Cil6G}414mAuPy=;?*db zYv;l-6@??m6irYYxY2VbE?lmX-^3S`cg`R9^Wm|An5cp2or=}Xxqi!st~;!P4aheb zSU`&dKz{{hoe(F9QDb9pv{K)AIsq}nt+smI=Bg9m z{h6t}_~YrvtJQC~Bcs2~iBtJS_lKQ-w^i4HBFFI>)_C>LUk)$MNfu$j^cI^8i3bZ( z4g{T2+f;c8-;;=4y{({A%M>s+G#>KlOO}4I%pDIpi*s>{OCt^pS?95QSD*EzgIRvT zd3Mr(-jfpDJ##nzid$CWGdS`4%CQr_0}6rMTLSxlEKZDlFS0m`l)*~@k6wAuT3Zj z&E<`Edx5Ec&Dl&fmZ%y&0V#_3iM_$rlrOq=b>4u%6V#)+v!Vyb8@?&ow{<^wkiI&} z8ndR3Eg!#V1+NU_MrtM3vWx3g?(2upxf}=Kg-fqX+%>Kj3v`%PA^9ba_rs`;ikKdF zLbL&WXhyH3K0{z86D#m6@b+Sx!{AzSC0g(k#^=G6WD!7o2SM5d;`mF{rfZUM%2!oM zZaFIHU2ldb9;*hMi7VXJ`Qzb(-?Ef}aq}cWm@n+XgJ6}(S5&JNPwPDb9(-+YCGKUi zX20Q9*IKiDznz7bub&q*7o$mJJ2pgZNsP4yj-g;Dc7_A9 zY9bp1w?!leMrRmJpHMMJ^oH%BLE1op)aQ-;=4Xkn*`iYmn4a0(!XH_2Hb~G9#s|NA zQ1$*~@eB4G$8Vj#amyanvAiuE`5h}(Z`h+cQm`?Kf2aR&G=VjjfBSv&NEHqL^b@d1Kh2rrXv(4qdrF{)(ZAWlZ z41SD;g5RWppRD-~pVZ7QgEXW?pvYp2u(xO9UHiTg@AM+2rg*BwLiGw4CkiOZ|)RP za1RiEXc6vD!`&?EXCCEK)a%DoFhgH=htpLw0-<3P{l*4iDzlnp zwaesL0Ejm*Z;rkPDQn{2o!wAyB;%~_jAwvKQKD9Lt+?dP^{Weze=S!Y?WEL;`~2b-g1 zU&*fXt@w_7H$I#n#Fz3Xc+swfT`#*KcBAcP*?n(!*1o;HQEn^Gkk5dNEI|%q94WYp zlH*w6_^sm~j(@|Ik}*y*-~tJD);dpi{@MAR!cL)91SyggMT(hwz}+h z`O)Qp%R8lmvbi!y*+-eE%vX+8exY2eJg&UyDu=_zX|8i!kGbA*ecDLd=vbrsjb6Js zx_PgBi${1K@x0>s)YI&x@M`AeHb%p4og`^V7}$YQeWiY?0eyN{h8E zuC#dC;(g1&mKiN4wcOG2Sj&ek-+4QDdwX~D?&n?P{kivF-eN1hm18S)E3Z~9T6Jv| z+G=^L&8_yeI@#)St5>Z(TDNT-+&Zase(O=K=d@nfdS~l%t?#$7Zxh=lw~evQi8lA! zc51t!?WVRj+9}!vx7+1|d^-6|^x5Hax4moo9__zuzqb9c_RoD;Uw7Z;zMXwDd}sO| z_Wi|=_Ve`X>$k_hxqk=$UjAABh5nQL=lg>_6woUmJ77$}=K)6oZUns2I%>nTgS8{I zM(uj-cJ24t^V*x*_d0u>UYD*b)6LMW)$P)W`p)_x`V##V{a5-sfr`K>fr|q-2ObT4 z9%K{b6x2GXdr)N1*r0Vm+k%b-UF_i9p;L#r4g)(Z>aerJ$qx5A{MM20sOcEmF{k6Z zPR%}vrY#(z3Hs%+@kZG&O5uPx^(MO+~sapm#!_lcI;Zwby?S)T~Bwt-;L?k zrdzjeL%L1qcA(pxV7p*laPQy&!5P67!PA4k4&D@eB=}(n8{!j;m{kQPs6;!^1`aRtGfGkkLo_X``6vS>wc&EFX41}qwta8 zd%}-|-wnqRRuRo30wNYhoQ=32X&vbwIWV#?az^BV$itCGBQHfhiNsMhQ9)6qQIn$< zMs0}tF6vxVO|)&aD%v-?OLS~>dUQ$j?&!18_oDxZp<>)(TE}#X=^K+CQyw!bW=+iQ zm{T!#V*cpC^ls=?CtZ*?ZjRj+yEFFN*uAmmV(-TO7W+O<9w)^0j!TOx zi<=&|Bko$<`*>NrDt>VM)c8&D2jb7fKjGN&xIgiH;`7AXB+sP4r1+%Nq!CHelU5{cO*)xmN_I>3OAb#SoV+giQ1a#E=lz&| zjr-;F8`tmae*5~}>u=lNyMK6pL;sQef9QX;|F8Yc13U(#4wy7x?SOp)&JDOb;O~Ks z1APWY4jepi^1vkn4-b4g$aPTXL5YKk2Yoqc&7kiGog8#|(A&XIgM$X=51ul3-QW|0 z-=?rB4k@iuLQ_&wW~XdRIh^vx5Z#agLuL)xIppGyH>uXCj;X5Dz|_dp#i^T952c<@ zy`B0zRWvXLXM?w)lOf)aZYVQMHmo*$YdB-5Has=dq_JuCY05P3w4AhW(vGLyO>dH3 zk-jngZiZb(QpW0xUo-792WEbj`A1f}tjw&>v#w=lWv|UXm(wICGUvOTH@O{i2j{LG z>NvFT(3QiOVXcO3&SUd@@`CgF=S|8xm-i&!DqqMSm%lE5PyVU=s|9?4P|&8Jb3u=S z@df(|?i9Q#lohrv>{6IeIJIzp;on6~i}XcNMg59~6^$*LS+uff=WzLO?eNgydBZmk ze>ME?;>hBJ;)>!4#h({1F5XsrxcF-E^O89wk4uM^-Y<(R8&S5g>_)k5d5`iL)5THW z)ja%;O0Mx{a0_WaJ>YLWYl4H}0q^u|?VG>BffQBqkTuCTG3xz8RxUn)|3*xi9#v4Q zaXEu$LZi-H+uA%hA{6b#5r4_#Vy5XUTugxvbUlNo))Xkaa;ai5dx3lCdVxEFi(#uJ zKMZc3&@;Wx;iz-H&Ny#3T~mB(YUa8Fhq9RA7M){7hTDbV#HT*96Gy=J8JS`PEBbH^ zG7LAahg2&=jFQ?|GFf6MxEKg9A5O|BDn0Q8#+HXg@)gC|LQuf$q=O-IgVzp?my!74qx9WMYhtFe^ zmgO(quUc2@uDprIuxH0?t{9>U?cYh{)$)h9vFwZU*x|h5J(kJD%ripmknaSA2wqWV zL4IT6c|&$|W!gibX?yg>bzHt~gcHr>76~jatcW}dv51%{xTBSJnFkwf4THIT^ zSNUw$Im~~r#?8fiwpU72R-}9Iz@1k;a3p@C{At^XYkSv@7}70cut*P9kJvDA^Dg-M zz%0$S5l&m|u^l+hEEBF+X_<049LYG>d6+V)!#LwgI0J2@5-Y;RR&W+RA2yziO^XlVrWF*pp|3Fbt*MDJ4LgDJ_mJqy z?Z%1$OVdPW&+0tGpIt@Nc~kmdH@_8~S@|^lWfgVYl)>Od;K&vG=w!GLXAlRlmtfKc zu(%I6;`@+fI42ihUQ5+oNYvA}^o;Y4+>ISC*%kXw3 ze8yBTE`~J)a*JW-dzZt*G5ANgUv6H&tO`@n`$Wdi`-*UFe?@dip9oKXwLE*I%p|{+ zcMBYI?lrDTa!QMng}T#OC~YlN^knM}=7I${T9!_8J>y0xDN^TQWq)DxEWzXl z?&9s>L*?aZI%kBO#>LyLKsqmQ%&)&+O3w;PFB8u zlx+7G!tVXDCDVl`<79_k3gR1}8yrdi?Qj@_<4rO11hI{H0}m6#v-k#-mrBxO2q{mg z?W@Fj!nEC{aa5&gBx6d$v{J0ZT}&>x%hEfw!^ELudzqZXq0)@{R$+M+bxfL6%H*$v za}|>h9QkI53zQ_`!^sJtbpQx+rc@=a6uZ>Ah+Rf^Fb%^)7oVwh!T?CrNK$MoIME%e z8B>bsmhy4*cgR`r6q8W8=HUrSwWs#|`N*u$yY+tno(mS#IvO`TMqS zyLhniqqF-DKUdY#wYNa#nS#Y3=dto~#98==3pYLQysa8{xsJzP#U(csKTN1enySR< zhw%@%5svf3R^k`62Jn!{;AbOBv3n~#^@nG$?Up{>YB6z$nAN-zJ_7-#=8@$ZeQ@jsz21baW8gWub`#L?qc64@c*bh6!#{0?iq6X`Qz6{HT0M` zYu%s+?ocSc#O;;WcY&|Z^T?0zl}Eg|fHek*Twr?9+S7346CpZ$g7~pd5g!VE^#3Oj zU$zpv3*yejvhCYsrqnx`w-irJe%MtIzk^c`#mfc47;qs?69!GZXu5fkIu5+tb%FA+ ztikE7hx`;~1bON%nW<{MAn&_Fw%N3sFSos6vNX=12oQ*8G-~~862TPx#HVInPLQd=d$lJAyXCyUmd6}}pr+kiO2j zC>@Eb<-Pw9%;K)&Qti%RVN zfB0&|a zjZ7ZDQaXm(0mo1m;d{9q;C+<$B42}~38gaJOYjimYMEVvyf@AfoK5QMil;ctt&c*hC9(I#~Bl6+U)4qY)rbcy?_)K{OK1DU&#E$n5t|&|to5hPkUhzGbfSbBE z@$X$WsVb=*Fhu|H%EveF8$Ei6$JxsqZc~#EADYS6b`*m;iK$|TmRtHfQm5dyO6+?Y zw*%|v$8plPaI07&*b+hgMyx*y_D30^%+?C$75F`N15$Y$fsq%DPnE$)cFGh*CVSU0 zz=^>^G-SqhWaVDO6Hh(6%;0X7O3R@FZUj{FwY>PR{(0QGQfWEgn*@gs|KX9KT(l#o zQQ4+N3>@e#R*D7UV)h;f2fNADVlw*^=Z&Z0e7um=aq#hAQZP;e7r0#0Q%3y?xOJ_^ z&2r!&+K8jT3)}ESL@ug~7fkd8IK>>ynBw6plz;geYfK0BxB${1M^sii-@7ri8qWI$ z;LbnD#49in?-DAg(RdSsmjI{1u}$jV3DALD%&rNqbjG38LvJXK;26{3=fX5xaB)hN z^AS_FVx?&r{#H3+A8QOAoTXNzZj~)hVU5@J?^XkBJy8C4lRKuUVz42eLn>4dZBud2 zs0)cl;e;U8`RFZ0Kiuz{Qn9E+v}G$fMG$<$!G1UM%siuNJ{+_MPw5|&yYk1qb8r{j z_E7Z{`1%yA|AYmpGt}#_J-FbCMHwslPwFN5iOwoTKfgnUU#6+$TH|@V`y7tFKut8w zWK3nI$I8V3t?RO+X35!N;{x@_K#*pz2f4t-!m*kjzMi|vJ@}eEXWePEv~M|$ceA(~ z+1_;H793*#TD^ATS@(U_6Tn!jczYg?I=`!8b%pb@3wV5$;x>MZn<$TUKkcQs<^iHVUCBH=%B}h z$?+;U2U}u~y~cvEYecbkQB>?*P%L0CSfj=Q_TDujqM~90u}}mN#oiT+#*#J1J;!{{ zo;jfA=DzQJ|G)2da}&;<-Dk}%Ydz~(?R%eXDh&1?-=Vul;NqZPf^D^$Ms>J%RhY1O z=kx=f@~!=cSFYRR#oCj*HSOw^t7i`ScloJttEL?X{C3J_`6Z0nw!V~p$^D#~jMcS6 zp&Oz+3br=pcr}Mx0&FotME&xD+rEogC%1m@ss0Rf(d%&OY`&V^wk~c3g zMgQB9D+H6d5QOVOP)`#f1FVPk0E+vYs>t>B)hl1N*ShR}>1yaT64L`S?fiX-7}(JR9qAx!0cBYi)Jc4qAEKBmL;%yTJ7xdpQ|<$RqZIJ+L0! zba2l>+r}9?r|+JbH)+zQiGCgfhW8F0V;leL&=mugn&PVQ^qZa2f zkC(`1s=P{jBDd}|40SncBFkkedc_R<%NXkpDk{XS3W#jr+0_S~oY7SX zi(7F#YSpyivuv}+m7XtjnD0O0XOAxX2A+;Qyfw@g{Oii;XFPw630*X8$?WAt*iP2k zN)h5J7$PFX=K#lVUA6HyTZ%Zjr4SYnJZRMP)f;TsnGYtJQm`?r1L#}paT+gZ-nyOq z1MJ&X1PdQ1`5b$8>>eK|MJGJRK%Z5%o)_0=3$fzCazeb=_nmNb?e^b}dYlT_>|-k_ zZezu)>z@fR;^uX;#*UmasJEAewYR&*nKB8dD|2~#y*1TpXUO-AiCiy`&jm9b#!a?F z0M6L^TJZp*cumoA?fJ0k$v0ywQ1UG)V9Ou@}VRel4M$;ZZOj} z)g$LtH=Gs2t!^h3%emF@Kbwl|m^Rg_0&t~u&N)onp_OJzDGQDj|Ez(*C{bi(tJh$8%U*2$%&t{k*oixq&i^1FD}XpLc0kUMY#f2scra0O%%BT%g+W0 zmfd0Jy9d(Fc(p)TMIE0kN22gB6ps8+x#DP#BZ~-YE0%(ci^BQiJ2sv5I5B!#`#wIn zJ56g3@0{g3_AZ+oG}wRi@G-XHkg&VXzR-qvMPBRjP>~}-0ia&%GGD@9BPIN$Tl(Z4 zE{3s>qc;V)z6%hXY^$S;-rKbKe8 zHq*rji9K_qc2|0+8OM1CuAW7y_hvQf!w@PaY56{$>W*u^y_A*mNftcUyK@RH+rN?D zt8aHp^4s;2{C*ey>-gs5DrByuuC?A0zCr3J4axh`r5sien4lQO-OxUHq~Fz>#1H{;XKfdeU#n zy#wt-C?(01=mkFU-PT@*O4~YE5~j+6LATsEoqz zX(4!9%N^O}B>rOxUQ~$wqn2X4sNL#*yr?w&Mfp1-kgb-2H-Tj6jJzdw#u2?!p}lWQ zNuRED56twSu~Np7T|@aI@!od|dtju}57KUWgF|U8f2o@zf@kb5@oHVn)CJXk=ZJ<| z7k!O-Gk;g^hjEZTnAQ9-$) z%bM9qQ zrKH&p)MBRdYHxs}>4BByrLsQVNMdCGUM%xlH)?@vV_sJF!U-l(8T=~K|Ab)CZ=JB& zD@nmIqxX58yVYxNr-s6ofxTDs_KZ-PM|9sl$g5rLql3@h6viKjo_@^p^ZV)E1GC2O zu(2#{qA-2^?5(>!PO*YkdJe?=it$TE4a)Js88m3g+R-*kYKEe&$Ge>C5Lzhw$68Fp zSp7#m1r~aIbjkb{@Q&l~Gq^B6`wYgdJE5>H+F_Kfhk1X%VbJQgn1LuQWu`<|@gi`u zRR^I`H&(f&vKiXuif|A~YEJFk)v32}ZO*;Q?*W>Neh|s;Dgdrfqda@=dzHD{-~rc= zF>3-H;ZJYx8~#(}F6Ef)WtlxKF(A-hBhj6f-FSJY*=<}p3#&V<@;D}FJNP%{s;(E_ zZ#sG8uIK5kfdl-*u~*0$O|Y-#GU0NShp;)?L^!Va0?I9?d%YdH1OOYnW{k z^mj><6RGBf_fL)o@A2Pes}e6vST%V?gvaJh;R*X~a%B9zm}6Hxl6;SsMh(oZRxeg_ zuou4&15wZK#L;T2N($?#?XQU2Z#CS0%PSV#it!W|;~2Fm9(KuAKF>d(grs%-Px<}u zu!ElewvLBD3z4*$qxkl46klW+iT$AUL0jX{R;1CEo)fJ_(K?=SAJ2Fg8Ov&Yd?eig z#U=;hVjdN#$cIq`oq1VRLd{X?>I#y)3vwL=xenC!px!{#8)ek{^1_t(8GIN=T-4>r zxZ4FekGLS~Xl;)V?uAjIxbg?Npz0$oS0z5iJP-6ap_tkdo1;zoG$%k9Pb$UL1<1lD zhK?Y|^p^@n@pKg3b(DmoC`^Tc3^^$SrESk|?RIEjZ1SntgxLNE+PCQ1skM#u*Jhy7 z5OnfXdFWQuIiq-`xrODE(TN?-hMkm8deii9iS^ND@Q$A39Sz|fJ>`N)IO&bD&3IYB zkjqQ%5jQC)jiRo}Bh`6lt=_};T-vy3(@9z9vQ~W)4gr-ey!|v>+$u6AKB=Vg9ma1z=|$J5oRz-b8XJAzlZ1u!D+l7BRuaqj*%nV_El2aI%?PXGX1id5=uzyvh%?d3Bc5Kl!z7PE8bEDZ|PYXX^QsjQ^8UXP+_{6 ziq)1%Ib8QkFg<)-N}4%6iOwa`#URt6Ta=MursMX1!TYxLrk><=>q(n6^`=!V64vZk zX;!LISyqh6_Zq=+Fe09&;%;6z;B?Cb+rv|1kFl?s_ukZLZR1r%CU%Gp`EAOs$wk;t zS{Eys6XPG=xX}}!{VwAgwyEyfphwJIFH5_o3Kgy@L181Ot4r|(T*L>E4*8$rsBu_= zN+s%$)aHz$R>u@K*4EY3f3(HyHq?LUsup8{n_=sqg?!An_?WXXyH?Ey1@t`l8j<05 zbq1P9M-#uJiC$Vb9!E+K`YE&xQ$Io*(i<;99gR&U>GkcT+pnS7t7lg8s`Ft84E!Fr zaQFh1%TdNd*S#39ybZ5$OXNx)f5_Hl;J47uo^g_wJdFHs(z`IVGCy3ENwPP>JONJ>RMb= zXl3xLC1#+q@hjx&0R5#Of+>co>cY)wWSUjW3HB~QS19Kucqv!?iLc3L6(OnA_nzk-VIstDm{HxEex@7Jq@~| zt7>MWCrt?}hOgZfAZ&h`d>e-Y<2|!_rn;h~IijoT>wBI!V?UTtUeY>#zV_++L7q5$ zKbVS#ZC@(j zK2*4mwjx^;vh72*>Dm*%+U><+Hv((jzN=CM>vw_b=D@e<4nCY*_%?klEuoT%?(z(M zeg~el2o!<)uD{BF8YD;6J3C}r>$y|%w(QcsZ}--)a>W=>)}@pmMQU z!KM!two2LpNA;g1t{$e{eD7AI7v@1-1vS1yI8HwStI-gW1&-)) z5?_Gx#9>Ju3?Znkjj6Ba$})2GD6MGU=jO^nuKbl1ma6CCQ~cdv#Y91{kCrI33Fgy( z_U+`i3=e>>>BLK^g8pK@q&#pxkiIp8>ZHrTUOIK%xVax?!d>=`f#wgne@E_UnOR`r*^--vh7Fd z!dcTf7=EnnB;4^vw^gdNQFMXrqR3CZX(S{z%Nrv5)EhFp-ft;i^4qw zuZ`Bh&Qn@p^U$I4VJUWrJI{FFUV|&lBS-dBg`E#cwATtU?Zb9Y#FwxnqRT@ly?TF8;dtSW)w~kbu=idRrso4%ORCh3J@- zBeZk<2~W{nYM4ARj@f)UPepyMSz&p5t@Xuie7@0_>*&i5Z>`ZZi1J1T$JH8{N-uzm zZpiG+rC)?^#&$o}OBf1e(Q3oNa2Ne%K2_)%+;^_fH%Efwei)WUFEJqvnWN0W2;aml zFtSk%Nj-%_|7k~d1BGvztAgOso%6N!anv5;yq)Pn1TSj!G=%8Q$I?b_Ab*|N`R5wq z7&}J6?dy3Qu2-4(c9v?7tMi>OuAia~$CvY?Hl(J0i);6xLT3pdO%dF_QdRYnPY3p7 zx@VuzSz?LWI_#PuYDl1@nx-YU8?3ZTc29uAv|724T5F%O1|LivF|7QGPBwWDTUVFG zGavTtnKD$vOCA^bYz3C4J!}&VwvyKcI!xUXGp6B;;HCj%UMaLM69-**X0y=hkjp<` zp<40K>i>KZ3lFV5-|HwvrpbY!YUEifGtWwWvet`kiQ(sPqu$-)F)QoYulXY$Zi?r;812r?B_I>m8)Nd!Dat{pc5*{1y#`9RtIg_6+AAeI=oDQ0)yHujU)NB$A9)zhS$nqNq*H=k?(RR)cX^!&#?v6 zg4)ijo^vU}3CJxM3iQ0bgp-N*s>7%x7Z`lkmKkmxH^a7%#}J?wI5+#K7W zIygq#syi(WLKQvO z!9WGJtVH$e%M=`Bx`Z$DjQaY2W*uR(Sbb=kxL;De;7tP`dY(KEAtf)xqF>45^ecG= zzM4=irG@h8R28S6s?-2{KNa|?if6yfbz;fasjaRRy9cegJ3PgYgA}7~ z2$WL!8tlpGbI|r~EWzcexiXBEPOL_iW)*4QOW%t&Zr+t}%0{Nu$#L7s150q>88{>A zJK90%4o6{0g%*jh{N3V~zo`v`R^9sgb#)$3c3nP?k8)qMWN0*;{`hjX+H=3cHaa41 z>DE9R0%QH(e06Y0*S0FI8^XQYprdp24W%`BiAXhVwGn z{9ymCj8x5$I7#Wp6;-^5neIYA;zMSMW1&+-lUfw_*gO>QRq%&kus#oF+ptTAE4$gZBl+AYDdIbm{ZL5>bPJ>&4} zQ&CiUw{CeUqOdyLKhgAtVzDKH*nrii0*a>CU9(I#pTjH;G8MM`n#7J}O6+S@tt$Oa zFXaPjJKT)g;bwH;d&Sa}iYp7|@Ec9@%QzL%-3)mL%~qSkkPL#P#RBsjzM(S}@mzgb zXgYOmdbpRoDxUTWNeg%38odf&fI(qCQ+~3s5V3X}Sa_yD2Xu7hdUk3MsIvEOR7f19h zNgaUK?leC08^yoL9L`C&U>tV1!fjQp!0)oLo`)Fc}7qmz*ac8&JZYnA=zU#~;+(3>J$K z*4kouHVyuEP7q!fbs9}W*4xOshkbG*vaoLa3BZPb&~4dIZLAlCN!Ti}&a5EH^dSHZ z50Z!)d166)9`*`XsAmumWA)55ja#ql!7f`{WL8H7;k-x{?G*&7O`R1THPG{lT0+l0 zL&c$LOHTHBVlAx%Tz^oq9>A;9E4FEwr8nUsWuH;cU5+O%|d=oarXxM`so$;E~@Yka1NN zSw7}Jn*8BOYMD9x3dLWcxmQd(Zjt?_ncCXBTBid!_heh@!-M_G4V=|`S|?jr{hd`= zrP5`fcrK9E1mHLCOYo&ya@w}$>aw^K9%O5mz}%`<8X9J6pslx(lyu>J<~2a@SlfQ> zt1z>tcb~)ey)1sWr3Ll|Nv75I0%qD|Z=lmBwQ$^rMJyL=s@lHO*APKHVBv1~h7q8ENA9VuCtOT$3zlrNFE~&*}BbGhm&&xn!fDdX!Ks zX{^>|bySim-Tp5#^;6qhS-u)loVZUrC{RIBZSdhcxP)n*jz_{Y(Q<;sMCzYtI+v~@ z&=FOK++EziIrFer^EKN7E_jm51rpyT2Auo(XTO2X`g@zaI!ctWB57b!WYiydl&TKE&{V%1)WzLn%bS^ygeG72dd zjxlJjgrWuzlcQ@>XdK63(l??vb3Zxp9+eVk9PWnQ#8k3?feL?qBc_vk*R?fSDS?dx z47Z!um{|blJd|YGtZp`|lPTEB&XYjzNmz3YN0M@ro2s6yoS=1N`K{`Yc*8$(U}utP zt2)CBtzBO$od?G3JrgE*t39aPniS2G$_XX8x!0L{ZP+6<@R8|~I@PS!19%nw&l}k- zvcmrQL~Xe$3;eOr^)4J7B_;n?x(F(5$4lS?&f3 zQdPTRe=g~Wjz#0YO0o(ZcmTpHoDkO30iIq|VHoqA16_5MR`OZ3S zhbgSShJ8+WHH6Ag4bIOHc!%MyeVwA0HQkZg>hU=;gsIGM5-klF6t-fM| zP|jbIeePn$daqXE4-#(mCqI^i6;SW0K}%;SIe_=nia1Ud;|4-*sZ)=@l6&3$d{VA0 z7x5dP>-IyOV!ED$&2_hWT7InFht2gNY_5-YN!sa;t9B~#`}5bi#q}jOQoX;R+z3gb zWl6L;$#fz^t#rq%<^yD#It8+CSkYiF%~uR;EwIJ|V%QJV&6AeDpyjlXzHRb|eP4l9 z9v|ivimL;aT=&ohU;W$Q#}b+MkSev=*Z3A@(>GLThnHmx_#^kimp9ox^3E@}<=5&- z=mXaS!1Tk;;sD36VkH|fOWmUbb_RRNuZs_D+o-rl$@uzI>KVE32(v9s0QxQe*ebU2 z3;a)}c|1OQg$meU^5?FtF#JF3*>Ugnn-@+$LfNbrfj}m8xUb;l>(JOb9wXUsujNJ#q+DN@&t*fu_CT#`y3X%xaI=S>7CUu37Q9@}5 z<`Itbs*h2OVQvC@k(;oRC0ONWTls2~C64AR&l|S%ERFa-afWcayGn0b^CP{^ zG@|au`0qi3;7o+&5(Ffe09SnimN_EyCxkOHCnizDF!IihXe8?2wVU#iH7h2~oS6de zj&?!r&};#Jr5h)Kz~VF;_*oE0P}sEojaVTEocx4;1;A!Df}X4R$C9~*Y`u@F3`G$7 zD1R)?AMjRnrPO>{^%*wD-4L6ztNOfO6*5II zD%67><}zkFrwioDzYq^#u$imHJq*v{VUnc}w2XHm>L@ zcTh>!EZ3Cs{3}NW#1t(i=|8w8jK1dDPY<)IKx6lZBU-0D9LBTgP;K=QI`9N)2uY#w z(^u2Y$0(+3{Rz zE$pEu!?=!LjJ46c1F@iftKeZ!ecI%AP69?&=~27)v%J_>G;}!!PU!0q z)@}nmamnt6)jJ-m_a&^}R~+X@K>rKleIj4KGx_?RbwNjI?1D^0d~~&b26b>Uru_pl z!r8O|kJv}07b^cZD8vFP2eC78p8&N3CdKB6-lzcDPX*ZMn?Q}X1rQqe{!N%B61nxx z0Q|Gk+OlF2PkmDtW*}WZ_PhEU7SY*`Xz0i8KtJ}oP7G?~%vBy?fzs7Ss3{g|h<=X6 zjU+e^Xw4j%r6nU57HOx3iC^`VA{+7OAVmmA0ka3`xbT&pBf^YXcw!IY7YY^ek zQWfMRU+dI*1;tkEJml#zofpWHFC6d@02w6t!ds!9l%liefG-Ya)Md(s816>L`A~gv zzXUt#I??}!eiFPIvOdIq^0vx+VC$+-=`4!pvJ#W=PB3PQs)*b<7D3EB(T@;-x#;HhpJY=VblwHF|^ z>wp2J=$1GjW^(Lsax`2nGIl9DSyC}r-H^keu0~niSSR0v*)IlWzgu&ZUCMc$OGh_A z-})KAAymB!jm0DFm^ByBVEcDKgAQlN#X;CO4k8pl2zg|vj)m}&_lMqG`u_rS$aM>$ zg823n0(5S!BLRFg688?V>E0niOGgE#QwT1toXZM^zcdQxO18^f$(9D|c}cA;XK0P& z@P{t9%)0@E50E(*?!6JH;P@lsZ^&yfjJT142+4thpHBQG)o-!KT%!6gy>|qT!7Ws8zw}~W@!}Z9E(C( z-ZY4d(o=6POD|#}OwAmfdn^Ay=WUa-ihyba2=rzfc`ptv9Q-04MRSgE;%?HLx^Oe?c!nF0u~_fmC%e00x&wm5^sQr!e+^5EJ~ zA;Bxa(#|-08+<(f=7z-l9d~iYZbt!%@$CACrZ_!(`?2Y4JrNriZ}A-zJI8t{T^+}e zoa58PkJ)e<#n(LFk&bkT@*5}b&%d`Le#APRW56}*fQNOIg_X{NPvV)A`!C}MrIcf& zjtZJ0!N!{ng=IN~Wjn_5G^2jQWh$8C%DEYLx?`h{vgURjSiVOF(&}87Ds>oKswO)c zfP|QSvu}mcfUU*OIqnh-(jBbAX_J|Dqk`Gs(|iaI^l@Qgfd#C$u!Ep$wBsg)vDU4P7*t)dDt;Wp6 zZs0F;l{wS}}s^G4!%z7Wlm z8nJ!+HR)5$E1F8HQBhm{<>^_tX`3JOVck{{`*?xEZhxHXqXbfGZsN`<$8${O&f{@< zmUy0Jx0~=rp@o=-YYLl(UoY_s*Cn+2J^g`Jw>wx97@Be{%c+g8 zksrroy}(|U?WlbcRPK0I3c8qYbD!NCX%AfJRa2L5J+(qt1m3mdf!lpkeQ=wr6 z*eTMvv)q%-QWdRnF)6C4vNwoAVZ9E%4u`rWhMqgZP?As8rX7Zx9bjL34ng!+{LQtl zvSUDLi5tK5ZgAr_--Z5kxQ?Pu_>GoPUWGh zFp7crwKH3UEEUHF=UhWB=oyyojD=UlvQPZ#JRpN!tJ6Wy*sHMl-J<3ADzmXs-NHsS zLc5lOS>r}eJ(Pr5t%fzYk9I?ct7XAR|24*)&W-eKFzyu2KFwnpjFbL>W=;1%%z>S8 zT5qZ*>6G3p*o|T+k9B~*ZIJurhtV)+>-6^rTed=`AKI`kSk;M3it%0AA`R@egz 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

GY}fv27e01kvzv0f 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-LightItalic.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-LightItalic.otf new file mode 100644 index 0000000000000000000000000000000000000000..3146a822c968567aebad3e50278374000bfd1938 GIT binary patch literal 107036 zcmd432UrwIw=i7YGu^;63}GB3*v(+Ttb}0@Gav|xfPe~uNE(8YB#IHU?&z*-&aYY5 zbAaPR$|`#sOsB(aGL1 z0|M=9R)-;K=52)3-6LZHYCz*mB&K`08z20@83r&V)0zZq)V^)DooJ%JkZ;Leas^|{IA?>CI2 zJPXmt0uuS7y-nxQQz+g*E>sj6L+g4B&jZHcgL2F{m3o2Q@=4;hs0$ zrdvXO9yOCW!L!MbrlX#;t}gEbxfS#+L&gl=iNLvv^>O`G0PT@Xu8 zKv`55(ByVRfiw^GNt%ODfY}^5exi3h-T#|h zra%s4UZgo`kj!%;&5JqFUa0M-`H<$MK>}Ju*4=xPd6DKuO46LXGd-4ai8l4P{l_x! zsDz6|Cz4D2YJof?nn-*@co%T|k2&x(b=`D@&{M+urRgZl|8~OTz}xk_CGj~a{|5Z@ z3JFvPSYS}naEayoH}XROie+3A!Sk(NRR%3(gFWiN^aUpZAB^61>k9K zq zog~e3U8D2nP9dvrV zOxNe2Yl)7n=ZSxkXClA#y0u=vN;oJPH$VHtEL~(ThQMxL8lWvZo>7sS>`}CubP%hy1hQp(I}!} zzxA?bt}~4#c>`S|$>FCY*@ZCE1xW9tWR^$MLSiE%J5isK5f5_M2~u}rJ0$xd$)yZ= zL2f~7kxG)!FA~@mqQC0w3N6i9HzXr=xfPP5v&fP{pxczDN0b6=jJ4@0<%}5g2coD} zrVmsT)1Q=w=_xvAdPz~HbI|S##eu!EHeI5eOwT|!{YJGk-Gg>Fs8(no*!?()LVlDI z`BGMZr!~lv3yK3;M#J-P&`%*$OOy!hhC;jU(5@@+b1!HY2>m9Z7w~>7XxjvZ(+*&p zz6P0zgM2K~(20;wfP5C{;i+JciUgbwKw1jvACR^}+74+8JadM88{{MF(j>^oL4t9j5s+p;+{ zoa3}jx?>W-FSVr}fNpt>JgINM9#EjWUZLjy*ZD=F#s9?w zx}gIkS4h^7Y#=qRD@(pWCL}vZP0%&ab^hR=uLHkgI0}&uMIm%7*xIvTFZ&@a9S&&` zl-)pvTY`?(AVha&O@N5Mv>JaR3j(pAtV5dShzEn<;V@Z4Re`6?xQ*5-N+>|{}0*}6el zNy;)r$*lnDKJ*o=s--doK2Ts?nMT%BPF)$++|S0=Phq2kk**Q7cCApfIl)NHM zRAIg*JUcV1IIK7&Cp+ywJ=K^W57ZYHW#{KfEtoSy@?!w5;ruoRriK*~J}E5Xwgdpz{k+Hdv7?RE#vB zG15?L$Wx(Sg96|#4W)qX(W6{wl>&9?kZVvN)a1awp0p~2ccohMvjG4x74Gu@emkhm zho@Q4vJf~$12FQSod$Z(A`o++CKVzHQg0GOO#^(S_J#0f5qY~5uIbP+7T%NklUiq^ z62MFYR#Ad0wU2@~@*xk0HerxbNUJok!yS+(`R@XKhr;tfh*|tAta?ahIPE{d`PY{J zzSqyRY}ot2y76ZNZh3%RLu`5jhUG95Sp$T$(0hPbp+Z=wGwxQke(z-i6Jy9hW8|zNpfIrA@O7y+)Laj@v8Nf!VMX6j2w9r7knKEX&6v0>|{ZIh4MbM)}(;Ue2p*9mJ6AAB!{~O-? zSJ{w8Rj*|lN=775N1{j(^dLc%^iB%U$IO+V-^qapRso?_A<;<^bv1SKEX_w6z?Ys# zW0a^a!ILz>aJc_JdozQK@xSY@2t4Hyz|=hV|MT9ye6PMQ$?}3*0I88=El4hB1HmlY z!Hos7Lp`Cd9Pr3jqD|-rv>hEpC(ucBA3dfhilbDNnsTN5s7Pu6HHb=}hEOR~E;Wvt zP0gVeQp>4p)N`taGSRNI8{Luiq5bGybUd9vXVHc94Ehv(M<$n9%B*E7Suh9s* z!9Ci2uzQmGQ1=<`i<{C-*`~Hl9h$l{6`Hnf8rn3uslItu^JmRXEzY($-{MlsaUyLp z0fi*}lnUB^C0d2PM_bSibON~Q9sZ|W#= zf%=UyQnj=bEzlik?|-7mN%|KVlCd&{%mFCk@oy+X3kpFH+6X$KyD(4~EDRII2o=H{ zLXnliCZNbZ;gE1#I4k@t{3^T^j2fg-X`D1oG#a2tM~%0}zm6isnu>ozktp{V_XI+b z*>x1LZ$Ods=E-#wIR_Le6(PuOdSH5JdSv<))@W6bjzI!%58{W&bOO?GNKg+~*u^ld zhO`pWBGU=e6w@WsP3cL)Khs20A5%Y5m?_efY)bn(`tLyVQ_~PrgelzA+Z1dHH1+(r z?(crJdp{=sWz+E8`trk7u#k>=2)ih-<8Y~jxO4kRD4^$5v9@sxnLXG>wM)%)7 zxbk2<{7-zi{^9C}OCPLwu=t_hef0yM2Q3l0f9d|^`<3?>A#_i7KlWZ*$eZ4CyQjK~ z@7}+A=kDsejqez5mET@)``cR+*&rfAQYQ#v42S}6o8;i>QjUL!Q7@>!VeN&a1XtEv zrWLd`t)v^#fD!FTOI~>0AKkpZ^q+DXMr8h@>AD=K_+S0eUFp6k7v$cFc1DE|4Jrox zRSHqbGFY)p1{qp|)}amPJ9HYNBIjVA=_0yBg@NwqL#+TAS`9Mv9mG`bQG==PsdyOQ zP@qpD^#hd&-uiv?fJ&owqK6PU`IUYPlD3D+g7FWBor}jHk2%y~^aMQxopcmEhe*#K z=oM825w+Lo4RwwhNnM4g+dHZpXf=VlMNOveQ(sY!rS%OpgZdRD_BAD^7?9nUR0!y^ zbZQqhiuwt(+aI9qHd4c=gVb2+7pfH2yi=&9)OhL!HHCUW89>I9sIAm!>St;m^_JGt z8FV(COXtzU>2x}c&Y?5uVN@u!j0&e#QvIk^R0L?yzSKWJV{8B|x|vF*wu2_!0s3?c z=#EM%pQ@%#P$#JZnAs838LANGx0t#>l~5O{OVnkmg1Sjfq;6A_s5{hM>K-+fdPq&9 z9#J!?C)6zJDR9DbYA*GLT0s3t^`;i1N%U)~KedL6rq)q0^czY~?WV?1*Qs&zpVYV1 zD{4OVj@E*9@&%pU9duL|T1R)LyV0HK9<)E@OSb`S?kS6v^_NAi3B0Ypo zqPmcEBUls@#J(WfxvRBh=%7XvT^%P}xwuBa(Etp$jj(wbQ{>_39!VUNF<8ek>aW5R2#~Z(otQhAYj1$zg8{X4M7J7VT6Xj@th#;z&d8kD;a-IMM|$AY=bphwVS=xOvU zdM>@3-avmxZ>4wB2kA=sEPa)}LEodF(Qjy@i~?h5CvyVT-&UrT^_2CNMF4RVWtp-O zvXQd!vZ=CJU>ujoR>?NXw#xR%4$F?q&dPq0-Io0(dntP(Gs;YIh1_25BzKW(US}n0! zWwp_2tJNN>!&b+w&RJctx?y$S>UXO@tp2j9RmcvPuEtshyxvHoadWuvxnw`pVJX`{30Y7=M^Y7=1-Yctp;*(Sp# z$EMI`q|G>+$u?iv%(huzv&?3-%|@FoHoI&N*c`JtX>;D@ip?)JcWr*Pd1mw4=Dkg= zl2%$OmC8m+7o|q&p=_u0R(4W$SN2l&QAQ~TDif8d$}DA`vRFAvS)rV&oT;3nT%=r~ zT&vuq+@{>4Jfy5ro>pE|UQ^yw-dFyne4%`+G%EkLmD?(8?Q9)wo7gtBZDrfRR%_eY zwx?}~ZMbc;ZJceAZMy9++XCBC+cCBiZKvCQZ9C6)iR~)ejkY^&57?fxy|Wb_u$SB0*gM(__8#`0_Wt&P_I>PQ?UU>??F;Nj+E>_r zWk1(`nf+S(E%y8DEA7wPU$MVw|Ev8=`}g*LJ6Jk6IJi1Ab!g?#!9nNH&7qe=ABSj% z!44@7#SY&%EOA)pu+3qw!x4unhcgbB9j-e(aCqkM&Y@PtsM1suQ;IvJr4;E?IusRo zdgVx0?~=T1PoKab$h?9BJxLZ25D=V_R#L1_$t+AM)sx04q{3WG%PveS$<4^ok2K#y za45a5ReH9*P+yc?WPVVXotH^U0l6t@h52v*q+w=$l3J)Q)u%MLnyd3O^Yiq>Q@+T^ zlOTdf8o36gr2y14a_vQ~>2>A8{FLH!=rW}^*xaYyoCT-n7pJ79>GO*9pGv{zPW0w1 zm_X2zYj1*9Cb@>00c4xAFmvNW1+B=+p%V}^W)j35uDMeYN7(rgi zBi9JhE{|Lz&Hd$@v&gKHyv&rslH8n>lH&Y^H__zHLUN5JZx)hk45=w1*O)YYI>hl( zit6%M(xRAL2beo3F=qp$nJbYl0~&Tx((q=0dF&DEnND|6DBpTpUcW8AYyx zKap-o3x<)Y~&O6&OX5YHz7yPj9c_&@Wzs z2a@nZrVZ;8R*wY?OzO}pIEcLEciXD{3uZ3Sh$lay@I_$G6^STeg-T( z_VV`0{1U#mSJo#^k^liQLbASi30TNHcyHhA`p!MQdYMTY6qr4Xyrt_T?INV>$&HWS zurENsL=s%ReEbL&KIYl=2{P+Rz$gb2xq;`vQ&KZ2Yfxn#mydsgD)V&tn8)uE*x-qo z$+c$MX?^liq|=Cn`2|@7KQF?Gz>sz9Y3@yH<`u0O(-4w*`+0*($Zs%gGQHm3by7rV z4l|Me&+KU)r>_}u-31Jx0A;@!!=qyfri=?nHPsh=RPU_Udn_?Rb_j1{KHCsSXTo06BFno|UhM2;lp zo<0Hoqx6OO9i$5>r03=5g7NMk<;7+B<~*xVZ?4J6FDWEd8QI`kNNtL;N1AhR1oB8p zFKsT7QeJi)An3{4vy;S9kV)f*OrkVo5{i&XgMdt$F~}t8hfJabWYWYzW=1rxBp18} zeFrI*@FO|FPbv}oNI}9+DoFT|oZu&w%=k$qf}d0%9r#K3d3u_~&NGm3f@h!^KR+{m zerEjq%=r14@$)m|=O<0Cx0kOpMWC4K?#Sz2zT|Z;U-G&a(Q43=yzb>oUiTt`4V4np zLq=!?`)lSqGp)>^J&EG>_VhGk=4qxXaRs5$jFP7rPfr5OlW;RUGvnz=RI6t|-FpO2 zun1B|FnImQw49XO^!&0s;%km5(HBXk_ftiIzA!sKow#6y`t%Mt`Dr;p0kQwSmOucw zo}K}{z`E=6a`YKy7na-=5u``7k($qqa4F?dJ9+z>ZJ!UB4lu)h#QRCh&rKy3Ln=r#^C2byvY-z2 zqFU$f6CVT~ka_g+3?O3v`88=KJ$<|g`}%nKfZ|Qn=j4}tYCw?p^zoKB1u_X;$Rz#Z z>Ek2u8)VXmATvMn?DT0O0b5f3gfhANgm;5>fep&u4az|c%DM*S08;)mlm<_M)T7sLF;HD+GX$fvxf}57$rX{%f z65M}ZZaRXSj^L&vxakOPI)a;y;HD$E z=?HE*f}4)urX#rN2yQxpn~vb7Be>}ZZaRXSj^L&vxakOPI)a-dh~W5{4R#Qb9Zy}o zhwT;IOOiC{xitS?897o$6uLHq*a|@?DkaeFR z>*^uv2;|}n32t$Q1Qo7?4#gP+B4iSEi!&r>a3$j}&M-qN&LD7#GychnOP2Ycs_M+W zG(Fx~a1;nUKB<*HFI|d+kYetqA~2_Cu#edt@&X68FkfO<&p@-Q5fG44SeRc{0o)|%9EO#pW(960&;RR1X7U(f?oQ9x_juH;j=nu`FxD zs##YykxgfRV7Eg={&yBzSXp>mBw7r&7;CZIVxz@Li;EVIEZ$fuAg1nT8DUv!xzKXC z48W*>|>2x6iX5Z9m(7ul;TN4-Uw|8ltm0hj<6Q!#Ib9 z4m%yLI{cxcRcci$RWDVtYP4#)YOZRrYKQ8)>Sxs>)t`-Q8Z~azqEVMd(T%bjRWw@I zXmg|ejVc>mZ}e*;qgt+ZR(DVbs0XOC)p_cP>TlKS)Z5h6>Yvq5)wPbcj)G%*N1bD+ zW29rU;|Rxzjx!yXIBs%0;CR;YrsFfm4~;Dw+ckD;+@W!|#^H?<8V_q+-gs(uz2`~>CE3#SnfFW-D&Q$%(zipqc#TMbGXLH z;Qe9(juubU28yRev6d0{<3uqESGm>pGnSU}9G-#;@d!K@Ct??|i5MfpGVuoS_PDsKkq_IJROC!|8dY+UUH6SJsrM#nLv*Qt-$}49AMCKSnWJ zMRjbYQG1j-Y&bZv%z?XzFEa5gN1mN#IpcIDisjTRd6BJgWJDFKG`_3}Q0J}1U3soE z-oaqard`{CI?>iYIe+8fZ3~ag`9Y|}a{$BuaRDd(KE?j!$tzcu8WXF>mvMhS!gdA#(0ccvpExs# z#VRooN8$ZIm&q_q zr`aFzZDuvE{GJy$!$WL`1-^^BLEys0!^|o6EIx>j8(TBIP5?8M@$Zda0rA{xr!b;L z5m)m{Ev{uJBrtd_%tGSg!J;O@y=A|RSvy7vTurC1;1wI=MR-BvYO9$pqsqoNbLChc ztY)HFvAL*bIEQVg@Pw-5J*q<-`v@wIv$#1t<{X9`KYSwj1Wr3K^aOX3#T{z$B(@OO zb`wvE12{EwIR796opa_1a4-s|I0KFvQ0c(2ORqDLtdcQ^jaNr<2e9S-O9!|KRoSIA z?SVaiCB1MfOKYOaaAVGJ!g%`xCng`kO*ysL>GxQy#65W7+{E$xott^0v)Hz`xL?fh z@38?p2+)E%oc!d{)ujeu&Jo7Yb8KYaoK=rr?!|iSyZ77#gRtZfW9YFsK^z<=juTaa zveMZ4D0S|X468AvzJ`CF#&5=6On)|8^kTZS(+%sfT>l3Y}Il5z9xcu6DV;_cpe>jx9=I zz9rTbVsIPv2wquT<5UKnaO+?On*)oki>8=zuWTiCzn^@J4Lx57O>qvI;#QwCwK?GYjnozaSzc?TqfQZw}`*i z3gQN_8`j~a0++@Zc2C)RW7EDPf|4-M2^Ke#7)Vk)Ws>442gUQDwOZ`gW>pG~g`2ZF zraG4A&ayA@UNS6RsGp`aXd4l=dy5D(aTTF6n))P z`&#T9eD#m}m^BE`c$_xHHHz*Q{bxyqWLGHTmN*&i>|*rmn> z&=6fdDjDp>b3J)Mb)W~Y8Uq?hbx7>26Z6FmZl@ea05iJsr{Z_IZasD6+qrJ4UpPaD zWuefyOdKO-3TLL`7Ch)PU{g6I-)zW;ZRr))OAys;#XttPV7b}}>aM(aRE)>{@P0vg zp8al7MFEcBkDlH#<{!oL1P+W!6R=g^v6%Vj$lylxHb&&(Hcw)pPW-|urq+>F;#xLX zybWAcXNE$>%Z&Juy#(?V0qQNWmc}g1@+|eu^QWG#7XD&S;pMznr_~PyPKLuJ8JA4x zOrE>9`s{@VF0VTu6B~SBRAm}7J>-dXm5sdZ;7Vi^38oic(^?q}C6 zoLHJOa#TiM^4A8p3bWjB&u4;8nfc%cY~k{t|CUZ-bT@I3*onhR7B4iupHcgs!8R=3 zNi3$gl#FI(jTO_A6<2?>VmQP2)O?rJ4db@0TRYbvd<&9YI-@*q%7WvIgnLGtB%V{x zhT8T=PJrLZ=)b{Tj{v&ARv@Dql+ z0J>z&^+)>)LVZH}a6OYUe8O8V0ZkG(eB;mSX6~4?kuwtpsKRZF@YnYX8O)v8^aP{J z8;bh|rF3r&o#E;#yt9gX;Cla5^)IX3K%E1XrVIgRZ1C8$j2KriX=~Yu3E=d^^%YA* zXV5t3s&GmbS2gO`)2f^!aKGUgo>s+yz3&(R_=|S&Vw~85`#4(N`EVk3$KCIp#nzXy zHu@|PR4;q(Gme_r*nVr*G@s@|pi+i~+J2&z9S zdd7ukcXc`bjkZ zkBUAcHXa4@(;f%&st@aV)t?^uy?eKISqpbJ@g?<>Yez8ir5cyy1;&zT213#yxYc-4XBPnm%r7L~>mRn%{1@V)ag{I^k5 z|GGJ~r>G5YCc23I-6jrU@Bnrpu&5&oRF1Ct19xPEZpsd}ym{-LC91`)Jw!**PGqkP!u0d!yP@N@ zdH!w0X0Fk#78~4N8RhC{$Dd;B7e`}6o1|%3(?I>y{?}Y3U-Io>>a6 z%6WF>OD2pJ_txG}dtXR-{rdU_P)*=gbuRP`8MNZuofCU591>3NyKwO9tClmDf3?)$ z63KA+vP$}NHPA$sXOh_8b@B3l>377rFID}8l8D1cW z{g7i}6Pp_QRLe|Gn+$2##A#voh*3_=T=mum00G9<+b++A>CL zJ^V%_ACW9luA(CD5VlwY%FEc9U2u#M->`Tjj%2Xio15pbrOT_ZgQ8_;j{<`*We{U{ zaf%n2c7nJ>1Z6Ky*`mg(li;4&9{+KSL5LNXnccI*{O`^R+#H_DH!hdq+mbmk!o-Z> z<6$zyA8KRNIL_z{hHPW4Gs9tfehK)T#h}IwmE-n3*>n2p(X2H?Gl!2d2?R^)y(x z3uX(a`tu~%ICvtNIXBgZTapl8J%U*d2K}~f(DrX`kU{r>LHkRCo(hA04uh7%pqEO6 zR^uzIYGt120?e#R#*X~Q_kZyp1K;zQ;VyFc->AgpAnv$ln?s^SJa1l?2(S?P5kF#Jk!Aynw64v;6yW~+mCZT5uk$_g zc3glp7tCk@ECRk}!O_d*RlCe?wd$JLvF41=4m>EMUgO;|+^!~H9nS_%+8z18^#QRB zF_-yRvJO_No?w5Yw;G&?fw0z-)WgqMWK_Qx-d%b54`I<6&=fy|rr_{7sY6v;ekBa8 zq5Hgl%es>;`-(P1C-)z35GD#IT~KI%$--|aQMAi zJR-hluCdsFtFWb5#hd|u5ZwPGxK>gOGhx-o;*(52$(d@#jvvSzlVoBOi~V>|h&hb1 zH?Ml4;mr{bP;B)vj~b==zg_@ySMjfm7(sNXij4zTcv4QkiII{=vgq~tx>eK-p^GfB*1#Mvx9ZOmapScuCM0%wa}H#%cS z+~qoM49jyi_^5lEHpvD7x7j)!=-!e)4H&r|;O84X)HoVyX7YDfd;vIpBP%um{R-Y@ zD@nk?sfQw?+0nZ)*R@wLM zmT&MBKDwRAwH|aF+rS!eK@}t3W>4Y`3|`GH0PDKi>;T?jxkX?k+Aa+itq1n??DyU9 z)1!o|WlYtWWfKxzxSBO;)i19f0OOzag~557Lm0$U-OY>rYmMf35N9}QjFlYKBcS5v zV^83Y?aTL9ZdqBDI%dYmsilHp=;*xRqnB+Gl#cib%t<&aULbCD7Ew&wrT7>Q<-5mk zz}6t$lH+rpmpmRp2_DMY9g8FnWfFKO>jkdY=yjPlTz^`=t9v#FShUw-jP?0Ew|&A zk1nTgj0UqKw!s~625y_T4_0oSD&lY#F@WJ9>XO5*c+3oDOS~8@3vrEX2)4iy=p3$Q z@Ol>3IpTWuG~UVJ8xYK!qTcnxrtKS6l;@=l8=js&a>WKgSySN8N2l=Sb$S&)fHh1` z=IR{p-)o%IOVjTi9w5$xco_Ggxj)~(zA2c41XhgrC^9&KT?lt>;Ls=YxM#~lqC6gC z?&R3RZw_3%d0fA4aC%m`LD&F3^zMZ#zTfV0AZLB=o(aRkau=7coG5UtVWlV+U0uY& z0MQF#JhNbN`%104{R(`b7v~^8Kw?zf^rg#ZtZ=OhWc*mVf2d@QF{tr>)@x%+^xO_C zti)}vUQ0X2ZyJ7#!-~UF!0*=nVIn6wM~FMbNKPzf4zpsEBmSBPiNrH6-~gQFf`xoc zfhvcE0m9P4Knn|l#4`MK85a^;Iw;lcz}S>^0j@!!ybPp5q#q8zO>yUU*D!x8e#bzF z|LIE#lZHs@WE|+(lNE;^Z|8EO59wVqL!)N%mAh97Tz=F+y=zwQ{-UHDO|yXvuxQ2Wd|QosHicQK!p*9FkwU{%!iT;xj`+TxeNIk% z%1(fF_9}K-xmY6_IsBHL4|BVToxL0zG3Ktan-`DEO)1KckB^)W1gMYqH8~!A0+*hG zxtx+bZHzFze0ZF}MTyt_jL+goj!d+h>d)BHa($``XSguF^5yOm7q*XHRX86AuyEGW zS<8f(GdC~a1C66v+1AiO0i1h$<&WB0~(0cHkBtW(26OL0LJSzSAD<_M|7U#IZI(_Bp#Sjs|p_2W^ACCo8%5=V<@vpNM!t70Ph;K8fF z`~pj@W#^HAEa;Py?05(~oCN8V!OIZ!f@rLRv2MatH@TWTSde!l(!c@Rjs>2Qzi;Kr$f64)LqESj`=Lz3;b!4tP#=HY`c?r8S+8 z;>cr@%D5AfMjyyt7dJ56C#v;_$lC4=`Gc}522GOU1X7e{BfA?EE~ie})J9}Cf_Xj6 zVgxf6#wu6d7F1720LUB`CSg_>+ISKe91jLXjHr(ys>MK$MS2_pgwU*D3T985yVPY3 zC-$wzDiWdPwk=(?VW-Q!g7y75V-SqD)B^$#TwU;U90WfhND#%2CP9J^9X|yd!GQL! ztF0LVQ3MD=$C=MP0R zl790i9l>|6@R2@(-|pE&eywLAf{jo3#tOdVL(8P!?V-Lx@D((Cpp2#<*cnAD5P}~A zT7%GN1YgUd?LH2b-r9{Ok|>LeOr6cF<@)LVIYm1fc^6!AFhMH-tgT%d>W4mDEJH#l~eHHIDD8!{l=kOihBDi)l)`acSXa< zPah4Z=y#UzD^YaqBJ?ei%}>kDHbyhDH&jhZ$JZ8Wvfszz0fKB&8>$EuGzQjSiJ9*#X7Qyt43XF0BdJ=4RE*Bl=> z{?S;|xEJh|e$)76W6{aVsi{*pr#?>eotrxcI!8MfI9E7ta=zgrbLrxe>@w12waYKA zIj%=tZ@Ru{(x{2HNq7@|lj%*q=QVskK7k*`&*p#P{}9}TQNj%P%(@Cbt2Vj~a4T?| z;xaP&pH#dLNqDhN3EjqP`Xpz@qe2dvF*0reg z@b>u0O`xXt=_kGX`R#htJWJ^zi;E-CcMp< zHmloIwRzOW*w(&n>$ZVy2e&P1d#~-Iw(r^++p+Bw?Ue02+O=*srrq>*^V_Xzx24_n z_D$P&Y~QPWV*8Tz6Wh;izo`9=_7~ef>cDpx(P3tX-5r%3H62HHeA4l`C+|7fbDC$3 zSE$!cFOzpG?>KL4%lC}V zTGvI_OE*Y2On1%C%CD7Qpx+=rz27%}d;Ko^J?rG!$*)svr;JY1JI(I2q|@$Bm7RX| zr~TXb$M_HNFZ3VpKg<6{XQ6XY=YgFwI~R4{+eO)BT$j0BHg!4Dbj`w?XHize(c6|%j-6&+oEo3yZzdo>+aS)pnGKZ-0l_Kmvyi1F|^0mJ@)pv+~b#? z&3Xp(OzXKkz%sxyU~$0lfRBN?z~aDf1J?%L3;Y=5666&W8BWOj?(V#cI+VzU; zmDg)QuRXnv_B!3`RxlsjH8?DIXz--q^})M>tAp*!@1bKC}BQ>2spbuYKP1 zwd(8CcXHo-eXsX@AMPHW6kZfQJN$h3rSL1^55wR0Yt*kpztR16^m`QH9T6U}I^snn z73m%s7dbC-cjSkt)=@!G-$dPvdfnf)f2aPF`!DQ&p#Qc0kE2nvV|2UdsOTBd52OEz z(Z)o?42>y?F~qEl?H-#GyDIiT?6U#h12P9p8n9!)?SZO+(*|B0G-S}$LA8TSadaFL zXAx%=$Hgh*?Bg26HI8$M}DT9|MFbSmzHxu3@{F#6gJ0+$i&Pv>y_$cw?5bGg754knu=@4U* zMG}|fk|ZQ`Nb*VYOX{CAFsU?YM$*Ehtw}eN?k1UrIt*<+G;nC*(A=S;ht3$fX6T8b zKM#GA+%CCa@{r_`1Wg5>MiuH`VRWR`r&$mzEXcn|96IShAtx_ zV|d2mjBOdGGd^TmXEx33m>HQ_kU2B+aAs{*)2!}U!?G42@Y5v9h+JcCJF$I@LbQlpa zV!?=-!uEyx3ZEBgi{gsb78#3ei=&D+7ynd}R5GpPV#%9QztT;mugZeTR+b$f89Z|3 z$b%z)9{H-=sXU-OzI;mgKgzF{|2-;jRP?BfQD;V5k9Hm1estvMJ)_@^aT?QZOvIRx zV`h%|Va(kz;@IwE)5k6z`~BEsV{eUpKd$|_p5vm&tsl>iPaOZ%_{$YO6=4Xn1M-ql{XI^)fsj-s#7- zt{uTtvCYJy`Y5bY9B!PCb14X0%#z`9aQynRsbVffZ+>&EWRKunSO6=}z%E7Tk+`FH z;F0*l4%>~FRGW>w<8~a%U<-CW1O`}EwQDzqMFJEyFE|2657-^JFB8M+#lDQ#mE6R# z>C%k_G@TG9wM-QUO1E$t1)%7~P(X};>hL(0qf- z=mf@aX~KmmLb7Pj>}7XjTV@%HW2YU%ZSJ{TjoZ@UAHoehg{ho&Zj!-8d>}SaU)y~P zTh0)cu-zf*6tN_0=`okBwawLc@VCt6F2Sp1yEEAOG>$)`I%IUKNmPq$NRX%)I&Z|X zY&WrGY($i(b`j+#08 zckK*DE~-P125jpjh}E^*)Gv0Q!i^3HxIKhldnE*?1-SYp?tb8g!|-eM%^hcM9okqD z+bJPYv`iLCHdSoh?V=QGC2la3Ibgd#Ax3NF2h~b5M<~Tg(Z0q+?T6ivD>V~eD(dcW z=ku~u(O!K5_u>2FKwh*puH1{8mQlD7J}1Mkj7`-k*nz<=dqpR97jBfYI7L)xZWd&| z?8?)NP#g3ybZTaA=}sZ8y>c<-9Bwy!?R|J(Q%C7Y2G_r3L(D+o8E%z zwY2Z;rYuh6=NXGs$@8$w8-B(F-q;R%1)WXpkOTg>ubA{=yl26ZVcy82?Z& zgE(1(efR$=I$0ZBYX_V1+Hd)@#u%A#4vfFSwsftmw#vL+%_vWoD0a_+&Ai<=__eu; z$7k_PVBBM86y~D`;%mceT>hF`g1u!BG+D^QS+u*bVuD5?c(BVanJ} zT@lL|+e$&g+9Bc;wXu!F5w&euC4sd8U|}oca5cUuhSYk9q2t1g!|?EhM_`ZuOmqN+ zc)XIrn!`BxjLev5yrKRzY`2F;k9^pqfmyh{_QB<&Bm4UIPYxR_L?neJOb@dBs(j{X zgUexd?$!l|_H4ay(D~`5y$7GVzyYxvFus4hWct8SwJ>qWQS5#suFB|j6nhEZ+17am`QQxt<;#ppnB5}Yic52W3A@eDHt zx4tvh55DWFI$BXn;r8m^tKkqxi|TW5_NSk?mNB%$sS0DHX!8Y@#|f76PT;8o%M3Ud z(&vg9%cc^RLqxg(mWL%Q=ShdvCZsgP(g*8*Z-8YPV7cJJzf<0ogSxpYzHChj?So`I2+0YsOaCf)@|N0Uy;b(F)bI5Jk>} zD&zYq>J-RA-~x3PFE+1^#x2htTQL8KoAR1r7%%Rr;FSf2KX~Pkld$>sz07zKBZYGB zJzn{KnH{-#w9@Z;f z^in|ZUd}_zHUldZTYgf&9!O(+r-09`R46lFE0n)Xc)}~cO;ErArfD*~9k+*m4t%4) z!FLr(gBjDTnl>`L6x;C1{KGt+gb%ADc!=C&7%&BhSBSR9YQ8;2eQQ+9@Z_4lYS{l< zh`aNT&ARWMr2BqZuC5KL2~Em3_WBqK0#X0YV0haMY;47bHUsc{mJT53G7-xj=dlymp*iU)Vr!U4ld#-JS$AoyZK7O>L@ zJe_x#Z|tgi@)u0*!XvO1VThTV?wgt|TIUO8zKl0JZV>aBRr+^RI3!jdsXslbdWmpz zak9F>ISn_}vkEu~vuex2`jasAXEr7*c6(8OX5)6n=M$Y9vUZLVRL@b}0gl<@7EBP# zr#ApR+5ZwmSL~#&+-E+>v2gmDsrN@YoiZQfh#4w6w@8x?a!}Gij@uP*Nag*H<})hI z;Lr%_Qz#wjNLV=u#`zSYeQ?&t=@GRGr{mVZc~3=fXhxDMv4s)NL5=!e0sGebzfyQy zg%=Jlgf>qODsc8Ng%XcniIaE`Xe&HdO-^W>KMwK?hc0&E!BD@Ghi>5L!?rC7)nz#C zunoe|%0V#Gen&(2wTeRCZ4IxC!%+$cqsM932K6<%gGyNSmI1Tf@nar%3Wsq8W4Jo% zEcX5t4n+q+#PDJEX&+B-(ZV3~7N4rC@lx<4_gfs6kyG-Hu@Z;wgV4&SEzrx z^T^=VM?3|446p?Y$FM}p)!jv1XHhR|+ivN9Ux>o()VSq&+!NbZof&5kB1AaX(OIN? zVoQEFBPhi}LZ9!;99H8uPht4BC*hJ;k;%g_&hn}PBkNcIDnrZ1g9yN>Vr6@>Cq=zB zA-@VF!(ET6i(!*2nrxC`8H<;~=664Ha9fExlg3AQ+~TO(y!ZVT?4|wBcFX@i*4_gw zimQDaceB~mjJku*g;VgYhtj)Ua|Lvib#{H2x9Lwc16W* zd}ckf=DW|#f||VV@BjP0>wjG-?94f5W==oPbKm!4Vcb&tTd-lcG8&^G zsTmEv%?87eS%H2fe_Cd0V`h!mpe8hkn}(~j7YwhCX>azW`;HZ2AtpHWEUa*NvSLj( zOu-_pbOmCC+~v@gCi0Lm#dtF*$?49C$(iB?>PU^#1a=N}{;^lEA(Yk_X+Dk|uu*$| z>IEmZg?ZU}COJ{(lOY*mGWAkCrJ#E2{VtEIH!fiGq}sFm=X9IpAJWv{tL&T^eTz}C zMJM96k!5k@9~p~xuQ(C8?^eXJgkr5Xj^DHL#2-5%;+GyQAa2+~1&3y^;)|yDE%s{8 zDzA`c1;pf8K2ruwA5sAG+Jv;_DNZL8_n(v%6eCTJ1UT5;&nkL*)<5Ou(x+yJaMv}y zrtm8X2d(1W!}r=Bb4hw|23s=rR4Mnu5R8M>8|+zX%O$P@B8}Z=E2p$9F_H#cm&UOI zI7Eq~w~$~uJn!t%aOWl1l{KH)r}nUonJKHO4OLCPGBez|5^jf{%f04Vw^Cs^^T)7) zCRS@^H&%!J;4DVgNbt#?W3@C1PoWb@LEKJ(I9^SyPZr2Gvgn^;}*DLP@IRvMNS|4jfyW$V^m=Uoonnuc$gO2$nJreLS%skAUnyhVReSt+GWY^2*cQ{=(TDT&UT=4_ZAVZC?WFSc%L)B15ER^Y%t zC^X35Rm|yi!P76TjmdY&c(?w};}-=jon)=sX5T=7bb~hU3Onc`-inM~xnZv>8%W0w>WXHd)^<>F6E!mPqhw?Ax;rLn zti60mGi?Cw4*u`O>=xFZTR5H44=mfnN|u+AW>P(#J`6|3#^_7A{cI}lXA87`)>t*8 zo3YO7eLy~LC}s{dX;LrA);`JU?D2W&^DBJaBa= zW)fhKI=ef!h#qr4#Cmh`;pqdMTlVf+xp(PjQjC+M$nfQ>sWzVJk5s`=Et(&KBn;AK?z^TwZQwBH> z8|yjR$2wuf@Fjjr3ba}kuqqbkvi{^M-zSfQcjL%2?)E{$%c#E+DekaQscxGH=rsG0 z)kc?bx>t>U#=!oOY6E>;q;59**_CZ!7bGe{MslT^l>bcg608*ahFMv4CbYjo`K*7< zmU?aRJr#L)8J4sdQ~1D{qlQk6*psm3)%o3#v(Q6vZTQk5tl%)_+!pg&O*$Q)apck8 z`O0%&Xxp%Sv9KN_87W5zl6H`bDQ$)S!ImzbJ<+#jdz-@3mL85>9Xeu`beJA+@gst9c#i%`$YPhI$G%7>r2PuvMO=?qqR#Z$t?bkC|cs)_?s8><gicEDc+2Q=A`*x8B>CJFd0kyK%o9TgQ=Ri$AZ^+zq`Po#c{MvB5=zjWKWwc8wZzw+k7?MLVP$2WIn7S>G4h|9W| zuszVLt7qqy?t$Bn;9Fy`kxw(MR8|{lxAKF;`qmS0CLX~mVx`+n75M>~I~V(!cj1Sd znI)$SgCf)}RhER!wj7(si-96?TWm@iH$d?6u*{eIsBCk8&Mu7GNJ_Lrj|S zbthqcvdPChth#B3tn&p}b>7tys8@o4uxwXPGtv=mC@DIE6>QV_pwBrfzKwo3d(vlL zJ6G0MElq#OH>kc8AMxnsp|zpDo}pFh4Vkny(rP&v{`!}oQ}Iep@Qz@oIm%mc-diEl z{xe4^iSw|>#YA02Lo12%fL9W$92TO&aaI=B?ZyAs9@{T<6S^rks04rG>v72X%&0_u93ySx%r5_aCbiI~%x?H zr+ruI(eMPPQ8ttKm-6)EQfU(S7yX7#vWoAhn=Jm-S{C2gO`n#csCvpa>5N%?&cFQ~ zjgl#e`pb$$10-+oNR%2H!04S0Fp4&>h?Ti5A;PS-0J7(V8Nj^(roE{W%~F0gT{PEM ze>PdP5^SAlifmtD{{S43mWUR?GW9E7jdZ<}u;#F7saZd= z;sE<&Om{L(bM^m2_Oikw-me`Qln=aT2V1d|`Bo5bsnK?4EzO&&69whR6qy}UU--yMK`8sx*Y@8&+_if>LU+V@f0}&o;Oq%It?X}gxoPUA zSvw9mCo(4q2A*Z6RpXWf403jG*oF*UykV5pa&5n$tU<*rw98ds7r?L8s2P9#S9Jj( z3k>sfCs6$_sDjJ}swa7}>H__Al_Qpc(818$uRg9KU`J}4E5lfz_=d=;nKc|D?13%6 zW(sAd^rm)B%5SG&hRC&j?4_C}YG|fDS4gCyu44AnUZ>d)R_v&nvcIL%l*zYb4E5SshIdsGByl|ZPEFv0DZjGc^lszP=({eNJH`z0 z8a38^glp$P?!&t{`$kNN9)(kUmX|4V+=}tToLlwpSFu0L^wv<|hEGmCNe$9pJ~=vR zpVtm+!xYoF)l-*8IPcsNkr`eO33Qb`aeR)lGxgkXV@0e5@LN^{(Dzb${6dQc@5A z!?9>lkus~P4#jiE<2h0KbF`GOXhegegM|Bd!ox^dRUO(~e$RQRRxzlvEFMO3yvB#B zGD?kBR@v%nv+*t}kGw&GI$qt2f`d?Sv|jKBbnzL%DEUY}WvL_e?tDD?k$gx$O5Mwu zSCq(rw(H6j!>+5A!bD)8ihwP~q^#WrDD2 zlQB^z>9!&=W1`-Oi8{)3a(>3DaOeNgN|b9;`X+kd_1V^dMtK_<7>>~SY70sQoz&cg zlbTrzb!QDB?^c^hvRd77Mel3e)O14pK+||HddYjy2M(O-1wgghN6%UCYHfj5(Ha?b zJa&eFt$#KSHlWvX8l%Hdvn&{fn$1SqTu<(4Z`nlt>Ux5ak}An8!Eqx*@H*nOk&?yi z*ZiT^UgM$J;A0-^C4{N3KIg4`6=kLv>Br$h4ZDMCO$F&EX|}v zX#~#sXNj5GuOCX*n-9BeY&^4M@$lx!IE7TL&PuQ!?=%6ScUUG(rq=Y6&zUwStWVQ| z4zm1hy*KxZXuG<2sAufdgOhiM6vrp_l_>w^%;%5q_5!=bb4=4#6=ck z{!=qGVUT6su7JjzeEU2aRUm*TzT?VYbD4L>8i@eK3O$OOTohHG;HQpEVVr_2wa&QDI zU)4B*;Hi2Gc>J1{GTm0zpyR;G1Y9;ZG%3H}2}M6u7$xiGInB%)2s3Xv7;oz-rKO8> zhtom0(df8l@B3{{R%n_Fm3oU2(DVNA%(_+TGWbN=;Dnt<;MUxypP$BU8Qz^WtIaA` z>D^=H{3%v$)*^IdZrPf}U#2~o1nOrihd;p# z>V@WZeSHQGoG0jXqET3XhRUJbAW!)-#alasIg`U${uWxGUGE`-J*kf1GkeN-(7-|R z-L`$l`AndPs|eiqehWtXp)yn=#s+N;QoP{rIzg2(w{V$&^f1kipWYm=wjfNiuSi{7+!!Fg`99-=y{&pUD+x0&X!Hx(T3CyBx+2eI?RutE9 z*zC}8P=B*0Rh0RPvaHrp$JP+EEVuP6JsSzCH80_9B>bkDz%sRDyr)#1 zCKxCTVk0GrZr>+&6zI6QeIMT;1Iby~wqyJGlU7Tep>pz95+d+@?9U{(C&J1V;qz8m zyL$N#8l=evP+xi5mdMn7*8Q7e0JQkpFM^lib*pjAW;YPjZJ)|$Z;uASOVw^Js6EuH zHH0Hgg|i5^0S~qlwG=cuNiPhE%l46jghovSJ`(!M;;ZH~JZ~u64G?^L)tA`{`<)Mh z_;SNbLA+A}G}f2Nn*^kM%zsin{-@4J8w$G3trf_(- zCZ+(qJ?itqNh`!iO2AUT$lSi~&_P}>>EUhARSCd=r7C*`r8ycvN;^S?AYweEL!9$Gww|0t#)FPct!9?nPcGUbvQM?Nn+R$(fEz9ocb{l25ZXrJ0XW1hu#n z8qdmi;@rJ1up~WZ-wjyp0gL~9{e>^2BVUe`fR+85gHz+{j=Dt8F)o@hrJT=7_p94I z*l1JhDO>%nx$N5lhRkA}A>#pt%u-kx*Tc+&DSscWG$s~JH=m;$R3K_~O&Tp@!^El?A0Q<^(r;%dY(BsdqlRQAs5iL4EM44ANk? z@I6Ufl0>|ww8e~2K6geKZy()Nz-jVLJWh(YyUXel^+g34D|LKZSs8|zy)Iv<`2kSr zORWU8g1rowPLC8uy#(wl=r&D|SvucIVB0oT0sy_;gGq@di0)56<`L&HP4G-}$~q}F zRO%H~e$h-3Z_OGq{)l;btj4;pZVoTAtT(1d7SV`hvaYOXauurSDmFay4(tlC4~wCp z68&XHP|)}ajApWwfT zGSbDMFy(MG4!U#iyxic*nH6y+Dzz&hhgEfH*kx=>FV`~@J$BV~Vg0+ZQ1*i>&J*mL zWVbhujvqP^g@a32kCh37U%4Ek0{V^{bcPvitm5G?wfj5i#~Dx5hqrfJpT(4A=9 zW!T<}R(elAO4yi_v@PZM3m3}2q$&GmtgB_;hF{>tTc3qC2*&YrjQxWf&T6$lf19M{ zA1!N+w3_!;1k+sj(i91+ZgK39C3{QyM&NnTvRd|A$_&gan?IF7_5@_V^@s2|FN9r? zxh^snz*JM$J{p-v(l3JI9}iEnI@$gl1$P8y3GU&#Nmx|+2ufLWpSt$O-onU+a&(G+ zkgZB8NEcw;7X(g%4rq28YPIkx1Q9IGT(IS#z{PsRSF>dC&eT4p@W+#{{AwN1klS$_ zq7EYmLDXSdFrLE?7Xd+vf0EP1^rX~t=_qjq%P$=Xi0Ea-F@uWDKb=ly=d95?+eBDf zMVQ=IOj;f7oW5t@jf|(D3jYrrIPq164Btoisc9$i^hW=BI((VYvyT9NaeZeDFcKrZ zWh|CDn*++M{g16mX3%2c;d{@p$aRT&RT*z{*{2 zN|k>t-p$?LXAt&3TeoE$x6-#OP957$KSQvoSe{_hSHyBl-=XqJ`BerQ=i8$5&2Spu z;!fj`8m4xA1`meb7dA-=SX|Cxv8FgrhhgaNe4%0a#tCAM()Vkt8EnAo?VJCS;XVrHA);_MP0ee&2S1ik8z2tKBB{Hk!yULa-+>suF zf?pkj>2WwODu);KezIKNetDEUirWV@aSpo14TPP@EC6a`ggI5`ANhuVW@-;c7no=N z&|PqNmT7vh?p!X937~_$CHCYu{{3x)CwW{|_nFU_-J zQE`J2PeUQuOt43udyBq9m1Jcd4$rgS$sC?!`xXoD?%W%(m^jDt8=jgm($N)-$^@8P zUxTRjnc%PZa?7Lx&45!_qO4e8dfEnK!v7A-kjwm6s=?}jGcz}G4#P`U=0?shj*?FN z>{_0mB{OMNvf;S0l;gn8Na}AK+@$;l@ZJf23okH|5$(^-XbRs%oom zqNW-zx`l>`g`vlj4?T|*rJLAMG*0H*3k^@LFY;QHjd~*s9Blg1P(}9i9f31GHR6 zeG&l|y@2DQ*J$AAgnS$w?ak5A0YFEm<)Z=rhDVFZ$>cXj15J~cz<>oWThp4dh&o{! zwR8&Px?C2u$I>91Z?J)dC~u8Qp*SGrez28{gH@aaRJYym`7exchzBLac-- zw9s_V9K;q$u@Iq1rg^46%zJ?9K4iueJqnXALlgKiq!l=^?MuLuY%0xmm;O?XJeESE$M=vLct-f`HoO3>Bh3 zQmv~mEKWb_OmdHOR-k4r|8Q$%b+tr4T+XEYcmEs#GnTt|_wuZ;OTGT_*tHG2Cq&pf zr5e`T3IplKF?=Cr*3tfy6MH+_o|+zL$k)x>+x;N-hGjadnQA+jYUppPXha8@Ax*3e zjmX!kLA6Y*Vp0M$h-_8!qU~r9by*ziM^FCPY*Ji#S(f{(W|H!2s^Nys$w+-MW0W!j zVv8Q4#+zQ6l@1?EnA)4ws`eby4724d6-cGf6vK%OY@LnN01M-Z$gTIIUE8eM?0wpW z49DoZH>XD&>(JTVyS1c4^hg8W#6SUpG zm-#yVWTI-?kK*QA48h zu0G98afVbOwqg0HjldIbQ^Gh1dZa{`U?>(?k!f8NPpYvzO?9T~rn2fpq+1hyR@rdY za9SB*RB8b8UDphN`z^S=?wanJVUfIRQp-=5AP>07w8i{{Enop`8>khQaeS&-7^L({ zqHiBe1+5o=$GzgSUj^~mP=UIsy>yiY@$Dx17KZ4E2iy?7if0<7?GL*pPY>RRIq_Ax z_!gPoB9l9NFSVYsKz zTn5&&X(=HNa$wjQIO)*gTS^yf4vJ&-!Q_V|^d1RNF8X@`lLo39-UYE;d= z0W0fTj{cNVX{Cwkn8h2pC}ZrCF}a+`!WPKJU2Y-j!!8a0^6T50xoPTDSnuumx(K<* zV+N0VEBxZNCB9A3G$8vSRcXA5!?bh>ul-mDDmP*iOA42mYdrsb#(r~vyb9?XD#3w>cxfSRwZ$xTTPpDjGe${9_SBnR7!_jzV)$ou7}yX`rea~b<8?`X|MzfXx3A1SxK zbkRTHF8W8UWi|HG(({7&SLUD6S+n@!72LUhWz_+4MAsX&+zm^kjj4p0EFnYbaLTAy zY^8xn4+mPQ^;lQc!yE#_P^Y1XSsC(np=I}I8%?91+TUVj%Cpkr!d++dHic91P0y|D z55PQ?(q`7yr(Shtbzu$XkQ0^O?P{3}A;_c@5JsF1pW1dx%vR!|KeG-qNR@3BS;=zE zS>dW#{%fFprm*iv45(YhnHf&DrQ)xt&^8ETCIJkZe_RD?m3bbqe>&e!xKn-OKDz|9q&;b)3^NzEP;xuhQCKLC*#o6k z^8Z@l25L`Hjv~+>Gftvu%wGdNz7#%TbJQ1u1mN9S6q{3r=R;@ZPYy>nY;6Ay_i!m* zyYvDFvTghlm4k!$RvHz9gSfL(imeU$d~4;5q@fD$o52WJ3F)76fZmZkS1IuuWu@s3 z-%Qjqi`TYMQAja}*`pZ5fmK}CjtgDPv)MUG%-&ALc)n4rn91^iEr_KFVK74$gcqtI z-I6xRzsQ@|cT$U)hr8$M;q~I0GCpoDZsQIlEOxbgXvdE^hJChz97p01AK`+u>iJJ) zI?4KN)D05g7-G{95R2`bwL64EftE28t%KGkX^ z)C^Cftx;usC)zSd749w2?CPbK%Q#vp}}7Os)1E=FSmmp zu=msvF}HCg1Rq_I+c|Ua(YMbEf2u+$A%~kX%5ZrUlpGIo8MeNgW=LJ#{SlJ@HjM3O z(ybJ7;1unpme4`dC4N|qyFIAzuU1xyeEnc1bpUy^l|jemWZAyM+7P0_w*Wmm5!fSF z2q*P098Fof()vfb>`T+!q?z_qA6a}(HI*BD#kk1J!uZ7@K6yJoF`o_UTdV(8ZGZb z6<&h%g_C>21?H;$UP|EC=-XeoOHngezElpvvW(sfgXNzvSiXe4GdHbnmBS3Csk{I~ zlE^3ceSEPDS}U+o_LY(t-I23~)aLd#tpucheLK&H*K!y9hiX}SlxD*liRa#;N!aEn z8|epGOn_}tycHm;&i43{LQ<*_jJf7a8f{B6yiqXMtWeAnbJ9d%`hG*QO%X}9C~qH&5-g?J=TAtdNfE+ z9w^AlK|z7Z9269k3{a3bs=0;>auxSCKl#W13*;w{Nk&C6%sH8CC#{y*RQq`e6f#aK zvudO=Q$2gV&s;K863{XSIS_B*KhZL*jM~pvc96~pHazaC7HO@_ZmQ#bWw6QCsD?T+ z{K*uEHSsogC?_acc&fSt7~?z-F<9U9Gu#@v%HJpE{4m08| z)Y<~{8=DI0X;2#Obxw90$D=B+A?g*tiFp369ll6C=&+P2yY7@(ffVkfVFFL#-iisyX_P=^!3%TCh=i-%ZNHms6U`w=a_M;X5-vkd#sOJ3+Glx zA%6Pg(RxUd#hJouPO4WWV0-G#^eCXU3Y(Y3m{=jR_|VN`<+1B0w_O1i@xt}V*i+*( zbkGfeQKW>z_W2x#68hp$qV`tT*AVJXOQNP)=nKt*ooracu~dA98z^1g9oT%#??Yz= zx>o)jT$|tP3}^YB>l`0;o7^D6PxYxl@Ayh}8jKCM&ccD>{?7bYQD!q?wNEZ3gm3xXuA%0&rmRC1XdCt@fbu=l1OaMXmTs zfsWc@^K2#zGz$t%q7fRaavd#(C;~{86V>mf2Z#p{imynZP*b*fRg$T)ITq}8E=@YZ zROd794|ursa1rDXIq-0o0ETAw?DhEz>x@kUD@*r`*Mg*#!YU7{;CPkKgibigF~fn= z>H8HR5a_Np_DHZhsgumt#EnWXBi-h0)3cAP7W~vwqMv1m@`C-zDt_wGO5hNL>g-w_ z?D%!Jz6b617ufhuJ#Z;AEQJm}qxAn2ZQ#EtXp)(xa0!!Vnz{f^W0d)fZUh@P0Zy^0 zXg_(G+CV>saPfhod}doI_hFlGyvoMG3x@m|pv3Tmtm`KiT-B0rm<2zcAn1W2d@Q_E zU{~#-fLh=z$J6LJd4d`An13%%aqH9XQl^Kn>ahmD;Px9Fj5=}q4Sz1|G%ICR7Bv5< z_;mcFZ#7gyIeLW8-(|N+v^kD*VgX247EF+KcnAmAU3<%$vUaWVZGLTIH9?(ZFUYTH zU6%7_pMB=fJ_djG8Thj|IDhupA-R^?yp#})5*GwJDU*P3pfLC=Le&LbF)G|~nEirT z+tfZn-@tkz_6~cT}zI{YpBu=*M%E-G@&oFZh2@N z?FkN$CSUe|TzZv2m9PNJ$EY5li7KCwHPZqV_W3G^6T6RkSsE)lRQ9bWAlaacaDE}* z>?jh`IM5*V;3@2-UeSS^w{gLQsqvHs59!N$oK9J$WKK5kr%Cr~U49#g z&FPsGj;U*lP$Hpk_H5YHy1V=P4g&VhclKnCy@Rv(6r9BkcO1pqA;PK(!K1q+&E zK52fi1NOOH>BM0R>JCZt&mz3;pq<^ukKU1y6TN)|bPwfr}<{B)4;9LVa$Z6MDHuFf*{gg&e1r}hJFcXZ` zrcp4br-HBZoeT+&I~aHTss;mbjmM3)ILtJ_g45U@!v`LwSY7*iD?fA9$5G2Q{*rK> zxuQ$P;ZmYfpCd{1p@%sdg_lys@WMB#NA=O?fPUz^xr^!4Ivpi>1M&-mDc28X#nq=k zhl0ipA7*V#W)7%G!P|WVdVn@RXE*Wtyv;d=1bB&33TR@*G%&`qkn>dP*!lPW4bQ<& zs-Lj@xMLFR56RCY!zJ|6g5V-IE-zmaR8hn<@f(5ToBwBMhcnTPh{eD?P2AsWqr{D``$AwRm=-eUu#iDt5VR|JG7 zi24jj&rNz;OM1li5lJ=qOg8KayxW1i2L0qfwr`K%r?(hCS|%uQlwVN6U*ofAAZ{QL z=#uj=1+C<$Vw#&oUcpY6fXjUkO^oJTQtGmKhF6&TVCR+x`(JpG7r-kSidJ(?PkEhH zH6I}_)Rs5%GO=mqX#4AL`5ezHRVMv0}?tH!OZsv9IKK*zhN&8 zW%dnxFU{?K*h}|O{|3Tj3J@j<4%BmqpaWZKjsaH3T>YUY8NT7#)qomykFI ziHot;64%`Rhn&E8GglhWfza_9^12&G-#7yZtzATMfOC9M{7}?06!if`HTq;7C9}eK z^T%J4{{Nv9%mo0xRth$;E9!I2?y&Ke4Be&dlhVEb2#T~Bz6+?qC7PtMVPP_rOf^ys zy81w1Z=lPxgc@)~p)*oHGc&haJ>+g;FSZPfO$&<;kEb9|LmM44KBH0+NSV_;O<-qQ z*xs446IFo%tr!zUr=>ZbfTV{XT@o`MRjow_8kHx>EKY>FEzlTT-}Yeg2|Zwt7zGMv zj8}J1I4$fz_-prgr(g;by@QiABIgF3$my*UIXC1IIrGG}MQ;!}_xFWmy9Pcbgw{(` zUC?7M1Ph_yM5p{aSc8RaiWLltlBfV^6*Fn0#A(+aOMTf7Ls^lEtq%EQUO#;LLhR^0 zJ%;;Dnm5myv2y#?7?*u9vw;5V$Xam0FxD1G)3kRC^8Q?IO^<`~|8e-Po5b99S6|956|bx)QuZX6vWNUy7kZafY=iR3OPXFIJlB1-$9B zLnLqHvfG2R@B6J24Qs@ljs0RWgu>9@T47roo+tC@~SP{K9luR?8UCTSe49`$G zcCQ}hz|D(?IhX|r zLI#ig24sUV9-Qg`hfw%Z!L=uBX6&m?G)J}P6zZPl-jlLd0GQ5=D+S9ex z9@F^$xwV(T|G-=O9><8F>)Qs95gKl`9>InOytV(Z>8;&1S9P8b{W#?(y|w3qywQfo zfcaLB0kejYj;Gtz!m*Su`cbUY)z2+7-8SF`Mi;*0 z(h({gXLyxD`IC%)Dy`26Y^hRNtGg$9-OaU4)a$O!ahPJBQ3F6>R${~350DqA3$7k| z_h>K3_Ujc`N3X!8u-kT0(s%{V$P1z~Zu>t54D|E0pgO!lD?2K5mR_Mn0c=9JDt*N4 zT7e*2BPWj4V+QJ#8Z_3^vkxlu04g;r2yaOv$a+qy&K&RehDLqO#6+C7Wf zJ*)WZwOg6j?(eAGi?-&D+VxiCU#sc2xRbTBSc!2A>mxfIaf$q5xb+AhM<` zo~tHX-p-VDG5%+~C8!;*nxrtAXBz-nM-E~7NAL#bZtvmUar7XzS7eOh0GeJ-x89S&Fl}kQxeqkkED1A#uH&z) z4CgNvjh7CoCZ9lz3HTRk3*uoaCFrYTG*uMt&6Klv-*BQ$Y1Cf(l6;Rr+|0-J+xz34 z^6@N*VaTITk+@J%NbV~rKWUE`ohs(w0q?8HXY5^H$dCF8m-L>7(z>M@AIofqy{{CW zss}dE;}ty;_G*)1uwZ%9S2zhl1?rO`ehP!Af;|kX3ZKH(^S?0nehQ;!d#Xoy>s`$b7Q=Gg)>G$PSz0XJlQsRJ z2ECAv#tM2xQ3e*`Wbq|FwNOhP z%pOYwTEp(05w2aIJbh?8FNL(8p`R z`yaI++BeWb^&33R-kpDfeS`i9{QYsIpm1S;KsOV4Ihp!omxOOum>%TsioMJBv8L0A zmlGchlt?~mq*WO6G;{6PQV2z1N>nqYyd`Urwn=##hFwaF0l85`@~SO$84t~Jh&l^_ zW4(q=ShWqYtitvu3z4g|)hyYub8$31$gBC2a-05~y_*!CJdN7PyK{Fg{q>#81%2ld z?}&r=8{!~h3o~*m-@?%T>G2^!v?I<*+*iBxePS~jSf{7Q9~*5qwtPiw)I#eF$! zg4E_f;ITzQ#;(pn_RSayM-(}fN_972a4eD}tM4*PR4h$Mu9E+ovO76=Q<8Xw%xDo_!gTUH# zKmp*1_9(54v`pzv#RP=C&6aj}Ar5!#6^X0?HSzJK@(c$V67s0{hep>#GI!nMZX2L19%6 zMzWv4#~MOaM;*cYG&CXe{9wZoo_T|^Trb&|RoWMr0oOoZjJD6<*Cw8KPn2N z0^Ut~Bt>YCq`KIyjsUl|m>~gg2pPcT_%I7QuXKYr^gDciE&OWh_;m!o?iEc&d|pi+ znu0@j6GD_8-EGLQbvDw2P>G7a$)Il@xsF+Hs?ex%H};)NhjtOMLtKy129vVUylB^g z9owC$UQPNIhnEGc6&NDHtX2-gX3km~1mB}H)fAO}X5%H7i|G>vN4xfCQ%#nO;Z&pl z(T7L-CsJ0DlX4@zPHc6UD-}7A1mr=iGp2uNg_EV zQjsKs;t984PSJa27DY=Sx@)F#7wV9v5pm21XtiYuYjSaIRQWFvOZNsDrT0 zW-=;Q=&f{_-m2TaZl3GS79jv_c$(poGRsJ1iqgAzNDBu| zAGWyf1-6frzTUK#*^aekOXiy_2}t=n3cX10q?YV0z5RXpF}8H>{c}niviV1&WTk%V zR9Iy#X?Q#@Q<;NJJbU|lbM_XpiYc@txfShWw!~<*mux-H(URYxvh#k3ZG+*gEy>8k z7&CWB$P}k8Wn@s<-VaH)RZ2IU&9t?u3~Tx0A?b61Y^~FW2RmhE*qWXYJ#4jYuF}3# zlUQc(dXE*o=TGZiO!PQ1_fXirkOJxlwWGASf5gD;zKK!A#_yhTaCUToeh_!f0OM}M zk!=V1ZYmbwIj-N--UX!GCe( zmGKJrB1ZgthJU}Nj-XsnN8+#Z8-G`YZX73yH00sl^Qa<7Qj{0P-GffI$W`>dTZpWKLmNr1M2wW-t3P@oH!QP91|Qv2*?({HC@-!a*Cz=u|{&TU6MTa`KD$iA3YP}8`-a8?*Z+tu?xUo+qr*R zM97%I{sF$DC#{1#9aw#dti^ycbW)U1?D(OI^|C^tG-+9p_sVT#~|Ye;K6(zY{;*5fWO z)&aEEZqs(eIGe6LuA*%7t|MrXmvJG3`EA4n?GcHB_J9p1Z97rKhW~qXuH);&1oCuz z{qM}LllD9SK65WB-psGAXrQQeTJB*G>5&TqX2cjc`|ffF943XU5`1Lt_KYR-b?(GW!Wu0Hj7E! zs7`&L6~sei<+WcJ^Q(cY)K4aGVA^NW9@NdQ-w|;l7kZbA|FdSz0PIhz+&QWAI+Yh; zTYr*vAwvT5n}aXorR+S(OW6nYfxB@MGq|U{0%;O~JcB4dxeKmpD%H!2CQLsHTHs*X zS(HiX)v4;fO$(N6x1OM$!ZA#?wVbJF*GG^7JJc3}pB)jrQ15;~+v#0xNfsSOM+-wo z+s*udxVsYu$la^3Kk|Cj@E}`N^ef&ml^=L)HKhpGL$42#Xc!$}9uj_Z#P`<`;Eu?x z6s3sLW&|$k9TUNVc@t6m3ELm|)YLzuJ1D-KaNJfjuW1!Xg8;wv<>kM>8R3X0sPsZ* zxS_4On}mPh7vS-;j0QtqFA(62Rxp`D#H+SWdj z?Ng~2PuA|geN_)UAp=2r0bf_|3xH4CytWIr`KWlV{;uBm4Vf3}&#+bfrvkkF`)j=L zH2uD^_#|nkqQ)kAgCEGOm9mDX(TxDgMYIj=E4@ z@f2D-UwbR6$ZwSu42p@5N~3a?I%d$t6{t<-7z_K=OkyNQtVGSxAcnGE+~IfVOjO$b&4Oa;0x@`jshtI zP9GgpDw1MxS%moM1wU=WDenqH1$ z7$9uq_+H_V))?Sqo5x3kKfsXNfb<$b-yk_yMm(@{f2?2r7!*EO8jJ zu0&P@PQmjW<3&p~O+Xq1S{{!Sdyry0m9XEbD4*spi?5+dNdJ#Ouwu3&6fBRUQ52_q z{<4WEr#q`lb)D$VNpUPn+lA7`($DsapsP?3S@Z=JMI0L?W1u-=E|-*_+3$3cTL>j( zI%B^B@<9^{bmMCqUT8Fmh(r;iX`KD>U|8m4q{6!aW732sAXTxiQ?;_+*&|QojSwg} zLPqx+Bdpe5AK&dPi#xsq{iBfJ9(>8tGU%0qw?Sa!5i;daA(?)%7p@>j@#=B1ojUoS zB2m+i_B-Sz18S%TF18|Y@mRGyMoS@H3PMan(9&KgOTh5Zib+CPiW0d2txt^+c8k(ec0w87&> z?x?wQd5?(9jhQW;qbbZCq6^w1u=F_5#}j%L>ve^9sbV)v;^;d9^%r>iiF(J;d9^Xj&YLP z{PZ`4NSQDR3@}lYc@>mVkDK#G4Oc?#uf?t3j=1#}EF;>$xmJQ}i-qKF{$d<^zbFhH z$9m#eO}@`UP;bRkX&`A)KFVeBC?6OxmoQ@d^$~*_{3@0*!gcU5W3Zh$$@7-RV>%0e z(Iy&0MZB8{SX>3Lx%U+-XgVWs}C}+KA}at4wrTqt7~5UU((y?5g`h z7c*Kzd97X3^oMX^VcuITBbc|e*d$wB!AZiH(msV__Ro=J0hMAGxn^8-dP7_2ovEdn z&1W~+w{y?aZO$9g*Q4A@@Zpt^kH*P(1lFV6K11oa4(>6J%eqsG%X;g-1TNQOpyaY} zuwLbsT$Dm;$XKK(M_X^u77dlo6=bYTr?lFuM7tD@CmRMC?U2C%R z*U&EB6bPMCWe@bnbj4**b`DW@Tm!i5kov2gOP`K|VBMh-!V6`nbj~d9=0cT+s4<6} zYnUo6Y%-(?0ond5Oj(v!6c=v}qY5B|hM}-`Vd_YGpBXTDo#LfD597t)KG0jbMi)T0 z4G}&H!Uo;VTu2Mb6uB@~E*l7t>JVsILO5{9C*$vc&TxF)SI>u(<8x(&M)$Sv?I+1vA`zhz6qjz@p=!B3cGy6lscj?~!D?`T)^70=R zU{y0|G*5X- ze-jPHR_xHaExV35Cyd=-YXS8#IZhAog5ySuMi)|EruNayfbp zZS&w5{RrIfBV`Px2f5La!DsKqUc8|wZb5`~UgY|{d)7?}^qT0=dsy&BNL|o-B`{65irOG-&PIbyRm1#iFl){tk|$6{ zI$~0{vUXn<#~Z9^A{B~#1sCqE6BCcW&Gb7C!0^InZtcS32!(6z}w z6JG1(GWDn|@eXVc``m+h_tgT={kzM<(d~&voma-VWTj}X^_zP5=D-B5)sfzXshalU zKcAp!c=0|}CG=FPs=-44YkzhWp!Z!zH4ow)m}a1iK`W*IvHzlfTaV58AG++2bj3Z5 zD(AiPlXgLtxw2u*CS@N0T&u~osDQfVyxBljzvo%BtCGe1Iao6|XTEiYN zQ%gkD%szW1;hpov-ci3aD;cDBq}LH=vJOpjZ`!g)M-Qu|MHtlUXkj8XPIjW_$H!wY z^iG)}&4DP&^EEf2q<&`qMECAJ2eiDnm)4Dr1>O8o{@7Bf@Be-JK zBu%mEZO|?H`QAw?km0k_dpWWvtvoH7 zcj>#k?G84n-*s5HHG%4zEWN^x()dKGaMTcgjMifr9RRT#9zeD^g8cZmWdjhgvS4}} zDnRn3oY(hz9;)4`M{ux*l}hir81up<^*Xe%SPmO2h2M_6b>iT}uB`^PD#r|C|9rO& zEm{SVD2BtzcSfZamtJ}VZ^T~nuM=6S+9-NFRMxwjEIxPv4|olZI_*ebltz=%$ERUp z9Ug`_eRnhdIy+?Jpa{f$yRhZR!PCyyI~**<3fJvdxzE;-Q3&kzzSanDk9N-0Z}_~2 zE*IjsWyT)7u-5w296N1KP#@<;?T1%u-fQ!5OvV}Xt8^iK+k?wTCidy=GqU|eYc=!0 zRTCnPK+rQRk;*61_@jo*3|fE8n3yb0fsWCYDVX!1>q=!v=ysmvXVzAg%howI_+D1} zhKM*TD;?0qtAb1KCM&~TFVZ^cQp|9%mCIAuv21;j(GfOu`1)jnBC*K*kgpQIZTH1FpIYW znKSk?z-brNN~GQbje$M7OBOLaX&>t|3k7tLFXBmf?Ia#RRWajE(i#adQ>mIz$vfOi zmG=K8BckdWhp~5jkiybqPb-=#c;I zy^T+2it?<9ieT@nZ?)Xb7O`# za&G9^lvVuQTI2T`TOlfI^Y+lJr=mBW&{nA^(RqLq9S!BZot(kr25q~#IfjN|^E;3Y zMZpS=+&_-l@z3acN_59rp}PeI;jSj%?Ag*T7oT z4lgoNP~7!Mx&ON-iBkaX*ah-F8odzAF2i9rJPWhSM3{K^s1gHUJX#CmQ2>>-yJBz^ zLaRECrm(2ZWS7yhJmc6td|>g6wsj}Juo!-8zk}hW7kwFKLEIn8V-$b37#6Uf#t0jW z0X81vtB{9gZxFppaEqPM-v3Q*Zj2^3n(1T<$@(I**?tBsq8ERW7yo})dlUF5iuC`# zdL}a@>0A(k5KKb2?|>X4vLY&ooCf$ZB>Z+(H2q+#bo(PI^h^UB&2nuq`5sq*Z zNFanHlXG%klaQWCXVU+7^-KVF-QDl^_y49}pH$D)UG>y+)l*MZ>l3sIEi^-RPvnc# z{YUElqSn2kLAxd<@(IK$@{u&pWXxYC`^4(14q$LNUy>ieT47$JiyUh6 z6gwm<1j#Z9UB$I~XzxSfB1l~IM-sa`y9E-VDLni|W6CrHPJhjeeRb0oMq%2XE7Yc3 z(4L4P0%+67JYj={V0$mUaQj=fg%`A&gS+rp(lAfRn=w9;%Z9M|7a|ez$>q4wTiSy!y;!a?JGW@WE}1b%NzU-M+> zKe=q=EcbQVJeYf-CT5=0-pE+E$oZe+Rd# z)s=0AE6JWHIZ&*HlF(i`o-xYDc^F zj!!#U*k)?R@mFca#S8bbXWISvS^J{&yUfSdjxz&*_uARp#U&rA z_J$t2>VDSWH6ve#hk`$WQ?|+fP;k~7xkt#nf8A@xQyb47Ff|vBXo1mHBX;QaeqEl& zFXM?eMc-r=?0$Y^zuQOa_8#m*_foJs;rML%Z1CUTAmHw=f2@_dRsFYtp^J9 z@MQ&>(4;`|aZH^&^|;i@kNrH^r;~qc(#i6n;kuAd4PQJpX0`j}$iJ@EqNB7_$x@%f zQj1wndIvLa+j)Grm5t(|B%pFGfCNJZjsb4IgT6 z$4u<0hjhF5fEEf3K8bO;pRu~n%4d$V&*em$+k$p(xVAw)bG*Adle^3aUWTmKF1rx3 z_;10PK25sqNbuk(KWF1~6>6s|m7H9b2f6#p=gDPMH(3j;%+9f%b$8twqqoxb zB(jYqPlu0UfH^1Tly-Qpk}P)tP1hQ(-UXCrWb%RB1@r_TT-gP5n;v3%w4d#s@wN8e zzPq(sTDYg5eBngoboWqd-rXMg_;>iUlkAbx|BjE_Meg;})mCYbTqj@d=WY3MnLYAL z`8v_g6YFeRt5rt}YNO9Q^wWc1#zx*<0IJV_XirS;Gkn3i9hxREC#*3_2%`p9s56$yENG~?=gFks>-X^xa9KYMOTN};LA>hdU zyYW@~xkp5ew$HtvVB|Y9-+lF+SKoX6z1J7a3LGmF>yFvkG_C8ayArg7wnxt_S+XmR z2cEt;W%!#D+Um{!c1#QZGEUoTX4@s&7w`CJ<;N>OUeQL|Z|6a#`d%b$UD7_SMcaL; z^WOS3j%RN!et6_(BilyS>NgC&RUh<7T-e5Wd$i%ZwdT9ETlOfI4r%)iTHOcSvGPHv zqwPz+U$lO0blDxh^z1*_KN8CO>U{EVFWoU?{^N809xHS2?zcUz-^vE9^Iv%T>6fBA zADQAjrP<~F6Ff;(51cuE)FVHfS@rR{Mc>3~6|zWN!lQWe4FWU z-RA3J5-3`_YgqK7^;-VQ4X?$GB1)Ucu3Ra$s#Vi|)`zzp+VE9W=a;uXp$%)R+3Z?7 zoL-icMm5yfSjyJz<*zcA^Qh|mG7Rw+G3LoEeUPbgNz%W&S6is>(-&@hM0-}d&t^n0}TCqKf2q(^r7z}E1-{f+T9 z_xtwj4|r_x&9<=lJOi8?e9aBMMg`;FEM&{tg-`5clsalvAy;NffV;ffN$;SIYP$X@ zdHn!)UX;F9e_y*te}DTXy|Xr|c7eR~(!=sLeHZYs`dj$HW-aBAlI(fi>RwzOrR}3a zwBdnAsO|_`!xwhaS#N$~JJ(q#ue0MiD&hWgh{Nmnb{Y9G*rQOSy z_Gt?r-^QSK>~U?yarTLh)^FavkxRZWtMc=M%;Jn4tuG_qsYh!=ZDDgibHDewcIW3S zme}>TKWjE`iTk}J+Jq%vEeX`;FA0iWHR&@WBxqrXdN4Ri-SbIE$e|BHLaz-t)Y82( zDk)MKY!QkG5@8}zTqD|wc+o|47X!sDVzjtZ+%2Yv$HnvFWieCC67PwR#pmKH@vYb; z4v1uNPUMOT;SyfOrbH^OmG(*(rKfVea-%X_8KX>4rYO^tr<9kJx0DZ+#mXjSt8zd& zp`ithv@| zYhysOfcSu(0fPcY1>6}hCE%HWnE`JHEC^T`@JqmZKCZV+jQFu+g#g1+hW_dw#~NRZArG{wsW>@Td}RuR%i3tZT3)mls(4Y$==I8 z!2TEeaQj&Mre@*IhBjN;Y-_Uv&5k!qYgQN7H*jp=OMyQGZVN03EDh9xLW9}|4Gg+5 zXk^gLpp`-Ef(`|p56TEC4XO;b2M-7yA3Qtw%i!;We-7RoT%rc49n}HqL+ZQg`|1{T zyLwPfRVza5A)z7dLVARZ37H)7M9A|YFNe$xc{gN5$oC<;LXL%`gye)&gfxcQL*qiP z3%xaTYUqs6`JrEit_$58dL%S8v^2CfEGR5CtZ&$`uyJ7zhdmoMFYF&-E5g=?Z4WyT zb~-FGtRl<^w}-b1?;PGg{MPUZ;nTvO4u3BEmGHO2-w*#Xd}a8z;hVyL4?h;37G4nU z3U^0XBbr6Dh-eehDWY%0Un1^^xI1E6#NQ%jM!X&INyLhX?<0PW*b#9s;&jBt2xmlf zL__mt&092&Y2LMYzve^k3ywS7>hCeC+$$tZu4WHgwJ1iNJ3Cl?Q|`N_%G{#q>R>*5 zA?8dBTM}sY81x1mv4 zhO&=mQ=i_i&XfDnt8WH}jVCq4e3GR32u{^}ru|{7dAm6;tL9A4q(@czoQXEo9JY{x zrEh0T;XAecaSdbLFTc!f*m{x8KGdsoHB^~BshZCX{h8-neHy3g^LM)~gkAPLvRj?^ zd$8)zuaDE8vfnf}Cd~8v4KWkB0Gf||5dA|K)pO$y!74jalxeNyjudZd9fMWvvzS=* z;^yaWAMr#_nU%e2Zm=pRP+r^Pp7e@JIx3rLsCqXh)>N5p`ZUi`P_^kKys1suf%4g3 z+kDUd`eRBHB@NhXS8uVY$|oPmxgk|CcMh z+4$7pj`!hHcZmyQJ^3D<9-z*N$xLTM0sq4$Zy5T$)*@Dos$F~VL}}ZDYhRo)c*JZy zY(bpL{?>QeXANZnUp4ngQ9YG=W7M`etaSf6ZlZni>_^nOzXrEZ$xa{@MU|8L_nDLX zYnj|vNmL)sHo|ICwt}iHh&gIk4RPaKp&d8Gz_~)5n;O$Xo$DXcweYcw?@_brjOi1e zkPEm}|9*xliCOFskYrcQ?Q__XM#Ur_+OMb#)(307Rry%4zwS{N`nG&j_nT>+`(gWx zMD6q|y!L0Is!{*4ht-jo*dJnI)3s}#4Cd-n6Eza6&3%T3v!+q+OR;Ym_2w6GrS{MF=$+oRsqn+2kF$v|>|6Y7 zjfQTJd-_g7kI5NWHhh!nWe@7*%4#ihfwB6kZ|(T2pT_W{lLr z__64jpS-bTUaTsgw()ZJWz)2odC*wyr*bAnU08Fb{HxfdM-cjsi4(Lg=2LY2+Qdxj zQsqW;rh1H{>%a9sJPREaHP&wK0;Q7nHQxSeKW36uk}j5I@(AXz@i}b^uG&3QWd!(M zRD8pGR4SQWv3)vJZUU%kgFf5CGa7ETshbgM<__hQXa~Ex|0%Y5+OHkmPh~VS30Box z=+D@~%vFE3Fx$eu`nA{jsiUgwdLS2ftM(;3ZPZe>04`juY7>s|{9K{#v^`^ASzv>Y zKi;Pu*stmf%vhf)7i53EVw)--W%Ko6EXKYUU;dh{827hu&o~~rR2xI$RRXHlFbH&I`Cyx6T?~Hq3VTf$#r5H9B%>!d(w`nm7!BiyS0(hg`bw?7U-ISH~%> z&7Qw+9J4F7*O`yL)}GUD{<;=^T;+J>=V9MCzFD_sMed^YA0J+{etFvZt<@hd-qTud z{m%HQ&+B3HAAft?{HN!PfBeb8ug;s?`pk^g)8~wT``K5fy!9ySv|iBFP2;pS?|inW zb?1*~Z(V+#^<0ZKeYs`HuYqBQSQxU{wlwME-xfwMOfNmN`@84vdwkA)^Ph^nTmKaL z%TGVu^!c9OqR&0Cb8xJ>aKHB5K5f~4#hu8|KZ5;(hwG$uK26Rq$ zeIv7&50S-u(4WOTR%S8(GTh8!KK2&tRQH(~(Sc+{>z1jBm9b$T#vGMFK&w04jB{x5 z!T#7r?--w<{;!ctHOkycVlz8Q`1TH9BZ)6AZzLhNoR}iFoOp~aCt~-!t349KUJ@+8 z=_sEO9b`Vt_zCQ@+}L67T-HRc+az~$c;n^2$u*HY!%MD-+^}rR&P_3ozRps}cGbOI zJ}gLa$Oqb59iInp{YX9r=$G$T@))3}o__4PSLI`X*mkjL(?vC%wOK_eziYN4U$Cp+ zjMxtLyH-B&ZDMp78(7Otr7v$_t*#EP3|0?DEklE|y$$lWj@Aj**Rh}OEiWsBk616Z zn!3n#%LJa`^L}vH!hP=DdzDw+53m?RjxGc2`kn^;%?EAnN%qCe?l)f&rLA!9wtZ*+ zp<%ZztZC2fZss<_BlXiV@N|l_CzPCN6j(%>s0IF_bmu3A+( zQ$9oE+t@*0+s3W<`|8B#^IJ2ti1S)A2F~QBk%g$T_r!NBYK~)3NU&NNtO<9&D3yJQ z{;(UQ8kOQpPYU#}czIdk1iN4dY@U*-0Ot6qm_)E*0W@m|u`ye)KTg(^1>dp6!d1^@Xfsdm0ZC#iAd+aCgEq!nGJ2|hlJ~Vgj><6N6p7f9& z-RaS955%ggs__-%wnXev%eF)+8@&#TVzE@@OWKeaBYQH`iPrbi4WB zD4(QlZToZ6mMuuvmv20;F413On@BZk@b0Np|0c&#E#%abYx{kP-McfYp;eC<4cp2b z$#YC*v1;+JYt1)5_hy>U@iW)`unCart=2l? zoLc=JBztg|l9;W^U3$$RvJ3;J6GWELKb5DO4~=1gM;vZrUJ4U5`sCa71^VMYw=wLW zHUzOUM8Aebq-LGXEq}GUdBF;(H0i+<;lcQ#*OSwUUdsrg%2sTXwE;9dNn-=h3w0%l z%O4%vd5Zp&-szrkUl7KQx@xtz+`4AhZ^3dI_b)8te(r?_pOVYCRrfIMnC4;PX1hK` zo51|gEqao!H`vsFx80WNQFkhtav_-^pPL!xe-O`gJTXH)h$lgR$+p{$57)!DJeNhZ zuWY359as0)3Ec*E8o2B6)ETk)f43c(smfI8ckwQ~OLXo5OeYo*>bGoRSDdvgR2fZ&BZFja;h9qC?KAq?`rFmx3?a|OnEEHo zKT+U* zbYDJAdlg4?d*P`AzIb`RL8|sxluY*=XYbhXipom9DfV0DZXKW9wt(@td{o@$@;Q(; z)jL++%bXLUi8nHqm>e87Bep%Z7JXb94<}czENtAbF|R)%5&L4v zxm#;bGJ=}4GD+KYW`^c%T*v-tVEWYzE zU#NQIz^PAvcQ!Um@TY(fdBUGXSe4t9;lg5h#PY7NTIwuyyyyE)usEu;7na*bjF}|D zo|*R2vm#mq$R8Pod5sZ59X5G*J2CFoVUya4dv2Y;{|9dyes??Z_~>Di+lgn#jvv!b zygY8qZSBMxca9m|PP{W={MdHl!%6b{pG}&;J1hNHqfX{kxwlzb{U!G^U)%hp-Cs8I zmx2B=$X^EgOVwY7h|s4Wd*NAe=l|7zlV*}W7Gb}A4gUi{@Q|B?qF7Ao%t~0KG$?D8 z4N8OM9$S^IvFCC7-d-b{S$gFLzZ#sSJ`>U+^wF^E!ctoFj_lv^jh64VT-0(~%l$3$ zTaOzM&~|a`hV~uX=XRLd;o%NXc6gTKy$*{yweGQ!BfICgp2vOvdkyS0vez%YGJ56q zzNL3}j$3+PYnJ^v8`FDz?|XVb$^X}Szt8a{XFC!)_D<@3E}>QL{N8oF>k&?CNXpo6*%y=uF)Bd7{ZPIJ%10Il3v`l)j?7(qHK>`Y8jI>qUP>v&4yk zmLZlQ;vvg0%P{d*%W%s$G0k$102O)JsN$Q4n>Y4MPeBVISQieE*z*bEi67_}mYvdnNR-x>wVuOdv@EFzR`qN}n) zgjARW(w$+DWeVyS2HIY>ni-mPVOya^-RnWVl7BQ76I-hX|)^&U;aOdW}&c z+88d;iSur}*BA5yw;BcFHZTHkburS&7k3#IVgi`R`6SA_dH){DdkuC*<@)y<#bPqG zpJL>R2WZVheEuSzzr(dZ;`2|q?jrChSPYhc&%sxGZx#3&tOnlzS}MK+YrywlE%*Vf z13yy#^^`wRj}72wun}yAOSW*o-@sO0Zv)%G4zLsK2ES9sJzy``2li9X1K<$XI}DD1 zqu@9=0Zvl)Qr%H`#dh3!Xhc1=Wr5d>StcLH@ zQeL90qtqxpe5M00-!%+PQGk`6wi(4rGY|w+5NhNp;YO~~p0Xq847&2Vo8eHpgI-3R z(g*YhcNk^LC@>ywxtr_VYm_VZf&0N^Fa^9K!j+knuYuRWEHE3q0p@@Y4Uh6Uzh4Tz z0AGS-TzduONHW9BJfNPVC3grkm z3XX#l;3PN=lEE3#Tscdb!ZlLCIRK57Gyt8IbUwQXGC(G92%C~k`*J`o$OHLCjZy&p zoS+aCfnrb!%BWvCr~s9q3RD|8iVHf{0F8FL`Mn3!106H~FK7e?aw~vh%5gSwT!I{D zBgZ9{Dx<(sZRA^AMunx8@{%c$`ADP_i7c>27#dQUZ*5_?k<4NwvmDJ93?~gWs>C!n zrVsi=%Bqf>E<;Y8$mud<)G0ckS9T^_KI1&KO4LO=770i9(WVH1?C(3 z#oIt?k}cfnAnzrCV@5iBF6vSot1*lNt3j{Tpx0{9Yc=q0 z9=w}}Zqw0iI=W3qx9R9M9o?p*+jR6=3VJOCy_SMrOF^&Yqt{ZUKrOV>kjo)P5qc;EJ(P+LN<{~y z;1#5zgEEmaCsLM=oF<}+vd~2-=%EYfp)Aox+=%rVO7BfJ>XC#-q@W%-tryFAe?R2` zqn;jXRKn1(;hdw*lxvJMdaRKiYox~-l`g#3mCqJaE&74y$+xg=)!wl z`D_8-{RdbG-UlCmPmNk?lS6HCloDQ7^F0@+;riXsRT{OqB-)`>2SSBGXqX##eWP)K z8l^)Irx=E2kTiJ!e{UMvVL6}e=llTH(PCs#yGzvW0=4r{y9?Cr47IyN?JiNfOVsWH zwewKBENYiU?Xsv{7PZTwc9qob0=2t9?Xvvz@=!Yu^r}F+mWxUFmx;p89Rn$4jaB0q z+VvbYcZg`S_L*V;bR38t8idT=0R3(>_R)eJv>->^L0j)Ld$xj}y+lhYXi2_!hL$~# z4tRxDF6aCEdH(=t;98B)RRD`|0AEC>l{xgjZ0SB)T0u+q(bChjGzSilt<8Z8WQ%j) z1lj6+w7Np+VI0E;KC1MlOrRV9C9bEujXoF-=5vp?!8_nxuz>sh11tpZgAc%`$l+qH zw*-98Z}O>60dRssPy~uW3EwTH#Mh#aE1+TpR4jvvWtMxfS9M0C^>*mj59-xHxkjvr zq*^1?s)JH4`nrI=c0naKRB}Nj4;H|S1@K}4yjTD)7Ql-I@L~bHSO71StAlbbDCa`c zdeN|6G^?asBNTH(u{tQ`f?{lLU?bQ>oqqwpg3Z7; zLUCZp9awS)mfV3QcVNjKSn^6Nc_o&-5=&m$q;KG_WGs0WmOKkSOU9CCiKE~c=f^2e zfKwnDoCT@iJlDGbE`m(pfQC8TKMypGOlo-l641bv(MTnhyAsP?iRG@ua#v!xE3w>_ za7=@#?^?heEkP@A4HDj-_d9~lKcX$Mx?@vkEfzMl;(azHM~17)BbRDeoQ1*)Ni3tFJlvCV!Z=D8IRjK8jM3` zhG7rtko_7gScPAkr6K<%*Z>zg;5;@U6+KXZL=_?t8WQ0}8l)r?{tqE<<P{{44kQ)kRLLm=& z!Gm7#pcg#o1rK_`gI@5U7d+_xQ&7kah2+S}gG_pmMGqFV9t&EJ1+7QJo`hOeerlb9 zT5hOyN@)&XM1m-A4fa2t@AxQJ<)>VgpK_<5oEyrOLOBnz<3Vof@Nny}p7mJIdaP$X z*0Ub#c@m1AgrX;*=t(Gg5{ec;(Nj?Ll=2z(D&f6quIB^3k0F20>|B;{R5!2~do^GTF<^Zq@Q_jBFJjE1IAw+HC|htP3PbKhsdi+s+=fIimg zW1T+M>0_Nf*6CxNKGqrGl`+CAV}zGO1goA=UJj$Y97cILjPi0A<>fHS%fUtzVIzvL z5k=UDB5XtvHlhd{QG|^s!bTKfBZ{yQMc9ZUY(yb8q7WNVh>a-3Mih!oX1p&>Y=Ppx zQMawUw+(CuJHSq`8~je2_JF-$AJ|X34uFHy_Yl`U43aoMLU|M%QoI}yw9kEQC|*rqmWTw z4z{BZ+fl=)uLgTjioGbsUX)@lO5y!{_+F0g^5N}#_&Oh+F2Ft{E8W2eIE07-BfA_% zb~)IFBBEAhjP7z6-Q_U4%VBhv!{{!DsMR%$>~fUX!0TWZm<`?lbHIm2HKV&C>`4*! zqzHRbggq(5o)ltFim)d|*pnjcNg?*6kcd?kHl>hgRd=FQ-LM-TA|8E-R<%$Li%{%F z4WqjnMt3!g?rIp_)iAoNVRTo+=&pu{RU7O^4Wqk4>_#DWqY%4Mh}|f}ZWLlSY8c(s zFuJQ@bXP;fs=1PnRxE=q<)8vof+|qWsLlmlY8csR*n}bYc%zM6Y(xc8mWz$3z&;dV z9}2M#HQ0tiY(o(vydp+;WsK}98Pz!%)m1a9VjfYF6w9!+HFLM2o zmW-rjAZf{BK5@{uflqQYBqtroNk?+hk(_iSCmqR27fbo=7vM{<3@qoqUvbS<;A^lN zd;`7(-+?vYd$1P#0M>!^)a{?8X$uv8{Zf)Hr38zxOR>_^0YFNMol;6mAf=R;U`i=9A=toB zBLf?|6X{9DYV5>HoJWc>u&?Klqzvrqd88==`??c}N@iSDz__a5DoH9+CULz#lcbq= zX0L(Q0dYj6C><$EM~c$10lTmyyRam?uq3;%B)gETT;(J1G57>50-qZDu`WBYE<2IB zGNi5ysVhV3%8Ei9}W)MJ}XB z6Niu@CsMQx30jW?{etxDM0$>4la67Nl8~Mxq~|cwa|G#0^h?iSBqtZi$@Pz6a*>=& zq^2CH$wX>${Zf;Ueab>=WaKdmX*q_ZBq1qDNJXO z=OWUQiM`3h-eh8LGO;(A*qco3O+NM}AA6IJy~)SkWFakCNJ}o#l8dzDA}zT{OD@uq zi?kdw$04UFePfYaq$L+=$;7^7VqY?`FPYevW5NkNih+yv)$m>||;L0a;WmLo_@zF%63ke0(pOBT{{*e@+berYN4OG^>bau{jJLQ0Nd zZ;oMaa*>iFNXaqm%`xoFG3?DT?9DN3O%hU)gp?#9B}qt05>k?clq4Y~hmn%QNXcQO z#HDY-~W zE|QXoeagf(WfFOml2VSOlp`tSNJ=@9QjVl#VskRFIhoj;Ol(djHYXGN^6w<&uwPR0 zu|4_No_uUiKDH+x+mnT)WFaY8NXj-O#fhZkA}N{JnM~|VE>dzB3HccbNklqMnz8yS zJh?nPxoSK)W^YVeQ--8C{GJ@KML0VeeJH*0PJFkU8L!VnYVwc}ClcaBLY&wZClcbs zlXKz8xsVbko}3FwapK9jurDP@%GGm=(v$Px$$9YPTzGQ-*;}8Fr}Q>>hx__GxjdvS z4=Kw-%JPu1JftiSiE<)QP9(~SL^+WtClcjEqMS&S6Nz#nQBEYvi9|V(C=U|l#Qr#u zC?^u-M53H{a}mr(UW;T&Z_b5uIgu_W(&a?DoJf}w>2e}nB}i8Z(p7?Vl^|Wd`A9jU zIK=0NfgD*Jp*#xY2;(^A32>77o}xTWnM`>W_`EqM(&j|koJgA!X>%fNd3bZtS9xRfnr*W%T=kT53_=0w7rNSG4|b0T3*ygC1xHQNI&ObNanHC(`Cb z+6u8rB}iPwRbE}SNDx+}D-Zf;cdSYmP$`#8UfuYA;9RiC9Y~*0LO5^MV-5ECkVYG=3u5yc|t_0WB^^#^q@6 za z)c{@(BwJ$;`tJsO-@$x#BeC}(eE$yg&3*XWley%0w?bDjPC<^VXz`$^y!XyBfW_)x<1C%0lDE1{Y66?b6$bm+E&2tx&PYdK0J zWlPE^%2t%|rvE5?N9i~2z!J*w`EfYpI2>{uAF>o5Qbrq!8I=_)PhwG?0`s}o+u$AW zE?8h}r4P2!2V3cbt@OcG`rr(GumelCgJ?qqGFXqFSBh*@;=5JiyH(=5RpPr<;=5JS zH(RktGD@aneRQmkPLwPMpRCkBD_n{%#)u6ctOCwC2#Yv}U(&?`P z|L7(Mi<6GUsb{vhjM?Hcdg{372#0l|hdNWjMWQR{#_R5sJwQ*s(~Gh6x@z)zN!nT{9PNb(L=WfJ`UBrrA6vNS+%%Ee*E@H{j>3z2#R!7V_5AN%fnA2kU9uPhbQ18EgcbxYjS= zSFjmuL6`kTxs}hhf$d-i*a>!n-=WPOuovtD`=L!D-#s=*x0`TfuoH?^RJ&Q@Xfk4e!@dUZSj{ z)F|D2?&0%#N}bXR3@oAoEM#g}8KngfA+;gJcFJayfs{d%!IUax2wE|e^DyG>;Ye@< zWec=qOVA3$^Lcwd??Bm+vJ+)z$}W7bE8p)ytgt6J8olr*dvl(^c^}UEgWHH74hK!M z@*~l_cOdZ-Tb~GKB{G9u2q*4Y&*qxC{-r438xZ|36Ln7<>X2 zflrB?E{3K{z~|6nDfj|>36^26m(!;!=+Bh^nZl#Fh(~h~k0u?DCLNC^1CJ&hZR$Xq zx|N^!{s!vXsKj#jtnWeAP?m8-2&hQg`fx&gA(Xk zN?8US%0UIF1XZBgIEUrP#ByX}Ih=S{=@u-nWwdb)pCjEemU0|rm2nXdD;*Cj4{xB4 zrIzzcyjMpymTIKqX`T0HNEBfA)5ws>$LqR)^>HxP$siJt^S{b&s)alLHM^-Tqoqu2 zRg!oJz4Zv5{OiUBva>=NDYQiIUBW|efxghu7aIM3fj-ypVq=L-wj(Yn`!N(cR9J=? z`z*IJ52PAL{gI2!)VZEIAEv%Ct0SAtShNCnJILKGa_9NpGD|Za$j;;N7jPl=6 zW|yXL$5QUtfjf3GBca>jxE&%G-?GCVyH@r>XFdEFW0K5+yly+Lk zaOa(TC^l9!|EG84=T7T=K_X$X9mb(&cOTKR54o`P=3leXq)tfn+#Gnwi`W zL5qRhTfPe5y7Ds*gcu4Zk;AQi+@p8x#@nR696x zFge!iJcAvD&K0(d`JuA{TkkvV~`#{Ddrggev@lDtv<~{DLZcf?WK8bNB-1u>ZN({#@*SuF{3qJ^tU?$gp4ZIF!f!W{y`P2-&w_V&{{v!6AE8nI-HhZ?zW)XI5-bBJ z`ORsN!f&!DOSz7m$&<5q%;3Q()o@BRoKg*^R700sdS6CH>(Rg^&?Xn!- z!GSzDkOv3y;6NT6$b$oUa3SR``r1WbyXb2deeIjcB$JZ9mO8qrudDriT}@w~rLWJ@ z*JqKF(PVp!Me?Psl$jlFv}Yyyw;H`$DIS6z)9@f(C$pmzk6?ju2&z|bT@A{6pu9&! z@yl$eeVAX%sExcr4p%5ZgXf9AaP6T;+f=?Yjn}Ue=bwtNvA{USm2$aCq2&&)Hi|5L z=B}+_cs7iiuw0SokCxOU%Cy}wjueF!krBB=aOWZJTF6~5aHo9i#JAj~96M2MMgs1` zW=uv0$?U?Z-~rC3alPjm?e6FN0J*Bf#u%}=8LibaGP{x~*p=5k@PK^liIU;;Q_A&Z z(Kn64|A>|r`YHD0bjd$ZYS@F;U zfs{0vS9B8|>SSo@%L?{TUm2tJWx&deV43-Pbr!J9{OW;j=!qZHn=*m&dQi>#{!A$R zMK9i|l^NGS5X@bqm6e{*O~yK?)yN&MWGg)nHT{`LP{+$1HSXv&^JHXpk<2XWf&CyF z#~rh{VW4tTCePZu3)>PutPPn~d$W*O%?w)W@=a zeSKO_JL+jiJ?*IHN^;gnW_bHDmPaFdWAVsCxLbd&>J*{){$!iuJzeC=N0Ejiq+uWN zvPR-%jl{|tiIp`H`)WiIoWzqFi6=D@PiiEd)JQz3k$6%g@uWuLNsYvl8i^-0iXXr_ zupS%&hrtnW6dVU9z$uUn&Vp3>zZbEMKA=As&+E^@Qt$=%6086#0d-*f-N^X6kuhVV z-?Ii8v2)0>oe548m_K}qup?{%w4XAqwC=4IyhS9D_6tO z$Eo!(YJHqqAEVZ%sI^9|HEJzaV7aOFpRd5G=Jzg8V^qVf8l37u6Y11m<}-#e!yXPI zk$BdGpj|y^?jmetz32eVd*Ue%fKPq#cIh?eq0vv{IUgk6ULdeX#MK?d)g8pu9mLfg z#MK?d)g8pu9b&$5g2?CzJm-VrAg`0aG0?y@8t(EmtJcF+>xqOph?hHvL}e&Xf%#nPZSW3w7yNm=TzbF<@qiC1 zpK*QS;pT{=7zz|Z0Xfr{FIyq;b|VioTVz7-hm@+lXZn_CPzc9ikU& zmWkyUWk#}rw}*xMKm0Rx8Cgb=fhTEH7-YH{mkgc%wg3NbVQe+d7#EG5#zxMz8aW&% z|bpAE`@ysk!B1pogJ z{|w^NPuu`o7KUdUP3ok`Djv5B>ZvfAm2qeVo$t!IkeA9$zb)+A6B|KF<`M~o!+@(7ahxv|uDH6Ly0fvl#hONvYGkbm?F znPbq9hbBsi=N+>0gO{eSrFfBJ_;tojdH#KO2n;gCBVSSbTJEJT3A zdDWc5&h7@+vhRW1$soww$sm}03;GDv+_xao+_9jgxnsd!ETb)x#7*YT1S7ddym{SV z^SXBPx^}J`iU%0RVdW0toXdNtS6w}bt9K_3)tWk5n{1eR1szgu|$bbODpzL2sdjMOwAbeTE~jjz^?cYAUKiM|}yvgWHF{|9iiCLTDDt6$F%BL;C;#0?x)aU(~7 z7{bv;+$wG(Q(**0oVcAMR*d9mC+^^ADMoR072`QNi@S*X^%N61+Obw|66bew#EN@3 zdWw5Fx{LcbT8aBPI*7>}VeD!=MRXJoaDydh%|dUQoP8~ll_k0qDAw`p$!!8 za72qw#1dNZImfkPsaQt+mvaQLBl0@#_#;OTv7RGN{3JF~pWiroimhTN=es%DiQmOO z>ad?9oE?-8@E<>jyBrdSxk3_03vomo<@^{&3vpbW;QS;QC|1QPS}6fa z0Q(Tw6dSV|cE!$lGo=~lfl46fK}rzk!Adaas-kipqJ$t1p-QOesDvqDtbY$zkR2sL ziQv4s(wxka7D@|pOCps>&RZ%iIge7JIB%u2;yhl7=L+qW_FSQZ(t-1iN=ME+DV;d) ztaRqQi_(Rwbyd1@WhsFnrUcqe32bIcV5lj9c2feInGzUkN?@qD+fGYmgmODs>USuk z$f6prjAxeUUS*1Ct30VZC4!Wh${ezo<}2@t*2)4R-3q&4FQSc~DxWfYuvl5b-9J-4 zqt2fzU-H{!$}-VIS)r^HamrU@T*NA?m2X5l{fP*&dMHT z5C8Wm`}m)zB=Y}|a)|#)%2Cl%Ij)@K|7qnc|5FsWLP=LLId?Gg*Hg(>^5~;{rI_9+ zAp)(eAb*+Rl%?IW|4v*@S1~AB>;Xdx&|K+rC|V zZl6)@AMU%l>!Pk3+pM<_>ULc>cmFZ{>k`&--pp*L1+4<_3x~%R^L-s_j^@c%U%C)w4L8}KDFS# zJk%X(l6pq1YCD43-hdRAJY7{=4sLH?xQ5yj%d-U?TESrV8gEa}y z_8uZz9=WmQsHnBQhqT(z`bntwl00Ka%WQ? zb=^q){k&rK(sao&l4s;0d#C$*{NE<|r|FQq({%LQ-?PZ%s*qmS^?I_`3vidoUy{-i z)b%%ZYr6b>&Lqvv<4QkEPJ|DqCR9;l_|bo4_wC&G8UL~Rx|Dw1FZ08P{n8|-Qse3U zm-b)7mFfocL3+aRX4q>B|6~Z3_g3s(4EF9BtghUr=|>BP;YU9b>4uOW6`Lww*Q@$+hC z)>4TPIEW7<5vTDGr|}S{DI)SwNj$Fz>l%c84I;j-Gmlb3T)l?4dJS>)8sh3T#MNtv ztN(ExWjWW{!uR*{`vc%4=chpyU{wzB^%~;qHN+845=HU+%e+bmF#={ji7zA(T`3~Q zkVIU;L6oJE*n)#dOC|9I2ho;FVhl+{T#AUUc!;ieh|%lB=yhWAIL4j;lDXYtu=@CKLz=7M?PP4E^VpOIKlA+exrVnMaUf@+Bc)l#z( zYL!i`vWflZ#C~*QKRUI_CdN}sjHi|uPcbo`Vrp4JEla3n3AHStmL=5EMJ=Q)qE6SqL1tbAHYT1iNPFJz1l_t3&FV|p58O)B>o(xa zEzA%j$(dk&f(W&XJi?}Rk7?u)%5{$!UxedR#EX131KPdA zb$vT><-_&)aD6^ppAXmP!}a;ZVl#-vW)O?bAQqcJEH;B!YzDE|3}Uev#9}ju#b$^f zz&h|F*Y)N0rHKvH?`N4?^O4|uX4vY9U1t!x&LDQ3 zLF_t%9I~3L^2aiWUuO`%&LDp*P5B0}lbZ4!*$w9o_Qo3pMk5D*Lm~^2L@%*axqrs5=#fikEx9X57Ljwg{?U!} zxsg6MvlVWn&n+f`yTJ^iVaxg6SDdc`UxU@)8}Kdo4y*yp&mk>tq{WT2xRDe$S+H&- z#f_x6krcO(vAC_2+WaBbv7n%`12C$%1PO;o3r_FDq5Y^Zf;U{~ur> zcprQKJ|*L5G2dMRKIc12!5835umY?E&;(9&!-;M<(G4fc{IUi((GADA;TSg@YSz2~O)WUiTqnV532zBDs)U+&pbE@x1QiObA=b2l>l zi^0su2JpUz_v?7Sh*)_c<9nGe@gZZyE%dd8voQ0lnII2{&u-@WKGlDsr4ylViM8Hb!cTTGcdJi<~s2pB|D>Gw<@t)mDsIH>{caqs}j3aiQTHiZdGEp zaK8%%BB<|SZmSromtrHm*hsmLPc|N(-2EmCs+U6XM5uiM zJ6VgJlsh14P`m_+%bjpa$gGgFxfBSa$v4vi2p%+`|#TI(;02|1x zXdttqfy{~qD4z)BOQ3uScBK)o&x`HwVmIWzKiSv_4X>|(?1~1mD;mhIXrLG5I(WI$ zP9nWfLN6pj?NX?%A$_G#TZ7uAP+RV}lL)m-m}e`7;w8+p6+`h7=Gn@zBei&fwb%$R zHo}XI@M0sp*a$B+!i$ZNyC`Kt?QE!>4YjkOb~bjS0WYsX`51fx7J*Ocsm0uD3HY9C zGPjCdXv8iwViy{*3v#z54gIX4pEdNehJM!2&lkAeJZp!toz!ac=s zPcht60{6&#k`iRL9+|C2X5Da5A{^v}gU-Q0GE<}sF4~UV%ACKG$ZaKZE7$V)av`Qt z`gTdHKxXTa*?MHQ9+|C2X6upJdStd9nXQL|yl{{g4)Vf5a@VNsaFDsH8nRoD?A9Z@ z^~kOp*>xkkQcowsMP9hb3m19eA}?H202fK!y&W!+yRdCXmg|w@dStjBj*`19NPS)a zM@gMt07pr^z8#LLhojtZlpBt6!%=cqks@Tb9@(u&cI%PddSus)?7ER%H?k}Be=~v$e<9y2RijL$wF_8%g!RSWk@h}Iaul9+3nW+0m-=#Ac5s&<3*ee&Cixc1-@sO|O+3sBfp+A0 zw^MfVon2rzQMlhJ_fYPoBxwsM!|YbZO?ngCi8V7BHL z(VMFeK^L^3ZR~VI&(}d&cJSi+Gmyp2j1IQYCo=23jL*v97hliSQ`aE8QMq?)SG>^% zJh=vXv&58jImZ#enUwji-1kN(-3n^9G-chw^@Gi`&O+{{sv0Y(f!qP3jv8E~f8`Ds zHSk`8pZ8=g?lSoA3wZ8pYW4#>_cd*BQ9GG2>4N9VsbL8N-E zz?2g7;Z4LchO&}uINux%#&8YE$KyC3FGAoc6)N<`y18kI+~r34sQI*}lGfD2Un=|+ z1b+p=UqR46h!$4EV=8?R1dj#5Vw=KpwTeJ%W^(!xfh ztr5Oc;X4(+Q{g)mzEj~l9&$%taxY~I_)YdJKySl$LGWD=e5b;9Dts3L->L9j2z;l) zcOmed3g3mmcPe}r0^h0dT@ZX1ge2A?iG@g_+_#~MERuTGA9%?mk+We|^nV}-1}ao( z2hD~;ui<<)8jQipj0NL3ACFYsNjZ&A{wR_0P%I9L#X+$+C>95`;-OX?)QW>z?V(mY z)M^j4;uVF6yqp2(0SESEubSSJ36#tEj3;J8op`7d4|U?9PCV3!hdOakCl2bwL7h0L z69;vsL7h0L69;wTp-w#1X%BVcp-y|K6AyLTL!Ef2(;n)?L!I_eCm!m=L7h0{(2Djm z`HPZlSH?OXIKGN8jh8Wv*PnsqWlW>vDK#>#(HYk?vh~FIs zN5D~V9Gn1GGP%5ralDLibjCP3V;r3^j@*A%?ma8_oz?NYWUiHtZIt_v>DWLW`=?|3 zT#RcxN_Wr$&&8LUm<=Ci<5Bst1ji$#czcXxyo_bMjAguxWty_Wyo_bMjAguxWpu_e zI^!4}uc?u-jLuj_XDp*LmeCo@=!|7_Jg5JZyLDwJ$127gtbb*kqgyU8$?HWtpf~3UocH0pzx*D*keOc>O+C^Y?R8~+$r`R8 z^HD1qbGW%uDKdPP46G};piyv3Ay=pq?C6FTlDa(*PbeGBBiEN}{5qLmYG{>YG{vOi!0&+-^Obw|#hg8;)jqAH=!&O%eyK+_TU|tnD{ohV-|D9b>Mt!%bJ`$B$#QgBjuxv$9$V0k zT4b;nmZt(4R9UyitQ0=8+{>2TMbY79=;~l>7%St+)~Y94OGfnSX_w3kJOZ^!xoauZ zDna))a<@kA(#W{l)R)qGz(f9@`b7Vi{!j?@Zrb@)r@k`p6T5;3Bzc2fZW(vU9cblR zs#03&!h%OZL+Q88Amh$wIpk=$1p38b8|$HAHLbg3^1x4Mboq>et6&sdPF$MVU5 zWAzwUV|O_2Ukcs0F1F3L4$7B*Iv9Sv3EmybSa}%d(};sFFzX{n_;Qyza_9fWoA`hA zB$lHO%ZRqt5N)ktBkK3a!1;xXBzx@+=v~_%-9jTn2A5ek2G|vhHll+ts0S2x!aoy9jh_Ib)jc9M!7C@ zZPPOf>Xc?^q#&SzP;^QdI+B(7j7_}gU^%jtquNrX3$MHKemBPb-NBWJXbln38b!vM z{%k+*ndt7^k_J7V^ z#YZI~Sw}>&j)-I(5y`s$ueCFQkD@&P_`L5Vn>&z@gg_!$5)v@52&kxdPy`XVw2HR1 z9z{^AMYJNewY8rAmRjq5fb~A`s23oLRuD}BkwXzYLAj5Rgn$YpoAdvDp4m;797=_q z&pSJ_JM+#v@B6&J=XmG+4X6<2_t=+!=3D zX8UBQMO=-ACw#=U#Q$XkqaMkB3#|H#zE-7H+Z>+SnMZm9J438BVR+fZb_EDh$??0e z#s<;9CV)@p@(uqJIJORZL;7JReeig2Y%BdR8XPO5A68N7-C)^wVA)psK z4M?^`$Rs*ehd!=Tss0DY-$9Dxbv`(W^`fQ{F>Nn41J^Wjvm2P3-C(em4Av5Jvm2O~ z-N3x;2D6&9hSX8CbuIs`BYjQ!hO~iHPB|<2-bJb+Q4dIY1M<>yWGYoOL;G=ZOW?h1*%8oT3dIkhW-|ttobtlWj-K`)?wSsB1nV zbT!6qQjvX`dEdn!WnM2;}m?897i6{=ms_^E1ZbUZ;Z;Z@4 z_U7n{MNq}rYdBljPqBUITSLhA6v{djJ8BqnohK5{n2&4>F+u-X~J8)7kzT|J}>)_mS==JwSSp z^f2jBj`@iHSCQ6}n7IL}2SIesj<{-!%1es-4RxL7Li_F&&gRCV6Sxbbd8pPgf9we13x1~2@ zgg1_Wl4ZzD88TDm)H(($A%>KUg-N88I;p27mw}j#wEkBhW|bml79)h&)UKbW1AFqF zi#3?X_&kwRYDuEQ-aOG^{5G6;`3TZTp8Y?a?@@fi{>BJu5lB`9l9hmDMIc!*NLIuM z>O!K%+d#Au5N#p8P!XuS0AyPTvK3L=3yAxb689@5?pI3Ouavl7DRIA2;(n#X{Yq(# z3Z%2+xv5WZttUxOk)9?!Lwc6<9BDS`dD07{7fCOXUZyOskX|LdMtYqzhp6XV?jNg_ zUT_SOwH~xA0WC{F%Mxsb5^RN~*a{`s3MJSIC7@*qXjuYUE&(kUf|jMkAxlBbVtlY- z;*q8JVa51i#l$5`ofUkqBz?sFe9U>P`2K|NHT?D|_xBm!U$FlbX&vbs(t3{BK*Vno zW%43+RrJO^AZroGT7>jffUYG-UMDGh+d$kU zAZ`hWD~x|7*cuW^U&J`Ze3Q}iCbovKmk;=GQ%u?*CC0t8=9bbUF|_2op@mlIw83=N$I8ui8d?+Oy^q_2-gQ_n|Jr!x9l z1iBZ2?nR(`5$Ik7x)*`&MWA~T=w1Z67lH02*fAy8F(ueBCD<_~*fAxHz7~P*MWA~T z=)N9wFJkodT}EFQn$4swq^^q#dL((oRwZsggW)k*Y|$NqZ=>$F@;|7Fch) zI$aojO|-%kIEMF|jpZ$5^}H4Pj6a4PhUk(Uqw$} zMZ|^qKiC=`J77P0x!~Cl?3xq7w3F!V@@^z~2S?c65L-j+jEgvy+4pK={223}yu$>2 zqc%h&Pj^_yx9D}jKw&elCaT_uWC=%iBO_$O)7^-a)q{=I==UJ{J&1k}B2{5d?s}r< z_3h%`1Dx|9=^^q!=h3nUr?=bJ&$VVR(a=$7ozeJXVVx=b7m+$s=E2s2i}L0-p05Et zWwx={nhhYO)ai22Or8b#8U%?2JrY2V4C+Z(0yF5bLG-8ibP`t=-*^L3yc22dj zu)C5{3C6CWRBwZu-#U+T>>QrBo{LXEk0kN%`B=uE@*na{NyYn=$m~{1x}Cnx+)DcT z1ZrBIuDFZuXW^!ujoiP&bDQ&ciu4Wj?l(~SV=4V&N^dBAk@khkrUjIK4RY;6b{8YN zhPx=G1nJaUS9JPxG{QV0qdY4?Np?_z6iQG{3HDHey`d}Ca3!guDy~wX_2Y3q?$y1T5lW6gJT6`2O z9tA$8*i2&8-AG69JV8z#|BE#h!m_O9^D-&sO5^)#FsmB#X97Q z`KvMqgESDP$qCqI@+8IE^u>2bOP$_uFdZvTR@*2i-bQmp#$j!Y6N?0QM{;Bi>s}@QPh|8plU`7>ZptF zsf&HIy*D~k0XB6o=0fk1*qDr^M2@3~7w(N$wTy#=#z44A`(qM4LRb6ov8aO`hiY#O z>Mov{3XeC1$C~o=%JGcO!7EOS4DaxMvzb3C;{)Mwrg5Azk+IAly8nPP49Og3!s9_d zRuA#CXC|dMj^}Z5k%D|=zAIPhCFqBoA4_h>()RJ-y=ZNTR_>zYj1hvEnRo@_8Tt7Z zu7IIn%S7}T5mrj@B_lvJ*ugUU99A#RkQiefo>(nsZstrGZI(I1a*r=^b~$~14?0J3 zDIOsc7MN`Oqzr!_y)R?f0N%W|J``%8^sG+~ZM2}9{Lg{upU8!f@ z-Vr+ML(USvwVbo$&8BtW_7+n};z==;`c8~(rf@f2E=l;Zk-11rd>rG}t#b*`I|qo*?t}0qkX?>F}~C) ze5tqbo!-TFdK2GimHI$mFc)?Mwn=M$=X;LD_QkJx55Hywe$705n#K4ti|}QZ;lnHl z`7n#{Ti!BZe?@!~&wp4G@*h6He^`j$@XZhU4HDtosJ8uQ*zBKSk!>JyvmDC8AH7{{Kw0QCgY$>PHJ!u=6o!Osxw2Uh-Q+>Y7Wo8yVBO1DV%`E@j z%#kjKUtkAwdp}`mV7Bh=rW*G5kiNqf`;iZG-(?m?^M`BHa<2~8ldT%^4$TIZL-dL= zQ+oqa;!v9h@u5C=4=^Qbp0nQZNnDR-y1f6nN8Xdy(Xr&n((*!5R$GNtg!BLz~4K`rY{OIR^a_?{2N!b|FK!djVz->@@K#lUQQu>NR zs|jZVO!87f`Ed8xO|;@xW?^sB`iAur?u1SJ_bMC^`)Ij3kDI|eqh&33h|X;OwAWJd zKUb}$uY^AIiw-}OVW+fY_(NG6NLulm$Y0yvK0v;!k%awd4=q{iVTnhQG>6NDEnusUx zT|w(EfMetx?;P59Gs~N_?;9j~83?ziiMMy?7SGBw6~ni&y!90hem}CFR7#Pnj?SjW zLTnSE((%r8sTp`e8mL(q62f@G9Wu&;{8drkRoX8%>HpFj7V!&jsHaz~?&wM!RgN48 zn+Qx7NaZ&Ac!=+WJ;AU&^lg|*B?t1V;CQL+6`tg9)rb~TJc(#)ctnb^R2;NKC3U@! zwAd>Nj4|8EX%T%#7D2bgaDEht)KmYZTy+f#&lb^7w4S7uy;6j75WNt_Sdq-KNJL`6Noga{$2+^dbrZ1^SUR>#i4X6GR+tAq!nrJ5Fp(b*<+S~p>rD}-nzBUby2x`{ zZ}U{5gD$CTVYrAq0xaB#4H5d#ruEI3eh?ZHY;VwVzY)%XYc=aZT5JuzQ#kJsp5U*k zHkP(yt4>g>2O+2whse|M%dQeeOjzaK~(9ZFx;om5|BCYnF zM)Xc|Kckl0+=CzywGqU3;iDQ4UXt*KoCI6pZ=sDE(JZ17Ln(Yr$KRfWN9vEZ$HER% zOvF?H!uRlNBSFmtwDQEgqGF+!1k7pch#1CIWKbW@NA1-1rHk0#!??5 zQ!2UO^~Rrm1@M9Q_tEpVqwROVWK_!)f{KRRBfm>)?E>+{9@<6C)u>J@^L}Z4-S+Mq z4y7RcPG$I!hyBy^oR=jf5A_?bS5qg={gHBSYkgs9VeVi9asAMz#Zqeig%~AxQr_C0 zK_;5(zWG>@6_R{fWXaoaZ;j?{X!@8^&TaX(<-De4;ICS4YBPpqa3gukm6a2Tc4}9~ z$QM>3?yUh^>^rt3sm()MlEY8^P#4lK=SYs^y;e&m7Hu;M{!q?}3{_~=wVZ+UvToZZ zU@NlNfIk(g&2WwWP|lpg-GLR1`SI=L9icJEPs&X_AEt7*#j~f$n=uq@0qK{aq}L0v zX8mya59Z%Ujek(b@1V!+Xlq&PxkRUlV;#wM08ciCF|HHvu}@^CLn^V=UlTRC5RQWY zQR?3jI~9(D0m^YO5O#w*n8|cE%P?j0ITfaZN8uNGf>DNXu=V_x=VTVbm2(AAq)p6B z+`{rNXPZ;O>_lPAdC>Wmr^_EwPK0;iM3~?doAcm&`OI8tu6EYJ`SN#X6KpTfIK0)= zEP~HQ7!&e^jl~=V8_QlZNO==v_Q7T%uD$pc&Lo%UegXb@Zx+LhiatbKghk26T?Dwp z{w%TF=Rjf#gIMB}Q7Ms;eV9HOJ2;m3sPHODRQEWZUKU=ZPRgs)nR+>qh@kK)N$m_L z)-r-6ji>NWBN8VZOI@jf(}^(&$5Og-EOk?krS6Opj3G)tmb%Gi%xgSjCc?VZgK^`t zI9|AyvXpx%SGkumlzS;hxtILRu=oYf$O-pSo^mhcDECq?&L%aZ0i$I``_&64Ik&(g(tfhEm(k);a^PA{=798T%V;nY<*oYILx%ItYza>`OB zr(9)n%2g((9A$DUU_L?-H7R^f1u!`+A-AP0X)rl`$o4XpG?<)Lu)UHcP5GQ$<#Xz) zd`_ODNOO$duWjdd;7-e`$cfMpX%JY=Yo1E9OEo@Ke&etqPIiJ#% z^U0^2Pu*3HvsI3>kz+W#nK7}Q7Tm#->6Ed=GIwGpzm&7^u3?r~mGvxThssiRs6=Il z%2jr#L}iD{Rdy(&>`>`W4NJUoMEQAosFrPEit;N{RDv=^^;D*)1Z9fqX(%dBVe@f% z8exh`GQt#Q&he(MWrZH zRDm)@!4qXt7;6@$sNTvHm8wipy^SzMF-wG=+?$@O2M zC?6QX%oZ~Rq=;2^s6=zKxtS5PTg+`dp)E{N3Ca|eq)buC$`sW}nW9pZDJm7FsD~MU zoM~qA+{!F7i|t3?j!IMRsC4rvvs^NiL8_}VNM$O6RJt-qrJLDiHuF=2N2;6hNOd=_ zF#9FT%wr5Q+x(XqE=MS{R1a`#5qI&vd7pdyfEg~C$}iQ!6f?^u)0CJJ$}e0~JifDovT9GQrUxLS?`*VfE{R49Bt-_Pt)9 zL^2p5?0dcVP65S);m_l&lR0y}z*s?HL;vl=wji%17T=d`VX@2QdjLuB*H!!tDE_*N zzl@l%6e#{iDgH(){`wSuV-$a56@T+U-w|N9Aa9`}Z-OFkoFZ?MB5$%HZzo0GLPg%b zioAu2y!{k;3l({D6nT>rd29V38pY5A#ZaRd znxGgOPz;Sz3=JrT#wmsd6ho5~Lj#JTNs6HX#n2?h(12oSl47V;4DIA>WCsG6au8l|Y3si+#QsM<|YHCj=% zo1$v8qG~rq)o4Z4Zi=cgimF+PsP_fm{7V5S*iz)V;Ey0n!Qwx%EgXF=D0~~+g1-f3 zhMB>(@byJ03P&pn`xJ#^6@~MZuP;t9H(oKfP%$?_F*i;zH%T!!Nzpc0(YBMKZK0xV zUq#zOMcaOgwuQ>(*Uv0wUSXjkZ$CxeLPg$wioAu2ya7eteu}(>io7|BygBA$^D!kC z#=jiJ-y~)H%TeSFDDvhg@@6RVW-9VVDe`72@^(|??XJk1t;m~i_L+U;DeQkoDDU5q z%J|nq8UMOk;TY|#jDLNU@vpNo{`FDDzs}0|*GC!uIxFK}A7%XOqG%qcXr82K-dE8) zNzpt`(L7ms|5Dv??l}4jkByPy?cBKQ9Xn#=*a=SZl!@0(bxy@T;?vZG_2Xaqhs5{8|Bn%}v8_^=6nXZG;3S${d=v~&F? zcFeHz{U&YPnPdHC#Q3oz{O06`gSj`saPlx#>TCEO zOTjJP6GHEo<1@h9PH3v$=$fHuf^(eUj8;1nopUkT9B}hEwBT9jr{BOq_eXTiJ?N4bu(KC~?O%ebdq6ljBaKB^D2_*8{+zMY ztDHZ<7I!Zi=S62eOsXrv@NM9!_{SmzjQiqo1kk%9@k}m3uibzSyAR#;658hjbjDiH z`a3YwJ6@iK%Ehx9f)+jp&+lsI&uF{*(PRHXPZgnE)`9EagRb83GRHm-kMczH^#o_K za}ECF4Cev7j+dPU=&n_0kTPd4IBX_OoN}En_HeAHUFu7nH1UwvldihPmpSQ>*ORAQ zak($|Fs!FueU-1zT4%Y^<8l2>uV^AZ}Oq9r(H4iGT)VlVLffYK;Jdf4##?s?*{TY^!3rc+sWt9 z*T?woBA-KFAM2Y*K8L;@?0cGg4s|{Kl4-t|ryYj%HPd`^r%gZ9^>rf83l4pK!==|= z?OSx{YwQxD8rUWIY#DT)>?dM1BrT2()pZ7ItNyFx zc!d6zMx0Q5S22`it2bLlxB9SUb&F^z5f=HkkgX`)>dRKN=FmmgVn-Qtx~#?Ly@2EP zqyJ0g8!sXi+x$1?R&$R#)qT_59u*sPO7x8An&=vz&o|hY=F4S0!gs50v2U}lHYPRZ z&Y0CPwXw;uqhqJU701WNkBWahes99)gxASmt|6>Z%s#N+nYZnq><#wM_AmBE`&WCD zz1iMkZ?*Cqva3F@V<*|mVX42u3R92ReR8&xRh~{xV=KyB#rAaFdM~tP(e1F^H(x88 z_{w0ItCMW9?PNRK6q{qPp)b0aBO2ESHfcm zA7`;zQL7|C##V!_@OWRekQ^>TQp}lHG`Ncl7FuL@!9GbpQF`0LA~K~)ek;TJ>Xxc@B2&j zdVi(s*U}d82c?xyd}_%v8Vab@k8Ys5drOeXn_DzuE7+VP{z0eygo3a+Muw z$NtoNuLE0y|5{qZ&|_|6Ke8>S(w0__k-h9aoaHS{g1Tv>alBR$Q8`df7K{m9${ zt5GyXC_P#tbaE$17+#y4j|8$jPMU#~30@X}Vtt6iNffRhSkxc8djS1n5Z=%+_$Y(% zB92GuhG31KgiPLu=XDdl(Je^k->~9m;Qif!Z*?c$&t3Q=_ux0&hi(4=a{Dm;(=2f9 z-}oJmA-knW?MF!KYNYgYq?0$zBas`CLy7Q|A%9iK-FL{_e&h_6IH!@~TI9)x9K|C) z$s#vMO*+z&hm`b2Iz~!NLL>u;_@()kIiL8$#pV(-$xJqvn#+kp{Ek@gG-41pn7eL_nP}8=75AqzZb0`u|I7GFhFWcdUX^@=4N?v5w6#M{303#^la|u z$c9Qx0{@A0czMW?lE2{R;nH}bicE{M^#5~UKK%W_qGmbk-#!o#Nul{1Z+DXozCH`ekC5AGd z_L^)jwU^n;!R9ON@9Y$Nl@&g>a7mBh4if2qg78r;Z*IY=kRF-rp36VUPL4Z)eQDh& zyPqxTmGb)$^!b)tME`g_Ig#-UbOiA2AonkA;nj)MmnS{bIj1ca$p4X8 z5CbZ;IahV2NS<6vc;rGy@GcFxN*eb!L}Myf;=|uTUww&qN^=B)ewS)`m_oF9HTHm% zCq>H?Z)-yPsiFN~XunHnzc#d=7TT{1?Wc$K>qGk)q5X!?e%H{xJU1@a%M9%|h4#C7 z`v9BwfA`QnnwR5KNb#=KZ9%9$B|yc@0C>ALOHZNb`jS87p4H)K0j zw*@)l-8kLurrYtlEo~c5GDupuCDqO%>hdI!sb`7jyg+>}r9M|Omh=ek+mJ}saN-_M z5s7+^=*^47u0C{D5b2!7`#D;2!MXv3b`aCr1^fRZvzRDlv03Vl;uvAT+fIzF5>2y^ zc;@@WE|=I-Th2CTIlbI;H^c4fX1d+n?rxTw?H=LwKm-26-eLb~@3jB2ciFq`J@#IE zpS|BcU>~#(*@x{+JIg*||7{<&kJ-oV6ZT2_R7tEuZg01b zecC=_pS91~+4gz+f_>4xWdCDdwy)S%?Q8aRJIBto^XwaTzJ1faWf$1D?K}3r5xG7~ zu1C6sZeO>b8*ux(N4W#sf$kvtu3cys+4t;X`@a3a7TIE3Vwc#Zw$y%Tm)YfZguCbrm&mwXiPp(J1$GFG3gWcoYTU F{C_Z3b7}wp literal 0 HcmV?d00001 diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-Regular.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..4bd7bcf2d5a0e95328adb68c0caee082a1a105ee GIT binary patch literal 106736 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-Semibold.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-Semibold.otf new file mode 100644 index 0000000000000000000000000000000000000000..fc7186dda8264320af806b68ad378da24513b554 GIT binary patch literal 112664 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 SIIW>!V4V>^N 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 z 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 LKrMZ;8bAIY(j%sW literal 0 HcmV?d00001 diff --git a/assets/fonts/TitilliumSansPro/TitilliumSansPro-Thin.otf b/assets/fonts/TitilliumSansPro/TitilliumSansPro-Thin.otf new file mode 100644 index 0000000000000000000000000000000000000000..e9f73560c4283021296a9449b57ba8a665b3f1c6 GIT binary patch literal 103536 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 >$){? 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 literal 0 HcmV?d00001 diff --git a/ios/ItaliaApp.xcodeproj/project.pbxproj b/ios/ItaliaApp.xcodeproj/project.pbxproj index 03eddd4660e..70cb0f69da3 100644 --- a/ios/ItaliaApp.xcodeproj/project.pbxproj +++ b/ios/ItaliaApp.xcodeproj/project.pbxproj @@ -37,6 +37,18 @@ EFFA620FCD2D46F6B942663B /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = 2D52800996AA471A87A7F975 /* LICENSE.txt */; }; F0625E7F2326825600EDEF90 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; }; F09FEB3C231818E3007071DB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F09FEB0D231818E3007071DB /* Localizable.strings */; }; + F2B1630E2B753C9D00F6E487 /* TitilliumSansPro-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163022B753C9D00F6E487 /* TitilliumSansPro-Black.otf */; }; + F2B1630F2B753C9D00F6E487 /* TitilliumSansPro-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163032B753C9D00F6E487 /* TitilliumSansPro-Semibold.otf */; }; + F2B163102B753C9D00F6E487 /* TitilliumSansPro-LightItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163042B753C9D00F6E487 /* TitilliumSansPro-LightItalic.otf */; }; + F2B163112B753C9D00F6E487 /* TitilliumSansPro-Italic.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163052B753C9D00F6E487 /* TitilliumSansPro-Italic.otf */; }; + F2B163122B753C9D00F6E487 /* TitilliumSansPro-SemiboldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163062B753C9D00F6E487 /* TitilliumSansPro-SemiboldItalic.otf */; }; + F2B163132B753C9D00F6E487 /* TitilliumSansPro-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163072B753C9D00F6E487 /* TitilliumSansPro-Thin.otf */; }; + F2B163142B753C9D00F6E487 /* TitilliumSansPro-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163082B753C9D00F6E487 /* TitilliumSansPro-BoldItalic.otf */; }; + F2B163152B753C9D00F6E487 /* TitilliumSansPro-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B163092B753C9D00F6E487 /* TitilliumSansPro-Light.otf */; }; + F2B163162B753C9D00F6E487 /* TitilliumSansPro-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B1630A2B753C9D00F6E487 /* TitilliumSansPro-Regular.otf */; }; + F2B163172B753C9D00F6E487 /* TitilliumSansPro-BlackItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B1630B2B753C9D00F6E487 /* TitilliumSansPro-BlackItalic.otf */; }; + F2B163182B753C9D00F6E487 /* TitilliumSansPro-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B1630C2B753C9D00F6E487 /* TitilliumSansPro-Bold.otf */; }; + F2B163192B753C9D00F6E487 /* TitilliumSansPro-ThinItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = F2B1630D2B753C9D00F6E487 /* TitilliumSansPro-ThinItalic.otf */; }; F979B2982B2909A68F208546 /* libPods-ItaliaApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EA78A5BDFCE253F9BB4EC906 /* libPods-ItaliaApp.a */; }; /* End PBXBuildFile section */ @@ -111,6 +123,18 @@ F0625E7B2326822400EDEF90 /* libReact-RCTImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libReact-RCTImage.a"; sourceTree = BUILT_PRODUCTS_DIR; }; F09FEB0E231818E3007071DB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = ItaliaApp/en.lproj/Localizable.strings; sourceTree = ""; }; F09FEB3D231818F0007071DB /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = ItaliaApp/it.lproj/Localizable.strings; sourceTree = ""; }; + F2B163022B753C9D00F6E487 /* TitilliumSansPro-Black.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-Black.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-Black.otf"; sourceTree = ""; }; + F2B163032B753C9D00F6E487 /* TitilliumSansPro-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-Semibold.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-Semibold.otf"; sourceTree = ""; }; + F2B163042B753C9D00F6E487 /* TitilliumSansPro-LightItalic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-LightItalic.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-LightItalic.otf"; sourceTree = ""; }; + F2B163052B753C9D00F6E487 /* TitilliumSansPro-Italic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-Italic.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-Italic.otf"; sourceTree = ""; }; + F2B163062B753C9D00F6E487 /* TitilliumSansPro-SemiboldItalic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-SemiboldItalic.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-SemiboldItalic.otf"; sourceTree = ""; }; + F2B163072B753C9D00F6E487 /* TitilliumSansPro-Thin.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-Thin.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-Thin.otf"; sourceTree = ""; }; + F2B163082B753C9D00F6E487 /* TitilliumSansPro-BoldItalic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-BoldItalic.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-BoldItalic.otf"; sourceTree = ""; }; + F2B163092B753C9D00F6E487 /* TitilliumSansPro-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-Light.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-Light.otf"; sourceTree = ""; }; + F2B1630A2B753C9D00F6E487 /* TitilliumSansPro-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-Regular.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-Regular.otf"; sourceTree = ""; }; + F2B1630B2B753C9D00F6E487 /* TitilliumSansPro-BlackItalic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-BlackItalic.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-BlackItalic.otf"; sourceTree = ""; }; + F2B1630C2B753C9D00F6E487 /* TitilliumSansPro-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-Bold.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-Bold.otf"; sourceTree = ""; }; + F2B1630D2B753C9D00F6E487 /* TitilliumSansPro-ThinItalic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "TitilliumSansPro-ThinItalic.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-ThinItalic.otf"; sourceTree = ""; }; F709D4AE20E44EFAAB255A8E /* TitilliumWeb-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-Italic.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-Italic.ttf"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -181,6 +205,18 @@ 36F229EFB63F4CD98EF610EC /* Resources */ = { isa = PBXGroup; children = ( + F2B163022B753C9D00F6E487 /* TitilliumSansPro-Black.otf */, + F2B1630B2B753C9D00F6E487 /* TitilliumSansPro-BlackItalic.otf */, + F2B1630C2B753C9D00F6E487 /* TitilliumSansPro-Bold.otf */, + F2B163082B753C9D00F6E487 /* TitilliumSansPro-BoldItalic.otf */, + F2B163052B753C9D00F6E487 /* TitilliumSansPro-Italic.otf */, + F2B163092B753C9D00F6E487 /* TitilliumSansPro-Light.otf */, + F2B163042B753C9D00F6E487 /* TitilliumSansPro-LightItalic.otf */, + F2B1630A2B753C9D00F6E487 /* TitilliumSansPro-Regular.otf */, + F2B163032B753C9D00F6E487 /* TitilliumSansPro-Semibold.otf */, + F2B163062B753C9D00F6E487 /* TitilliumSansPro-SemiboldItalic.otf */, + F2B163072B753C9D00F6E487 /* TitilliumSansPro-Thin.otf */, + F2B1630D2B753C9D00F6E487 /* TitilliumSansPro-ThinItalic.otf */, 6A786CC45B2D4B77BDF55C1D /* TitilliumWeb-Black.ttf */, 309BA0207AA24FE9A0EBE61C /* TitilliumWeb-Bold.ttf */, 1E4EECD1122B401CAC190472 /* TitilliumWeb-BoldItalic.ttf */, @@ -370,7 +406,9 @@ files = ( 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 133638FA213D788900B0C079 /* InfoPlist.strings in Resources */, + F2B163152B753C9D00F6E487 /* TitilliumSansPro-Light.otf in Resources */, 194A5D2B1F027F5A0078620E /* Podfile in Resources */, + F2B1630F2B753C9D00F6E487 /* TitilliumSansPro-Semibold.otf in Resources */, 862C0E693C864E76BADCDFCC /* TitilliumWeb-Black.ttf in Resources */, BE1A42156484487BABBC4DED /* TitilliumWeb-Bold.ttf in Resources */, 8D109BF3B47F46FDA6B105CE /* TitilliumWeb-BoldItalic.ttf in Resources */, @@ -379,18 +417,28 @@ 859781B477BB45579FB9A9F2 /* TitilliumWeb-Italic.ttf in Resources */, 2AD40B9924CB049500E4124A /* LaunchScreen.storyboard in Resources */, F09FEB3C231818E3007071DB /* Localizable.strings in Resources */, + F2B163162B753C9D00F6E487 /* TitilliumSansPro-Regular.otf in Resources */, 570BBC8FC70C4A76ABF035AC /* TitilliumWeb-Light.ttf in Resources */, D18E075B28304466B6CA2381 /* TitilliumWeb-LightItalic.ttf in Resources */, + F2B163102B753C9D00F6E487 /* TitilliumSansPro-LightItalic.otf in Resources */, + F2B163182B753C9D00F6E487 /* TitilliumSansPro-Bold.otf in Resources */, 4D331CF68DAC4800A6D6297A /* TitilliumWeb-Regular.ttf in Resources */, 3A3CA4696BA44782A02FE37E /* TitilliumWeb-SemiBold.ttf in Resources */, 72E4B1EFF7D4414483079F91 /* TitilliumWeb-SemiBoldItalic.ttf in Resources */, + F2B163192B753C9D00F6E487 /* TitilliumSansPro-ThinItalic.otf in Resources */, + F2B163112B753C9D00F6E487 /* TitilliumSansPro-Italic.otf in Resources */, + F2B163172B753C9D00F6E487 /* TitilliumSansPro-BlackItalic.otf in Resources */, EFFA620FCD2D46F6B942663B /* LICENSE.txt in Resources */, 9975E38DE95949D28D07A275 /* RobotoMono-Bold.ttf in Resources */, 8E7BB01F1A6D4D79B17B4210 /* RobotoMono-BoldItalic.ttf in Resources */, 8788744508D34396942D3DB4 /* RobotoMono-Light.ttf in Resources */, + F2B1630E2B753C9D00F6E487 /* TitilliumSansPro-Black.otf in Resources */, + F2B163132B753C9D00F6E487 /* TitilliumSansPro-Thin.otf in Resources */, C2CF038002D24FEEAB41B336 /* RobotoMono-LightItalic.ttf in Resources */, 16E38CBD19D4437A9C020B21 /* RobotoMono-Regular.ttf in Resources */, 28E4866232804051B865FC10 /* RobotoMono-RegularItalic.ttf in Resources */, + F2B163122B753C9D00F6E487 /* TitilliumSansPro-SemiboldItalic.otf in Resources */, + F2B163142B753C9D00F6E487 /* TitilliumSansPro-BoldItalic.otf in Resources */, 69A5E1839C924EE5B8CD9470 /* ReadexPro-Regular.ttf in Resources */, 97F089B39469411991377615 /* DMMono-Medium.ttf in Resources */, ); diff --git a/ios/ItaliaApp/Info.plist b/ios/ItaliaApp/Info.plist index 687bf44ccdd..b59333c0ec3 100644 --- a/ios/ItaliaApp/Info.plist +++ b/ios/ItaliaApp/Info.plist @@ -110,6 +110,18 @@ RobotoMono-RegularItalic.ttf ReadexPro-Regular.ttf DMMono-Medium.ttf + TitilliumSansPro-Black.otf + TitilliumSansPro-BlackItalic.otf + TitilliumSansPro-Bold.otf + TitilliumSansPro-BoldItalic.otf + TitilliumSansPro-Italic.otf + TitilliumSansPro-Light.otf + TitilliumSansPro-LightItalic.otf + TitilliumSansPro-Regular.otf + TitilliumSansPro-Semibold.otf + TitilliumSansPro-SemiboldItalic.otf + TitilliumSansPro-Thin.otf + TitilliumSansPro-ThinItalic.otf UIBackgroundModes diff --git a/ios/link-assets-manifest.json b/ios/link-assets-manifest.json index 2327e470f54..2b9428a8c65 100644 --- a/ios/link-assets-manifest.json +++ b/ios/link-assets-manifest.json @@ -45,6 +45,54 @@ "path": "assets/fonts/TitilliumWeb/TitilliumWeb-SemiBoldItalic.ttf", "sha1": "f81d3a5f38c6bda1fb3547bf91fe0b68b54066c5" }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Black.otf", + "sha1": "becf8bd5053f5529785c9d1d975f2d6f54446d47" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-BlackItalic.otf", + "sha1": "079c243911ef9d6cbb25f5e25b0a0fcdc80e217a" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Bold.otf", + "sha1": "5348d5fdb96da25b0b444b6cf433100e17b2c944" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-BoldItalic.otf", + "sha1": "19b6af581aa9de369c5551b5c81af4567e96fd33" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Italic.otf", + "sha1": "149caa0987bb4765e34a34ccc315d89a9d5b259c" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Light.otf", + "sha1": "096f9b521b0fc0e7ebe6c60890fbfe312e7e4b01" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-LightItalic.otf", + "sha1": "9a74303f47edd127dc6f2c48301c9b0d4ffbbf17" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Regular.otf", + "sha1": "0a8be559a9a9d8ce47eb6ca3de9db16f42a00580" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Semibold.otf", + "sha1": "fa6cff8c0046996bc9fb124abf5799408eb3b369" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-SemiboldItalic.otf", + "sha1": "8502e9c211803bb2b0446348c69cf56763c987a3" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-Thin.otf", + "sha1": "dd3f889e6ca51de7e2006418b0125c02421fe574" + }, + { + "path": "assets/fonts/TitilliumSansPro/TitilliumSansPro-ThinItalic.otf", + "sha1": "fb0f0fcc215d93fd4241f3af18408b7c42b33b3d" + }, { "path": "assets/fonts/ReadexPro/ReadexPro-Regular.ttf", "sha1": "93e4080794b725f216a94b57ed62a51bc77bce91" diff --git a/package.json b/package.json index 3ec01a9ec0d..ce5ef2e6538 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "dependencies": { "@babel/plugin-transform-regenerator": "^7.18.6", "@gorhom/bottom-sheet": "^4.1.5", - "@pagopa/io-app-design-system": "1.20.1", + "@pagopa/io-app-design-system": "1.22.0", "@pagopa/io-pagopa-commons": "^3.1.0", "@pagopa/io-react-native-crypto": "^0.2.1", "@pagopa/io-react-native-login-utils": "^0.2.2", diff --git a/react-native.config.js b/react-native.config.js index e93843b2f5d..6a69861eff1 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -12,6 +12,7 @@ module.exports = { }, assets: [ "./assets/fonts/TitilliumWeb", + "./assets/fonts/TitilliumSansPro", "./assets/fonts/ReadexPro", "./assets/fonts/RobotoMono", "./assets/fonts/DMMono" diff --git a/ts/components/core/fonts.ts b/ts/components/core/fonts.ts index bf0fb1be368..56f141b2555 100644 --- a/ts/components/core/fonts.ts +++ b/ts/components/core/fonts.ts @@ -24,6 +24,10 @@ const fonts = { android: "TitilliumWeb", ios: "Titillium Web" }), + TitilliumSansPro: Platform.select({ + android: "TitilliumSansPro", + ios: "Titillium Sans Pro" + }), ReadexPro: Platform.select({ android: "ReadexPro", ios: "Readex Pro" diff --git a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap index 0c3bd733091..60558a65809 100644 --- a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap +++ b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap @@ -437,21 +437,26 @@ exports[`MessageAttachment Should match the snapshot when everything went fine 1 testID="FooterWithButtons" > = 8" -"@pagopa/io-app-design-system@1.20.1": - version "1.20.1" - resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.20.1.tgz#e439ad96e5dc73eeece2172f5141abfbcb30558e" - integrity sha512-ClSiEj5BrJpTMfR95wrhLz9FkFmitbZivPdEj2VRgi3Xusoclv8lb2RBUQetpPsVTK0cEV4uWPlthSJG/iNbiA== +"@pagopa/io-app-design-system@1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.22.0.tgz#bdebbb0a8d0e2a5f5a9765ece757a5dc43edbf23" + integrity sha512-jOx/skTgIbF6pRKXtJTA3gr2Kf9fSzGKEg5AnvOym8oQUm9QlYaZ3O1M8boHB/GQ4rqGg6WQPLd1d5Ouca4WwA== dependencies: "@pagopa/ts-commons" "^12.0.0" "@testing-library/jest-native" "^5.4.2" From d67f85f14bd5cb415e1779c91899aeb56b64031d Mon Sep 17 00:00:00 2001 From: Federico Mastrini Date: Fri, 9 Feb 2024 11:18:23 +0100 Subject: [PATCH 015/190] chore: [IOBP-525] Fix payment authorization webview on Android devices (#5474) Depends on https://github.com/pagopa/io-react-native-login-utils/pull/11 ## Short description This PR updates the library [io-react-native-login-utils](https://github.com/pagopa/io-react-native-login-utils). This new version of the library allows Android users to navigate to other apps while authorizing payment, avoiding closing the webview as soon as the user brings the IO app to the background. ## List of changes proposed in this pull request - Update `io-react-native-login-utils` depencency ## How to test Within **Profile > Playgrounds > New Wallet > Payment**, start a new payment flow. During the payment authorization, which is handler by a web view, try to navigate to other apps. Check that you can still finalize the payment. ## Preview https://github.com/pagopa/io-app/assets/6160324/2b0b9882-5f81-40f9-8159-0e257c7240c2 --- package.json | 2 +- ts/screens/authentication/idpAuthSessionHandler.tsx | 4 ++-- ts/utils/analytics.ts | 6 +++--- yarn.lock | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index ce5ef2e6538..fd6a18419ea 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "@pagopa/io-app-design-system": "1.22.0", "@pagopa/io-pagopa-commons": "^3.1.0", "@pagopa/io-react-native-crypto": "^0.2.1", - "@pagopa/io-react-native-login-utils": "^0.2.2", + "@pagopa/io-react-native-login-utils": "^1.0.0", "@pagopa/io-react-native-zendesk": "^0.3.28", "@pagopa/react-native-cie": "1.2.0", "@pagopa/ts-commons": "^10.15.0", diff --git a/ts/screens/authentication/idpAuthSessionHandler.tsx b/ts/screens/authentication/idpAuthSessionHandler.tsx index 79e96ad346f..2c433712fb5 100644 --- a/ts/screens/authentication/idpAuthSessionHandler.tsx +++ b/ts/screens/authentication/idpAuthSessionHandler.tsx @@ -257,12 +257,12 @@ export const AuthSessionPage = () => { (error?: LoginUtilsError) => { void mixpanelTrack("SPID_ERROR", { idp, - description: error?.userInfo.Error, + description: error?.userInfo?.error, errorType: ErrorType.LOADING_ERROR }); const backPressed: LoginUtilsErrorType = "NativeAuthSessionClosed"; - if (error?.userInfo.Error === backPressed) { + if (error?.userInfo?.error === backPressed) { onBack(); return; } diff --git a/ts/utils/analytics.ts b/ts/utils/analytics.ts index 5b55f71390f..a3b2c6310e7 100644 --- a/ts/utils/analytics.ts +++ b/ts/utils/analytics.ts @@ -190,9 +190,9 @@ export function trackSpidLoginError( if (isLoginUtilsError(e)) { void mixpanelTrack(eventName, { idp: idpName, - code: e.userInfo.StatusCode, - description: e.userInfo.Error, - domain: e.userInfo.URL + code: e.userInfo?.statusCode, + description: e.userInfo?.error, + domain: e.userInfo?.url }); } else { const error = e as Error; diff --git a/yarn.lock b/yarn.lock index 4f7447fdae1..b3653ee4e59 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3310,10 +3310,10 @@ resolved "https://registry.yarnpkg.com/@pagopa/io-react-native-crypto/-/io-react-native-crypto-0.2.1.tgz#3d62b0f0cf45b2a878e4ee0652239ea69089988e" integrity sha512-J+VP1kLXl1lQSJJYFMa+ljW9fWgMIYQskBJZFaVKPrtrZr8MJyrhNzlFUf2/EGwxm3kA+7o7budq6fPqdfVvvg== -"@pagopa/io-react-native-login-utils@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@pagopa/io-react-native-login-utils/-/io-react-native-login-utils-0.2.2.tgz#9b37787f98d94fac645e70bda926638b14e59d0d" - integrity sha512-rOChvrMsJ5QvfLvcsttGP6M5LZkOWhOD2YVRL4+bMCVqNRMsSDmteBNoMWzWlRcXrKyd2ZORgDEa1zPmMRMhTw== +"@pagopa/io-react-native-login-utils@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@pagopa/io-react-native-login-utils/-/io-react-native-login-utils-1.0.0.tgz#26aa8fe2ae2c30f18d2714264524fd281f0f2b12" + integrity sha512-9OXV4ebpZAGdFfbV5HOt0YbVhGvVb104KshCA7u74YnsTkJp32FhdIVwoqmerRwNO4rRjwwvDjWZdhT80IrOzA== "@pagopa/io-react-native-zendesk@^0.3.28": version "0.3.28" From 76896474e9d982178af94e06fa1351ff6b8b5173 Mon Sep 17 00:00:00 2001 From: Andrea Date: Fri, 9 Feb 2024 12:18:19 +0100 Subject: [PATCH 016/190] feat: [IOCOM-1012] Better accessibility on PDF preview with the new DS system (#5494) ## Short description This PR improves the accessibility on the PDF preview (a document's attachment) by grouping the preview under a single view. ## List of changes proposed in this pull request - Embedded PDFViewer component into a View with a custom label ## How to test Using the io-dev-api-server, check that both VoiceOver and TalkBack recognise the label and ignore the PDF content. --- locales/en/index.yml | 1 + locales/it/index.yml | 1 + ts/features/bonus/cgn/__e2e__/cgn.e2e.ts | 4 ++- .../MessageAttachment/PdfViewer.tsx | 34 +++++++++++-------- .../__snapshots__/PdfViewer.test.tsx.snap | 12 ++++++- .../MessageAttachment.test.tsx.snap | 12 ++++++- 6 files changed, 47 insertions(+), 17 deletions(-) diff --git a/locales/en/index.yml b/locales/en/index.yml index 86b799c8249..4ea0df8efa3 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -1926,6 +1926,7 @@ messagePDFPreview: open: "Open" save: "Save" savedAtLocation: "Document {{name}} was successfully saved in your Download folder." + pdfAccessibility: "Preview of the PDF document" errors: previewing: title: "Preview is not available" diff --git a/locales/it/index.yml b/locales/it/index.yml index 82d6f415927..28f4ac17667 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -1926,6 +1926,7 @@ messagePDFPreview: open: "Apri" save: "Salva" savedAtLocation: "Il documento {{name}} è stato salvato nella cartella Download." + pdfAccessibility: "Anteprima documento PDF" errors: previewing: title: "L’anteprima non è disponibile" diff --git a/ts/features/bonus/cgn/__e2e__/cgn.e2e.ts b/ts/features/bonus/cgn/__e2e__/cgn.e2e.ts index a4f879c725f..8e728cb7b37 100644 --- a/ts/features/bonus/cgn/__e2e__/cgn.e2e.ts +++ b/ts/features/bonus/cgn/__e2e__/cgn.e2e.ts @@ -28,7 +28,9 @@ const activateBonusSuccess = async () => { // The section has a loading spinner on top of // everything so we must wait for it to disappear - await waitFor(scrollView).toBeVisible().withTimeout(e2eWaitRenderTimeout); + await waitFor(scrollView) + .toBeVisible() + .withTimeout(2 * e2eWaitRenderTimeout); // make sure to scroll to bottom, otherwise in small devices the element will not be visible nor tappable await scrollView.scrollTo("bottom"); diff --git a/ts/features/messages/components/MessageAttachment/PdfViewer.tsx b/ts/features/messages/components/MessageAttachment/PdfViewer.tsx index b26f69052c2..04ec664299f 100644 --- a/ts/features/messages/components/MessageAttachment/PdfViewer.tsx +++ b/ts/features/messages/components/MessageAttachment/PdfViewer.tsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { StyleSheet } from "react-native"; +import { StyleSheet, View } from "react-native"; import Pdf from "react-native-pdf"; import { IOColors } from "@pagopa/io-app-design-system"; import I18n from "../../../../i18n"; @@ -31,19 +31,25 @@ export const PdfViewer = ({ isLoading={isLoading} loadingCaption={I18n.t("messageDetails.attachments.loading")} > - { - setIsLoading(false); - onLoadComplete?.(...args); - }} - onError={(...args) => { - setIsLoading(false); - onError?.(...args); - }} - /> + + { + setIsLoading(false); + onLoadComplete?.(...args); + }} + onError={(...args) => { + setIsLoading(false); + onError?.(...args); + }} + /> + ); }; diff --git a/ts/features/messages/components/MessageAttachment/__test__/__snapshots__/PdfViewer.test.tsx.snap b/ts/features/messages/components/MessageAttachment/__test__/__snapshots__/PdfViewer.test.tsx.snap index 07e6e5f8ead..c57271f18b7 100644 --- a/ts/features/messages/components/MessageAttachment/__test__/__snapshots__/PdfViewer.test.tsx.snap +++ b/ts/features/messages/components/MessageAttachment/__test__/__snapshots__/PdfViewer.test.tsx.snap @@ -245,6 +245,16 @@ exports[`PdfViewer should match the snapshot 1`] = ` }, ] } - /> + > + + `; diff --git a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap index 60558a65809..bd9e9673ce7 100644 --- a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap +++ b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap @@ -422,7 +422,17 @@ exports[`MessageAttachment Should match the snapshot when everything went fine 1 }, ] } - /> + > + + Date: Fri, 9 Feb 2024 17:03:06 +0100 Subject: [PATCH 017/190] chore: [IOBP-546] Fix payment E2E tests (#5498) ## Short description This PR fixes the payment E2E tests. ## How to test E2E tests should pass --- ts/__e2e__/payment.e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/__e2e__/payment.e2e.ts b/ts/__e2e__/payment.e2e.ts index 3e1c0ae9cf0..ffb77c98d17 100644 --- a/ts/__e2e__/payment.e2e.ts +++ b/ts/__e2e__/payment.e2e.ts @@ -151,7 +151,7 @@ const completePaymentFlow = async () => { const openPaymentFromMessage = async () => { const messageWithPayment = element( - by.id(`MessageListItem_00000000000000000000000021`) + by.id(`MessageListItem_00000000000000000000000019`) ); await waitFor(messageWithPayment) .toBeVisible() From e7ed3310efecc62b68b2d2b77808ffee42996496 Mon Sep 17 00:00:00 2001 From: LazyAfternoons Date: Fri, 9 Feb 2024 18:18:53 +0100 Subject: [PATCH 018/190] chore(Cross): [IOAPPX-246] Update `Podfile.lock` for `io-react-native-login-utils` (#5499) ## Short description This PR updates the `Podfile.lock` after the `io-react-native-login-utils` update of [this](https://github.com/pagopa/io-app/pull/5474) PR. ## How to test Run `yarn` and `cd ios && bundler exec pod install && cd ..`. Finally, run `git status` and ensure that there are no changes. --- ios/Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 5cca289fdad..69e75f9eab7 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -137,7 +137,7 @@ PODS: - OpenSSL-Universal (1.1.1100) - pagopa-io-react-native-crypto (0.2.1): - React-Core - - pagopa-io-react-native-login-utils (0.2.2): + - pagopa-io-react-native-login-utils (1.0.0): - React-Core - PromisesObjC (2.0.0) - Protobuf (3.19.1) @@ -945,7 +945,7 @@ SPEC CHECKSUMS: nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c pagopa-io-react-native-crypto: 644fece16966f2e1ea1f872344ee5a3c6c8761a1 - pagopa-io-react-native-login-utils: 51a58dc0e5fe3cba461759b9e98e795fc22e17c8 + pagopa-io-react-native-login-utils: 442a5e2ab8db2c476fed2cff6d7ad16388ff1f21 PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58 Protobuf: 3724efa50cb2846d7ccebc8691c574e85fd74471 RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a From 0d72c2af4330af9a6ea53cd5984b80356766c6df Mon Sep 17 00:00:00 2001 From: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> Date: Mon, 12 Feb 2024 09:58:09 +0100 Subject: [PATCH 019/190] chore: [IOPID-1448] Fix double profile upsert (#5486) ## Short description This PR fixes the double profile upsert with the same profile version, causing a snackbar error. This PR removes a workaround for slow devices that it was probably still there but no more necessary.

Test on slow device

| Test on slow device | | - | |

## List of changes proposed in this pull request - [ts/store/reducers/profile.ts](https://github.com/pagopa/io-app/pull/5486/files#diff-a48057473d6b62f0ea5bfaf0ed2ba3e8a390fdef1e1e3ff7e9760fd8c4a86ff6): Add `last_app_version` in the merged profile. - [ts/sagas/startup.ts](https://github.com/pagopa/io-app/pull/5486/files#diff-8a5b2f3967d681b976fe673762bd1061f5b430130c880c1195b76af06362cf31): Remove _slow devices_ workaround. ## How to test Run the app on slow devices and test all login flows (different profiles, first/second onboarding) and check that the mixpanel data screen is presented to the user. Closes https://github.com/pagopa/io-app/issues/5464 Co-authored-by: Alice Di Rico <83651704+Ladirico@users.noreply.github.com> --- ts/sagas/startup.ts | 18 ++---------------- ts/store/reducers/profile.ts | 1 + 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/ts/sagas/startup.ts b/ts/sagas/startup.ts index dcfde4a0500..2c4b60dd7cc 100644 --- a/ts/sagas/startup.ts +++ b/ts/sagas/startup.ts @@ -64,19 +64,12 @@ import { } from "../store/actions/application"; import { sessionExpired } from "../store/actions/authentication"; import { backendStatusLoadSuccess } from "../store/actions/backendStatus"; -import { - differentProfileLoggedIn, - setProfileHashedFiscalCode -} from "../store/actions/crossSessions"; +import { differentProfileLoggedIn } from "../store/actions/crossSessions"; import { previousInstallationDataDeleteSuccess } from "../store/actions/installation"; import { setMixpanelEnabled } from "../store/actions/mixpanel"; import { navigateToPrivacyScreen } from "../store/actions/navigation"; import { clearOnboarding } from "../store/actions/onboarding"; -import { - clearCache, - profileLoadSuccess, - resetProfileState -} from "../store/actions/profile"; +import { clearCache, resetProfileState } from "../store/actions/profile"; import { startupLoadSuccess } from "../store/actions/startup"; import { loadUserDataProcessing } from "../store/actions/userDataProcessing"; import { @@ -460,13 +453,6 @@ export function* initializeApplicationSaga( } } } - // We dispatch a load success to allow the execution of the check - // which save the hashed code tax code - const profile = yield* select(profileSelector); - if (pot.isSome(profile)) { - yield* put(profileLoadSuccess(profile.value)); - yield* take(setProfileHashedFiscalCode); - } // Ask to accept ToS if there is a new available version yield* call(checkAcceptedTosSaga, userProfile); diff --git a/ts/store/reducers/profile.ts b/ts/store/reducers/profile.ts index 715fc9bb1ad..3900fc957aa 100644 --- a/ts/store/reducers/profile.ts +++ b/ts/store/reducers/profile.ts @@ -288,6 +288,7 @@ const reducer = ( return pot.some({ ...currentProfile, email: newProfile.email, + last_app_version: newProfile.last_app_version, is_inbox_enabled: newProfile.is_inbox_enabled === true, is_email_enabled: newProfile.is_email_enabled === true, is_email_validated: newProfile.is_email_validated === true, From fbd8cb3949d4f330949a65ad3d80e35044ef4129 Mon Sep 17 00:00:00 2001 From: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> Date: Mon, 12 Feb 2024 10:11:55 +0100 Subject: [PATCH 020/190] fix: [IOPID-1423,IOPID-1439] Fix double MP event tracking (#5496) ## Short description This PR fixes a double MP event tracking ## How to test Run the app and navigate to the Opt-In Screen. Check on MP that only one event of type `LOGIN_SESSION_OPTIN_2` is tracked. Co-authored-by: Alice Di Rico <83651704+Ladirico@users.noreply.github.com> --- ts/features/fastLogin/analytics/optinAnalytics.ts | 2 +- ts/screens/authentication/NewOptInScreen.tsx | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/ts/features/fastLogin/analytics/optinAnalytics.ts b/ts/features/fastLogin/analytics/optinAnalytics.ts index 68648063e94..1e4b398893e 100644 --- a/ts/features/fastLogin/analytics/optinAnalytics.ts +++ b/ts/features/fastLogin/analytics/optinAnalytics.ts @@ -6,7 +6,7 @@ import { buildEventProperties } from "../../../utils/analytics"; export function trackLoginSessionOptIn() { void mixpanelTrack( - "LOGIN_SESSION_OPTIN", + "LOGIN_SESSION_OPTIN_2", buildEventProperties("UX", "screen_view") ); } diff --git a/ts/screens/authentication/NewOptInScreen.tsx b/ts/screens/authentication/NewOptInScreen.tsx index c79b4429a29..0c6ff59591d 100644 --- a/ts/screens/authentication/NewOptInScreen.tsx +++ b/ts/screens/authentication/NewOptInScreen.tsx @@ -55,10 +55,6 @@ const NewOptInScreen = () => { trackLoginSessionOptIn(); }); - useOnFirstRender(() => { - trackLoginSessionOptIn(); - }); - const navigateToIdpPage = (isLV: boolean) => { if (isLV) { void trackLoginSessionOptIn365(store.getState()); From ae5ffeb80012092caf87890c5b0a98a01593f3d2 Mon Sep 17 00:00:00 2001 From: Federico Mastrini Date: Mon, 12 Feb 2024 11:42:06 +0100 Subject: [PATCH 021/190] chore: [IOBP-535] Added german language for iOS app (#5491) ## Short description This PR adds the german language in the supported languages list in the App Store page. ## List of changes proposed in this pull request - Added `de` locale to iOS project files ## How to test n/a --------- Co-authored-by: Jacopo Pompilii Co-authored-by: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> --- ios/ItaliaApp.xcodeproj/project.pbxproj | 5 +++++ ios/ItaliaApp/de.lproj/InfoPlist.strings | 7 +++++++ ios/ItaliaApp/de.lproj/Localizable.strings | 2 ++ 3 files changed, 14 insertions(+) create mode 100644 ios/ItaliaApp/de.lproj/InfoPlist.strings create mode 100755 ios/ItaliaApp/de.lproj/Localizable.strings diff --git a/ios/ItaliaApp.xcodeproj/project.pbxproj b/ios/ItaliaApp.xcodeproj/project.pbxproj index 70cb0f69da3..55c8a11da24 100644 --- a/ios/ItaliaApp.xcodeproj/project.pbxproj +++ b/ios/ItaliaApp.xcodeproj/project.pbxproj @@ -113,6 +113,8 @@ 8FF948EE9F5FAEABE8ADDAE1 /* Pods-ItaliaApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ItaliaApp.release.xcconfig"; path = "Target Support Files/Pods-ItaliaApp/Pods-ItaliaApp.release.xcconfig"; sourceTree = ""; }; AFE8D23873DE458BB54EB46B /* RobotoMono-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-Light.ttf"; path = "../assets/fonts/RobotoMono/RobotoMono-Light.ttf"; sourceTree = ""; }; B021D4CC17ED4D54B7944FED /* TitilliumWeb-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-SemiBold.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-SemiBold.ttf"; sourceTree = ""; }; + B57593872B70FFA400674515 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; + B57593882B70FFA400674515 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = ItaliaApp/de.lproj/Localizable.strings; sourceTree = ""; }; B65D221FCB5A461FBC44285D /* TitilliumWeb-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-LightItalic.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-LightItalic.ttf"; sourceTree = ""; }; B7088D9B42BA4275A767BEFF /* RobotoMono-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-Bold.ttf"; path = "../assets/fonts/RobotoMono/RobotoMono-Bold.ttf"; sourceTree = ""; }; CED8B1FF1E254583BB3F285F /* TitilliumWeb-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumWeb-SemiBoldItalic.ttf"; path = "../assets/fonts/TitilliumWeb/TitilliumWeb-SemiBoldItalic.ttf"; sourceTree = ""; }; @@ -380,6 +382,7 @@ en, Base, it, + de, ); mainGroup = 83CBB9F61A601CBA00E9B192; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; @@ -769,6 +772,7 @@ children = ( 133638FB213D788900B0C079 /* en */, 133638FD213D78DB00B0C079 /* it */, + B57593872B70FFA400674515 /* de */, ); name = InfoPlist.strings; path = ItaliaApp; @@ -779,6 +783,7 @@ children = ( F09FEB0E231818E3007071DB /* en */, F09FEB3D231818F0007071DB /* it */, + B57593882B70FFA400674515 /* de */, ); name = Localizable.strings; sourceTree = ""; diff --git a/ios/ItaliaApp/de.lproj/InfoPlist.strings b/ios/ItaliaApp/de.lproj/InfoPlist.strings new file mode 100644 index 00000000000..80f19a40455 --- /dev/null +++ b/ios/ItaliaApp/de.lproj/InfoPlist.strings @@ -0,0 +1,7 @@ +"NSCameraUsageDescription" = "Du kannst QR-Codes lesen und pagoPA-Mitteilungen bezahlen."; +"NSCalendarsUsageDescription" = "Du kannst Fälligkeiten in deinem Kalender eintragen und eine Benachrichtigung einstellen."; +"NSContactsUsageDescription" = "IO benötigt Zugriff auf deine Kontakte, damit du sie als Teilnehmer zu Terminen hinzufügen kannst."; +"NSFaceIDUsageDescription" = "IO benötigt Zugriff auf Face ID, um eine schnellere Authentifizierung zu ermöglichen."; +"NSPhotoLibraryUsageDescription" = "Du kannst Gutscheine und Zertifikate speichern und Screenshots und Zahlungsmitteilungen hochladen."; +"NSMicrophoneUsageDescription" = "IO benötigt Zugriff auf das Mikrofon, wenn du eine Sprachnachricht senden möchtest."; +"NSPhotoLibraryAddUsageDescription" = "Du kannst Bilder aus der App auf deinem Gerät speichern."; \ No newline at end of file diff --git a/ios/ItaliaApp/de.lproj/Localizable.strings b/ios/ItaliaApp/de.lproj/Localizable.strings new file mode 100755 index 00000000000..43bb22c1062 --- /dev/null +++ b/ios/ItaliaApp/de.lproj/Localizable.strings @@ -0,0 +1,2 @@ +"ALERT_DEVICE_ROOTED_TITLE" = "Gerät mit Jailbreak"; +"ALERT_DEVICE_ROOTED_DESC" = "Dieses Gerät ist gejailbreakt, du kannst diese App aus Sicherheitsgründen nicht verwenden"; From 3e9881974908a2932320e45260b517b8827c8101 Mon Sep 17 00:00:00 2001 From: Damiano Plebani Date: Mon, 12 Feb 2024 18:58:30 +0100 Subject: [PATCH 022/190] chore(Cross): [IOAPPX-234] Remove `@react-native-picker/picker` dependency (#5454) --- ios/Podfile.lock | 6 ------ package.json | 1 - yarn.lock | 5 ----- 3 files changed, 12 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 69e75f9eab7..fb12ef4835c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -488,8 +488,6 @@ PODS: - React-Core - RNCClipboard (1.10.0): - React-Core - - RNCPicker (2.4.1): - - React-Core - RNCPushNotificationIOS (1.8.0): - React-Core - RNDateTimePicker (3.5.2): @@ -677,7 +675,6 @@ DEPENDENCIES: - RNCalendarEvents (from `../node_modules/react-native-calendar-events`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - - "RNCPicker (from `../node_modules/@react-native-picker/picker`)" - "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)" - "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)" - RNDeviceInfo (from `../node_modules/react-native-device-info`) @@ -869,8 +866,6 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-async-storage/async-storage" RNCClipboard: :path: "../node_modules/@react-native-clipboard/clipboard" - RNCPicker: - :path: "../node_modules/@react-native-picker/picker" RNCPushNotificationIOS: :path: "../node_modules/@react-native-community/push-notification-ios" RNDateTimePicker: @@ -1001,7 +996,6 @@ SPEC CHECKSUMS: RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3 RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca RNCClipboard: f1736c75ab85b627a4d57587edb4b60999c4dd80 - RNCPicker: abc646b53a3d28ccfa3232c927a0ca52e0cf024d RNCPushNotificationIOS: 61a7c72bd1ebad3568025957d001e0f0e7b32191 RNDateTimePicker: 7658208086d86d09e1627b5c34ba0cf237c60140 RNDeviceInfo: 5795b418ed3451ebcaf39384e6cf51f60cb931c9 diff --git a/package.json b/package.json index fd6a18419ea..b9ce3b95498 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,6 @@ "@react-native-community/push-notification-ios": "^1.8.0", "@react-native-community/slider": "^3.0.3", "@react-native-cookies/cookies": "^6.2.1", - "@react-native-picker/picker": "^2.4.1", "@react-navigation/bottom-tabs": "6.5.11", "@react-navigation/material-top-tabs": "6.6.5", "@react-navigation/native": "6.1.9", diff --git a/yarn.lock b/yarn.lock index b3653ee4e59..2041cf35791 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3651,11 +3651,6 @@ resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-1.16.8.tgz#2126ca54d4a5a3e9ea5e3f39ad1e6643f8e4b3d4" integrity sha512-pacdQDX6V6EmjF+HoiIh6u++qx4mTK0WnhgUHRc01B+Qt5eoeUwseBqmqfTSXTx/aHDEd6PiIw7UGvKgFoqgFQ== -"@react-native-picker/picker@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-2.4.1.tgz#92feb7e0672d739624517dae04bf4de1452dfcdc" - integrity sha512-1XWy3IQgwr7MWd30KdY1iUh2gQZD+JiotN1ifj/ptFUYKon/0UFwngKQaWCO/CP/FdLl20/huSSLwKedYrdMMA== - "@react-native/assets@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" From 416aff73e508ad2bf9950f20c30cafdca3eb4c25 Mon Sep 17 00:00:00 2001 From: Andrea Date: Tue, 13 Feb 2024 09:49:02 +0100 Subject: [PATCH 023/190] feat: [IOCOM-1011] Accessibility on "Includes Attachments"-Icon on the new DS Message Details screen (#5497) ## Short description This PR improves the accessibility on the icon that tells the user that a message includes attachments ## List of changes proposed in this pull request - Added the proper accessibility label to such icon ## How to test Using the io-dev-api-server, check that both VoiceOver and TalkBack recognise the label on a message that includes attachments. --- locales/en/index.yml | 1 + locales/it/index.yml | 1 + package.json | 2 +- ts/features/design-system/core/DSModules.tsx | 2 +- .../MessageDetailsAttachmentItem.tsx | 3 +- .../MessageDetail/ModuleAttachment.tsx | 254 ------------------ .../MessageDetailsAttachments.test.tsx.snap | 2 + .../messages/screens/MessageAttachment.tsx | 2 +- .../messages/screens/MessageDetailsScreen.tsx | 8 +- .../MessageAttachment.test.tsx.snap | 10 +- ts/features/pn/components/MessageDetails.tsx | 8 +- .../MessageDetails.test.tsx.snap | 8 +- .../MessageDetailsScreen.test.tsx.snap | 10 +- yarn.lock | 8 +- 14 files changed, 40 insertions(+), 279 deletions(-) delete mode 100644 ts/features/messages/components/MessageDetail/ModuleAttachment.tsx diff --git a/locales/en/index.yml b/locales/en/index.yml index 4ea0df8efa3..5057416a163 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -1879,6 +1879,7 @@ messages: success: "Successfully unarchived." failure: "Failed to unarchive" messageDetails: + accessibilityAttachmentIcon: "Includes attachments" contextualHelpTitle: Message details contextualHelpContent: !include messages/message_detail.md headerTitle: Message diff --git a/locales/it/index.yml b/locales/it/index.yml index 28f4ac17667..a5625986b9e 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -1879,6 +1879,7 @@ messages: success: "Ripristino effettuato." failure: "Il ripristino non è andato a buon fine" messageDetails: + accessibilityAttachmentIcon: "Contiene allegati" contextualHelpTitle: Dettagli del messaggio contextualHelpContent: !include messages/message_detail.md headerTitle: Messaggio diff --git a/package.json b/package.json index b9ce3b95498..22aa06caa1f 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "dependencies": { "@babel/plugin-transform-regenerator": "^7.18.6", "@gorhom/bottom-sheet": "^4.1.5", - "@pagopa/io-app-design-system": "1.22.0", + "@pagopa/io-app-design-system": "1.23.1", "@pagopa/io-pagopa-commons": "^3.1.0", "@pagopa/io-react-native-crypto": "^0.2.1", "@pagopa/io-react-native-login-utils": "^1.0.0", diff --git a/ts/features/design-system/core/DSModules.tsx b/ts/features/design-system/core/DSModules.tsx index 51bea42bc7b..7c3805b637d 100644 --- a/ts/features/design-system/core/DSModules.tsx +++ b/ts/features/design-system/core/DSModules.tsx @@ -3,6 +3,7 @@ import { Alert, View, ImageSourcePropType } from "react-native"; import { ButtonExtendedOutline, IOThemeContext, + ModuleAttachment, ModuleCheckout, ModuleIDP, ModulePaymentNotice, @@ -16,7 +17,6 @@ import { DesignSystemScreen } from "../components/DesignSystemScreen"; import { LegacyModuleAttachment } from "../../messages/components/MessageDetail/LegacyModuleAttachment"; import { useIOSelector } from "../../../store/hooks"; import { isDesignSystemEnabledSelector } from "../../../store/reducers/persistedPreferences"; -import { ModuleAttachment } from "../../messages/components/MessageDetail/ModuleAttachment"; const onButtonPress = () => { Alert.alert("Alert", "Action triggered"); diff --git a/ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx b/ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx index 6fb01c633db..553b01a4c0b 100644 --- a/ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx +++ b/ts/features/messages/components/MessageDetail/MessageDetailsAttachmentItem.tsx @@ -1,11 +1,10 @@ import React from "react"; -import { VSpacer } from "@pagopa/io-app-design-system"; +import { ModuleAttachment, VSpacer } from "@pagopa/io-app-design-system"; import { ServiceId } from "../../../../../definitions/backend/ServiceId"; import { ThirdPartyAttachment } from "../../../../../definitions/backend/ThirdPartyAttachment"; import { UIMessageId } from "../../types"; import { useAttachmentDownload } from "../../hooks/useAttachmentDownload"; import I18n from "../../../../i18n"; -import { ModuleAttachment } from "./ModuleAttachment"; type MessageDetailsAttachmentItemProps = { attachment: ThirdPartyAttachment; diff --git a/ts/features/messages/components/MessageDetail/ModuleAttachment.tsx b/ts/features/messages/components/MessageDetail/ModuleAttachment.tsx deleted file mode 100644 index 675b1fa3af8..00000000000 --- a/ts/features/messages/components/MessageDetail/ModuleAttachment.tsx +++ /dev/null @@ -1,254 +0,0 @@ -import React, { useCallback } from "react"; -import { - GestureResponderEvent, - Pressable, - PressableProps, - StyleSheet, - View -} from "react-native"; -import { - Badge, - IOColors, - IOListItemVisualParams, - IOScaleValues, - IOSpringValues, - Icon, - LabelSmall, - LoadingSpinner, - VSpacer, - WithTestID, - useIOTheme -} from "@pagopa/io-app-design-system"; -import Animated, { - Extrapolate, - interpolate, - useAnimatedStyle, - useDerivedValue, - useSharedValue, - withSpring -} from "react-native-reanimated"; -import Placeholder from "rn-placeholder"; - -type PartialProps = WithTestID<{ - title: string; - format: "doc" | "pdf"; - isLoading?: boolean; - loadingAccessibilityLabel?: string; - isFetching?: boolean; - fetchingAccessibilityLabel?: string; - onPress: (event: GestureResponderEvent) => void; -}>; - -export type ModuleAttachmentProps = PartialProps & - Pick< - PressableProps, - "onPress" | "accessibilityLabel" | "disabled" | "testID" - >; - -type SkeletonComponentProps = { - loadingAccessibilityLabel?: string; -}; - -const styles = StyleSheet.create({ - button: { - flexDirection: "row", - alignItems: "center", - paddingHorizontal: 16, - paddingVertical: 16, - borderRadius: 8, - borderColor: IOColors.bluegreyLight, - backgroundColor: IOColors.white, - borderStyle: "solid", - borderWidth: 1 - }, - innerContent: { - flex: 1, - flexDirection: "column" - }, - rightSection: { - marginLeft: IOListItemVisualParams.iconMargin, - alignItems: "center" - } -}); - -const DISABLED_OPACITY = 0.5; - -const ModuleAttachmentContent = ({ - isFetching, - format, - title, - testID -}: Pick< - ModuleAttachmentProps, - "isFetching" | "format" | "title" | "testID" ->) => { - const theme = useIOTheme(); - const IconOrActivityIndicatorComponent = () => { - if (isFetching) { - const activityIndicatorTestId = testID - ? `${testID}_activityIndicator` - : undefined; - return ; - } - - return ( - - ); - }; - - return ( - <> - - - {title} - - - - - - - - - - - ); -}; - -/** - * The `ModuleAttachment` component is a custom button component with an extended outline style. - * It provides an animated scaling effect when pressed. - * - * @param {string} accessibilityLabel - Optional accessibility label. - * @param {boolean} disabled - If true, the button is disabled. - * @param {string} fetchingAccessibilityLabel - Optional accessibility label to use during fetching. - * @param {string} format - Badge content. PDF or DOC. - * @param {boolean} isLoading - If true, displays a skeleton loading component. - * @param {boolean} isFetching - If true, displays an activity indicator. - * @param {string} loadingAccessibilityLabel - Optional accessibility label to use during loading. - * @param {function} onPress - The function to be executed when the item is pressed. - * @param {string} testID - The test ID for testing purposes. - * @param {string} title - The title text to display. - * - */ -export const ModuleAttachment = ({ - accessibilityLabel, - disabled = false, - fetchingAccessibilityLabel, - format, - isLoading = false, - isFetching = false, - loadingAccessibilityLabel, - onPress, - testID, - title -}: ModuleAttachmentProps) => { - const isPressed: Animated.SharedValue = useSharedValue(0); - - // Scaling transformation applied when the button is pressed - const animationScaleValue = IOScaleValues?.magnifiedButton?.pressedState; - - const scaleTraversed = useDerivedValue(() => - withSpring(isPressed.value, IOSpringValues.button) - ); - - // Interpolate animation values from `isPressed` values - const animatedStyle = useAnimatedStyle(() => { - const scale = interpolate( - scaleTraversed.value, - [0, 1], - [1, animationScaleValue], - Extrapolate.CLAMP - ); - - return { - transform: [{ scale }] - }; - }); - - const onPressIn = useCallback(() => { - // eslint-disable-next-line functional/immutable-data - isPressed.value = 1; - }, [isPressed]); - - const onPressOut = useCallback(() => { - // eslint-disable-next-line functional/immutable-data - isPressed.value = 0; - }, [isPressed]); - - const handleOnPress = useCallback( - (event: GestureResponderEvent) => { - if (isFetching) { - return; - } - onPress(event); - }, - [isFetching, onPress] - ); - - if (isLoading) { - return ( - - ); - } - - const pressableAccessibilityLabel = - (isFetching && !!fetchingAccessibilityLabel - ? fetchingAccessibilityLabel - : accessibilityLabel) ?? title; - return ( - - - - - - ); -}; - -const SkeletonComponent = ({ - loadingAccessibilityLabel -}: SkeletonComponentProps) => ( - - - - - - - -); diff --git a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap index dc9dbb6a234..b9abaa2f920 100644 --- a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap +++ b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsAttachments.test.tsx.snap @@ -331,6 +331,7 @@ exports[`MessageDetailsAttachments Should match snapshot with 1 attachment 1`] = } > {hasAttachments && ( - + )} {messageDetails.dueDate && expiringInfo === "expired" && ( diff --git a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap index bd9e9673ce7..8555fbe1ba2 100644 --- a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap +++ b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap @@ -750,6 +750,7 @@ exports[`MessageAttachment Should match the snapshot when everything went fine 1 - PDF Preview - + /> - PDF Preview - + /> { {attachmentList.length > 0 && ( - + )} diff --git a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap index 4145f2982c0..67668e93a02 100644 --- a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap +++ b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap @@ -502,16 +502,16 @@ exports[`MessageDetails component should match the snapshot with default props 1 } >
= 8" -"@pagopa/io-app-design-system@1.22.0": - version "1.22.0" - resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.22.0.tgz#bdebbb0a8d0e2a5f5a9765ece757a5dc43edbf23" - integrity sha512-jOx/skTgIbF6pRKXtJTA3gr2Kf9fSzGKEg5AnvOym8oQUm9QlYaZ3O1M8boHB/GQ4rqGg6WQPLd1d5Ouca4WwA== +"@pagopa/io-app-design-system@1.23.1": + version "1.23.1" + resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.23.1.tgz#acdc3cb37cc157c60a5a3f993223141757f49c8f" + integrity sha512-pOd36qeV6c9dALih/3+ro5g/+izQWVf5J0u4sKSr0LF9zTBZ/sDRSpd4Z3/qrrXkKcopOkMEg3lqR6TJrdsGeA== dependencies: "@pagopa/ts-commons" "^12.0.0" "@testing-library/jest-native" "^5.4.2" From 50ad93995196c4228b1691748fb99dcc0c79548f Mon Sep 17 00:00:00 2001 From: Alice Di Rico <83651704+Ladirico@users.noreply.github.com> Date: Tue, 13 Feb 2024 12:47:16 +0100 Subject: [PATCH 024/190] chore: [IOPID-1416] Fix logic to show toast error (#5502) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Short description Fix of the logic on the services screen that displayed the error banner ## List of changes proposed in this pull request - Add condition to the if

| ❌ Before fix ❌ | ✅ After fix ✅ | | - | - | |

## How to test Run the application, click on services tab, then click on profile and change email. If the email is already taken (error 409, PROFILE_EMAIL_IS_NOT_UNIQUE_ERROR), the red banner should not be visible. Ps: if you are using the dev server use email "mario.error@prova.com" --- ts/screens/services/ServicesHomeScreen.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ts/screens/services/ServicesHomeScreen.tsx b/ts/screens/services/ServicesHomeScreen.tsx index 3efe85ba3a3..e5047abd38f 100644 --- a/ts/screens/services/ServicesHomeScreen.tsx +++ b/ts/screens/services/ServicesHomeScreen.tsx @@ -234,7 +234,11 @@ class ServicesHomeScreen extends React.Component { public componentDidUpdate(prevProps: Props, prevState: State) { // if some errors occur while updating profile, we will show a message in a toast // profile could be updated by enabling/disabling on or more channel of a service - if (pot.isError(this.props.profile) && !pot.isError(prevProps.profile)) { + if ( + pot.isError(this.props.profile) && + !pot.isError(prevProps.profile) && + this.props.profile.error.type !== "PROFILE_EMAIL_IS_NOT_UNIQUE_ERROR" + ) { showToast( I18n.t("serviceDetail.onUpdateEnabledChannelsFailure"), "danger" From 366f2088b1f73eea784dd1f2ef0720088d054191 Mon Sep 17 00:00:00 2001 From: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> Date: Tue, 13 Feb 2024 14:28:48 +0100 Subject: [PATCH 025/190] fix: [IOPID-1546] Fix services refresh token error (#5505) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Short description This PR fixes the missing services refresh token handling. It takes the chance to refactor the `withRefreshApiCall` in terms of its input parameters so that it can be called like that: - `withRefreshApiCall(apiCall(...apiCallParams), action)` - `withRefreshApiCall(apiCall(...apiCallParams), { errorMessage: "foo"})` - `withRefreshApiCall(apiCall(...apiCallParams), { skipErrorMessage: true})` - `withRefreshApiCall(apiCall(...apiCallParams))`
Demo

| ✅ | ❌ | | - | - | |

## List of changes proposed in this pull request * [ts/features/fastLogin/saga/utils/index.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Ffeatures%2FfastLogin%2Fsaga%2Futils%2Findex.ts) * [ts/sagas/profile.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fprofile.ts) * [ts/sagas/services/servicePreference/handleGetServicePreferenceSaga.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fservices%2FservicePreference%2FhandleGetServicePreferenceSaga.ts) * [ts/sagas/services/servicePreference/handleUpsertServicePreferenceSaga.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fservices%2FservicePreference%2FhandleUpsertServicePreferenceSaga.ts) * [ts/sagas/startup/__tests__/loadServiceDetailRequestHandler.test.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fstartup%2F__tests__%2FloadServiceDetailRequestHandler.test.ts) * [ts/sagas/startup/__tests__/loadVisibleServicesHandler.test.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fstartup%2F__tests__%2FloadVisibleServicesHandler.test.ts) * [ts/sagas/startup/loadServiceDetailRequestHandler.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fstartup%2FloadServiceDetailRequestHandler.ts) * [ts/sagas/startup/loadVisibleServicesHandler.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fstartup%2FloadVisibleServicesHandler.ts) * [ts/sagas/user/userMetadata.ts](https://github.com/pagopa/io-app/blob/7193af46b2117472731391dbaa73827e48593bd3/ts%2Fsagas%2Fuser%2FuserMetadata.ts) ## How to test Run the app against the dev-server with Fast Login enabled. Go to services and wait for the session to expire. Then navigate to a service detail screen. The token refresh saga should be triggered. --------- Co-authored-by: Alice Di Rico <83651704+Ladirico@users.noreply.github.com> --- ts/features/fastLogin/saga/utils/index.ts | 41 +++++++++++++++++-- ts/sagas/profile.ts | 4 +- .../handleGetServicePreferenceSaga.ts | 17 +++++++- .../handleUpsertServicePreferenceSaga.ts | 20 +++++++-- .../loadServiceDetailRequestHandler.test.ts | 13 +++++- .../loadVisibleServicesHandler.test.ts | 14 +++++-- .../loadServiceDetailRequestHandler.ts | 28 +++++++++++-- .../startup/loadVisibleServicesHandler.ts | 17 +++++--- ts/sagas/user/userMetadata.ts | 16 +++++++- 9 files changed, 141 insertions(+), 29 deletions(-) diff --git a/ts/features/fastLogin/saga/utils/index.ts b/ts/features/fastLogin/saga/utils/index.ts index cbbdb3df550..7562a148acb 100644 --- a/ts/features/fastLogin/saga/utils/index.ts +++ b/ts/features/fastLogin/saga/utils/index.ts @@ -11,13 +11,48 @@ import { savePendingAction } from "../../store/actions/tokenRefreshActions"; +type RefreshApiCallErrorHandlingTypeWithTypeField = { + errorMessage?: string; + skipThrowingError?: boolean; + // Because we check the "type" field in a type guard + // looking for a Redux Action, + // we must be sure to never put a property named "type" + // inside this object. + type?: never; +}; + +export type RefreshApiCallErrorHandlingType = Omit< + RefreshApiCallErrorHandlingTypeWithTypeField, + "type" +>; + +function isReduxAction
( + obj?: A | RefreshApiCallErrorHandlingType +): obj is A { + return !!(obj && "type" in obj); +} + +// The function implementation with flexible parameter handling +// This has been done as a refactor to avoid the use of optional parameters export function* withRefreshApiCall( apiCall: Promise | R>>, - action?: A | undefined, - errorMessage?: string, - skipThrowingError: boolean = false + actionOrErrorHandling?: A | RefreshApiCallErrorHandlingType ): SagaIterator | R>> { const response = yield* call(() => apiCall); + + // eslint-disable-next-line functional/no-let + let action: A | undefined; + // eslint-disable-next-line functional/no-let + let errorHandling: typeof actionOrErrorHandling = {}; + + if (isReduxAction(actionOrErrorHandling)) { + action = actionOrErrorHandling; + } else { + errorHandling = + (actionOrErrorHandling as RefreshApiCallErrorHandlingType) ?? {}; + } + + const { errorMessage, skipThrowingError } = errorHandling; // BEWARE: we can cast to any only because we know for sure that f will // always return a Promise> if (E.isRight(response) && (response.right as any).status === 401) { diff --git a/ts/sagas/profile.ts b/ts/sagas/profile.ts index c2b708e9a7c..33ff880353f 100644 --- a/ts/sagas/profile.ts +++ b/ts/sagas/profile.ts @@ -171,9 +171,7 @@ function* createOrUpdateProfileSaga( createOrUpdateProfile({ body: newProfile }), - undefined, - undefined, - true + { skipThrowingError: true } )) as unknown as SagaCallReturnType; if (E.isLeft(response)) { diff --git a/ts/sagas/services/servicePreference/handleGetServicePreferenceSaga.ts b/ts/sagas/services/servicePreference/handleGetServicePreferenceSaga.ts index c8311e88d7c..3fc253e66e5 100644 --- a/ts/sagas/services/servicePreference/handleGetServicePreferenceSaga.ts +++ b/ts/sagas/services/servicePreference/handleGetServicePreferenceSaga.ts @@ -1,5 +1,5 @@ import * as E from "fp-ts/lib/Either"; -import { call, put } from "typed-redux-saga/macro"; +import { call, put, select } from "typed-redux-saga/macro"; import { ActionType } from "typesafe-actions"; import { BackendClient } from "../../../api/backend"; import { loadServicePreference } from "../../../store/actions/services/servicePreference"; @@ -7,6 +7,8 @@ import { ServicePreferenceResponseFailure } from "../../../types/services/Servic import { SagaCallReturnType } from "../../../types/utils"; import { getGenericError, getNetworkError } from "../../../utils/errors"; import { readablePrivacyReport } from "../../../utils/reporters"; +import { withRefreshApiCall } from "../../../features/fastLogin/saga/utils"; +import { isFastLoginEnabledSelector } from "../../../features/fastLogin/store/selectors"; export const mapKinds: Record< number, @@ -30,9 +32,20 @@ export function* handleGetServicePreference( ) { try { const response: SagaCallReturnType = - yield* call(getServicePreference, { service_id: action.payload }); + (yield* call( + withRefreshApiCall, + getServicePreference({ service_id: action.payload }), + action + )) as unknown as SagaCallReturnType; if (E.isRight(response)) { + if (response.right.status === 401) { + const isFastLoginEnabled = yield* select(isFastLoginEnabledSelector); + if (isFastLoginEnabled) { + return; + } + } + if (response.right.status === 200) { yield* put( loadServicePreference.success({ diff --git a/ts/sagas/services/servicePreference/handleUpsertServicePreferenceSaga.ts b/ts/sagas/services/servicePreference/handleUpsertServicePreferenceSaga.ts index a6d54d8bf0d..8627c6725a1 100644 --- a/ts/sagas/services/servicePreference/handleUpsertServicePreferenceSaga.ts +++ b/ts/sagas/services/servicePreference/handleUpsertServicePreferenceSaga.ts @@ -14,6 +14,8 @@ import { isServicePreferenceResponseSuccess } from "../../../types/services/Serv import { SagaCallReturnType } from "../../../types/utils"; import { getGenericError, getNetworkError } from "../../../utils/errors"; import { readablePrivacyReport } from "../../../utils/reporters"; +import { withRefreshApiCall } from "../../../features/fastLogin/saga/utils"; +import { isFastLoginEnabledSelector } from "../../../features/fastLogin/store/selectors"; import { mapKinds } from "./handleGetServicePreferenceSaga"; /** @@ -88,12 +90,22 @@ export function* handleUpsertServicePreference( } const response: SagaCallReturnType = - yield* call(upsertServicePreferences, { - service_id: serviceIdEither.right, - body: updatingPreference - }); + (yield* call( + withRefreshApiCall, + upsertServicePreferences({ + service_id: serviceIdEither.right, + body: updatingPreference + }), + action + )) as unknown as SagaCallReturnType; if (E.isRight(response)) { + if (response.right.status === 401) { + const isFastLoginEnabled = yield* select(isFastLoginEnabledSelector); + if (isFastLoginEnabled) { + return; + } + } if (response.right.status === 200) { yield* put( upsertServicePreference.success({ diff --git a/ts/sagas/startup/__tests__/loadServiceDetailRequestHandler.test.ts b/ts/sagas/startup/__tests__/loadServiceDetailRequestHandler.test.ts index 5937666cba4..4c573c4ffdc 100644 --- a/ts/sagas/startup/__tests__/loadServiceDetailRequestHandler.test.ts +++ b/ts/sagas/startup/__tests__/loadServiceDetailRequestHandler.test.ts @@ -11,6 +11,7 @@ import { loadServiceDetail } from "../../../store/actions/services"; import { handleOrganizationNameUpdateSaga } from "../../services/handleOrganizationNameUpdateSaga"; import { handleServiceReadabilitySaga } from "../../services/handleServiceReadabilitySaga"; import { loadServiceDetailRequestHandler } from "../loadServiceDetailRequestHandler"; +import { withRefreshApiCall } from "../../../features/fastLogin/saga/utils"; const mockedServiceId = "A01" as ServiceId; const getService = jest.fn(); @@ -32,7 +33,11 @@ describe("loadServiceDetailRequestHandler", () => { it("returns an error if backend response is 500", () => { testSaga(loadServiceDetailRequestHandler, getService, mockedAction) .next() - .call(getService, { service_id: mockedServiceId }) + .call( + withRefreshApiCall, + getService({ service_id: mockedServiceId }), + mockedAction + ) .next(E.right({ status: 500, value: "generic error" })) .put( loadServiceDetail.failure({ @@ -47,7 +52,11 @@ describe("loadServiceDetailRequestHandler", () => { it("returns service detail if the backend response is 200", () => { testSaga(loadServiceDetailRequestHandler, getService, mockedAction) .next() - .call(getService, { service_id: mockedServiceId }) + .call( + withRefreshApiCall, + getService({ service_id: mockedServiceId }), + mockedAction + ) .next(E.right({ status: 200, value: mockedService })) .put(loadServiceDetail.success(mockedService)) .next() diff --git a/ts/sagas/startup/__tests__/loadVisibleServicesHandler.test.ts b/ts/sagas/startup/__tests__/loadVisibleServicesHandler.test.ts index 8eb955f5948..0d659f2f3bf 100644 --- a/ts/sagas/startup/__tests__/loadVisibleServicesHandler.test.ts +++ b/ts/sagas/startup/__tests__/loadVisibleServicesHandler.test.ts @@ -19,7 +19,9 @@ describe("loadVisibleServicesHandler", () => { it("returns a generic error if backend response is 500", () => { testSaga(loadVisibleServicesRequestHandler, getVisibleServices) .next() - .call(withRefreshApiCall, getVisibleServices({})) + .call(withRefreshApiCall, getVisibleServices({}), { + skipThrowingError: true + }) .next( E.right({ status: 500, @@ -39,10 +41,12 @@ describe("loadVisibleServicesHandler", () => { it("the session expiration is handled by withRefreshApiCall", () => { testSaga(loadVisibleServicesRequestHandler, getVisibleServices) .next() - .call(withRefreshApiCall, getVisibleServices({})) + .call(withRefreshApiCall, getVisibleServices({}), { + skipThrowingError: true + }) .next( E.right({ - status: 401, + status: 403, value: "An error occurred loading visible services" }) ) @@ -59,7 +63,9 @@ describe("loadVisibleServicesHandler", () => { it("return an array of visibile services if backend response is 200", () => { testSaga(loadVisibleServicesRequestHandler, getVisibleServices) .next() - .call(withRefreshApiCall, getVisibleServices({})) + .call(withRefreshApiCall, getVisibleServices({}), { + skipThrowingError: true + }) .next(E.right({ status: 200, value: { items: mockedVisibleServices } })) .put(loadVisibleServices.success(mockedVisibleServices)) .next(); diff --git a/ts/sagas/startup/loadServiceDetailRequestHandler.ts b/ts/sagas/startup/loadServiceDetailRequestHandler.ts index 87403c9f71e..af257fbb660 100644 --- a/ts/sagas/startup/loadServiceDetailRequestHandler.ts +++ b/ts/sagas/startup/loadServiceDetailRequestHandler.ts @@ -2,7 +2,14 @@ import { readableReport } from "@pagopa/ts-commons/lib/reporters"; import { Millisecond } from "@pagopa/ts-commons/lib/units"; import * as E from "fp-ts/lib/Either"; import { buffers, channel, Channel } from "redux-saga"; -import { call, fork, put, take, takeLatest } from "typed-redux-saga/macro"; +import { + call, + fork, + put, + select, + take, + takeLatest +} from "typed-redux-saga/macro"; import { ActionType, getType } from "typesafe-actions"; import { ServiceId } from "../../../definitions/backend/ServiceId"; import { PathTraversalSafePathParam } from "../../../definitions/backend/PathTraversalSafePathParam"; @@ -19,6 +26,8 @@ import { convertUnknownToError } from "../../utils/errors"; import { handleOrganizationNameUpdateSaga } from "../services/handleOrganizationNameUpdateSaga"; import { handleServiceReadabilitySaga } from "../services/handleServiceReadabilitySaga"; import { trackServiceDetailLoadingStatistics } from "../../utils/analytics"; +import { withRefreshApiCall } from "../../features/fastLogin/saga/utils"; +import { isFastLoginEnabledSelector } from "../../features/fastLogin/store/selectors"; /** * A generator to load the service details from the Backend @@ -38,14 +47,25 @@ export function* loadServiceDetailRequestHandler( throw Error("Unable to decode ServiceId to PathTraversalSafePathParam"); } - const response = yield* call(getService, { - service_id: serviceIdEither.right - }); + const response = (yield* call( + withRefreshApiCall, + getService({ + service_id: serviceIdEither.right + }), + action + )) as unknown as SagaCallReturnType; if (E.isLeft(response)) { throw Error(readableReport(response.left)); } + if (response.right.status === 401) { + const isFastLoginEnabled = yield* select(isFastLoginEnabledSelector); + if (isFastLoginEnabled) { + return; + } + } + if (response.right.status === 200) { yield* put(loadServiceDetail.success(response.right.value)); diff --git a/ts/sagas/startup/loadVisibleServicesHandler.ts b/ts/sagas/startup/loadVisibleServicesHandler.ts index ccd264b77cf..8826c0a0527 100644 --- a/ts/sagas/startup/loadVisibleServicesHandler.ts +++ b/ts/sagas/startup/loadVisibleServicesHandler.ts @@ -1,6 +1,6 @@ import { readableReport } from "@pagopa/ts-commons/lib/reporters"; import * as E from "fp-ts/lib/Either"; -import { call, put } from "typed-redux-saga/macro"; +import { call, put, select } from "typed-redux-saga/macro"; import { BackendClient } from "../../api/backend"; import { loadVisibleServices } from "../../store/actions/services"; import { ReduxSagaEffect, SagaCallReturnType } from "../../types/utils"; @@ -8,6 +8,7 @@ import { convertUnknownToError } from "../../utils/errors"; import { refreshStoredServices } from "../services/refreshStoredServices"; import { removeUnusedStoredServices } from "../services/removeUnusedStoredServices"; import { withRefreshApiCall } from "../../features/fastLogin/saga/utils"; +import { isFastLoginEnabledSelector } from "../../features/fastLogin/store/selectors"; /** * A generator to load the service details from the Backend @@ -24,13 +25,19 @@ export function* loadVisibleServicesRequestHandler( SagaCallReturnType > { try { - const response = (yield* call( - withRefreshApiCall, - getVisibleServices({}) - )) as unknown as SagaCallReturnType; + const response = (yield* call(withRefreshApiCall, getVisibleServices({}), { + skipThrowingError: true + })) as unknown as SagaCallReturnType; + if (E.isLeft(response)) { throw Error(readableReport(response.left)); } + if (response.right.status === 401) { + const isFastLoginEnabled = yield* select(isFastLoginEnabledSelector); + if (isFastLoginEnabled) { + return; + } + } if (response.right.status === 200) { const { items: visibleServices } = response.right.value; yield* put(loadVisibleServices.success(visibleServices)); diff --git a/ts/sagas/user/userMetadata.ts b/ts/sagas/user/userMetadata.ts index b0cf4cf1452..24e3794d310 100644 --- a/ts/sagas/user/userMetadata.ts +++ b/ts/sagas/user/userMetadata.ts @@ -21,6 +21,8 @@ import { } from "../../store/reducers/userMetadata"; import { ReduxSagaEffect, SagaCallReturnType } from "../../types/utils"; import { convertUnknownToError } from "../../utils/errors"; +import { withRefreshApiCall } from "../../features/fastLogin/saga/utils"; +import { isFastLoginEnabledSelector } from "../../features/fastLogin/store/selectors"; /** * A saga to fetch user metadata from the Backend @@ -33,14 +35,24 @@ export function* fetchUserMetadata( SagaCallReturnType > { try { - const response = yield* call(getUserMetadata, {}); + const response = (yield* call(withRefreshApiCall, getUserMetadata({}), { + skipThrowingError: true + })) as unknown as SagaCallReturnType; // Can't decode response if (E.isLeft(response)) { throw Error(readableReport(response.left)); } - if (response.right.status !== 200) { + if (response.right.status === 401) { + const isFastLoginEnabled = yield* select(isFastLoginEnabledSelector); + if (isFastLoginEnabled) { + // Return an empty object cause we have a token refresh + // The flow that called this API, must recall it once the token is refreshed + return E.right(emptyUserMetadata); + } + } + if (response.right.status === 204) { // Return an empty object cause profile has no metadata yet (204 === No Content) return E.right(emptyUserMetadata); From 2bbb5864b043468443ca98f024e9601fe106f1c5 Mon Sep 17 00:00:00 2001 From: Andrea Date: Tue, 13 Feb 2024 15:52:37 +0100 Subject: [PATCH 026/190] [chore] E2E tests split (#5504) ## Short description This PR reduces the overhead on failing E2E tests when running the CI/CD. ## List of changes proposed in this pull request - Each E2E test has been assigned to its own file, in order to avoid repeating all the tests when one fails ## How to test Check that all E2E tests run successfully. --- ts/__e2e__/login.e2e.ts | 8 +- ts/__e2e__/payment.e2e.ts | 166 ------------------ ts/__e2e__/payment00.e2e.ts | 20 +++ ts/__e2e__/payment01.e2e.ts | 30 ++++ ts/__e2e__/payment02.e2e.ts | 37 ++++ ts/__e2e__/payment03.e2e.ts | 18 ++ ts/__e2e__/payment04.e2e.ts | 32 ++++ ts/__e2e__/utils.ts | 50 ++++++ ts/features/bonus/cgn/__e2e__/cgn00.e2e.ts | 23 +++ ts/features/bonus/cgn/__e2e__/cgn01.e2e.ts | 23 +++ ts/features/bonus/cgn/__e2e__/cgn02.e2e.ts | 36 ++++ .../cgn/__e2e__/{cgn.e2e.ts => utils.ts} | 69 +------- ...red.e2e.ts => euCovidCertExpired00.e2e.ts} | 25 ++- ...ked.e2e.ts => euCovidCertRevoked00.e2e.ts} | 25 ++- .../__e2e__/euCovidCertValid.e2e.ts | 113 ------------ .../__e2e__/euCovidCertValid00.e2e.ts | 35 ++++ .../__e2e__/euCovidCertValid01.e2e.ts | 34 ++++ .../__e2e__/euCovidCertValid02.e2e.ts | 30 ++++ .../__e2e__/euCovidCertValid03.e2e.ts | 48 +++++ ts/features/euCovidCert/__e2e__/utils.ts | 20 +++ ts/features/messages/__e2e__/messages.e2e.ts | 38 ++-- .../__e2e__/creditCardOnboarding.e2e.ts | 106 ++++++----- 22 files changed, 531 insertions(+), 455 deletions(-) delete mode 100644 ts/__e2e__/payment.e2e.ts create mode 100644 ts/__e2e__/payment00.e2e.ts create mode 100644 ts/__e2e__/payment01.e2e.ts create mode 100644 ts/__e2e__/payment02.e2e.ts create mode 100644 ts/__e2e__/payment03.e2e.ts create mode 100644 ts/__e2e__/payment04.e2e.ts create mode 100644 ts/features/bonus/cgn/__e2e__/cgn00.e2e.ts create mode 100644 ts/features/bonus/cgn/__e2e__/cgn01.e2e.ts create mode 100644 ts/features/bonus/cgn/__e2e__/cgn02.e2e.ts rename ts/features/bonus/cgn/__e2e__/{cgn.e2e.ts => utils.ts} (52%) rename ts/features/euCovidCert/__e2e__/{euCovidCertExpired.e2e.ts => euCovidCertExpired00.e2e.ts} (63%) rename ts/features/euCovidCert/__e2e__/{euCovidCertRevoked.e2e.ts => euCovidCertRevoked00.e2e.ts} (63%) delete mode 100644 ts/features/euCovidCert/__e2e__/euCovidCertValid.e2e.ts create mode 100644 ts/features/euCovidCert/__e2e__/euCovidCertValid00.e2e.ts create mode 100644 ts/features/euCovidCert/__e2e__/euCovidCertValid01.e2e.ts create mode 100644 ts/features/euCovidCert/__e2e__/euCovidCertValid02.e2e.ts create mode 100644 ts/features/euCovidCert/__e2e__/euCovidCertValid03.e2e.ts create mode 100644 ts/features/euCovidCert/__e2e__/utils.ts diff --git a/ts/__e2e__/login.e2e.ts b/ts/__e2e__/login.e2e.ts index 6a0b1371b26..b6f6e2b2ac0 100644 --- a/ts/__e2e__/login.e2e.ts +++ b/ts/__e2e__/login.e2e.ts @@ -1,9 +1,7 @@ import { loginWithSPID } from "./utils"; -describe("User Login using SPID", () => { - describe("when the user never logged in before", () => { - it("should let the user log in with SPID", async () => { - await loginWithSPID(); - }); +describe("User Login using SPID, when the user never logged in before", () => { + it("should let the user log in with SPID", async () => { + await loginWithSPID(); }); }); diff --git a/ts/__e2e__/payment.e2e.ts b/ts/__e2e__/payment.e2e.ts deleted file mode 100644 index ffb77c98d17..00000000000 --- a/ts/__e2e__/payment.e2e.ts +++ /dev/null @@ -1,166 +0,0 @@ -import I18n from "../i18n"; -import { formatNumberCentsToAmount } from "../utils/stringBuilder"; -import { e2eWaitRenderTimeout } from "./config"; -import { closeKeyboard, ensureLoggedIn } from "./utils"; - -describe("Payment", () => { - beforeEach(async () => { - await device.launchApp({ newInstance: true }); - await ensureLoggedIn(); - }); - - describe("When the user want to pay starting from a message", () => { - describe("And press back in the payment transaction summary screen", () => { - it("Should return to the message details screen", async () => { - await openPaymentFromMessage(); - const backButton = element(by.id("back-button-transaction-summary")); - await waitFor(backButton) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await backButton.tap(); - await waitFor(element(by.text(I18n.t("messageDetails.headerTitle")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - }); - - describe("when navigating to the wallet", () => { - it("then the wallet root screen should be visible", async () => { - await openPaymentFromMessage(); - - const backButton1 = element(by.id("back-button-transaction-summary")); - await waitFor(backButton1) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await backButton1.tap(); - - const backButton2 = element(by.id("back-button")); - await waitFor(backButton2) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await backButton2.tap(); - - const walletButton = element( - by.text(I18n.t("global.navigator.wallet")) - ); - await waitFor(walletButton) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await walletButton.tap(); - - await waitFor(element(by.text(I18n.t("wallet.payNotice")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - }); - }); - }); - - describe("And press cancel in the payment confirm screen", () => { - it("Should return to the message details screen", async () => { - await openPaymentFromMessage(); - await waitFor(element(by.text(I18n.t("wallet.continue")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await element(by.text(I18n.t("wallet.continue"))).tap(); - - await waitFor(element(by.text(I18n.t("wallet.ConfirmPayment.header")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - const cancelButton = element(by.id("cancelPaymentButton")); - // const cancelButton = element(by.id("cancelPaymentButton")); - await waitFor(cancelButton).toExist().withTimeout(e2eWaitRenderTimeout); - await cancelButton.tap(); - // I18n.t("wallet.ConfirmPayment.confirmCancelPayment") - const confirmCancel = element( - by.label(I18n.t("wallet.ConfirmPayment.confirmCancelPayment")) - ).atIndex(0); - await waitFor(confirmCancel) - .toExist() - .withTimeout(e2eWaitRenderTimeout); - await confirmCancel.tap(); - - await waitFor(element(by.text(I18n.t("messageDetails.headerTitle")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - }); - }); - - // TODO: this could be executed just one time until we have a way to reset the dev server between tests - it("Should allow the user to complete a payment", async () => { - await openPaymentFromMessage(); - await completePaymentFlow(); - }); - }); - - describe("When the user want to pay using the manual insertion", () => { - it("Should allow the user to complete a payment", async () => { - await element(by.text(I18n.t("global.navigator.wallet"))).tap(); - await element(by.text(I18n.t("wallet.payNotice"))).tap(); - - await element(by.id("barcodeScanBaseScreenTabInput")).tap(); - - const matchNoticeCodeInput = by.id("NoticeCodeInputMask"); - await waitFor(element(matchNoticeCodeInput)) - .toExist() - .withTimeout(e2eWaitRenderTimeout); - - await element(matchNoticeCodeInput).typeText("123123123123123123"); - await element(by.id("EntityCodeInputMask")).typeText("12345678901"); - - // Close the keyboard - await closeKeyboard(); - - await element(by.text(I18n.t("global.buttons.continue"))).tap(); - - await completePaymentFlow(); - }); - }); -}); - -const completePaymentFlow = async () => { - await waitFor(element(by.text(I18n.t("wallet.continue")))) - .toExist() - .withTimeout(e2eWaitRenderTimeout); - await element(by.text(I18n.t("wallet.continue"))).tap(); - - const matchConfirmPayment = by.text( - `${I18n.t("wallet.ConfirmPayment.pay")} ${formatNumberCentsToAmount( - 2322, - true - )}` - ); - await waitFor(element(matchConfirmPayment)) - .toExist() - .withTimeout(e2eWaitRenderTimeout); - await element(matchConfirmPayment).tap(); - - await waitFor( - element( - by.text( - I18n.t("payment.paidConfirm", { - amount: formatNumberCentsToAmount(2322, true) - }) - ) - ) - ) - .toExist() - .withTimeout(e2eWaitRenderTimeout); - - await element(by.text(I18n.t("wallet.outcomeMessage.cta.close"))).tap(); -}; - -const openPaymentFromMessage = async () => { - const messageWithPayment = element( - by.id(`MessageListItem_00000000000000000000000019`) - ); - await waitFor(messageWithPayment) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await messageWithPayment.tap(); - - const seeNoticeButton = element(by.text(I18n.t("messages.cta.seeNotice"))); - await waitFor(seeNoticeButton) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await seeNoticeButton.tap(); -}; diff --git a/ts/__e2e__/payment00.e2e.ts b/ts/__e2e__/payment00.e2e.ts new file mode 100644 index 00000000000..79748e53d91 --- /dev/null +++ b/ts/__e2e__/payment00.e2e.ts @@ -0,0 +1,20 @@ +import I18n from "../i18n"; +import { e2eWaitRenderTimeout } from "./config"; +import { ensureLoggedIn, openPaymentFromMessage } from "./utils"; + +describe("Payment", () => { + beforeEach(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("When the user want to pay starting from a message and press back in the payment transaction summary screen, it should return to the message details screen", async () => { + await openPaymentFromMessage(); + const backButton = element(by.id("back-button-transaction-summary")); + await waitFor(backButton).toBeVisible().withTimeout(e2eWaitRenderTimeout); + await backButton.tap(); + await waitFor(element(by.text(I18n.t("messageDetails.headerTitle")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + }); +}); diff --git a/ts/__e2e__/payment01.e2e.ts b/ts/__e2e__/payment01.e2e.ts new file mode 100644 index 00000000000..0d73beff9a4 --- /dev/null +++ b/ts/__e2e__/payment01.e2e.ts @@ -0,0 +1,30 @@ +import I18n from "../i18n"; +import { e2eWaitRenderTimeout } from "./config"; +import { ensureLoggedIn, openPaymentFromMessage } from "./utils"; + +describe("Payment", () => { + beforeEach(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("When the user want to pay starting from a message and press back in the payment transaction summary screen, when navigating to the wallet then the wallet root screen should be visible", async () => { + await openPaymentFromMessage(); + + const backButton1 = element(by.id("back-button-transaction-summary")); + await waitFor(backButton1).toBeVisible().withTimeout(e2eWaitRenderTimeout); + await backButton1.tap(); + + const backButton2 = element(by.id("back-button")); + await waitFor(backButton2).toBeVisible().withTimeout(e2eWaitRenderTimeout); + await backButton2.tap(); + + const walletButton = element(by.text(I18n.t("global.navigator.wallet"))); + await waitFor(walletButton).toBeVisible().withTimeout(e2eWaitRenderTimeout); + await walletButton.tap(); + + await waitFor(element(by.text(I18n.t("wallet.payNotice")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + }); +}); diff --git a/ts/__e2e__/payment02.e2e.ts b/ts/__e2e__/payment02.e2e.ts new file mode 100644 index 00000000000..c050a48077d --- /dev/null +++ b/ts/__e2e__/payment02.e2e.ts @@ -0,0 +1,37 @@ +import I18n from "../i18n"; +import { e2eWaitRenderTimeout } from "./config"; +import { ensureLoggedIn, openPaymentFromMessage } from "./utils"; + +describe("Payment", () => { + beforeEach(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("When the user want to pay starting from a message and press cancel in the payment confirm screen, it should return to the message details screen", async () => { + await openPaymentFromMessage(); + await waitFor(element(by.text(I18n.t("wallet.continue")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + await element(by.text(I18n.t("wallet.continue"))).tap(); + + await waitFor(element(by.text(I18n.t("wallet.ConfirmPayment.header")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + const cancelButton = element(by.id("cancelPaymentButton")); + // const cancelButton = element(by.id("cancelPaymentButton")); + await waitFor(cancelButton).toExist().withTimeout(e2eWaitRenderTimeout); + await cancelButton.tap(); + // I18n.t("wallet.ConfirmPayment.confirmCancelPayment") + const confirmCancel = element( + by.label(I18n.t("wallet.ConfirmPayment.confirmCancelPayment")) + ).atIndex(0); + await waitFor(confirmCancel).toExist().withTimeout(e2eWaitRenderTimeout); + await confirmCancel.tap(); + + await waitFor(element(by.text(I18n.t("messageDetails.headerTitle")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + }); +}); diff --git a/ts/__e2e__/payment03.e2e.ts b/ts/__e2e__/payment03.e2e.ts new file mode 100644 index 00000000000..d68ccd949d2 --- /dev/null +++ b/ts/__e2e__/payment03.e2e.ts @@ -0,0 +1,18 @@ +import { + completePaymentFlow, + ensureLoggedIn, + openPaymentFromMessage +} from "./utils"; + +describe("Payment", () => { + beforeEach(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + // TODO: this could be executed just one time until we have a way to reset the dev server between tests + it("When the user want to pay starting from a message, it should allow the user to complete a payment", async () => { + await openPaymentFromMessage(); + await completePaymentFlow(); + }); +}); diff --git a/ts/__e2e__/payment04.e2e.ts b/ts/__e2e__/payment04.e2e.ts new file mode 100644 index 00000000000..eb75d994afe --- /dev/null +++ b/ts/__e2e__/payment04.e2e.ts @@ -0,0 +1,32 @@ +import I18n from "../i18n"; +import { e2eWaitRenderTimeout } from "./config"; +import { closeKeyboard, completePaymentFlow, ensureLoggedIn } from "./utils"; + +describe("Payment", () => { + beforeEach(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("When the user want to pay using the manual insertion, it should allow the user to complete a payment", async () => { + await element(by.text(I18n.t("global.navigator.wallet"))).tap(); + await element(by.text(I18n.t("wallet.payNotice"))).tap(); + + await element(by.id("barcodeScanBaseScreenTabInput")).tap(); + + const matchNoticeCodeInput = by.id("NoticeCodeInputMask"); + await waitFor(element(matchNoticeCodeInput)) + .toExist() + .withTimeout(e2eWaitRenderTimeout); + + await element(matchNoticeCodeInput).typeText("123123123123123123"); + await element(by.id("EntityCodeInputMask")).typeText("12345678901"); + + // Close the keyboard + await closeKeyboard(); + + await element(by.text(I18n.t("global.buttons.continue"))).tap(); + + await completePaymentFlow(); + }); +}); diff --git a/ts/__e2e__/utils.ts b/ts/__e2e__/utils.ts index ef0e68658fb..fe1194feeb1 100644 --- a/ts/__e2e__/utils.ts +++ b/ts/__e2e__/utils.ts @@ -1,3 +1,5 @@ +import { formatNumberCentsToAmount } from "../utils/stringBuilder"; +import I18n from "../i18n"; import { e2ePinChar1, e2ePinChar2, @@ -127,3 +129,51 @@ export const closeKeyboard = async () => { await element(by.label("Done")).atIndex(0).tap(); } }; + +export const openPaymentFromMessage = async () => { + const messageWithPayment = element( + by.id(`MessageListItem_00000000000000000000000019`) + ); + await waitFor(messageWithPayment) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + await messageWithPayment.tap(); + + const seeNoticeButton = element(by.text(I18n.t("messages.cta.seeNotice"))); + await waitFor(seeNoticeButton) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + await seeNoticeButton.tap(); +}; + +export const completePaymentFlow = async () => { + await waitFor(element(by.text(I18n.t("wallet.continue")))) + .toExist() + .withTimeout(e2eWaitRenderTimeout); + await element(by.text(I18n.t("wallet.continue"))).tap(); + + const matchConfirmPayment = by.text( + `${I18n.t("wallet.ConfirmPayment.pay")} ${formatNumberCentsToAmount( + 2322, + true + )}` + ); + await waitFor(element(matchConfirmPayment)) + .toExist() + .withTimeout(e2eWaitRenderTimeout); + await element(matchConfirmPayment).tap(); + + await waitFor( + element( + by.text( + I18n.t("payment.paidConfirm", { + amount: formatNumberCentsToAmount(2322, true) + }) + ) + ) + ) + .toExist() + .withTimeout(e2eWaitRenderTimeout); + + await element(by.text(I18n.t("wallet.outcomeMessage.cta.close"))).tap(); +}; diff --git a/ts/features/bonus/cgn/__e2e__/cgn00.e2e.ts b/ts/features/bonus/cgn/__e2e__/cgn00.e2e.ts new file mode 100644 index 00000000000..96b609d2db7 --- /dev/null +++ b/ts/features/bonus/cgn/__e2e__/cgn00.e2e.ts @@ -0,0 +1,23 @@ +import { e2eWaitRenderTimeout } from "../../../../__e2e__/config"; +import { ensureLoggedIn } from "../../../../__e2e__/utils"; +import I18n from "../../../../i18n"; +import { ID_CGN_TYPE } from "../../common/utils"; +import { activateCGNBonusSuccess, deactivateCGNCardIfNeeded } from "./utils"; + +describe("CGN", () => { + beforeEach(async () => { + await deactivateCGNCardIfNeeded(); + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("When the user want to start activation from bonus list, it should complete activation", async () => { + await element(by.text(I18n.t("global.navigator.wallet"))).tap(); + await element(by.id("walletAddNewPaymentMethodTestId")).tap(); + await element(by.id("bonusNameTestId")).tap(); + const cgnBonusItem = element(by.id(`AvailableBonusItem-${ID_CGN_TYPE}`)); + await waitFor(cgnBonusItem).toBeVisible().withTimeout(e2eWaitRenderTimeout); + await cgnBonusItem.tap(); + await activateCGNBonusSuccess(); + }); +}); diff --git a/ts/features/bonus/cgn/__e2e__/cgn01.e2e.ts b/ts/features/bonus/cgn/__e2e__/cgn01.e2e.ts new file mode 100644 index 00000000000..0a1d0e19508 --- /dev/null +++ b/ts/features/bonus/cgn/__e2e__/cgn01.e2e.ts @@ -0,0 +1,23 @@ +import { e2eWaitRenderTimeout } from "../../../../__e2e__/config"; +import { ensureLoggedIn } from "../../../../__e2e__/utils"; +import I18n from "../../../../i18n"; +import { activateCGNBonusSuccess, deactivateCGNCardIfNeeded } from "./utils"; + +describe("CGN", () => { + beforeEach(async () => { + await deactivateCGNCardIfNeeded(); + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("When the user want to start activation from card carousel, it should complete activation", async () => { + await element(by.text(I18n.t("global.navigator.wallet"))).tap(); + // TODO: This could be fail if we will add more e2e tests on the addition of a new payment method (just do a single swipe, not a scroll) + await waitFor(element(by.id("walletPaymentMethodsTestId"))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + await element(by.id("walletPaymentMethodsTestId")).swipe("up"); + await element(by.id("FeaturedCardCGNTestID")).tap(); + await activateCGNBonusSuccess(); + }); +}); diff --git a/ts/features/bonus/cgn/__e2e__/cgn02.e2e.ts b/ts/features/bonus/cgn/__e2e__/cgn02.e2e.ts new file mode 100644 index 00000000000..b043ad46a1d --- /dev/null +++ b/ts/features/bonus/cgn/__e2e__/cgn02.e2e.ts @@ -0,0 +1,36 @@ +import { e2eWaitRenderTimeout } from "../../../../__e2e__/config"; +import { ensureLoggedIn } from "../../../../__e2e__/utils"; +import I18n from "../../../../i18n"; +import { activateCGNBonusSuccess, deactivateCGNCardIfNeeded } from "./utils"; + +const CGN_TITLE = "Carta Giovani Nazionale"; +const SERVICES_LIST = "services-list"; + +describe("CGN", () => { + beforeEach(async () => { + await deactivateCGNCardIfNeeded(); + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("When the user want to start activation from service detail, it should complete activation", async () => { + await element(by.text(I18n.t("global.navigator.services"))).tap(); + + await waitFor(element(by.id(SERVICES_LIST))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + await waitFor(element(by.id(CGN_TITLE))) + .toBeVisible() + .whileElement(by.id(SERVICES_LIST)) + .scroll(300, "down"); + + await element(by.id(CGN_TITLE)).tap(); + const startActivationCta = element(by.id("service-activate-bonus-button")); + await waitFor(startActivationCta) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + await startActivationCta.tap(); + await activateCGNBonusSuccess(); + }); +}); diff --git a/ts/features/bonus/cgn/__e2e__/cgn.e2e.ts b/ts/features/bonus/cgn/__e2e__/utils.ts similarity index 52% rename from ts/features/bonus/cgn/__e2e__/cgn.e2e.ts rename to ts/features/bonus/cgn/__e2e__/utils.ts index 8e728cb7b37..dced57ab20b 100644 --- a/ts/features/bonus/cgn/__e2e__/cgn.e2e.ts +++ b/ts/features/bonus/cgn/__e2e__/utils.ts @@ -1,13 +1,8 @@ import fetch from "node-fetch"; import { e2eWaitRenderTimeout } from "../../../../__e2e__/config"; -import { ensureLoggedIn } from "../../../../__e2e__/utils"; import I18n from "../../../../i18n"; -import { ID_CGN_TYPE } from "../../common/utils"; -const CGN_TITLE = "Carta Giovani Nazionale"; -const SERVICES_LIST = "services-list"; - -const activateBonusSuccess = async () => { +export const activateCGNBonusSuccess = async () => { const startActivationCta = element(by.id("activate-bonus-button")); await waitFor(startActivationCta) .toBeVisible() @@ -48,67 +43,7 @@ const activateBonusSuccess = async () => { await alertCTA.tap(); }; -describe("CGN", () => { - beforeEach(async () => { - await deactivateCGNCardIfNeeded(); - await device.launchApp({ newInstance: true }); - await ensureLoggedIn(); - }); - - describe("When the user want to start activation from bonus list", () => { - it("Should complete activation", async () => { - await element(by.text(I18n.t("global.navigator.wallet"))).tap(); - await element(by.id("walletAddNewPaymentMethodTestId")).tap(); - await element(by.id("bonusNameTestId")).tap(); - const cgnBonusItem = element(by.id(`AvailableBonusItem-${ID_CGN_TYPE}`)); - await waitFor(cgnBonusItem) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await cgnBonusItem.tap(); - await activateBonusSuccess(); - }); - }); - - describe("When the user want to start activation from card carousel", () => { - it("Should complete activation", async () => { - await element(by.text(I18n.t("global.navigator.wallet"))).tap(); - // TODO: This could be fail if we will add more e2e tests on the addition of a new payment method (just do a single swipe, not a scroll) - await waitFor(element(by.id("walletPaymentMethodsTestId"))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await element(by.id("walletPaymentMethodsTestId")).swipe("up"); - await element(by.id("FeaturedCardCGNTestID")).tap(); - await activateBonusSuccess(); - }); - }); - - describe("When the user want to start activation from service detail", () => { - it("Should complete activation", async () => { - await element(by.text(I18n.t("global.navigator.services"))).tap(); - - await waitFor(element(by.id(SERVICES_LIST))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - await waitFor(element(by.id(CGN_TITLE))) - .toBeVisible() - .whileElement(by.id(SERVICES_LIST)) - .scroll(300, "down"); - - await element(by.id(CGN_TITLE)).tap(); - const startActivationCta = element( - by.id("service-activate-bonus-button") - ); - await waitFor(startActivationCta) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await startActivationCta.tap(); - await activateBonusSuccess(); - }); - }); -}); - -const deactivateCGNCardIfNeeded = async () => { +export const deactivateCGNCardIfNeeded = async () => { // This is needed since an E2E can fail at any moment. If it does so // after the card has been activated, all subsequent retries and tests // will fail, since the card is already activated. Be aware that this diff --git a/ts/features/euCovidCert/__e2e__/euCovidCertExpired.e2e.ts b/ts/features/euCovidCert/__e2e__/euCovidCertExpired00.e2e.ts similarity index 63% rename from ts/features/euCovidCert/__e2e__/euCovidCertExpired.e2e.ts rename to ts/features/euCovidCert/__e2e__/euCovidCertExpired00.e2e.ts index 84b19fee096..7275f114f4d 100644 --- a/ts/features/euCovidCert/__e2e__/euCovidCertExpired.e2e.ts +++ b/ts/features/euCovidCert/__e2e__/euCovidCertExpired00.e2e.ts @@ -1,31 +1,21 @@ import { device } from "detox"; -import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; import { ensureLoggedIn } from "../../../__e2e__/utils"; +import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; +import { learnMoreLinkTestId, scrollToEUCovidMessage } from "./utils"; const euCovidCertExpiredSubject = "🏥 EUCovidCert - expired"; const euCovidCertExpiredTitle = "Expired Certificate title"; const euCovidCertExpiredSubTitle = "Expired Certificate sub title"; -const messageListTestId = "MessageList_inbox"; -const learnMoreLinkTestId = "euCovidCertLearnMoreLink"; - describe("EuCovidCert Expired", () => { beforeAll(async () => { await device.launchApp({ newInstance: true }); await ensureLoggedIn(); }); - it("should find the expired EuCovidCert message and open it", async () => { - await waitFor(element(by.text(euCovidCertExpiredSubject))) - .toBeVisible() - .whileElement(by.id(messageListTestId)) - .scroll(350, "down"); - - const subject = element(by.text(euCovidCertExpiredSubject)); - await subject.tap(); - }); + it("should find the expired EuCovidCert message, open it and check all the correct elements in the details page", async () => { + await openExpiredEUCovidMessage(); - it("should check all the correct elements in the details page", async () => { await waitFor(element(by.text(euCovidCertExpiredTitle))) .toBeVisible() .withTimeout(e2eWaitRenderTimeout); @@ -39,3 +29,10 @@ describe("EuCovidCert Expired", () => { .withTimeout(e2eWaitRenderTimeout); }); }); + +const openExpiredEUCovidMessage = async () => { + await scrollToEUCovidMessage(euCovidCertExpiredSubject); + + const subject = element(by.text(euCovidCertExpiredSubject)); + await subject.tap(); +}; diff --git a/ts/features/euCovidCert/__e2e__/euCovidCertRevoked.e2e.ts b/ts/features/euCovidCert/__e2e__/euCovidCertRevoked00.e2e.ts similarity index 63% rename from ts/features/euCovidCert/__e2e__/euCovidCertRevoked.e2e.ts rename to ts/features/euCovidCert/__e2e__/euCovidCertRevoked00.e2e.ts index c2de8638b12..d0a0e9cc314 100644 --- a/ts/features/euCovidCert/__e2e__/euCovidCertRevoked.e2e.ts +++ b/ts/features/euCovidCert/__e2e__/euCovidCertRevoked00.e2e.ts @@ -1,31 +1,21 @@ import { device } from "detox"; -import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; import { ensureLoggedIn } from "../../../__e2e__/utils"; +import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; +import { learnMoreLinkTestId, scrollToEUCovidMessage } from "./utils"; const euCovidCertRevokedSubject = "🏥 EUCovidCert - revoked"; const euCovidCertRevokedTitle = "Revoked Certificate title"; const euCovidCertRevokedSubTitle = "Revoked Certificate sub title"; -const messageListTestId = "MessageList_inbox"; -const learnMoreLinkTestId = "euCovidCertLearnMoreLink"; - describe("EuCovidCert Revoked", () => { beforeAll(async () => { await device.launchApp({ newInstance: true }); await ensureLoggedIn(); }); - it("should find the revoked EuCovidCert message and open it", async () => { - await waitFor(element(by.text(euCovidCertRevokedSubject))) - .toBeVisible() - .whileElement(by.id(messageListTestId)) - .scroll(350, "down"); - - const subject = element(by.text(euCovidCertRevokedSubject)); - await subject.tap(); - }); + it("should find the revoked EuCovidCert message, open it and check all the correct elements in the details page", async () => { + await openRevokedEUCovidMessage(); - it("should check all the correct elements in the details page", async () => { await waitFor(element(by.text(euCovidCertRevokedTitle))) .toBeVisible() .withTimeout(e2eWaitRenderTimeout); @@ -39,3 +29,10 @@ describe("EuCovidCert Revoked", () => { .withTimeout(e2eWaitRenderTimeout); }); }); + +const openRevokedEUCovidMessage = async () => { + await scrollToEUCovidMessage(euCovidCertRevokedSubject); + + const subject = element(by.text(euCovidCertRevokedSubject)); + await subject.tap(); +}; diff --git a/ts/features/euCovidCert/__e2e__/euCovidCertValid.e2e.ts b/ts/features/euCovidCert/__e2e__/euCovidCertValid.e2e.ts deleted file mode 100644 index 8f2fe2ac19b..00000000000 --- a/ts/features/euCovidCert/__e2e__/euCovidCertValid.e2e.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { device } from "detox"; -import I18n from "../../../i18n"; -import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; -import { ensureLoggedIn } from "../../../__e2e__/utils"; - -const euCovidCertValidSubject = "🏥 EUCovidCert - valid"; -const euCovidCertValidTitle = "Valid Certificate title"; -const euCovidCertValidSubTitle = "Valid Certificate sub title"; - -const messageListTestId = "MessageList_inbox"; -const qrCodeTestId = "QRCode"; -const fullScreenQrCodeTestId = "fullScreenQRCode"; - -describe("EuCovidCert Valid", () => { - beforeAll(async () => { - await device.launchApp({ newInstance: true }); - await ensureLoggedIn(); - }); - - it("should find the valid EuCovidCert message and open it", async () => { - await waitFor(element(by.text(euCovidCertValidSubject))) - .toBeVisible() - .whileElement(by.id(messageListTestId)) - .scroll(350, "down"); - - const subject = element(by.text(euCovidCertValidSubject)); - await subject.tap(); - }); - - it("should check all the correct elements in the details page", async () => { - await waitFor(element(by.text(euCovidCertValidTitle))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - await waitFor(element(by.text(euCovidCertValidSubTitle))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - await waitFor(element(by.text(I18n.t("global.genericSave")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - await waitFor(element(by.id(qrCodeTestId))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - }); - - it("should open the QRCode in fullscreen and return back", async () => { - const qrCode = element(by.id(qrCodeTestId)); - await qrCode.tap(); - - await waitFor(element(by.id(fullScreenQrCodeTestId))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - await waitFor(element(by.text(I18n.t("global.buttons.close")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - const closeButton = element(by.text(I18n.t("global.buttons.close"))); - await closeButton.tap(); - }); - - it("should open the certificate details page and return back", async () => { - await waitFor(element(by.text(I18n.t("global.buttons.details")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - const detailsButton = element(by.text(I18n.t("global.buttons.details"))); - await detailsButton.tap(); - - await waitFor(element(by.text(I18n.t("global.buttons.close")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - const closeButton = element(by.text(I18n.t("global.buttons.close"))); - await closeButton.tap(); - }); - - it("should save the certificate in the gallery", async () => { - await waitFor(element(by.text(I18n.t("global.genericSave")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - const saveButton = element(by.text(I18n.t("global.genericSave"))); - await saveButton.tap(); - - await waitFor( - element( - by.text( - I18n.t( - "features.euCovidCertificate.save.bottomSheet.saveAsImage.title" - ) - ) - ) - ) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - const saveIntoGalleryButton = element( - by.text( - I18n.t("features.euCovidCertificate.save.bottomSheet.saveAsImage.title") - ) - ); - await saveIntoGalleryButton.tap(); - - await waitFor( - element(by.text(I18n.t("features.euCovidCertificate.save.ok"))) - ) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - }); -}); diff --git a/ts/features/euCovidCert/__e2e__/euCovidCertValid00.e2e.ts b/ts/features/euCovidCert/__e2e__/euCovidCertValid00.e2e.ts new file mode 100644 index 00000000000..c76e0ebc284 --- /dev/null +++ b/ts/features/euCovidCert/__e2e__/euCovidCertValid00.e2e.ts @@ -0,0 +1,35 @@ +import { device } from "detox"; +import I18n from "../../../i18n"; +import { ensureLoggedIn } from "../../../__e2e__/utils"; +import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; +import { openValidEUCovidMessage, qrCodeTestId } from "./utils"; + +const euCovidCertValidTitle = "Valid Certificate title"; +const euCovidCertValidSubTitle = "Valid Certificate sub title"; + +describe("EuCovidCert Valid", () => { + beforeAll(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("should find the valid EuCovidCert message, open it and check all the correct elements in the details page", async () => { + await openValidEUCovidMessage(); + + await waitFor(element(by.text(euCovidCertValidTitle))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + await waitFor(element(by.text(euCovidCertValidSubTitle))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + await waitFor(element(by.text(I18n.t("global.genericSave")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + await waitFor(element(by.id(qrCodeTestId))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + }); +}); diff --git a/ts/features/euCovidCert/__e2e__/euCovidCertValid01.e2e.ts b/ts/features/euCovidCert/__e2e__/euCovidCertValid01.e2e.ts new file mode 100644 index 00000000000..b2d36406d8b --- /dev/null +++ b/ts/features/euCovidCert/__e2e__/euCovidCertValid01.e2e.ts @@ -0,0 +1,34 @@ +import { device } from "detox"; +import I18n from "../../../i18n"; +import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; +import { ensureLoggedIn } from "../../../__e2e__/utils"; +import { + fullScreenQrCodeTestId, + openValidEUCovidMessage, + qrCodeTestId +} from "./utils"; + +describe("EuCovidCert Valid", () => { + beforeAll(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("should open the QRCode in fullscreen and return back", async () => { + await openValidEUCovidMessage(); + + const qrCode = element(by.id(qrCodeTestId)); + await qrCode.tap(); + + await waitFor(element(by.id(fullScreenQrCodeTestId))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + await waitFor(element(by.text(I18n.t("global.buttons.close")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + const closeButton = element(by.text(I18n.t("global.buttons.close"))); + await closeButton.tap(); + }); +}); diff --git a/ts/features/euCovidCert/__e2e__/euCovidCertValid02.e2e.ts b/ts/features/euCovidCert/__e2e__/euCovidCertValid02.e2e.ts new file mode 100644 index 00000000000..964a37c6645 --- /dev/null +++ b/ts/features/euCovidCert/__e2e__/euCovidCertValid02.e2e.ts @@ -0,0 +1,30 @@ +import { device } from "detox"; +import I18n from "../../../i18n"; +import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; +import { ensureLoggedIn } from "../../../__e2e__/utils"; +import { openValidEUCovidMessage } from "./utils"; + +describe("EuCovidCert Valid", () => { + beforeAll(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("should open the certificate details page and return back", async () => { + await openValidEUCovidMessage(); + + await waitFor(element(by.text(I18n.t("global.buttons.details")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + const detailsButton = element(by.text(I18n.t("global.buttons.details"))); + await detailsButton.tap(); + + await waitFor(element(by.text(I18n.t("global.buttons.close")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + const closeButton = element(by.text(I18n.t("global.buttons.close"))); + await closeButton.tap(); + }); +}); diff --git a/ts/features/euCovidCert/__e2e__/euCovidCertValid03.e2e.ts b/ts/features/euCovidCert/__e2e__/euCovidCertValid03.e2e.ts new file mode 100644 index 00000000000..493ec46b041 --- /dev/null +++ b/ts/features/euCovidCert/__e2e__/euCovidCertValid03.e2e.ts @@ -0,0 +1,48 @@ +import { device } from "detox"; +import I18n from "../../../i18n"; +import { e2eWaitRenderTimeout } from "../../../__e2e__/config"; +import { ensureLoggedIn } from "../../../__e2e__/utils"; +import { openValidEUCovidMessage } from "./utils"; + +describe("EuCovidCert Valid", () => { + beforeAll(async () => { + await device.launchApp({ newInstance: true }); + await ensureLoggedIn(); + }); + + it("should save the certificate in the gallery", async () => { + await openValidEUCovidMessage(); + + await waitFor(element(by.text(I18n.t("global.genericSave")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + const saveButton = element(by.text(I18n.t("global.genericSave"))); + await saveButton.tap(); + + await waitFor( + element( + by.text( + I18n.t( + "features.euCovidCertificate.save.bottomSheet.saveAsImage.title" + ) + ) + ) + ) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + const saveIntoGalleryButton = element( + by.text( + I18n.t("features.euCovidCertificate.save.bottomSheet.saveAsImage.title") + ) + ); + await saveIntoGalleryButton.tap(); + + await waitFor( + element(by.text(I18n.t("features.euCovidCertificate.save.ok"))) + ) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + }); +}); diff --git a/ts/features/euCovidCert/__e2e__/utils.ts b/ts/features/euCovidCert/__e2e__/utils.ts new file mode 100644 index 00000000000..759fde03a09 --- /dev/null +++ b/ts/features/euCovidCert/__e2e__/utils.ts @@ -0,0 +1,20 @@ +const euCovidCertValidSubject = "🏥 EUCovidCert - valid"; + +export const learnMoreLinkTestId = "euCovidCertLearnMoreLink"; +export const messageListTestId = "MessageList_inbox"; +export const qrCodeTestId = "QRCode"; +export const fullScreenQrCodeTestId = "fullScreenQRCode"; + +export const scrollToEUCovidMessage = async (messageSubject: string) => { + await waitFor(element(by.text(messageSubject))) + .toBeVisible() + .whileElement(by.id(messageListTestId)) + .scroll(350, "down"); +}; + +export const openValidEUCovidMessage = async () => { + await scrollToEUCovidMessage(euCovidCertValidSubject); + + const subject = element(by.text(euCovidCertValidSubject)); + await subject.tap(); +}; diff --git a/ts/features/messages/__e2e__/messages.e2e.ts b/ts/features/messages/__e2e__/messages.e2e.ts index a9d2037e1b3..7b9ed5604b7 100644 --- a/ts/features/messages/__e2e__/messages.e2e.ts +++ b/ts/features/messages/__e2e__/messages.e2e.ts @@ -8,31 +8,25 @@ describe("Messages Screen", () => { await ensureLoggedIn(); }); - describe("when the user is already logged in", () => { - it("should load the user's messages", async () => { - await waitFor(element(by.id("MessageList_inbox"))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); + it("when the user is already logged in, it should load the user's messages", async () => { + await waitFor(element(by.id("MessageList_inbox"))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); - // The webserver is sending us exactly 20 messages with consecutive IDs - // in reverse order. - // We test that the first one is visible on the UI and that the last one - // exists (but is not visible) + // The webserver is sending us exactly 20 messages with consecutive IDs + // in reverse order. + // We test that the first one is visible on the UI and that the last one + // exists (but is not visible) - await waitFor( - element(by.id(`MessageListItem_00000000000000000000000020`)) - ) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); + await waitFor(element(by.id(`MessageListItem_00000000000000000000000020`))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); - // check for infinite scrolling - await element(by.id(`MessageList_inbox`)).scrollTo("bottom"); + // check for infinite scrolling + await element(by.id(`MessageList_inbox`)).scrollTo("bottom"); - await waitFor( - element(by.id(`MessageListItem_00000000000000000000000008`)) - ) - .toExist() - .withTimeout(e2eWaitRenderTimeout); - }); + await waitFor(element(by.id(`MessageListItem_00000000000000000000000008`))) + .toExist() + .withTimeout(e2eWaitRenderTimeout); }); }); diff --git a/ts/features/wallet/onboarding/__e2e__/creditCardOnboarding.e2e.ts b/ts/features/wallet/onboarding/__e2e__/creditCardOnboarding.e2e.ts index 195c5d6cffa..60f248c7cdf 100644 --- a/ts/features/wallet/onboarding/__e2e__/creditCardOnboarding.e2e.ts +++ b/ts/features/wallet/onboarding/__e2e__/creditCardOnboarding.e2e.ts @@ -8,75 +8,73 @@ describe("Credit Card onboarding", () => { await ensureLoggedIn(); }); - describe("when the user inserts all the required valid data", () => { - it("should add successfully the credit card to the wallet", async () => { - await waitFor(element(by.text(I18n.t("global.navigator.wallet")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); + it("when the user inserts all the required valid data, it should add successfully the credit card to the wallet", async () => { + await waitFor(element(by.text(I18n.t("global.navigator.wallet")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); - // Footer, Wallet icon - await element(by.text(I18n.t("global.navigator.wallet"))).tap(); + // Footer, Wallet icon + await element(by.text(I18n.t("global.navigator.wallet"))).tap(); - await waitFor(element(by.id("walletAddNewPaymentMethodTestId"))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); + await waitFor(element(by.id("walletAddNewPaymentMethodTestId"))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); - // Button "+ Add" - await element(by.id("walletAddNewPaymentMethodTestId")).tap(); + // Button "+ Add" + await element(by.id("walletAddNewPaymentMethodTestId")).tap(); - await waitFor(element(by.id("wallet.paymentMethod"))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); + await waitFor(element(by.id("wallet.paymentMethod"))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); - // Add payment method listItem in bottomSheet - await element(by.id("wallet.paymentMethod")).tap(); + // Add payment method listItem in bottomSheet + await element(by.id("wallet.paymentMethod")).tap(); - await waitFor(element(by.text(I18n.t("wallet.methods.card.name")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - // Add Credit Card List Item - await element(by.text(I18n.t("wallet.methods.card.name"))).tap(); + await waitFor(element(by.text(I18n.t("wallet.methods.card.name")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + // Add Credit Card List Item + await element(by.text(I18n.t("wallet.methods.card.name"))).tap(); - await waitFor(element(by.id("cardHolderInput"))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); + await waitFor(element(by.id("cardHolderInput"))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); - // Fill the credit card data - await element(by.id("cardHolderInput")).typeText("Gian Maria Mario"); + // Fill the credit card data + await element(by.id("cardHolderInput")).typeText("Gian Maria Mario"); - await element(by.id("panInputMask")).typeText("4444333322221111"); + await element(by.id("panInputMask")).typeText("4444333322221111"); - await element(by.id("expirationDateInputMask")).typeText("1299"); + await element(by.id("expirationDateInputMask")).typeText("1299"); - await element(by.id("securityCodeInputMask")).typeText("123"); + await element(by.id("securityCodeInputMask")).typeText("123"); - // Close the keyboard - await closeKeyboard(); - await element(by.text(I18n.t("global.buttons.continue"))).tap(); + // Close the keyboard + await closeKeyboard(); + await element(by.text(I18n.t("global.buttons.continue"))).tap(); - await waitFor(element(by.id("saveOrContinueButton"))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - await element(by.id("saveOrContinueButton")).tap(); + await waitFor(element(by.id("saveOrContinueButton"))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + await element(by.id("saveOrContinueButton")).tap(); - // Wait for 3ds webview - await waitFor(element(by.text(I18n.t("wallet.challenge3ds.description")))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); + // Wait for 3ds webview + await waitFor(element(by.text(I18n.t("wallet.challenge3ds.description")))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); - // Wait for success screen - await waitFor( - element( - by.text(I18n.t("wallet.outcomeMessage.addCreditCard.success.title")) - ) + // Wait for success screen + await waitFor( + element( + by.text(I18n.t("wallet.outcomeMessage.addCreditCard.success.title")) ) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - - // Wait for return to wallet - await waitFor(element(by.id("wallet-home-header-title"))) - .toBeVisible() - .withTimeout(e2eWaitRenderTimeout); - }); + ) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); + + // Wait for return to wallet + await waitFor(element(by.id("wallet-home-header-title"))) + .toBeVisible() + .withTimeout(e2eWaitRenderTimeout); }); }); From 69c9be10f76ac84ff4447dd9a4c03461231d3405 Mon Sep 17 00:00:00 2001 From: Alessandro Dell'Oste Date: Tue, 13 Feb 2024 16:25:41 +0100 Subject: [PATCH 027/190] feat: [IOCOM-1029] Add support for multi image in the detail of a message (#5508) ## Short description This PR adds support for multi image in the detail of a message. The component first tries to retrieve the logo based on the `service_id`, if it is not available then it tries to retrieve the logo based on the `organization_fiscal_code` ## List of changes proposed in this pull request - updated the `logoUri` property of the `OrganizationHeader` component ## How to test Using `io-dev-api-server`, generate a message. Activate `experimental ds` and open a message. Check that the logo is displayed correctly. --- .../messages/components/MessageDetail/MessageDetailsHeader.tsx | 3 +-- .../messages/components/MessageDetail/OrganizationHeader.tsx | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx b/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx index a34d747d0ac..bee5b71c580 100644 --- a/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx +++ b/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx @@ -71,9 +71,8 @@ export const MessageDetailsHeader = ({ {service && ( <> - {/* TODO: update logoUri when MultiImage component will be available in DS */} diff --git a/ts/features/messages/components/MessageDetail/OrganizationHeader.tsx b/ts/features/messages/components/MessageDetail/OrganizationHeader.tsx index 43537c53909..64d1ecf7a82 100644 --- a/ts/features/messages/components/MessageDetail/OrganizationHeader.tsx +++ b/ts/features/messages/components/MessageDetail/OrganizationHeader.tsx @@ -10,7 +10,7 @@ import { export type OrganizationHeaderProps = { organizationName: string; serviceName: string; - logoUri: ImageURISource; + logoUri: ReadonlyArray; }; const ITEM_PADDING_VERTICAL: IOSpacingScale = 6; From 6cd3b348064d277ed1fb5138ae8d45521ce84ec5 Mon Sep 17 00:00:00 2001 From: Damiano Plebani Date: Tue, 13 Feb 2024 17:36:12 +0100 Subject: [PATCH 028/190] chore(Cross): [IOAPPX-242] Replace legacy `FooterWithButtons` in the 'Remove account' flow (#5470) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Short description This PR replaces the legacy `FooterWithButtons` in the _Remove account_ flow ## List of changes proposed in this pull request - Replace the legacy `FooterWithButtons` with the new one in the following pages: - `RemoveAccountInfoScreen` - `RemoveAccountDetailsScreen` - `RemoveAccountSuccessScreen` - Replace `BaseScreenComponent` with the new `RNavScreenWithLargeHeader` in the `RemoveAccountDetailsScreen` - Fix `RemoveAccountSuccessScreen` empty state formatting with the new typographic styles ### Preview | Before | After | |--------|--------| | ![Simulator Screenshot - iPhone 14 Pro - 2024-01-31 at 14 28 16](https://github.com/pagopa/io-app/assets/1255491/61d6b853-430d-436a-81fe-03f697cb506b) | ![Simulator Screenshot - iPhone 14 Pro - 2024-01-31 at 14 24 09](https://github.com/pagopa/io-app/assets/1255491/bea81560-3ed9-4be7-a6f2-3118f19451f3) | ## How to test Go to the **Profile** → **Privacy & Policy** → **Delete your account** --- ts/navigation/ProfileNavigator.tsx | 5 +- .../profile/RemoveAccountDetailsScreen.tsx | 113 +++++++++--------- .../profile/RemoveAccountInfoScreen.tsx | 43 +++---- .../profile/RemoveAccountSuccessScreen.tsx | 112 +++++++++++------ 4 files changed, 154 insertions(+), 119 deletions(-) diff --git a/ts/navigation/ProfileNavigator.tsx b/ts/navigation/ProfileNavigator.tsx index 389a7e4f6b0..c7413076fce 100644 --- a/ts/navigation/ProfileNavigator.tsx +++ b/ts/navigation/ProfileNavigator.tsx @@ -31,10 +31,10 @@ import WebPlayground from "../screens/profile/WebPlayground"; import { IdPayCodePlayGround } from "../screens/profile/playgrounds/IdPayCodePlayground"; import IdPayOnboardingPlayground from "../screens/profile/playgrounds/IdPayOnboardingPlayground"; import MarkdownPlayground from "../screens/profile/playgrounds/MarkdownPlayground"; +import { WalletPaymentPlayground } from "../screens/profile/playgrounds/WalletPaymentPlayground"; import WalletPlayground from "../screens/profile/playgrounds/WalletPlayground"; import { useIOSelector } from "../store/hooks"; import { isGestureEnabled } from "../utils/navigation"; -import { WalletPaymentPlayground } from "../screens/profile/playgrounds/WalletPaymentPlayground"; import { ProfileParamsList } from "./params/ProfileParamsList"; import ROUTES from "./routes"; @@ -208,9 +208,6 @@ const ProfileStackNavigator = () => { component={RemoveAccountInfo} /> diff --git a/ts/screens/profile/RemoveAccountDetailsScreen.tsx b/ts/screens/profile/RemoveAccountDetailsScreen.tsx index 5ed1f0f9c51..d576f10f3c3 100644 --- a/ts/screens/profile/RemoveAccountDetailsScreen.tsx +++ b/ts/screens/profile/RemoveAccountDetailsScreen.tsx @@ -1,31 +1,32 @@ +import { + BlockButtonProps, + ContentWrapper, + FooterWithButtons +} from "@pagopa/io-app-design-system"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { Content } from "native-base"; +import { StackActions } from "@react-navigation/native"; import * as React from "react"; -import { View, Alert, SafeAreaView } from "react-native"; +import { Alert, SafeAreaView } from "react-native"; import { connect } from "react-redux"; import { Dispatch } from "redux"; -import { StackActions } from "@react-navigation/native"; +import { LabelledItem } from "../../components/LabelledItem"; +import { LoadingErrorComponent } from "../../components/LoadingErrorComponent"; import { RadioButtonList, RadioItem } from "../../components/core/selection/RadioButtonList"; -import { H1 } from "../../components/core/typography/H1"; -import { H4 } from "../../components/core/typography/H4"; import { IOStyles } from "../../components/core/variables/IOStyles"; -import { LabelledItem } from "../../components/LabelledItem"; -import BaseScreenComponent from "../../components/screens/BaseScreenComponent"; -import FooterWithButtons from "../../components/ui/FooterWithButtons"; +import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; import { shufflePinPadOnPayment } from "../../config"; -import { LoadingErrorComponent } from "../../components/LoadingErrorComponent"; import { isCgnEnrolledSelector } from "../../features/bonus/cgn/store/reducers/details"; import I18n from "../../i18n"; import NavigationService from "../../navigation/NavigationService"; import { identificationRequest } from "../../store/actions/identification"; import { navigateToWalletHome } from "../../store/actions/navigation"; import { - removeAccountMotivation, RemoveAccountMotivationEnum, - RemoveAccountMotivationPayload + RemoveAccountMotivationPayload, + removeAccountMotivation } from "../../store/actions/profile"; import { GlobalState } from "../../store/reducers/types"; import { userDataProcessingSelector } from "../../store/reducers/userDataProcessing"; @@ -115,20 +116,33 @@ const RemoveAccountDetails: React.FunctionComponent = (props: Props) => { props.requestIdentification({ reason: selectedMotivation }); } }; - const continueButtonProps = { - block: true, - primary: true, - onPress: handleContinuePress, - title: I18n.t("profile.main.privacy.removeAccount.info.cta") + + const continueButtonProps: BlockButtonProps = { + type: "Solid", + buttonProps: { + color: "primary", + label: I18n.t("profile.main.privacy.removeAccount.info.cta"), + accessibilityLabel: I18n.t("profile.main.privacy.removeAccount.info.cta"), + onPress: handleContinuePress + } }; const loadingCaption = I18n.t( "profile.main.privacy.removeAccount.success.title" ); return ( - , + true + )} > {props.isLoading || props.isError ? ( = (props: Props) => { /> ) : ( - -

{I18n.t("profile.main.privacy.removeAccount.title")}

-

- {I18n.t("profile.main.privacy.removeAccount.details.body")} -

- - - head={I18n.t( - "profile.main.privacy.removeAccount.details.question" + + + head={I18n.t( + "profile.main.privacy.removeAccount.details.question" + )} + key="delete_reason" + items={getMotivationItems()} + selectedItem={selectedMotivation} + onPress={setSelectedMotivation} + /> + {selectedMotivation === RemoveAccountMotivationEnum.OTHERS && ( + - {selectedMotivation === RemoveAccountMotivationEnum.OTHERS && ( - - )} - -
- {withKeyboard( - , - true - )} + )} +
)} -
+ ); }; diff --git a/ts/screens/profile/RemoveAccountInfoScreen.tsx b/ts/screens/profile/RemoveAccountInfoScreen.tsx index 36b191bb48d..518efa44414 100644 --- a/ts/screens/profile/RemoveAccountInfoScreen.tsx +++ b/ts/screens/profile/RemoveAccountInfoScreen.tsx @@ -1,9 +1,12 @@ -import { Body, ContentWrapper } from "@pagopa/io-app-design-system"; +import { + BlockButtonProps, + Body, + ContentWrapper, + FooterWithButtons +} from "@pagopa/io-app-design-system"; import * as React from "react"; -import { SafeAreaView } from "react-native"; import { connect } from "react-redux"; import { Dispatch } from "redux"; -import FooterWithButtons from "../../components/ui/FooterWithButtons"; import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; import I18n from "../../i18n"; import { navigateToRemoveAccountDetailScreen } from "../../store/actions/navigation"; @@ -16,30 +19,30 @@ type Props = ReturnType; * Here user can ask to delete his account */ const RemoveAccountInfo: React.FunctionComponent = props => { - const continueButtonProps = { - block: true, - primary: true, - onPress: () => { - props.loadBonus(); - props.navigateToRemoveAccountDetail(); - }, - title: I18n.t("profile.main.privacy.removeAccount.info.cta") + const continueButtonProps: BlockButtonProps = { + type: "Solid", + buttonProps: { + color: "primary", + label: I18n.t("profile.main.privacy.removeAccount.info.cta"), + accessibilityLabel: I18n.t("profile.main.privacy.removeAccount.info.cta"), + onPress: () => { + props.loadBonus(); + props.navigateToRemoveAccountDetail(); + } + } }; - const footerComponent = ( - - - - ); return ( + } > diff --git a/ts/screens/profile/RemoveAccountSuccessScreen.tsx b/ts/screens/profile/RemoveAccountSuccessScreen.tsx index d5ded0b2871..78acfb8522f 100644 --- a/ts/screens/profile/RemoveAccountSuccessScreen.tsx +++ b/ts/screens/profile/RemoveAccountSuccessScreen.tsx @@ -1,67 +1,101 @@ -import { Content } from "native-base"; +import { + BlockButtonProps, + Body, + ContentWrapper, + FooterWithButtons, + H2, + IOVisualCostants, + VSpacer +} from "@pagopa/io-app-design-system"; import * as React from "react"; -import { Image, SafeAreaView, StyleSheet } from "react-native"; +import { useState } from "react"; +import { Image, Platform, ScrollView, View } from "react-native"; +import { useSafeAreaInsets } from "react-native-safe-area-context"; import { connect } from "react-redux"; -import { VSpacer } from "@pagopa/io-app-design-system"; -import { IOStyles } from "../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../components/screens/BaseScreenComponent"; -import FooterWithButtons from "../../components/ui/FooterWithButtons"; +import expiredIcon from "../../../img/wallet/errors/payment-expired-icon.png"; +import { useHardwareBackButton } from "../../hooks/useHardwareBackButton"; import I18n from "../../i18n"; -import { H4 } from "../../components/core/typography/H4"; -import { H2 } from "../../components/core/typography/H2"; import { AppParamsList, IOStackNavigationRouteProps } from "../../navigation/params/AppParamsList"; -import { Dispatch } from "../../store/actions/types"; import { logoutRequest } from "../../store/actions/authentication"; -import expiredIcon from "../../../img/wallet/errors/payment-expired-icon.png"; -import { useHardwareBackButton } from "../../hooks/useHardwareBackButton"; +import { Dispatch } from "../../store/actions/types"; type Props = IOStackNavigationRouteProps & ReturnType; -const styles = StyleSheet.create({ - content: { - flex: 1, - flexDirection: "column", - justifyContent: "center", - alignItems: "center" - } -}); + /** * A screen to explain how the account removal works. * Here user can ask to delete his account */ const RemoveAccountSuccess: React.FunctionComponent = props => { + const [footerHeight, setFooterHeight] = useState(0); + const insets = useSafeAreaInsets(); // do nothing useHardwareBackButton(() => true); - const continueButtonProps = { - block: true, - bordered: true, - primary: true, - onPress: props.logout, - title: I18n.t("profile.main.privacy.removeAccount.success.cta") + const continueButtonProps: BlockButtonProps = { + type: "Outline", + buttonProps: { + color: "primary", + label: I18n.t("profile.main.privacy.removeAccount.success.cta"), + accessibilityLabel: I18n.t( + "profile.main.privacy.removeAccount.success.cta" + ), + onPress: props.logout + } }; const footerComponent = ( - + ); return ( - - - - - -

{I18n.t("profile.main.privacy.removeAccount.success.title")}

-

- {I18n.t("profile.main.privacy.removeAccount.success.body")} -

-
- {footerComponent} -
-
+ + {/* This extra View is mandatory when you have a fixed + bottom component to get a consistent behavior + across platforms */} + + + + + + +

+ {I18n.t("profile.main.privacy.removeAccount.success.title")} +

+ + + {I18n.t("profile.main.privacy.removeAccount.success.body")} + +
+
+
+
+ {footerComponent} +
); }; From 96ac5307c65e8d3099b8284329b997abe04691f5 Mon Sep 17 00:00:00 2001 From: LazyAfternoons Date: Tue, 13 Feb 2024 17:51:21 +0100 Subject: [PATCH 029/190] chore(Cross): [IOAPPX-245] Remove `hound.yml` (#5500) ## Short description This PR removes the `hound.yml` file because we don't use [Hound](https://houndci.com/) anymore. ## How to test Static tests. Co-authored-by: Cristiano Tofani --- .hound.yml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .hound.yml diff --git a/.hound.yml b/.hound.yml deleted file mode 100644 index 74b81cf446d..00000000000 --- a/.hound.yml +++ /dev/null @@ -1,4 +0,0 @@ -tslint: - enabled: true - config_file: tslint.json - From 027d442e945d7b9784cdeb5cbfc00df9b91f39b5 Mon Sep 17 00:00:00 2001 From: Damiano Plebani Date: Tue, 13 Feb 2024 18:07:25 +0100 Subject: [PATCH 030/190] chore(Cross): [IOAPPX-241] Replace legacy `FooterWithButtons` in the `DownloadProfileData` screen (#5472) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Short description This PR replaces the legacy `FooterWithButtons` in the `DownloadProfileData` screen ## List of changes proposed in this pull request - Replace the legacy `FooterWithButtons` - Replace the legacy `BaseScreenComponent` with the new `RNavScreenWithLargeHeader` ### Preview | Before | After | |--------|--------| |
); }; From 912604e5f2723c21f15cd28a3a634e45dc3d5da6 Mon Sep 17 00:00:00 2001 From: Damiano Plebani Date: Tue, 13 Feb 2024 18:21:50 +0100 Subject: [PATCH 031/190] chore(Cross): [IOAPPX-243] Remove `native-base` components from private screens + Add new header managed by `react-navigation` (#5482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Short description This PR removes some `native-base` components from private screens (usually hidden from normal citizens). It also adds new headers to these screens via new components managed by the `react-navigation` library. ## List of changes proposed in this pull request - Remove `BaseScreenComponent` from the `Playground…` screens - Replace legacy `native-base` components with the new DS components - Remove legacy `Buttons` page from the DS - Replace legacy `showToast` methods with the `IOToast` component - Add the new `RNavScreenWithLargeHeader` to the `WalletPlayground` - Remove `DevScreenButton` from `LandingScreen` - Integrate `MarkdownScreen` into `MarkdownPlayground` (no need to keep two separate screens) ## How to test 1. Run the app 2. Enable Debug Mode 3. Navigate through the _Playground_ screens --- ts/components/DevScreenButton.tsx | 30 -- .../design-system/core/DSLegacyButtons.tsx | 275 ------------------ .../core/DSToastNotifications.tsx | 113 +------ .../design-system/navigation/navigator.tsx | 10 +- .../design-system/navigation/params.ts | 1 - .../design-system/navigation/routes.ts | 4 - .../playgrounds/LollipopPlayground.tsx | 62 ++-- .../playgrounds/LollipopPlaygroundContent.tsx | 22 +- ts/navigation/AuthenticationNavigator.tsx | 17 +- ts/navigation/ProfileNavigator.tsx | 20 +- .../params/AuthenticationParamsList.ts | 1 - ts/screens/authentication/LandingScreen.tsx | 60 ++-- ts/screens/development/MarkdownScreen.tsx | 122 -------- ts/screens/profile/CgnLandingPlayground.tsx | 151 +++++----- ts/screens/profile/WebPlayground.tsx | 230 ++++++++------- .../playgrounds/MarkdownPlayground.tsx | 226 +++++++++----- .../profile/playgrounds/WalletPlayground.tsx | 26 +- 17 files changed, 466 insertions(+), 904 deletions(-) delete mode 100644 ts/components/DevScreenButton.tsx delete mode 100644 ts/features/design-system/core/DSLegacyButtons.tsx delete mode 100644 ts/screens/development/MarkdownScreen.tsx diff --git a/ts/components/DevScreenButton.tsx b/ts/components/DevScreenButton.tsx deleted file mode 100644 index 31ffc1cd68d..00000000000 --- a/ts/components/DevScreenButton.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import * as React from "react"; -import { StyleSheet } from "react-native"; -import { Text as NBButtonText } from "native-base"; -import ButtonDefaultOpacity from "./ButtonDefaultOpacity"; - -type Props = Readonly<{ - onPress: () => void; -}>; - -const styles = StyleSheet.create({ - devButton: { - position: "absolute", - top: 20, - left: 3, - zIndex: 1000 - } -}); - -export const DevScreenButton: React.SFC = props => ( - - Dev - -); diff --git a/ts/features/design-system/core/DSLegacyButtons.tsx b/ts/features/design-system/core/DSLegacyButtons.tsx deleted file mode 100644 index 6658178d02e..00000000000 --- a/ts/features/design-system/core/DSLegacyButtons.tsx +++ /dev/null @@ -1,275 +0,0 @@ -import * as React from "react"; -import { View } from "react-native"; -import { Text as NBText } from "native-base"; -import { IOColors, VSpacer } from "@pagopa/io-app-design-system"; -import { H2 } from "../../../components/core/typography/H2"; - -import { DesignSystemScreen } from "../components/DesignSystemScreen"; -import { DSComponentViewerBox } from "../components/DSComponentViewerBox"; -import ButtonDefaultOpacity from "../../../components/ButtonDefaultOpacity"; -import { Label } from "../../../components/core/typography/Label"; -import GoBackButton from "../../../components/GoBackButton"; -import { LabelSmall } from "../../../components/core/typography/LabelSmall"; - -export const DSLegacyButtons = () => ( - -

- NativeBase -

- - {/* The following props render the button with the same - graphical attributes: - - Active - - Input Button - */} - { - alert("Action triggered"); - }} - > - Primary button - - - - { - alert("Action triggered"); - }} - > - Primary button (Block) - - - - { - alert("Action triggered"); - }} - > - Primary button (Small) - - - - { - alert("Action triggered"); - }} - > - XSmall button - - - - { - alert("Action triggered"); - }} - > - Primary button (Disabled) - - - - { - alert("Action triggered"); - }} - > - Outline button (Light) - - - - { - alert("Action triggered"); - }} - > - Outline button (Block Light) - - - - { - alert("Action triggered"); - }} - > - Outline button (Small Light) - - - - { - alert("Action triggered"); - }} - > - Outline button (disabled) - - - - { - alert("Action triggered"); - }} - > - Outline button (light) - - - - { - alert("Action triggered"); - }} - > - Outline button (block light) - - - - { - alert("Action triggered"); - }} - > - Outline button (small light) - - - - { - alert("Action triggered"); - }} - > - Outline button (light disabled) - - - - { - alert("Action triggered"); - }} - > - Primary button (dark) - - - - { - alert("Action triggered"); - }} - > - Outline button (dark) - - - - { - alert("Action triggered"); - }} - > - - - - - { - alert("Action triggered"); - }} - > - - - - - { - alert("Action triggered"); - }} - > - - - - - { - alert("Action triggered"); - }} - > - - - - - { - alert("Action triggered"); - }} - > - Button (light text) - - - - - { - alert("Action triggered"); - }} - > - - White button - - - - - - { - alert("Going back"); - }} - white={true} - /> - - - -
-); diff --git a/ts/features/design-system/core/DSToastNotifications.tsx b/ts/features/design-system/core/DSToastNotifications.tsx index 90b92ded4b0..8a49dca21e1 100644 --- a/ts/features/design-system/core/DSToastNotifications.tsx +++ b/ts/features/design-system/core/DSToastNotifications.tsx @@ -1,11 +1,8 @@ -import { Toast as NBToast } from "native-base"; -import * as React from "react"; import { ButtonOutline, VSpacer } from "@pagopa/io-app-design-system"; -import { H2 } from "../../../components/core/typography/H2"; +import * as React from "react"; +import { IOToast, ToastNotification } from "../../../components/Toast"; import { H3 } from "../../../components/core/typography/H3"; -import { showToast } from "../../../utils/showToast"; import { DesignSystemScreen } from "../components/DesignSystemScreen"; -import { IOToast, ToastNotification } from "../../../components/Toast"; export const DSToastNotifications = () => ( @@ -88,111 +85,5 @@ export const DSToastNotifications = () => ( /> - -

- Legacy toasts -

- -

- Type -

- - - NBToast.show({ - text: "Here's the default behavior" - }) - } - /> - - - - showToast("Example of a danger message")} - /> - - - - showToast("Example of a success message", "success")} - /> - - - - showToast("Example of a warning message", "warning")} - /> - -

- Position -

- - - showToast("Here's the notification at the top", "danger", "top") - } - /> - - - - - showToast("Here's the notification at the top", "danger", "top") - } - /> - - - - - showToast("Here's the notification at the bottom", "danger", "bottom") - } - /> - -

- Misc -

- - - NBToast.show({ - text: "Here's the default behavior with multi-line loooong loooooong text" - }) - } - /> - -
); diff --git a/ts/features/design-system/navigation/navigator.tsx b/ts/features/design-system/navigation/navigator.tsx index a184cd4f5e0..8315453dbf6 100644 --- a/ts/features/design-system/navigation/navigator.tsx +++ b/ts/features/design-system/navigation/navigator.tsx @@ -38,16 +38,15 @@ import { DSHapticFeedback } from "../core/DSHapticFeedback"; import { DSHeaderFirstLevel } from "../core/DSHeaderFirstLevel"; import { DSHeaderSecondLevel } from "../core/DSHeaderSecondLevel"; import { DSHeaderSecondLevelWithSectionTitle } from "../core/DSHeaderSecondLevelWithSectionTitle"; -import { DSNumberPad } from "../core/DSNumberPad"; import { DSIcons } from "../core/DSIcons"; import { DSLayout } from "../core/DSLayout"; -import { DSLegacyButtons } from "../core/DSLegacyButtons"; import { DSLegacyIllustrations } from "../core/DSLegacyIllustrations"; import { DSLegacyPictograms } from "../core/DSLegacyPictograms"; import { DSListItems } from "../core/DSListItems"; import { DSLoaders } from "../core/DSLoaders"; import { DSLogos } from "../core/DSLogos"; import { DSModules } from "../core/DSModules"; +import { DSNumberPad } from "../core/DSNumberPad"; import { DSPictograms } from "../core/DSPictograms"; import { DSSafeArea } from "../core/DSSafeArea"; import { DSSafeAreaCentered } from "../core/DSSafeAreaCentered"; @@ -461,13 +460,6 @@ const DesignSystemMainStack = () => { headerTitle: DESIGN_SYSTEM_ROUTES.LEGACY.PICTOGRAMS.title }} /> - { const maybePublicKey = useIOSelector(lollipopPublicKeySelector); const maybeSessionToken = O.fromNullable(useIOSelector(sessionTokenSelector)); + useHeaderSecondLevel({ + title: "Lollipop Playground" + }); + const lollipopClient = useCallback( (signBody: boolean) => pipe( @@ -125,29 +129,27 @@ const LollipopPlayground = () => { ); return ( - - - - - - onSignButtonPress(body, state.doSignBody) - } - onCheckBoxPress={v => { - setState({ - ...state, - doSignBody: v - }); - }} - onClearButtonPress={() => { - setState(INITIAL_STATE); - }} - playgroundState={state} - /> - - - - + + + + + onSignButtonPress(body, state.doSignBody) + } + onCheckBoxPress={v => { + setState({ + ...state, + doSignBody: v + }); + }} + onClearButtonPress={() => { + setState(INITIAL_STATE); + }} + playgroundState={state} + /> + + + ); }; diff --git a/ts/features/lollipop/playgrounds/LollipopPlaygroundContent.tsx b/ts/features/lollipop/playgrounds/LollipopPlaygroundContent.tsx index cb820043047..c87c1853102 100644 --- a/ts/features/lollipop/playgrounds/LollipopPlaygroundContent.tsx +++ b/ts/features/lollipop/playgrounds/LollipopPlaygroundContent.tsx @@ -1,26 +1,27 @@ -import * as O from "fp-ts/lib/Option"; -import React from "react"; -import { View, StyleSheet, TextInput } from "react-native"; import { Alert, ButtonOutline, ButtonSolid, + CheckboxLabel, HSpacer, + IOColors, VSpacer } from "@pagopa/io-app-design-system"; -import { CheckBox } from "../../../components/core/selection/checkbox/CheckBox"; -import { Label } from "../../../components/core/typography/Label"; -import { maybeNotNullyString } from "../../../utils/strings"; +import * as O from "fp-ts/lib/Option"; +import React from "react"; +import { StyleSheet, TextInput, View } from "react-native"; import { WithTestID } from "../../../types/WithTestID"; +import { maybeNotNullyString } from "../../../utils/strings"; import { LollipopPlaygroundState } from "./LollipopPlayground"; const styles = StyleSheet.create({ textInput: { textAlignVertical: "top", // Prop supported on Android only - padding: 10, + padding: 12, borderWidth: 1, height: 120, - borderRadius: 4 + borderRadius: 8, + borderColor: IOColors["grey-450"] }, column: { flexDirection: "column", @@ -64,12 +65,11 @@ const LollipopPlaygroundContent = (props: Props) => { /> - - - diff --git a/ts/navigation/AuthenticationNavigator.tsx b/ts/navigation/AuthenticationNavigator.tsx index 11de0c591fe..6f63fcbed94 100644 --- a/ts/navigation/AuthenticationNavigator.tsx +++ b/ts/navigation/AuthenticationNavigator.tsx @@ -1,6 +1,12 @@ -import * as React from "react"; import { createStackNavigator } from "@react-navigation/stack"; +import * as React from "react"; +import CieLoginConfigScreen from "../features/cieLogin/components/screens/CieLoginConfigScreen"; import CardSelectionScreen from "../screens/authentication/CardSelectionScreen"; +import IdpLoginScreen from "../screens/authentication/IdpLoginScreen"; +import IdpSelectionScreen from "../screens/authentication/IdpSelectionScreen"; +import { LandingScreen } from "../screens/authentication/LandingScreen"; +import NewOptInScreen from "../screens/authentication/NewOptInScreen"; +import TestAuthenticationScreen from "../screens/authentication/TestAuthenticationScreen"; import CieAuthorizeDataUsageScreen from "../screens/authentication/cie/CieAuthorizeDataUsageScreen"; import CieCardReaderScreen from "../screens/authentication/cie/CieCardReaderScreen"; import CieConsentDataUsageScreen from "../screens/authentication/cie/CieConsentDataUsageScreen"; @@ -8,14 +14,7 @@ import CieExpiredOrInvalidScreen from "../screens/authentication/cie/CieExpiredO import CiePinLockedTemporarilyScreen from "../screens/authentication/cie/CiePinLockedTemporarilyScreen"; import CiePinScreen from "../screens/authentication/cie/CiePinScreen"; import CieWrongCiePinScreen from "../screens/authentication/cie/CieWrongCiePinScreen"; -import IdpLoginScreen from "../screens/authentication/IdpLoginScreen"; -import IdpSelectionScreen from "../screens/authentication/IdpSelectionScreen"; -import { LandingScreen } from "../screens/authentication/LandingScreen"; -import TestAuthenticationScreen from "../screens/authentication/TestAuthenticationScreen"; -import MarkdownScreen from "../screens/development/MarkdownScreen"; import { AuthSessionPage } from "../screens/authentication/idpAuthSessionHandler"; -import CieLoginConfigScreen from "../features/cieLogin/components/screens/CieLoginConfigScreen"; -import NewOptInScreen from "../screens/authentication/NewOptInScreen"; import { AuthenticationParamsList } from "./params/AuthenticationParamsList"; import ROUTES from "./routes"; @@ -61,8 +60,6 @@ const AuthenticationStackNavigator = () => ( component={TestAuthenticationScreen} /> - - { component={DownloadProfileDataScreen} /> @@ -154,24 +151,12 @@ const ProfileStackNavigator = () => { name={ROUTES.DESIGN_SYSTEM} component={DesignSystemNavigator} /> + - @@ -190,9 +175,6 @@ const ProfileStackNavigator = () => { component={IdPayCodePlayGround} /> diff --git a/ts/navigation/params/AuthenticationParamsList.ts b/ts/navigation/params/AuthenticationParamsList.ts index a57dc1f97f6..fd225f92818 100644 --- a/ts/navigation/params/AuthenticationParamsList.ts +++ b/ts/navigation/params/AuthenticationParamsList.ts @@ -12,7 +12,6 @@ export type AuthenticationParamsList = { [ROUTES.AUTHENTICATION_IDP_LOGIN]: undefined; [ROUTES.AUTHENTICATION_AUTH_SESSION]: undefined; [ROUTES.AUTHENTICATION_IDP_TEST]: undefined; - [ROUTES.MARKDOWN]: undefined; // For expired cie screen [ROUTES.CIE_EXPIRED_SCREEN]: undefined; [ROUTES.CIE_PIN_SCREEN]: undefined; diff --git a/ts/screens/authentication/LandingScreen.tsx b/ts/screens/authentication/LandingScreen.tsx index d6c153a2e2e..e16b3242dca 100644 --- a/ts/screens/authentication/LandingScreen.tsx +++ b/ts/screens/authentication/LandingScreen.tsx @@ -2,39 +2,51 @@ * A screen where the user can choose to login with SPID or get more informations. * It includes a carousel with highlights on the app functionalities */ +import { HSpacer, IOColors, Icon, VSpacer } from "@pagopa/io-app-design-system"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; +import { pipe } from "fp-ts/lib/function"; import JailMonkey from "jail-monkey"; import { Content, Text as NBButtonText } from "native-base"; import * as React from "react"; -import { View, Alert, StyleSheet } from "react-native"; +import { Alert, StyleSheet, View } from "react-native"; import DeviceInfo from "react-native-device-info"; import { useDispatch, useStore } from "react-redux"; -import { IOColors, Icon, HSpacer, VSpacer } from "@pagopa/io-app-design-system"; +import { SpidIdp } from "../../../definitions/content/SpidIdp"; import sessionExpiredImg from "../../../img/landing/session_expired.png"; import ButtonDefaultOpacity from "../../components/ButtonDefaultOpacity"; -import CieNotSupported from "../../components/cie/CieNotSupported"; import ContextualInfo from "../../components/ContextualInfo"; -import { Link } from "../../components/core/typography/Link"; -import { IOStyles } from "../../components/core/variables/IOStyles"; -import { DevScreenButton } from "../../components/DevScreenButton"; import { HorizontalScroll } from "../../components/HorizontalScroll"; -import { renderInfoRasterImage } from "../../components/infoScreen/imageRendering"; -import { InfoScreenComponent } from "../../components/infoScreen/InfoScreenComponent"; import { LandingCardComponent } from "../../components/LandingCardComponent"; import LoadingSpinnerOverlay from "../../components/LoadingSpinnerOverlay"; +import SectionStatusComponent from "../../components/SectionStatus"; +import CieNotSupported from "../../components/cie/CieNotSupported"; +import { Link } from "../../components/core/typography/Link"; +import { IOStyles } from "../../components/core/variables/IOStyles"; +import { InfoScreenComponent } from "../../components/infoScreen/InfoScreenComponent"; +import { renderInfoRasterImage } from "../../components/infoScreen/imageRendering"; import BaseScreenComponent, { ContextualHelpPropsMarkdown } from "../../components/screens/BaseScreenComponent"; -import SectionStatusComponent from "../../components/SectionStatus"; +import { LightModalContext } from "../../components/ui/LightModal"; +import { cieSpidMoreInfoUrl } from "../../config"; +import { isCieLoginUatEnabledSelector } from "../../features/cieLogin/store/selectors"; +import { cieFlowForDevServerEnabled } from "../../features/cieLogin/utils"; +import { + fastLoginOptInFFEnabled, + isFastLoginEnabledSelector +} from "../../features/fastLogin/store/selectors"; import I18n from "../../i18n"; import { mixpanelTrack } from "../../mixpanel"; +import { useIONavigation } from "../../navigation/params/AppParamsList"; import ROUTES from "../../navigation/routes"; import { idpSelected, resetAuthenticationState } from "../../store/actions/authentication"; +import { continueWithRootOrJailbreak } from "../../store/actions/persistedPreferences"; +import { useIOSelector } from "../../store/hooks"; +import { isSessionExpiredSelector } from "../../store/reducers/authentication"; import { hasApiLevelSupportSelector, hasNFCFeatureSelector, @@ -43,23 +55,9 @@ import { import { continueWithRootOrJailbreakSelector } from "../../store/reducers/persistedPreferences"; import variables from "../../theme/variables"; import { ComponentProps } from "../../types/react"; -import { isDevEnv } from "../../utils/environment"; -import RootedDeviceModal from "../modal/RootedDeviceModal"; -import { SpidIdp } from "../../../definitions/content/SpidIdp"; -import { openWebUrl } from "../../utils/url"; -import { cieSpidMoreInfoUrl } from "../../config"; -import { - fastLoginOptInFFEnabled, - isFastLoginEnabledSelector -} from "../../features/fastLogin/store/selectors"; -import { isCieLoginUatEnabledSelector } from "../../features/cieLogin/store/selectors"; -import { cieFlowForDevServerEnabled } from "../../features/cieLogin/utils"; import { useOnFirstRender } from "../../utils/hooks/useOnFirstRender"; -import { useIOSelector } from "../../store/hooks"; -import { isSessionExpiredSelector } from "../../store/reducers/authentication"; -import { LightModalContext } from "../../components/ui/LightModal"; -import { continueWithRootOrJailbreak } from "../../store/actions/persistedPreferences"; -import { useIONavigation } from "../../navigation/params/AppParamsList"; +import { openWebUrl } from "../../utils/url"; +import RootedDeviceModal from "../modal/RootedDeviceModal"; import { trackCieLoginSelected, trackMethodInfo, @@ -227,14 +225,6 @@ export const LandingScreen = () => { } }; - const navigateToMarkdown = React.useCallback( - () => - navigation.navigate(ROUTES.AUTHENTICATION, { - screen: ROUTES.MARKDOWN - }), - [navigation] - ); - const navigateToIdpSelection = React.useCallback(() => { trackSpidLoginSelected(); if (isFastLoginOptInFFEnabled) { @@ -333,8 +323,6 @@ export const LandingScreen = () => { isCieSupported() ? ["landing_SPID", "landing_CIE"] : ["landing_SPID"] } > - {isDevEnv && } - {isSessionExpired ? ( ; - -type State = { - markdown: string; -}; - -const INITIAL_STATE: State = { - markdown: "" -}; - -class MarkdownScreen extends React.Component { - constructor(props: Props) { - super(props); - this.state = INITIAL_STATE; - } - - private setMarkdown(markdown: string) { - this.setState({ - markdown - }); - } - - public render() { - return ( - - - - this.setMarkdown(MARKDOWN_HEADING)} - > - Heading - - this.setMarkdown(MARKDOWN_PARAGRAPH)} - > - Paragraph - - this.setMarkdown(MARKDOWN_LIST)} - > - List - - this.setMarkdown(MARKDOWN_REFERENCE)} - > - Reference - - - - this.setState({ markdown: text })} - value={this.state.markdown} - multiline={true} - numberOfLines={10} - /> - - {this.state.markdown} - - - ); - } -} - -export default MarkdownScreen; diff --git a/ts/screens/profile/CgnLandingPlayground.tsx b/ts/screens/profile/CgnLandingPlayground.tsx index 660d9a9f939..4b191efefc6 100644 --- a/ts/screens/profile/CgnLandingPlayground.tsx +++ b/ts/screens/profile/CgnLandingPlayground.tsx @@ -1,17 +1,32 @@ -import { Content } from "native-base"; +import { + ButtonOutline, + ButtonSolid, + IOColors, + IOVisualCostants, + VSpacer +} from "@pagopa/io-app-design-system"; import * as React from "react"; -import { View, SafeAreaView, StyleSheet, TextInput } from "react-native"; -import { IOColors, Icon, VSpacer } from "@pagopa/io-app-design-system"; -import { Label } from "../../components/core/typography/Label"; -import BaseScreenComponent from "../../components/screens/BaseScreenComponent"; -import ButtonDefaultOpacity from "../../components/ButtonDefaultOpacity"; -import { IOStyles } from "../../components/core/variables/IOStyles"; -import { H5 } from "../../components/core/typography/H5"; +import { + SafeAreaView, + ScrollView, + StyleSheet, + TextInput, + View +} from "react-native"; import WebviewComponent from "../../components/WebviewComponent"; +import { H5 } from "../../components/core/typography/H5"; +import { IOStyles } from "../../components/core/variables/IOStyles"; +import { useHeaderSecondLevel } from "../../hooks/useHeaderSecondLevel"; const styles = StyleSheet.create({ - textInput: { padding: 1, borderWidth: 1, height: 30, color: IOColors.black }, - contentCenter: { justifyContent: "center" }, + textInput: { + padding: 8, + borderWidth: 1, + height: 40, + color: IOColors.black, + borderRadius: 8, + borderColor: IOColors["grey-450"] + }, row: { flexDirection: "row", justifyContent: "space-between", @@ -25,63 +40,69 @@ const CgnLandingPlayground = () => { const [loadUri, setLoadUri] = React.useState("https://google.com"); const [reloadKey, setReloadKey] = React.useState(0); + useHeaderSecondLevel({ + title: "CGN Landing Playground" + }); + return ( - - - - -
{"Link alla landing"}
- - -
{"Referer"}
- -
- - - setReloadKey(r => r + 1)} - > - - - { - setLoadUri(navigationURI); + + + +
{"Link alla landing"}
+ + +
{"Referer"}
+ +
+ + + setReloadKey(r => r + 1)} + /> + { + setLoadUri(navigationURI); + }} + accessibilityLabel={"Invia"} + /> + + + + {loadUri !== "" && ( + - -
-
- - - {loadUri !== "" && ( - - )} - -
-
-
+ /> + )} +
+ + ); }; diff --git a/ts/screens/profile/WebPlayground.tsx b/ts/screens/profile/WebPlayground.tsx index 23fa72b394c..b932a722c2d 100644 --- a/ts/screens/profile/WebPlayground.tsx +++ b/ts/screens/profile/WebPlayground.tsx @@ -1,27 +1,46 @@ -import { Content } from "native-base"; -import URLParse from "url-parse"; +import { + ButtonOutline, + ButtonSolid, + Divider, + HSpacer, + IOColors, + IOStyles, + IOVisualCostants, + IconButtonContained, + ListItemSwitch, + VSpacer +} from "@pagopa/io-app-design-system"; +import CookieManager, { Cookie } from "@react-native-cookies/cookies"; import * as React from "react"; -import { View, SafeAreaView, StyleSheet, TextInput } from "react-native"; +import { + SafeAreaView, + ScrollView, + StyleSheet, + TextInput, + View +} from "react-native"; import { connect } from "react-redux"; -import CookieManager, { Cookie } from "@react-native-cookies/cookies"; -import { Icon, HSpacer, VSpacer } from "@pagopa/io-app-design-system"; -import { Label } from "../../components/core/typography/Label"; -import BaseScreenComponent from "../../components/screens/BaseScreenComponent"; -import Switch from "../../components/ui/Switch"; -import { Monospace } from "../../components/core/typography/Monospace"; +import URLParse from "url-parse"; +import { LabelledItem } from "../../components/LabelledItem"; import RegionServiceWebView from "../../components/RegionServiceWebView"; -import { Dispatch } from "../../store/actions/types"; +import { IOToast } from "../../components/Toast"; +import { Monospace } from "../../components/core/typography/Monospace"; +import { useHeaderSecondLevel } from "../../hooks/useHeaderSecondLevel"; import { navigateBack } from "../../store/actions/navigation"; -import ButtonDefaultOpacity from "../../components/ButtonDefaultOpacity"; -import { LabelledItem } from "../../components/LabelledItem"; -import { showToast } from "../../utils/showToast"; +import { Dispatch } from "../../store/actions/types"; type Props = ReturnType; const styles = StyleSheet.create({ flex: { flex: 1 }, - textInput: { flex: 1, padding: 1, borderWidth: 1, height: 30 }, - contentCenter: { justifyContent: "center" }, + textInput: { + flex: 1, + padding: 8, + borderWidth: 1, + borderRadius: 8, + borderColor: IOColors["grey-450"], + height: 40 + }, row: { flexDirection: "row", justifyContent: "space-between", @@ -39,9 +58,13 @@ const WebPlayground: React.FunctionComponent = (props: Props) => { const [saveCookie, setSaveCookie] = React.useState(false); const [reloadKey, setReloadKey] = React.useState(0); + useHeaderSecondLevel({ + title: "MyPortal Web" + }); + const setCookieOnDomain = () => { if (loadUri === "") { - showToast("Missing domain"); + IOToast.info("Missing domain"); return; } const url = new URLParse(loadUri, true); @@ -55,15 +78,15 @@ const WebPlayground: React.FunctionComponent = (props: Props) => { CookieManager.set(url.origin, cookie, true) .then(_ => { - showToast("cookie correctly set", "success"); + IOToast.success("cookie correctly set"); }) - .catch(_ => showToast("Unable to set Cookie")); + .catch(_ => IOToast.error("Unable to set Cookie")); }; const clearCookies = () => { CookieManager.clearAll(true) - .then(() => showToast("Cookies cleared", "success")) - .catch(_ => showToast("Unable to remove Cookies")); + .then(() => IOToast.success("Cookies cleared")) + .catch(_ => IOToast.error("Unable to remove Cookies")); }; const handleUriInput = (text: string) => { @@ -71,88 +94,91 @@ const WebPlayground: React.FunctionComponent = (props: Props) => { }; return ( - - - - - - - setLoadUri(navigationURI)} - > - - - - - - setReloadKey(r => r + 1)} - > - - - - - - - - - - - - - - - - - - - {saveCookie && ( - <> - - - - setCookieOnDomain()} - > - - - - )} - {showDebug && {webMessage}} - - - - - + + + + + + setLoadUri(navigationURI)} + icon="arrowRight" + accessibilityLabel={"Imposta la pagina web"} + /> + + + + setReloadKey(r => r + 1)} + icon="reload" + label="Reload" + accessibilityLabel={"Reload"} + /> + + + + + + + + + {saveCookie && ( + <> + + + + setCookieOnDomain()} + label="Save" + accessibilityLabel={"Save"} + /> + + + )} + {showDebug && {webMessage}} + + + + ); }; diff --git a/ts/screens/profile/playgrounds/MarkdownPlayground.tsx b/ts/screens/profile/playgrounds/MarkdownPlayground.tsx index 6959f1e564e..da9f1e0d688 100644 --- a/ts/screens/profile/playgrounds/MarkdownPlayground.tsx +++ b/ts/screens/profile/playgrounds/MarkdownPlayground.tsx @@ -1,14 +1,20 @@ +import { + ButtonOutline, + ButtonSolid, + HSpacer, + IOColors, + IOVisualCostants, + IconButtonSolid, + LabelSmallAlt, + VSpacer +} from "@pagopa/io-app-design-system"; import { useLinkTo } from "@react-navigation/native"; import * as O from "fp-ts/lib/Option"; -import { Content } from "native-base"; +import I18n from "i18n-js"; import React, { useCallback } from "react"; -import { View, SafeAreaView, StyleSheet, TextInput } from "react-native"; -import { Icon, HSpacer, VSpacer } from "@pagopa/io-app-design-system"; +import { ScrollView, StyleSheet, TextInput, View } from "react-native"; import { MessageBodyMarkdown } from "../../../../definitions/backend/MessageBodyMarkdown"; -import ButtonDefaultOpacity from "../../../components/ButtonDefaultOpacity"; -import { Label } from "../../../components/core/typography/Label"; import { ExtractedCtaButton } from "../../../components/cta/ExtractedCtaButton"; -import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; import Markdown from "../../../components/ui/Markdown"; import { CTA } from "../../../features/messages/types/MessageCTA"; import { @@ -16,23 +22,79 @@ import { getMessageCTA, handleCtaAction } from "../../../features/messages/utils/messages"; +import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; import { maybeNotNullyString } from "../../../utils/strings"; const styles = StyleSheet.create({ - flex: { flex: 1 }, - textInput: { flex: 1, padding: 1, borderWidth: 1, height: 60 }, + textInput: { + flex: 1, + padding: 8, + borderWidth: 1, + borderRadius: 8, + borderColor: IOColors["grey-450"], + height: 64 + }, row: { flexDirection: "row", justifyContent: "space-between", alignItems: "center" }, - contentCenter: { justifyContent: "center" } + horizontalScroll: { + flexShrink: 1, + marginLeft: -IOVisualCostants.appMarginDefault, + marginRight: -IOVisualCostants.appMarginDefault, + paddingHorizontal: IOVisualCostants.appMarginDefault + } }); +const MARKDOWN_REFERENCE = I18n.t("global.markdown.reference"); + +const MARKDOWN_HEADING = `# I am a Header 1 + +## I am a Header 2 + +### I am a Header 3 + +#### I am a Header 4 + +##### I am a Header 5 + +###### I am a Header 6 +`; + +const MARKDOWN_PARAGRAPH = `A simple paragraph. + +Text can be emphasized with *asterisk* or _underscore_. + +If you need bold use **double asterisk**. +`; + +const MARKDOWN_LIST = `Unordered list: + +* React +* Vue +* Angular + +Ordered list: + +1. React +2. Vue +3. Angular +`; + const MarkdownPlayground = () => { const [markdownText, setMarkdownText] = React.useState(""); const [inputText, setInputText] = React.useState(""); + const setMarkdown = (markdownString: string) => { + setMarkdownText(markdownString); + setInputText(markdownString); + }; + + useHeaderSecondLevel({ + title: "Markdown playground" + }); + const linkTo = useLinkTo(); const handleCtaPress = useCallback( (cta: CTA) => handleCtaAction(cta, linkTo), @@ -42,74 +104,108 @@ const MarkdownPlayground = () => { const maybeCTA = getMessageCTA(markdownText as MessageBodyMarkdown); const ctaMessage = O.isSome(maybeCTA) ? `${maybeCTA.value.cta_1 ? "2" : "1"} cta found!` - : "no CTA found"; + : "No CTA found"; const isMarkdownSet = O.isSome(maybeNotNullyString(markdownText)); + return ( - - - - - + + + + + + setMarkdownText(inputText)} + accessibilityLabel="Invia" /> - - - setMarkdownText(inputText)} - > - - - - - + + + + + setMarkdown(MARKDOWN_HEADING)} + /> + + setMarkdown(MARKDOWN_PARAGRAPH)} + /> + + setMarkdown(MARKDOWN_LIST)} + /> + + setMarkdown(MARKDOWN_REFERENCE)} + /> + - - {isMarkdownSet && } + + + setMarkdown("")} + label="Clear" + accessibilityLabel="Clear" + /> + + + + {isMarkdownSet && {ctaMessage}} - {O.isSome(maybeCTA) && ( + {O.isSome(maybeCTA) && ( + + + + )} + {O.isSome(maybeCTA) && maybeCTA.value.cta_2 && ( + <> + - )} - {O.isSome(maybeCTA) && maybeCTA.value.cta_2 && ( - <> - - - - - - )} - {isMarkdownSet && ( - <> - - - {cleanMarkdownFromCTAs(markdownText as MessageBodyMarkdown)} - - - )} - - - + + )} + {isMarkdownSet && ( + <> + + + {cleanMarkdownFromCTAs(markdownText as MessageBodyMarkdown)} + + + )} + + ); }; diff --git a/ts/screens/profile/playgrounds/WalletPlayground.tsx b/ts/screens/profile/playgrounds/WalletPlayground.tsx index 5fe9462e3df..b3afda17eda 100644 --- a/ts/screens/profile/playgrounds/WalletPlayground.tsx +++ b/ts/screens/profile/playgrounds/WalletPlayground.tsx @@ -1,12 +1,12 @@ /* eslint-disable sonarjs/no-identical-functions */ -import { Divider, ListItemNav, VSpacer } from "@pagopa/io-app-design-system"; +import { + ContentWrapper, + Divider, + ListItemNav +} from "@pagopa/io-app-design-system"; import { useNavigation } from "@react-navigation/native"; import React from "react"; -import { ScrollView } from "react-native"; -import { Body } from "../../../components/core/typography/Body"; -import { H2 } from "../../../components/core/typography/H2"; -import { IOStyles } from "../../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; +import { RNavScreenWithLargeHeader } from "../../../components/ui/RNavScreenWithLargeHeader"; import { WalletOnboardingRoutes } from "../../../features/walletV3/onboarding/navigation/navigator"; import { AppParamsList, @@ -30,11 +30,11 @@ const WalletPlayground = () => { }; return ( - - -

New wallet playground

- Choose the playground flow for the new wallet - + + {/* Onboarding Playground */} { description="Start the payment flow to pay with a method of payment" onPress={navigateToWalletPaymentPlayground} /> -
-
+ + ); }; From 932b8bfbfd2e4893466f54dd6012f0ca6af7ff92 Mon Sep 17 00:00:00 2001 From: LazyAfternoons Date: Tue, 13 Feb 2024 19:08:06 +0100 Subject: [PATCH 032/190] chore(Cross): [IOAPPX-247] Remove `_editorconfig` (#5501) --- _editorconfig | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 _editorconfig diff --git a/_editorconfig b/_editorconfig deleted file mode 100644 index 7c286132fe9..00000000000 --- a/_editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -# Windows files -[*.bat] -end_of_line = crlf From 1e876081caa635aebf6eb2db121ad3963153e86e Mon Sep 17 00:00:00 2001 From: Alessandro Dell'Oste Date: Wed, 14 Feb 2024 14:13:10 +0100 Subject: [PATCH 033/190] feat: [IOCOM-851] Add `Alert` in the detail of a message that contains an expiring payment (#5507) ## Short description This PR adds an alert in the detail of a message to warn the user that the message contains an expiring payment.
Details

| with payment and due date - expiring | | - | | |

## List of changes proposed in this pull request - added `Alert` component in the detail of a message - added tests - updated langs ## How to test Using `io-dev-api-server`, generate messages with valid/invalid `due_date`. Open the message and check that the data is displayed correctly. Co-authored-by: Andrea --- locales/en/index.yml | 3 + locales/it/index.yml | 3 + .../messages/screens/MessageDetailsScreen.tsx | 41 ++++++++++-- .../__tests__/MessageDetailsScreen.test.tsx | 63 ++++++++++++++++--- 4 files changed, 94 insertions(+), 16 deletions(-) diff --git a/locales/en/index.yml b/locales/en/index.yml index 5057416a163..43bc922fd8f 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -2632,6 +2632,9 @@ features: subtitle: "Per usare questa funzionalità è richiesta la versione {{value}} di app IO. Aggiorna l’app per continuare." badge: dueDate: Expired on {{date}} at {{time}} + alert: + action: Add reminder + content: Expires on {{date}} at {{time}} euCovidCertificate: save: album: "IO" diff --git a/locales/it/index.yml b/locales/it/index.yml index a5625986b9e..b35b7e7a54a 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -2632,6 +2632,9 @@ features: subtitle: "Per usare questa funzionalità è richiesta la versione {{value}} di app IO. Aggiorna l’app per continuare." badge: dueDate: Scaduto il {{date}} alle ore {{time}} + alert: + action: Aggiungi promemoria + content: Scade il {{date}} alle ore {{time}} euCovidCertificate: save: album: "IO" diff --git a/ts/features/messages/screens/MessageDetailsScreen.tsx b/ts/features/messages/screens/MessageDetailsScreen.tsx index ddfb9703bde..65777f42d89 100644 --- a/ts/features/messages/screens/MessageDetailsScreen.tsx +++ b/ts/features/messages/screens/MessageDetailsScreen.tsx @@ -1,20 +1,23 @@ -import React, { useCallback } from "react"; -import { ScrollView } from "react-native"; +import React, { createRef, useCallback } from "react"; +import { ScrollView, View } from "react-native"; import { + Alert, ContentWrapper, IOStyles, Tag, VSpacer } from "@pagopa/io-app-design-system"; -import { pipe } from "fp-ts/lib/function"; +import { constNull, pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import * as pot from "@pagopa/ts-commons/lib/pot"; -import { useNavigation } from "@react-navigation/native"; import { SafeAreaView } from "react-native-safe-area-context"; import { UIMessageId } from "../types"; import { ServiceId } from "../../../../definitions/backend/ServiceId"; import { MessagesParamsList } from "../navigation/params"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { + IOStackNavigationRouteProps, + useIONavigation +} from "../../../navigation/params/AppParamsList"; import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; import { useIODispatch, useIOSelector } from "../../../store/hooks"; import { cancelPreviousAttachmentDownload } from "../store/actions"; @@ -44,7 +47,9 @@ export const MessageDetailsScreen = ( ) => { const { messageId, serviceId } = props.route.params; const dispatch = useIODispatch(); - const navigation = useNavigation(); + const navigation = useIONavigation(); + + const viewRef = createRef(); const message = pipe( useIOSelector(state => getPaginatedMessageById(state, messageId)), @@ -128,6 +133,30 @@ export const MessageDetailsScreen = ( )} + + {messageDetails.dueDate && expiringInfo === "expiring" && ( + + + + + )} + diff --git a/ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx b/ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx index 2f2b717a321..b44258e4df0 100644 --- a/ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx +++ b/ts/features/messages/screens/__tests__/MessageDetailsScreen.test.tsx @@ -1,5 +1,4 @@ -import configureMockStore from "redux-mock-store"; -import { Action, Store } from "redux"; +import { Action, Store, createStore } from "redux"; import { MESSAGES_ROUTES } from "../../navigation/routes"; import { GlobalState } from "../../../../store/reducers/types"; import { appReducer } from "../../../../store/reducers"; @@ -71,8 +70,7 @@ describe("MessageDetailsScreen", () => { appReducer, sequenceOfActions ); - const mockStore = configureMockStore(); - const store: Store = mockStore(state); + const store: Store = createStore(appReducer, state as any); const { component } = renderComponent(store); expect(component.queryByTestId("attachment-tag")).not.toBeNull(); @@ -102,8 +100,7 @@ describe("MessageDetailsScreen", () => { appReducer, sequenceOfActions ); - const mockStore = configureMockStore(); - const store: Store = mockStore(state); + const store: Store = createStore(appReducer, state as any); const { component } = renderComponent(store); expect(component.queryByTestId("attachment-tag")).toBeNull(); @@ -122,8 +119,7 @@ describe("MessageDetailsScreen", () => { appReducer, sequenceOfActions ); - const mockStore = configureMockStore(); - const store: Store = mockStore(state); + const store: Store = createStore(appReducer, state as any); const { component } = renderComponent(store); expect(component.queryByTestId("due-date-tag")).not.toBeNull(); @@ -142,12 +138,59 @@ describe("MessageDetailsScreen", () => { appReducer, sequenceOfActions ); - const mockStore = configureMockStore(); - const store: Store = mockStore(state); + const store: Store = createStore(appReducer, state as any); const { component } = renderComponent(store); expect(component.queryByTestId("due-date-tag")).toBeNull(); }); + + it("should display the alert banner if the payment is expiring", () => { + const next7Days = new Date(new Date().setDate(new Date().getDate() + 7)); + + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageById.success(toUIMessage(message_1)), + loadServiceDetail.success(service_1), + loadMessageDetails.success( + toUIMessageDetails({ + ...messageWithValidPayment, + content: { + ...messageWithValidPayment.content, + due_date: next7Days + } + }) + ) + ]; + + const state: GlobalState = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const store: Store = createStore(appReducer, state as any); + + const { component } = renderComponent(store); + expect(component.queryByTestId("due-date-alert")).not.toBeNull(); + }); + + it("should NOT display the alert banner if the payment is NOT expiring", () => { + const sequenceOfActions: ReadonlyArray = [ + applicationChangeState("active"), + loadMessageById.success(toUIMessage(message_1)), + loadServiceDetail.success(service_1), + loadMessageDetails.success(toUIMessageDetails(messageWithValidPayment)) + ]; + + const state: Partial = reproduceSequence( + {} as GlobalState, + appReducer, + sequenceOfActions + ); + const store: Store = createStore(appReducer, state as any); + + const { component } = renderComponent(store); + expect(component.queryByTestId("due-date-alert")).toBeNull(); + }); }); const renderComponent = (store: Store) => { From cb14f8ad0191d9ae66356bda5ef1dc67e39b5602 Mon Sep 17 00:00:00 2001 From: Andrea Date: Wed, 14 Feb 2024 14:53:06 +0100 Subject: [PATCH 034/190] fix: [IOCOM-1091] Fix for duplicate message in messages list (#5509) ## Short description This PR fixes a condition where a new message could appear twice in the messages list. ## List of changes proposed in this pull request In the Message List component: - Proper use of focus effect, using React's `useFocusEffect` with proper dependencies - Loading of previous messages page (with focus effect) does not trigger anymore when the component is already refreshing all messages. Latter is what was causing the bug: two subsequent asynchronous requests (one for all messages and one for just the new one - the previous page) where the first retrieved all messages while the second just the new ones, using the current-but-soon-to-be-outdated starting index (`minimum_id`). So, the reload-all request ends, filling the redux state with all new and old messages. If the previous-page request ends after that, its data has some duplicates in it (the new messages - since its starting `minimum_id` was the old one, not the current one received from the last reload-all) but the reducer puts them in front of the previously receveid ones from the reload-all, duplicating some of them. ## How to test You can use the io-dev-api-server code [on this PR](https://github.com/pagopa/io-dev-api-server/pull/349) to create a new message. Do the following in less than 60 seconds (the refresh time): select a message, create a new one (`POST message` endpoint) and go back to the message list. Now wait for the 60 seconds to expire and use the pull-down-to-refresh. On the `main` branch, two duplicated messages should appear on top of the list. On this branch, there is no duplicate. Co-authored-by: Alessandro Dell'Oste --- .../messages/components/MessageList/index.tsx | 57 ++++++++++++------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/ts/features/messages/components/MessageList/index.tsx b/ts/features/messages/components/MessageList/index.tsx index 81c1b93d90e..6a2790395b7 100644 --- a/ts/features/messages/components/MessageList/index.tsx +++ b/ts/features/messages/components/MessageList/index.tsx @@ -12,7 +12,7 @@ import { Vibration } from "react-native"; import { connect } from "react-redux"; - +import { useFocusEffect } from "@react-navigation/native"; import { maximumItemsFromAPI, pageSize } from "../../../../config"; import { useTabItemPressWhenScreenActive } from "../../../../hooks/useTabItemPressWhenScreenActive"; import I18n from "../../../../i18n"; @@ -39,7 +39,6 @@ import customVariables, { VIBRATION_LONG_PRESS_DURATION } from "../../../../theme/variables"; import { useOnFirstRender } from "../../../../utils/hooks/useOnFirstRender"; -import { useActionOnFocus } from "../../../../utils/hooks/useOnFocus"; import { showToast } from "../../../../utils/showToast"; import { EmptyComponent, @@ -156,6 +155,7 @@ const MessageList = ({ O.Option >(O.none); + const [lastUpdate, setLastUpdate] = useState(new Date()); const [isRefreshFromUser, setIsRefreshFromUser] = useState(false); const isLoadingPreviousOrAll = isLoadingPrevious || isReloadingAll; @@ -167,26 +167,6 @@ const MessageList = ({ useTabItemPressWhenScreenActive(() => scrollTo(0, true), true); - useOnFirstRender( - () => { - reloadAll(); - }, - () => shouldUseLoad && !didLoad - ); - - useActionOnFocus(() => { - // check if there are new messages when the component becomes focused - if (previousCursor) { - loadPreviousPage(previousCursor); - } - }, minimumRefreshInterval); - - useEffect(() => { - if (error) { - showToast(I18n.t("global.genericError"), "warning"); - } - }, [error]); - const hasMessages = messages.length > 0; const scrollTo = (index: number, animated: boolean = false) => { if (flatListRef.current && hasMessages) { @@ -256,6 +236,39 @@ const MessageList = ({ const isLoadingOrRefreshingMessageList = isLoadingMore || isLoadingPreviousOrAll; + useOnFirstRender( + () => { + reloadAll(); + }, + () => shouldUseLoad && !didLoad + ); + + // check if there are new messages when the component becomes focused + useFocusEffect( + useCallback(() => { + const now = new Date(); + const shouldRefreshDelay = + now.getTime() - lastUpdate.getTime() > minimumRefreshInterval; + if (shouldRefreshDelay && previousCursor) { + if (!isLoadingOrRefreshingMessageList) { + loadPreviousPage(previousCursor); + } + setLastUpdate(now); + } + }, [ + isLoadingOrRefreshingMessageList, + lastUpdate, + loadPreviousPage, + previousCursor + ]) + ); + + useEffect(() => { + if (error) { + showToast(I18n.t("global.genericError"), "warning"); + } + }, [error]); + const refreshControl = shouldUseLoad ? ( Date: Thu, 15 Feb 2024 09:19:04 +0100 Subject: [PATCH 035/190] chore(release): 2.54.0-rc.0 --- CHANGELOG.md | 39 +++++++++++++++++++++++++ android/app/build.gradle | 4 +-- ios/ItaliaApp.xcodeproj/project.pbxproj | 4 +-- ios/ItaliaApp/Info.plist | 4 +-- ios/ItaliaAppTests/Info.plist | 4 +-- package.json | 2 +- publiccode.yml | 4 +-- 7 files changed, 50 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37c316a95e7..5f83e4fa9cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,45 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.54.0-rc.0](https://github.com/pagopa/io-app/compare/2.53.0-rc.1...2.54.0-rc.0) (2024-02-15) + + +### Features + +* [[IOCOM-1011](https://pagopa.atlassian.net/browse/IOCOM-1011)] Accessibility on "Includes Attachments"-Icon on the new DS Message Details screen ([#5497](https://github.com/pagopa/io-app/issues/5497)) ([416aff7](https://github.com/pagopa/io-app/commit/416aff73e508ad2bf9950f20c30cafdca3eb4c25)) +* [[IOCOM-1012](https://pagopa.atlassian.net/browse/IOCOM-1012)] Better accessibility on PDF preview with the new DS system ([#5494](https://github.com/pagopa/io-app/issues/5494)) ([7689647](https://github.com/pagopa/io-app/commit/76896474e9d982178af94e06fa1351ff6b8b5173)) +* [[IOCOM-1029](https://pagopa.atlassian.net/browse/IOCOM-1029)] Add support for multi image in the detail of a message ([#5508](https://github.com/pagopa/io-app/issues/5508)) ([69c9be1](https://github.com/pagopa/io-app/commit/69c9be10f76ac84ff4447dd9a4c03461231d3405)) +* [[IOCOM-849](https://pagopa.atlassian.net/browse/IOCOM-849),[IOCOM-850](https://pagopa.atlassian.net/browse/IOCOM-850)] Add `MessageDetailsComponent` in the detail of a message ([#5495](https://github.com/pagopa/io-app/issues/5495)) ([2501d29](https://github.com/pagopa/io-app/commit/2501d2953cd2bfe798af69c98763279113a302fa)) +* [[IOCOM-851](https://pagopa.atlassian.net/browse/IOCOM-851)] Add `Alert` in the detail of a message that contains an expiring payment ([#5507](https://github.com/pagopa/io-app/issues/5507)) ([1e87608](https://github.com/pagopa/io-app/commit/1e876081caa635aebf6eb2db121ad3963153e86e)) +* [[IOCOM-862](https://pagopa.atlassian.net/browse/IOCOM-862),[IOCOM-863](https://pagopa.atlassian.net/browse/IOCOM-863)] New DS on the message's attachments list ([#5485](https://github.com/pagopa/io-app/issues/5485)) ([f06e592](https://github.com/pagopa/io-app/commit/f06e5921ca8652227b82da640a8140b29712331e)) + + +### Bug Fixes + +* [[IABT-1530](https://pagopa.atlassian.net/browse/IABT-1530)] Enabled header shown property on Transaction details screens ([#5493](https://github.com/pagopa/io-app/issues/5493)) ([333a40e](https://github.com/pagopa/io-app/commit/333a40e845440b27a7bbf38843b8743409d89082)) +* [[IOBP-460](https://pagopa.atlassian.net/browse/IOBP-460),[IOBP-461](https://pagopa.atlassian.net/browse/IOBP-461),[IOBP-463](https://pagopa.atlassian.net/browse/IOBP-463)] A11y for list item info components into transaction detail screen ([#5478](https://github.com/pagopa/io-app/issues/5478)) ([a49be25](https://github.com/pagopa/io-app/commit/a49be25c9a5766e59067801830a89a2b1095d320)) +* [[IOCOM-1091](https://pagopa.atlassian.net/browse/IOCOM-1091)] Fix for duplicate message in messages list ([#5509](https://github.com/pagopa/io-app/issues/5509)) ([cb14f8a](https://github.com/pagopa/io-app/commit/cb14f8ad0191d9ae66356bda5ef1dc67e39b5602)) +* [[IOPID-1423](https://pagopa.atlassian.net/browse/IOPID-1423),[IOPID-1439](https://pagopa.atlassian.net/browse/IOPID-1439)] Fix double MP event tracking ([#5496](https://github.com/pagopa/io-app/issues/5496)) ([fbd8cb3](https://github.com/pagopa/io-app/commit/fbd8cb3949d4f330949a65ad3d80e35044ef4129)) +* [[IOPID-1546](https://pagopa.atlassian.net/browse/IOPID-1546)] Fix services refresh token error ([#5505](https://github.com/pagopa/io-app/issues/5505)) ([366f208](https://github.com/pagopa/io-app/commit/366f2088b1f73eea784dd1f2ef0720088d054191)) + + +### Chores + +* **Cross:** [[IOAPPX-234](https://pagopa.atlassian.net/browse/IOAPPX-234)] Remove `@react-native-picker/picker` dependency ([#5454](https://github.com/pagopa/io-app/issues/5454)) ([3e98819](https://github.com/pagopa/io-app/commit/3e9881974908a2932320e45260b517b8827c8101)) +* **Cross:** [[IOAPPX-241](https://pagopa.atlassian.net/browse/IOAPPX-241)] Replace legacy `FooterWithButtons` in the `DownloadProfileData` screen ([#5472](https://github.com/pagopa/io-app/issues/5472)) ([027d442](https://github.com/pagopa/io-app/commit/027d442e945d7b9784cdeb5cbfc00df9b91f39b5)) +* **Cross:** [[IOAPPX-242](https://pagopa.atlassian.net/browse/IOAPPX-242)] Replace legacy `FooterWithButtons` in the 'Remove account' flow ([#5470](https://github.com/pagopa/io-app/issues/5470)) ([6cd3b34](https://github.com/pagopa/io-app/commit/6cd3b348064d277ed1fb5138ae8d45521ce84ec5)) +* **Cross:** [[IOAPPX-243](https://pagopa.atlassian.net/browse/IOAPPX-243)] Remove `native-base` components from private screens + Add new header managed by `react-navigation` ([#5482](https://github.com/pagopa/io-app/issues/5482)) ([912604e](https://github.com/pagopa/io-app/commit/912604e5f2723c21f15cd28a3a634e45dc3d5da6)) +* **Cross:** [[IOAPPX-245](https://pagopa.atlassian.net/browse/IOAPPX-245)] Remove `hound.yml` ([#5500](https://github.com/pagopa/io-app/issues/5500)) ([96ac530](https://github.com/pagopa/io-app/commit/96ac5307c65e8d3099b8284329b997abe04691f5)) +* **Cross:** [[IOAPPX-247](https://pagopa.atlassian.net/browse/IOAPPX-247)] Remove `_editorconfig` ([#5501](https://github.com/pagopa/io-app/issues/5501)) ([932b8bf](https://github.com/pagopa/io-app/commit/932b8bfbfd2e4893466f54dd6012f0ca6af7ff92)) +* [[IOBP-525](https://pagopa.atlassian.net/browse/IOBP-525)] Fix payment authorization webview on Android devices ([#5474](https://github.com/pagopa/io-app/issues/5474)) ([d67f85f](https://github.com/pagopa/io-app/commit/d67f85f14bd5cb415e1779c91899aeb56b64031d)) +* [[IOBP-533](https://pagopa.atlassian.net/browse/IOBP-533)] Navigation to payment confirm screen if method with only one PSP ([#5487](https://github.com/pagopa/io-app/issues/5487)) ([7e7c2c9](https://github.com/pagopa/io-app/commit/7e7c2c9336ecd47eba953f9f0d2999063895496c)) +* [[IOBP-535](https://pagopa.atlassian.net/browse/IOBP-535)] Added german language for iOS app ([#5491](https://github.com/pagopa/io-app/issues/5491)) ([ae5ffeb](https://github.com/pagopa/io-app/commit/ae5ffeb80012092caf87890c5b0a98a01593f3d2)) +* [[IOBP-546](https://pagopa.atlassian.net/browse/IOBP-546)] Fix payment E2E tests ([#5498](https://github.com/pagopa/io-app/issues/5498)) ([eae6e83](https://github.com/pagopa/io-app/commit/eae6e833dd5c7201f4ee061d87ee67220c53fcd4)) +* [[IOPID-1416](https://pagopa.atlassian.net/browse/IOPID-1416)] Fix logic to show toast error ([#5502](https://github.com/pagopa/io-app/issues/5502)) ([50ad939](https://github.com/pagopa/io-app/commit/50ad93995196c4228b1691748fb99dcc0c79548f)) +* [[IOPID-1448](https://pagopa.atlassian.net/browse/IOPID-1448)] Fix double profile upsert ([#5486](https://github.com/pagopa/io-app/issues/5486)) ([0d72c2a](https://github.com/pagopa/io-app/commit/0d72c2af4330af9a6ea53cd5984b80356766c6df)), closes [/github.com/pagopa/io-app/pull/5486/files#diff-a48057473d6b62f0ea5bfaf0ed2ba3e8a390fdef1e1e3ff7e9760fd8c4a86ff6](https://github.com/pagopa//github.com/pagopa/io-app/pull/5486/files/issues/diff-a48057473d6b62f0ea5bfaf0ed2ba3e8a390fdef1e1e3ff7e9760fd8c4a86ff6) [/github.com/pagopa/io-app/pull/5486/files#diff-8a5b2f3967d681b976fe673762bd1061f5b430130c880c1195b76af06362cf31](https://github.com/pagopa//github.com/pagopa/io-app/pull/5486/files/issues/diff-8a5b2f3967d681b976fe673762bd1061f5b430130c880c1195b76af06362cf31) +* **Cross:** [[IOAPPX-218](https://pagopa.atlassian.net/browse/IOAPPX-218)] Add the new `Titillium Sans Pro` typeface to the codebase ([#5459](https://github.com/pagopa/io-app/issues/5459)) ([20e54f4](https://github.com/pagopa/io-app/commit/20e54f4925c5bd460e49f6662d0f58d792d0317d)) +* **Cross:** [[IOAPPX-246](https://pagopa.atlassian.net/browse/IOAPPX-246)] Update `Podfile.lock` for `io-react-native-login-utils` ([#5499](https://github.com/pagopa/io-app/issues/5499)) ([e7ed331](https://github.com/pagopa/io-app/commit/e7ed3310efecc62b68b2d2b77808ffee42996496)) + ## [2.53.0-rc.1](https://github.com/pagopa/io-app/compare/2.53.0-rc.0...2.53.0-rc.1) (2024-02-06) diff --git a/android/app/build.gradle b/android/app/build.gradle index 872b9229d23..305c4944d0a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -144,8 +144,8 @@ android { applicationId "it.pagopa.io.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 100154795 - versionName "2.53.0.1" + versionCode 100154796 + versionName "2.54.0.0" buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() if (isNewArchitectureEnabled()) { // We configure the NDK build only if you decide to opt-in for the New Architecture. diff --git a/ios/ItaliaApp.xcodeproj/project.pbxproj b/ios/ItaliaApp.xcodeproj/project.pbxproj index 55c8a11da24..b3ab2432d2c 100644 --- a/ios/ItaliaApp.xcodeproj/project.pbxproj +++ b/ios/ItaliaApp.xcodeproj/project.pbxproj @@ -848,7 +848,7 @@ CODE_SIGN_ENTITLEMENTS = ItaliaApp/ItaliaApp.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = M2X5YQ4BJ7; ENABLE_BITCODE = NO; @@ -889,7 +889,7 @@ CODE_SIGN_ENTITLEMENTS = ItaliaApp/ItaliaApp.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 0; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = M2X5YQ4BJ7; ENABLE_BITCODE = NO; diff --git a/ios/ItaliaApp/Info.plist b/ios/ItaliaApp/Info.plist index b59333c0ec3..02ac97ff6b2 100644 --- a/ios/ItaliaApp/Info.plist +++ b/ios/ItaliaApp/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.53.0 + 2.54.0 CFBundleSignature ???? CFBundleURLTypes @@ -34,7 +34,7 @@ CFBundleVersion - 1 + 0 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/ItaliaAppTests/Info.plist b/ios/ItaliaAppTests/Info.plist index 1b6212449aa..32a68343a15 100644 --- a/ios/ItaliaAppTests/Info.plist +++ b/ios/ItaliaAppTests/Info.plist @@ -15,10 +15,10 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 2.53.0 + 2.54.0 CFBundleSignature ???? CFBundleVersion - 1 + 0 \ No newline at end of file diff --git a/package.json b/package.json index 22aa06caa1f..e13831b3b6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "italia-app", - "version": "2.53.0-rc.1", + "version": "2.54.0-rc.0", "io_backend_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_backend.yaml", "io_public_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_public.yaml", "io_content_specs": "https://raw.githubusercontent.com/pagopa/io-services-metadata/1.0.30/definitions.yml", diff --git a/publiccode.yml b/publiccode.yml index 31340c83688..b5446347218 100644 --- a/publiccode.yml +++ b/publiccode.yml @@ -5,11 +5,11 @@ publiccodeYmlVersion: '0.2' name: IO logo: "img/app-logo.svg" -releaseDate: '2024-02-06' +releaseDate: '2024-02-15' url: 'https://github.com/pagopa/io-app' applicationSuite: IO landingURL: 'https://io.italia.it/' -softwareVersion: 2.53.0-rc.1 +softwareVersion: 2.54.0-rc.0 developmentStatus: beta softwareType: standalone/mobile roadmap: 'https://io.italia.it/' From b7257ad29a0c7ccf0d39a87e22c0a08559286c41 Mon Sep 17 00:00:00 2001 From: Federico Mastrini Date: Thu, 15 Feb 2024 11:25:07 +0100 Subject: [PATCH 036/190] chore: [IOBP-544] Add `usePagoPaPayment` custom hook (#5503) ## Short description This PR introduces the `usePagoPaPayment` custom hook, which centralizes the initialization and start of a pagoPA payment flow. ## List of changes proposed in this pull request - Added `usePagoPaPayment` custom hook - Replaced payment initialization inside playgrounds screen - Small refactorings for types ## How to test Within new wallet Payment playgrounds, you should be able to start a payment flow. --------- Co-authored-by: Martino Cesari Tomba <60693085+forrest57@users.noreply.github.com> --- .../components/WalletPaymentFailureDetail.tsx | 2 +- .../payment/hooks/usePagoPaPayment.ts | 124 ++++++++++++++++++ .../hooks/usePaymentFailureSupportModal.tsx | 2 +- .../screens/WalletPaymentDetailScreen.tsx | 2 +- .../screens/WalletPaymentOutcomeScreen.tsx | 11 +- .../payment/store/__tests__/store.test.ts | 3 +- .../payment/store/actions/networking.ts | 2 +- .../payment/store/actions/orchestration.ts | 9 +- .../walletV3/payment/store/reducers/index.ts | 37 ++---- .../walletV3/payment/types/PaymentHistory.ts | 10 ++ .../{failure.ts => WalletPaymentFailure.ts} | 0 .../payment/types/WalletPaymentPspSortType.ts | 1 + ts/features/walletV3/payment/types/index.ts | 11 +- .../playgrounds/WalletPaymentPlayground.tsx | 43 ++---- 14 files changed, 185 insertions(+), 72 deletions(-) create mode 100644 ts/features/walletV3/payment/hooks/usePagoPaPayment.ts create mode 100644 ts/features/walletV3/payment/types/PaymentHistory.ts rename ts/features/walletV3/payment/types/{failure.ts => WalletPaymentFailure.ts} (100%) create mode 100644 ts/features/walletV3/payment/types/WalletPaymentPspSortType.ts diff --git a/ts/features/walletV3/payment/components/WalletPaymentFailureDetail.tsx b/ts/features/walletV3/payment/components/WalletPaymentFailureDetail.tsx index 288590467c6..8e0c21a706f 100644 --- a/ts/features/walletV3/payment/components/WalletPaymentFailureDetail.tsx +++ b/ts/features/walletV3/payment/components/WalletPaymentFailureDetail.tsx @@ -12,7 +12,7 @@ import { IOStackNavigationProp } from "../../../../navigation/params/AppParamsList"; import { usePaymentFailureSupportModal } from "../hooks/usePaymentFailureSupportModal"; -import { WalletPaymentFailure } from "../types/failure"; +import { WalletPaymentFailure } from "../types/WalletPaymentFailure"; type Props = { failure: WalletPaymentFailure; diff --git a/ts/features/walletV3/payment/hooks/usePagoPaPayment.ts b/ts/features/walletV3/payment/hooks/usePagoPaPayment.ts new file mode 100644 index 00000000000..e426593004c --- /dev/null +++ b/ts/features/walletV3/payment/hooks/usePagoPaPayment.ts @@ -0,0 +1,124 @@ +import { + RptId as PagoPaRptId, + RptIdFromString as PagoPaRptIdFromString, + PaymentNoticeNumberFromString +} from "@pagopa/io-pagopa-commons/lib/pagopa"; +import { OrganizationFiscalCode } from "@pagopa/ts-commons/lib/strings"; +import { NavigatorScreenParams, useRoute } from "@react-navigation/native"; +import { sequenceS } from "fp-ts/lib/Apply"; +import * as E from "fp-ts/lib/Either"; +import * as O from "fp-ts/lib/Option"; +import { pipe } from "fp-ts/lib/function"; +import { RptId } from "../../../../../definitions/pagopa/ecommerce/RptId"; +import { + AppParamsList, + useIONavigation +} from "../../../../navigation/params/AppParamsList"; +import { useIODispatch } from "../../../../store/hooks"; +import { WalletPaymentRoutes } from "../navigation/routes"; +import { + PaymentInitStateParams, + walletPaymentInitState +} from "../store/actions/orchestration"; +import { PaymentStartRoute } from "../types"; + +type PagoPaPaymentParams = Omit; + +/** + * A hook for initiating a PagoPA payment flow. + * This hook provides functions to start a payment flow using various input methods. + * @returns An object containing functions to start different types of payment flows. + */ +const usePagoPaPayment = () => { + const route = useRoute(); + const dispatch = useIODispatch(); + const navigation = useIONavigation(); + + /** + * Initializes the payment state based on the provided parameters. + * The initialization includes the store of the current route which allows the app to + * return to it when the payment flow is finished. + * @param {PagoPaPaymentParams} params - Parameters for initializing the payment state. + */ + const initPaymentState = ({ startOrigin }: PagoPaPaymentParams) => { + const startRoute: PaymentStartRoute = { + routeName: route.name as keyof AppParamsList, + routeKey: + route.key as keyof NavigatorScreenParams["screen"] + }; + dispatch( + walletPaymentInitState({ + startRoute, + startOrigin + }) + ); + }; + + /** + * Initiates the payment flow using the provided RptId string and additional parameters. + * @param {RptId} rptId - The RptId for the payment flow. + * @param {PagoPaPaymentParams} params - Additional parameters for the payment flow. + */ + const startPaymentFlow = (rptId: RptId, params: PagoPaPaymentParams = {}) => { + initPaymentState(params); + navigation.navigate(WalletPaymentRoutes.WALLET_PAYMENT_MAIN, { + screen: WalletPaymentRoutes.WALLET_PAYMENT_DETAIL, + params: { + rptId + } + }); + }; + + /** + * Initiates the payment flow using the provided PagoPA RptId and additional parameters. + * @param {PagoPaRptId} rptId - The PagoPA RptId for the payment flow. + * @param {PagoPaPaymentParams} params - Additional parameters for the payment flow. + */ + const startPaymentFlowWithRptId = ( + rptId: PagoPaRptId, + params: PagoPaPaymentParams = {} + ) => { + pipe( + O.fromNullable(rptId), + O.map(PagoPaRptIdFromString.encode), + O.map(RptId.decode), + O.chain(O.fromEither), + O.map(rptIdString => startPaymentFlow(rptIdString, params)) + ); + }; + + /** + * Initiates the payment flow using the provided payment data and additional parameters. + * @param {Object} data - Payment data containing the payment notice number and an organization fiscal code. + * @param {PagoPaPaymentParams} params - Additional parameters for the payment flow. + */ + const startPaymentFlowWithData = ( + data: { + paymentNoticeNumber: string; + organizationFiscalCode: string; + }, + params: PagoPaPaymentParams = {} + ) => { + pipe( + sequenceS(E.Monad)({ + paymentNoticeNumber: PaymentNoticeNumberFromString.decode( + data.paymentNoticeNumber + ), + organizationFiscalCode: OrganizationFiscalCode.decode( + data.organizationFiscalCode + ) + }), + E.map(PagoPaRptIdFromString.encode), + E.chain(RptId.decode), + E.map(rptIdString => startPaymentFlow(rptIdString, params)) + ); + }; + + return { + startPaymentFlow, + startPaymentFlowWithRptId, + startPaymentFlowWithData + }; +}; + +export { usePagoPaPayment }; diff --git a/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx b/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx index 2dd47feab59..1041a205247 100644 --- a/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx +++ b/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx @@ -39,7 +39,7 @@ import { WalletPaymentOutcome, getWalletPaymentOutcomeEnumByValue } from "../types/PaymentOutcomeEnum"; -import { WalletPaymentFailure } from "../types/failure"; +import { WalletPaymentFailure } from "../types/WalletPaymentFailure"; type PaymentFailureSupportModalParams = { failure?: WalletPaymentFailure; diff --git a/ts/features/walletV3/payment/screens/WalletPaymentDetailScreen.tsx b/ts/features/walletV3/payment/screens/WalletPaymentDetailScreen.tsx index 7969f2c538d..817543dfe02 100644 --- a/ts/features/walletV3/payment/screens/WalletPaymentDetailScreen.tsx +++ b/ts/features/walletV3/payment/screens/WalletPaymentDetailScreen.tsx @@ -50,7 +50,7 @@ import { WalletPaymentParamsList } from "../navigation/params"; import { WalletPaymentRoutes } from "../navigation/routes"; import { walletPaymentGetDetails } from "../store/actions/networking"; import { walletPaymentDetailsSelector } from "../store/selectors"; -import { WalletPaymentFailure } from "../types/failure"; +import { WalletPaymentFailure } from "../types/WalletPaymentFailure"; type WalletPaymentDetailScreenNavigationParams = { rptId: RptId; diff --git a/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx b/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx index 45a610017c9..3a65a40900a 100644 --- a/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx +++ b/ts/features/walletV3/payment/screens/WalletPaymentOutcomeScreen.tsx @@ -1,5 +1,5 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; -import { RouteProp, useNavigation, useRoute } from "@react-navigation/native"; +import { RouteProp, useRoute } from "@react-navigation/native"; import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import React from "react"; @@ -8,12 +8,10 @@ import { OperationResultScreenContentProps } from "../../../../components/screens/OperationResultScreenContent"; import I18n from "../../../../i18n"; -import { - AppParamsList, - IOStackNavigationProp -} from "../../../../navigation/params/AppParamsList"; +import { useIONavigation } from "../../../../navigation/params/AppParamsList"; import { useIOSelector } from "../../../../store/hooks"; import { formatNumberCentsToAmount } from "../../../../utils/stringBuilder"; +import { useAvoidHardwareBackButton } from "../../../../utils/useAvoidHardwareBackButton"; import { WalletPaymentFeebackBanner } from "../components/WalletPaymentFeedbackBanner"; import { usePaymentFailureSupportModal } from "../hooks/usePaymentFailureSupportModal"; import { WalletPaymentParamsList } from "../navigation/params"; @@ -25,7 +23,6 @@ import { WalletPaymentOutcome, WalletPaymentOutcomeEnum } from "../types/PaymentOutcomeEnum"; -import { useAvoidHardwareBackButton } from "../../../../utils/useAvoidHardwareBackButton"; type WalletPaymentOutcomeScreenNavigationParams = { outcome: WalletPaymentOutcome; @@ -42,7 +39,7 @@ const WalletPaymentOutcomeScreen = () => { const { params } = useRoute(); const { outcome } = params; - const navigation = useNavigation>(); + const navigation = useIONavigation(); const paymentDetailsPot = useIOSelector(walletPaymentDetailsSelector); const paymentStartRoute = useIOSelector(walletPaymentStartRouteSelector); diff --git a/ts/features/walletV3/payment/store/__tests__/store.test.ts b/ts/features/walletV3/payment/store/__tests__/store.test.ts index 1ea468f021c..7afa77fd22c 100644 --- a/ts/features/walletV3/payment/store/__tests__/store.test.ts +++ b/ts/features/walletV3/payment/store/__tests__/store.test.ts @@ -13,7 +13,8 @@ const INITIAL_STATE: WalletPaymentState = { chosenPaymentMethod: O.none, chosenPsp: O.none, transaction: pot.none, - authorizationUrl: pot.none + authorizationUrl: pot.none, + paymentHistory: {} }; describe("Test Wallet reducer", () => { diff --git a/ts/features/walletV3/payment/store/actions/networking.ts b/ts/features/walletV3/payment/store/actions/networking.ts index c9fd9e58e4d..3e316c075f2 100644 --- a/ts/features/walletV3/payment/store/actions/networking.ts +++ b/ts/features/walletV3/payment/store/actions/networking.ts @@ -16,7 +16,7 @@ import { TransactionInfo } from "../../../../../../definitions/pagopa/ecommerce/ import { Wallets } from "../../../../../../definitions/pagopa/ecommerce/Wallets"; import { PaymentMethodsResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentMethodsResponse"; import { NetworkError } from "../../../../../utils/errors"; -import { WalletPaymentFailure } from "../../types/failure"; +import { WalletPaymentFailure } from "../../types/WalletPaymentFailure"; export const walletPaymentNewSessionToken = createAsyncAction( "WALLET_PAYMENT_NEW_SESSION_TOKEN_REQUEST", diff --git a/ts/features/walletV3/payment/store/actions/orchestration.ts b/ts/features/walletV3/payment/store/actions/orchestration.ts index 88e3286fe0e..306bd66920b 100644 --- a/ts/features/walletV3/payment/store/actions/orchestration.ts +++ b/ts/features/walletV3/payment/store/actions/orchestration.ts @@ -1,6 +1,13 @@ import { ActionType, createStandardAction } from "typesafe-actions"; import { Bundle } from "../../../../../../definitions/pagopa/ecommerce/Bundle"; import { WalletInfo } from "../../../../../../definitions/pagopa/ecommerce/WalletInfo"; +import { PaymentStartOrigin, PaymentStartRoute } from "../../types"; + +export type PaymentInitStateParams = { + startOrigin?: PaymentStartOrigin; + startRoute?: PaymentStartRoute; + showTransaction?: boolean; +}; /** * Action to initialize the state of a payment, optionally you can specify the route to go back to @@ -8,7 +15,7 @@ import { WalletInfo } from "../../../../../../definitions/pagopa/ecommerce/Walle */ export const walletPaymentInitState = createStandardAction( "WALLET_PAYMENT_INIT_STATE" -)(); +)(); export const walletPaymentPickPaymentMethod = createStandardAction( "WALLET_PAYMENT_PICK_PAYMENT_METHOD" diff --git a/ts/features/walletV3/payment/store/reducers/index.ts b/ts/features/walletV3/payment/store/reducers/index.ts index 11976ca858c..082819d8e82 100644 --- a/ts/features/walletV3/payment/store/reducers/index.ts +++ b/ts/features/walletV3/payment/store/reducers/index.ts @@ -1,21 +1,17 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; -import { NavigatorScreenParams } from "@react-navigation/native"; -import { sequenceS } from "fp-ts/lib/Apply"; import * as O from "fp-ts/lib/Option"; -import { pipe } from "fp-ts/lib/function"; import { getType } from "typesafe-actions"; import { Bundle } from "../../../../../../definitions/pagopa/ecommerce/Bundle"; +import { PaymentMethodsResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentMethodsResponse"; import { PaymentRequestsGetResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentRequestsGetResponse"; import { RptId } from "../../../../../../definitions/pagopa/ecommerce/RptId"; import { TransactionInfo } from "../../../../../../definitions/pagopa/ecommerce/TransactionInfo"; -import { PaymentMethodsResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentMethodsResponse"; import { WalletInfo } from "../../../../../../definitions/pagopa/ecommerce/WalletInfo"; import { Wallets } from "../../../../../../definitions/pagopa/ecommerce/Wallets"; -import NavigationService from "../../../../../navigation/NavigationService"; -import { AppParamsList } from "../../../../../navigation/params/AppParamsList"; import { Action } from "../../../../../store/actions/types"; import { NetworkError } from "../../../../../utils/errors"; -import { WalletPaymentFailure } from "../../types/failure"; +import { PaymentHistory, PaymentStartRoute } from "../../types"; +import { WalletPaymentFailure } from "../../types/WalletPaymentFailure"; import { walletPaymentAuthorization, walletPaymentCalculateFees, @@ -49,10 +45,9 @@ export type WalletPaymentState = { chosenPsp: O.Option; transaction: pot.Pot; authorizationUrl: pot.Pot; - startRoute?: { - routeName: keyof AppParamsList; - routeKey: NavigatorScreenParams["screen"]; - }; + paymentHistory: PaymentHistory; + startRoute?: PaymentStartRoute; + showTransaction?: boolean; }; const INITIAL_STATE: WalletPaymentState = { @@ -64,7 +59,8 @@ const INITIAL_STATE: WalletPaymentState = { chosenPaymentMethod: O.none, chosenPsp: O.none, transaction: pot.none, - authorizationUrl: pot.none + authorizationUrl: pot.none, + paymentHistory: {} }; // eslint-disable-next-line complexity @@ -74,20 +70,13 @@ const reducer = ( ): WalletPaymentState => { switch (action.type) { case getType(walletPaymentInitState): - const startRoute = pipe( - sequenceS(O.Monad)({ - routeName: O.fromNullable( - NavigationService.getCurrentRouteName() as keyof AppParamsList - ), - routeKey: O.fromNullable( - NavigationService.getCurrentRouteKey() as keyof NavigatorScreenParams["screen"] - ) - }), - O.toUndefined - ); return { ...INITIAL_STATE, - startRoute + paymentHistory: { + startOrigin: action.payload.startOrigin + }, + startRoute: action.payload.startRoute, + showTransaction: action.payload.showTransaction }; // eCommerce Session token diff --git a/ts/features/walletV3/payment/types/PaymentHistory.ts b/ts/features/walletV3/payment/types/PaymentHistory.ts new file mode 100644 index 00000000000..e72b6466a35 --- /dev/null +++ b/ts/features/walletV3/payment/types/PaymentHistory.ts @@ -0,0 +1,10 @@ +export type PaymentStartOrigin = + | "message" + | "qrcode_scan" + | "poste_datamatrix_scan" + | "manual_insertion" + | "donation"; + +export type PaymentHistory = { + startOrigin?: PaymentStartOrigin; +}; diff --git a/ts/features/walletV3/payment/types/failure.ts b/ts/features/walletV3/payment/types/WalletPaymentFailure.ts similarity index 100% rename from ts/features/walletV3/payment/types/failure.ts rename to ts/features/walletV3/payment/types/WalletPaymentFailure.ts diff --git a/ts/features/walletV3/payment/types/WalletPaymentPspSortType.ts b/ts/features/walletV3/payment/types/WalletPaymentPspSortType.ts new file mode 100644 index 00000000000..caa0f9e1cd8 --- /dev/null +++ b/ts/features/walletV3/payment/types/WalletPaymentPspSortType.ts @@ -0,0 +1 @@ +export type WalletPaymentPspSortType = "default" | "name" | "amount"; diff --git a/ts/features/walletV3/payment/types/index.ts b/ts/features/walletV3/payment/types/index.ts index caa0f9e1cd8..adf77278be6 100644 --- a/ts/features/walletV3/payment/types/index.ts +++ b/ts/features/walletV3/payment/types/index.ts @@ -1 +1,10 @@ -export type WalletPaymentPspSortType = "default" | "name" | "amount"; +import { NavigatorScreenParams } from "@react-navigation/native"; +import { AppParamsList } from "../../../../navigation/params/AppParamsList"; + +export type { WalletPaymentPspSortType } from "./WalletPaymentPspSortType"; +export type { PaymentStartOrigin, PaymentHistory } from "./PaymentHistory"; + +export type PaymentStartRoute = { + routeName: keyof AppParamsList; + routeKey: NavigatorScreenParams["screen"]; +}; diff --git a/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx b/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx index 0af4be895dd..35c1a059de6 100644 --- a/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx +++ b/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx @@ -5,33 +5,22 @@ import { } from "@pagopa/io-app-design-system"; import { RptId as PagoPaRptId, - PaymentNoticeNumberFromString, - RptIdFromString as PagoPaRptIdFromString + RptIdFromString as PagoPaRptIdFromString, + PaymentNoticeNumberFromString } from "@pagopa/io-pagopa-commons/lib/pagopa"; -import { useNavigation } from "@react-navigation/native"; -import { sequenceS } from "fp-ts/lib/Apply"; import * as E from "fp-ts/lib/Either"; -import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import React from "react"; -import { RptId } from "../../../../definitions/pagopa/ecommerce/RptId"; import { validateOrganizationFiscalCode, validatePaymentNoticeNumber } from "../../../features/walletV3/common/utils/validation"; -import { WalletPaymentRoutes } from "../../../features/walletV3/payment/navigation/routes"; -import { walletPaymentInitState } from "../../../features/walletV3/payment/store/actions/orchestration"; +import { usePagoPaPayment } from "../../../features/walletV3/payment/hooks/usePagoPaPayment"; import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; import I18n from "../../../i18n"; -import { - AppParamsList, - IOStackNavigationProp -} from "../../../navigation/params/AppParamsList"; -import { useIODispatch } from "../../../store/hooks"; const WalletPaymentPlayground = () => { - const dispatch = useIODispatch(); - const navigation = useNavigation>(); + const { startPaymentFlowWithData } = usePagoPaPayment(); const [rptId, setRptId] = React.useState(); const [paymentNoticeNumber, setPaymentNoticeNumber] = @@ -54,31 +43,17 @@ const WalletPaymentPlayground = () => { React.useEffect(() => { pipe( - sequenceS(E.Monad)({ - paymentNoticeNumber: E.right(paymentNoticeNumber), - organizationFiscalCode: E.right(organizationFiscalCode) - }), - E.chain(PagoPaRptId.decode), + PagoPaRptId.decode({ paymentNoticeNumber, organizationFiscalCode }), E.map(setRptId), E.getOrElse(() => setRptId(undefined)) ); }, [paymentNoticeNumber, organizationFiscalCode]); const navigateToWalletPayment = () => { - pipe( - rptId, - O.fromNullable, - O.map(PagoPaRptIdFromString.encode), - O.map(rptId => { - dispatch(walletPaymentInitState()); - navigation.navigate(WalletPaymentRoutes.WALLET_PAYMENT_MAIN, { - screen: WalletPaymentRoutes.WALLET_PAYMENT_DETAIL, - params: { - rptId: rptId as RptId - } - }); - }) - ); + startPaymentFlowWithData({ + paymentNoticeNumber, + organizationFiscalCode + }); }; const generateValidRandomRptId = () => { From ca54cd8352b97bd4fe50b91c37c29c3987d43fb2 Mon Sep 17 00:00:00 2001 From: Federico Mastrini Date: Fri, 16 Feb 2024 14:09:13 +0100 Subject: [PATCH 037/190] chore: [IOBP-549] Add new wallet payments history tracking (#5515) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⚠️ Depends on https://github.com/pagopa/io-app/pull/5503 ## Short description This PR implements payment history tracking within the new wallet's payment flow. Tracking saves all current active payment data and stores the history of the last 15 payments for later retrieval. ## List of changes proposed in this pull request - Added `history` feature within the wallet's `payment` feature - Added payment history data to Zendesk's support request ## How to test Within the payment flow, using Reactotron or any other tool to see the Redux store content, start a payment flow and check the content of `features/wallet/payment/history`. It should be updated with the payment data. --------- Co-authored-by: Martino Cesari Tomba <60693085+forrest57@users.noreply.github.com> --- .../walletV3/common/store/actions/index.ts | 4 +- .../walletV3/common/store/reducers/index.ts | 14 +- .../history/store/__tests__/store.test.ts | 54 +++++++ .../walletV3/history/store/actions/index.ts | 10 ++ .../walletV3/history/store/reducers/index.ts | 135 ++++++++++++++++++ .../walletV3/history/store/selectors/index.ts | 7 + ts/features/walletV3/history/types/index.ts | 17 +++ .../hooks/usePaymentFailureSupportModal.tsx | 14 +- .../useWalletPaymentAuthorizationModal.tsx | 4 +- .../payment/store/__tests__/store.test.ts | 3 +- .../walletV3/payment/store/reducers/index.ts | 9 +- ts/features/walletV3/payment/types/index.ts | 10 +- .../playgrounds/WalletPaymentPlayground.tsx | 3 +- ts/screens/profile/playgrounds/utils.ts | 17 +++ 14 files changed, 279 insertions(+), 22 deletions(-) create mode 100644 ts/features/walletV3/history/store/__tests__/store.test.ts create mode 100644 ts/features/walletV3/history/store/actions/index.ts create mode 100644 ts/features/walletV3/history/store/reducers/index.ts create mode 100644 ts/features/walletV3/history/store/selectors/index.ts create mode 100644 ts/features/walletV3/history/types/index.ts create mode 100644 ts/screens/profile/playgrounds/utils.ts diff --git a/ts/features/walletV3/common/store/actions/index.ts b/ts/features/walletV3/common/store/actions/index.ts index fde34b55063..24b00a8f78a 100644 --- a/ts/features/walletV3/common/store/actions/index.ts +++ b/ts/features/walletV3/common/store/actions/index.ts @@ -1,4 +1,5 @@ import { WalletDetailsActions } from "../../../details/store/actions"; +import { WalletPaymentHistoryActions } from "../../../history/store/actions"; import { WalletOnboardingActions } from "../../../onboarding/store/actions"; import { WalletPaymentActions } from "../../../payment/store/actions"; import { WalletTransactionActions } from "../../../transaction/store/actions"; @@ -7,4 +8,5 @@ export type WalletActions = | WalletOnboardingActions | WalletDetailsActions | WalletPaymentActions - | WalletTransactionActions; + | WalletTransactionActions + | WalletPaymentHistoryActions; diff --git a/ts/features/walletV3/common/store/reducers/index.ts b/ts/features/walletV3/common/store/reducers/index.ts index 071b27a0448..9f79b0176c4 100644 --- a/ts/features/walletV3/common/store/reducers/index.ts +++ b/ts/features/walletV3/common/store/reducers/index.ts @@ -1,13 +1,17 @@ import { combineReducers } from "redux"; +import { PersistPartial } from "redux-persist"; +import walletDetailsReducer, { + WalletDetailsState +} from "../../../details/store"; +import walletPaymentHistoryReducer, { + WalletPaymentHistoryState +} from "../../../history/store/reducers"; import walletOnboardingReducer, { WalletOnboardingState } from "../../../onboarding/store"; import walletPaymentReducer, { WalletPaymentState } from "../../../payment/store/reducers"; -import walletDetailsReducer, { - WalletDetailsState -} from "../../../details/store"; import walletTransactionReducer, { WalletTransactionState } from "../../../transaction/store"; @@ -17,13 +21,15 @@ export type WalletState = { details: WalletDetailsState; payment: WalletPaymentState; transaction: WalletTransactionState; + history: WalletPaymentHistoryState & PersistPartial; }; const walletReducer = combineReducers({ onboarding: walletOnboardingReducer, details: walletDetailsReducer, payment: walletPaymentReducer, - transaction: walletTransactionReducer + transaction: walletTransactionReducer, + history: walletPaymentHistoryReducer }); export default walletReducer; diff --git a/ts/features/walletV3/history/store/__tests__/store.test.ts b/ts/features/walletV3/history/store/__tests__/store.test.ts new file mode 100644 index 00000000000..9cb7669fc8b --- /dev/null +++ b/ts/features/walletV3/history/store/__tests__/store.test.ts @@ -0,0 +1,54 @@ +import MockDate from "mockdate"; +import { createStore } from "redux"; +import { applicationChangeState } from "../../../../../store/actions/application"; +import { appReducer } from "../../../../../store/reducers"; +import { walletPaymentInitState } from "../../../payment/store/actions/orchestration"; +import { PaymentStartOrigin } from "../../../payment/types"; +import { + selectWalletOngoingPaymentHistory, + selectWalletPaymentHistoryArchive +} from "../selectors"; + +const MOCKED_LOOKUP_ID = "123456"; +const MOCKED_DATE = new Date(); + +jest.mock("../../../../../utils/pmLookUpId", () => ({ + getLookUpId: () => MOCKED_LOOKUP_ID +})); + +describe("Test Wallet payment history reducers and selectors", () => { + beforeAll(() => { + jest.useFakeTimers(); + MockDate.set(MOCKED_DATE); + }); + + it("should have INITIAL_STATE before any dispatched action", () => { + const globalState = appReducer(undefined, applicationChangeState("active")); + expect(globalState.features.wallet.history).toStrictEqual({ + archive: [] + }); + expect(selectWalletPaymentHistoryArchive(globalState)).toStrictEqual([]); + expect(selectWalletOngoingPaymentHistory(globalState)).toBeUndefined(); + }); + + it("should update ongoing payment history", () => { + const T_START_ORIGIN: PaymentStartOrigin = "manual_insertion"; + + const globalState = appReducer(undefined, applicationChangeState("active")); + const store = createStore(appReducer, globalState as any); + store.dispatch( + walletPaymentInitState({ + startOrigin: T_START_ORIGIN + }) + ); + + expect( + store.getState().features.wallet.history.ongoingPayment + ).toStrictEqual({ + startOrigin: T_START_ORIGIN, + lookupId: MOCKED_LOOKUP_ID, + startedAt: MOCKED_DATE + }); + expect(store.getState().features.wallet.history.archive).toStrictEqual([]); + }); +}); diff --git a/ts/features/walletV3/history/store/actions/index.ts b/ts/features/walletV3/history/store/actions/index.ts new file mode 100644 index 00000000000..81309882185 --- /dev/null +++ b/ts/features/walletV3/history/store/actions/index.ts @@ -0,0 +1,10 @@ +import { ActionType, createStandardAction } from "typesafe-actions"; +import { WalletPaymentOutcome } from "../../../payment/types/PaymentOutcomeEnum"; + +export const walletPaymentHistoryStoreOutcome = createStandardAction( + "WALLET_PAYMENT_HISTORY_STORE_OUTCOME" +)(); + +export type WalletPaymentHistoryActions = ActionType< + typeof walletPaymentHistoryStoreOutcome +>; diff --git a/ts/features/walletV3/history/store/reducers/index.ts b/ts/features/walletV3/history/store/reducers/index.ts new file mode 100644 index 00000000000..ba206cb70b1 --- /dev/null +++ b/ts/features/walletV3/history/store/reducers/index.ts @@ -0,0 +1,135 @@ +import * as O from "fp-ts/lib/Option"; +import { pipe } from "fp-ts/lib/function"; +import _ from "lodash"; +import { AsyncStorage } from "react-native"; +import { PersistConfig, persistReducer } from "redux-persist"; +import { getType } from "typesafe-actions"; +import { differentProfileLoggedIn } from "../../../../../store/actions/crossSessions"; +import { clearCache } from "../../../../../store/actions/profile"; +import { Action } from "../../../../../store/actions/types"; +import { getLookUpId } from "../../../../../utils/pmLookUpId"; +import { + walletPaymentCreateTransaction, + walletPaymentGetDetails, + walletPaymentGetTransactionInfo +} from "../../../payment/store/actions/networking"; +import { walletPaymentInitState } from "../../../payment/store/actions/orchestration"; +import { WalletPaymentFailure } from "../../../payment/types/WalletPaymentFailure"; +import { PaymentHistory } from "../../types"; +import { walletPaymentHistoryStoreOutcome } from "../actions"; + +export type WalletPaymentHistoryState = { + ongoingPayment?: PaymentHistory; + archive: ReadonlyArray; +}; + +const INITIAL_STATE: WalletPaymentHistoryState = { + archive: [] +}; + +export const ARCHIVE_SIZE = 15; + +const reducer = ( + state: WalletPaymentHistoryState = INITIAL_STATE, + action: Action +): WalletPaymentHistoryState => { + switch (action.type) { + case getType(walletPaymentInitState): + return { + ...state, + ongoingPayment: { + startOrigin: action.payload.startOrigin, + startedAt: new Date(), + lookupId: getLookUpId() + } + }; + case getType(walletPaymentGetDetails.request): + return updatePaymentHistory( + state, + { + rptId: action.payload + }, + true + ); + case getType(walletPaymentGetDetails.success): + return updatePaymentHistory(state, { + verifiedData: action.payload + }); + case getType(walletPaymentCreateTransaction.success): + case getType(walletPaymentGetTransactionInfo.success): + return updatePaymentHistory(state, { + transaction: action.payload + }); + case getType(walletPaymentHistoryStoreOutcome): + return updatePaymentHistory(state, { + outcome: action.payload + }); + case getType(walletPaymentGetDetails.failure): + case getType(walletPaymentCreateTransaction.failure): + case getType(walletPaymentGetTransactionInfo.failure): + return updatePaymentHistory(state, { + failure: pipe( + WalletPaymentFailure.decode(action.payload), + O.fromEither, + O.toUndefined + ) + }); + case getType(differentProfileLoggedIn): + case getType(clearCache): + return INITIAL_STATE; + } + return state; +}; + +const appendItemToArchive = ( + archive: ReadonlyArray, + item: PaymentHistory +): ReadonlyArray => + pipe( + archive, + // Remove previous entry if already exists + a => a.filter(({ rptId }) => !_.isEqual(rptId, item.rptId)), + // Keep only the latest ARCHIVE_SIZE - 1 entries + a => a.slice(-ARCHIVE_SIZE + 1), + // Add the new entry to the archive + a => [...a, item] + ); + +const updatePaymentHistory = ( + state: WalletPaymentHistoryState, + data: PaymentHistory, + reset: boolean = false +): WalletPaymentHistoryState => { + const updatedOngoingPaymentHistory = { + ...state.ongoingPayment, + ...data + }; + + if (reset) { + return { + ongoingPayment: updatedOngoingPaymentHistory, + archive: appendItemToArchive(state.archive, updatedOngoingPaymentHistory) + }; + } + + return { + ongoingPayment: updatedOngoingPaymentHistory, + archive: [..._.dropRight(state.archive), updatedOngoingPaymentHistory] + }; +}; + +const CURRENT_REDUX_PAYMENT_HISTORY_STORE_VERSION = -1; + +const persistConfig: PersistConfig = { + key: "paymentHistory", + storage: AsyncStorage, + version: CURRENT_REDUX_PAYMENT_HISTORY_STORE_VERSION, + whitelist: ["archive"] +}; + +export const walletPaymentHistoryPersistor = persistReducer< + WalletPaymentHistoryState, + Action +>(persistConfig, reducer); + +export default walletPaymentHistoryPersistor; diff --git a/ts/features/walletV3/history/store/selectors/index.ts b/ts/features/walletV3/history/store/selectors/index.ts new file mode 100644 index 00000000000..9055abd7ffb --- /dev/null +++ b/ts/features/walletV3/history/store/selectors/index.ts @@ -0,0 +1,7 @@ +import { GlobalState } from "../../../../../store/reducers/types"; + +export const selectWalletPaymentHistoryArchive = (state: GlobalState) => + state.features.wallet.history.archive; + +export const selectWalletOngoingPaymentHistory = (state: GlobalState) => + state.features.wallet.history.ongoingPayment; diff --git a/ts/features/walletV3/history/types/index.ts b/ts/features/walletV3/history/types/index.ts new file mode 100644 index 00000000000..8330e80094e --- /dev/null +++ b/ts/features/walletV3/history/types/index.ts @@ -0,0 +1,17 @@ +import { NewTransactionResponse } from "../../../../../definitions/pagopa/ecommerce/NewTransactionResponse"; +import { PaymentRequestsGetResponse } from "../../../../../definitions/pagopa/ecommerce/PaymentRequestsGetResponse"; +import { RptId } from "../../../../../definitions/pagopa/ecommerce/RptId"; +import { PaymentStartOrigin } from "../../payment/types"; +import { WalletPaymentOutcomeEnum } from "../../payment/types/PaymentOutcomeEnum"; +import { WalletPaymentFailure } from "../../payment/types/WalletPaymentFailure"; + +export type PaymentHistory = { + startOrigin?: PaymentStartOrigin; + rptId?: RptId; + startedAt?: Date; + lookupId?: string; + verifiedData?: PaymentRequestsGetResponse; + transaction?: NewTransactionResponse; + outcome?: WalletPaymentOutcomeEnum; + failure?: WalletPaymentFailure; +}; diff --git a/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx b/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx index 1041a205247..be6f83cb055 100644 --- a/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx +++ b/ts/features/walletV3/payment/hooks/usePaymentFailureSupportModal.tsx @@ -22,18 +22,21 @@ import { useIOBottomSheetAutoresizableModal } from "../../../../utils/hooks/bott import { PAGOPA_SUPPORT_PHONE_NUMBER, addTicketCustomField, + appendLog, assistanceToolRemoteConfig, resetCustomFields, zendeskCategoryId, zendeskPaymentCategory, zendeskPaymentFailure, zendeskPaymentNav, - zendeskPaymentOrgFiscalCode + zendeskPaymentOrgFiscalCode, + zendeskPaymentStartOrigin } from "../../../../utils/supportAssistance"; import { zendeskSelectedCategory, zendeskSupportStart } from "../../../zendesk/store/actions"; +import { selectWalletOngoingPaymentHistory } from "../../history/store/selectors"; import { walletPaymentRptIdSelector } from "../store/selectors"; import { WalletPaymentOutcome, @@ -60,6 +63,7 @@ const usePaymentFailureSupportModal = ({ const assistanceToolConfig = useIOSelector(assistanceToolConfigSelector); const choosenTool = assistanceToolRemoteConfig(assistanceToolConfig); const rptId = useIOSelector(walletPaymentRptIdSelector); + const paymentHistory = useIOSelector(selectWalletOngoingPaymentHistory); const dispatch = useIODispatch(); const faultCodeDetail = @@ -73,9 +77,11 @@ const usePaymentFailureSupportModal = ({ addTicketCustomField(zendeskPaymentOrgFiscalCode, organizationFiscalCode); addTicketCustomField(zendeskPaymentNav, paymentNoticeNumber); addTicketCustomField(zendeskPaymentFailure, faultCodeDetail); - // TODO Add additional info for zendesk support (IOBP-484) - // addTicketCustomField(zendeskPaymentStartOrigin, "n/a"); - // appendLog(getPaymentHistoryDetails(payment)); + addTicketCustomField( + zendeskPaymentStartOrigin, + paymentHistory?.startOrigin || "n/a" + ); + appendLog(JSON.stringify(paymentHistory)); dispatch( zendeskSupportStart({ startingRoute: "n/a", diff --git a/ts/features/walletV3/payment/hooks/useWalletPaymentAuthorizationModal.tsx b/ts/features/walletV3/payment/hooks/useWalletPaymentAuthorizationModal.tsx index 347989d3e31..b92de68c239 100644 --- a/ts/features/walletV3/payment/hooks/useWalletPaymentAuthorizationModal.tsx +++ b/ts/features/walletV3/payment/hooks/useWalletPaymentAuthorizationModal.tsx @@ -16,6 +16,7 @@ import { WalletPaymentOutcome, WalletPaymentOutcomeEnum } from "../types/PaymentOutcomeEnum"; +import { walletPaymentHistoryStoreOutcome } from "../../history/store/actions"; type Props = { onAuthorizationOutcome: (outcome: WalletPaymentOutcome) => void; @@ -51,9 +52,10 @@ export const useWalletPaymentAuthorizationModal = ({ WalletPaymentOutcome.decode, E.getOrElse(() => WalletPaymentOutcomeEnum.GENERIC_ERROR) ); + dispatch(walletPaymentHistoryStoreOutcome(outcome)); onAuthorizationOutcome(outcome); }, - [onAuthorizationOutcome] + [onAuthorizationOutcome, dispatch] ); React.useEffect(() => { diff --git a/ts/features/walletV3/payment/store/__tests__/store.test.ts b/ts/features/walletV3/payment/store/__tests__/store.test.ts index 7afa77fd22c..1ea468f021c 100644 --- a/ts/features/walletV3/payment/store/__tests__/store.test.ts +++ b/ts/features/walletV3/payment/store/__tests__/store.test.ts @@ -13,8 +13,7 @@ const INITIAL_STATE: WalletPaymentState = { chosenPaymentMethod: O.none, chosenPsp: O.none, transaction: pot.none, - authorizationUrl: pot.none, - paymentHistory: {} + authorizationUrl: pot.none }; describe("Test Wallet reducer", () => { diff --git a/ts/features/walletV3/payment/store/reducers/index.ts b/ts/features/walletV3/payment/store/reducers/index.ts index 082819d8e82..a0412ad4596 100644 --- a/ts/features/walletV3/payment/store/reducers/index.ts +++ b/ts/features/walletV3/payment/store/reducers/index.ts @@ -10,7 +10,7 @@ import { WalletInfo } from "../../../../../../definitions/pagopa/ecommerce/Walle import { Wallets } from "../../../../../../definitions/pagopa/ecommerce/Wallets"; import { Action } from "../../../../../store/actions/types"; import { NetworkError } from "../../../../../utils/errors"; -import { PaymentHistory, PaymentStartRoute } from "../../types"; +import { PaymentStartRoute } from "../../types"; import { WalletPaymentFailure } from "../../types/WalletPaymentFailure"; import { walletPaymentAuthorization, @@ -45,7 +45,6 @@ export type WalletPaymentState = { chosenPsp: O.Option; transaction: pot.Pot; authorizationUrl: pot.Pot; - paymentHistory: PaymentHistory; startRoute?: PaymentStartRoute; showTransaction?: boolean; }; @@ -59,8 +58,7 @@ const INITIAL_STATE: WalletPaymentState = { chosenPaymentMethod: O.none, chosenPsp: O.none, transaction: pot.none, - authorizationUrl: pot.none, - paymentHistory: {} + authorizationUrl: pot.none }; // eslint-disable-next-line complexity @@ -72,9 +70,6 @@ const reducer = ( case getType(walletPaymentInitState): return { ...INITIAL_STATE, - paymentHistory: { - startOrigin: action.payload.startOrigin - }, startRoute: action.payload.startRoute, showTransaction: action.payload.showTransaction }; diff --git a/ts/features/walletV3/payment/types/index.ts b/ts/features/walletV3/payment/types/index.ts index adf77278be6..b06f28976f9 100644 --- a/ts/features/walletV3/payment/types/index.ts +++ b/ts/features/walletV3/payment/types/index.ts @@ -1,8 +1,14 @@ import { NavigatorScreenParams } from "@react-navigation/native"; import { AppParamsList } from "../../../../navigation/params/AppParamsList"; -export type { WalletPaymentPspSortType } from "./WalletPaymentPspSortType"; -export type { PaymentStartOrigin, PaymentHistory } from "./PaymentHistory"; +export type WalletPaymentPspSortType = "default" | "name" | "amount"; + +export type PaymentStartOrigin = + | "message" + | "qrcode_scan" + | "poste_datamatrix_scan" + | "manual_insertion" + | "donation"; export type PaymentStartRoute = { routeName: keyof AppParamsList; diff --git a/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx b/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx index 35c1a059de6..baa4f6cbb3a 100644 --- a/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx +++ b/ts/screens/profile/playgrounds/WalletPaymentPlayground.tsx @@ -18,6 +18,7 @@ import { import { usePagoPaPayment } from "../../../features/walletV3/payment/hooks/usePagoPaPayment"; import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; import I18n from "../../../i18n"; +import { generateValidRandomRptIdString } from "./utils"; const WalletPaymentPlayground = () => { const { startPaymentFlowWithData } = usePagoPaPayment(); @@ -58,7 +59,7 @@ const WalletPaymentPlayground = () => { const generateValidRandomRptId = () => { pipe( - "00000123456002160020399398578", + generateValidRandomRptIdString(), PagoPaRptIdFromString.decode, E.map(setRptId) ); diff --git a/ts/screens/profile/playgrounds/utils.ts b/ts/screens/profile/playgrounds/utils.ts new file mode 100644 index 00000000000..7829ad566e9 --- /dev/null +++ b/ts/screens/profile/playgrounds/utils.ts @@ -0,0 +1,17 @@ +const generateRandomNumberString = (length: number) => { + const characters = "0123456789"; + + return Array.from(Array(length).keys()) + .map(() => { + const randomIndex = Math.floor(Math.random() * characters.length); + return characters[randomIndex]; + }) + .join(""); +}; + +export const generateValidRandomRptIdString = () => { + const organizationFiscalCode = generateRandomNumberString(11); + const paymentNoticeNumber = "002" + generateRandomNumberString(15); + + return `${organizationFiscalCode}${paymentNoticeNumber}`; +}; From 44001272b06441ba3644ba2c89ac8c083f2860c8 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Fri, 16 Feb 2024 17:56:35 +0100 Subject: [PATCH 038/190] chore(Cross): [IOAPPX-212] Removes current route selector logic from header first level handler logic (#5510) --- ts/navigation/AuthenticatedStackNavigator.tsx | 6 +- ts/navigation/TabNavigator.tsx | 23 ++++++- .../components/HeaderFirstLevelHandler.tsx | 64 +++++++------------ 3 files changed, 50 insertions(+), 43 deletions(-) diff --git a/ts/navigation/AuthenticatedStackNavigator.tsx b/ts/navigation/AuthenticatedStackNavigator.tsx index 649298bc8d2..68824b43960 100644 --- a/ts/navigation/AuthenticatedStackNavigator.tsx +++ b/ts/navigation/AuthenticatedStackNavigator.tsx @@ -106,7 +106,11 @@ const AuthenticatedStackNavigator = () => { headerMode: "screen" }} > - + { isLoading={startupLoaded === StartupStatusEnum.ONBOARDING} loadingOpacity={1} > - { name={MESSAGES_ROUTES.MESSAGES_HOME} component={MessagesHomeScreen} options={{ + header: () => ( + + ), title: I18n.t("global.navigator.messages"), tabBarIcon: ({ color, focused }) => ( { name={ROUTES.WALLET_HOME} component={WalletHomeScreen} options={{ + header: () => ( + + ), title: I18n.t("global.navigator.wallet"), tabBarIcon: ({ color, focused }) => ( { } }} options={{ + header: () => ( + + ), title: I18n.t("global.navigator.scan"), tabBarIcon: ({ color, focused }) => ( { name={ROUTES.SERVICES_HOME} component={ServicesHomeScreen} options={{ + header: () => ( + + ), title: I18n.t("global.navigator.services"), tabBarIcon: ({ color, focused }) => ( { name={ROUTES.PROFILE_MAIN} component={ProfileMainScreen} options={{ + header: () => ( + + ), title: I18n.t("global.navigator.profile"), tabBarIcon: ({ color, focused }) => ( ; -type TabRoutes = - | Exclude - | "MESSAGES_INBOX" - | "MESSAGES_ARCHIVE" - | "SERVICES_NATIONAL" - | "SERVICES_LOCAL"; +type TabRoutes = keyof MainTabParamsList; const headerHelpByRoute: Record = { BARCODE_SCAN: {}, - MESSAGES_ARCHIVE: { + [MESSAGES_ROUTES.MESSAGES_HOME]: { faqCategories: ["messages"], contextualHelpMarkdown: { title: "messages.contextualHelpTitle", body: "messages.contextualHelpContent" } }, - MESSAGES_INBOX: { - faqCategories: ["messages"], - contextualHelpMarkdown: { - title: "messages.contextualHelpTitle", - body: "messages.contextualHelpContent" - } - }, - PROFILE_MAIN: { + [ROUTES.PROFILE_MAIN]: { faqCategories: ["profile"], contextualHelpMarkdown: { title: "profile.main.contextualHelpTitle", body: "profile.main.contextualHelpContent" } }, - SERVICES_NATIONAL: { + [ROUTES.SERVICES_HOME]: { faqCategories: ["services"], contextualHelpMarkdown: { title: "services.contextualHelpTitle", body: "services.contextualHelpContent" } }, - SERVICES_LOCAL: { - faqCategories: ["services"], - contextualHelpMarkdown: { - title: "services.contextualHelpTitle", - body: "services.contextualHelpContent" - } - }, - WALLET_HOME: { + [ROUTES.WALLET_HOME]: { faqCategories: ["wallet", "wallet_methods"], contextualHelpMarkdown: { title: "wallet.contextualHelpTitle", @@ -70,17 +52,19 @@ const headerHelpByRoute: Record = { } }; +type Props = { + currentRouteName: TabRoutes; +}; /** * This Component aims to handle the header of the first level screens. based on the current route * it will set the header title and the contextual help and the actions related to the screen * THIS COMPONENT IS NOT MEANT TO BE USED OUTSIDE THE NAVIGATION. * THIS COMPONENT WILL BE REMOVED ONCE REACT NAVIGATION WILL BE UPGRADED TO V6 */ -export const HeaderFirstLevelHandler = () => { +export const HeaderFirstLevelHandler = ({ currentRouteName }: Props) => { const dispatch = useIODispatch(); const navigation = useNavigation(); - const currentRouteName = useIOSelector(currentRouteSelector); - // console.log("currentRouteName", currentRouteName); + const requestParams = useMemo( () => pipe( @@ -121,8 +105,7 @@ export const HeaderFirstLevelHandler = () => { useEffect(() => { switch (currentRouteName) { - case "SERVICES_NATIONAL": - case "SERVICES_LOCAL": + case ROUTES.SERVICES_HOME: headerPropsRef.current = { title: I18n.t("services.title"), type: "twoActions", @@ -136,7 +119,7 @@ export const HeaderFirstLevelHandler = () => { } }; break; - case "PROFILE_MAIN": + case ROUTES.PROFILE_MAIN: headerPropsRef.current = { title: I18n.t("profile.main.title"), backgroundColor: "dark", @@ -144,8 +127,7 @@ export const HeaderFirstLevelHandler = () => { firstAction: helpAction }; break; - case "MESSAGES_INBOX": - case "MESSAGES_ARCHIVE": + case MESSAGES_ROUTES.MESSAGES_HOME: headerPropsRef.current = { title: I18n.t("messages.contentTitle"), type: "twoActions", @@ -159,8 +141,8 @@ export const HeaderFirstLevelHandler = () => { } }; break; - case "BARCODE_SCAN": - case "WALLET_HOME": + case ROUTES.BARCODE_SCAN: + case ROUTES.WALLET_HOME: headerPropsRef.current = { title: I18n.t("wallet.wallet"), type: "twoActions", @@ -178,9 +160,6 @@ export const HeaderFirstLevelHandler = () => { default: break; } - navigation.setOptions({ - header: () => - }); }, [ navigation, currentRouteName, @@ -189,5 +168,10 @@ export const HeaderFirstLevelHandler = () => { dispatch ]); - return <>{WalletHomeHeaderBottomSheet}; + return ( + <> + + {WalletHomeHeaderBottomSheet} + + ); }; From 54b613249353dbf87d76cf83e93e02df3ed6aebc Mon Sep 17 00:00:00 2001 From: Andrea Date: Fri, 16 Feb 2024 18:18:36 +0100 Subject: [PATCH 039/190] [chore] Replace deprecated currentRouteSelector selector in useStartSupportRequest hook (#5516) This PR depends on #5510 ## Short description This PR replaces a deprecated selector in the `useStartSupportRequest` hook, which was reporting an old route upon first navigation. ## List of changes proposed in this pull request - `currentRouteSelector` (which was already depreacted) has been replaced by `useRoute`, when retrieving the current screen name in the `useStartSupportRequest` hook ## How to test Check that remote FAQ are still working properly for screens that have a direct or indirect dependency on `useStartSupportRequest` hook --------- Co-authored-by: Cristiano Tofani --- ts/hooks/useStartSupportRequest.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ts/hooks/useStartSupportRequest.ts b/ts/hooks/useStartSupportRequest.ts index 04605fc5c79..b9e7a41a0a0 100644 --- a/ts/hooks/useStartSupportRequest.ts +++ b/ts/hooks/useStartSupportRequest.ts @@ -1,4 +1,5 @@ import { useCallback } from "react"; +import { useRoute } from "@react-navigation/native"; import { ToolEnum } from "../../definitions/content/AssistanceToolConfig"; import { ContextualHelpProps, @@ -7,7 +8,6 @@ import { import { zendeskSupportStart } from "../features/zendesk/store/actions"; import { useIODispatch, useIOSelector } from "../store/hooks"; import { assistanceToolConfigSelector } from "../store/reducers/backendStatus"; -import { currentRouteSelector } from "../store/reducers/navigation"; import { FAQsCategoriesType } from "../utils/faq"; import { assistanceToolRemoteConfig, @@ -25,11 +25,7 @@ export const useStartSupportRequest = ({ contextualHelp, contextualHelpMarkdown }: SupportRequestParams) => { - /** - * We have to use the deprecated currentRouteSelector because, at the moment, some components are rendered outside the navigation context. - * TODO: Full usage of navigation header and modal, in order to have always the right context - */ - const currentScreenName = useIOSelector(currentRouteSelector); + const { name: currentScreenName } = useRoute(); const dispatch = useIODispatch(); const assistanceToolConfig = useIOSelector(assistanceToolConfigSelector); From 39a26119bf56ac5f517628888998dbe3be741504 Mon Sep 17 00:00:00 2001 From: Andrea Date: Fri, 16 Feb 2024 18:32:16 +0100 Subject: [PATCH 040/190] feat: [IOCOM-851] Removed view reference (#5511) ## Short description This PR removes the view ref from the Alert in the new DS message details screen. ## List of changes proposed in this pull request - Removed the view ref ## How to test Same as #5507 --- package.json | 2 +- .../OperationResultScreenContent.test.tsx.snap | 1 - ts/features/messages/screens/MessageDetailsScreen.tsx | 7 ++----- .../__snapshots__/MessageAttachment.test.tsx.snap | 1 - yarn.lock | 8 ++++---- 5 files changed, 7 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index e13831b3b6f..60c07149b84 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "dependencies": { "@babel/plugin-transform-regenerator": "^7.18.6", "@gorhom/bottom-sheet": "^4.1.5", - "@pagopa/io-app-design-system": "1.23.1", + "@pagopa/io-app-design-system": "1.23.2", "@pagopa/io-pagopa-commons": "^3.1.0", "@pagopa/io-react-native-crypto": "^0.2.1", "@pagopa/io-react-native-login-utils": "^1.0.0", diff --git a/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap b/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap index aa4241737e9..312b379e502 100644 --- a/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap +++ b/ts/components/screens/__tests__/__snapshots__/OperationResultScreenContent.test.tsx.snap @@ -503,7 +503,6 @@ exports[`OperationResultScreenContent should match the snapshot with default pro } > (); - const message = pipe( useIOSelector(state => getPaginatedMessageById(state, messageId)), pot.toOption, @@ -139,7 +137,6 @@ export const MessageDetailsScreen = ( = 8" -"@pagopa/io-app-design-system@1.23.1": - version "1.23.1" - resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.23.1.tgz#acdc3cb37cc157c60a5a3f993223141757f49c8f" - integrity sha512-pOd36qeV6c9dALih/3+ro5g/+izQWVf5J0u4sKSr0LF9zTBZ/sDRSpd4Z3/qrrXkKcopOkMEg3lqR6TJrdsGeA== +"@pagopa/io-app-design-system@1.23.2": + version "1.23.2" + resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.23.2.tgz#739da99711af7c208b547d7c0b5cc82c77e1bad3" + integrity sha512-MqQnd5bHxGwXd+KdAb95e0Onw2C2Ic+GpJnIUSWN15sggb4oF/bl14tViMhV2yCJCpq7dYaiS8GmdWQjl2fQIQ== dependencies: "@pagopa/ts-commons" "^12.0.0" "@testing-library/jest-native" "^5.4.2" From 76c841d7b9b574ea1dfe99c4bb166be313bf4582 Mon Sep 17 00:00:00 2001 From: Damiano Plebani Date: Mon, 19 Feb 2024 10:45:24 +0100 Subject: [PATCH 041/190] chore(Cross): [IOAPPX-230] Remove `datetimepicker` and `react-native-modal-datetime-picker` dependencies (#5451) > [!caution] > This PR depends on https://github.com/pagopa/io-app/pull/5476 ## Short description This PR removes the `datetimepicker` and `react-native-modal-datetime-picker` dependencies, that were added during the development of the _Sicilia Vola_ feature: - https://github.com/pagopa/io-app/pull/3284 ## List of changes proposed in this pull request - Remove `DateTimePicker` orphan component - Update `package.json` - Update Android related conf files ## How to test Run the app on both iOS and Android --------- Co-authored-by: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> --- android/app/build.gradle | 1 - android/settings.gradle | 2 - ios/Podfile.lock | 6 --- jest-e2e.config.js | 2 +- jest.config.js | 2 +- jest.config.no.timezone.js | 2 +- package.json | 2 - ts/components/ui/DateTimePicker.tsx | 76 ----------------------------- yarn.lock | 9 +--- 9 files changed, 4 insertions(+), 98 deletions(-) delete mode 100644 ts/components/ui/DateTimePicker.tsx diff --git a/android/app/build.gradle b/android/app/build.gradle index 305c4944d0a..9a099891166 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -334,7 +334,6 @@ dependencies { } } } - implementation project(':@react-native-community_datetimepicker') implementation project(':react-native-fingerprint-scanner') implementation project(':react-native-art') implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.41" diff --git a/android/settings.gradle b/android/settings.gradle index cf96c09a5b7..42a3d842c85 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -62,7 +62,5 @@ if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") include(":ReactAndroid:hermes-engine") project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine') } -include ':@react-native-community_datetimepicker' -project(':@react-native-community_datetimepicker').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/datetimepicker/android') include ':react-native-art' project(':react-native-art').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/art/android') diff --git a/ios/Podfile.lock b/ios/Podfile.lock index fb12ef4835c..547f834da44 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -490,8 +490,6 @@ PODS: - React-Core - RNCPushNotificationIOS (1.8.0): - React-Core - - RNDateTimePicker (3.5.2): - - React-Core - RNDeviceInfo (10.8.0): - React-Core - RNFS (2.18.0): @@ -676,7 +674,6 @@ DEPENDENCIES: - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)" - - "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)" - RNDeviceInfo (from `../node_modules/react-native-device-info`) - RNFS (from `../node_modules/react-native-fs`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) @@ -868,8 +865,6 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-clipboard/clipboard" RNCPushNotificationIOS: :path: "../node_modules/@react-native-community/push-notification-ios" - RNDateTimePicker: - :path: "../node_modules/@react-native-community/datetimepicker" RNDeviceInfo: :path: "../node_modules/react-native-device-info" RNFS: @@ -997,7 +992,6 @@ SPEC CHECKSUMS: RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca RNCClipboard: f1736c75ab85b627a4d57587edb4b60999c4dd80 RNCPushNotificationIOS: 61a7c72bd1ebad3568025957d001e0f0e7b32191 - RNDateTimePicker: 7658208086d86d09e1627b5c34ba0cf237c60140 RNDeviceInfo: 5795b418ed3451ebcaf39384e6cf51f60cb931c9 RNFS: 3ab21fa6c56d65566d1fb26c2228e2b6132e5e32 RNGestureHandler: dec4645026e7401a0899f2846d864403478ff6a5 diff --git a/jest-e2e.config.js b/jest-e2e.config.js index 21194829495..b8c81d513c0 100644 --- a/jest-e2e.config.js +++ b/jest-e2e.config.js @@ -4,7 +4,7 @@ module.exports = { "^.+\\.js$": "/node_modules/react-native/jest/preprocessor.js" }, transformIgnorePatterns: [ - "node_modules/(?!(jest-)?@react-native|react-native|react-navigation|@react-navigation|react-navigation-redux-helpers|react-native-device-info|native-base|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|rn-placeholder|jsbarcode|@pagopa/react-native-cie|react-native-share|jail-monkey|@react-native-community/art|@react-native-community/push-notification-ios|@react-native-camera-roll/camera-roll|@codler|@react-native-community/datetimepicker)" + "node_modules/(?!(jest-)?@react-native|react-native|react-navigation|@react-navigation|react-navigation-redux-helpers|react-native-device-info|native-base|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|rn-placeholder|jsbarcode|@pagopa/react-native-cie|react-native-share|jail-monkey|@react-native-community/art|@react-native-community/push-notification-ios|@react-native-camera-roll/camera-roll|@codler)" ], moduleNameMapper: { "\\.svg": "/ts/__mocks__/svgMock.js" diff --git a/jest.config.js b/jest.config.js index 2b4929b5032..d253d6ba32e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,7 +4,7 @@ module.exports = { "^.+\\.js$": "/node_modules/react-native/jest/preprocessor.js" }, transformIgnorePatterns: [ - "node_modules/(?!(jest-)?@react-native|react-native|react-navigation|@react-navigation|react-navigation-redux-helpers|react-native-device-info|native-base|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|rn-placeholder|jsbarcode|@pagopa/react-native-cie|react-native-share|jail-monkey|@react-native-community/art|@react-native-community/push-notification-ios|@react-native-camera-roll/camera-roll|@codler|@react-native-community/datetimepicker|remark|unified|bail|is-plain-obj|trough|vfile|unist-util-stringify-position|mdast-util-from-markdown|mdast-util-to-string|micromark|parse-entities|character-entities|mdast-util-to-markdown|zwitch|longest-streak|@pagopa/io-react-native-zendesk|rn-qr-generator)" + "node_modules/(?!(jest-)?@react-native|react-native|react-navigation|@react-navigation|react-navigation-redux-helpers|react-native-device-info|native-base|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|rn-placeholder|jsbarcode|@pagopa/react-native-cie|react-native-share|jail-monkey|@react-native-community/art|@react-native-community/push-notification-ios|@react-native-camera-roll/camera-roll|@codler|remark|unified|bail|is-plain-obj|trough|vfile|unist-util-stringify-position|mdast-util-from-markdown|mdast-util-to-string|micromark|parse-entities|character-entities|mdast-util-to-markdown|zwitch|longest-streak|@pagopa/io-react-native-zendesk|rn-qr-generator)" ], moduleNameMapper: { "\\.svg": "/ts/__mocks__/svgMock.js" diff --git a/jest.config.no.timezone.js b/jest.config.no.timezone.js index c9197d78ffd..418de1be9c6 100644 --- a/jest.config.no.timezone.js +++ b/jest.config.no.timezone.js @@ -4,7 +4,7 @@ module.exports = { "^.+\\.js$": "/node_modules/react-native/jest/preprocessor.js" }, transformIgnorePatterns: [ - "node_modules/(?!(jest-)?@react-native|react-native|react-navigation|@react-navigation|react-navigation-redux-helpers|react-native-device-info|native-base|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|rn-placeholder|jsbarcode|@pagopa/react-native-cie|react-native-share|jail-monkey|@react-native-community/art|@react-native-community/push-notification-ios|@react-native-camera-roll/camera-roll|@codler|@react-native-community/datetimepicker|remark|unified|bail|is-plain-obj|trough|vfile|unist-util-stringify-position|mdast-util-from-markdown|mdast-util-to-string|micromark|parse-entities|character-entities|mdast-util-to-markdown|zwitch|longest-streak|@pagopa/io-react-native-zendesk)" + "node_modules/(?!(jest-)?@react-native|react-native|react-navigation|@react-navigation|react-navigation-redux-helpers|react-native-device-info|native-base|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|rn-placeholder|jsbarcode|@pagopa/react-native-cie|react-native-share|jail-monkey|@react-native-community/art|@react-native-community/push-notification-ios|@react-native-camera-roll/camera-roll|@codler|remark|unified|bail|is-plain-obj|trough|vfile|unist-util-stringify-position|mdast-util-from-markdown|mdast-util-to-string|micromark|parse-entities|character-entities|mdast-util-to-markdown|zwitch|longest-streak|@pagopa/io-react-native-zendesk)" ], moduleNameMapper: { "\\.svg": "/ts/__mocks__/svgMock.js" diff --git a/package.json b/package.json index 60c07149b84..e617841067b 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,6 @@ "@react-native-async-storage/async-storage": "^1.17.10", "@react-native-camera-roll/camera-roll": "5.6.1", "@react-native-clipboard/clipboard": "^1.10.0", - "@react-native-community/datetimepicker": "^3.5.2", "@react-native-community/push-notification-ios": "^1.8.0", "@react-native-community/slider": "^3.0.3", "@react-native-cookies/cookies": "^6.2.1", @@ -163,7 +162,6 @@ "react-native-linear-gradient": "^2.5.6", "react-native-masked-text": "^1.13.0", "react-native-mixpanel": "1.2.0", - "react-native-modal-datetime-picker": "^10.2.0", "react-native-pager-view": "^6.2.3", "react-native-pdf": "^6.4.0", "react-native-pdf-thumbnail": "^1.2.1", diff --git a/ts/components/ui/DateTimePicker.tsx b/ts/components/ui/DateTimePicker.tsx deleted file mode 100644 index fe05df77a2b..00000000000 --- a/ts/components/ui/DateTimePicker.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import * as React from "react"; -import DateTimePickerModal from "react-native-modal-datetime-picker"; -import { useState } from "react"; -import { StyleSheet, View } from "react-native"; -import { IOColors, Icon, VSpacer } from "@pagopa/io-app-design-system"; -import { H5 } from "../core/typography/H5"; -import { H4 } from "../core/typography/H4"; -import { formatDateAsLocal } from "../../utils/dates"; -import TouchableDefaultOpacity from "../TouchableDefaultOpacity"; -import I18n from "../../i18n"; - -type Props = { - date: Date | undefined; - onConfirm: (date: Date) => void; - label?: string; - minimumDate?: Date; - blocked?: boolean; -}; - -const styles = StyleSheet.create({ - container: { borderBottomWidth: 1, borderColor: IOColors.bluegreyLight }, - inputContainer: { - flex: 1, - flexDirection: "row", - justifyContent: "space-between" - } -}); - -const DateTimePicker: React.FunctionComponent = (props: Props) => { - const [showModal, setShowModal] = useState(false); - - const onConfirm = (date: Date) => { - props.onConfirm(date); - setShowModal(false); - }; - - const onDismiss = () => setShowModal(false); - - const onPress = () => { - if (props.blocked !== true) { - setShowModal(true); - } - }; - - return ( - - {props.label &&
{props.label}
} - - -

- {props.date - ? formatDateAsLocal(props.date, true, true) - : I18n.t("global.dateFormats.dateTimePicker")} -

- -
- - -
- ); -}; - -export default DateTimePicker; diff --git a/yarn.lock b/yarn.lock index 98c1aed2fae..bfc3c6de902 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3596,7 +3596,7 @@ prompts "^2.4.0" semver "^6.3.0" -"@react-native-community/datetimepicker@^3.0.2", "@react-native-community/datetimepicker@^3.5.2": +"@react-native-community/datetimepicker@^3.0.2": version "3.5.2" resolved "https://registry.yarnpkg.com/@react-native-community/datetimepicker/-/datetimepicker-3.5.2.tgz#8e6feb30f2620e5abdf565d5fe74c0c04edcf6ae" integrity sha512-TWRuAtr/DnrEcRewqvXMLea2oB+YF+SbtuYLHguALLxNJQLl/RFB7aTNZeF+OoH75zKFqtXECXV1/uxQUpA+sg== @@ -14582,13 +14582,6 @@ react-native-mixpanel@1.2.0: resolved "https://registry.yarnpkg.com/react-native-mixpanel/-/react-native-mixpanel-1.2.0.tgz#17c24151cf2039482cd20decc54ccf0e49ccebc5" integrity sha512-Xy+KEIEVFidWuASBdexZquXTJBb3JCyFM7xSgnIOZt5PRzpARGFrYMDErTUZ1wSPK+KFaf1oylInOoC2DddI/Q== -react-native-modal-datetime-picker@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/react-native-modal-datetime-picker/-/react-native-modal-datetime-picker-10.2.0.tgz#3ec5c299e8bdc9fd2ec0a1a6642a459c408b910f" - integrity sha512-eMQb3EPqHx47WrlLPTrXvmLZDwGwGH//WTWiQBUvJ+6ehDeuTjIn8/v/ANv8wxCCrt4NeHem8FQY3Z5fa4fRgQ== - dependencies: - prop-types "^15.7.2" - react-native-pager-view@^6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-6.2.3.tgz#698f6387fdf06cecc3d8d4792604419cb89cb775" From 1dce8d5329f34cdb0dd8dad375ddc21a8d413f5d Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Mon, 19 Feb 2024 12:34:54 +0100 Subject: [PATCH 042/190] chore: [IOPLT-327] Updates Zendesk npm package version (#5489) > [!caution] > This PR depends on pagopa/io-react-native-zendesk#30 ## Short description This PR upgrades @pagopa/io-react-native-zendesk version to upgrade native sdks major version. ## List of changes proposed in this pull request - bump `@pagopa/io-react-native-version` version ## How to test Check Assistance request flow. --------- Co-authored-by: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> --- .node-version | 2 +- ios/Podfile.lock | 86 +++++++++++++++++------------------ package.json | 2 +- ts/utils/supportAssistance.ts | 2 +- yarn.lock | 8 ++-- 5 files changed, 50 insertions(+), 50 deletions(-) diff --git a/.node-version b/.node-version index e65243f2ea3..a9d087399d7 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -16.19.0 +18.19.0 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 547f834da44..269266ae89b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -139,6 +139,12 @@ PODS: - React-Core - pagopa-io-react-native-login-utils (1.0.0): - React-Core + - pagopa-react-native-zendesk (0.3.29): + - React-Core + - ZendeskAnswerBotSDK + - ZendeskChatSDK + - ZendeskMessagingAPISDK + - ZendeskSupportSDK - PromisesObjC (2.0.0) - Protobuf (3.19.1) - RCT-Folly (2021.06.28.00-v2): @@ -542,12 +548,6 @@ PODS: - React-Core - RNSVG (12.3.0): - React-Core - - RNZendeskChat (0.3.28): - - React - - ZendeskAnswerBotSDK (~> 3.0.0) - - ZendeskChatSDK (~> 3.0.0) - - ZendeskMessagingAPISDK (~> 4.0.0) - - ZendeskSupportSDK (~> 6.0.0) - SocketRocket (0.6.0) - vision-camera-code-scanner (0.2.0): - GoogleMLKit/BarcodeScanning @@ -559,28 +559,28 @@ PODS: - Yoga (1.14.0) - YogaKit (1.18.1): - Yoga (~> 1.14) - - ZendeskAnswerBotProvidersSDK (3.0.0): - - ZendeskSupportProvidersSDK (= 6.0.0) - - ZendeskAnswerBotSDK (3.0.0): - - ZendeskAnswerBotProvidersSDK (= 3.0.0) - - ZendeskMessagingSDK (= 4.0.0) - - ZendeskChatProvidersSDK (3.0.0) - - ZendeskChatSDK (3.0.0): - - ZendeskChatProvidersSDK (= 3.0.0) - - ZendeskMessagingSDK (= 4.0.0) - - ZendeskCommonUISDK (7.0.0) - - ZendeskCoreSDK (3.0.0) - - ZendeskMessagingAPISDK (4.0.0): - - ZendeskSDKConfigurationsSDK (= 2.0.0) - - ZendeskMessagingSDK (4.0.0): - - ZendeskCommonUISDK (= 7.0.0) - - ZendeskMessagingAPISDK (= 4.0.0) - - ZendeskSDKConfigurationsSDK (2.0.0) - - ZendeskSupportProvidersSDK (6.0.0): - - ZendeskCoreSDK (= 3.0.0) - - ZendeskSupportSDK (6.0.0): - - ZendeskMessagingSDK (= 4.0.0) - - ZendeskSupportProvidersSDK (= 6.0.0) + - ZendeskAnswerBotProvidersSDK (5.0.0): + - ZendeskSupportProvidersSDK (~> 8.0.0) + - ZendeskAnswerBotSDK (5.0.0): + - ZendeskAnswerBotProvidersSDK (~> 5.0.0) + - ZendeskMessagingSDK (~> 6.0.0) + - ZendeskChatProvidersSDK (5.0.0) + - ZendeskChatSDK (5.0.0): + - ZendeskChatProvidersSDK (~> 5.0.0) + - ZendeskMessagingSDK (~> 6.0.0) + - ZendeskCommonUISDK (9.0.0) + - ZendeskCoreSDK (5.0.0) + - ZendeskMessagingAPISDK (6.0.0): + - ZendeskSDKConfigurationsSDK (~> 4.0.0) + - ZendeskMessagingSDK (6.0.0): + - ZendeskCommonUISDK (~> 9.0.0) + - ZendeskMessagingAPISDK (~> 6.0.0) + - ZendeskSDKConfigurationsSDK (4.0.0) + - ZendeskSupportProvidersSDK (8.0.0): + - ZendeskCoreSDK (~> 5.0.0) + - ZendeskSupportSDK (8.0.0): + - ZendeskMessagingSDK (~> 6.0.0) + - ZendeskSupportProvidersSDK (~> 8.0.0) - ZXingObjC (3.6.5): - ZXingObjC/All (= 3.6.5) - ZXingObjC/All (3.6.5) @@ -619,6 +619,7 @@ DEPENDENCIES: - OpenSSL-Universal (= 1.1.1100) - "pagopa-io-react-native-crypto (from `../node_modules/@pagopa/io-react-native-crypto`)" - "pagopa-io-react-native-login-utils (from `../node_modules/@pagopa/io-react-native-login-utils`)" + - "pagopa-react-native-zendesk (from `../node_modules/@pagopa/io-react-native-zendesk`)" - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) @@ -687,7 +688,6 @@ DEPENDENCIES: - RNSha256 (from `../node_modules/react-native-sha256`) - RNShare (from `../node_modules/react-native-share`) - RNSVG (from `../node_modules/react-native-svg`) - - "RNZendeskChat (from `../node_modules/@pagopa/io-react-native-zendesk`)" - vision-camera-code-scanner (from `../node_modules/vision-camera-code-scanner`) - VisionCamera (from `../node_modules/react-native-vision-camera`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -757,6 +757,8 @@ EXTERNAL SOURCES: :path: "../node_modules/@pagopa/io-react-native-crypto" pagopa-io-react-native-login-utils: :path: "../node_modules/@pagopa/io-react-native-login-utils" + pagopa-react-native-zendesk: + :path: "../node_modules/@pagopa/io-react-native-zendesk" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -891,8 +893,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-share" RNSVG: :path: "../node_modules/react-native-svg" - RNZendeskChat: - :path: "../node_modules/@pagopa/io-react-native-zendesk" vision-camera-code-scanner: :path: "../node_modules/vision-camera-code-scanner" VisionCamera: @@ -936,6 +936,7 @@ SPEC CHECKSUMS: OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c pagopa-io-react-native-crypto: 644fece16966f2e1ea1f872344ee5a3c6c8761a1 pagopa-io-react-native-login-utils: 442a5e2ab8db2c476fed2cff6d7ad16388ff1f21 + pagopa-react-native-zendesk: e4a63ee0745a567b641110f7ff78e457086ab7a3 PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58 Protobuf: 3724efa50cb2846d7ccebc8691c574e85fd74471 RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a @@ -1005,23 +1006,22 @@ SPEC CHECKSUMS: RNSha256: ab608b2185fb806185a2cc112e0474065842e085 RNShare: 807d6f8231b8ebcf6dd839294b877342eb93d4e5 RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8 - RNZendeskChat: 10c0a1f6a97665eab8319b4d543535a8ac199944 SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 vision-camera-code-scanner: dda884a7f3ec8243a2a6d6489b91860648371bca VisionCamera: 5fc30ecebdfd0335d11123ec9511dcbc27ee4046 Yoga: 7a4d48cfb35dfa542151e615fa73c1a0d88caf21 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a - ZendeskAnswerBotProvidersSDK: 7eca94f07f10a567c631321601a645b2ba35c2da - ZendeskAnswerBotSDK: 31bd28c7c9732243d4bf3b850c441a3cdd6eba50 - ZendeskChatProvidersSDK: af93e02e2058875f92e6ad86e74ee51203b4079e - ZendeskChatSDK: fe03650a5ebe3d35fd1f4da90792021f809bcf11 - ZendeskCommonUISDK: f06dbac6c9e74c3afff75ecdc6bec3832b23258c - ZendeskCoreSDK: ce6dbb5eb4d61d2d061547a92bd0b0fe98602e9d - ZendeskMessagingAPISDK: 95a99f1eab9482b4106ec88466b93a89f9f7c5fa - ZendeskMessagingSDK: 4f5f3d43766bb3b2ea6411d1331cfe609ff33618 - ZendeskSDKConfigurationsSDK: a5c21010e17b71d02bc2cfe73dcc9da1efa0a7b2 - ZendeskSupportProvidersSDK: 685b5d185af47ced0ec40564ec46355c838bbd06 - ZendeskSupportSDK: 92e6f9d334e81e9186f8a17583862350460a5393 + ZendeskAnswerBotProvidersSDK: a024260282886870a15e7a986bf5286c23fd9311 + ZendeskAnswerBotSDK: b9f74105b26fda5f74d6639c0dc8fe37f522a867 + ZendeskChatProvidersSDK: fa1c5acd7fd09157b5994fb05a3b1628409fdfd1 + ZendeskChatSDK: 40fa26f80a589eb38c6cecf17af71206da7bcaf3 + ZendeskCommonUISDK: b87f90874386ebcc01f4b2a0b20a28c62658987a + ZendeskCoreSDK: cdc814e7fd64764fb0b0acb04e596df437708faa + ZendeskMessagingAPISDK: 9ce539eebcaa014fe6acc44da31262a2c52891c1 + ZendeskMessagingSDK: ccc8dd41b774b0d2f94733505b9f1882d72184da + ZendeskSDKConfigurationsSDK: 79c444da987390456ec05657ffa2f5ca0eb54aef + ZendeskSupportProvidersSDK: 4aafe8114a9bba1a98dc03ca14d8fa6510cf4e70 + ZendeskSupportSDK: 8cf921c496269bb5f53aac9320f3d002a793991d ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb PODFILE CHECKSUM: 4a1130da2ee9cd7365bb5a5290feaed31a6bd470 diff --git a/package.json b/package.json index e617841067b..73db74ff8a6 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "@pagopa/io-pagopa-commons": "^3.1.0", "@pagopa/io-react-native-crypto": "^0.2.1", "@pagopa/io-react-native-login-utils": "^1.0.0", - "@pagopa/io-react-native-zendesk": "^0.3.28", + "@pagopa/io-react-native-zendesk": "^0.3.29", "@pagopa/react-native-cie": "1.2.0", "@pagopa/ts-commons": "^10.15.0", "@react-native-async-storage/async-storage": "^1.17.10", diff --git a/ts/utils/supportAssistance.ts b/ts/utils/supportAssistance.ts index 0bafd417473..26dd393f941 100644 --- a/ts/utils/supportAssistance.ts +++ b/ts/utils/supportAssistance.ts @@ -1,4 +1,4 @@ -import ZendDesk from "@pagopa/io-react-native-zendesk"; +import * as ZendDesk from "@pagopa/io-react-native-zendesk"; import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; import { ToolEnum } from "../../definitions/content/AssistanceToolConfig"; diff --git a/yarn.lock b/yarn.lock index bfc3c6de902..8d9c098d8a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3315,10 +3315,10 @@ resolved "https://registry.yarnpkg.com/@pagopa/io-react-native-login-utils/-/io-react-native-login-utils-1.0.0.tgz#26aa8fe2ae2c30f18d2714264524fd281f0f2b12" integrity sha512-9OXV4ebpZAGdFfbV5HOt0YbVhGvVb104KshCA7u74YnsTkJp32FhdIVwoqmerRwNO4rRjwwvDjWZdhT80IrOzA== -"@pagopa/io-react-native-zendesk@^0.3.28": - version "0.3.28" - resolved "https://registry.yarnpkg.com/@pagopa/io-react-native-zendesk/-/io-react-native-zendesk-0.3.28.tgz#eaef19df577bee000b615f6813d52546a1f2513f" - integrity sha512-U6avcojN+lbQgus1aYiggJ19wsqoHcVCm1EN4Dc7E+f32aCCfvsclFSisKd5FpubGsUdEd/x3De/+5At5c+K9w== +"@pagopa/io-react-native-zendesk@^0.3.29": + version "0.3.29" + resolved "https://registry.yarnpkg.com/@pagopa/io-react-native-zendesk/-/io-react-native-zendesk-0.3.29.tgz#ada8dab8a9ef15e126275baace2084491148bac8" + integrity sha512-CskFyF0Sz+EC/ZyJNNMFEX/Avjyn6cKRwE2K+XSTGWDKYLImPraA8YozTljclCdv3DOxk3ZklUsieMG25PfnSw== "@pagopa/openapi-codegen-ts@^12.2.1": version "12.2.1" From eb0691f0eef1ae3bf352fb2dc4f86362896f1ba2 Mon Sep 17 00:00:00 2001 From: Andrea Date: Mon, 19 Feb 2024 16:45:57 +0100 Subject: [PATCH 043/190] feat: [IOCOM-1059] Remove 'Open' CTA on Android attachment preview (new DS) (#5523) ## Short description This PR removes the OPEN CTA on an attachment's preview, on Android devices. ![Screenshot 2024-02-19 at 14 54 20](https://github.com/pagopa/io-app/assets/5150343/24ec3694-a24f-463d-8b6d-a15fc11ed12a) ## List of changes proposed in this pull request - Open CTA removed - Proper accessibility labels for remaining CTAs - New DS version that improves accessibility readings on CTA buttons for Android - Updated snapshots ## How to test Using the io-dev-api-server, check that on an Android devices the two remaining CTA still work as expected (accessibility included) --- locales/en/index.yml | 4 + locales/it/index.yml | 4 + package.json | 2 +- .../LoadingSpinnerOverlay.test.tsx.snap | 1 + ...OperationResultScreenContent.test.tsx.snap | 1 + .../messages/screens/MessageAttachment.tsx | 75 ++++++++----------- .../MessageAttachment.test.tsx.snap | 3 +- yarn.lock | 8 +- 8 files changed, 50 insertions(+), 48 deletions(-) diff --git a/locales/en/index.yml b/locales/en/index.yml index 43bc922fd8f..17e24cc908a 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -1924,9 +1924,13 @@ messageDetails: messagePDFPreview: title: "PDF Preview" singleBtn: "Save or share" + singleBtnAccessibility: "Save or share document" open: "Open" save: "Save" + saveAccessibility: "Save document" savedAtLocation: "Document {{name}} was successfully saved in your Download folder." + share: "Share" + shareAccessibility: "Share document" pdfAccessibility: "Preview of the PDF document" errors: previewing: diff --git a/locales/it/index.yml b/locales/it/index.yml index b35b7e7a54a..7e335057e9e 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -1924,9 +1924,13 @@ messageDetails: messagePDFPreview: title: "Anteprima PDF" singleBtn: "Salva o condividi" + singleBtnAccessibility: "Salva o condividi documento" open: "Apri" save: "Salva" + saveAccessibility: "Salva documento" savedAtLocation: "Il documento {{name}} è stato salvato nella cartella Download." + share: "Condividi" + shareAccessibility: "Condividi documento" pdfAccessibility: "Anteprima documento PDF" errors: previewing: diff --git a/package.json b/package.json index 73db74ff8a6..ac0f9393513 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "dependencies": { "@babel/plugin-transform-regenerator": "^7.18.6", "@gorhom/bottom-sheet": "^4.1.5", - "@pagopa/io-app-design-system": "1.23.2", + "@pagopa/io-app-design-system": "1.23.3", "@pagopa/io-pagopa-commons": "^3.1.0", "@pagopa/io-react-native-crypto": "^0.2.1", "@pagopa/io-react-native-login-utils": "^1.0.0", diff --git a/ts/components/__tests__/__snapshots__/LoadingSpinnerOverlay.test.tsx.snap b/ts/components/__tests__/__snapshots__/LoadingSpinnerOverlay.test.tsx.snap index 5f42ae771f3..4973b4bdefe 100644 --- a/ts/components/__tests__/__snapshots__/LoadingSpinnerOverlay.test.tsx.snap +++ b/ts/components/__tests__/__snapshots__/LoadingSpinnerOverlay.test.tsx.snap @@ -305,6 +305,7 @@ exports[`LoadingSpinnerOverlay Should match all-properties and loading snapshot ; -const renderFooter = ( - name: string, - mimeType: string, - downloadPath: string, - isPN: boolean, - attachmentCategory?: string -) => +type MessageAttachmentFooterProps = { + attachmentCategory?: string; + downloadPath: string; + isPN: boolean; + mimeType: string; + name: string; +}; + +const MessageAttachmentFooter = ({ + attachmentCategory, + downloadPath, + isPN, + mimeType, + name +}: MessageAttachmentFooterProps) => isIos ? ( { onShare(isPN, attachmentCategory); ReactNativeBlobUtil.ios.presentOptionsMenu(downloadPath); @@ -64,24 +73,24 @@ const renderFooter = ( /> ) : ( { onShare(isPN, attachmentCategory); share(`file://${downloadPath}`, undefined, false)().catch(_ => { IOToast.show(I18n.t("messagePDFPreview.errors.sharing")); }); }, - label: I18n.t("global.buttons.share") + label: I18n.t("messagePDFPreview.share") } }} - third={{ - type: "Outline", + primary={{ + type: "Solid", buttonProps: { - accessibilityLabel: I18n.t("messagePDFPreview.save"), + accessibilityLabel: I18n.t("messagePDFPreview.saveAccessibility"), onPress: () => { onDownload(isPN, attachmentCategory); ReactNativeBlobUtil.MediaCollection.copyToMediaStore( @@ -107,21 +116,6 @@ const renderFooter = ( label: I18n.t("messagePDFPreview.save") } }} - secondary={{ - type: "Solid", - buttonProps: { - accessibilityLabel: I18n.t("messagePDFPreview.open"), - onPress: () => { - onOpen(isPN, attachmentCategory); - ReactNativeBlobUtil.android - .actionViewIntent(downloadPath, mimeType) - .catch(_ => { - IOToast.error(I18n.t("messagePDFPreview.errors.opening")); - }); - }, - label: I18n.t("messagePDFPreview.open") - } - }} /> ); @@ -167,15 +161,6 @@ const onShare = (isPN: boolean, attachmentCategory?: string) => ) ); -const onOpen = (isPN: boolean, attachmentCategory?: string) => - pipe( - isPN, - B.fold( - () => trackThirdPartyMessageAttachmentUserAction("open"), - () => trackPNAttachmentOpen(attachmentCategory) - ) - ); - const onDownload = (isPN: boolean, attachmentCategory?: string) => pipe( isPN, @@ -237,7 +222,13 @@ export const MessageAttachment = ( onLoadComplete={() => onLoadComplete(isPN, attachmentCategory)} /> )} - {renderFooter(name, mimeType, downloadPathOpt, isPN, attachmentCategory)} + ); }; diff --git a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap index 8a2a75b8b70..bfff7b83ac4 100644 --- a/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap +++ b/ts/features/messages/screens/__tests__/__snapshots__/MessageAttachment.test.tsx.snap @@ -486,7 +486,7 @@ exports[`MessageAttachment Should match the snapshot when everything went fine 1 } > = 8" -"@pagopa/io-app-design-system@1.23.2": - version "1.23.2" - resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.23.2.tgz#739da99711af7c208b547d7c0b5cc82c77e1bad3" - integrity sha512-MqQnd5bHxGwXd+KdAb95e0Onw2C2Ic+GpJnIUSWN15sggb4oF/bl14tViMhV2yCJCpq7dYaiS8GmdWQjl2fQIQ== +"@pagopa/io-app-design-system@1.23.3": + version "1.23.3" + resolved "https://registry.yarnpkg.com/@pagopa/io-app-design-system/-/io-app-design-system-1.23.3.tgz#6b9b31c616f13148874ba144191ba544b45811b0" + integrity sha512-67YKokZnTtM+mXkYYvNV69Ml0c/2KU00BTam9l/BDYmeUUc/D7kleoi8T5lKlBNd9ZNMscPyVbvPcDkiHPjB3A== dependencies: "@pagopa/ts-commons" "^12.0.0" "@testing-library/jest-native" "^5.4.2" From de192e6e4e48303bc9a037bdcf39d866c918c365 Mon Sep 17 00:00:00 2001 From: Alessandro Izzo Date: Tue, 20 Feb 2024 09:21:52 +0100 Subject: [PATCH 044/190] chore: [IOBP-552,IOBP-556] Additional onboarding outcome screen for BPay (#5518) ## Short description This PR adds the outcome screen to show when there is an outcome `16` from the onboarding webview. In addition, the text from the success onboarding screen feedback has been changed. ## List of changes proposed in this pull request - Addedd additional outcome 16 as `BPAY_NOT_FOUND` - Added locales and pictogram for the `BPAY_NOT_FOUND` outcome. ## How to test - Checkout this PR from the io-dev-app-server: https://github.com/pagopa/io-dev-api-server/pull/350 - Then, start an onboarding process from the playground and choose `16 - BPAY_NOT_FOUND` from the dropdown list shown in the webview ## Preview https://github.com/pagopa/io-app/assets/34343582/63622a3f-1332-4478-80ff-43e47d3dc1e5 --- locales/en/index.yml | 4 ++++ locales/it/index.yml | 6 +++++- ts/features/walletV3/onboarding/types/index.ts | 3 ++- ts/features/walletV3/onboarding/utils/index.ts | 3 ++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/locales/en/index.yml b/locales/en/index.yml index 17e24cc908a..96897460e20 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -1231,6 +1231,10 @@ wallet: title: Hai già aggiunto questo metodo subtitle: "" primaryAction: Chiudi + BPAY_NOT_FOUND: + title: Non abbiamo trovato alcun BANCOMAT Pay attivo + subtitle: "Contatta la tua Banca per attivare il servizio." + primaryAction: Chiudi alert: supportedCardPageLinkError: An error occurred while opening the supported cards page. msgErrorUpdateApp: "An error occurred while opening the app store" diff --git a/locales/it/index.yml b/locales/it/index.yml index 7e335057e9e..ca25dcb1784 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -1203,7 +1203,7 @@ wallet: description: "Cercheremo tutte le carte intestate a te presso le banche aderenti al servizio" generalError: "C'è stato un errore generico durante l'aggiunta del metodo di pagamento" success: - title: "La carta è stata aggiunta!" + title: "Il metodo è stato aggiunto" continueButton: "Vedi dettagli" failure: GENERIC_ERROR: @@ -1231,6 +1231,10 @@ wallet: title: Hai già aggiunto questo metodo subtitle: "" primaryAction: Chiudi + BPAY_NOT_FOUND: + title: Non abbiamo trovato alcun BANCOMAT Pay attivo + subtitle: "Contatta la tua Banca per attivare il servizio." + primaryAction: Chiudi alert: supportedCardPageLinkError: Si è verificato un errore durante l'apertura della pagina di riferimento per le carte supportate. msgErrorUpdateApp: "Si è verificato un errore durante l'apertura dello store delle app" diff --git a/ts/features/walletV3/onboarding/types/index.ts b/ts/features/walletV3/onboarding/types/index.ts index 21ba156e329..95958420607 100644 --- a/ts/features/walletV3/onboarding/types/index.ts +++ b/ts/features/walletV3/onboarding/types/index.ts @@ -8,7 +8,8 @@ export enum OnboardingOutcomeEnum { TIMEOUT = "4", CANCELED_BY_USER = "8", INVALID_SESSION = "14", - ALREADY_ONBOARDED = "15" + ALREADY_ONBOARDED = "15", + BPAY_NOT_FOUND = "16" } export type OnboardingOutcome = `${OnboardingOutcomeEnum}`; diff --git a/ts/features/walletV3/onboarding/utils/index.ts b/ts/features/walletV3/onboarding/utils/index.ts index b3abbb14557..73e1eea3cb8 100644 --- a/ts/features/walletV3/onboarding/utils/index.ts +++ b/ts/features/walletV3/onboarding/utils/index.ts @@ -31,7 +31,8 @@ export const ONBOARDING_OUTCOME_ERROR_PICTOGRAM: Record< [OnboardingOutcomeEnum.TIMEOUT]: "time", [OnboardingOutcomeEnum.CANCELED_BY_USER]: "trash", [OnboardingOutcomeEnum.INVALID_SESSION]: "umbrellaNew", - [OnboardingOutcomeEnum.ALREADY_ONBOARDED]: "success" + [OnboardingOutcomeEnum.ALREADY_ONBOARDED]: "success", + [OnboardingOutcomeEnum.BPAY_NOT_FOUND]: "attention" }; /** From 5ce18c2d58c26eb00cc5d460474c7453c543c939 Mon Sep 17 00:00:00 2001 From: LazyAfternoons Date: Tue, 20 Feb 2024 14:19:27 +0100 Subject: [PATCH 045/190] fix(Cross): [IOAPPX-250] Crash when consuming safe area insets outside of navigation context (#5522) ## Short description This PR fixes a crash which happens when consuming safe area insets outside of the navigation context. ## List of changes proposed in this pull request - Wraps the root app component in a `SafeAreaProvider` as suggested in the [library documentation](https://github.com/th3rdwave/react-native-safe-area-context?tab=readme-ov-file#safeareaprovider). ## How to test In general any design system component which consumes insets via `useSafeAreaInsets` (e.g. `FooterWithButtons`) used outside of the navigation context (e.g. a modal) should not cause a crash at runtime. Test if the crash still occurs for example in the payment details screen amount info button or while aborting a FCI signature flow as shown below: https://github.com/pagopa/io-app/assets/12371664/828bde66-fe56-4c70-819d-2a0e61644e5a For FCI remember to set the following parameter in `io-dev-api-server`: ``` "messages":{ "fci": { "waitForSignatureCount": 1 } } ``` Co-authored-by: Mario Perrotta --- ts/App.tsx | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/ts/App.tsx b/ts/App.tsx index 5adaf2441b0..0d46a6cac31 100644 --- a/ts/App.tsx +++ b/ts/App.tsx @@ -10,6 +10,7 @@ import { IOThemeContext, IOThemes } from "@pagopa/io-app-design-system"; +import { SafeAreaProvider } from "react-native-safe-area-context"; import { persistor, store } from "./boot/configureStoreAndPersistor"; import { LightModalProvider } from "./components/ui/LightModal"; import RootContainer from "./RootContainer"; @@ -27,23 +28,25 @@ export type AppDispatch = typeof store.dispatch; export const App: React.FunctionComponent = () => ( - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + ); From a78bbce292b7987cdbe742e2c074a3fe15bf43d8 Mon Sep 17 00:00:00 2001 From: Alessandro Izzo Date: Tue, 20 Feb 2024 15:02:09 +0100 Subject: [PATCH 046/190] chore: [IOBP-557] Handled 404 response status with empty list from user wallet list (#5528) ## Short description This PR handles the 404 response from the user wallet list as an empty list instead of showing a generic error screen. ## List of changes proposed in this pull request - Added a result status check to verify if the status is 404, it will be treated as an empty wallet list ## How to test - Edit the response of the e-commerce wallet list from the `io-dev-app-server` to return a 404 status response - Start a payment flow from the playground section - As soon as you get the user wallet list, you should be able to see a screen that invites the user to onboard a new payment method instead of showing a generic error screen ## Preview |Before|After| |-|-| |

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ip&package-manager=npm_and_yarn&previous-version=1.1.5&new-version=1.1.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/pagopa/io-app/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cristiano Tofani --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4bd44708a93..8866ed4b019 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9896,9 +9896,9 @@ io-ts@^2.2.16: integrity sha512-y5TTSa6VP6le0hhmIyN0dqEXkrZeJLeC5KApJq6VLci3UEKF80lZ+KuoUs02RhBxNWlrqSNxzfI7otLX1Euv8Q== ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + version "1.1.9" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" + integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== ipaddr.js@1.9.1: version "1.9.1" From aa9d7b0f55142488016b49c0199d27e11514cc56 Mon Sep 17 00:00:00 2001 From: Andrea Piai Date: Wed, 21 Feb 2024 17:24:48 +0100 Subject: [PATCH 053/190] chore(release): 2.54.0-rc.1 --- CHANGELOG.md | 30 +++++++++++++++++++++++++ android/app/build.gradle | 4 ++-- ios/ItaliaApp.xcodeproj/project.pbxproj | 4 ++-- ios/ItaliaApp/Info.plist | 2 +- ios/ItaliaAppTests/Info.plist | 2 +- package.json | 2 +- publiccode.yml | 4 ++-- 7 files changed, 39 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f83e4fa9cb..ac15a45a136 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,36 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.54.0-rc.1](https://github.com/pagopa/io-app/compare/2.54.0-rc.0...2.54.0-rc.1) (2024-02-21) + + +### Features + +* [[IOCOM-1059](https://pagopa.atlassian.net/browse/IOCOM-1059)] Remove 'Open' CTA on Android attachment preview (new DS) ([#5523](https://github.com/pagopa/io-app/issues/5523)) ([eb0691f](https://github.com/pagopa/io-app/commit/eb0691f0eef1ae3bf352fb2dc4f86362896f1ba2)) +* [[IOCOM-851](https://pagopa.atlassian.net/browse/IOCOM-851)] Add calendar event for messages with `due_date` ([#5524](https://github.com/pagopa/io-app/issues/5524)) ([12acdbe](https://github.com/pagopa/io-app/commit/12acdbe5a9c0309a63050f2464ae43d412d7785b)) +* [[IOCOM-851](https://pagopa.atlassian.net/browse/IOCOM-851)] Removed view reference ([#5511](https://github.com/pagopa/io-app/issues/5511)) ([39a2611](https://github.com/pagopa/io-app/commit/39a26119bf56ac5f517628888998dbe3be741504)) + + +### Bug Fixes + +* HeaderFirstLevel glitching on tab change ([#5530](https://github.com/pagopa/io-app/issues/5530)) ([d69e091](https://github.com/pagopa/io-app/commit/d69e091d888cca94c8ce9717659ff295412e559d)) +* **Cross:** [[IOAPPX-250](https://pagopa.atlassian.net/browse/IOAPPX-250)] Crash when consuming safe area insets outside of navigation context ([#5522](https://github.com/pagopa/io-app/issues/5522)) ([5ce18c2](https://github.com/pagopa/io-app/commit/5ce18c2d58c26eb00cc5d460474c7453c543c939)) + + +### Chores + +* **deps:** bump ip from 1.1.5 to 1.1.9 ([#5532](https://github.com/pagopa/io-app/issues/5532)) ([afc36a7](https://github.com/pagopa/io-app/commit/afc36a7742ac872f12a454b711d791509bcf01ee)) +* [[IOBP-555](https://pagopa.atlassian.net/browse/IOBP-555)] Add payment outcome screen for the outcome 17 and 15 ([#5527](https://github.com/pagopa/io-app/issues/5527)) ([755926d](https://github.com/pagopa/io-app/commit/755926d48cf101286847f934b59c3173f7f24b3b)) +* **Cross:** [[IOAPPX-252](https://pagopa.atlassian.net/browse/IOAPPX-252)] Update IO app icon in the main README ([#5531](https://github.com/pagopa/io-app/issues/5531)) ([f29ae25](https://github.com/pagopa/io-app/commit/f29ae2520e841554c13ee2d094749067d66a977d)) +* [[IOBP-544](https://pagopa.atlassian.net/browse/IOBP-544)] Add `usePagoPaPayment` custom hook ([#5503](https://github.com/pagopa/io-app/issues/5503)) ([b7257ad](https://github.com/pagopa/io-app/commit/b7257ad29a0c7ccf0d39a87e22c0a08559286c41)) +* [[IOBP-549](https://pagopa.atlassian.net/browse/IOBP-549)] Add new wallet payments history tracking ([#5515](https://github.com/pagopa/io-app/issues/5515)) ([ca54cd8](https://github.com/pagopa/io-app/commit/ca54cd8352b97bd4fe50b91c37c29c3987d43fb2)) +* [[IOBP-552](https://pagopa.atlassian.net/browse/IOBP-552),[IOBP-556](https://pagopa.atlassian.net/browse/IOBP-556)] Additional onboarding outcome screen for BPay ([#5518](https://github.com/pagopa/io-app/issues/5518)) ([de192e6](https://github.com/pagopa/io-app/commit/de192e6e4e48303bc9a037bdcf39d866c918c365)) +* [[IOBP-557](https://pagopa.atlassian.net/browse/IOBP-557)] Handled 404 response status with empty list from user wallet list ([#5528](https://github.com/pagopa/io-app/issues/5528)) ([a78bbce](https://github.com/pagopa/io-app/commit/a78bbce292b7987cdbe742e2c074a3fe15bf43d8)) +* [[IOBP-558](https://pagopa.atlassian.net/browse/IOBP-558)] Handle BancomatPay in method details screen ([#5517](https://github.com/pagopa/io-app/issues/5517)) ([505662b](https://github.com/pagopa/io-app/commit/505662b72745b377188360371c3aa7513a3975c1)) +* [[IOPLT-327](https://pagopa.atlassian.net/browse/IOPLT-327)] Updates Zendesk npm package version ([#5489](https://github.com/pagopa/io-app/issues/5489)) ([1dce8d5](https://github.com/pagopa/io-app/commit/1dce8d5329f34cdb0dd8dad375ddc21a8d413f5d)), closes [pagopa/io-react-native-zendesk#30](https://github.com/pagopa/io-react-native-zendesk/issues/30) +* **Cross:** [[IOAPPX-212](https://pagopa.atlassian.net/browse/IOAPPX-212)] Removes current route selector logic from header first level handler logic ([#5510](https://github.com/pagopa/io-app/issues/5510)) ([4400127](https://github.com/pagopa/io-app/commit/44001272b06441ba3644ba2c89ac8c083f2860c8)) +* **Cross:** [[IOAPPX-230](https://pagopa.atlassian.net/browse/IOAPPX-230)] Remove `datetimepicker` and `react-native-modal-datetime-picker` dependencies ([#5451](https://github.com/pagopa/io-app/issues/5451)) ([76c841d](https://github.com/pagopa/io-app/commit/76c841d7b9b574ea1dfe99c4bb166be313bf4582)) + ## [2.54.0-rc.0](https://github.com/pagopa/io-app/compare/2.53.0-rc.1...2.54.0-rc.0) (2024-02-15) diff --git a/android/app/build.gradle b/android/app/build.gradle index 9a099891166..f352e8fd922 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -144,8 +144,8 @@ android { applicationId "it.pagopa.io.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 100154796 - versionName "2.54.0.0" + versionCode 100154797 + versionName "2.54.0.1" buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() if (isNewArchitectureEnabled()) { // We configure the NDK build only if you decide to opt-in for the New Architecture. diff --git a/ios/ItaliaApp.xcodeproj/project.pbxproj b/ios/ItaliaApp.xcodeproj/project.pbxproj index b3ab2432d2c..55c8a11da24 100644 --- a/ios/ItaliaApp.xcodeproj/project.pbxproj +++ b/ios/ItaliaApp.xcodeproj/project.pbxproj @@ -848,7 +848,7 @@ CODE_SIGN_ENTITLEMENTS = ItaliaApp/ItaliaApp.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = M2X5YQ4BJ7; ENABLE_BITCODE = NO; @@ -889,7 +889,7 @@ CODE_SIGN_ENTITLEMENTS = ItaliaApp/ItaliaApp.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = M2X5YQ4BJ7; ENABLE_BITCODE = NO; diff --git a/ios/ItaliaApp/Info.plist b/ios/ItaliaApp/Info.plist index 02ac97ff6b2..06a01c56610 100644 --- a/ios/ItaliaApp/Info.plist +++ b/ios/ItaliaApp/Info.plist @@ -34,7 +34,7 @@ CFBundleVersion - 0 + 1 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/ItaliaAppTests/Info.plist b/ios/ItaliaAppTests/Info.plist index 32a68343a15..b58589eba28 100644 --- a/ios/ItaliaAppTests/Info.plist +++ b/ios/ItaliaAppTests/Info.plist @@ -19,6 +19,6 @@ CFBundleSignature ???? CFBundleVersion - 0 + 1 \ No newline at end of file diff --git a/package.json b/package.json index ac0f9393513..b7755fbb489 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "italia-app", - "version": "2.54.0-rc.0", + "version": "2.54.0-rc.1", "io_backend_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_backend.yaml", "io_public_api": "https://raw.githubusercontent.com/pagopa/io-backend/v13.32.1-RELEASE/api_public.yaml", "io_content_specs": "https://raw.githubusercontent.com/pagopa/io-services-metadata/1.0.30/definitions.yml", diff --git a/publiccode.yml b/publiccode.yml index b5446347218..5f2cc05eba3 100644 --- a/publiccode.yml +++ b/publiccode.yml @@ -5,11 +5,11 @@ publiccodeYmlVersion: '0.2' name: IO logo: "img/app-logo.svg" -releaseDate: '2024-02-15' +releaseDate: '2024-02-21' url: 'https://github.com/pagopa/io-app' applicationSuite: IO landingURL: 'https://io.italia.it/' -softwareVersion: 2.54.0-rc.0 +softwareVersion: 2.54.0-rc.1 developmentStatus: beta softwareType: standalone/mobile roadmap: 'https://io.italia.it/' From 1560834b6bc3d964b252172a8988388e45edccda Mon Sep 17 00:00:00 2001 From: Andrea Date: Thu, 22 Feb 2024 09:09:03 +0100 Subject: [PATCH 054/190] feat: [IOCOM-848] Message content with new DS System (#5519) This PR depends on #5516 ## Short description This PR brings the new DS to the message content. ## List of changes proposed in this pull request - LegacyMarkdown to avoid disruptions in other flows - New Markdown component which is a refactoring of the old class one to a functional one, with new DS - Message content is rendered using the new Markdown component Please take note that the old markdown component remains in place and it is used widely throughout screens. It has not been replaced because of the refactoring from a class component to a functional one, merging three lifecycle methods (mount, update, unmount) into one hook (useEffect). In the new component, this may trigger an unwanted recompiling of the markdown if the caller component does not handle the input properties accordingly. So, to avoid massive disruption, the old class component lives and before replacing it, one should carefully check for unwanted behaviours due to bad input handling. ## How to test Enable the new DS and check that the message content is rendered properly. --------- Co-authored-by: Alessandro Dell'Oste --- ts/components/FAQComponent.tsx | 6 +- .../RemindEmailValidationOverlay.tsx | 6 +- ts/components/cie/CieNotSupported.tsx | 10 +- ts/components/markdown/MarkdownBaseScreen.tsx | 6 +- .../screens/BaseScreenComponent/utils.tsx | 10 +- .../IdpCustomContextualHelpContent.tsx | 10 +- ts/components/ui/Accordion.tsx | 10 +- .../{index.tsx => LegacyMarkdown.tsx} | 8 +- ts/components/ui/Markdown/LoadingSkeleton.tsx | 41 ++ ts/components/ui/Markdown/Markdown.tsx | 196 +++++++++ .../ui/Markdown/MarkdownWebviewComponent.tsx | 8 +- ts/components/ui/Markdown/utils.ts | 146 +++++++ .../detail/eyca/EycaInformationComponent.tsx | 9 +- .../components/BonusInformationComponent.tsx | 10 +- .../components/MarkdownHandleCustomLink.tsx | 8 +- .../fci/hooks/useFciAbortSignatureFlow.tsx | 6 +- .../components/InitiativeRulesInfoBox.tsx | 4 +- .../OnboardingDescriptionMarkdown.tsx | 6 +- .../screens/PDNDPrerequisitesScreen.tsx | 6 +- .../MessageDetail/MessageDetailsHeader.tsx | 12 +- .../MessageDetail/MessageMarkdown.tsx | 22 +- .../MessageDetailsHeader.test.tsx.snap | 388 +++++++++--------- .../components/MessageDetail/index.tsx | 2 +- .../PreconditionContent.tsx | 2 +- .../messages/screens/MessageDetailsScreen.tsx | 107 ++--- ts/features/messages/utils/messages.ts | 6 +- ts/features/pn/components/MessageDetails.tsx | 51 ++- .../pn/components/MessageDetailsContent.tsx | 6 +- .../MessageDetails.test.tsx.snap | 8 - .../MessageDetailsContent.test.tsx.snap | 14 +- .../MessageDetailsScreen.test.tsx.snap | 8 - .../features/PagoPaPaymentCapability.tsx | 6 +- ts/screens/authentication/IdpLoginScreen.tsx | 6 +- .../cie/CieAuthorizeDataUsageScreen.tsx | 6 +- .../cie/CiePinLockedTemporarilyScreen.tsx | 10 +- .../authentication/cie/CiePinScreen.tsx | 10 +- .../authentication/idpAuthSessionHandler.tsx | 6 +- ts/screens/modal/RootedDeviceModal.tsx | 6 +- .../profile/DownloadProfileDataScreen.tsx | 6 +- ts/screens/profile/ProfileAboutApp.tsx | 6 +- .../profile/components/ShareDataComponent.tsx | 4 +- .../services/ManualConfigBottomSheet.tsx | 6 +- .../playgrounds/MarkdownPlayground.tsx | 6 +- ts/screens/services/ServiceDetailsScreen.tsx | 6 +- 44 files changed, 800 insertions(+), 416 deletions(-) rename ts/components/ui/Markdown/{index.tsx => LegacyMarkdown.tsx} (97%) create mode 100644 ts/components/ui/Markdown/LoadingSkeleton.tsx create mode 100644 ts/components/ui/Markdown/Markdown.tsx create mode 100644 ts/components/ui/Markdown/utils.ts diff --git a/ts/components/FAQComponent.tsx b/ts/components/FAQComponent.tsx index 82ee4aab4c4..44056171933 100644 --- a/ts/components/FAQComponent.tsx +++ b/ts/components/FAQComponent.tsx @@ -2,12 +2,12 @@ import * as React from "react"; import { ComponentProps } from "react"; import { FAQType } from "../utils/faq"; import Accordion from "./ui/Accordion"; -import Markdown from "./ui/Markdown"; +import LegacyMarkdown from "./ui/Markdown/LegacyMarkdown"; type Props = Readonly<{ faqs: ReadonlyArray; - onLinkClicked?: ComponentProps["onLinkClicked"]; - shouldHandleLink?: ComponentProps["shouldHandleLink"]; + onLinkClicked?: ComponentProps["onLinkClicked"]; + shouldHandleLink?: ComponentProps["shouldHandleLink"]; }>; const FAQComponent: React.FunctionComponent = (props: Props) => ( diff --git a/ts/components/RemindEmailValidationOverlay.tsx b/ts/components/RemindEmailValidationOverlay.tsx index 6e1227e5c4c..3d12dbe5dcb 100644 --- a/ts/components/RemindEmailValidationOverlay.tsx +++ b/ts/components/RemindEmailValidationOverlay.tsx @@ -58,7 +58,7 @@ import TouchableDefaultOpacity from "./TouchableDefaultOpacity"; import BlockButtons from "./ui/BlockButtons"; import FooterWithButtons from "./ui/FooterWithButtons"; import { LightModalContextInterface } from "./ui/LightModal"; -import Markdown from "./ui/Markdown"; +import LegacyMarkdown from "./ui/Markdown/LegacyMarkdown"; type OwnProp = { isOnboarding?: boolean; @@ -392,14 +392,14 @@ class RemindEmailValidationOverlay extends React.PureComponent { {title} {!this.state.emailHasBeenValidate ? ( - {!this.props.isOnboarding ? I18n.t("email.validate.content2", { email }) : I18n.t("email.validate.content1", { email })} - + ) : ( = props => { const handleMarkdownLoaded = () => setMarkdownLoaded(s => s + 1); return ( - + {I18n.t("authentication.landing.cie_unsupported.body")} - + {Platform.OS === "android" && ( - + {I18n.t("authentication.landing.cie_unsupported.android_desc")} - + {markdownLoaded === markDownElements && ( diff --git a/ts/components/markdown/MarkdownBaseScreen.tsx b/ts/components/markdown/MarkdownBaseScreen.tsx index 1ab6024f4a1..66e0cd4f7f0 100644 --- a/ts/components/markdown/MarkdownBaseScreen.tsx +++ b/ts/components/markdown/MarkdownBaseScreen.tsx @@ -4,7 +4,7 @@ import { View, StyleSheet } from "react-native"; import BaseScreenComponent from "../screens/BaseScreenComponent"; import { EdgeBorderComponent } from "../screens/EdgeBorderComponent"; import ScreenContent from "../screens/ScreenContent"; -import Markdown from "../ui/Markdown"; +import LegacyMarkdown from "../ui/Markdown/LegacyMarkdown"; import themeVariables from "../../theme/variables"; /** @@ -45,9 +45,9 @@ export const MarkdownBaseScreen: React.FunctionComponent = props => { hideHeader={props.hideHeader} > - setMarkdownLoaded(true)}> + setMarkdownLoaded(true)}> {props.markDown} - + {isMarkdownLoaded && } diff --git a/ts/components/screens/BaseScreenComponent/utils.tsx b/ts/components/screens/BaseScreenComponent/utils.tsx index 04ddd89cebb..27bd6d1d037 100644 --- a/ts/components/screens/BaseScreenComponent/utils.tsx +++ b/ts/components/screens/BaseScreenComponent/utils.tsx @@ -7,7 +7,7 @@ import { ScreenCHData } from "../../../../definitions/content/ScreenCHData"; import { ContextualHelpData } from "../../../features/zendesk/screens/ZendeskSupportHelpCenter"; import I18n from "../../../i18n"; import { handleItemOnPress } from "../../../utils/url"; -import Markdown from "../../ui/Markdown"; +import LegacyMarkdown from "../../ui/Markdown/LegacyMarkdown"; import { deriveCustomHandledLink, isIoInternalLink @@ -50,13 +50,13 @@ export const getContextualHelpConfig = ( : contextualHelpMarkdown ? { body: () => ( - {I18n.t(contextualHelpMarkdown.body)} - + ), title: I18n.t(contextualHelpMarkdown.title) } @@ -77,7 +77,9 @@ export const getContextualHelpData = ( () => defaultData, data => ({ title: data.title, - content: {data.content}, + content: ( + {data.content} + ), faqs: pipe( data.faqs, O.fromNullable, diff --git a/ts/components/screens/IdpCustomContextualHelpContent.tsx b/ts/components/screens/IdpCustomContextualHelpContent.tsx index 172313f4c71..321045b12f8 100644 --- a/ts/components/screens/IdpCustomContextualHelpContent.tsx +++ b/ts/components/screens/IdpCustomContextualHelpContent.tsx @@ -4,7 +4,7 @@ import { VSpacer } from "@pagopa/io-app-design-system"; import { Idp } from "../../../definitions/content/Idp"; import { handleItemOnPress } from "../../utils/url"; import BlockButtons from "../ui/BlockButtons"; -import Markdown from "../ui/Markdown"; +import LegacyMarkdown from "../ui/Markdown/LegacyMarkdown"; import EmailCallCTA from "./EmailCallCTA"; type Props = Readonly<{ @@ -25,11 +25,11 @@ const IdpCustomContextualHelpBody: React.FunctionComponent = props => { return ( {/** Recover credentials */} - setIsMarkdown1Loaded(true)}> + setIsMarkdown1Loaded(true)}> {idpTextData.recover_username ? I18n.t("authentication.idp_login.dualRecoverDescription") : I18n.t("authentication.idp_login.recoverDescription")} - + {isMarkdown1Loaded && ( @@ -60,9 +60,9 @@ const IdpCustomContextualHelpBody: React.FunctionComponent = props => { {/** Idp contacts */} - setIsMarkdown2Loaded(true)}> + setIsMarkdown2Loaded(true)}> {idpTextData.description} - + {isMarkdown2Loaded && ( diff --git a/ts/components/ui/Accordion.tsx b/ts/components/ui/Accordion.tsx index a7b6cf4f429..0824b6360b7 100644 --- a/ts/components/ui/Accordion.tsx +++ b/ts/components/ui/Accordion.tsx @@ -10,13 +10,13 @@ import { Body } from "../core/typography/Body"; import { IOStyles } from "../core/variables/IOStyles"; import ItemSeparatorComponent from "../ItemSeparatorComponent"; import TouchableDefaultOpacity from "../TouchableDefaultOpacity"; -import Markdown from "./Markdown"; +import LegacyMarkdown from "./Markdown/LegacyMarkdown"; type Props = { title: string; content: string; - onLinkClicked?: ComponentProps["onLinkClicked"]; - shouldHandleLink?: ComponentProps["shouldHandleLink"]; + onLinkClicked?: ComponentProps["onLinkClicked"]; + shouldHandleLink?: ComponentProps["shouldHandleLink"]; }; const styles = StyleSheet.create({ @@ -69,7 +69,7 @@ const Accordion: React.FunctionComponent = (props: Props) => { const renderContent = (content: string) => ( - { pipe( @@ -80,7 +80,7 @@ const Accordion: React.FunctionComponent = (props: Props) => { }} > {content} - + ); diff --git a/ts/components/ui/Markdown/index.tsx b/ts/components/ui/Markdown/LegacyMarkdown.tsx similarity index 97% rename from ts/components/ui/Markdown/index.tsx rename to ts/components/ui/Markdown/LegacyMarkdown.tsx index 4e461a6a7f7..ae08a6edc4d 100644 --- a/ts/components/ui/Markdown/index.tsx +++ b/ts/components/ui/Markdown/LegacyMarkdown.tsx @@ -25,7 +25,7 @@ import customVariables from "../../../theme/variables"; import { WithTestID } from "../../../types/WithTestID"; import { remarkProcessor } from "../../../utils/markdown"; import { closeInjectedScript } from "../../../utils/webview"; -import MarkdownWebviewComponent from "./MarkdownWebviewComponent"; +import { MarkdownWebviewComponent } from "./MarkdownWebviewComponent"; import { NOTIFY_BODY_HEIGHT_SCRIPT, NOTIFY_LINK_CLICK_SCRIPT } from "./script"; const INJECTED_JAVASCRIPT = ` @@ -208,7 +208,7 @@ type State = { /** * A component to render the message markdown as HTML inside a WebView */ -class Markdown extends React.PureComponent { +class LegacyMarkdown extends React.PureComponent { private webViewRef = React.createRef(); private subscription: NativeEventSubscription | undefined; @@ -398,6 +398,6 @@ class Markdown extends React.PureComponent { }; } -export type MarkdownProps = OwnProps; +export type LegacyMarkdownProps = OwnProps; -export default connect()(Markdown); +export default connect()(LegacyMarkdown); diff --git a/ts/components/ui/Markdown/LoadingSkeleton.tsx b/ts/components/ui/Markdown/LoadingSkeleton.tsx new file mode 100644 index 00000000000..88912d8b6e1 --- /dev/null +++ b/ts/components/ui/Markdown/LoadingSkeleton.tsx @@ -0,0 +1,41 @@ +import React from "react"; +import { View } from "react-native"; +import Placeholder from "rn-placeholder"; +import { VSpacer } from "@pagopa/io-app-design-system"; +import I18n from "../../../i18n"; + +type LoadingSkeletonProps = { + testID?: string; +}; + +export const LoadingSkeleton = ({ testID }: LoadingSkeletonProps) => ( + + + + + + + + + + + + + + + + + + + + + +); diff --git a/ts/components/ui/Markdown/Markdown.tsx b/ts/components/ui/Markdown/Markdown.tsx new file mode 100644 index 00000000000..6aca1b25ef5 --- /dev/null +++ b/ts/components/ui/Markdown/Markdown.tsx @@ -0,0 +1,196 @@ +import React, { useCallback, useEffect, useRef, useState } from "react"; +import { + AppState, + AppStateStatus, + InteractionManager, + LayoutAnimation, + Platform, + ScrollView, + StyleProp, + UIManager, + View, + ViewStyle +} from "react-native"; +import WebView from "react-native-webview"; +import { closeInjectedScript } from "../../../utils/webview"; +import { remarkProcessor } from "../../../utils/markdown"; +import { MarkdownWebviewComponent } from "./MarkdownWebviewComponent"; +import { NOTIFY_BODY_HEIGHT_SCRIPT, NOTIFY_LINK_CLICK_SCRIPT } from "./script"; +import { LoadingSkeleton } from "./LoadingSkeleton"; +import { convertOldDemoMarkdownTag, generateHtml } from "./utils"; + +export type MarkdownProps = { + animated?: boolean; + /** + * The code will be inserted in the html body between + * tags. + */ + avoidTextSelection?: true; + children: string; + cssStyle?: string; + extraBodyHeight?: number; + letUserZoom?: boolean; + onError?: (error: any) => void; + onLinkClicked?: (url: string) => void; + onLoadEnd?: () => void; + /** + * if shouldHandleLink returns true the clicked link will be handled by the Markdown component + * otherwise Markdown will ignore it. If shouldHandleLink is not defined assume () => true + * @param url + */ + shouldHandleLink?: (url: string) => boolean; + testID?: string; + webViewStyle?: StyleProp; + useCustomSortedList?: boolean; +}; + +type InternalState = { + html?: string; + htmlBodyHeight: number; + isLoading: boolean; + webviewKey: number; +}; + +export const Markdown = (props: MarkdownProps) => { + const [internalState, setInternalState] = useState({ + html: undefined, + htmlBodyHeight: 0, + isLoading: true, + webviewKey: 0 + }); + const webViewRef = useRef(null); + const { html, htmlBodyHeight, isLoading, webviewKey } = internalState; + const containerStyle: ViewStyle = { + height: htmlBodyHeight + (props.extraBodyHeight || 0) + }; + const handleLoadEnd = useCallback(() => { + props.onLoadEnd?.(); + setTimeout(() => { + // to avoid yellow box warning + // it's ugly but it works https://github.com/react-native-community/react-native-webview/issues/341#issuecomment-466639820 + webViewRef.current?.injectJavaScript( + closeInjectedScript(NOTIFY_BODY_HEIGHT_SCRIPT) + ); + }, 100); + }, [props]); + + const compileMarkdownAsync = useCallback( + ( + markdown: string, + animated: boolean = false, + onError?: (error: any) => void, + cssStyle?: string, + useCustomSortedList: boolean = false, + avoidTextSelection: boolean = false + ) => { + void InteractionManager.runAfterInteractions(() => { + if (animated) { + // Animate the layout change + // See https://facebook.github.io/react-native/docs/layoutanimation.html + if (UIManager.setLayoutAnimationEnabledExperimental) { + UIManager.setLayoutAnimationEnabledExperimental(true); + } + LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut); + } + remarkProcessor.process( + convertOldDemoMarkdownTag( + // sanitize html to prevent xss attacks + filterXSS(markdown, { stripIgnoreTagBody: ["script"] }) + ), + (error: any, file: any) => { + if (error) { + onError?.(error); + return; + } + // The check below on `isLoading` is to set the property back to 'false' + // value when refreshing with metro, since it is set back to the initial + // 'true' value but the underlying MarkdownWebviewComponent does not + // reload its content (the html is recompiled but it does not change), + // thus, not calling the `handleLoadEnd` callback + const html = generateHtml( + String(file), + cssStyle, + useCustomSortedList, + avoidTextSelection + ); + setInternalState(currentInternalState => ({ + ...currentInternalState, + isLoading: + currentInternalState.isLoading && + currentInternalState.html !== html, + html + })); + } + ); + }); + }, + [] + ); + + useEffect(() => { + setInternalState(currentInternalState => ({ + ...currentInternalState, + isLoading: true + })); + compileMarkdownAsync( + props.children, + props.animated, + props.onError, + props.cssStyle, + props.useCustomSortedList, + props.avoidTextSelection + ); + + const subscription = AppState.addEventListener( + "change", + (nextAppState: AppStateStatus) => { + if (Platform.OS === "ios" && nextAppState === "active") { + // Reloads the WebView on iOS. Using reload() on the webview + // reference causes the injected javascript to fail + setInternalState(currentInternalState => ({ + ...currentInternalState, + webviewKey: currentInternalState.webviewKey + 1 + })); + } + } + ); + return () => subscription.remove(); + }, [compileMarkdownAsync, props]); + + return ( + <> + {isLoading && } + {/* Hide the WebView until we have the htmlBodyHeight */} + {html && ( + + + + setInternalState(currentInternalState => ({ + ...currentInternalState, + isLoading: false + })) + } + setHtmlBodyHeight={(inputHtmlBodyHeight: number) => + setInternalState(currentInternalState => ({ + ...currentInternalState, + htmlBodyHeight: inputHtmlBodyHeight + })) + } + webViewStyle={props.webViewStyle} + onLinkClicked={props.onLinkClicked} + letUserZoom={props.letUserZoom} + testID={props.testID} + /> + + + )} + + ); +}; diff --git a/ts/components/ui/Markdown/MarkdownWebviewComponent.tsx b/ts/components/ui/Markdown/MarkdownWebviewComponent.tsx index 6dc1611c090..75be6f68349 100644 --- a/ts/components/ui/Markdown/MarkdownWebviewComponent.tsx +++ b/ts/components/ui/Markdown/MarkdownWebviewComponent.tsx @@ -2,7 +2,7 @@ import { useLinkTo } from "@react-navigation/native"; import * as E from "fp-ts/lib/Either"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; -import React from "react"; +import React, { LegacyRef } from "react"; import { StyleProp, ViewStyle } from "react-native"; import { WebView } from "react-native-webview"; import { WebViewMessageEvent } from "react-native-webview/lib/WebViewTypes"; @@ -16,7 +16,7 @@ type Props = { handleLoadEnd: () => void; html: string; webviewKey: number; - webViewRef: React.RefObject; + webViewRef: LegacyRef; setLoadingFalse: () => void; setHtmlBodyHeight: (h: number) => void; shouldHandleLink?: (link: string) => boolean; @@ -26,7 +26,7 @@ type Props = { testID?: string; }; -const MarkdownWebviewComponent = (props: Props) => { +export const MarkdownWebviewComponent = (props: Props) => { const linkTo = useLinkTo(); const handleWebViewMessage = (event: WebViewMessageEvent) => { @@ -65,7 +65,6 @@ const MarkdownWebviewComponent = (props: Props) => { }) ); }; - return ( { /> ); }; -export default MarkdownWebviewComponent; diff --git a/ts/components/ui/Markdown/utils.ts b/ts/components/ui/Markdown/utils.ts new file mode 100644 index 00000000000..75ca07c1db9 --- /dev/null +++ b/ts/components/ui/Markdown/utils.ts @@ -0,0 +1,146 @@ +import { FontWeight, IOColors } from "@pagopa/io-app-design-system"; +import { Platform } from "react-native"; +import * as RNFS from "react-native-fs"; + +const textColor = IOColors.bluegrey; +const fontSizeBase = 16; +const textLinkWeight = "600" as FontWeight; +const textMessageDetailLinkColor = IOColors.blue; +const toastColor = IOColors.aquaUltraLight; +const brandPrimary = IOColors.blue; + +const OLD_DEMO_TAG_MARKDOWN_REGEX = /^\[demo\]([\s\S]+?)\[\/demo\]\s*\n{2,}/; +export const convertOldDemoMarkdownTag = (markdown: string) => + markdown.replace( + OLD_DEMO_TAG_MARKDOWN_REGEX, + (_, g1: string) => `::div[${g1}]{.io-demo-block}\n` + ); + +export const generateHtml = ( + content: string, + cssStyle?: string, + useCustomSortedList: boolean = false, + avoidTextSelection: boolean = false +) => ` + + + + + + + ${GLOBAL_CSS} + ${cssStyle ? generateInlineCss(cssStyle) : ""} + ${avoidTextSelection ? avoidTextSelectionCSS : ""} + ${useCustomSortedList ? generateCustomFontList : ""} + ${content} + + + `; + +const generateInlineCss = (cssStyle: string) => ``; + +const TITILLIUM_SANSPRO_FONT_PATH = + Platform.OS === "android" + ? "file:///android_asset/fonts/TitilliumSansPro-Regular.otf" + : `${RNFS.MainBundlePath}/TitilliumSansPro-Regular.otf`; + +const TITILLIUM_SANSPRO_BOLD_FONT_PATH = + Platform.OS === "android" + ? "file:///android_asset/fonts/TitilliumSansPro-Bold.otf" + : `${RNFS.MainBundlePath}/TitilliumSansPro-Bold.otf`; + +const GLOBAL_CSS = ` + +`; + +const avoidTextSelectionCSS = ``; + +const generateCustomFontList = ``; diff --git a/ts/features/bonus/cgn/components/detail/eyca/EycaInformationComponent.tsx b/ts/features/bonus/cgn/components/detail/eyca/EycaInformationComponent.tsx index 46bd06d3d2e..18ddc29aeb5 100644 --- a/ts/features/bonus/cgn/components/detail/eyca/EycaInformationComponent.tsx +++ b/ts/features/bonus/cgn/components/detail/eyca/EycaInformationComponent.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { View } from "react-native"; import { ButtonOutline, VSpacer } from "@pagopa/io-app-design-system"; -import Markdown from "../../../../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../../../../components/ui/Markdown/LegacyMarkdown"; import I18n from "../../../../../../i18n"; import { useIOBottomSheetAutoresizableModal } from "../../../../../../utils/hooks/bottomSheet"; import { openWebUrl } from "../../../../../../utils/url"; @@ -18,9 +18,12 @@ const EycaInformationComponent: React.FunctionComponent = () => { - setMarkdownloaded(true)}> + setMarkdownloaded(true)} + > {I18n.t("bonus.cgn.detail.status.eycaDescription")} - + {isMarkdownloaded && ( - @@ -138,7 +138,7 @@ const getTosFooter = ( regulationLink: rU.url, tosUrl: bT })} - + ) ) @@ -259,13 +259,13 @@ const BonusInformationComponent: React.FunctionComponent = props => { - {bonusTypeLocalizedContent.content} - + {isMarkdownLoaded && renderUrls()} {getTosFooter( diff --git a/ts/features/euCovidCert/components/MarkdownHandleCustomLink.tsx b/ts/features/euCovidCert/components/MarkdownHandleCustomLink.tsx index 789ee805216..5523fc8d95b 100644 --- a/ts/features/euCovidCert/components/MarkdownHandleCustomLink.tsx +++ b/ts/features/euCovidCert/components/MarkdownHandleCustomLink.tsx @@ -2,16 +2,16 @@ import * as E from "fp-ts/lib/Either"; import { pipe } from "fp-ts/lib/function"; import { Toast } from "native-base"; import * as React from "react"; -import Markdown from "../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../components/ui/Markdown/LegacyMarkdown"; import { deriveCustomHandledLink } from "../../../components/ui/Markdown/handlers/link"; import I18n from "../../../i18n"; import { clipboardSetStringWithFeedback } from "../../../utils/clipboard"; import { taskLinking } from "../../../utils/url"; export const MarkdownHandleCustomLink = ( - props: React.ComponentProps + props: React.ComponentProps ): React.ReactElement => ( - { pipe( @@ -32,5 +32,5 @@ export const MarkdownHandleCustomLink = ( }} > {props.children} - + ); diff --git a/ts/features/fci/hooks/useFciAbortSignatureFlow.tsx b/ts/features/fci/hooks/useFciAbortSignatureFlow.tsx index 2919cbb1505..4f293959d2e 100644 --- a/ts/features/fci/hooks/useFciAbortSignatureFlow.tsx +++ b/ts/features/fci/hooks/useFciAbortSignatureFlow.tsx @@ -9,7 +9,7 @@ import { fciEndRequest } from "../store/actions"; import { useIODispatch, useIOSelector } from "../../../store/hooks"; import { trackFciUserExit } from "../analytics"; import { fciSignatureRequestDossierTitleSelector } from "../store/reducers/fciSignatureRequest"; -import Markdown from "../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../components/ui/Markdown/LegacyMarkdown"; import { useIOBottomSheetModal } from "../../../utils/hooks/bottomSheet"; import { fciEnvironmentSelector } from "../store/reducers/fciEnvironment"; @@ -40,9 +40,9 @@ export const useFciAbortSignatureFlow = () => { const { present, bottomSheet, dismiss } = useIOBottomSheetModal({ title: I18n.t("features.fci.abort.title"), component: ( - + {I18n.t("features.fci.abort.content", { dossierTitle })} - + ), snapPoint: [280], footer: ( diff --git a/ts/features/idpay/details/components/InitiativeRulesInfoBox.tsx b/ts/features/idpay/details/components/InitiativeRulesInfoBox.tsx index de39263b47f..fb4c2142526 100644 --- a/ts/features/idpay/details/components/InitiativeRulesInfoBox.tsx +++ b/ts/features/idpay/details/components/InitiativeRulesInfoBox.tsx @@ -13,7 +13,7 @@ import { Body } from "../../../../components/core/typography/Body"; import { H4 } from "../../../../components/core/typography/H4"; import { Link } from "../../../../components/core/typography/Link"; import { IOStyles } from "../../../../components/core/variables/IOStyles"; -import Markdown from "../../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../../components/ui/Markdown/LegacyMarkdown"; import I18n from "../../../../i18n"; import { useIOBottomSheetAutoresizableModal } from "../../../../utils/hooks/bottomSheet"; @@ -26,7 +26,7 @@ const InitiativeRulesInfoBox = (props: Props) => { const { bottomSheet, present, dismiss } = useIOBottomSheetAutoresizableModal( { - component: {content}, + component: {content}, title: I18n.t("idpay.initiative.beneficiaryDetails.infoModal.title"), footer: ( diff --git a/ts/features/idpay/onboarding/components/OnboardingDescriptionMarkdown.tsx b/ts/features/idpay/onboarding/components/OnboardingDescriptionMarkdown.tsx index 70e7cf8d6ed..52aa30f4632 100644 --- a/ts/features/idpay/onboarding/components/OnboardingDescriptionMarkdown.tsx +++ b/ts/features/idpay/onboarding/components/OnboardingDescriptionMarkdown.tsx @@ -2,7 +2,7 @@ import * as React from "react"; import { View } from "react-native"; import Placeholder from "rn-placeholder"; import { VSpacer } from "@pagopa/io-app-design-system"; -import Markdown from "../../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../../components/ui/Markdown/LegacyMarkdown"; type Props = { description: string; @@ -28,7 +28,9 @@ const OnboardingDescriptionMarkdown = (props: Props) => { return ( {!isLoaded && } - {description} + + {description} + ); } diff --git a/ts/features/idpay/onboarding/screens/PDNDPrerequisitesScreen.tsx b/ts/features/idpay/onboarding/screens/PDNDPrerequisitesScreen.tsx index 390fd66b6d6..9a626563ee8 100644 --- a/ts/features/idpay/onboarding/screens/PDNDPrerequisitesScreen.tsx +++ b/ts/features/idpay/onboarding/screens/PDNDPrerequisitesScreen.tsx @@ -17,7 +17,7 @@ import { H1 } from "../../../../components/core/typography/H1"; import { IOStyles } from "../../../../components/core/variables/IOStyles"; import BaseScreenComponent from "../../../../components/screens/BaseScreenComponent"; import FooterWithButtons from "../../../../components/ui/FooterWithButtons"; -import Markdown from "../../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../../components/ui/Markdown/LegacyMarkdown"; import { useNavigationSwipeBackListener } from "../../../../hooks/useNavigationSwipeBackListener"; import I18n from "../../../../i18n"; import { useIOSelector } from "../../../../store/hooks"; @@ -69,14 +69,14 @@ export const PDNDPrerequisitesScreen = () => { "idpay.onboarding.PDNDPrerequisites.prerequisites.info.header" ), component: ( - + {I18n.t( "idpay.onboarding.PDNDPrerequisites.prerequisites.info.body", { provider: authority } )} - + ), footer: ( diff --git a/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx b/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx index bee5b71c580..0a9efe5cd20 100644 --- a/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx +++ b/ts/features/messages/components/MessageDetail/MessageDetailsHeader.tsx @@ -1,12 +1,6 @@ import React, { PropsWithChildren } from "react"; import { StyleSheet, View } from "react-native"; -import { - ContentWrapper, - Divider, - H3, - LabelSmall, - VSpacer -} from "@pagopa/io-app-design-system"; +import { Divider, H3, LabelSmall, VSpacer } from "@pagopa/io-app-design-system"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import * as pot from "@pagopa/ts-commons/lib/pot"; @@ -63,7 +57,7 @@ export const MessageDetailsHeader = ({ ); return ( - + <> {children} @@ -79,6 +73,6 @@ export const MessageDetailsHeader = ({ )} - + ); }; diff --git a/ts/features/messages/components/MessageDetail/MessageMarkdown.tsx b/ts/features/messages/components/MessageDetail/MessageMarkdown.tsx index 6dd81298d80..f0a3985b03c 100644 --- a/ts/features/messages/components/MessageDetail/MessageMarkdown.tsx +++ b/ts/features/messages/components/MessageDetail/MessageMarkdown.tsx @@ -4,9 +4,14 @@ import { Omit } from "@pagopa/ts-commons/lib/types"; import React from "react"; - import customVariables from "../../../../theme/variables"; -import Markdown, { MarkdownProps } from "../../../../components/ui/Markdown"; +import { + Markdown, + MarkdownProps +} from "../../../../components/ui/Markdown/Markdown"; +import { isDesignSystemEnabledSelector } from "../../../../store/reducers/persistedPreferences"; +import { useIOSelector } from "../../../../store/hooks"; +import LegacyMarkdown from "../../../../components/ui/Markdown/LegacyMarkdown"; type Props = Omit; @@ -55,8 +60,11 @@ img { } `; -const MessageMarkdown: React.SFC = props => ( - -); - -export default MessageMarkdown; +export const MessageMarkdown = (props: Props) => { + const isDesignSystemEnabled = useIOSelector(isDesignSystemEnabledSelector); + return isDesignSystemEnabled ? ( + + ) : ( + + ); +}; diff --git a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap index 0dba351b97c..979331c410c 100644 --- a/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap +++ b/ts/features/messages/components/MessageDetail/__tests__/__snapshots__/MessageDetailsHeader.test.tsx.snap @@ -322,244 +322,236 @@ exports[`MessageDetailsHeader component should match the snapshot with default p - + - + - - #### Subject #### - - + #### Subject #### + + - + - 18 Oct 2021, 16:00 - - + 18 Oct 2021, 16:00 + + - + + } + /> + - - + Ċentru tas-Saħħa + + - Ċentru tas-Saħħa - - - health - - - - - - - + health + + > + + + + + diff --git a/ts/features/messages/components/MessageDetail/index.tsx b/ts/features/messages/components/MessageDetail/index.tsx index aba376619fa..8705949a308 100644 --- a/ts/features/messages/components/MessageDetail/index.tsx +++ b/ts/features/messages/components/MessageDetail/index.tsx @@ -41,7 +41,7 @@ import CtaBar from "./CtaBar"; import { RemoteContentBanner } from "./RemoteContentBanner"; import { HeaderDueDateBar } from "./HeaderDueDateBar"; import MessageContent from "./Content"; -import MessageMarkdown from "./MessageMarkdown"; +import { MessageMarkdown } from "./MessageMarkdown"; const styles = StyleSheet.create({ webview: { diff --git a/ts/features/messages/components/PreconditionBottomSheet/PreconditionContent.tsx b/ts/features/messages/components/PreconditionBottomSheet/PreconditionContent.tsx index 96dd89149aa..e3e2651f1c2 100644 --- a/ts/features/messages/components/PreconditionBottomSheet/PreconditionContent.tsx +++ b/ts/features/messages/components/PreconditionBottomSheet/PreconditionContent.tsx @@ -3,7 +3,7 @@ import { View } from "react-native"; import Placeholder from "rn-placeholder"; import { VSpacer } from "@pagopa/io-app-design-system"; import customVariables from "../../../../theme/variables"; -import MessageMarkdown from "../MessageDetail/MessageMarkdown"; +import { MessageMarkdown } from "../MessageDetail/MessageMarkdown"; type Props = { markdown: string; diff --git a/ts/features/messages/screens/MessageDetailsScreen.tsx b/ts/features/messages/screens/MessageDetailsScreen.tsx index 33a6e4b45e9..c4af63aa0bb 100644 --- a/ts/features/messages/screens/MessageDetailsScreen.tsx +++ b/ts/features/messages/screens/MessageDetailsScreen.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from "react"; +import React, { useCallback, useMemo } from "react"; import { ScrollView } from "react-native"; import { ContentWrapper, @@ -21,6 +21,7 @@ import { cancelPreviousAttachmentDownload } from "../store/actions"; import { getPaginatedMessageById } from "../store/reducers/paginatedById"; import { hasAttachmentsSelector, + messageMarkdownSelector, messageTitleSelector } from "../store/reducers/thirdPartyById"; import { MessageDetailsAttachments } from "../components/MessageDetail/MessageDetailsAttachments"; @@ -33,6 +34,8 @@ import { } from "../store/reducers/detailsById"; import { localeDateFormat } from "../../../utils/locale"; import { MessageDetailsTagBox } from "../components/MessageDetail/MessageDetailsTagBox"; +import { MessageMarkdown } from "../components/MessageDetail/MessageMarkdown"; +import { cleanMarkdownFromCTAs } from "../utils/messages"; import { MessageDetailsReminder } from "../components/MessageDetail/MessageDetailsReminder"; export type MessageDetailsScreenNavigationParams = { @@ -78,6 +81,13 @@ export const MessageDetailsScreen = () => { navigation.goBack(); }, [dispatch, navigation]); + const messageMarkdown = + useIOSelector(state => messageMarkdownSelector(state, messageId)) ?? ""; + const markdownWithNoCTA = useMemo( + () => cleanMarkdownFromCTAs(messageMarkdown), + [messageMarkdown] + ); + useHeaderSecondLevel({ title: "", goBack, @@ -97,55 +107,56 @@ export const MessageDetailsScreen = () => { return ( - - {hasAttachments && ( - - - - )} - {messageDetails.dueDate && expiringInfo === "expired" && ( - - + + {hasAttachments && ( + + + + )} + {messageDetails.dueDate && expiringInfo === "expired" && ( + + + + )} + + + {messageDetails.dueDate && expiringInfo === "expiring" && ( + <> + + - + )} - - - {messageDetails.dueDate && expiringInfo === "expiring" && ( - - - - - )} - - - + + {markdownWithNoCTA} + diff --git a/ts/features/messages/utils/messages.ts b/ts/features/messages/utils/messages.ts index 4ac4b5902aa..f1624671375 100644 --- a/ts/features/messages/utils/messages.ts +++ b/ts/features/messages/utils/messages.ts @@ -252,7 +252,7 @@ const extractCTA = ( * @param serviceId */ export const getMessageCTA = ( - markdown: MessageBodyMarkdown, + markdown: MessageBodyMarkdown | string, serviceMetadata?: ServiceMetadata, serviceId?: ServiceId ): O.Option => extractCTA(markdown, serviceMetadata, serviceId); @@ -326,7 +326,9 @@ export const hasCtaValidActions = ( * remove the cta front-matter if it is nested inside the markdown * @param markdown */ -export const cleanMarkdownFromCTAs = (markdown: MessageBodyMarkdown): string => +export const cleanMarkdownFromCTAs = ( + markdown: MessageBodyMarkdown | string +): string => pipe( markdown, FM.test, diff --git a/ts/features/pn/components/MessageDetails.tsx b/ts/features/pn/components/MessageDetails.tsx index 1cda8df45ed..437837d0a0b 100644 --- a/ts/features/pn/components/MessageDetails.tsx +++ b/ts/features/pn/components/MessageDetails.tsx @@ -5,7 +5,12 @@ import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import * as RA from "fp-ts/lib/ReadonlyArray"; import * as SEP from "fp-ts/lib/Separated"; -import { IOStyles, Tag, VSpacer } from "@pagopa/io-app-design-system"; +import { + ContentWrapper, + IOStyles, + Tag, + VSpacer +} from "@pagopa/io-app-design-system"; import { ThirdPartyAttachment } from "../../../../definitions/backend/ThirdPartyAttachment"; import { NotificationPaymentInfo } from "../../../../definitions/pn/NotificationPaymentInfo"; import { ServiceId } from "../../../../definitions/backend/ServiceId"; @@ -35,31 +40,33 @@ export const MessageDetails = ({ message, serviceId }: MessageDetailsProps) => { return ( - - - - - {attachmentList.length > 0 && ( + + - )} - - - + {attachmentList.length > 0 && ( + + + + )} + + + + ); diff --git a/ts/features/pn/components/MessageDetailsContent.tsx b/ts/features/pn/components/MessageDetailsContent.tsx index 96cbdbbe3ad..0237cc013b8 100644 --- a/ts/features/pn/components/MessageDetailsContent.tsx +++ b/ts/features/pn/components/MessageDetailsContent.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Body, ContentWrapper, VSpacer } from "@pagopa/io-app-design-system"; +import { Body, VSpacer } from "@pagopa/io-app-design-system"; type MessageDetailsContentProps = { abstract?: string; @@ -13,9 +13,9 @@ export const MessageDetailsContent = ({ } return ( - + <> {abstract} - + ); }; diff --git a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap index 67668e93a02..17f2fbc7b6d 100644 --- a/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap +++ b/ts/features/pn/components/__test__/__snapshots__/MessageDetails.test.tsx.snap @@ -654,14 +654,6 @@ exports[`MessageDetails component should match the snapshot with default props 1 } } /> - - +Array [ + />, abstract - - + , +] `; exports[`MessageDetailsContent component should match the snapshot when abstract is not defined 1`] = `null`; diff --git a/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap b/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap index 6ba1d54552c..25b5aaa13f5 100644 --- a/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap +++ b/ts/features/pn/screens/__test__/__snapshots__/MessageDetailsScreen.test.tsx.snap @@ -644,14 +644,6 @@ exports[`MessageDetailsScreen should match the snapshot when everything went fin } } /> - - = props => { { component: ( - + {I18n.t("wallet.methods.card.pagoPaCapability.bottomSheetBody")} - + { return { title: I18n.t("authentication.idp_login.contextualHelpTitle"), body: () => ( - + {I18n.t("authentication.idp_login.contextualHelpContent")} - + ) }; } diff --git a/ts/screens/authentication/cie/CieAuthorizeDataUsageScreen.tsx b/ts/screens/authentication/cie/CieAuthorizeDataUsageScreen.tsx index 1235014a393..1fda354675e 100644 --- a/ts/screens/authentication/cie/CieAuthorizeDataUsageScreen.tsx +++ b/ts/screens/authentication/cie/CieAuthorizeDataUsageScreen.tsx @@ -8,7 +8,7 @@ import { VSpacer } from "@pagopa/io-app-design-system"; import { H1 } from "../../../components/core/typography/H1"; import TopScreenComponent from "../../../components/screens/TopScreenComponent"; import FooterWithButtons from "../../../components/ui/FooterWithButtons"; -import Markdown from "../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../components/ui/Markdown/LegacyMarkdown"; import I18n from "../../../i18n"; import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; import { AuthenticationParamsList } from "../../../navigation/params/AuthenticationParamsList"; @@ -63,9 +63,9 @@ class CieAuthorizeDataUsageScreen extends React.PureComponent {

{I18n.t("authentication.cie.noDataTitle")}

- + {I18n.t("authentication.cie.authToSendData")} - +
{this.state.isLoadingCompleted && ( diff --git a/ts/screens/authentication/cie/CiePinLockedTemporarilyScreen.tsx b/ts/screens/authentication/cie/CiePinLockedTemporarilyScreen.tsx index 6cd30c4596d..9f1e87c4fa4 100644 --- a/ts/screens/authentication/cie/CiePinLockedTemporarilyScreen.tsx +++ b/ts/screens/authentication/cie/CiePinLockedTemporarilyScreen.tsx @@ -9,7 +9,7 @@ import { connect } from "react-redux"; import { ScreenContentHeader } from "../../../components/screens/ScreenContentHeader"; import TopScreenComponent from "../../../components/screens/TopScreenComponent"; import FooterWithButtons from "../../../components/ui/FooterWithButtons"; -import Markdown from "../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../components/ui/Markdown/LegacyMarkdown"; import I18n from "../../../i18n"; import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; import { AuthenticationParamsList } from "../../../navigation/params/AuthenticationParamsList"; @@ -45,7 +45,9 @@ class CiePinLockedTemporarilyScreen extends React.PureComponent { private getContextualHelp = () => ({ title: I18n.t("authentication.cie.pin.contextualHelpTitle"), body: () => ( - {I18n.t("authentication.cie.pin.contextualHelpBody")} + + {I18n.t("authentication.cie.pin.contextualHelpBody")} + ) }); @@ -84,13 +86,13 @@ class CiePinLockedTemporarilyScreen extends React.PureComponent { title={I18n.t("authentication.cie.pinTempLocked.title")} /> - { this.setState({ isLoadingCompleted: true }); }} > {I18n.t("authentication.cie.pinTempLocked.content")} - + {this.state.isLoadingCompleted && this.renderFooterButtons()} diff --git a/ts/screens/authentication/cie/CiePinScreen.tsx b/ts/screens/authentication/cie/CiePinScreen.tsx index 43af96fbe90..22cbc7b9be6 100644 --- a/ts/screens/authentication/cie/CiePinScreen.tsx +++ b/ts/screens/authentication/cie/CiePinScreen.tsx @@ -29,7 +29,7 @@ import { BottomTopAnimation, LightModalContext } from "../../../components/ui/LightModal"; -import Markdown from "../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../components/ui/Markdown/LegacyMarkdown"; import I18n from "../../../i18n"; import { IOStackNavigationProp } from "../../../navigation/params/AppParamsList"; import { AuthenticationParamsList } from "../../../navigation/params/AuthenticationParamsList"; @@ -79,7 +79,9 @@ const CIE_PIN_LENGTH = 8; const getContextualHelp = () => ({ title: I18n.t("authentication.cie.pin.contextualHelpTitle"), body: () => ( - {I18n.t("authentication.cie.pin.contextualHelpBody")} + + {I18n.t("authentication.cie.pin.contextualHelpBody")} + ) }); const onOpenForgotPinPage = () => openWebUrl(pinPukHelpUrl); @@ -109,9 +111,9 @@ const CiePinScreen: React.FC = props => { const { present, bottomSheet } = useLegacyIOBottomSheetModal( - + {I18n.t("bottomSheets.ciePin.content")} - + { () => ({ title: I18n.t("authentication.idp_login.contextualHelpTitle"), body: () => ( - + {I18n.t("authentication.idp_login.contextualHelpContent")} - + ) }), idpTextData => IdpCustomContextualHelpContent(idpTextData) diff --git a/ts/screens/modal/RootedDeviceModal.tsx b/ts/screens/modal/RootedDeviceModal.tsx index 58f12392198..e3c5b8b6533 100644 --- a/ts/screens/modal/RootedDeviceModal.tsx +++ b/ts/screens/modal/RootedDeviceModal.tsx @@ -17,7 +17,7 @@ import { withLoadingSpinner } from "../../components/helpers/withLoadingSpinner" import BaseScreenComponent from "../../components/screens/BaseScreenComponent"; import { BlockButtonProps } from "../../components/ui/BlockButtons"; import FooterWithButtons from "../../components/ui/FooterWithButtons"; -import Markdown from "../../components/ui/Markdown"; +import LegacyMarkdown from "../../components/ui/Markdown/LegacyMarkdown"; import I18n from "../../i18n"; import customVariables from "../../theme/variables"; import { trackLoginRootedScreen } from "./analytics"; @@ -135,13 +135,13 @@ const RootedDeviceModal: React.FunctionComponent = (props: Props) => {
- {body} - + { - setIsMarkdownLoaded(true)}> + setIsMarkdownLoaded(true)}> {I18n.t("profile.main.privacy.exportData.info.body")} - + diff --git a/ts/screens/profile/ProfileAboutApp.tsx b/ts/screens/profile/ProfileAboutApp.tsx index 3c23297fcf5..7fb55c47919 100644 --- a/ts/screens/profile/ProfileAboutApp.tsx +++ b/ts/screens/profile/ProfileAboutApp.tsx @@ -1,6 +1,6 @@ import { ContentWrapper, VSpacer } from "@pagopa/io-app-design-system"; import React from "react"; -import Markdown from "../../components/ui/Markdown"; +import LegacyMarkdown from "../../components/ui/Markdown/LegacyMarkdown"; import { RNavScreenWithLargeHeader } from "../../components/ui/RNavScreenWithLargeHeader"; import I18n from "../../i18n"; @@ -13,9 +13,9 @@ const ProfileAboutApp = () => ( > - + {I18n.t("profile.main.appInfo.contextualHelpContent")} - + diff --git a/ts/screens/profile/components/ShareDataComponent.tsx b/ts/screens/profile/components/ShareDataComponent.tsx index 7c6c4719c0c..61f3975bb51 100644 --- a/ts/screens/profile/components/ShareDataComponent.tsx +++ b/ts/screens/profile/components/ShareDataComponent.tsx @@ -4,7 +4,7 @@ import { InfoBox } from "../../../components/box/InfoBox"; import { Body } from "../../../components/core/typography/Body"; import { Label } from "../../../components/core/typography/Label"; import { Link } from "../../../components/core/typography/Link"; -import Markdown from "../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../components/ui/Markdown/LegacyMarkdown"; import { privacyUrl } from "../../../config"; import I18n from "../../../i18n"; import { ioSuppliersUrl } from "../../../urls"; @@ -18,7 +18,7 @@ type MarkdownProps = { const MarkdownBody = (props: MarkdownProps): React.ReactElement => ( <> - {props.body} + {props.body} ); diff --git a/ts/screens/profile/components/services/ManualConfigBottomSheet.tsx b/ts/screens/profile/components/services/ManualConfigBottomSheet.tsx index 0ce64301235..3e15e197ec9 100644 --- a/ts/screens/profile/components/services/ManualConfigBottomSheet.tsx +++ b/ts/screens/profile/components/services/ManualConfigBottomSheet.tsx @@ -5,16 +5,16 @@ import { cancelButtonProps, errorButtonProps } from "../../../../components/buttons/ButtonConfigurations"; -import Markdown from "../../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../../components/ui/Markdown/LegacyMarkdown"; import I18n from "../../../../i18n"; import { useLegacyIOBottomSheetModal } from "../../../../utils/hooks/bottomSheet"; const ManualConfigConfirm = (): React.ReactElement => ( <> - + {I18n.t("services.optIn.preferences.manualConfig.bottomSheet.body")} - + ); diff --git a/ts/screens/profile/playgrounds/MarkdownPlayground.tsx b/ts/screens/profile/playgrounds/MarkdownPlayground.tsx index da9f1e0d688..5ce87e8819d 100644 --- a/ts/screens/profile/playgrounds/MarkdownPlayground.tsx +++ b/ts/screens/profile/playgrounds/MarkdownPlayground.tsx @@ -15,7 +15,7 @@ import React, { useCallback } from "react"; import { ScrollView, StyleSheet, TextInput, View } from "react-native"; import { MessageBodyMarkdown } from "../../../../definitions/backend/MessageBodyMarkdown"; import { ExtractedCtaButton } from "../../../components/cta/ExtractedCtaButton"; -import Markdown from "../../../components/ui/Markdown"; +import LegacyMarkdown from "../../../components/ui/Markdown/LegacyMarkdown"; import { CTA } from "../../../features/messages/types/MessageCTA"; import { cleanMarkdownFromCTAs, @@ -199,9 +199,9 @@ const MarkdownPlayground = () => { {isMarkdownSet && ( <> - + {cleanMarkdownFromCTAs(markdownText as MessageBodyMarkdown)} - + )} diff --git a/ts/screens/services/ServiceDetailsScreen.tsx b/ts/screens/services/ServiceDetailsScreen.tsx index 65eadc8635c..4b563db2ad7 100644 --- a/ts/screens/services/ServiceDetailsScreen.tsx +++ b/ts/screens/services/ServiceDetailsScreen.tsx @@ -21,7 +21,7 @@ import ContactPreferencesToggles from "../../components/services/ContactPreferen import ServiceMetadataComponent from "../../components/services/ServiceMetadata"; import SpecialServicesCTA from "../../components/services/SpecialServices/SpecialServicesCTA"; import TosAndPrivacyBox from "../../components/services/TosAndPrivacyBox"; -import Markdown from "../../components/ui/Markdown"; +import LegacyMarkdown from "../../components/ui/Markdown/LegacyMarkdown"; import { FooterTopShadow } from "../../components/FooterTopShadow"; import I18n from "../../i18n"; import { useIONavigation } from "../../navigation/params/AppParamsList"; @@ -133,13 +133,13 @@ const ServiceDetailsScreen = (props: Props) => { {metadata?.description && ( <> - {metadata.description} - + )} From 541e5c72357fc857d1ef52b2154bf95ecd7fad04 Mon Sep 17 00:00:00 2001 From: Alessandro Dell'Oste Date: Thu, 22 Feb 2024 11:19:29 +0100 Subject: [PATCH 055/190] feat: [IOCOM-881] Update message attachment preview (#5537) ## Short description This PR updates message attachment preview. The preview has been updated by sharing the `MessageAttachment` component between standard messages and SEND messages. ## List of changes proposed in this pull request - converted the `MessageAttachment` screen into a component - created the screen `messages/screens/MessageAttachmentScreen.tsx` - created the screen `pn/screens/MessageAttachmentScreen.tsx` - updated the params naming convention ## How to test Using `io-dev-api-server`, generate messages with attachments. Navigate to the message attachment preview and check that everything is displayed correctly. --- .../MessageAttachment}/MessageAttachment.tsx | 73 +++++++++---------- .../components/MessageDetail/index.tsx | 3 +- .../messages/hooks/useAttachmentDownload.tsx | 3 +- .../messages/navigation/MessagesNavigator.tsx | 4 +- ts/features/messages/navigation/params.ts | 16 ++-- .../screens/MessageAttachmentScreen.tsx | 38 ++++++++++ .../screens/MessageCalendarScreen.tsx | 2 +- .../messages/screens/MessageDetailsScreen.tsx | 2 +- .../messages/screens/MessageRouterScreen.tsx | 2 +- .../__tests__/MessageAttachment.test.tsx | 4 +- .../messages/store/actions/navigation.ts | 8 +- .../pn/components/LegacyMessageDetails.tsx | 3 +- ts/features/pn/navigation/navigator.tsx | 15 ++-- ts/features/pn/navigation/params.ts | 12 +-- ....tsx => LegacyAttachmentPreviewScreen.tsx} | 43 ++++++----- .../pn/screens/MessageAttachmentScreen.tsx | 35 +++++++++ .../pn/screens/MessageDetailsScreen.tsx | 2 +- ts/features/pn/screens/PaidPaymentScreen.tsx | 41 +++++------ .../__test__/PaidPaymentScreen.test.tsx | 43 ++++------- .../PaidPaymentScreen.test.tsx.snap | 12 +-- 20 files changed, 208 insertions(+), 153 deletions(-) rename ts/features/messages/{screens => components/MessageAttachment}/MessageAttachment.tsx (81%) create mode 100644 ts/features/messages/screens/MessageAttachmentScreen.tsx rename ts/features/pn/screens/{AttachmentPreviewScreen.tsx => LegacyAttachmentPreviewScreen.tsx} (68%) create mode 100644 ts/features/pn/screens/MessageAttachmentScreen.tsx diff --git a/ts/features/messages/screens/MessageAttachment.tsx b/ts/features/messages/components/MessageAttachment/MessageAttachment.tsx similarity index 81% rename from ts/features/messages/screens/MessageAttachment.tsx rename to ts/features/messages/components/MessageAttachment/MessageAttachment.tsx index 2a3e0b67c93..8c65c02cfd8 100644 --- a/ts/features/messages/screens/MessageAttachment.tsx +++ b/ts/features/messages/components/MessageAttachment/MessageAttachment.tsx @@ -1,43 +1,33 @@ import React, { useCallback, useState } from "react"; -import { pipe } from "fp-ts/lib/function"; -import * as B from "fp-ts/lib/boolean"; import ReactNativeBlobUtil from "react-native-blob-util"; import { FooterWithButtons } from "@pagopa/io-app-design-system"; -import I18n from "../../../i18n"; -import { useIOSelector } from "../../../store/hooks"; -import { downloadedMessageAttachmentSelector } from "../store/reducers/downloads"; -import { UIMessageId } from "../types"; -import { isIos } from "../../../utils/platform"; -import { share } from "../../../utils/share"; -import { IOToast } from "../../../components/Toast"; -import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; -import { PdfViewer } from "../components/MessageAttachment/PdfViewer"; -import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; -import { MessagesParamsList } from "../navigation/params"; +import { pipe } from "fp-ts/lib/function"; +import * as B from "fp-ts/lib/boolean"; +import I18n from "../../../../i18n"; +import { useIOSelector } from "../../../../store/hooks"; +import { downloadedMessageAttachmentSelector } from "../../store/reducers/downloads"; +import { UIMessageId } from "../../types"; +import { isIos } from "../../../../utils/platform"; +import { share } from "../../../../utils/share"; +import { IOToast } from "../../../../components/Toast"; +import { OperationResultScreenContent } from "../../../../components/screens/OperationResultScreenContent"; +import { + attachmentContentType, + attachmentDisplayName +} from "../../store/reducers/transformers"; import { trackThirdPartyMessageAttachmentCorruptedFile, trackThirdPartyMessageAttachmentPreviewSuccess, trackThirdPartyMessageAttachmentUserAction -} from "../analytics"; -import { ServiceId } from "../../../../definitions/backend/ServiceId"; +} from "../../analytics"; import { trackPNAttachmentOpeningSuccess, trackPNAttachmentSave, trackPNAttachmentSaveShare, trackPNAttachmentShare -} from "../../pn/analytics"; -import { OperationResultScreenContent } from "../../../components/screens/OperationResultScreenContent"; -import { - attachmentContentType, - attachmentDisplayName -} from "../store/reducers/transformers"; - -export type MessageAttachmentNavigationParams = Readonly<{ - messageId: UIMessageId; - attachmentId: string; - isPN: boolean; - serviceId?: ServiceId; -}>; +} from "../../../pn/analytics"; +import { ServiceId } from "../../../../../definitions/backend/ServiceId"; +import { PdfViewer } from "./PdfViewer"; type MessageAttachmentFooterProps = { attachmentCategory?: string; @@ -170,13 +160,19 @@ const onDownload = (isPN: boolean, attachmentCategory?: string) => ) ); -export const MessageAttachment = ( - props: IOStackNavigationRouteProps< - MessagesParamsList, - "MESSAGE_DETAIL_ATTACHMENT" - > -): React.ReactElement => { - const { messageId, attachmentId, isPN, serviceId } = props.route.params; +export type MessageAttachmentProps = { + messageId: UIMessageId; + attachmentId: string; + isPN: boolean; + serviceId?: ServiceId; +}; + +export const MessageAttachment = ({ + attachmentId, + isPN, + messageId, + serviceId +}: MessageAttachmentProps) => { const [isPDFRenderingError, setIsPDFRenderingError] = useState(false); const downloadedAttachment = useIOSelector(state => @@ -191,11 +187,6 @@ export const MessageAttachment = ( onPDFError(messageId, isPN, serviceId, attachmentCategory); }, [attachmentCategory, messageId, isPN, serviceId]); - useHeaderSecondLevel({ - title: "", - supportRequest: true - }); - if (!attachmentOpt || !downloadPathOpt) { return ( ); } + const name = attachmentDisplayName(attachmentOpt); const mimeType = attachmentContentType(attachmentOpt); + return ( <> {isPDFRenderingError ? ( diff --git a/ts/features/messages/components/MessageDetail/index.tsx b/ts/features/messages/components/MessageDetail/index.tsx index 8705949a308..ea1c19bb098 100644 --- a/ts/features/messages/components/MessageDetail/index.tsx +++ b/ts/features/messages/components/MessageDetail/index.tsx @@ -162,8 +162,7 @@ const MessageDetailsComponent = ({ params: { messageId, serviceId: serviceIdOpt, - attachmentId: attachment.id, - isPN: false + attachmentId: attachment.id } }); }, diff --git a/ts/features/messages/hooks/useAttachmentDownload.tsx b/ts/features/messages/hooks/useAttachmentDownload.tsx index 26e45403fc5..cdebf2c0ff8 100644 --- a/ts/features/messages/hooks/useAttachmentDownload.tsx +++ b/ts/features/messages/hooks/useAttachmentDownload.tsx @@ -49,8 +49,7 @@ export const useAttachmentDownload = ( params: { messageId, serviceId, - attachmentId, - isPN: false + attachmentId } }); }, [attachmentId, dispatch, messageId, navigation, serviceId]); diff --git a/ts/features/messages/navigation/MessagesNavigator.tsx b/ts/features/messages/navigation/MessagesNavigator.tsx index 5efaf0df55c..c3fd9eb0833 100644 --- a/ts/features/messages/navigation/MessagesNavigator.tsx +++ b/ts/features/messages/navigation/MessagesNavigator.tsx @@ -13,7 +13,7 @@ import { isGestureEnabled } from "../../../utils/navigation"; import { isPnEnabledSelector } from "../../../store/reducers/backendStatus"; import { LegacyMessageDetailAttachment } from "../screens/LegacyMessageAttachment"; import { isDesignSystemEnabledSelector } from "../../../store/reducers/persistedPreferences"; -import { MessageAttachment } from "../screens/MessageAttachment"; +import { MessageAttachmentScreen } from "../screens/MessageAttachmentScreen"; import { MessagesParamsList } from "./params"; import { MESSAGES_ROUTES } from "./routes"; @@ -53,7 +53,7 @@ export const MessagesStackNavigator = () => { name={MESSAGES_ROUTES.MESSAGE_DETAIL_ATTACHMENT} component={ isDesignSystemEnabled - ? MessageAttachment + ? MessageAttachmentScreen : LegacyMessageDetailAttachment } options={{ diff --git a/ts/features/messages/navigation/params.ts b/ts/features/messages/navigation/params.ts index c97ecd718e6..209bc4eff36 100644 --- a/ts/features/messages/navigation/params.ts +++ b/ts/features/messages/navigation/params.ts @@ -1,19 +1,19 @@ import { NavigatorScreenParams } from "@react-navigation/native"; import EUCOVIDCERT_ROUTES from "../../euCovidCert/navigation/routes"; import PN_ROUTES from "../../pn/navigation/routes"; -import { MessageRouterScreenNavigationParams } from "../screens/MessageRouterScreen"; -import { MessageDetailsScreenNavigationParams } from "../screens/MessageDetailsScreen"; +import { MessageRouterScreenRouteParams } from "../screens/MessageRouterScreen"; +import { MessageDetailsScreenRouteParams } from "../screens/MessageDetailsScreen"; import { EUCovidCertParamsList } from "../../euCovidCert/navigation/params"; import { PnParamsList } from "../../pn/navigation/params"; -import { MessageAttachmentNavigationParams } from "../screens/MessageAttachment"; -import { MessageCalendarRouteParams } from "../screens/MessageCalendarScreen"; +import { MessageAttachmentScreenRouteParams } from "../screens/MessageAttachmentScreen"; +import { MessageCalendarScreenRouteParams } from "../screens/MessageCalendarScreen"; import { MESSAGES_ROUTES } from "./routes"; export type MessagesParamsList = { - [MESSAGES_ROUTES.MESSAGE_ROUTER]: MessageRouterScreenNavigationParams; - [MESSAGES_ROUTES.MESSAGE_DETAIL]: MessageDetailsScreenNavigationParams; - [MESSAGES_ROUTES.MESSAGE_DETAIL_ATTACHMENT]: MessageAttachmentNavigationParams; - [MESSAGES_ROUTES.MESSAGE_DETAIL_CALENDAR]: MessageCalendarRouteParams; + [MESSAGES_ROUTES.MESSAGE_ROUTER]: MessageRouterScreenRouteParams; + [MESSAGES_ROUTES.MESSAGE_DETAIL]: MessageDetailsScreenRouteParams; + [MESSAGES_ROUTES.MESSAGE_DETAIL_ATTACHMENT]: MessageAttachmentScreenRouteParams; + [MESSAGES_ROUTES.MESSAGE_DETAIL_CALENDAR]: MessageCalendarScreenRouteParams; [EUCOVIDCERT_ROUTES.MAIN]: NavigatorScreenParams; [PN_ROUTES.MAIN]: NavigatorScreenParams; }; diff --git a/ts/features/messages/screens/MessageAttachmentScreen.tsx b/ts/features/messages/screens/MessageAttachmentScreen.tsx new file mode 100644 index 00000000000..05e8f99e487 --- /dev/null +++ b/ts/features/messages/screens/MessageAttachmentScreen.tsx @@ -0,0 +1,38 @@ +import React from "react"; +import { UIMessageId } from "../types"; +import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { MessagesParamsList } from "../navigation/params"; +import { ServiceId } from "../../../../definitions/backend/ServiceId"; +import { MessageAttachment } from "../components/MessageAttachment/MessageAttachment"; +import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; + +export type MessageAttachmentScreenRouteParams = { + messageId: UIMessageId; + attachmentId: string; + serviceId?: ServiceId; +}; + +type MessageAttachmentScreenProps = IOStackNavigationRouteProps< + MessagesParamsList, + "MESSAGE_DETAIL_ATTACHMENT" +>; + +export const MessageAttachmentScreen = ( + props: MessageAttachmentScreenProps +) => { + const { attachmentId, messageId, serviceId } = props.route.params; + + useHeaderSecondLevel({ + title: "", + supportRequest: true + }); + + return ( + + ); +}; diff --git a/ts/features/messages/screens/MessageCalendarScreen.tsx b/ts/features/messages/screens/MessageCalendarScreen.tsx index b927fe613fc..666df47dd16 100644 --- a/ts/features/messages/screens/MessageCalendarScreen.tsx +++ b/ts/features/messages/screens/MessageCalendarScreen.tsx @@ -24,7 +24,7 @@ import { findDeviceCalendarsTask } from "../../../utils/calendar"; import { messageDetailsByIdSelector } from "../store/reducers/detailsById"; import { useMessageCalendar } from "../hooks/useMessageCalendar"; -export type MessageCalendarRouteParams = { +export type MessageCalendarScreenRouteParams = { messageId: UIMessageId; }; diff --git a/ts/features/messages/screens/MessageDetailsScreen.tsx b/ts/features/messages/screens/MessageDetailsScreen.tsx index c4af63aa0bb..387c4079b01 100644 --- a/ts/features/messages/screens/MessageDetailsScreen.tsx +++ b/ts/features/messages/screens/MessageDetailsScreen.tsx @@ -38,7 +38,7 @@ import { MessageMarkdown } from "../components/MessageDetail/MessageMarkdown"; import { cleanMarkdownFromCTAs } from "../utils/messages"; import { MessageDetailsReminder } from "../components/MessageDetail/MessageDetailsReminder"; -export type MessageDetailsScreenNavigationParams = { +export type MessageDetailsScreenRouteParams = { messageId: UIMessageId; serviceId: ServiceId; }; diff --git a/ts/features/messages/screens/MessageRouterScreen.tsx b/ts/features/messages/screens/MessageRouterScreen.tsx index 4d3489b3657..aecf36b5835 100644 --- a/ts/features/messages/screens/MessageRouterScreen.tsx +++ b/ts/features/messages/screens/MessageRouterScreen.tsx @@ -28,7 +28,7 @@ import EUCOVIDCERT_ROUTES from "../../euCovidCert/navigation/routes"; import PN_ROUTES from "../../pn/navigation/routes"; import { MESSAGES_ROUTES } from "../navigation/routes"; -export type MessageRouterScreenNavigationParams = { +export type MessageRouterScreenRouteParams = { messageId: UIMessageId; fromNotification: boolean; }; diff --git a/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx b/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx index fee3cf8d885..20dcd97ccc2 100644 --- a/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx +++ b/ts/features/messages/screens/__tests__/MessageAttachment.test.tsx @@ -4,7 +4,7 @@ import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWr import { MESSAGES_ROUTES } from "../../navigation/routes"; import { appReducer } from "../../../../store/reducers"; import { applicationChangeState } from "../../../../store/actions/application"; -import { MessageAttachment } from "../MessageAttachment"; +import { MessageAttachmentScreen } from "../MessageAttachmentScreen"; import { ServiceId } from "../../../../../definitions/backend/ServiceId"; import { downloadAttachment } from "../../store/actions"; import { preferencesDesignSystemSetEnabled } from "../../../../store/actions/persistedPreferences"; @@ -52,7 +52,7 @@ const renderScreen = ( ); return renderScreenWithNavigationStoreContext( - MessageAttachment, + MessageAttachmentScreen, MESSAGES_ROUTES.MESSAGE_DETAIL_ATTACHMENT, { messageId, attachmentId, isPN: false, serviceId }, store diff --git a/ts/features/messages/store/actions/navigation.ts b/ts/features/messages/store/actions/navigation.ts index 529ab72212b..b13bcd8c2ad 100644 --- a/ts/features/messages/store/actions/navigation.ts +++ b/ts/features/messages/store/actions/navigation.ts @@ -1,13 +1,13 @@ import { CommonActions } from "@react-navigation/native"; import { MESSAGES_ROUTES } from "../../navigation/routes"; -import { MessageRouterScreenNavigationParams } from "../../screens/MessageRouterScreen"; -import { MessageDetailsScreenNavigationParams } from "../../screens/MessageDetailsScreen"; +import { MessageRouterScreenRouteParams } from "../../screens/MessageRouterScreen"; +import { MessageDetailsScreenRouteParams } from "../../screens/MessageDetailsScreen"; /** * Open the Message Detail screen supporting the new UIMessage type. */ export const navigateToMessageDetailScreenAction = ( - params: MessageDetailsScreenNavigationParams + params: MessageDetailsScreenRouteParams ) => CommonActions.navigate(MESSAGES_ROUTES.MESSAGES_NAVIGATOR, { screen: MESSAGES_ROUTES.MESSAGE_DETAIL, @@ -18,7 +18,7 @@ export const navigateToMessageDetailScreenAction = ( * Open the Message Detail Router supporting the new UIMessage type. */ export const navigateToMessageRouterAction = ( - params: MessageRouterScreenNavigationParams + params: MessageRouterScreenRouteParams ) => CommonActions.navigate(MESSAGES_ROUTES.MESSAGES_NAVIGATOR, { screen: MESSAGES_ROUTES.MESSAGE_ROUTER, diff --git a/ts/features/pn/components/LegacyMessageDetails.tsx b/ts/features/pn/components/LegacyMessageDetails.tsx index 0b5772216b8..b6ef744cf5b 100644 --- a/ts/features/pn/components/LegacyMessageDetails.tsx +++ b/ts/features/pn/components/LegacyMessageDetails.tsx @@ -86,9 +86,8 @@ export const LegacyMessageDetails = ({ params: { screen: PN_ROUTES.MESSAGE_ATTACHMENT, params: { - messageId, attachmentId: attachment.id, - category: attachment.category + messageId } } }); diff --git a/ts/features/pn/navigation/navigator.tsx b/ts/features/pn/navigation/navigator.tsx index 998adc94e39..52285972499 100644 --- a/ts/features/pn/navigation/navigator.tsx +++ b/ts/features/pn/navigation/navigator.tsx @@ -1,9 +1,10 @@ -import * as React from "react"; +import React from "react"; import { createStackNavigator } from "@react-navigation/stack"; import { isGestureEnabled } from "../../../utils/navigation"; -import { MessageDetailsScreen } from "../screens/MessageDetailsScreen"; import { LegacyMessageDetailsScreen } from "../screens/LegacyMessageDetailsScreen"; -import { AttachmentPreviewScreen } from "../screens/AttachmentPreviewScreen"; +import { LegacyAttachmentPreviewScreen } from "../screens/LegacyAttachmentPreviewScreen"; +import { MessageDetailsScreen } from "../screens/MessageDetailsScreen"; +import { MessageAttachmentScreen } from "../screens/MessageAttachmentScreen"; import { PaidPaymentScreen } from "../screens/PaidPaymentScreen"; import { useIOSelector } from "../../../store/hooks"; import { isDesignSystemEnabledSelector } from "../../../store/reducers/persistedPreferences"; @@ -33,9 +34,13 @@ export const PnStackNavigator = () => { /> ; - -type AttachmentPreviewScreenProps = IOStackNavigationRouteProps< +type LegacyAttachmentPreviewScreenProps = IOStackNavigationRouteProps< PnParamsList, "PN_ROUTES_MESSAGE_ATTACHMENT" >; -export const AttachmentPreviewScreen = ({ +export const LegacyAttachmentPreviewScreen = ({ navigation, route -}: AttachmentPreviewScreenProps) => { - const { messageId, attachmentId, category } = route.params; +}: LegacyAttachmentPreviewScreenProps) => { + const { messageId, attachmentId } = route.params; // This ref is needed otherwise the auto back on the useEffect will fire multiple // times, since its dependencies change during the back navigation const autoBackOnErrorHandled = useRef(false); @@ -55,21 +48,37 @@ export const AttachmentPreviewScreen = ({ messageId={messageId} enableDownloadAttachment={false} attachment={maybePnMessageAttachment.value} - onOpen={() => trackPNAttachmentOpen(category)} + onOpen={() => + trackPNAttachmentOpen(maybePnMessageAttachment.value.category) + } onShare={() => pipe( isIos, B.fold( - () => trackPNAttachmentShare(category), - () => trackPNAttachmentSaveShare(category) + () => + trackPNAttachmentShare(maybePnMessageAttachment.value.category), + () => + trackPNAttachmentSaveShare( + maybePnMessageAttachment.value.category + ) ) ) } - onDownload={() => trackPNAttachmentSave(category)} + onDownload={() => + trackPNAttachmentSave(maybePnMessageAttachment.value.category) + } onLoadComplete={() => - trackPNAttachmentOpeningSuccess("displayer", category) + trackPNAttachmentOpeningSuccess( + "displayer", + maybePnMessageAttachment.value.category + ) + } + onPDFError={() => + trackPNAttachmentOpeningSuccess( + "error", + maybePnMessageAttachment.value.category + ) } - onPDFError={() => trackPNAttachmentOpeningSuccess("error", category)} /> ) : ( <> diff --git a/ts/features/pn/screens/MessageAttachmentScreen.tsx b/ts/features/pn/screens/MessageAttachmentScreen.tsx new file mode 100644 index 00000000000..7e1e4ce10b1 --- /dev/null +++ b/ts/features/pn/screens/MessageAttachmentScreen.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import { UIMessageId } from "../../messages/types"; +import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { PnParamsList } from "../navigation/params"; +import { MessageAttachment } from "../../messages/components/MessageAttachment/MessageAttachment"; +import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; + +export type MessageAttachmentScreenRouteParams = Readonly<{ + messageId: UIMessageId; + attachmentId: string; +}>; + +type MessageAttachmentScreenProps = IOStackNavigationRouteProps< + PnParamsList, + "PN_ROUTES_MESSAGE_ATTACHMENT" +>; + +export const MessageAttachmentScreen = ( + props: MessageAttachmentScreenProps +) => { + const { attachmentId, messageId } = props.route.params; + + useHeaderSecondLevel({ + title: "", + supportRequest: true + }); + + return ( + + ); +}; diff --git a/ts/features/pn/screens/MessageDetailsScreen.tsx b/ts/features/pn/screens/MessageDetailsScreen.tsx index 85f6de1033b..d22c195911e 100644 --- a/ts/features/pn/screens/MessageDetailsScreen.tsx +++ b/ts/features/pn/screens/MessageDetailsScreen.tsx @@ -38,7 +38,7 @@ import { selectedPaymentIdSelector } from "../store/reducers/payments"; import { useHeaderSecondLevel } from "../../../hooks/useHeaderSecondLevel"; import { OperationResultScreenContent } from "../../../components/screens/OperationResultScreenContent"; -export type MessageDetailsScreenNavigationParams = { +export type MessageDetailsScreenRouteParams = { messageId: UIMessageId; serviceId: ServiceId; firstTimeOpening: boolean; diff --git a/ts/features/pn/screens/PaidPaymentScreen.tsx b/ts/features/pn/screens/PaidPaymentScreen.tsx index b1c8d938876..cbfdad0d9e3 100644 --- a/ts/features/pn/screens/PaidPaymentScreen.tsx +++ b/ts/features/pn/screens/PaidPaymentScreen.tsx @@ -1,40 +1,33 @@ import React from "react"; -import * as O from "fp-ts/lib/Option"; -import I18n from "i18n-js"; -import { SafeAreaView, ScrollView, StyleSheet } from "react-native"; +import { SafeAreaView, ScrollView } from "react-native"; import { ListItemInfoCopy } from "@pagopa/io-app-design-system"; -import { Route, useRoute } from "@react-navigation/native"; +import * as O from "fp-ts/lib/Option"; +import I18n from "../../../i18n"; import { IOStyles } from "../../../components/core/variables/IOStyles"; import BaseScreenComponent from "../../../components/screens/BaseScreenComponent"; import { TransactionSummaryStatus } from "../../../screens/wallet/payment/components/TransactionSummaryStatus"; import { clipboardSetStringWithFeedback } from "../../../utils/clipboard"; -import customVariables from "../../../theme/variables"; import { emptyContextualHelp } from "../../../utils/emptyContextualHelp"; import { TransactionSummaryError } from "../../../screens/wallet/payment/TransactionSummaryScreen"; +import { IOStackNavigationRouteProps } from "../../../navigation/params/AppParamsList"; +import { PnParamsList } from "../navigation/params"; -const styles = StyleSheet.create({ - container: { - paddingHorizontal: customVariables.contentPadding - } -}); - -export type PaidPaymentScreenNavigationParams = Readonly<{ +export type PaidPaymentScreenRouteParams = Readonly<{ noticeCode: string; creditorTaxId?: string; }>; +type PaidPaymentScreenProps = IOStackNavigationRouteProps< + PnParamsList, + "PN_CANCELLED_MESSAGE_PAID_PAYMENT" +>; + const paidPaymentError = O.some( "PPT_PAGAMENTO_DUPLICATO" ) as TransactionSummaryError; -export const PaidPaymentScreen = (): React.ReactElement => { - const { noticeCode, creditorTaxId: maybeCreditorTaxId } = - useRoute< - Route< - "PN_CANCELLED_MESSAGE_PAID_PAYMENT", - PaidPaymentScreenNavigationParams - > - >().params; +export const PaidPaymentScreen = ({ route }: PaidPaymentScreenProps) => { + const { noticeCode, creditorTaxId } = route.params; const formattedPaymentNoticeNumber = noticeCode .replace(/(\d{4})/g, "$1 ") .trim(); @@ -47,21 +40,21 @@ export const PaidPaymentScreen = (): React.ReactElement => { > - + clipboardSetStringWithFeedback(noticeCode)} /> - {maybeCreditorTaxId && ( + {creditorTaxId && ( clipboardSetStringWithFeedback(maybeCreditorTaxId)} + value={creditorTaxId} + onPress={() => clipboardSetStringWithFeedback(creditorTaxId)} /> )} diff --git a/ts/features/pn/screens/__test__/PaidPaymentScreen.test.tsx b/ts/features/pn/screens/__test__/PaidPaymentScreen.test.tsx index 89eabe93e55..09688c820ec 100644 --- a/ts/features/pn/screens/__test__/PaidPaymentScreen.test.tsx +++ b/ts/features/pn/screens/__test__/PaidPaymentScreen.test.tsx @@ -1,30 +1,25 @@ -import * as React from "react"; -import { createStackNavigator } from "@react-navigation/stack"; -import renderer from "react-test-renderer"; import { cleanup } from "@testing-library/react-native"; -import { NavigationContainer } from "@react-navigation/native"; import configureMockStore from "redux-mock-store"; -import { Provider } from "react-redux"; import { PaidPaymentScreen } from "../PaidPaymentScreen"; import PN_ROUTES from "../../navigation/routes"; import { GlobalState } from "../../../../store/reducers/types"; import { applicationChangeState } from "../../../../store/actions/application"; import { appReducer } from "../../../../store/reducers"; +import { renderScreenWithNavigationStoreContext } from "../../../../utils/testWrapper"; describe("PaidPaymentScreen", () => { // Needed to avoid `ReferenceError: You are trying to `import` a file after the Jest environment has been torn down.` afterEach(cleanup); it("should render with back button, title, help button, paid banner, notice code and creditor tax id", () => { - const tree = renderer - .create(generateComponent(generateNoticeCode(), generateCreditorTaxId())) - .toJSON(); - expect(tree).toMatchSnapshot(); + const component = generateComponent( + generateNoticeCode(), + generateCreditorTaxId() + ); + expect(component.toJSON()).toMatchSnapshot(); }); it("should render with back button, title, help button, paid banner and notice code but no creditor tax id", () => { - const tree = renderer - .create(generateComponent(generateNoticeCode())) - .toJSON(); - expect(tree).toMatchSnapshot(); + const component = generateComponent(generateNoticeCode()); + expect(component.toJSON()).toMatchSnapshot(); }); }); @@ -34,21 +29,11 @@ const generateCreditorTaxId = () => "00000000009"; const generateComponent = (noticeCode: string, creditorTaxId?: string) => { const globalState = appReducer(undefined, applicationChangeState("active")); const store = configureMockStore()(globalState); - const Stack = createStackNavigator(); - return ( - - - - - - - + + return renderScreenWithNavigationStoreContext( + PaidPaymentScreen, + PN_ROUTES.CANCELLED_MESSAGE_PAID_PAYMENT, + { noticeCode, creditorTaxId }, + store ); }; diff --git a/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap b/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap index ca0c053e30c..050fd81d1f4 100644 --- a/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap +++ b/ts/features/pn/screens/__test__/__snapshots__/PaidPaymentScreen.test.tsx.snap @@ -23,7 +23,7 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p style={ Array [ Object { - "backgroundColor": "rgb(242, 242, 242)", + "backgroundColor": "#FFFFFF", "flex": 1, }, undefined, @@ -65,7 +65,7 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p collapsable={false} style={ Object { - "backgroundColor": "rgb(255, 255, 255)", + "backgroundColor": "#FFFFFF", "borderBottomColor": "rgb(216, 216, 216)", "flex": 1, "shadowColor": "rgb(216, 216, 216)", @@ -297,7 +297,7 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p }, Array [ Object { - "backgroundColor": "rgb(242, 242, 242)", + "backgroundColor": "#FFFFFF", }, undefined, ], @@ -1030,7 +1030,7 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p style={ Array [ Object { - "backgroundColor": "rgb(242, 242, 242)", + "backgroundColor": "#FFFFFF", "flex": 1, }, undefined, @@ -1072,7 +1072,7 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p collapsable={false} style={ Object { - "backgroundColor": "rgb(255, 255, 255)", + "backgroundColor": "#FFFFFF", "borderBottomColor": "rgb(216, 216, 216)", "flex": 1, "shadowColor": "rgb(216, 216, 216)", @@ -1304,7 +1304,7 @@ exports[`PaidPaymentScreen should render with back button, title, help button, p }, Array [ Object { - "backgroundColor": "rgb(242, 242, 242)", + "backgroundColor": "#FFFFFF", }, undefined, ], From 2befb345ab417d41a0a33c84c522331f4bdbb64a Mon Sep 17 00:00:00 2001 From: Alice Di Rico <83651704+Ladirico@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:53:54 +0100 Subject: [PATCH 056/190] chore: [IOPID-1481], [IOPID-1482] Countdown 60 seconds (#5514) ## Short description I implemented the intermediate solution for this screen. We have maintained the as-is logic and have added a timer that notifies the user when he/she can try again to get the email sent. ## List of changes proposed in this pull request - Fix logic of email validation email send. We have changed the cases where the email is sent by the FE. The email is only sent when we are on the validation screen and the email is the same, when the email is different it is automatically sent by the BE - Add logic to show the countdown when send button is disabled - The timeout for the user to activate the re-send button was increased (from 10 seconds to 60 seconds) - Fix tests - change .env.local configuration to make it compliant with .env.production https://github.com/pagopa/io-app/assets/83651704/de83b202-7802-4cd6-acef-25bdb6a60581 ## How to test Run the application and run the validation email flow. (or onboarding/first onboarding or by profile section) --------- Co-authored-by: Fabio Bombardi <16268789+shadowsheep1@users.noreply.github.com> --- .env.local | 4 +- locales/en/index.yml | 3 +- locales/it/index.yml | 1 + .../NewRemindEmailValidationOverlay.tsx | 154 +++++++++++++----- .../NewRemindEmailValidationOverlay.test.tsx | 19 ++- ts/components/countdown/CountdownProvider.tsx | 61 +++++++ ts/screens/profile/CduEmailInsertScreen.tsx | 29 +++- 7 files changed, 213 insertions(+), 58 deletions(-) create mode 100644 ts/components/countdown/CountdownProvider.tsx diff --git a/.env.local b/.env.local index 8ccdefd9048..ef3f404aed1 100644 --- a/.env.local +++ b/.env.local @@ -83,11 +83,11 @@ NATIVE_LOGIN_ENABLED=YES # Fast login max retries FAST_LOGIN_MAX_RETRIES=3 # Fast login opt-in -FAST_LOGIN_OPTIN=NO +FAST_LOGIN_OPTIN=YES # Enable CIE login flow with emulator and dev server CIE_LOGIN_WITH_DEV_SERVER_ENABLED=NO # Enable CDU flow new screen -CDU_NEW_FLOW=NO +CDU_NEW_FLOW=YES # Relay State for SPID SPID_RELAY_STATE='appio-dev' # Wallet V3 RESTful API diff --git a/locales/en/index.yml b/locales/en/index.yml index 99c9f434807..f69dd3a36e9 100644 --- a/locales/en/index.yml +++ b/locales/en/index.yml @@ -823,7 +823,8 @@ email: title: Validate your email subtitle: Follow the instructions we sent to link: Is the email address wrong? - buttonlabelsent: Email sent! + buttonlabelsent: Email sent! + countdowntext: Request new email in buttonlabelsentagain: Send email again toast: Done! Check your mailbox. newvalidemail: diff --git a/locales/it/index.yml b/locales/it/index.yml index cedb387ab49..2c6c794e15b 100644 --- a/locales/it/index.yml +++ b/locales/it/index.yml @@ -823,6 +823,7 @@ email: title: Conferma la tua email subtitle: Segui le istruzioni che abbiamo inviato a link: Non è corretta? + countdowntext: Richiedi una nuova email tra buttonlabelsent: Email inviata! buttonlabelsentagain: Invia di nuovo l’email toast: Fatto! Controlla tua casella di posta. diff --git a/ts/components/NewRemindEmailValidationOverlay.tsx b/ts/components/NewRemindEmailValidationOverlay.tsx index 8c2f931172b..3149bb2c5ab 100644 --- a/ts/components/NewRemindEmailValidationOverlay.tsx +++ b/ts/components/NewRemindEmailValidationOverlay.tsx @@ -14,7 +14,8 @@ import { IOPictogramSizeScale, Label, Pictogram, - VSpacer + VSpacer, + Body } from "@pagopa/io-app-design-system"; import I18n from "../i18n"; @@ -40,40 +41,42 @@ import { trackEmailValidationSuccess, trackEmailValidationSuccessConfirmed } from "../screens/analytics/emailAnalytics"; +import { useOnFirstRender } from "../utils/hooks/useOnFirstRender"; +import { usePrevious } from "../utils/hooks/usePrevious"; import { IOStyles } from "./core/variables/IOStyles"; import FooterWithButtons from "./ui/FooterWithButtons"; import { IOToast } from "./Toast"; import { LightModalContextInterface } from "./ui/LightModal"; import { withLightModalContext } from "./helpers/withLightModalContext"; import BaseScreenComponent from "./screens/BaseScreenComponent"; +import { CountdownProvider, useCountdown } from "./countdown/CountdownProvider"; -const emailSentTimeout = 10000 as Millisecond; // 10 seconds +const emailSentTimeout = 60000 as Millisecond; // 60 seconds const profilePolling = 5000 as Millisecond; // 5 seconds +const countdownIntervalDuration = 1000 as Millisecond; // 1 second const EMPTY_EMAIL = ""; const VALIDATION_ILLUSTRATION_WIDTH: IOPictogramSizeScale = 80; type OwnProp = { isOnboarding?: boolean; + sendEmailAtFirstRender?: boolean; }; type Props = LightModalContextInterface & OwnProp; -const NewRemindEmailValidationOverlay = (props: Props) => { - const { isOnboarding, hideModal } = props; +const NewRemindEmailValidationOverlayComponent = (props: Props) => { + const { isOnboarding, hideModal, sendEmailAtFirstRender } = props; const dispatch = useIODispatch(); const optionEmail = useIOSelector(profileEmailSelector); const isEmailValidated = useIOSelector(isProfileEmailValidatedSelector); const emailValidation = useIOSelector(emailValidationSelector); - + const prevEmailValidation = usePrevious(emailValidation); const isFirstOnBoarding = useIOSelector(isProfileFirstOnBoardingSelector); const flow = getFlowType(!!isOnboarding, isFirstOnBoarding); - const [isValidateEmailButtonDisabled, setIsValidateEmailButtonDisabled] = - useState(false); - const timeout = useRef(); + useState(true); const polling = useRef(); - const email = pipe( optionEmail, O.getOrElse(() => EMPTY_EMAIL) @@ -100,7 +103,16 @@ const NewRemindEmailValidationOverlay = (props: Props) => { [dispatch] ); - // function to localize the title of the button. If the email is validated and if it is not, whether the confirmation email was sent or not + useOnFirstRender(() => { + // if the verification email was never sent, we send it + if (sendEmailAtFirstRender) { + sendEmailValidation(); + } + }); + + // function to localize the title of the button. + // If the email is validated and if it is not, + // whether the confirmation email was sent or not const buttonTitle = () => { if (isEmailValidated) { return I18n.t("global.buttons.continue"); @@ -145,13 +157,8 @@ const NewRemindEmailValidationOverlay = (props: Props) => { } } } else { - // send email validation only if it exists - pipe( - optionEmail, - O.map(_ => { - sendEmailValidation(); - }) - ); + // resend the validation email + sendEmailValidation(); } }; @@ -160,45 +167,98 @@ const NewRemindEmailValidationOverlay = (props: Props) => { hideModal(); }; - const renderFooter = () => ( - + type CountdownProps = { + visible: boolean; + timerElapsed?: () => void; + }; + + const Countdown = (props: CountdownProps) => { + const { visible } = props; + const { timerCount, resetTimer, startTimer, isRunning } = useCountdown(); + + if (timerCount === 0 && props.timerElapsed) { + props.timerElapsed(); + } + + if (!visible) { + if (resetTimer) { + resetTimer(); + } + + return null; + } else if (startTimer && isRunning && !isRunning()) { + startTimer(); + } + + if (visible) { + return ( + + + + + + + ); + } + return null; + }; + + const Footer = () => ( + <> + { + setIsValidateEmailButtonDisabled(false); + }} + visible={isValidateEmailButtonDisabled && !isEmailValidated} + /> + + + ); useEffect(() => { // use polling to get the profile info, to check if the email is valid or not // eslint-disable-next-line functional/immutable-data polling.current = setInterval(() => reloadProfile(), profilePolling); + // at the unmount of the page clear all timeout and interval return () => { hideModal(); - clearTimeout(timeout.current); clearInterval(polling.current); }; }, [hideModal, reloadProfile]); useEffect(() => { - // send validation email KO - if (pot.isError(emailValidation.sendEmailValidationRequest)) { - IOToast.error(I18n.t("global.actions.retry")); - // send validation email OK - } else if (pot.isSome(emailValidation.sendEmailValidationRequest)) { - IOToast.show(I18n.t("email.newvalidate.toast")); - setIsValidateEmailButtonDisabled(true); - // eslint-disable-next-line functional/immutable-data - timeout.current = setTimeout(() => { + if ( + prevEmailValidation !== undefined && + pot.isLoading(prevEmailValidation.sendEmailValidationRequest) + ) { + // send validation email KO + if (pot.isError(emailValidation.sendEmailValidationRequest)) { + IOToast.error(I18n.t("global.actions.retry")); setIsValidateEmailButtonDisabled(false); - }, emailSentTimeout); + return; + } + // send validation email OK + if (pot.isSome(emailValidation.sendEmailValidationRequest)) { + IOToast.show(I18n.t("email.newvalidate.toast")); + setIsValidateEmailButtonDisabled(true); + } } - }, [emailValidation.sendEmailValidationRequest]); + }, [emailValidation.sendEmailValidationRequest, prevEmailValidation]); useEffect(() => { if (isEmailValidated) { @@ -266,9 +326,19 @@ const NewRemindEmailValidationOverlay = (props: Props) => {
)} - {renderFooter()} +