@@ -7,11 +7,9 @@ import Context from './context'
7
7
import Loader from './Content/Loader'
8
8
import ModalCardEdit from './Modal/ModalCardEdit'
9
9
import ModalLogin from './Modal/ModalLogin'
10
- import Modal from './Modal/Modal'
11
10
import DataService from './DataService'
12
11
13
- const { loadData, postData, setLogin } = DataService ( )
14
-
12
+ const { loadData, postData, setDataServLogin } = DataService ( )
15
13
const testText = "My little cards-app c:"
16
14
17
15
var cardCount = 0
@@ -55,49 +53,69 @@ function checkCardFields(card) {
55
53
return res
56
54
}
57
55
56
+ var timer
57
+
58
58
function App ( ) {
59
59
const [ cardsArr , setCards ] = useCardsArr ( [ ] )
60
60
const [ editCardId , setEditCardId ] = React . useState ( null )
61
- const [ loading , setLoading ] = React . useState ( true )
61
+ const [ loading , setLoading ] = React . useState ( false )
62
62
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
66
70
React . useEffect ( loadDataToServer , [ cardsArr ] ) // eslint-disable-line react-hooks/exhaustive-deps
71
+ const [ openLogin , setOpenLogin ] = React . useState ( false )
67
72
68
73
///////////
69
74
function tryLogin ( login ) {
70
75
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 ) )
82
94
} )
83
95
}
84
96
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
+ } )
88
105
}
89
106
90
- function clearIfUnlogged ( ) {
91
- if ( logged === null && cardsArr ) deleteAll ( )
107
+ function onLogout ( ) {
108
+ if ( ! logged && ! ! cardsArr ) deleteAll ( )
92
109
}
93
110
///////////
94
111
95
112
///////////
96
113
function loadDataToServer ( ) {
97
114
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 } ` ) )
101
119
}
102
120
catch ( e ) {
103
121
console . error ( e )
@@ -106,23 +124,20 @@ function App() {
106
124
107
125
function loadDataFromServer ( ) {
108
126
try {
109
- if ( logged ) {
127
+ if ( logged && userName ) {
110
128
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 } ` ) )
116
135
}
117
136
}
118
137
catch ( e ) {
119
138
console . error ( e )
120
139
}
121
140
}
122
-
123
- function dataError ( msg ) {
124
- console . log ( `Data request error. Response: ${ msg } ` )
125
- }
126
141
///////////
127
142
128
143
///////////
@@ -178,26 +193,38 @@ function App() {
178
193
return (
179
194
< Context . Provider value = { { removeCard, changeCardState, setEditCard, unsetEditCard, editCardContent, editCardId } } >
180
195
< 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 } />
187
209
</ header >
188
210
189
211
< main className = "p-1" >
190
212
< 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
+
194
215
{ cardsArr . length ? (
195
216
< CardList cards = { cardsArr } />
196
- ) : loading && ! logged ? null : (
217
+ ) : loading ? null : logged ? (
197
218
< div className = "container text-center" >
198
219
< p className = "m-3 p-3 h5 text-muted" > No cards. You can add a new one!</ p >
199
220
</ div >
221
+ ) : (
222
+ < div className = "container text-center" >
223
+ < p className = "m-3 p-3 h5 text-muted" > Unlogged</ p >
224
+ </ div >
200
225
) }
226
+
227
+ { loading && < Loader /> }
201
228
</ main >
202
229
</ div >
203
230
</ Context . Provider >
0 commit comments