Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
8264483
add the promotion table page
KH07 Aug 6, 2025
d40e4d9
add a route
KH07 Aug 6, 2025
41cf93c
Revert unintended changes to yarn.lock
KH07 Aug 6, 2025
0400436
add dark mode support for CSS
KH07 Aug 23, 2025
00e54d0
add a wrapper
KH07 Aug 23, 2025
cd31961
make jsx use the wrapper
KH07 Aug 23, 2025
04fe05f
add dark mode support in jsx
KH07 Aug 23, 2025
b2f2453
UI changes
KH07 Aug 24, 2025
fd7c998
add a media layout for mobile view
KH07 Aug 24, 2025
65b6ed7
Kanishk attempted fix at white screen issue
kanishkagarwal6101 Sep 5, 2025
8bf7d4b
make header text contrasty in dark mode
KH07 Sep 9, 2025
b92ff17
enforce button colors
KH07 Sep 9, 2025
1775a70
basic structure ready
Oct 18, 2025
eba3284
Merge branch 'development' into kristin-add-promotion-table-new-dev
KH07 Oct 31, 2025
25e9894
getting the frontend ready for backend connection
Oct 31, 2025
12970dd
convert .css to module.css
KH07 Oct 31, 2025
7500014
Merge branch 'kristin-add-promotion-table-new-dev' of github.com:OneC…
KH07 Oct 31, 2025
1ee09b7
convert .css to module.css
KH07 Oct 31, 2025
fdd0ba6
change green button color to meet minimal contrast requirement
KH07 Nov 1, 2025
1e81d6e
add comments before dummy data creation to safely pass SonarCloud pse…
KH07 Nov 1, 2025
f8fd79e
add a seed function
KH07 Nov 1, 2025
ccc52a4
add a seeded random function for dummy data generation
KH07 Nov 1, 2025
6dd270a
refactor member section to reduce duplication
KH07 Nov 1, 2025
6369745
connecting backend to the frontend
Nov 2, 2025
0a3a250
adding darkmode and styling changes
Nov 8, 2025
5717c11
Update community calendar filters and event detail view
kanishkagarwal6101 Nov 11, 2025
e4179c6
adding basic initial setup for the widget
Nov 14, 2025
f767e5c
Enhanced Popularity Timeline Chart Frontend
adithya-6101 Nov 18, 2025
6e76253
feat: implemented enhanced role-based popularity visualization
adithya-6101 Nov 20, 2025
1a21f94
chore: resolve merge conflicts in lockfiles
adithya-6101 Nov 20, 2025
e43b4b8
chore: resolve merge conflicts in lockfiles
adithya-6101 Nov 20, 2025
e2953a0
made the frontend more robust and optimal
Nov 21, 2025
743df60
added darkmode
Nov 29, 2025
6c52721
adding new things on how the things are in the widgets
Dec 3, 2025
2700089
feat: Dark mode UI fix
adithya-6101 Dec 5, 2025
0a09fd4
feat: resolve merge conflicts
adithya-6101 Dec 5, 2025
ceb3987
feat: UI fixes
adithya-6101 Dec 9, 2025
15e2a4f
fix: resolve merge conflicts
adithya-6101 Dec 9, 2025
0a69a5b
Dark mode styling added
shashank-madan Dec 9, 2025
e363b97
feat: add comprehensive cross-tab logout synchronization
kanishkagarwal6101 Dec 11, 2025
28a0c10
Merge branch 'development' into kanishk_fix_for_white_screen_page
kanishkagarwal6101 Dec 12, 2025
ba4f233
fix: remove leftover merge conflict marker in App.jsx
kanishkagarwal6101 Dec 12, 2025
efeb0dc
fix: update SummaryBar to use CSS module import
kanishkagarwal6101 Dec 12, 2025
385a010
fix: prettier formatting in App.jsx
kanishkagarwal6101 Dec 12, 2025
ebb5d78
Merge remote-tracking branch 'origin/development' into bhavpreet_brow…
Dec 13, 2025
248a57a
fixing code issues
Dec 14, 2025
e25b7ec
Merge branch 'development' into shashank-madan-intermediate-tasks-dar…
shashank-madan Dec 14, 2025
fbf5871
feat: resolve merge conflicts and sync development
adithya-6101 Dec 16, 2025
bcde4df
Merge development into kanishk_finish_calendar_full_view - fix dark m…
kanishkagarwal6101 Dec 17, 2025
4bd95e9
Fix SonarQube issues: extract nested ternary, improve contrast ratios…
kanishkagarwal6101 Dec 17, 2025
5803622
fix: added global selectors to ensure consistent daark mode behaviour…
shashank-madan Dec 17, 2025
f88fd36
fixing frontend code issue and the connection issue
Dec 17, 2025
3816949
Merge remote-tracking branch 'origin/development' into bhavpreet_brow…
Dec 17, 2025
0e24aa7
Finishing the feature
Dec 18, 2025
2a954e0
Merge remote-tracking branch 'origin/development' into bhavpreet_anal…
Dec 18, 2025
d6a6fa3
Merge remote-tracking branch 'origin/development' into bhavpreet_brow…
Dec 18, 2025
9b25d9c
fix(finalDay): Final Day Changes
DiyaWadhwani Dec 19, 2025
ee69926
chore(test): fixed related tests
DiyaWadhwani Dec 19, 2025
1b86612
feat: resolve merge conflicts
adithya-6101 Dec 20, 2025
5cb3c30
Merge pull request #3851 from OneCommunityGlobal/kristin-add-promotio…
one-community Dec 21, 2025
6eb903b
fixing color issue
Dec 21, 2025
e1e6534
Venkataramanan fix team member name to be aligned on top instead of c…
Dec 21, 2025
28c8ba1
Fix: duplicate align-items style
Dec 21, 2025
5af164a
Merge pull request #4601 from OneCommunityGlobal/venkataramanan_fix_t…
one-community Dec 22, 2025
163b3e8
Merge pull request #4576 from OneCommunityGlobal/bhavpreet_analytics_…
one-community Dec 22, 2025
f197457
Merge pull request #4370 from OneCommunityGlobal/kanishk_finish_calen…
one-community Dec 22, 2025
26d9871
Merge pull request #4024 from OneCommunityGlobal/kanishk_fix_for_whit…
one-community Dec 22, 2025
d7cb4f0
Merge pull request #4560 from OneCommunityGlobal/shashank-madan-inter…
one-community Dec 22, 2025
52b546c
Merge remote-tracking branch 'origin/development' into bhavpreet_brow…
Dec 22, 2025
1acc1b1
Merge pull request #4575 from OneCommunityGlobal/bhavpreet_browse_lp
one-community Dec 22, 2025
5fe6599
feat: resolve merge conflicts
adithya-6101 Dec 22, 2025
cdeab06
Revert "Bhavpreet: Make browse lesson plan"
one-community Dec 23, 2025
ab7fac8
Merge pull request #4609 from OneCommunityGlobal/revert-4575-bhavpree…
one-community Dec 23, 2025
47aa694
Revert "Kanishk attempted fix white screen bug on first visit to pages"
one-community Dec 23, 2025
40e2e9f
Merge pull request #4611 from OneCommunityGlobal/revert-4024-kanishk_…
one-community Dec 23, 2025
fb960fd
feat: resolve merge conflicts
adithya-6101 Dec 23, 2025
76ff3ab
Merge pull request #4416 from OneCommunityGlobal/adithya_impl_enhance…
one-community Dec 23, 2025
6457af2
Venkataramanan fix: filter bio status issue in weekly summary reports…
Dec 23, 2025
9a9fb15
Venkataramanan: fix filter by bio status yellow bar width
Dec 23, 2025
9fdef11
Merge pull request #4613 from OneCommunityGlobal/venkataramanan_fix_f…
one-community Dec 23, 2025
6757429
Merge pull request #4578 from OneCommunityGlobal/Diya_Fix_FinalDay
one-community Dec 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25,004 changes: 25,004 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

