1- import React , { useState , useEffect } from 'react' ;
1+ import React , { useState , useEffect , useCallback } from 'react' ;
22import "./Dealers.css" ;
33import "../assets/style.css" ;
44import Header from '../Header/Header' ;
55import review_icon from "../assets/reviewicon.png"
66
77const Dealers = ( ) => {
88 const [ dealersList , setDealersList ] = useState ( [ ] ) ;
9- // let [state, setState] = useState("")
109 let [ states , setStates ] = useState ( [ ] )
1110
12- // let root_url = window.location.origin
1311 let dealer_url = "/djangoapp/get_dealers" ;
14-
1512 let dealer_url_by_state = "/djangoapp/get_dealers/" ;
1613
1714 const filterDealers = async ( state ) => {
18- dealer_url_by_state = dealer_url_by_state + state ;
19- const res = await fetch ( dealer_url_by_state , {
15+ const url = dealer_url_by_state + state ;
16+ const res = await fetch ( url , {
2017 method : "GET"
2118 } ) ;
2219 const retobj = await res . json ( ) ;
@@ -26,71 +23,71 @@ const Dealers = () => {
2623 }
2724 }
2825
29- const get_dealers = async ( ) => {
26+ const get_dealers = useCallback ( async ( ) => {
3027 const res = await fetch ( dealer_url , {
3128 method : "GET"
3229 } ) ;
3330 const retobj = await res . json ( ) ;
3431 if ( retobj . status === 200 ) {
3532 let all_dealers = Array . from ( retobj . dealers )
36- let states = [ ] ;
37- all_dealers . forEach ( ( dealer ) => {
38- states . push ( dealer . state )
33+ let statesArr = [ ] ;
34+ all_dealers . forEach ( ( dealer ) => {
35+ statesArr . push ( dealer . state )
3936 } ) ;
4037
41- setStates ( Array . from ( new Set ( states ) ) )
38+ setStates ( Array . from ( new Set ( statesArr ) ) )
4239 setDealersList ( all_dealers )
4340 }
44- }
41+ } , [ ] ) ;
42+
4543 useEffect ( ( ) => {
4644 get_dealers ( ) ;
47- } , [ ] ) ;
48-
45+ } , [ get_dealers ] ) ;
4946
50- let isLoggedIn = sessionStorage . getItem ( "username" ) != null ? true : false ;
51- return (
52- < div >
53- < Header />
47+ let isLoggedIn = sessionStorage . getItem ( "username" ) != null ? true : false ;
48+ return (
49+ < div >
50+ < Header />
5451
55- < table className = 'table' >
56- < tr >
57- < th > ID</ th >
58- < th > Dealer Name</ th >
59- < th > City</ th >
60- < th > Address</ th >
61- < th > Zip</ th >
62- < th >
63- < select name = "state" id = "state" onChange = { ( e ) => filterDealers ( e . target . value ) } >
64- < option value = "" selected disabled hidden > State</ option >
65- < option value = "All" > All States</ option >
66- { states . map ( state => (
67- < option value = { state } > { state } </ option >
68- ) ) }
69- </ select >
70-
71- </ th >
72- { isLoggedIn ? (
73- < th > Review Dealer</ th >
74- ) :< > </ >
75- }
76- </ tr >
77- { dealersList . map ( dealer => (
52+ < table className = 'table' >
7853 < tr >
79- < td > { dealer [ 'id' ] } </ td >
80- < td > < a href = { '/dealer/' + dealer [ 'id' ] } > { dealer [ 'full_name' ] } </ a > </ td >
81- < td > { dealer [ 'city' ] } </ td >
82- < td > { dealer [ 'address' ] } </ td >
83- < td > { dealer [ 'zip' ] } </ td >
84- < td > { dealer [ 'state' ] } </ td >
85- { isLoggedIn ? (
86- < td > < a href = { `/postreview/${ dealer [ 'id' ] } ` } > < img src = { review_icon } className = "review_icon" alt = "Post Review" /> </ a > </ td >
54+ < th > ID</ th >
55+ < th > Dealer Name</ th >
56+ < th > City</ th >
57+ < th > Address</ th >
58+ < th > Zip</ th >
59+ < th >
60+ < select name = "state" id = "state" onChange = { ( e ) => filterDealers ( e . target . value ) } >
61+ < option value = "" selected disabled hidden > State</ option >
62+ < option value = "All" > All States</ option >
63+ { states . map ( state => (
64+ < option key = { state } value = { state } > { state } </ option >
65+ ) ) }
66+ </ select >
67+
68+ </ th >
69+ { isLoggedIn ? (
70+ < th > Review Dealer</ th >
8771 ) :< > </ >
88- }
72+ }
8973 </ tr >
90- ) ) }
91- </ table > ;
92- </ div >
93- )
74+ { dealersList . map ( dealer => (
75+ < tr key = { dealer . id } >
76+ < td > { dealer [ 'id' ] } </ td >
77+ < td > < a href = { '/dealer/' + dealer [ 'id' ] } > { dealer [ 'full_name' ] } </ a > </ td >
78+ < td > { dealer [ 'city' ] } </ td >
79+ < td > { dealer [ 'address' ] } </ td >
80+ < td > { dealer [ 'zip' ] } </ td >
81+ < td > { dealer [ 'state' ] } </ td >
82+ { isLoggedIn ? (
83+ < td > < a href = { `/postreview/${ dealer [ 'id' ] } ` } > < img src = { review_icon } className = "review_icon" alt = "Post Review" /> </ a > </ td >
84+ ) :< > </ >
85+ }
86+ </ tr >
87+ ) ) }
88+ </ table >
89+ </ div >
90+ )
9491}
9592
9693export default Dealers
0 commit comments