11import React , { useState , useEffect } from "react" ;
22import { View , FlatList , TouchableOpacity , Text } from "react-native" ;
3+ import { useRoute } from "@react-navigation/native" ;
34import Header from "../../components/historico/Header" ;
45import ExpenseSection from "../../components/historico/ExpenseSection" ;
56import { styles } from "../../styles/historico.styles" ;
@@ -9,87 +10,99 @@ const despesas = [
910 categoria : "Transporte" ,
1011 icone : "🚖" ,
1112 itens : [
12- { data : "27/05/2024" , projeto : "Projeto 2 " , valor : "R$ 14,80" } ,
13- { data : "28/05/2024" , projeto : "Projeto 1 " , valor : "R$ 22,30" } ,
14- { data : "29/05/2024" , projeto : "Projeto 2 " , valor : "R$ 60,90" } ,
15- { data : "30/05/2024" , projeto : "Projeto 1 " , valor : "R$ 25,40" } ,
16- { data : "01/06/2024" , projeto : "Projeto 1 " , valor : "R$ 48,00" } ,
13+ { data : "27/05/2024" , projeto : "Projeto Alpha " , valor : "R$ 14,80" } ,
14+ { data : "28/05/2024" , projeto : "Projeto Beta " , valor : "R$ 22,30" } ,
15+ { data : "29/05/2024" , projeto : "Projeto Gama " , valor : "R$ 60,90" } ,
16+ { data : "30/05/2024" , projeto : "Projeto Delta " , valor : "R$ 25,40" } ,
17+ { data : "01/06/2024" , projeto : "Projeto Epsilon " , valor : "R$ 48,00" } ,
1718 ] ,
1819 } ,
1920 {
2021 categoria : "Hospedagem" ,
2122 icone : "🏨" ,
2223 itens : [
23- { data : "27/05/2024" , projeto : "Projeto 3 " , valor : "R$ 14,80" } ,
24- { data : "28/05/2024" , projeto : "Projeto 3 " , valor : "R$ 22,30" } ,
25- { data : "29/05/2024" , projeto : "Projeto 3 " , valor : "R$ 60,90" } ,
26- { data : "30/05/2024" , projeto : "Projeto 2 " , valor : "R$ 120,00" } ,
27- { data : "30/05/2024" , projeto : "Projeto 2 " , valor : "R$ 7,48" } ,
24+ { data : "27/05/2024" , projeto : "Projeto Zeta " , valor : "R$ 14,80" } ,
25+ { data : "28/05/2024" , projeto : "Projeto Theta " , valor : "R$ 22,30" } ,
26+ { data : "29/05/2024" , projeto : "Projeto Iota " , valor : "R$ 60,90" } ,
27+ { data : "30/05/2024" , projeto : "Projeto Alpha " , valor : "R$ 120,00" } ,
28+ { data : "30/05/2024" , projeto : "Projeto Epsilon " , valor : "R$ 7,48" } ,
2829
2930 ] ,
3031 } ,
3132 {
3233 categoria : "Alimentação" ,
3334 icone : "🍔" ,
3435 itens : [
35- { data : "12/06/2024" , projeto : "Projeto 1 " , valor : "R$ 856,13" } ,
36- { data : "14/06/2024" , projeto : "Projeto 2 " , valor : "R$ 45,90" } ,
37- { data : "15/06/2024" , projeto : "Projeto 3 " , valor : "R$ 210,75" } ,
36+ { data : "12/06/2024" , projeto : "Projeto Theta " , valor : "R$ 856,13" } ,
37+ { data : "14/06/2024" , projeto : "Projeto Alpha " , valor : "R$ 45,90" } ,
38+ { data : "15/06/2024" , projeto : "Projeto Beta " , valor : "R$ 210,75" } ,
3839 ] ,
3940 } ,
4041 {
4142 categoria : "Entretenimento" ,
4243 icone : "🎬" ,
4344 itens : [
44- { data : "05/06/2024" , projeto : "Projeto 2 " , valor : "R$ 50,00" } ,
45- { data : "10/06/2024" , projeto : "Projeto 2 " , valor : "R$ 120,00" } ,
45+ { data : "05/06/2024" , projeto : "Projeto Gama " , valor : "R$ 50,00" } ,
46+ { data : "10/06/2024" , projeto : "Projeto Alpha " , valor : "R$ 120,00" } ,
4647 ] ,
4748 } ,
4849 {
4950 categoria : "Educação" ,
5051 icone : "📚" ,
5152 itens : [
52- { data : "02/06/2024" , projeto : "Projeto 3 " , valor : "R$ 299,99" } ,
53- { data : "03/06/2024" , projeto : "Projeto 3 " , valor : "R$ 89,90" } ,
53+ { data : "02/06/2024" , projeto : "Projeto Zeta " , valor : "R$ 299,99" } ,
54+ { data : "03/06/2024" , projeto : "Projeto Beta " , valor : "R$ 89,90" } ,
5455 ] ,
5556 } ,
5657 {
5758 categoria : "Saúde" ,
5859 icone : "⚕️" ,
5960 itens : [
60- { data : "08/06/2024" , projeto : "Projeto 1 " , valor : "R$ 250,00" } ,
61- { data : "09/06/2024" , projeto : "Projeto 1 " , valor : "R$ 80,45" } ,
61+ { data : "08/06/2024" , projeto : "Projeto Delta " , valor : "R$ 250,00" } ,
62+ { data : "09/06/2024" , projeto : "Projeto Iota " , valor : "R$ 80,45" } ,
6263 ] ,
6364 } ,
6465] ;
6566
6667
67- const calcularTotal = ( ) => {
68- return despesas
69- . flatMap ( ( categoria ) => categoria . itens )
70- . reduce ( ( total , item ) => total + parseFloat ( item . valor . replace ( "R$ " , "" ) . replace ( "," , "." ) ) , 0 )
71- . toFixed ( 2 )
72- . replace ( "." , "," ) ;
73- } ;
68+ const Historico : React . FC = ( ) => {
69+ interface RouteParams {
70+ projectId ?: string ;
71+ }
72+
73+ const route = useRoute ( ) ;
74+ const { projectId } = route . params as RouteParams || { } ;
7475
75- const Historico : React . FC = ( ) => {
76- const totalDespesas = calcularTotal ( ) ;
76+ const despesasFiltradas = projectId
77+ ? despesas . map ( ( categoria ) => ( {
78+ ...categoria ,
79+ itens : categoria . itens . filter ( ( item ) => item . projeto === projectId ) ,
80+ } ) ) . filter ( ( categoria ) => categoria . itens . length > 0 )
81+ : despesas ;
7782
83+ const calcularTotal = ( ) => {
84+ return despesasFiltradas
85+ . flatMap ( ( categoria ) => categoria . itens )
86+ . reduce ( ( total , item ) => total + parseFloat ( item . valor . replace ( "R$ " , "" ) . replace ( "," , "." ) ) , 0 )
87+ . toFixed ( 2 )
88+ . replace ( "." , "," ) ;
89+ } ;
90+
91+ const totalDespesas = calcularTotal ( ) ;
7892 const [ dataAtual , setDataAtual ] = useState ( "" ) ;
7993
8094 useEffect ( ( ) => {
8195 const hoje = new Date ( ) ;
8296 const dia = hoje . getDate ( ) . toString ( ) . padStart ( 2 , "0" ) ;
83- const mes = ( hoje . getMonth ( ) + 1 ) . toString ( ) . padStart ( 2 , "0" ) ;
97+ const mes = ( hoje . getMonth ( ) + 1 ) . toString ( ) . padStart ( 2 , "0" ) ;
8498 setDataAtual ( `${ dia } /${ mes } ` ) ;
8599 } , [ ] ) ;
86-
87100
88101 return (
89102 < View style = { styles . container } >
90103 < Header />
91104 < FlatList
92- data = { despesas }
105+ data = { despesasFiltradas }
93106 keyExtractor = { ( item ) => item . categoria }
94107 renderItem = { ( { item } ) => < ExpenseSection { ...item } /> }
95108 contentContainerStyle = { styles . listContainer }
@@ -108,4 +121,4 @@ const Historico: React.FC = () => {
108121 ) ;
109122} ;
110123
111- export default Historico ;
124+ export default Historico ;
0 commit comments