27 changes: 24 additions & 3 deletions src/actions/userManagement.js
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,7 @@ export const updateUserFinalDayStatusIsSet = (user, status, finalDayDate, isSet)
// Prepare patch data
const patchData = {
status,
endDate: finalDayDate
? moment.utc(finalDayDate).format('YYYY-MM-DD')
: undefined,
endDate: finalDayDate ? new Date(finalDayDate) : undefined,
isSet,
};

Expand All @@ -286,6 +284,29 @@ export const updateUserFinalDayStatusIsSet = (user, status, finalDayDate, isSet)
};
};

export const updateUserFinalDay = (user, finalDayDate, isSet) => {
return async dispatch => {
try {
const patchData = {
endDate: finalDayDate ? new Date(finalDayDate) : undefined,
isSet,
};
const response = await axios.patch(ENDPOINTS.UPDATE_USER_FINAL_DAY(user._id), patchData);

const updatedUserProfile = {
...user,
...response.data,
};

dispatch(userProfileUpdateAction(updatedUserProfile));
} catch (error) {
toast.error('Error updating user profile:', error);
throw new Error('Failed to update user profile.');
}
};
};


/**
* fetching all user profiles basic info
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,23 @@ function CalendarActivitySection() {
darkMode ? styles.calendarActivitySectionDarkMode : ''
}`}
>
<h2 className={`activity-header ${darkMode ? 'activity-header-dark-mode' : ''}`}>
<h2 className={`${styles.activityHeader} ${darkMode ? styles.activityHeaderDark : ''}`}>
Latest News
</h2>
<ul className={styles.calendarActivityList}>
{calendarActivities.map(activity => (
<li
key={activity.id}
className={`${styles.calendarActivityItem} ${
darkMode ? styles.calendarActivityItemDarkMode : ''
darkMode ? styles.calendarActivityItemDark : ''
}`}
>
<p className={`activity-message ${darkMode ? styles.activityMessageDarkMode : ''}`}>
<p
className={`${styles.activityMessage} ${darkMode ? styles.activityMessageDark : ''}`}
>
<strong>{activity.author}</strong>: {activity.message}
</p>
<small className={`activity-time ${darkMode ? styles.activityTimeDarkMode : ''}`}>
<small className={`${styles.activityTime} ${darkMode ? styles.activityTimeDark : ''}`}>
{activity.time}
</small>
</li>
Expand Down
190 changes: 186 additions & 4 deletions src/components/CommunityPortal/Calendar/CommunityCalendar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const TIMES = ['10:00 AM', '1:00 PM', '3:00 PM', '5:00 PM'];

function CommunityCalendar() {
const [filter, setFilter] = useState({ type: 'all', location: 'all', status: 'all' });
const [selectedDate, setSelectedDate] = useState(new Date());
const [selectedEvent, setSelectedEvent] = useState(null);
const [showEventModal, setShowEventModal] = useState(false);
const [overflowDate, setOverflowDate] = useState(null);
Expand Down Expand Up @@ -74,6 +75,40 @@ function CommunityCalendar() {
eventCache,
]);

const selectedDateEvents = useMemo(() => {
const dateKey = selectedDate?.toDateString();
if (!dateKey) {
return [];
}
return filteredEvents.filter(event => event.date.toDateString() === dateKey);
}, [filteredEvents, selectedDate]);

const formattedSelectedDate = useMemo(() => {
if (!selectedDate) {
return '';
}
return selectedDate.toLocaleDateString(undefined, {
weekday: 'long',
month: 'long',
day: 'numeric',
year: 'numeric',
});
}, [selectedDate]);

const handleDateSelect = useCallback(
date => {
setSelectedDate(date);
const eventsForDate = getEventsForDate(date);
if (eventsForDate.length > 0) {
setSelectedEvent(eventsForDate[0]);
} else {
setSelectedEvent(null);
}
setShowEventModal(false);
},
[getEventsForDate],
);

const handleEventClick = useCallback(event => {
setSelectedEvent(event);
setShowEventModal(true);
Expand Down Expand Up @@ -107,6 +142,27 @@ function CommunityCalendar() {
return () => document.removeEventListener('mousedown', handleClickOutside);
}, []);

useEffect(() => {
const eventsForDate = getEventsForDate(selectedDate);
if (eventsForDate.length === 0) {
if (selectedEvent !== null) {
setSelectedEvent(null);
}
if (showEventModal) {
setShowEventModal(false);
}
return;
}

const hasSelectedEvent = eventsForDate.some(event => event.id === selectedEvent?.id);
if (!hasSelectedEvent) {
setSelectedEvent(eventsForDate[0]);
if (showEventModal) {
setShowEventModal(false);
}
}
}, [getEventsForDate, selectedDate, selectedEvent, showEventModal]);

const statusMap = {
New: 'statusNew',
'Needs Attendees': 'statusNeedsAttendees',
Expand Down Expand Up @@ -158,9 +214,17 @@ function CommunityCalendar() {
);

const tileClassName = useCallback(
({ date, view }) =>
view === 'month' && eventCountByDate.has(date.toDateString()) ? styles.hasEvents : null,
[eventCountByDate],
({ date, view }) => {
const classNames = [];
if (view === 'month' && eventCountByDate.has(date.toDateString())) {
classNames.push(styles.hasEvents);
}
if (view === 'month' && selectedDate && date.toDateString() === selectedDate.toDateString()) {
classNames.push(styles.selectedDate);
}
return classNames.join(' ') || null;
},
[eventCountByDate, selectedDate],
);

const handleFilterChange = field => e =>
Expand Down Expand Up @@ -199,6 +263,57 @@ function CommunityCalendar() {

return (
<div className={calendarClasses.container}>
{/* Inline styles to ensure selected date number is visible in dark mode - force dark background */}
{darkMode && (
<style>
{`
/* CRITICAL: Force dark background on selected date in dark mode - override ALL react-calendar defaults */
.react-calendar__tile.selectedDate,
.react-calendar__tile.selectedDate.react-calendar__tile--active,
.react-calendar__tile.react-calendar__tile--active.selectedDate {
background-color: #1a2332 !important;
background: #1a2332 !important;
color: #ffffff !important;
}
.react-calendar__tile.selectedDate:hover,
.react-calendar__tile.selectedDate.react-calendar__tile--active:hover,
.react-calendar__tile.react-calendar__tile--active.selectedDate:hover {
background-color: #1a2332 !important;
background: #1a2332 !important;
color: #ffffff !important;
}
/* Force white text on dark background */
.react-calendar__tile.selectedDate abbr,
.react-calendar__tile.selectedDate abbr[title],
.react-calendar__tile.selectedDate > abbr,
.react-calendar__tile.selectedDate.react-calendar__tile--active abbr,
.react-calendar__tile.react-calendar__tile--active.selectedDate abbr {
color: #ffffff !important;
font-weight: 900 !important;
font-size: 1.2em !important;
text-shadow:
0 0 8px rgba(255, 255, 255, 1),
0 0 10px rgba(255, 255, 255, 0.9),
0 2px 4px rgba(0, 0, 0, 1),
0 4px 8px rgba(0, 0, 0, 0.9) !important;
-webkit-text-stroke: 0.6px rgba(255, 255, 255, 1) !important;
filter: brightness(1.8) contrast(1.5) !important;
opacity: 1 !important;
}
.react-calendar__tile.selectedDate:hover abbr,
.react-calendar__tile.selectedDate:hover abbr[title],
.react-calendar__tile.selectedDate.react-calendar__tile--active:hover abbr {
color: #ffffff !important;
filter: brightness(1.8) contrast(1.5) !important;
opacity: 1 !important;
}
/* But preserve event item colors */
.react-calendar__tile.selectedDate .eventItem {
color: inherit !important;
}
`}
</style>
)}
<header className={calendarClasses.header}>
<h1>Community Calendar</h1>
<div className={calendarClasses.filters}>
Expand Down Expand Up @@ -235,14 +350,81 @@ function CommunityCalendar() {
className={calendarClasses.reactCalendar}
tileContent={tileContent}
tileClassName={tileClassName}
onClickDay={handleDateSelect}
value={selectedDate}
/>
<section
className={`${styles.selectedDatePanel} ${
darkMode ? styles.selectedDatePanelDarkMode : ''
}`}
aria-live="polite"
>
<div className={styles.selectedDateHeader}>
<div>
<h2>{formattedSelectedDate || 'Select a date'}</h2>
<p className={styles.selectedDateSummary}>
{(() => {
if (selectedDateEvents.length === 0) {
return 'No events scheduled for this date';
}
const eventText = selectedDateEvents.length === 1 ? 'event' : 'events';
return `${selectedDateEvents.length} ${eventText} scheduled`;
})()}
</p>
</div>
</div>

{selectedDateEvents.length > 0 ? (
<ul className={styles.selectedEventList}>
{selectedDateEvents.map(event => {
const isActive = selectedEvent?.id === event.id;
return (
<li key={event.id}>
<article
className={`${styles.selectedEventCard} ${
darkMode ? styles.selectedEventCardDarkMode : ''
} ${isActive ? styles.selectedEventCardActive : ''}`}
>
<header className={styles.selectedEventHeader}>
<div>
<h3>{event.title}</h3>
<div className={styles.selectedEventMeta}>
<span>{event.time}</span>
<span>{event.location}</span>
<span>{event.type}</span>
<span>{event.status}</span>
</div>
</div>
<button
type="button"
className={styles.eventDetailButton}
onClick={() => handleEventClick(event)}
>
View full details
</button>
</header>
<p className={styles.selectedEventDescription}>{event.description}</p>
</article>
</li>
);
})}
</ul>
) : (
<div className={styles.noEventsMessage}>
<p>Select a different date or adjust the filters to see scheduled events.</p>
</div>
)}
</section>
</div>
</div>
</main>

{/* Overflow popup */}
{overflowDate && (
<div ref={popupRef} className={styles.overflowPopup}>
<div
ref={popupRef}
className={`${styles.overflowPopup} ${darkMode ? styles.overflowPopupDark : ''}`}
>
<div className={styles.overflowPopupInner}>
<h4>{overflowDate.toDateString()}</h4>
{getEventsForDate(overflowDate).map(e => (
Expand Down
Loading