Skip to content

Commit 3405836

Browse files
committed
Update osm-teams API requests
1 parent 32f866c commit 3405836

File tree

2 files changed

+44
-29
lines changed

2 files changed

+44
-29
lines changed

frontend/src/components/teamsAndOrgs/teamSync.js

+38-29
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ import { Button, CustomButton } from '../button';
1111
import { ExternalLinkIcon, UserGroupIcon } from '../svgIcons';
1212
import { useDebouncedCallback } from '../../hooks/UseThrottle';
1313
import { createOSMTeamsLoginWindow } from '../../utils/login';
14-
import { useOSMTeamInfo, useOSMTeams, useOSMTeamUsers } from '../../hooks/UseOSMTeams';
14+
import {
15+
useOSMTeamInfo,
16+
useOSMTeamModerators,
17+
useOSMTeams,
18+
useOSMTeamUsers
19+
} from '../../hooks/UseOSMTeams';
1520
import { UserAvatar } from '../user/avatar';
1621
import { OSM_TEAMS_API_URL } from '../../config';
1722
import { fetchExternalJSONAPI } from '../../network/genericJSONRequest';
@@ -27,14 +32,21 @@ const OSMTeamsLink = () =>
2732

2833
const reSyncUsers = ({ tmTeamId, members, managers, osmTeamsId, osmteams_token, token, forceUpdate, setErrors }) => {
2934
setErrors(false);
30-
fetchExternalJSONAPI(
31-
new URL(`/api/teams/${osmTeamsId}/members`, OSM_TEAMS_API_URL),
32-
`Bearer ${osmteams_token}`,
33-
'GET',
34-
).then((osmTeamsUsers) => {
35+
Promise.all([
36+
fetchExternalJSONAPI(
37+
new URL(`/api/teams/${osmTeamsId}/members`, OSM_TEAMS_API_URL),
38+
`Bearer ${osmteams_token}`,
39+
'GET',
40+
),
41+
fetchExternalJSONAPI(
42+
new URL(`/api/teams/${osmTeamsId}/moderators`, OSM_TEAMS_API_URL),
43+
`Bearer ${osmteams_token}`,
44+
'GET',
45+
)
46+
]).then(([ osmTeamsUsers, osmTeamsModerators ]) => {
3547
const { members: osmTeamsMembers, managers: osmTeamsManagers } = filterOSMTeamsMembers(
36-
osmTeamsUsers.members,
37-
osmTeamsUsers.moderators
48+
osmTeamsUsers.members.data,
49+
osmTeamsModerators
3850
);
3951
const { usersAdded, usersRemoved } = getMembersDiff(
4052
members,
@@ -212,7 +224,6 @@ const TeamBasicInfo = ({ teamId }) => {
212224
const TeamInfo = ({members, managers, teamId, isLoadingMembers}) => {
213225
const intl = useIntl();
214226
const [error, isLoading, team] = useOSMTeamInfo(teamId);
215-
const {members: filteredMembers, managers: filteredManagers} = filterOSMTeamsMembers(members, managers);
216227
if (error) return <div><FormattedMessage {...messages.osmTeamInfoError} /></div>;
217228

218229
return (
@@ -242,7 +253,7 @@ const TeamInfo = ({members, managers, teamId, isLoadingMembers}) => {
242253
<p><i>{team.bio}</i></p>
243254
<h5 className='mb1'><FormattedMessage {...messages.managers} /></h5>
244255
<div>
245-
{filteredManagers.map((user) => (
256+
{managers.map((user) => (
246257
<UserAvatar
247258
key={user.id}
248259
username={user.name}
@@ -254,7 +265,7 @@ const TeamInfo = ({members, managers, teamId, isLoadingMembers}) => {
254265
</div>
255266
<h5 className='mb1'><FormattedMessage {...messages.members} /></h5>
256267
<div>
257-
{filteredMembers.map((user) => (
268+
{members.map((user) => (
258269
<UserAvatar
259270
key={user.id}
260271
username={user.name}
@@ -275,16 +286,19 @@ export const SelectOSMTeamsModal = ({ osmTeamsId, setOsmTeamsId, setManagers, se
275286
const [error, isLoading, myTeams] = useOSMTeams();
276287
const [selectedTeamId, setSelectedTeamId] = useState();
277288
const [syncStatus, setSyncStatus] = useState();
278-
const [teamError, teamIsLoading, teamUsers] = useOSMTeamUsers(osmTeamsId || selectedTeamId);
289+
const [teamMembersError, teamMembersIsLoading, teamMembers] = useOSMTeamUsers(osmTeamsId || selectedTeamId);
290+
const [teamModeratorsError, teamModeratorsIsLoading, teamModerators] = useOSMTeamModerators(
291+
osmTeamsId || selectedTeamId
292+
);
293+
const { members, managers } = filterOSMTeamsMembers(
294+
teamMembers?.members?.data || [],
295+
teamModerators?.length ? teamModerators : []
296+
);
279297

280298
const syncToExistingTeam = () => {
281299
setSyncStatus('started');
282300
updateTeam(selectedTeamId);
283301
setSyncStatus('waiting');
284-
const { members, managers } = filterOSMTeamsMembers(
285-
teamUsers.members,
286-
teamUsers.moderators
287-
);
288302
const errors = [];
289303
managers.map((user) =>
290304
joinTeamRequest(tmTeamId, user.name, 'MANAGER', token)
@@ -301,15 +315,8 @@ export const SelectOSMTeamsModal = ({ osmTeamsId, setOsmTeamsId, setManagers, se
301315
const syncToNewTeam = () => {
302316
setSyncStatus('started');
303317
setOsmTeamsId(selectedTeamId);
304-
const managersIds = teamUsers.moderators.map((user) => user.osm_id);
305-
const managers = teamUsers.members
306-
.filter((user) => managersIds.includes(user.id))
307-
.map((user) => ({ username: user.name, pictureUrl: user.image }));
308-
setManagers(managers);
309-
const members = teamUsers.members
310-
.filter((user) => !managersIds.includes(user.id))
311-
.map((user) => ({ username: user.name, pictureUrl: user.image }));
312-
setMembers(members);
318+
setManagers(managers.map((user) => ({ username: user.name })));
319+
setMembers(members.map((user) => ({ username: user.name })));
313320
setSyncStatus('finished');
314321
}
315322

@@ -328,12 +335,14 @@ export const SelectOSMTeamsModal = ({ osmTeamsId, setOsmTeamsId, setManagers, se
328335
? (
329336
<div>
330337
<TeamInfo
331-
members={teamUsers?.members || []}
332-
managers={teamUsers?.moderators || []}
338+
members={members || []}
339+
managers={managers || []}
333340
teamId={osmTeamsId || selectedTeamId}
334-
isLoadingMembers={teamIsLoading}
341+
isLoadingMembers={teamMembersIsLoading || teamModeratorsIsLoading}
335342
/>
336-
{teamError && <FormattedMessage {...messages.osmTeamInfoError} />}
343+
{(teamMembersError || teamModeratorsError) &&
344+
<FormattedMessage {...messages.osmTeamInfoError} />
345+
}
337346
</div>
338347
) : (
339348
<>

frontend/src/hooks/UseOSMTeams.js

+6
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ export const useOSMTeamUsers = (teamId) => {
4343
return useFetchExternal(myTeamsURL.href, Boolean(teamId), `Bearer ${osmTeamsToken}`);
4444
};
4545

46+
export const useOSMTeamModerators = (teamId) => {
47+
const osmTeamsToken = useSelector((state) => state.auth.osmteams_token);
48+
const myTeamsURL = new URL(`/api/teams/${teamId}/moderators`, OSM_TEAMS_API_URL);
49+
return useFetchExternal(myTeamsURL.href, Boolean(teamId), `Bearer ${osmTeamsToken}`);
50+
};
51+
4652
export const useOSMTeamInfo = (teamId) => {
4753
const osmTeamsToken = useSelector((state) => state.auth.osmteams_token);
4854
const myTeamsURL = new URL(`/api/teams/${teamId}`, OSM_TEAMS_API_URL);

0 commit comments

Comments
 (0)