Skip to content

Commit 7c08cbe

Browse files
committed
cards valitator
1 parent 502236c commit 7c08cbe

File tree

1 file changed

+62
-15
lines changed

1 file changed

+62
-15
lines changed

src/App.js

Lines changed: 62 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,86 @@ import DataService from './DataService'
1010

1111
const { 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+
2458
function 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

Comments
 (0)