Skip to content

Commit 012ce6d

Browse files
authored
Fix: Side panel data not updating when different user cards are clicked (#900)
* Fix: Side panel data not updating when different user cards are clicked * renamed the variable * added tests * using staging api url for testing
1 parent 0399dcd commit 012ce6d

File tree

4 files changed

+71
-15
lines changed

4 files changed

+71
-15
lines changed

__tests__/users/App.test.js

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,13 @@ describe('App Component', () => {
3737
headers,
3838
body: JSON.stringify({
3939
...filteredUsersData,
40-
users: filteredUsersData.users.filter(
41-
(user) => user.roles.in_discord,
42-
),
40+
...mockUserData,
41+
users: [
42+
...filteredUsersData.users.filter(
43+
(user) => user.roles.in_discord,
44+
),
45+
...mockUserData.users.filter((user) => user.roles.in_discord),
46+
],
4347
}),
4448
});
4549
} else if (url === `${API_BASE_URL}/users/search/?verified=true`) {
@@ -49,9 +53,11 @@ describe('App Component', () => {
4953
headers,
5054
body: JSON.stringify({
5155
...filteredUsersData,
52-
users: filteredUsersData.users.filter((user) => user.discordId),
5356
...mockUserData,
54-
users: mockUserData.users.filter((user) => user.discordId),
57+
users: [
58+
...filteredUsersData.users.filter((user) => user.discordId),
59+
...mockUserData.users.filter((user) => user.discordId),
60+
],
5561
}),
5662
});
5763
} else {
@@ -96,4 +102,48 @@ describe('App Component', () => {
96102
const url = await page.url();
97103
expect(url).toContain('?tab=verified');
98104
});
105+
106+
it('should handle user card clicks and apply active_tab class to clicked card only in discord tab', async () => {
107+
await page.goto(`${BASE_URL}/users/discord/?tab=in_discord`);
108+
await page.waitForNetworkIdle();
109+
await page.waitForSelector('.user_card[data-key]');
110+
const userCardTestIds = await page.$$eval(
111+
'[data-testid^="user-card-"]',
112+
(cards) => cards.map((card) => card.getAttribute('data-testid')),
113+
);
114+
for (let i = 0; i < userCardTestIds.length; i++) {
115+
const userCardSelector = `[data-testid="${userCardTestIds[i]}"]`;
116+
const userCardElement = await page.$(userCardSelector);
117+
await userCardElement.click();
118+
await page.waitForTimeout(1000);
119+
const isActive = await page.evaluate((selector) => {
120+
return document
121+
.querySelector(selector)
122+
?.classList.contains('active_tab');
123+
}, userCardSelector);
124+
expect(isActive).toBe(true);
125+
}
126+
});
127+
128+
it('should handle user card clicks and apply active_tab class to clicked card only verified tab', async () => {
129+
await page.goto(`${BASE_URL}/users/discord/?tab=verified`);
130+
await page.waitForNetworkIdle();
131+
await page.waitForSelector('.user_card[data-key]');
132+
const userCardTestIds = await page.$$eval(
133+
'[data-testid^="user-card-"]',
134+
(cards) => cards.map((card) => card.getAttribute('data-testid')),
135+
);
136+
for (let i = 0; i < userCardTestIds.length; i++) {
137+
const userCardSelector = `[data-testid="${userCardTestIds[i]}"]`;
138+
const userCardElement = await page.$(userCardSelector);
139+
await userCardElement.click();
140+
await page.waitForTimeout(1000);
141+
const isActive = await page.evaluate((selector) => {
142+
return document
143+
.querySelector(selector)
144+
?.classList.contains('active_tab');
145+
}, userCardSelector);
146+
expect(isActive).toBe(true);
147+
}
148+
});
99149
});

users/discord/App.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@ const handleTabNavigation = async (e) => {
3737
}
3838
};
3939

40-
const handleUserSelected = (e) => {
41-
const selectedUserId =
42-
e.target?.getAttribute('data_key') ||
43-
e.target.parentElement?.getAttribute('data_key');
44-
45-
if (selectedUserId) {
46-
showUser = usersData[activeTab]?.findIndex(
47-
(user) => user.id === selectedUserId,
40+
const handleUserSelected = (userId) => {
41+
if (userId) {
42+
const selectedUserIndex = usersData[activeTab]?.findIndex(
43+
(user) => user.id === userId,
4844
);
49-
rerender(App(), window['root']);
45+
46+
if (selectedUserIndex !== -1) {
47+
showUser = selectedUserIndex;
48+
rerender(App(), window['root']);
49+
}
5050
}
5151
};
5252

users/discord/components/UsersSection.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export const UsersSection = ({ users, showUser, handleUserSelected }) => {
55
'aside',
66
{
77
class: 'users_section',
8-
onClick: handleUserSelected,
8+
99
'data-testid': 'users-section',
1010
},
1111
users?.map((user) => {
@@ -17,6 +17,7 @@ export const UsersSection = ({ users, showUser, handleUserSelected }) => {
1717
}`,
1818
'data-testid': `user-card-${user.id}`,
1919
'data-key': user.id,
20+
onclick: () => handleUserSelected(user.id),
2021
},
2122
[
2223
createElement('img', {

users/discord/utils/util.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
const API_BASE_URL =
2+
window.location.hostname === 'localhost'
3+
? 'https://staging-api.realdevsquad.com'
4+
: window.API_BASE_URL;
5+
16
export const getUsers = async (tab) => {
27
let URL = {
38
in_discord: `${API_BASE_URL}/users/search/?role=in_discord`,

0 commit comments

Comments
 (0)