@@ -10,39 +10,86 @@ import DataService from './DataService'
1010
1111const { loadData, postData, login } = DataService ( )
1212
13- const testText = "My little cards-app c:" ;
13+ const testText = "My little cards-app c:"
1414
15- let cardCount = 1 ;
16- function calcCount ( cardsArr ) {
15+ var cardCount = 0
16+ function calcCount ( cards ) {
1717 let id = cardCount ;
18- [ ...cardsArr ] . forEach ( element => {
19- if ( Number ( element . id ) >= id ) id = Number ( element . id ) + 1
18+ [ ...cards ] . forEach ( element => {
19+ if ( Number ( element . id ) >= id ) id = Number ( element . id )
2020 } ) ;
2121 return id
2222}
2323
24+ function useCardsArr ( defaultValue ) {
25+ const [ value , setValue ] = React . useState ( defaultValue )
26+
27+ function trySetValue ( cardsArr ) {
28+ if ( checkCardsArr ( cardsArr ) ) setValue ( cardsArr )
29+ else console . error ( 'Массив cardsArr не прошел проверку \n' , cardsArr )
30+ }
31+
32+ return [ value , trySetValue ]
33+ }
34+
35+ function checkCardsArr ( cardsArr ) {
36+ if ( ! Array . isArray ( cardsArr ) ) return false
37+ else if ( cardsArr . length === 0 ) return true
38+ else {
39+ //console.log('check array')
40+ cardsArr . forEach ( ( card ) => {
41+ if ( typeof card !== "object" ) return false
42+ else if ( ! checkCardFields ( card ) ) return false
43+ } )
44+ return true
45+ }
46+ }
47+
48+ function checkCardFields ( card ) {
49+ let res = (
50+ ! isNaN ( card . id ) &&
51+ typeof card . completed === "boolean" &&
52+ typeof card . text === "string"
53+ )
54+ //console.log('check fields',!isNaN(card.id),typeof card.completed === "boolean", typeof card.text === "string",res)
55+ return res
56+ }
57+
2458function App ( ) {
25- const [ cardsArr , setCards ] = React . useState ( [ ] )
59+ const [ cardsArr , setCards ] = useCardsArr ( [ ] )
2660 const [ editCardId , setEditCardId ] = React . useState ( null )
2761 const [ loading , setLoading ] = React . useState ( true )
28- // eslint-disable-next-line react-hooks/exhaustive-deps
29- React . useEffect ( tryLogin , [ ] )
30- React . useEffect ( loadDataFromServer , [ ] )
31- React . useEffect ( loadDataToServer , [ cardsArr ] )
62+ React . useEffect ( tryLogin , [ ] ) // eslint-disable-line react-hooks/exhaustive-deps
63+ React . useEffect ( loadDataFromServer , [ ] ) // eslint-disable-line react-hooks/exhaustive-deps
64+ React . useEffect ( loadDataToServer , [ cardsArr ] ) // eslint-disable-line react-hooks/exhaustive-deps
3265
3366 ///////////
3467 function tryLogin ( ) {
35- login ( ) . then ( loadDataFromServer , alert )
68+ try {
69+ login ( ) . then ( loadDataFromServer , alert )
70+ } catch ( e ) {
71+ console . error ( e )
72+ }
3673 }
3774
3875 function loadDataToServer ( ) {
3976 //console.log("***\n[HOOK] - loadDataToServer (onCardsArr)\n***")
40- postData ( cardsArr ) . then ( console . log , dataError )
77+ try {
78+ postData ( cardsArr ) . then ( console . log , dataError )
79+ }
80+ catch ( e ) {
81+ console . error ( e )
82+ }
4183 }
4284
4385 function loadDataFromServer ( ) {
4486 //console.log("[HOOK] - loadDataFromServer")
45- loadData ( ) . then ( setLoadedCards , dataError )
87+ try {
88+ loadData ( ) . then ( setLoadedCards , dataError )
89+ }
90+ catch ( e ) {
91+ console . error ( e )
92+ }
4693 }
4794
4895 function dataError ( msg ) {
@@ -70,13 +117,13 @@ function App() {
70117 setCards (
71118 cardsArr . concat ( [
72119 {
73- id : Number ( cardCount ) ,
120+ id : Number ( ++ cardCount ) ,
74121 completed : Boolean ( cardData . sel ) ,
75122 text : String ( cardData . text )
76123 }
77124 ] )
78125 )
79- cardCount ++
126+
80127 }
81128
82129 function changeCardState ( index ) {
0 commit comments