1- import { Outlet , NavLink , useLoaderData , Form } from 'react-router-dom' ;
1+ import {
2+ Outlet ,
3+ NavLink ,
4+ useLoaderData ,
5+ Form ,
6+ useNavigation ,
7+ } from 'react-router-dom' ;
28import { getContacts , createContact } from '../contacts' ;
39
410export const loader = async ( ) => {
@@ -13,6 +19,7 @@ export const action = async () => {
1319
1420export default function Root ( ) {
1521 const { contacts } = useLoaderData ( ) ;
22+ const navigation = useNavigation ( ) ;
1623 return (
1724 < >
1825 < div id = 'sidebar' >
@@ -33,35 +40,40 @@ export default function Root() {
3340 < button type = 'submit' > New</ button >
3441 </ Form >
3542 </ div >
36- { contacts . length ? (
37- < ul >
38- { contacts . map ( ( contact ) => (
39- < li key = { contact . id } >
40- < NavLink
41- to = { `contacts/${ contact . id } ` }
42- className = { ( { isActive, isPending } ) =>
43- isActive ? 'active' : isPending ? 'peding' : ''
44- }
45- >
46- { contact . first || contact . last ? (
47- < >
48- { contact . first } { contact . last }
49- </ >
50- ) : (
51- < i > No Name</ i >
52- ) } { ' ' }
53- { contact . favorite && < span > ★</ span > }
54- </ NavLink >
55- </ li >
56- ) ) }
57- </ ul >
58- ) : (
59- < p >
60- < i > No contacts</ i >
61- </ p >
62- ) }
43+ < nav >
44+ { contacts . length ? (
45+ < ul >
46+ { contacts . map ( ( contact ) => (
47+ < li key = { contact . id } >
48+ < NavLink
49+ to = { `contacts/${ contact . id } ` }
50+ className = { ( { isActive, isPending } ) =>
51+ isActive ? 'active' : isPending ? 'peding' : ''
52+ }
53+ >
54+ { contact . first || contact . last ? (
55+ < >
56+ { contact . first } { contact . last }
57+ </ >
58+ ) : (
59+ < i > No Name</ i >
60+ ) } { ' ' }
61+ { contact . favorite && < span > ★</ span > }
62+ </ NavLink >
63+ </ li >
64+ ) ) }
65+ </ ul >
66+ ) : (
67+ < p >
68+ < i > No contacts</ i >
69+ </ p >
70+ ) }
71+ </ nav >
6372 </ div >
64- < div id = 'detail' >
73+ < div
74+ id = 'detail'
75+ className = { navigation . state === 'loading' ? 'loading' : '' }
76+ >
6577 < Outlet />
6678 </ div >
6779 </ >
0 commit comments