Skip to content

Commit 373edfb

Browse files
authored
Standardize data fetching and rendering (#901)
* combined objective 2 and 3 in the reactvite http request lesson * apiHelper handles inconsistencies, and updated test for new structure * updated apiHelper for RN, and apiHelper tests for new structure
1 parent 3266833 commit 373edfb

File tree

353 files changed

+4437
-6238
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

353 files changed

+4437
-6238
lines changed

exercise-src/react-native/13-http-requests/03-problem/src/services/pmo/restaurant/hooks.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe("Services/PMO/Restaurant/useStates", () => {
1717
{ id: 2, name: "State2" },
1818
]
1919
apiRequest.mockResolvedValue({
20-
data: { data: mockStates },
20+
data: mockStates,
2121
error: undefined,
2222
})
2323

@@ -51,7 +51,7 @@ describe("Services/PMO/Restaurant/useCities", () => {
5151
{ id: 2, name: "City2" },
5252
]
5353
apiRequest.mockResolvedValue({
54-
data: { data: mockCities },
54+
data: mockCities,
5555
error: undefined,
5656
})
5757

exercise-src/react-native/13-http-requests/03-solution/src/services/pmo/api/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export async function apiRequest<
3535
}
3636

3737
return {
38-
data: data,
38+
data: "data" in data ? data.data : data,
3939
error: undefined,
4040
}
4141
} catch (error) {

exercise-src/react-native/13-http-requests/03-solution/src/services/pmo/restaurant/hooks.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export function useCities({ state }: UseCitiesParams): CitiesResponse {
2929

3030
useEffect(() => {
3131
const fetchData = async () => {
32-
const { data, error } = await apiRequest<CitiesResponse>({
32+
const { data, error } = await apiRequest<City[]>({
3333
method: "GET",
3434
path: "/cities",
3535
params: {
@@ -38,7 +38,7 @@ export function useCities({ state }: UseCitiesParams): CitiesResponse {
3838
})
3939

4040
setResponse({
41-
data: Array.isArray(data) ? data : data?.data ?? undefined,
41+
data: data,
4242
error: error,
4343
isPending: false,
4444
})
@@ -64,13 +64,13 @@ export function useStates(): StatesResponse {
6464
isPending: true,
6565
})
6666

67-
const { data, error } = await apiRequest<StatesResponse>({
67+
const { data, error } = await apiRequest<State[]>({
6868
method: "GET",
6969
path: "/states",
7070
})
7171

7272
setResponse({
73-
data: Array.isArray(data) ? data : data?.data ?? undefined,
73+
data: data,
7474
error: error,
7575
isPending: false,
7676
})

exercise-src/react-native/13-http-requests/04-problem/src/services/pmo/restaurant/hooks.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe("Services/PMO/Restaurant/useStates", () => {
1818
{ id: 2, name: "State2" },
1919
]
2020
apiRequest.mockResolvedValue({
21-
data: { data: mockStates },
21+
data: mockStates,
2222
error: undefined,
2323
})
2424

@@ -52,7 +52,7 @@ describe("Services/PMO/Restaurant/useCities", () => {
5252
{ id: 2, name: "City2" },
5353
]
5454
apiRequest.mockResolvedValue({
55-
data: { data: mockCities },
55+
data: mockCities,
5656
error: undefined,
5757
})
5858

@@ -86,7 +86,7 @@ describe("Services/PMO/Restaurant/useRestaurants", () => {
8686
{ id: 2, name: "Restaurant2" },
8787
]
8888
apiRequest.mockResolvedValue({
89-
data: { data: mockRestaurants },
89+
data: mockRestaurants,
9090
error: undefined,
9191
})
9292

@@ -121,7 +121,7 @@ describe("Services/PMO/Restaurant/useRestaurant", () => {
121121
it("returns a restaurant", async () => {
122122
const mockRestaurant = { id: 1, name: "Restaurant1" }
123123
apiRequest.mockResolvedValue({
124-
data: { data: mockRestaurant },
124+
data: mockRestaurant,
125125
error: undefined,
126126
})
127127

exercise-src/react-native/13-http-requests/04-problem/src/services/pmo/restaurant/hooks.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export function useCities({ state }: UseCitiesParams): CitiesResponse {
4949

5050
useEffect(() => {
5151
const fetchData = async () => {
52-
const { data, error } = await apiRequest<CitiesResponse>({
52+
const { data, error } = await apiRequest<City[]>({
5353
method: "GET",
5454
path: "/cities",
5555
params: {
@@ -58,7 +58,7 @@ export function useCities({ state }: UseCitiesParams): CitiesResponse {
5858
})
5959

6060
setResponse({
61-
data: Array.isArray(data) ? data : data?.data ?? undefined,
61+
data: data,
6262
error: error,
6363
isPending: false,
6464
})
@@ -95,15 +95,13 @@ export function useStates(): StatesResponse {
9595
isPending: true,
9696
})
9797

98-
const { data, error } = await apiRequest<StatesResponse>({
98+
const { data, error } = await apiRequest<State[]>({
9999
method: "GET",
100100
path: "/states",
101101
})
102102

103103
setResponse({
104-
data: Array.isArray(data)
105-
? undefined
106-
: (data?.data as Restaurant | undefined),
104+
data: data,
107105
error: error,
108106
isPending: false,
109107
})

exercise-src/react-native/13-http-requests/04-solution/src/services/pmo/restaurant/hooks.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export function useCities({ state }: UseCitiesParams): CitiesResponse {
4949

5050
useEffect(() => {
5151
const fetchData = async () => {
52-
const { data, error } = await apiRequest<CitiesResponse>({
52+
const { data, error } = await apiRequest<City[]>({
5353
method: "GET",
5454
path: "/cities",
5555
params: {
@@ -58,7 +58,7 @@ export function useCities({ state }: UseCitiesParams): CitiesResponse {
5858
})
5959

6060
setResponse({
61-
data: Array.isArray(data) ? data : data?.data ?? undefined,
61+
data: data,
6262
error: error,
6363
isPending: false,
6464
})
@@ -78,13 +78,13 @@ export function useRestaurant({ slug }: UseRestaurant): RestaurantResponse {
7878

7979
useEffect(() => {
8080
const fetchData = async () => {
81-
const { data, error } = await apiRequest<RestaurantResponse>({
81+
const { data, error } = await apiRequest<Restaurant>({
8282
method: "GET",
8383
path: `/restaurants/${slug}`,
8484
})
8585

8686
setResponse({
87-
data: data && "data" in data ? data.data : data || undefined,
87+
data: data,
8888
error: error,
8989
isPending: false,
9090
})
@@ -107,7 +107,7 @@ export function useRestaurants({
107107

108108
useEffect(() => {
109109
const fetchData = async () => {
110-
const { data, error } = await apiRequest<RestaurantsResponse>({
110+
const { data, error } = await apiRequest<Restaurant[]>({
111111
method: "GET",
112112
path: "/restaurants",
113113
params: {
@@ -117,7 +117,7 @@ export function useRestaurants({
117117
})
118118

119119
setResponse({
120-
data: Array.isArray(data) ? data : data?.data ?? undefined,
120+
data: data,
121121
error: error,
122122
isPending: false,
123123
})
@@ -143,13 +143,13 @@ export function useStates(): StatesResponse {
143143
isPending: true,
144144
})
145145

146-
const { data, error } = await apiRequest<StatesResponse>({
146+
const { data, error } = await apiRequest<State[]>({
147147
method: "GET",
148148
path: "/states",
149149
})
150150

151151
setResponse({
152-
data: Array.isArray(data) ? data : data?.data ?? undefined,
152+
data: data,
153153
error: error,
154154
isPending: false,
155155
})

exercise-src/react-native/15-async-storage/01-problem/src/services/pmo/api/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export async function apiRequest<
4444
}
4545

4646
return {
47-
data: data,
47+
data: "data" in data ? data.data : data,
4848
error: undefined,
4949
}
5050
} catch (error) {

exercise-src/react-native/15-async-storage/01-solution/src/services/pmo/api/api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export async function apiRequest<
6262

6363
if (method === "GET" && response.ok) {
6464
await storeData<CachedResponse<Data>>(keyPrefix + requestUrl, {
65-
data: data,
65+
data: "data" in data ? data.data : data,
6666
dateTime: new Date().toJSON(),
6767
})
6868
}
@@ -73,7 +73,7 @@ export async function apiRequest<
7373
}
7474

7575
return {
76-
data: data,
76+
data: "data" in data ? data.data : data,
7777
error: undefined,
7878
}
7979
} catch (error) {

exercise-src/react-native/15-async-storage/02-problem/src/services/pmo/api/api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export async function apiRequest<
6161

6262
if (method === "GET" && response.ok) {
6363
await storeData<CachedResponse<Data>>(keyPrefix + requestUrl, {
64-
data: data,
64+
data: "data" in data ? data.data : data,
6565
dateTime: Date.now(),
6666
})
6767
}
@@ -72,7 +72,7 @@ export async function apiRequest<
7272
}
7373

7474
return {
75-
data: data,
75+
data: "data" in data ? data.data : data,
7676
error: undefined,
7777
}
7878
} catch (error) {

exercises/react-vite/08-stateful-hooks/03-problem/src/pages/RestaurantList/RestaurantList.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { render, screen } from "@testing-library/react"
33
import userEvent from "@testing-library/user-event"
44
import { beforeEach, describe, expect, it, vi } from "vitest"
55

6-
import * as restaurantHooks from "../../services/restaurant/hooks"
6+
import * as restaurantHooks from "../../services/pmo/restaurant"
77
import RestaurantList from "./RestaurantList"
88

99
// Mocking necessary modules
10-
vi.mock("../../services/restaurant/hooks")
10+
vi.mock("../../services/pmo/restaurant")
1111

1212
describe("RestaurantList component", () => {
1313
beforeEach(() => {

0 commit comments

Comments
 (0)