Skip to content

Commit 77d07da

Browse files
Merge pull request #3882 from OneCommunityGlobal/shashank-madan-change-css-to-module-css
Shashank madan change css to module css
2 parents ecbf0bc + ba0d769 commit 77d07da

62 files changed

Lines changed: 4401 additions & 10283 deletions

File tree

Some content is hidden

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

package-lock.json

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

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"dependencies": {
1010
"@babel/runtime": "^7.27.6",
1111
"@babel/runtime-corejs3": "^7.27.6",
12+
"@changey/react-leaflet-markercluster": "^4.0.0-rc1",
1213
"@date-io/dayjs": "^3.2.0",
1314
"@emotion/react": "^11.8.1",
1415
"@emotion/styled": "^11.14.0",
@@ -81,7 +82,6 @@
8182
"react-dom": "^18.3.1",
8283
"react-icons": "^4.12.0",
8384
"react-leaflet": "4.2.1",
84-
"react-leaflet-cluster": "^3.1.1",
8585
"react-multi-select-component": "^4.0.2",
8686
"react-phone-input-2": "^2.14.0",
8787
"react-redux": "^7.2.0",
@@ -106,7 +106,6 @@
106106
"redux-concatenate-reducers": "^1.0.0",
107107
"redux-persist": "^5.10.0",
108108
"redux-thunk": "^2.4.2",
109-
"reselect": "^5.1.1",
110109
"semver": "^7.7.2",
111110
"stream-browserify": "^3.0.0",
112111
"tinymce": "^7.2.0",

public/avatar.png

-15.4 KB
Binary file not shown.

src/__tests__/mockStates.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -593,8 +593,8 @@ export const userProfileMock = {
593593
},
594594
mediaUrl: 'http://dropbox.com',
595595
weeklySummariesCount: 0,
596-
savedTangibleHrs: [
597-
0, 0, 0, 0, 0, 0, 0, 0
596+
savedTangibleHrs:[
597+
0,0,0,0,0,0,0,0
598598
],
599599
};
600600

@@ -1095,7 +1095,6 @@ export const rolesMock = {
10951095
'swapTask',
10961096
'deleteTask',
10971097
'updateNum',
1098-
'viewTaskExtensionCount',
10991098
// Teams
11001099
'postTeam',
11011100
'deleteTeam',
@@ -1255,7 +1254,6 @@ export const rolesMock = {
12551254
'updateTask',
12561255
'swapTask',
12571256
'deleteTask',
1258-
'viewTaskExtensionCount',
12591257
'postTeam',
12601258
'deleteTeam',
12611259
'putTeam',
@@ -1329,9 +1327,9 @@ export const createAuthMocks = (permissions) => {
13291327
frontPermissions: []
13301328
},
13311329
firstName: 'Dev',
1332-
profilePic: ''
1330+
profilePic:''
13331331
};
1334-
const onlyPermissions = { ...authTemplate, permissions: { frontPermissions: permissions } };
1335-
const allOtherPermissions = { ...authTemplate, permissions: { frontPermissions: allPermissionsExcept(permissions) } };
1332+
const onlyPermissions = {...authTemplate, permissions: {frontPermissions: permissions}};
1333+
const allOtherPermissions = {...authTemplate, permissions: {frontPermissions: allPermissionsExcept(permissions)}};
13361334
return [onlyPermissions, allOtherPermissions];
13371335
};

src/components/ApplicantVolunteerRatio/ApplicantVolunteerRatio.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ function ApplicantVolunteerRatio() {
3030
// Set all roles as selected by default
3131
setSelectedRoles(roleOptions);
3232
} catch (err) {
33-
// Error fetching all roles
33+
console.error('Error fetching all roles:', err);
3434
setError('Failed to load roles. Please try again.');
3535
}
3636
};
@@ -73,7 +73,7 @@ function ApplicantVolunteerRatio() {
7373

7474
setData(transformedData);
7575
} catch (err) {
76-
// Error fetching applicant volunteer ratio data
76+
console.error('Error fetching applicant volunteer ratio data:', err);
7777
setError('Failed to load data. Please try again.');
7878
} finally {
7979
setLoading(false);
Lines changed: 60 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
/* eslint-disable */
2-
/* prettier-ignore */
3-
1+
/* eslint-disable */ /* prettier-ignore */
42
import { useState, useEffect } from 'react';
53
import { Bar } from 'react-chartjs-2';
64
import { Chart as ChartJS, BarElement, CategoryScale, LinearScale, Tooltip, Title } from 'chart.js';
75
import axios from 'axios';
86
import Select from 'react-select';
97
import DatePicker from 'react-datepicker';
108

9+
import styles from './LessonsLearntChart.module.css';
1110
import 'react-datepicker/dist/react-datepicker.css';
12-
import './LessonsLearntChart.css';
1311

1412
ChartJS.register(BarElement, CategoryScale, LinearScale, Tooltip, Title);
1513

@@ -45,146 +43,92 @@ const useLessonsData = (selectedProjects, startDate, endDate) => {
4543
setIsLoading(false);
4644
}
4745
};
48-
4946
fetchLessons();
5047
}, [selectedProjects, startDate, endDate]);
5148

5249
return { allProjects, lessonsData, isLoading };
5350
};
5451

5552
function ChartTitle({ title }) {
56-
return <h2 style={{ fontSize: '1.5rem', marginBottom: '1rem' }}>{title}</h2>;
53+
return <h2 className={styles.chartTitle}>{title}</h2>;
5754
}
5855

59-
function Filters({
60-
allProjects,
61-
selectedProjects,
62-
setSelectedProjects,
63-
startDate,
64-
setStartDate,
65-
endDate,
66-
setEndDate,
67-
}) {
68-
return (
69-
<div className="filter-row">
70-
<div className="filter">
71-
<label>Project:</label>
72-
<Select
73-
options={allProjects?.map(p => ({ label: p.name, value: p.id })) || []}
74-
isMulti
75-
placeholder="All"
76-
onChange={setSelectedProjects}
77-
/>
78-
</div>
79-
<div className="filter">
80-
<label>From:</label>
81-
<DatePicker
82-
selected={startDate}
83-
onChange={setStartDate}
84-
selectsStart
85-
startDate={startDate}
86-
endDate={endDate}
87-
placeholderText="Start Date"
88-
/>
89-
</div>
90-
<div className="filter">
91-
<label>To:</label>
92-
<DatePicker
93-
selected={endDate}
94-
onChange={setEndDate}
95-
selectsEnd
96-
startDate={startDate}
97-
endDate={endDate}
98-
placeholderText="End Date"
99-
/>
100-
</div>
101-
</div>
102-
);
103-
}
56+
export default function LessonsLearntChart() {
57+
const [selectedProjects, setSelectedProjects] = useState([]);
58+
const [startDate, setStartDate] = useState(null);
59+
const [endDate, setEndDate] = useState(null);
10460

105-
const PercentageLabels = ({ data }) => {
106-
return (
107-
<div className="percentage-labels">
108-
{data?.map(item => (
109-
<div
110-
key={item.id || item.name} // use a stable, unique identifier
111-
className="percentage-label"
112-
style={{ left: `${(data.indexOf(item) + 0.5) * (100 / data.length)}%` }}
113-
>
114-
{item.trend > 0 ? `+${item.trend}%` : `${item.trend}%`}
115-
</div>
116-
))}
117-
</div>
61+
const { allProjects, lessonsData, isLoading } = useLessonsData(
62+
selectedProjects,
63+
startDate,
64+
endDate,
11865
);
119-
};
12066

121-
const LessonsBarChart = ({ data, isLoading }) => {
67+
const handleProjectChange = selected => {
68+
setSelectedProjects(selected || []);
69+
};
70+
12271
const chartData = {
123-
labels: data?.map(item => item.project) || [],
72+
labels: lessonsData.map(d => d.projectName),
12473
datasets: [
12574
{
126-
label: 'No. of Lessons Learnt',
127-
data: data?.map(item => item.count) || [],
128-
backgroundColor: '#4F46E5',
129-
borderRadius: 4,
75+
label: 'Lessons Learnt',
76+
data: lessonsData.map(d => d.percentage),
77+
backgroundColor: '#10b981',
13078
},
13179
],
13280
};
13381

13482
const chartOptions = {
13583
responsive: true,
13684
plugins: {
137-
tooltip: {
138-
callbacks: {
139-
label: () => 'Click to view the Tags',
140-
},
85+
title: {
86+
display: false,
14187
},
14288
},
143-
onClick: (_, elements) => {
144-
if (elements.length > 0) {
145-
const index = elements[0].index;
146-
const project = chartData.labels[index];
147-
window.location.href = `/project-issues/${project}`;
148-
}
149-
},
15089
};
15190

152-
if (isLoading) return <div className="loading">Loading...</div>;
153-
15491
return (
155-
<div className="chart-wrapper">
156-
<Bar data={chartData} options={chartOptions} />
157-
<PercentageLabels data={data} />
158-
</div>
159-
);
160-
};
161-
162-
const LessonsLearntChart = () => {
163-
const [selectedProjects, setSelectedProjects] = useState([]);
164-
const [startDate, setStartDate] = useState(null);
165-
const [endDate, setEndDate] = useState(null);
92+
<div className={styles.chartContainer}>
93+
<ChartTitle title="Lessons Learnt" />
16694

167-
const { allProjects, lessonsData, isLoading } = useLessonsData(
168-
selectedProjects,
169-
startDate,
170-
endDate,
171-
);
95+
<div className={styles.filterRow}>
96+
<div className={styles.filter}>
97+
<label>Select Projects</label>
98+
<Select
99+
isMulti
100+
options={allProjects.map(proj => ({
101+
value: proj.id,
102+
label: proj.name,
103+
}))}
104+
value={selectedProjects}
105+
onChange={handleProjectChange}
106+
/>
107+
</div>
108+
<div className={styles.filter}>
109+
<label>From</label>
110+
<DatePicker selected={startDate} onChange={date => setStartDate(date)} />
111+
</div>
112+
<div className={styles.filter}>
113+
<label>To</label>
114+
<DatePicker selected={endDate} onChange={date => setEndDate(date)} />
115+
</div>
116+
</div>
172117

173-
return (
174-
<div className="chart-container">
175-
<ChartTitle title="Lessons Learnt" />
176-
<Filters
177-
allProjects={allProjects}
178-
selectedProjects={selectedProjects}
179-
setSelectedProjects={setSelectedProjects}
180-
startDate={startDate}
181-
setStartDate={setStartDate}
182-
endDate={endDate}
183-
setEndDate={setEndDate}
184-
/>
185-
<LessonsBarChart data={lessonsData} isLoading={isLoading} />
118+
<div className={styles.chartWrapper}>
119+
{isLoading ? <p>Loading...</p> : <Bar data={chartData} options={chartOptions} />}
120+
<div className={styles.percentageLabels}>
121+
{lessonsData.map((d, idx) => (
122+
<span
123+
key={idx}
124+
className={styles.percentageLabel}
125+
style={{ left: `${(idx + 0.5) * (100 / lessonsData.length)}%` }}
126+
>
127+
{d.percentage}%
128+
</span>
129+
))}
130+
</div>
131+
</div>
186132
</div>
187133
);
188-
};
189-
190-
export default LessonsLearntChart;
134+
}

0 commit comments

Comments
 (0)