Skip to content

Commit 6cda6a9

Browse files
fetch users api call
1 parent 573adf8 commit 6cda6a9

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

src/api/fetchUsers.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { SetStateAction } from 'react'
2+
import { UsersType } from '@/types/types'
3+
import { setItemInSessionStorage } from '@/utils/setItemInSessionStorage'
4+
5+
const fetchUsers = async (
6+
setUsers: (value: SetStateAction<UsersType[]>) => void
7+
) => {
8+
try {
9+
const response = await fetch(
10+
'https://jsonplaceholder.typicode.com/users',
11+
{
12+
method: 'GET',
13+
}
14+
)
15+
16+
if (!response.ok) {
17+
console.error('An error occurred while fetching the users.')
18+
throw new Error('Network response was not ok')
19+
}
20+
21+
const data = await response.json()
22+
if (!data) {
23+
console.error('An error occurred while fetching the users.')
24+
throw new Error('Received data was not ok')
25+
}
26+
27+
setUsers((prev) => {
28+
const merged = [...prev, ...data]
29+
const unique = Array.from(
30+
new Map(merged.map((item) => [item.id, item])).values()
31+
)
32+
33+
setItemInSessionStorage('users', unique)
34+
35+
return unique
36+
})
37+
} catch (error: unknown) {
38+
console.error('An error occurred while fetching the users.', error)
39+
}
40+
}
41+
42+
export default fetchUsers

0 commit comments

Comments
 (0)