Skip to content

Commit bc60f96

Browse files
committed
Catch errors in mapped requests
1 parent a60979d commit bc60f96

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

src/modules/templates.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const initialState: TTemplatesState = {
4343
error: false
4444
};
4545

46-
export default function reducer(state = initialState, action: TReducerActions) {
46+
export default function reducer(state = initialState, action: TReducerActions): TTemplatesState {
4747
switch (action.type) {
4848
case SET_TEMPLATE: {
4949
const template = action.payload.reports;

src/pages/area-view/AreaView.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Hero from "components/layouts/Hero/Hero";
22
import Map from "components/ui/Map/Map";
3-
import { FC, useState, useEffect } from "react";
3+
import { FC, useState, useEffect, useMemo } from "react";
44
import { MapboxEvent, Map as MapInstance } from "mapbox-gl";
55
import { FormattedMessage } from "react-intl";
66
import { TPropsFromRedux } from "./AreaViewContainer";
@@ -38,6 +38,18 @@ const AreasView: FC<IProps & RouteComponentProps<TParams>> = ({
3838
let { path, url } = useRouteMatch();
3939
const userId = useGetUserId();
4040

41+
const templatesToAdd = useMemo(() => {
42+
return (
43+
templates?.filter(
44+
template => !area?.attributes.reportTemplate.find(areaTemplate => areaTemplate.id === template.id)
45+
) || []
46+
);
47+
}, [area?.attributes.reportTemplate, templates]);
48+
49+
const teamsToAdd = useMemo(() => {
50+
return teams?.filter(team => !areaTeams.find(areaTeam => areaTeam.data.id === team.id)) || [];
51+
}, [areaTeams, teams]);
52+
4153
const handleMapLoad = (e: MapboxEvent) => {
4254
setMapRef(e.target);
4355
};
@@ -181,13 +193,13 @@ const AreasView: FC<IProps & RouteComponentProps<TParams>> = ({
181193
</div>
182194
<Switch>
183195
<Route path={`${path}/template/add`}>
184-
<AddTemplateModal templates={templates} />
196+
<AddTemplateModal templates={templatesToAdd} />
185197
</Route>
186198
<Route path={`${path}/template/remove/:templateId`}>
187199
<RemoveTemplateModal />
188200
</Route>
189201
<Route path={`${path}/team/add`}>
190-
<AddTeamModal teams={teams} />
202+
<AddTeamModal teams={teamsToAdd} />
191203
</Route>
192204
<Route path={`${path}/team/remove/:teamId`}>
193205
<RemoveTemplateModal />

src/services/area.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ export class AreaService extends BaseService {
4141

4242
addTemplatesToAreas(areaId: string, templateIds: string[]) {
4343
this.token = store.getState().user.token;
44-
const promises = templateIds.map(id => this.fetch(`/${areaId}/template/${id}`, { method: "POST" }));
44+
const promises = templateIds.map(async id => {
45+
const resp = await this.fetch(`/${areaId}/template/${id}`, { method: "POST" });
46+
if (!resp.ok) {
47+
throw Error(await resp.text());
48+
}
49+
return resp;
50+
});
4551

4652
return Promise.all(promises);
4753
}
@@ -58,7 +64,13 @@ export class AreaService extends BaseService {
5864

5965
addTeamsToAreas(areaId: string, teamIds: string[]) {
6066
this.token = store.getState().user.token;
61-
const promises = teamIds.map(id => this.fetch(`/${areaId}/team/${id}`, { method: "POST" }));
67+
const promises = teamIds.map(async id => {
68+
const resp = await this.fetch(`/${areaId}/team/${id}`, { method: "POST" });
69+
if (!resp.ok) {
70+
throw Error(await resp.text());
71+
}
72+
return resp;
73+
});
6274

6375
return Promise.all(promises);
6476
}

0 commit comments

Comments
 (0)