REACT Component for Car Dealerships Page Not Visible
I am working through IBM Coursera's Full Stack Developer course and am stuck on the Car Dealership application Capstone Project. Specifically, I am struggling to make the car dealerships visible on the dealers page. A semicolon appears on the page. This makes it seem as though the Dealers.jsx React component is not correctly rendering, but that was provided by IBM so I would not think that contains any errors.
Current output of Dealerships page
Dealers.jsx React component (provided by IBM)
import React, { useState, useEffect } from 'react';
import "./Dealers.css";
import "../assets/style.css";
import Header from '../Header/Header';
import review_icon from "../assets/reviewicon.png"
const Dealers = () => {
const [dealersList, setDealersList] = useState([]);
// let [state, setState] = useState("")
let [states, setStates] = useState([])
// let root_url = window.location.origin
let dealer_url ="/djangoapp/get_dealers";
let dealer_url_by_state = "/djangoapp/get_dealers/";
const filterDealers = async (state) => {
dealer_url_by_state = dealer_url_by_state+state;
const res = await fetch(dealer_url_by_state, {
method: "GET"
});
const retobj = await res.json();
if(retobj.status === 200) {
let state_dealers = Array.from(retobj.dealers)
setDealersList(state_dealers)
}
}
const get_dealers = async ()=>{
const res = await fetch(dealer_url, {
method: "GET"
});
const retobj = await res.json();
if(retobj.status === 200) {
let all_dealers = Array.from(retobj.dealers)
let states = [];
all_dealers.forEach((dealer)=>{
states.push(dealer.state)
});
setStates(Array.from(new Set(states)))
setDealersList(all_dealers)
}
}
useEffect(() => {
get_dealers();
},[]);
let isLoggedIn = sessionStorage.getItem("username") != null ? true : false;
return(
<div>
<Header/>
<table className='table'>
<tr>
<th>ID</th>
<th>Dealer Name</th>
<th>City</th>
<th>Address</th>
<th>Zip</th>
<th>
<select name="state" id="state" onChange={(e) => filterDealers(e.target.value)}>
<option value="" selected disabled hidden>State</option>
<option value="All">All States</option>
{states.map(state => (
<option value={state}>{state}</option>
))}
</select>
</th>
{isLoggedIn ? (
<th>Review Dealer</th>
):<></>
}
</tr>
{dealersList.map(dealer => (
<tr>
<td>{dealer['id']}</td>
<td><a href={'/dealer/'+dealer['id']}>{dealer['full_name']}</a></td>
<td>{dealer['city']}</td>
<td>{dealer['address']}</td>
<td>{dealer['zip']}</td>
<td>{dealer['state']}</td>
{isLoggedIn ? (
<td><a href={`/postreview/${dealer['id']}`}><img src={review_icon} className="review_icon" alt="Post Review"/></a></td>
):<></>
}
</tr>
))}
</table>;
</div>
)
}
export default Dealers
I have created a get_dealerships view that uses the endpoint /fetchDealers and sets 'dealerships = get_request (endpoint)' and returns the dealerships. I set up a path to 'dealers/' that uses index.html template as a view. I have created a route for 'get_dealers/' (I have also tried 'get_dealers') that uses the get_dealerships view. I am expecting a table of dealerships to render on the page, but nothing is rendered except for a semicolon.
get_dealerships View
def get_dealerships(request, state="All"):
try:
if(state == "All"):
endpoint = "/fetchDealers"
else:
endpoint = "/fetchDealers/"+state
dealerships = get_request(endpoint)
return JsonResponse({"status":200,"dealers":dealerships})
except Exception as Http404:
return JsonResponse({"status": 404, "mssg": str(Http404)})
dealers/ path
urlpatterns = [
path('admin/', admin.site.urls),
path('djangoapp/', include('djangoapp.urls')),
path('', TemplateView.as_view(template_name="Home.html")),
path('about/', TemplateView.as_view(template_name="About.html")),
path('contact/', TemplateView.as_view(template_name="Contact.html")),
path('login/', TemplateView.as_view(template_name="index.html")),
path('register/', TemplateView.as_view(template_name="index.html")),
path('dealers/', TemplateView.as_view(template_name="index.html")),
path('dealer/<int:dealer_id>', TemplateView.as_view(template_name="index.html")),
path('manifest.json', TemplateView.as_view(template_name='manifest.json', content_type='application/json'), name='manifest.json'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
get_dealers/ route
# path for get_dealerships
path(route='get_dealers/', view=views.get_dealerships, name='get_dealers'),
path(route='get_dealers/<str:state>', view=views.get_dealerships, name='get_dealers_by_state'),