Commit 6a0aa9cd by G

With this update i can persist the switch values for the different operators…

With this update i can persist the switch values for the different operators using the modal and the useTransactionHistory Hook.
parent 21ddacf1
import { type Transaction, getTransactionsHistory } from "@/utils/requests/transactions"; import { type Transaction, getTransactionsHistory } from "@/utils/requests/transactions";
import type { PaymentCode } from "@/utils/requests/types";
import { LOG } from "@logger"; import { LOG } from "@logger";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { useCallback, useMemo, useState } from "react"; import { useCallback, useMemo, useState } from "react";
const log = LOG.extend("useTransactionsHistory"); const log = LOG.extend("useTransactionsHistory");
const useTransactionsHistory = () => { // biome-ignore lint/style/useNamingConvention: <explanation>
const [referenceFilter, setReferenceFilter] = useState<string>(""); export type OperatorsFilter = { [key in PaymentCode]: boolean };
const useTransactionsHistory = () => {
log.verbose("useTransactionsHistory"); log.verbose("useTransactionsHistory");
const [referenceFilter, setReferenceFilter] = useState<string>("");
// biome-ignore lint/style/useNamingConvention: <Types values are in uppercase>
const [operatorsFilter, setOperatorsFilter] = useState<OperatorsFilter>({
// biome-ignore lint/style/useNamingConvention: <Types values are in uppercase>
OM: true,
// biome-ignore lint/style/useNamingConvention: <Types values are in uppercase>
MTN: true,
// biome-ignore lint/style/useNamingConvention: <Types values are in uppercase>
FLOOZ: true,
// biome-ignore lint/style/useNamingConvention: <Types values are in uppercase>
WAVE: true,
// biome-ignore lint/style/useNamingConvention: <Types values are in uppercase>
CB: true,
});
const { data, isLoading, error, refetch } = useQuery({ const { data, isLoading, error, refetch } = useQuery({
queryKey: ["transactionsHistory"], queryKey: ["transactionsHistory"],
queryFn: getTransactionsHistory, queryFn: getTransactionsHistory,
...@@ -36,6 +53,8 @@ const useTransactionsHistory = () => { ...@@ -36,6 +53,8 @@ const useTransactionsHistory = () => {
error, error,
refetch, refetch,
setReferenceFilter, setReferenceFilter,
operatorsFilter,
setOperatorsFilter,
}; };
}; };
......
import Button from "@components/Button";
import Input from "@components/Input"; import Input from "@components/Input";
import TransactionInformationsItem from "@components/TransactionInformationsItem"; import TransactionInformationsItem from "@components/TransactionInformationsItem";
import BackgroundWithBeasyIconAndWhiteContentArea from "@components/backgrounds/BackgroundWithBeasyIconAndWhiteContentArea"; import BackgroundWithBeasyIconAndWhiteContentArea from "@components/backgrounds/BackgroundWithBeasyIconAndWhiteContentArea";
import Box from "@components/bases/Box"; import Box from "@components/bases/Box";
import Text from "@components/bases/Text"; import Text from "@components/bases/Text";
import useTransactionsHistory from "@hooks/useTransactionsHistory"; import useTransactionsHistory, { type OperatorsFilter } from "@hooks/useTransactionsHistory";
import { LOG } from "@logger"; import { LOG } from "@logger";
import theme from "@themes/Theme"; import theme from "@themes/Theme";
import { useState } from "react"; import { useCallback, useState } from "react";
import { RefreshControl, ScrollView, Switch } from "react-native"; import { RefreshControl, ScrollView, Switch } from "react-native";
import Icon from "react-native-vector-icons/Ionicons"; import Icon from "react-native-vector-icons/Ionicons";
...@@ -23,12 +24,20 @@ const TransactionHistoryScreen = () => { ...@@ -23,12 +24,20 @@ const TransactionHistoryScreen = () => {
error, error,
refetch, refetch,
setReferenceFilter, setReferenceFilter,
operatorsFilter,
setOperatorsFilter,
} = useTransactionsHistory(); } = useTransactionsHistory();
return ( return (
<BackgroundWithBeasyIconAndWhiteContentArea> <BackgroundWithBeasyIconAndWhiteContentArea>
<> <>
{showFiltersModal && <FiltersModal setShowFiltersModal={setShowFiltersModal} />} {showFiltersModal && (
<FiltersModal
setShowFiltersModal={setShowFiltersModal}
setOperatorsFilter={setOperatorsFilter}
operatorsFilter={operatorsFilter}
/>
)}
{/* <FiltersModal setShowFiltersModal={setShowFiltersModal} /> */} {/* <FiltersModal setShowFiltersModal={setShowFiltersModal} /> */}
<Box px={"m"} mt={"m"} flexDirection={"row"} gap={"s"} alignItems={"center"}> <Box px={"m"} mt={"m"} flexDirection={"row"} gap={"s"} alignItems={"center"}>
<Box flex={1}> <Box flex={1}>
...@@ -82,8 +91,42 @@ export default TransactionHistoryScreen; ...@@ -82,8 +91,42 @@ export default TransactionHistoryScreen;
interface FiltersModalProps { interface FiltersModalProps {
setShowFiltersModal: React.Dispatch<React.SetStateAction<boolean>>; setShowFiltersModal: React.Dispatch<React.SetStateAction<boolean>>;
// biome-ignore lint/style/useNamingConvention: <explanation>
operatorsFilter: OperatorsFilter;
// biome-ignore lint/style/useNamingConvention: <explanation>
setOperatorsFilter: React.Dispatch<React.SetStateAction<OperatorsFilter>>;
} }
const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => { const FiltersModal: React.FC<FiltersModalProps> = ({
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: <PaymentCode Type requirement>
OM: filterOm,
// biome-ignore lint/style/useNamingConvention: <PaymentCode Type requirement>
MTN: filterMtn,
// biome-ignore lint/style/useNamingConvention: <PaymentCode Type requirement>
FLOOZ: filterFlooz,
// biome-ignore lint/style/useNamingConvention: <PaymentCode Type requirement>
WAVE: filterWave,
// biome-ignore lint/style/useNamingConvention: <PaymentCode Type requirement>
CB: filterCb,
});
}, [filterOm, filterMtn, filterFlooz, filterWave, filterCb, setOperatorsFilter]);
const saveFilters = useCallback(() => {
saveOperatorsFilters();
setShowFiltersModal(false);
}, [saveOperatorsFilters, setShowFiltersModal]);
return ( return (
<> <>
{/* Overlay */} {/* Overlay */}
...@@ -106,6 +149,7 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => { ...@@ -106,6 +149,7 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => {
height={"100%"} height={"100%"}
borderRadius={10} borderRadius={10}
p={"m"} p={"m"}
flexDirection={"column"}
> >
<Box <Box
justifyContent={"space-between"} justifyContent={"space-between"}
...@@ -145,7 +189,8 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => { ...@@ -145,7 +189,8 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => {
<Text fontWeight={"bold"}>Orange Money</Text> <Text fontWeight={"bold"}>Orange Money</Text>
<Switch <Switch
trackColor={{ false: "#767577", true: theme.colors.secondary }} trackColor={{ false: "#767577", true: theme.colors.secondary }}
value={true} value={filterOm}
onValueChange={setFilterOm}
/> />
</Box> </Box>
<Box <Box
...@@ -159,7 +204,8 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => { ...@@ -159,7 +204,8 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => {
<Text fontWeight={"bold"}>MTN Money</Text> <Text fontWeight={"bold"}>MTN Money</Text>
<Switch <Switch
trackColor={{ false: "#767577", true: theme.colors.secondary }} trackColor={{ false: "#767577", true: theme.colors.secondary }}
value={true} value={filterMtn}
onValueChange={setFilterMtn}
/> />
</Box> </Box>
<Box <Box
...@@ -170,10 +216,11 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => { ...@@ -170,10 +216,11 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => {
borderBottomWidth={1} borderBottomWidth={1}
py={"s"} py={"s"}
> >
<Text fontWeight={"bold"}>Moov Money</Text> <Text fontWeight={"bold"}>Flooz Money</Text>
<Switch <Switch
trackColor={{ false: "#767577", true: theme.colors.secondary }} trackColor={{ false: "#767577", true: theme.colors.secondary }}
value={true} value={filterFlooz}
onValueChange={setFilterFlooz}
/> />
</Box> </Box>
<Box <Box
...@@ -187,7 +234,8 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => { ...@@ -187,7 +234,8 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => {
<Text fontWeight={"bold"}>Wave</Text> <Text fontWeight={"bold"}>Wave</Text>
<Switch <Switch
trackColor={{ false: "#767577", true: theme.colors.secondary }} trackColor={{ false: "#767577", true: theme.colors.secondary }}
value={true} value={filterWave}
onValueChange={setFilterWave}
/> />
</Box> </Box>
<Box <Box
...@@ -197,13 +245,22 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => { ...@@ -197,13 +245,22 @@ const FiltersModal: React.FC<FiltersModalProps> = ({ setShowFiltersModal }) => {
borderBottomColor={"white"} borderBottomColor={"white"}
py={"s"} py={"s"}
> >
<Text fontWeight={"bold"}>Visa</Text> <Text fontWeight={"bold"}>Carte Bancaire</Text>
<Switch <Switch
trackColor={{ false: "#767577", true: theme.colors.secondary }} trackColor={{ false: "#767577", true: theme.colors.secondary }}
value={true} value={filterCb}
onValueChange={setFilterCb}
/> />
</Box> </Box>
</Box> </Box>
<Box style={{ marginTop: "auto" }}>
<Button
variant={"full"}
label={"Valider"}
textVariants={"white"}
onPress={saveFilters}
/>
</Box>
</Box> </Box>
</Box> </Box>
</> </>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment