Skip to content

Commit 6ff6183

Browse files
Merge pull request #4077 from OneCommunityGlobal/revert-4076-development
Revert "Frontend Release to Main [4.49]"
2 parents 2d942b3 + fb52488 commit 6ff6183

37 files changed

Lines changed: 2756 additions & 4090 deletions

eslint.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ module.exports = [
3434
// Ignore entire component folders
3535
'src/components/Badge/**',
3636
'src/components/SummaryManagement/**',
37-
'src/components/UserProfile/**',
37+
'src/components/TeamMemberTasks/**',
38+
'src/components/Teams/TeamMembersPopup.jsx',
3839
'src/components/Announcements/index.jsx',
3940
],
4041
},

package-lock.json

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
"@date-io/dayjs": "^3.2.0",
1414
"@emotion/react": "^11.8.1",
1515
"@emotion/styled": "^11.14.0",
16-
"@fortawesome/fontawesome-svg-core": "^6.7.2",
17-
"@fortawesome/free-brands-svg-icons": "^7.0.1",
16+
"@fortawesome/fontawesome-svg-core": "^6",
17+
"@fortawesome/free-brands-svg-icons": "^7.0.0",
1818
"@fortawesome/free-regular-svg-icons": "^6",
1919
"@fortawesome/free-solid-svg-icons": "^6.7.2",
20-
"@fortawesome/react-fontawesome": "^0.2.6",
20+
"@fortawesome/react-fontawesome": "^0.2.3",
2121
"@hello-pangea/dnd": "^18.0.1",
2222
"@mui/lab": "^7.0.0-beta.12",
2323
"@mui/material": "^7.1.0",

src/actions/projectMembers.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export const fetchProjectsWithActiveUsers = () => {
137137
/**
138138
* Call API to assign/ unassign project
139139
*/
140-
export const assignProject = (projectId, userId, operation, firstName, lastName, isActive) => {
140+
export const assignProject = (projectId, userId, operation, firstName, lastName) => {
141141
const request = axios.post(ENDPOINTS.PROJECT_MEMBER(projectId), {
142142
projectId,
143143
users: [
@@ -158,10 +158,9 @@ export const assignProject = (projectId, userId, operation, firstName, lastName,
158158
_id: userId,
159159
firstName,
160160
lastName,
161-
isActive
162161
}),
163162
);
164-
// dispatch(removeFoundUser(userId));
163+
dispatch(removeFoundUser(userId));
165164
} else {
166165
dispatch(deleteMember(userId));
167166
}
@@ -193,8 +192,8 @@ export const findProjectMembers = (_projectId, query) => {
193192
);
194193

195194
const list = Array.isArray(data) ? data
196-
: Array.isArray(data?.users) ? data.users
197-
: [];
195+
: Array.isArray(data?.users) ? data.users
196+
: [];
198197

199198
const assigned = new Set(getState().projectMembers.members.map(m => m._id));
200199
const users = list.map(u => ({ ...u, assigned: assigned.has(u._id) }));

src/components/ApplicantsChart/AgeChart.jsx

Lines changed: 15 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import {
99
LabelList,
1010
} from 'recharts';
1111

12-
function AgeChart({ data, compareLabel, darkMode }) {
12+
function AgeChart({ data, compareLabel }) {
1313
const formatTooltip = (value, name, props) => {
1414
const { change } = props.payload;
15+
let changeText = '';
1516
if (compareLabel && change !== undefined) {
16-
let changeText = '';
1717
if (change > 0) {
1818
changeText = `${change}% more than ${compareLabel}`;
1919
} else if (change < 0) {
@@ -27,56 +27,19 @@ function AgeChart({ data, compareLabel, darkMode }) {
2727
};
2828

2929
return (
30-
<div
31-
className={darkMode ? 'bg-oxford-blue text-light' : 'bg-white text-black'}
32-
style={{
33-
width: '100%', // take full available width
34-
maxWidth: '1000px', // optional: cap at some max width
35-
margin: '0 auto',
36-
padding: '20px',
37-
}}
38-
>
39-
<h2 style={{ color: darkMode ? '#fff' : '#000', textAlign: 'center' }}>
40-
Applicants Grouped by Age
41-
</h2>
42-
<div style={{ width: '100%', height: '60vh', minHeight: '350px' }}>
43-
<ResponsiveContainer width="100%" height="100%">
44-
<BarChart data={data} margin={{ top: 20, right: 30, left: 20, bottom: 40 }} barSize={60}>
45-
<CartesianGrid strokeDasharray="3 3" stroke={darkMode ? '#555' : '#ccc'} />
46-
<XAxis
47-
dataKey="ageGroup"
48-
label={{
49-
value: 'Age Group',
50-
position: 'insideBottom',
51-
offset: -5,
52-
fill: darkMode ? '#fff' : '#000',
53-
}}
54-
tick={{ fill: darkMode ? '#fff' : '#000' }}
55-
/>
56-
<YAxis
57-
label={{
58-
value: 'Number of Applicants',
59-
angle: -90,
60-
position: 'insideLeft',
61-
offset: -5,
62-
fill: darkMode ? '#fff' : '#000',
63-
}}
64-
tick={{ fill: darkMode ? '#fff' : '#000' }}
65-
/>
66-
<Tooltip
67-
formatter={formatTooltip}
68-
contentStyle={{
69-
backgroundColor: darkMode ? '#fff' : '#fff',
70-
color: darkMode ? '#000' : '#000',
71-
border: `1px solid ${darkMode ? '#555' : '#ccc'}`,
72-
}}
73-
/>
74-
<Bar dataKey="applicants" fill={darkMode ? '#60a5fa' : '#3b82f6'}>
75-
<LabelList dataKey="applicants" position="top" fill={darkMode ? '#fff' : '#000'} />
76-
</Bar>
77-
</BarChart>
78-
</ResponsiveContainer>
79-
</div>
30+
<div style={{ width: '800px', height: 500, margin: '0 auto', padding: '20px' }}>
31+
<h2>Applicants grouped by Age</h2>
32+
<ResponsiveContainer width="100%" height="100%">
33+
<BarChart data={data} margin={{ top: 20, right: 30, left: 20, bottom: 20 }} barSize={80}>
34+
<CartesianGrid strokeDasharray="3 3" />
35+
<XAxis dataKey="ageGroup" />
36+
<YAxis />
37+
<Tooltip formatter={formatTooltip} />
38+
<Bar dataKey="applicants" fill="#3b82f6">
39+
<LabelList dataKey="applicants" position="top" />
40+
</Bar>
41+
</BarChart>
42+
</ResponsiveContainer>
8043
</div>
8144
);
8245
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import {
2+
BarChart,
3+
Bar,
4+
XAxis,
5+
YAxis,
6+
CartesianGrid,
7+
Tooltip,
8+
ResponsiveContainer,
9+
LabelList,
10+
} from 'recharts';
11+
12+
const data = [
13+
{ ageGroup: '18 - 21', applicants: 25, change: 10 },
14+
{ ageGroup: '21 - 24', applicants: 60, change: -5 },
15+
{ ageGroup: '24 - 27', applicants: 45, change: 15 },
16+
{ ageGroup: '27 - 30', applicants: 7, change: -3 },
17+
{ ageGroup: '30 - 33', applicants: 10, change: 0 },
18+
];
19+
20+
function ApplicantsChartPage() {
21+
const formatTooltip = (value, name, props) => {
22+
const { change } = props.payload;
23+
let changeText = '';
24+
if (change > 0) {
25+
changeText = `${change}% more than last week`;
26+
} else if (change < 0) {
27+
changeText = `${Math.abs(change)}% less than last week`;
28+
} else {
29+
changeText = `No change from last week`;
30+
}
31+
return [`${value} (${changeText})`, 'Applicants'];
32+
};
33+
34+
return (
35+
<div style={{ width: '800px', height: 500, margin: '0 auto', padding: '20px' }}>
36+
<h2>Applicants grouped by Age</h2>
37+
<ResponsiveContainer width="100%" height="100%">
38+
<BarChart data={data} margin={{ top: 20, right: 30, left: 20, bottom: 20 }} barSize={80}>
39+
<CartesianGrid strokeDasharray="3 3" />
40+
<XAxis
41+
dataKey="ageGroup"
42+
label={{ value: 'Age Group', position: 'insideBottom', offset: -10 }}
43+
/>
44+
<YAxis label={{ value: 'Applicants', angle: -90, position: 'insideLeft' }} />
45+
<Tooltip formatter={formatTooltip} />
46+
<Bar dataKey="applicants" fill="#3b82f6">
47+
<LabelList dataKey="applicants" position="top" />
48+
</Bar>
49+
</BarChart>
50+
</ResponsiveContainer>
51+
</div>
52+
);
53+
}
54+
55+
export default ApplicantsChartPage;

src/components/ApplicantsChart/TimeFilter.jsx

Lines changed: 41 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2,98 +2,63 @@ import { useState, useEffect } from 'react';
22
import DatePicker from 'react-datepicker';
33
import 'react-datepicker/dist/react-datepicker.css';
44

5-
function TimeFilter({ onFilterChange, darkMode }) {
5+
function TimeFilter({ onFilterChange }) {
66
const [selectedOption, setSelectedOption] = useState('weekly');
77
const [startDate, setStartDate] = useState(null);
88
const [endDate, setEndDate] = useState(null);
9-
const [error, setError] = useState('');
109

1110
useEffect(() => {
12-
if (selectedOption === 'custom' && startDate && endDate) {
13-
if (startDate > endDate) {
14-
setError('🚨 Start date cannot be after end date.');
15-
return;
16-
} else {
17-
setError('');
18-
}
19-
} else {
20-
setError('');
21-
}
22-
23-
onFilterChange({ selectedOption, startDate, endDate, error: '' });
11+
onFilterChange({ selectedOption, startDate, endDate });
2412
}, [selectedOption, startDate, endDate]);
2513

2614
return (
2715
<div
2816
style={{
2917
display: 'flex',
30-
flexDirection: 'column',
18+
justifyContent: 'center',
3119
alignItems: 'center',
32-
gap: '12px',
20+
gap: '16px',
3321
margin: '20px auto',
22+
flexWrap: 'wrap',
3423
}}
3524
>
36-
{/* Top row */}
37-
<div style={{ display: 'flex', gap: '12px', flexWrap: 'wrap', alignItems: 'center' }}>
38-
<label
39-
htmlFor="timeFilterSelect"
40-
style={{
41-
fontWeight: 600,
42-
color: darkMode ? '#fff' : '#000',
43-
}}
44-
>
45-
Time Filter:
46-
</label>
47-
48-
<select
49-
id="timeFilterSelect"
50-
value={selectedOption}
51-
onChange={e => setSelectedOption(e.target.value)}
52-
style={{
53-
padding: '6px 12px',
54-
borderRadius: '4px',
55-
border: '1px solid #ccc',
56-
fontSize: '14px',
57-
}}
58-
>
59-
<option value="weekly">Weekly</option>
60-
<option value="monthly">Monthly</option>
61-
<option value="yearly">Yearly</option>
62-
<option value="custom">Custom Dates</option>
63-
</select>
64-
65-
{selectedOption === 'custom' && (
66-
<>
67-
<DatePicker
68-
selected={startDate}
69-
onChange={date => setStartDate(date)}
70-
placeholderText="Start Date"
71-
dateFormat="yyyy/MM/dd"
72-
/>
73-
<span style={{ color: darkMode ? '#fff' : '#000' }}>to</span>
74-
<DatePicker
75-
selected={endDate}
76-
onChange={date => setEndDate(date)}
77-
placeholderText="End Date"
78-
dateFormat="yyyy/MM/dd"
79-
/>
80-
</>
81-
)}
82-
</div>
25+
<label htmlFor="timeFilterSelect" style={{ fontWeight: 500 }}>
26+
Time Filter:
27+
</label>
28+
<select
29+
id="timeFilterSelect"
30+
value={selectedOption}
31+
onChange={e => setSelectedOption(e.target.value)}
32+
style={{
33+
padding: '6px 12px',
34+
borderRadius: '4px',
35+
border: '1px solid #ccc',
36+
fontSize: '14px',
37+
}}
38+
>
39+
<option value="weekly">Weekly</option>
40+
<option value="monthly">Monthly</option>
41+
<option value="yearly">Yearly</option>
42+
<option value="custom">Custom Dates</option>
43+
</select>
8344

84-
{/* Error message */}
85-
{error && (
86-
<p
87-
style={{
88-
color: 'red',
89-
fontSize: '18px',
90-
fontWeight: '600',
91-
textAlign: 'center',
92-
marginTop: '8px',
93-
}}
94-
>
95-
{error}
96-
</p>
45+
{selectedOption === 'custom' && (
46+
<>
47+
<DatePicker
48+
selected={startDate}
49+
onChange={date => setStartDate(date)}
50+
placeholderText="Start Date"
51+
dateFormat="yyyy/MM/dd"
52+
style={{ marginRight: '10px' }}
53+
/>
54+
<span>to</span>
55+
<DatePicker
56+
selected={endDate}
57+
onChange={date => setEndDate(date)}
58+
placeholderText="End Date"
59+
dateFormat="yyyy/MM/dd"
60+
/>
61+
</>
9762
)}
9863
</div>
9964
);

0 commit comments

Comments
 (0)