Commit ed3827d9 authored by Pavel Mishakov's avatar Pavel Mishakov

63 done

parent 5ec3b60f
...@@ -29,8 +29,7 @@ ...@@ -29,8 +29,7 @@
} }
.NavigationMenuItem a:hover, .NavigationMenuItem a:hover,
.NavigationMenuItem a:active, .NavigationMenuItem a:active {
.NavigationMenuItem a.active {
background-color: #8f5c2c; background-color: #8f5c2c;
border-bottom: 4px solid #40a4c8; border-bottom: 4px solid #40a4c8;
color: white; color: white;
......
import { NavLink } from "react-router-dom"; import { NavLink } from "react-router-dom";
import styles from './NavigationMenu.module.css'; import styles from './NavigationMenu.module.css';
import { CSSProperties } from "react";
const NavigationMenu = () => { const NavigationMenu = () => {
const getActiveStyles = ({isActive}: {isActive: boolean}): CSSProperties | undefined => {
if (isActive) {
return {
backgroundColor: '#8f5c2c',
borderBottom: '4px solid #40a4c8',
color: 'white'
}
}
}
return ( return (
<ul className={styles.NavigationMenu}> <ul className={styles.NavigationMenu}>
<li className={styles.NavigationMenuItem}> <li className={styles.NavigationMenuItem}>
<NavLink to="/">Burger Builder</NavLink> <NavLink style={getActiveStyles} to="/">Burger Builder</NavLink>
</li> </li>
<li className={styles.NavigationMenuItem}> <li className={styles.NavigationMenuItem}>
<NavLink to="/orders">Orders</NavLink> <NavLink style={getActiveStyles} to="/orders">Orders</NavLink>
</li> </li>
</ul> </ul>
) )
......
import React, { useEffect, useState } from 'react';
import { axiosOrder } from '../../axios/axiosOrder'; import { axiosOrder } from '../../axios/axiosOrder';
import type { TFirebaseData } from "../../types/TFirebaseData"; import type { TFirebaseData } from "../../types/TFirebaseData";
import { TOrder } from '../../types/TOrder'; import { TOrder } from '../../types/TOrder';
import OrderItem from '../OrderItem/OrderItem'; import OrderItem from '../OrderItem/OrderItem';
import Spinner from '../UI/Spinner/Spinner'; import { useLoaderData } from 'react-router';
const Orders = () => {
const [orders, setOrders] = useState<TOrder[]>([]);
const [loading, setLoading] = useState(true);
useEffect(() => { export const fetchOrders = async () => {
const fetchData = async () => {
const response = await axiosOrder.get('orders.json'); const response = await axiosOrder.get('orders.json');
const data: TFirebaseData<TOrder> = response.data const data: TFirebaseData<TOrder> = response.data
console.log(response.data) const fetchedOrders: TOrder[] = Object.keys(data).map(id => {
if (!data) return
const fetchedOrders = Object.keys(data).map(id => {
return { ...data[id], id }; return { ...data[id], id };
}); });
setOrders(fetchedOrders); return fetchedOrders
}; }
setLoading(true); const Orders = () => {
fetchData().finally(() => setLoading(false)); const orders: TOrder[] = useLoaderData()
}, []); return (
<>
let content: React.ReactElement | React.ReactElement[] = orders.map(order => { {orders.map(order => {
return ( return (
<OrderItem key={order.id} <OrderItem key={order.id}
ingredients={order?.ingredients || {}} ingredients={order?.ingredients || {}}
price={order.price || 0} price={order.price || 0}
/> />
) )
}); })}
</>
if (loading) { );
content = <Spinner />;
}
return content;
} }
export default Orders; export default Orders;
\ No newline at end of file
...@@ -2,13 +2,15 @@ import { Outlet } from "react-router-dom"; ...@@ -2,13 +2,15 @@ import { Outlet } from "react-router-dom";
import Toolbar from "../../Toolbar/Toolbar"; import Toolbar from "../../Toolbar/Toolbar";
import styles from './Layout.module.css'; import styles from './Layout.module.css';
const Layout = () => ( const Layout = () => {
return (
<> <>
<Toolbar /> <Toolbar />
<main className={styles.LayoutContent}> <main className={styles.LayoutContent}>
<Outlet/> <Outlet />
</main> </main>
</> </>
); )
};
export default Layout; export default Layout;
\ No newline at end of file
...@@ -6,7 +6,10 @@ import BurgerBuilder from './components/BurgerBuilder/BurgerBuilder.tsx' ...@@ -6,7 +6,10 @@ import BurgerBuilder from './components/BurgerBuilder/BurgerBuilder.tsx'
import { Checkout } from './components/Checkout/Checkout.tsx' import { Checkout } from './components/Checkout/Checkout.tsx'
import { ContactData } from './components/ContactData/ContactData.tsx' import { ContactData } from './components/ContactData/ContactData.tsx'
import Layout from './components/layouts/Layout/Layout.tsx' import Layout from './components/layouts/Layout/Layout.tsx'
import Orders from './components/Orders/Orders.tsx' import { fetchOrders } from './components/Orders/Orders.tsx'
import { lazy, Suspense } from 'react'
import Spinner from './components/UI/Spinner/Spinner.tsx'
const Orders = lazy(() => import('./components/Orders/Orders.tsx'))
const router = createBrowserRouter([ const router = createBrowserRouter([
{ {
...@@ -29,7 +32,12 @@ const router = createBrowserRouter([ ...@@ -29,7 +32,12 @@ const router = createBrowserRouter([
}, },
{ {
path: '/orders', path: '/orders',
element: <Orders /> element: (
<Suspense fallback={<Spinner />}>
<Orders />
</Suspense>
),
loader: fetchOrders
} }
] ]
}, },
......
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