@@ -22,16 +22,17 @@ function ActualVsPlannedCost() {
2222 const projects = useSelector ( state => state . bmProjects ) || [ ] ;
2323 const darkMode = useSelector ( state => state . theme . darkMode ) ;
2424
25+ // Persisted filters
2526 const [ selectedProject , setSelectedProject ] = useState (
2627 ( ) => localStorage . getItem ( 'bm_avsp_project' ) || '' ,
2728 ) ;
2829 const [ selectedCategory , setSelectedCategory ] = useState (
2930 ( ) => localStorage . getItem ( 'bm_avsp_category' ) || 'Overall' ,
3031 ) ;
3132
33+ // Component state
3234 const [ breakdown , setBreakdown ] = useState ( [ ] ) ;
3335 const [ totals , setTotals ] = useState ( { actual : 0 , planned : 0 } ) ;
34-
3536 const [ loading , setLoading ] = useState ( false ) ;
3637 const [ isFiltering , setIsFiltering ] = useState ( false ) ;
3738
@@ -40,6 +41,7 @@ function ActualVsPlannedCost() {
4041 [ projects , selectedProject ] ,
4142 ) ;
4243
44+ // Sync filters to local storage
4345 useEffect ( ( ) => {
4446 if ( selectedProject ) {
4547 localStorage . setItem ( 'bm_avsp_project' , selectedProject ) ;
@@ -51,12 +53,14 @@ function ActualVsPlannedCost() {
5153 dispatch ( fetchBMProjects ( ) ) ;
5254 } , [ dispatch ] ) ;
5355
56+ // Default to first project if none selected
5457 useEffect ( ( ) => {
5558 if ( ! selectedProject && projects . length > 0 ) {
5659 setSelectedProject ( projects [ 0 ] . _id ) ;
5760 }
5861 } , [ projects , selectedProject ] ) ;
5962
63+ // Filter transition effect
6064 useEffect ( ( ) => {
6165 setIsFiltering ( true ) ;
6266 const timeout = setTimeout ( ( ) => {
@@ -65,6 +69,7 @@ function ActualVsPlannedCost() {
6569 return ( ) => clearTimeout ( timeout ) ;
6670 } , [ selectedProject , selectedCategory ] ) ;
6771
72+ // Fetch project expenses
6873 useEffect ( ( ) => {
6974 if ( selectedProject ) {
7075 setLoading ( true ) ;
@@ -91,6 +96,7 @@ function ActualVsPlannedCost() {
9196 }
9297 } , [ selectedProject ] ) ;
9398
99+ // Derived chart data
94100 const categories = [ 'Overall' , ...new Set ( breakdown . map ( d => d . category ) ) ] ;
95101 const chartData =
96102 selectedCategory === 'Overall'
0 commit comments