@@ -7,11 +7,9 @@ import Context from './context'
77import Loader from './Content/Loader'
88import ModalCardEdit from './Modal/ModalCardEdit'
99import ModalLogin from './Modal/ModalLogin'
10- import Modal from './Modal/Modal'
1110import DataService from './DataService'
1211
13- const { loadData, postData, setLogin } = DataService ( )
14-
12+ const { loadData, postData, setDataServLogin } = DataService ( )
1513const testText = "My little cards-app c:"
1614
1715var cardCount = 0
@@ -55,49 +53,69 @@ function checkCardFields(card) {
5553 return res
5654}
5755
56+ var timer
57+
5858function App ( ) {
5959 const [ cardsArr , setCards ] = useCardsArr ( [ ] )
6060 const [ editCardId , setEditCardId ] = React . useState ( null )
61- const [ loading , setLoading ] = React . useState ( true )
61+ const [ loading , setLoading ] = React . useState ( false )
6262 const [ logged , setLogged ] = React . useState ( false )
63- const [ userName , setUserName ] = React . useState ( null )
64- React . useEffect ( clearIfUnlogged , [ logged ] ) // eslint-disable-line react-hooks/exhaustive-deps
65- React . useEffect ( loadDataFromServer , [ logged ] ) // eslint-disable-line react-hooks/exhaustive-deps
63+ const [ userName , setUserName ] = React . useState ( undefined )
64+
65+ const [ timerVal , setTimerVal ] = React . useState ( null )
66+ if ( timer ) clearInterval ( timer )
67+ timer = setInterval ( ( ) => setTimerVal ( Date . now ( ) ) , 60 * 1000 ) // обновяем через минуту
68+ React . useEffect ( onLogout , [ logged , userName ] ) // eslint-disable-line react-hooks/exhaustive-deps
69+ React . useEffect ( loadDataFromServer , [ logged , userName , timerVal ] ) // eslint-disable-line react-hooks/exhaustive-deps
6670 React . useEffect ( loadDataToServer , [ cardsArr ] ) // eslint-disable-line react-hooks/exhaustive-deps
71+ const [ openLogin , setOpenLogin ] = React . useState ( false )
6772
6873 ///////////
6974 function tryLogin ( login ) {
7075 return new Promise ( ( res , rej ) => {
71- try {
72- setLogin ( login )
73- . then ( ( r => {
74- setLogged ( Boolean ( r ) )
75- setUserName ( login )
76- } ) , console . log )
77- . then ( res , rej )
78- } catch ( e ) {
79- rej ( e )
80- console . error ( e )
81- }
76+ tryLogout ( )
77+ . then ( ( ) => {
78+ setDataServLogin ( login )
79+ . then (
80+ r => {
81+ setLogged ( Boolean ( r ) )
82+ setUserName ( login )
83+ res ( r )
84+ }
85+ )
86+ . catch (
87+ e => {
88+ console . log ( "setDataServLogin in Try login" , "catch" , e ) ;
89+ rej ( e )
90+ }
91+ )
92+ } )
93+ . catch ( ( e ) => console . log ( "logout catch in tryLogin" , e ) )
8294 } )
8395 }
8496
85- function dislogin ( ) {
86- if ( logged ) console . log ( "Dislogin" )
87- setLogged ( null )
97+ function tryLogout ( ) {
98+ return new Promise ( ( res ) => {
99+ if ( logged ) console . log ( "Dislogin" )
100+ let result = setDataServLogin ( null )
101+ setUserName ( undefined )
102+ setLogged ( false )
103+ result . then ( onLogout , onLogout ) . then ( res , res ) . then ( onLogout ) . catch ( e => console . log ( "Data service dislogif failed" , e ) )
104+ } )
88105 }
89106
90- function clearIfUnlogged ( ) {
91- if ( logged === null && cardsArr ) deleteAll ( )
107+ function onLogout ( ) {
108+ if ( ! logged && ! ! cardsArr ) deleteAll ( )
92109 }
93110 ///////////
94111
95112 ///////////
96113 function loadDataToServer ( ) {
97114 try {
98- if ( logged ) postData ( cardsArr ) . then ( ( res ) => {
99- console . log ( '[onPostData]' , res )
100- } , dataError )
115+ if ( logged && userName ) postData ( cardsArr )
116+ . then ( ( res ) => {
117+ console . log ( '[onPostData]' , res )
118+ } , e => console . log ( `Data post request error. Response: ${ e } ` ) )
101119 }
102120 catch ( e ) {
103121 console . error ( e )
@@ -106,23 +124,20 @@ function App() {
106124
107125 function loadDataFromServer ( ) {
108126 try {
109- if ( logged ) {
127+ if ( logged && userName ) {
110128 setLoading ( true )
111- loadData ( ) . then ( data => {
112- console . log ( '[onLoadData]' , 'Данные с сервера загружены' )
113- setLoadedCards ( data )
114- setLoading ( false )
115- } , dataError )
129+ loadData ( )
130+ . then ( data => {
131+ console . log ( '[onLoadData]' , 'Данные с сервера загружены' )
132+ setLoadedCards ( data )
133+ setLoading ( false )
134+ } , e => console . log ( `Data load request error. Response: ${ e } ` ) )
116135 }
117136 }
118137 catch ( e ) {
119138 console . error ( e )
120139 }
121140 }
122-
123- function dataError ( msg ) {
124- console . log ( `Data request error. Response: ${ msg } ` )
125- }
126141 ///////////
127142
128143 ///////////
@@ -178,26 +193,38 @@ function App() {
178193 return (
179194 < Context . Provider value = { { removeCard, changeCardState, setEditCard, unsetEditCard, editCardContent, editCardId } } >
180195 < div className = "App" >
181- < header className = "p-1 h2 text-center" >
182- < img src = { logo } className = "App-logo" alt = "logo" />
183- < h1 className = "d-inline-block h2" > { testText } </ h1 >
184- < p className = "show_login btn btn-light py-0" onClick = { ( e ) => { setLogged ( logged === false ? 0 : false ) } } >
185- { logged ? `Login: ${ userName } ` : "LOG IN" }
186- </ p >
196+ < header className = "p-1" >
197+ < nav className = "d-flex container px-0 flex-wrap-reverse" >
198+ < div className = "text-center d-flex p-1 align-items-center justify-content-center flex-wrap" >
199+ < img src = { logo } className = "App-logo" alt = "logo" />
200+ < h1 className = "h2 m-0" > { testText } </ h1 >
201+ </ div >
202+ < div className = "text-center d-flex p-1 align-items-center ml-auto" >
203+ < button className = "btn btn-light " onClick = { ( ) => setOpenLogin ( true ) } >
204+ { logged ? `Login: ${ userName } ` : "LOG IN" }
205+ </ button >
206+ </ div >
207+ </ nav >
208+ < ModalLogin login = { tryLogin } logout = { tryLogout } logged = { logged } userName = { userName } isOpen = { openLogin } setOpenState = { setOpenLogin } />
187209 </ header >
188210
189211 < main className = "p-1" >
190212 < AddCard onCreate = { addCard } onDeleteAll = { deleteAll } />
191- < Modal component = { ModalLogin } componentProps = { { logged : logged , login : tryLogin , dislogin : dislogin , userName : userName } } />
192- < Modal component = { ModalCardEdit } componentProps = { { card : getCardByIndex ( editCardId ) , index : editCardId } } />
193- { loading && < Loader /> }
213+ < ModalCardEdit card = { getCardByIndex ( editCardId ) } index = { editCardId } />
214+
194215 { cardsArr . length ? (
195216 < CardList cards = { cardsArr } />
196- ) : loading && ! logged ? null : (
217+ ) : loading ? null : logged ? (
197218 < div className = "container text-center" >
198219 < p className = "m-3 p-3 h5 text-muted" > No cards. You can add a new one!</ p >
199220 </ div >
221+ ) : (
222+ < div className = "container text-center" >
223+ < p className = "m-3 p-3 h5 text-muted" > Unlogged</ p >
224+ </ div >
200225 ) }
226+
227+ { loading && < Loader /> }
201228 </ main >
202229 </ div >
203230 </ Context . Provider >
0 commit comments