Skip to content

Commit ea7851d

Browse files
Filter and Dropdown Buttons replaced with Customized Sorting Button (#3225)
* sorting btn created * tsdoc comment * sortbtn in orglist & people * sort btn in addMembers * orgTags * OrgVenues * orgActionItems with sort button * orgPost * block user * orgFunds * dropdown removed from settings * actionItemCategories * Event header * event attendance * volunteers * grp volunteer * vol. requests * fund camp pledge * manage tags * subtags * pledges * upcoming events in user portal * users * invitations * groups * actions * campaigns * leaderboard * organizationFundCamp * css changed * color issue fixed * eslint error removed * errors solved * tsdoc commented
1 parent b72d43f commit ea7851d

File tree

43 files changed

+934
-1545
lines changed

Some content is hidden

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

43 files changed

+934
-1545
lines changed

src/components/EventCalendar/EventHeader.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ describe('EventHeader Component', () => {
6969
fireEvent.click(getByTestId('eventType'));
7070

7171
await act(async () => {
72-
fireEvent.click(getByTestId('events'));
72+
fireEvent.click(getByTestId('Events'));
7373
});
7474

7575
expect(handleChangeView).toHaveBeenCalledTimes(1);

src/components/EventCalendar/EventHeader.tsx

Lines changed: 26 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import React, { useState } from 'react';
2-
import { Button, Dropdown, Form } from 'react-bootstrap';
2+
import { Button, Form } from 'react-bootstrap';
33
import { Search } from '@mui/icons-material';
44
import styles from '../../style/app.module.css';
55
import { ViewType } from '../../screens/OrganizationEvents/OrganizationEvents';
66
import { useTranslation } from 'react-i18next';
7+
import SortingButton from 'subComponents/SortingButton';
78

89
/**
910
* Props for the EventHeader component.
@@ -63,58 +64,30 @@ function eventHeader({
6364
</div>
6465
<div className={styles.flex_grow}></div>
6566
<div className={styles.space}>
66-
<div>
67-
<Dropdown
68-
onSelect={handleChangeView}
69-
className={styles.selectTypeEventHeader}
70-
>
71-
<Dropdown.Toggle
72-
id="dropdown-basic"
73-
className={styles.dropdown}
74-
data-testid="selectViewType"
75-
style={{ width: '100%' }}
76-
>
77-
{viewType}
78-
</Dropdown.Toggle>
79-
<Dropdown.Menu>
80-
<Dropdown.Item
81-
eventKey={ViewType.MONTH}
82-
data-testid="selectMonth"
83-
>
84-
{ViewType.MONTH}
85-
</Dropdown.Item>
86-
<Dropdown.Item eventKey={ViewType.DAY} data-testid="selectDay">
87-
{ViewType.DAY}
88-
</Dropdown.Item>
89-
<Dropdown.Item
90-
eventKey={ViewType.YEAR}
91-
data-testid="selectYear"
92-
>
93-
{ViewType.YEAR}
94-
</Dropdown.Item>
95-
</Dropdown.Menu>
96-
</Dropdown>
97-
</div>
98-
<div>
99-
<Dropdown className={styles.selectTypeEventHeader}>
100-
<Dropdown.Toggle
101-
id="dropdown-basic"
102-
className={styles.dropdown}
103-
data-testid="eventType"
104-
style={{ width: '100%' }}
105-
>
106-
{t('eventType')}
107-
</Dropdown.Toggle>
108-
<Dropdown.Menu>
109-
<Dropdown.Item eventKey="Events" data-testid="events">
110-
Events
111-
</Dropdown.Item>
112-
<Dropdown.Item eventKey="Workshops" data-testid="workshop">
113-
Workshops
114-
</Dropdown.Item>
115-
</Dropdown.Menu>
116-
</Dropdown>
117-
</div>
67+
<SortingButton
68+
title={t('viewType')}
69+
sortingOptions={[
70+
{ label: ViewType.MONTH, value: 'selectMonth' },
71+
{ label: ViewType.DAY, value: 'selectDay' },
72+
{ label: ViewType.YEAR, value: 'selectYear' },
73+
]}
74+
selectedOption={viewType}
75+
onSortChange={handleChangeView}
76+
dataTestIdPrefix="selectViewType"
77+
className={styles.dropdown}
78+
/>
79+
<SortingButton
80+
title={t('eventType')}
81+
sortingOptions={[
82+
{ label: 'Events', value: 'Events' },
83+
{ label: 'Workshops', value: 'Workshops' },
84+
]}
85+
selectedOption={t('eventType')}
86+
onSortChange={(value) => console.log(`Selected: ${value}`)}
87+
dataTestIdPrefix="eventType"
88+
className={styles.dropdown}
89+
buttonLabel={t('eventType')}
90+
/>
11891
<Button
11992
variant="success"
12093
className={styles.createButtonEventHeader}

src/components/EventManagement/EventAttendance/EventAttendance.spec.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,14 @@ describe('Event Attendance Component', () => {
103103
await wait();
104104

105105
const sortDropdown = screen.getByTestId('sort-dropdown');
106-
userEvent.click(sortDropdown);
107-
userEvent.click(screen.getByText('Sort'));
106+
userEvent.click(sortDropdown); // Open the sort dropdown
107+
108+
const sortOption = screen.getByText('Ascending'); // Assuming 'Ascending' is the option you choose for sorting
109+
userEvent.click(sortOption);
108110

109111
await waitFor(() => {
110112
const attendees = screen.getAllByTestId('attendee-name-0');
113+
// Check if the first attendee is 'Bruce Garza' after sorting
111114
expect(attendees[0]).toHaveTextContent('Bruce Garza');
112115
});
113116
});
@@ -117,10 +120,14 @@ describe('Event Attendance Component', () => {
117120

118121
await wait();
119122

120-
userEvent.click(screen.getByText('Filter: All'));
121-
userEvent.click(screen.getByText('This Month'));
123+
const filterDropdown = screen.getByTestId('filter-dropdown');
124+
userEvent.click(filterDropdown); // Open the filter dropdown
125+
126+
const filterOption = screen.getByText('This Month'); // Assuming 'This Month' is the option you choose for filtering
127+
userEvent.click(filterOption);
122128

123129
await waitFor(() => {
130+
// Check if the message 'Attendees not Found' is displayed
124131
expect(screen.getByText('Attendees not Found')).toBeInTheDocument();
125132
});
126133
});

src/components/EventManagement/EventAttendance/EventAttendance.tsx

Lines changed: 42 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,7 @@ import {
99
TableRow,
1010
Tooltip,
1111
} from '@mui/material';
12-
import {
13-
Button,
14-
Dropdown,
15-
DropdownButton,
16-
Table,
17-
FormControl,
18-
} from 'react-bootstrap';
12+
import { Button, Table, FormControl } from 'react-bootstrap';
1913
import styles from '../../../style/app.module.css';
2014
import { useLazyQuery } from '@apollo/client';
2115
import { EVENT_ATTENDEES } from 'GraphQl/Queries/Queries';
@@ -24,11 +18,14 @@ import { useTranslation } from 'react-i18next';
2418
import { AttendanceStatisticsModal } from './EventStatistics';
2519
import AttendedEventList from './AttendedEventList';
2620
import type { InterfaceMember } from './InterfaceEvents';
21+
import SortingButton from 'subComponents/SortingButton';
22+
2723
enum FilterPeriod {
2824
ThisMonth = 'This Month',
2925
ThisYear = 'This Year',
3026
All = 'All',
3127
}
28+
3229
/**
3330
* Component to manage and display event attendance information
3431
* Includes filtering and sorting functionality for attendees
@@ -153,18 +150,16 @@ function EventAttendance(): JSX.Element {
153150
memberData={filteredAttendees}
154151
t={t}
155152
/>
156-
<div className="d-flex justify-content-between">
157-
<div className="d-flex w-100">
158-
<Button
159-
className={`border-1 bg-white text-success ${styles.actionBtn}`}
160-
onClick={showModal}
161-
data-testid="stats-modal"
162-
>
163-
{t('historical_statistics')}
164-
</Button>
165-
</div>
166-
<div className="d-flex justify-content-between align-items-end w-100 ">
167-
<div className={styles.input}>
153+
<div className="d-flex justify-content-between align-items-center mb-3">
154+
<Button
155+
className={`border-1 bg-white text-success ${styles.actionBtn}`}
156+
onClick={showModal}
157+
data-testid="stats-modal"
158+
>
159+
{t('historical_statistics')}
160+
</Button>
161+
<div className="d-flex align-items-center">
162+
<div className={`${styles.input} me-3`}>
168163
<FormControl
169164
type="text"
170165
id="posttitle"
@@ -182,54 +177,37 @@ function EventAttendance(): JSX.Element {
182177
<Search size={20} />
183178
</Button>
184179
</div>
185-
186-
<DropdownButton
187-
data-testid="filter-dropdown"
188-
className={`border-1 mx-4`}
189-
title={
190-
<>
191-
<img
192-
src="/images/svg/up-down.svg"
193-
width={20}
194-
height={20}
195-
alt="Sort"
196-
className={styles.sortImg}
197-
/>
198-
<span className="ms-2">Filter: {filteringBy}</span>
199-
</>
200-
}
201-
onSelect={(eventKey) => setFilteringBy(eventKey as FilterPeriod)}
202-
>
203-
<Dropdown.Item eventKey="This Month">This Month</Dropdown.Item>
204-
<Dropdown.Item eventKey="This Year">This Year</Dropdown.Item>
205-
<Dropdown.Item eventKey="All">All</Dropdown.Item>
206-
</DropdownButton>
207-
<DropdownButton
208-
data-testid="sort-dropdown"
209-
className={`border-1 `}
210-
title={
211-
<>
212-
<img
213-
src="/images/svg/up-down.svg"
214-
width={20}
215-
height={20}
216-
alt="Sort"
217-
className={styles.sortImg}
218-
/>
219-
<span className="ms-2">Sort</span>
220-
</>
221-
}
222-
onSelect={
223-
/*istanbul ignore next*/
224-
(eventKey) => setSortOrder(eventKey as 'ascending' | 'descending')
180+
<SortingButton
181+
title="Filter"
182+
sortingOptions={[
183+
{
184+
label: FilterPeriod.ThisMonth,
185+
value: FilterPeriod.ThisMonth,
186+
},
187+
{ label: FilterPeriod.ThisYear, value: FilterPeriod.ThisYear },
188+
{ label: FilterPeriod.All, value: 'Filter: All' },
189+
]}
190+
selectedOption={filteringBy}
191+
onSortChange={(value) => setFilteringBy(value as FilterPeriod)}
192+
dataTestIdPrefix="filter-dropdown"
193+
className={`${styles.dropdown} mx-4`}
194+
buttonLabel="Filter"
195+
/>
196+
<SortingButton
197+
title="Sort"
198+
sortingOptions={[
199+
{ label: 'Ascending', value: 'ascending' },
200+
{ label: 'Descending', value: 'descending' },
201+
]}
202+
selectedOption={sortOrder}
203+
onSortChange={(value) =>
204+
setSortOrder(value as 'ascending' | 'descending')
225205
}
226-
>
227-
<Dropdown.Item eventKey="ascending">Ascending</Dropdown.Item>
228-
<Dropdown.Item eventKey="descending">Descending</Dropdown.Item>
229-
</DropdownButton>
206+
dataTestIdPrefix="sort-dropdown"
207+
buttonLabel="Sort"
208+
/>
230209
</div>
231210
</div>
232-
{/* <h3>{totalMembers}</h3> */}
233211
<TableContainer component={Paper} className="mt-3">
234212
<Table aria-label={t('event_attendance_table')} role="grid">
235213
<TableHead>

src/components/OrgSettings/ActionItemCategories/OrgActionItemCategories.spec.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ describe('Testing Organisation Action Item Categories', () => {
125125
// Filter by All
126126
fireEvent.click(filterBtn);
127127
await waitFor(() => {
128-
expect(screen.getByTestId('statusAll')).toBeInTheDocument();
128+
expect(screen.getByTestId('all')).toBeInTheDocument();
129129
});
130-
fireEvent.click(screen.getByTestId('statusAll'));
130+
fireEvent.click(screen.getByTestId('all'));
131131

132132
await waitFor(() => {
133133
expect(screen.getByText('Category 1')).toBeInTheDocument();
@@ -137,9 +137,9 @@ describe('Testing Organisation Action Item Categories', () => {
137137
// Filter by Disabled
138138
fireEvent.click(filterBtn);
139139
await waitFor(() => {
140-
expect(screen.getByTestId('statusDisabled')).toBeInTheDocument();
140+
expect(screen.getByTestId('disabled')).toBeInTheDocument();
141141
});
142-
fireEvent.click(screen.getByTestId('statusDisabled'));
142+
fireEvent.click(screen.getByTestId('disabled'));
143143
await waitFor(() => {
144144
expect(screen.queryByText('Category 1')).toBeNull();
145145
expect(screen.getByText('Category 2')).toBeInTheDocument();
@@ -154,9 +154,9 @@ describe('Testing Organisation Action Item Categories', () => {
154154

155155
fireEvent.click(filterBtn);
156156
await waitFor(() => {
157-
expect(screen.getByTestId('statusActive')).toBeInTheDocument();
157+
expect(screen.getByTestId('active')).toBeInTheDocument();
158158
});
159-
fireEvent.click(screen.getByTestId('statusActive'));
159+
fireEvent.click(screen.getByTestId('active'));
160160
await waitFor(() => {
161161
expect(screen.getByText('Category 1')).toBeInTheDocument();
162162
expect(screen.queryByText('Category 2')).toBeNull();

0 commit comments

Comments
 (0)