diff --git a/locales/en/index.yml b/locales/en/index.yml
index 7ef54a3eb76..5a13e697ac4 100644
--- a/locales/en/index.yml
+++ b/locales/en/index.yml
@@ -3215,7 +3215,7 @@ features:
filters:
tabs:
all: Tutte
- payer: Pagate da me
+ payer: Paid in app
debtor: Intestate a me
list:
empty:
diff --git a/locales/it/index.yml b/locales/it/index.yml
index 9a0a69c1f4c..1d60d0fd3cf 100644
--- a/locales/it/index.yml
+++ b/locales/it/index.yml
@@ -3215,7 +3215,7 @@ features:
filters:
tabs:
all: Tutte
- payer: Pagate da me
+ payer: Pagate in app
debtor: Intestate a me
list:
empty:
diff --git a/ts/features/payments/bizEventsTransaction/components/PaymentBizEventsSectionListHeader.tsx b/ts/features/payments/bizEventsTransaction/components/PaymentBizEventsSectionListHeader.tsx
new file mode 100644
index 00000000000..baa799ab7c1
--- /dev/null
+++ b/ts/features/payments/bizEventsTransaction/components/PaymentBizEventsSectionListHeader.tsx
@@ -0,0 +1,36 @@
+import * as React from "react";
+import { H2, VSpacer } from "@pagopa/io-app-design-system";
+import { LayoutChangeEvent, View } from "react-native";
+import I18n from "../../../../i18n";
+import { PaymentBizEventsCategoryFilter } from "../types";
+import { PaymentsBizEventsFilterTabs } from "./PaymentsBizEventsFilterTabs";
+
+type PaymentBizEventsSectionListHeaderProps = {
+ onLayout: (event: LayoutChangeEvent) => void;
+ selectedCategory: PaymentBizEventsCategoryFilter;
+ onCategorySelected: (category: PaymentBizEventsCategoryFilter) => void;
+};
+
+export const PaymentBizEventsSectionListHeader = React.memo(
+ ({
+ onLayout,
+ selectedCategory,
+ onCategorySelected
+ }: PaymentBizEventsSectionListHeaderProps) => (
+
+
+ {I18n.t("features.payments.transactions.title")}
+
+
+
+
+ ),
+ (prevProps, nextProps) =>
+ prevProps.selectedCategory === nextProps.selectedCategory
+);
diff --git a/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsFilterTabs.tsx b/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsFilterTabs.tsx
index b8f9d2da1e5..0eedbaabd49 100644
--- a/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsFilterTabs.tsx
+++ b/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsFilterTabs.tsx
@@ -26,7 +26,9 @@ const PaymentsBizEventsFilterTabs = ({
const handleFilterSelected = (index: number) => {
const categoryByIndex = paymentsBizEventsCategoryFilters[index];
- onCategorySelected?.(categoryByIndex);
+ if (categoryByIndex !== selectedCategory) {
+ onCategorySelected?.(categoryByIndex);
+ }
};
return (
diff --git a/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsTransactionInfoSection.tsx b/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsTransactionInfoSection.tsx
index a6c805cb820..353a08214fc 100644
--- a/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsTransactionInfoSection.tsx
+++ b/ts/features/payments/bizEventsTransaction/components/PaymentsBizEventsTransactionInfoSection.tsx
@@ -22,6 +22,7 @@ import { WalletInfo } from "../../../../../definitions/pagopa/biz-events/WalletI
import { getPayerInfoLabel } from "../utils";
import { NoticeDetailResponse } from "../../../../../definitions/pagopa/biz-events/NoticeDetailResponse";
import { OriginEnum } from "../../../../../definitions/pagopa/biz-events/InfoNotice";
+import { capitalizeTextName } from "../../../../utils/strings";
type PaymentsBizEventsTransactionInfoSectionProps = {
transaction?: NoticeDetailResponse;
@@ -99,7 +100,9 @@ const PaymentsBizEventsTransactionInfoSection = ({
label={I18n.t("transaction.details.info.headedTo")}
value={
transactionInfo.walletInfo?.maskedEmail ??
- transactionInfo.walletInfo?.accountHolder
+ capitalizeTextName(
+ transactionInfo.walletInfo?.accountHolder ?? ""
+ )
}
/>
diff --git a/ts/features/payments/bizEventsTransaction/screens/PaymentsTransactionBizEventsListScreen.tsx b/ts/features/payments/bizEventsTransaction/screens/PaymentsTransactionBizEventsListScreen.tsx
index 7eb39287251..ab1dbec3b1b 100644
--- a/ts/features/payments/bizEventsTransaction/screens/PaymentsTransactionBizEventsListScreen.tsx
+++ b/ts/features/payments/bizEventsTransaction/screens/PaymentsTransactionBizEventsListScreen.tsx
@@ -1,7 +1,6 @@
import {
ButtonLink,
Divider,
- H2,
IOStyles,
ListItemHeader,
VSpacer
@@ -35,11 +34,11 @@ import { PaymentsTransactionBizEventsRoutes } from "../navigation/routes";
import { PaymentsTransactionRoutes } from "../../transaction/navigation/routes";
import { NoticeListItem } from "../../../../../definitions/pagopa/biz-events/NoticeListItem";
import * as analytics from "../analytics";
-import { PaymentsBizEventsFilterTabs } from "../components/PaymentsBizEventsFilterTabs";
import { PaymentBizEventsCategoryFilter } from "../types";
import { OperationResultScreenContent } from "../../../../components/screens/OperationResultScreenContent";
import { PaymentsBizEventsFadeInOutAnimationView } from "../components/PaymentsBizEventsFadeInOutAnimationView";
import { PaymentsBizEventsTransactionLoadingList } from "../components/PaymentsBizEventsTransactionLoadingList";
+import { PaymentBizEventsSectionListHeader } from "../components/PaymentBizEventsSectionListHeader";
export type PaymentsTransactionBizEventsListScreenProps = RouteProp<
PaymentsTransactionBizEventsParamsList,
@@ -139,16 +138,19 @@ const PaymentsTransactionBizEventsListScreen = () => {
);
};
- const handleCategorySelected = (category: PaymentBizEventsCategoryFilter) => {
- setNoticeCategory(category);
- dispatch(
- getPaymentsBizEventsTransactionsAction.request({
- firstLoad: true,
- noticeCategory: category,
- onSuccess: handleOnSuccess
- })
- );
- };
+ const handleCategorySelected = React.useCallback(
+ (category: PaymentBizEventsCategoryFilter) => {
+ setNoticeCategory(category);
+ dispatch(
+ getPaymentsBizEventsTransactionsAction.request({
+ firstLoad: true,
+ noticeCategory: category,
+ onSuccess: handleOnSuccess
+ })
+ );
+ },
+ [setNoticeCategory, dispatch]
+ );
useOnFirstRender(
React.useCallback(() => {
@@ -177,22 +179,6 @@ const PaymentsTransactionBizEventsListScreen = () => {
}
}, [transactionsPot]);
- const SectionListHeaderTitle = (
-
-
- {I18n.t("features.payments.transactions.title")}
-
-
-
-
- );
-
const ShowLegacyTransactionsButton = () => (
@@ -240,7 +226,13 @@ const PaymentsTransactionBizEventsListScreen = () => {
}}
onEndReached={fetchNextPage}
onEndReachedThreshold={0.25}
- ListHeaderComponent={SectionListHeaderTitle}
+ ListHeaderComponent={
+
+ }
onScroll={scrollHandler}
stickySectionHeadersEnabled={false}
sections={
diff --git a/ts/features/payments/bizEventsTransaction/utils/__tests__/index.test.ts b/ts/features/payments/bizEventsTransaction/utils/__tests__/index.test.ts
index 5147a37b83f..4e41ff7be8b 100644
--- a/ts/features/payments/bizEventsTransaction/utils/__tests__/index.test.ts
+++ b/ts/features/payments/bizEventsTransaction/utils/__tests__/index.test.ts
@@ -89,6 +89,18 @@ describe("getPayerInfoLabel", () => {
const result = getPayerInfoLabel(payer);
expect(result).toBe("John Doe\n(123456789)");
});
+
+ it("should return only the name if taxCode is empty string", () => {
+ const payer = { name: "John Doe", taxCode: "" };
+ const result = getPayerInfoLabel(payer);
+ expect(result).toBe("John Doe");
+ });
+
+ it("should return capitalize string", () => {
+ const payer = { name: "john doe", taxCode: "123456789" };
+ const result = getPayerInfoLabel(payer);
+ expect(result).toBe("John Doe\n(123456789)");
+ });
});
describe("calculateTotalAmount", () => {
diff --git a/ts/features/payments/bizEventsTransaction/utils/index.ts b/ts/features/payments/bizEventsTransaction/utils/index.ts
index 04a4995190b..533cc4c1888 100644
--- a/ts/features/payments/bizEventsTransaction/utils/index.ts
+++ b/ts/features/payments/bizEventsTransaction/utils/index.ts
@@ -1,6 +1,7 @@
import { SectionListData } from "react-native";
import { NoticeListItem } from "../../../../../definitions/pagopa/biz-events/NoticeListItem";
import { InfoNotice } from "../../../../../definitions/pagopa/biz-events/InfoNotice";
+import { capitalizeTextName } from "../../../../utils/strings";
export const RECEIPT_DOCUMENT_TYPE_PREFIX = "data:application/pdf;base64,";
@@ -64,7 +65,7 @@ export const getPayerInfoLabel = (payer: InfoNotice["payer"]): string => {
return "";
}
- const name = payer.name ? payer.name.trim() : "";
+ const name = payer.name ? capitalizeTextName(payer.name).trim() : "";
const taxCode = payer.taxCode ? payer.taxCode.trim() : "";
const payerInfo = name ? (taxCode ? `${name}\n(${taxCode})` : name) : taxCode;