From 6a0aa9cd9debb116210812d0f06aeb58a68e9d7d Mon Sep 17 00:00:00 2001 From: G Date: Mon, 1 Jul 2024 16:50:03 +0000 Subject: [PATCH] With this update i can persist the switch values for the different operators using the modal and the useTransactionHistory Hook. --- src/hooks/useTransactionsHistory.tsx | 23 +++++++++++++++++++++-- src/screens/TransactionHistoryScreen.tsx | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 89 insertions(+), 13 deletions(-) diff --git a/src/hooks/useTransactionsHistory.tsx b/src/hooks/useTransactionsHistory.tsx index 6fec05f..3c537fe 100644 --- a/src/hooks/useTransactionsHistory.tsx +++ b/src/hooks/useTransactionsHistory.tsx @@ -1,15 +1,32 @@ import { type Transaction, getTransactionsHistory } from "@/utils/requests/transactions"; +import type { PaymentCode } from "@/utils/requests/types"; import { LOG } from "@logger"; import { useQuery } from "@tanstack/react-query"; import { useCallback, useMemo, useState } from "react"; const log = LOG.extend("useTransactionsHistory"); -const useTransactionsHistory = () => { - const [referenceFilter, setReferenceFilter] = useState(""); +// biome-ignore lint/style/useNamingConvention: +export type OperatorsFilter = { [key in PaymentCode]: boolean }; +const useTransactionsHistory = () => { log.verbose("useTransactionsHistory"); + const [referenceFilter, setReferenceFilter] = useState(""); + // biome-ignore lint/style/useNamingConvention: + const [operatorsFilter, setOperatorsFilter] = useState({ + // biome-ignore lint/style/useNamingConvention: + OM: true, + // biome-ignore lint/style/useNamingConvention: + MTN: true, + // biome-ignore lint/style/useNamingConvention: + FLOOZ: true, + // biome-ignore lint/style/useNamingConvention: + WAVE: true, + // biome-ignore lint/style/useNamingConvention: + CB: true, + }); + const { data, isLoading, error, refetch } = useQuery({ queryKey: ["transactionsHistory"], queryFn: getTransactionsHistory, @@ -36,6 +53,8 @@ const useTransactionsHistory = () => { error, refetch, setReferenceFilter, + operatorsFilter, + setOperatorsFilter, }; }; diff --git a/src/screens/TransactionHistoryScreen.tsx b/src/screens/TransactionHistoryScreen.tsx index 8056409..d0a6ef1 100644 --- a/src/screens/TransactionHistoryScreen.tsx +++ b/src/screens/TransactionHistoryScreen.tsx @@ -1,12 +1,13 @@ +import Button from "@components/Button"; import Input from "@components/Input"; import TransactionInformationsItem from "@components/TransactionInformationsItem"; import BackgroundWithBeasyIconAndWhiteContentArea from "@components/backgrounds/BackgroundWithBeasyIconAndWhiteContentArea"; import Box from "@components/bases/Box"; import Text from "@components/bases/Text"; -import useTransactionsHistory from "@hooks/useTransactionsHistory"; +import useTransactionsHistory, { type OperatorsFilter } from "@hooks/useTransactionsHistory"; import { LOG } from "@logger"; import theme from "@themes/Theme"; -import { useState } from "react"; +import { useCallback, useState } from "react"; import { RefreshControl, ScrollView, Switch } from "react-native"; import Icon from "react-native-vector-icons/Ionicons"; @@ -23,12 +24,20 @@ const TransactionHistoryScreen = () => { error, refetch, setReferenceFilter, + operatorsFilter, + setOperatorsFilter, } = useTransactionsHistory(); return ( <> - {showFiltersModal && } + {showFiltersModal && ( + + )} {/* */} @@ -82,8 +91,42 @@ export default TransactionHistoryScreen; interface FiltersModalProps { setShowFiltersModal: React.Dispatch>; + // biome-ignore lint/style/useNamingConvention: + operatorsFilter: OperatorsFilter; + // biome-ignore lint/style/useNamingConvention: + setOperatorsFilter: React.Dispatch>; } -const FiltersModal: React.FC = ({ setShowFiltersModal }) => { +const FiltersModal: React.FC = ({ + setShowFiltersModal, + operatorsFilter, + setOperatorsFilter, +}) => { + const [filterOm, setFilterOm] = useState(operatorsFilter.OM); + const [filterMtn, setFilterMtn] = useState(operatorsFilter.MTN); + const [filterFlooz, setFilterFlooz] = useState(operatorsFilter.FLOOZ); + const [filterWave, setFilterWave] = useState(operatorsFilter.WAVE); + const [filterCb, setFilterCb] = useState(operatorsFilter.CB); + + const saveOperatorsFilters = useCallback(() => { + setOperatorsFilter({ + // biome-ignore lint/style/useNamingConvention: + OM: filterOm, + // biome-ignore lint/style/useNamingConvention: + MTN: filterMtn, + // biome-ignore lint/style/useNamingConvention: + FLOOZ: filterFlooz, + // biome-ignore lint/style/useNamingConvention: + WAVE: filterWave, + // biome-ignore lint/style/useNamingConvention: + CB: filterCb, + }); + }, [filterOm, filterMtn, filterFlooz, filterWave, filterCb, setOperatorsFilter]); + + const saveFilters = useCallback(() => { + saveOperatorsFilters(); + setShowFiltersModal(false); + }, [saveOperatorsFilters, setShowFiltersModal]); + return ( <> {/* Overlay */} @@ -106,6 +149,7 @@ const FiltersModal: React.FC = ({ setShowFiltersModal }) => { height={"100%"} borderRadius={10} p={"m"} + flexDirection={"column"} > = ({ setShowFiltersModal }) => { Orange Money = ({ setShowFiltersModal }) => { MTN Money = ({ setShowFiltersModal }) => { borderBottomWidth={1} py={"s"} > - Moov Money + Flooz Money = ({ setShowFiltersModal }) => { Wave = ({ setShowFiltersModal }) => { borderBottomColor={"white"} py={"s"} > - Visa + Carte Bancaire + +