From d4a5f6c769c47ba6604cb410736a73774898051b Mon Sep 17 00:00:00 2001 From: Peterson Rodrigues dos Santos Date: Wed, 28 May 2025 16:17:21 -0300 Subject: [PATCH 01/15] Fix bug --- src/components/Badge/BadgeDevelopmentTable.jsx | 2 +- .../WBS/WBSDetail/components/__tests__/TagsSearch.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Badge/BadgeDevelopmentTable.jsx b/src/components/Badge/BadgeDevelopmentTable.jsx index 6d9a382e4d..f8de123c84 100644 --- a/src/components/Badge/BadgeDevelopmentTable.jsx +++ b/src/components/Badge/BadgeDevelopmentTable.jsx @@ -206,7 +206,7 @@ function BadgeDevelopmentTable(props) { }); }; - const filteredBadges = sortedBadges; + const filteredBadges = sortedBadges.filter(item => item.imageUrl !== null); const toggleCheckbox = id => { // prettier-ignore diff --git a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js index 71b8e1e181..1425bf9246 100644 --- a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js +++ b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js @@ -95,7 +95,7 @@ describe('TagsSearch Component', () => { }); }); - it('adds a resource when clicking a filtered member', async () => { + it.skip('adds a resource when clicking a filtered member', async () => { renderTagsSearchComponent(sampleProps); const searchInputElement = await screen.findByPlaceholderText('Add resources'); From 09980d97fda38719ad08efc9006a4f2a033b1cff Mon Sep 17 00:00:00 2001 From: Peterson Rodrigues dos Santos Date: Tue, 10 Jun 2025 14:38:51 -0300 Subject: [PATCH 02/15] update --- .../WBS/WBSDetail/components/__tests__/TagsSearch.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js index 1425bf9246..f8b10239d7 100644 --- a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js +++ b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js @@ -95,7 +95,7 @@ describe('TagsSearch Component', () => { }); }); - it.skip('adds a resource when clicking a filtered member', async () => { + it('adds a resource when clicking a filtered member', async () => { renderTagsSearchComponent(sampleProps); const searchInputElement = await screen.findByPlaceholderText('Add resources'); @@ -120,8 +120,8 @@ describe('TagsSearch Component', () => { // Check if addResources was called with the correct arguments await waitFor(() => { - expect(addResources).toHaveBeenCalledWith('aaa123', 'aaa', 'volunteer'); - expect(addResources).toHaveBeenCalledWith('aaa067', 'aaa', 'owner'); + expect(addResources).toHaveBeenCalledWith('aaa123', 'aaa', 'volunteer', undefined); + expect(addResources).toHaveBeenCalledWith('aaa067', 'aaa', 'owner', undefined); }); }); From b75190dc0bffafa1cde2ef6b897ee896c07f02a3 Mon Sep 17 00:00:00 2001 From: Peterson Rodrigues dos Santos Date: Wed, 11 Jun 2025 17:26:16 -0300 Subject: [PATCH 03/15] test --- .../WBS/WBSDetail/components/__tests__/TagsSearch.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js index f8b10239d7..1425bf9246 100644 --- a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js +++ b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js @@ -95,7 +95,7 @@ describe('TagsSearch Component', () => { }); }); - it('adds a resource when clicking a filtered member', async () => { + it.skip('adds a resource when clicking a filtered member', async () => { renderTagsSearchComponent(sampleProps); const searchInputElement = await screen.findByPlaceholderText('Add resources'); @@ -120,8 +120,8 @@ describe('TagsSearch Component', () => { // Check if addResources was called with the correct arguments await waitFor(() => { - expect(addResources).toHaveBeenCalledWith('aaa123', 'aaa', 'volunteer', undefined); - expect(addResources).toHaveBeenCalledWith('aaa067', 'aaa', 'owner', undefined); + expect(addResources).toHaveBeenCalledWith('aaa123', 'aaa', 'volunteer'); + expect(addResources).toHaveBeenCalledWith('aaa067', 'aaa', 'owner'); }); }); From ff1091450a7e7724e92395a0bfaadf4ed27e46ef Mon Sep 17 00:00:00 2001 From: Peterson Rodrigues dos Santos Date: Wed, 11 Jun 2025 17:39:39 -0300 Subject: [PATCH 04/15] Update TagsSearch.test.js --- .../WBS/WBSDetail/components/__tests__/TagsSearch.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js index 1425bf9246..71b8e1e181 100644 --- a/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js +++ b/src/components/Projects/WBS/WBSDetail/components/__tests__/TagsSearch.test.js @@ -95,7 +95,7 @@ describe('TagsSearch Component', () => { }); }); - it.skip('adds a resource when clicking a filtered member', async () => { + it('adds a resource when clicking a filtered member', async () => { renderTagsSearchComponent(sampleProps); const searchInputElement = await screen.findByPlaceholderText('Add resources'); From f3cc221339dfb0ba46ddbc562462372c681319d1 Mon Sep 17 00:00:00 2001 From: Jaden Date: Sun, 12 Jul 2026 00:27:01 -0400 Subject: [PATCH 05/15] Fix null imageUrl crash in EditBadgePopup and tighten filter to exclude undefined --- src/components/Badge/BadgeDevelopmentTable.jsx | 2 +- src/components/Badge/EditBadgePopup.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Badge/BadgeDevelopmentTable.jsx b/src/components/Badge/BadgeDevelopmentTable.jsx index f8de123c84..95c7ab4963 100644 --- a/src/components/Badge/BadgeDevelopmentTable.jsx +++ b/src/components/Badge/BadgeDevelopmentTable.jsx @@ -206,7 +206,7 @@ function BadgeDevelopmentTable(props) { }); }; - const filteredBadges = sortedBadges.filter(item => item.imageUrl !== null); + const filteredBadges = sortedBadges.filter(item => item.imageUrl != null); const toggleCheckbox = id => { // prettier-ignore diff --git a/src/components/Badge/EditBadgePopup.jsx b/src/components/Badge/EditBadgePopup.jsx index 61ea6d6193..0019a1241a 100644 --- a/src/components/Badge/EditBadgePopup.jsx +++ b/src/components/Badge/EditBadgePopup.jsx @@ -82,7 +82,7 @@ function EditBadgePopup(props) { setBadgeValues(props.badgeValues); setBadgeId(props.badgeValues ? props.badgeValues._id : null); setBadgeName(props.badgeValues ? props.badgeValues.badgeName : ''); - setImageUrl(props.badgeValues ? props.badgeValues.imageUrl : ''); + setImageUrl(props.badgeValues?.imageUrl ?? ''); setDescription(props.badgeValues ? props.badgeValues.description : ''); setRanking(props.badgeValues ? props.badgeValues.ranking : 0); setType(props.badgeValues ? props.badgeValues.type : 'Custom'); From b2ca149c3af02b315b27de44f2c9bcad0fcb30b2 Mon Sep 17 00:00:00 2001 From: Jaden Date: Sun, 12 Jul 2026 00:43:20 -0400 Subject: [PATCH 06/15] Remove unused react-input-range CSS import causing build failure --- src/components/Reports/PeopleReport/PeopleReport.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/Reports/PeopleReport/PeopleReport.jsx b/src/components/Reports/PeopleReport/PeopleReport.jsx index dfc4b2dfa6..5851616840 100644 --- a/src/components/Reports/PeopleReport/PeopleReport.jsx +++ b/src/components/Reports/PeopleReport/PeopleReport.jsx @@ -16,7 +16,6 @@ import { import { getUserProjects } from '../../../actions/userProjects'; import { getWeeklySummaries, updateWeeklySummaries } from '../../../actions/weeklySummaries'; -import 'react-input-range/lib/css/index.css'; import { getTimeEntriesForPeriod } from '../../../actions/timeEntries'; import InfringementsViz from '../InfringementsViz'; import TimeEntriesViz from '../TimeEntriesViz'; From aa9191b6781d170f5509f663fca92dad8f36b97b Mon Sep 17 00:00:00 2001 From: Jaden Date: Sun, 12 Jul 2026 01:03:30 -0400 Subject: [PATCH 07/15] Fix broken imports causing build failure - replace uninstalled packages with installed equivalents --- .../BMDashboard/LessonList/LessonCard.jsx | 2 +- .../WBS/WBSDetail/AddTask/AddTaskModal.jsx | 20 ++++++++----------- .../WBS/WBSDetail/EditTask/EditTaskModal.jsx | 16 ++++++--------- .../WBS/WBSDetail/ImportTask/ImportTask.jsx | 2 +- src/components/Reports/InfringementsViz.jsx | 2 +- .../Reports/TasksDetail/TasksDetail.jsx | 1 - .../TeamReport/components/ReportCharts.jsx | 2 +- .../components/TeamReportCharts.jsx | 2 +- .../components/TeamsReportCharts.jsx | 2 +- src/components/Reports/TimeEntriesViz.jsx | 2 +- .../TotalReport/TotalReportBarGraph.jsx | 2 +- .../SetupProfile/SetupProfileUserEntry.jsx | 4 +++- src/components/Timelog/TimeEntry.jsx | 2 +- .../QuickSetupModal/EditTitlesModal.jsx | 2 +- .../WeeklySummariesReport/FormattedReport.jsx | 2 +- src/components/common/Modal/Modal.jsx | 2 +- src/components/common/PieChart/PieChart.jsx | 2 +- .../common/PieChart/ProjectPieChart.jsx | 2 +- 18 files changed, 31 insertions(+), 38 deletions(-) diff --git a/src/components/BMDashboard/LessonList/LessonCard.jsx b/src/components/BMDashboard/LessonList/LessonCard.jsx index f07aa228f8..859605d742 100644 --- a/src/components/BMDashboard/LessonList/LessonCard.jsx +++ b/src/components/BMDashboard/LessonList/LessonCard.jsx @@ -5,7 +5,7 @@ import Nav from 'react-bootstrap/Nav'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faHeart } from '@fortawesome/free-regular-svg-icons'; import './LessonCard.css'; -import ReactHtmlParser from 'react-html-parser'; +import ReactHtmlParser from 'html-react-parser'; import { formatDateAndTime } from 'utils/formatDate'; import DeleteLessonCardPopUp from './DeleteLessonCardPopUp'; diff --git a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx index 688fd36316..76541df444 100644 --- a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx +++ b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx @@ -2,7 +2,6 @@ import React, { useState, useEffect, useRef } from 'react'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Row, Col } from 'reactstrap'; import { connect } from 'react-redux'; import ReactTooltip from 'react-tooltip'; -import DayPickerInput from 'react-day-picker/DayPickerInput'; import { Editor } from '@tinymce/tinymce-react'; import dateFnsFormat from 'date-fns/format'; import { boxStyle, boxStyleDark } from 'styles'; @@ -13,7 +12,6 @@ import { START_DATE_ERROR_MESSAGE, END_DATE_ERROR_MESSAGE, } from '../../../../../languages/en/messages.js'; -import 'react-day-picker/lib/style.css'; import '../../../../Header/DarkMode.css'; import TagsSearch from '../components/TagsSearch'; import './AddTaskModal.css'; @@ -760,11 +758,10 @@ function AddTaskModal(props) {
- changeDateStart(input.state.value)} + onChange={e => changeDateStart(e.target.value)} value={startedDate} />
{startDateError ? START_DATE_ERROR_MESSAGE : ''}
@@ -780,14 +777,13 @@ function AddTaskModal(props) { End Date - changeDateEnd(input.state.value)} + onChange={e => changeDateEnd(e.target.value)} value={dueDate} - inputProps={{ 'aria-label': 'End Date' }} // Add aria-label for accessibility + aria-label="End Date" />
{endDateError ? END_DATE_ERROR_MESSAGE : ''}
diff --git a/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx b/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx index 11c9a62bc5..e08b76d9b0 100644 --- a/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx +++ b/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx @@ -3,8 +3,6 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { connect } from 'react-redux'; import ReactTooltip from 'react-tooltip'; import { DUE_DATE_MUST_GREATER_THAN_START_DATE } from 'languages/en/messages'; -import DayPickerInput from 'react-day-picker/DayPickerInput'; -import 'react-day-picker/lib/style.css'; import dateFnsFormat from 'date-fns/format'; import dateFnsParse from 'date-fns/parse'; import parseISO from 'date-fns/parseISO'; @@ -841,11 +839,10 @@ function EditTaskModal(props) { {ReadOnlySectionWrapper(
- changeDateStart(input.state.value)} + onChange={e => changeDateStart(e.target.value)} value={startedDate ? dateFnsFormat(new Date(startedDate), FORMAT) : ''} />
@@ -864,11 +861,10 @@ function EditTaskModal(props) { {ReadOnlySectionWrapper(
- changeDateEnd(input.state.value)} + onChange={e => changeDateEnd(e.target.value)} value={dueDate ? dateFnsFormat(new Date(dueDate), FORMAT) : ''} />
diff --git a/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx b/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx index 7d31dd9aae..469f3e09f1 100644 --- a/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx +++ b/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx @@ -10,7 +10,7 @@ import { importTask } from './../../../../../actions/task'; import readXlsxFile from 'read-excel-file'; import { getPopupById } from './../../../../../actions/popupEditorAction'; import { TASK_IMPORT_POPUP_ID } from './../../../../../constants/popupId'; -import ReactHtmlParser from 'react-html-parser'; +import ReactHtmlParser from 'html-react-parser'; import { boxStyle, boxStyleDark } from 'styles'; import '../../../../Header/DarkMode.css' diff --git a/src/components/Reports/InfringementsViz.jsx b/src/components/Reports/InfringementsViz.jsx index 9042caf3f0..79f0c85df6 100644 --- a/src/components/Reports/InfringementsViz.jsx +++ b/src/components/Reports/InfringementsViz.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import { Button, Modal } from 'react-bootstrap'; import './PeopleReport/PeopleReport.css'; import { boxStyle, boxStyleDark } from '../../styles'; diff --git a/src/components/Reports/TasksDetail/TasksDetail.jsx b/src/components/Reports/TasksDetail/TasksDetail.jsx index 5b74de7998..5bbf981b26 100644 --- a/src/components/Reports/TasksDetail/TasksDetail.jsx +++ b/src/components/Reports/TasksDetail/TasksDetail.jsx @@ -3,7 +3,6 @@ import { useState, useEffect } from 'react'; import { Button } from 'react-bootstrap'; import Collapse from 'react-bootstrap/Collapse'; import EditTaskModal from '../../Projects/WBS/WBSDetail/EditTask/EditTaskModal'; -import 'react-table/react-table.css'; import './TasksDetail.css'; diff --git a/src/components/Reports/TeamReport/components/ReportCharts.jsx b/src/components/Reports/TeamReport/components/ReportCharts.jsx index 8df9984f25..278eed7081 100644 --- a/src/components/Reports/TeamReport/components/ReportCharts.jsx +++ b/src/components/Reports/TeamReport/components/ReportCharts.jsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-unused-vars import { React, useEffect } from 'react'; import './ReportCharts.css'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import { CHART_RADIUS, CHART_SIZE } from '../../../common/PieChart/constants'; import { generateArrayOfUniqColors } from '../../../common/PieChart/colorsGenerator'; import '../../../common/PieChart/PieChart.css'; diff --git a/src/components/Reports/TeamReport/components/TeamReportCharts.jsx b/src/components/Reports/TeamReport/components/TeamReportCharts.jsx index 264c15e862..8f6cac6e2e 100644 --- a/src/components/Reports/TeamReport/components/TeamReportCharts.jsx +++ b/src/components/Reports/TeamReport/components/TeamReportCharts.jsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-unused-vars import { React, useEffect } from 'react'; import './ReportCharts.css'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import { CHART_RADIUS, CHART_SIZE } from '../../../common/PieChart/constants'; import '../../../common/PieChart/PieChart.css'; import PieChartInfoDetail from './PieChartInfoDetail'; diff --git a/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx b/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx index e6a163bc51..2581b288b7 100644 --- a/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx +++ b/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-unused-vars import { React, useEffect, useState } from 'react'; import './ReportCharts.css'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import { CHART_RADIUS, CHART_SIZE } from '../../../common/PieChart/constants'; import '../../../common/PieChart/PieChart.css'; import PieChartInfoDetail from './PieChartInfoDetail'; diff --git a/src/components/Reports/TimeEntriesViz.jsx b/src/components/Reports/TimeEntriesViz.jsx index 637e36c32a..09bf7783e7 100644 --- a/src/components/Reports/TimeEntriesViz.jsx +++ b/src/components/Reports/TimeEntriesViz.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import { Button } from 'react-bootstrap'; import { boxStyle, boxStyleDark } from '../../styles'; diff --git a/src/components/Reports/TotalReport/TotalReportBarGraph.jsx b/src/components/Reports/TotalReport/TotalReportBarGraph.jsx index c108884bef..90680f5138 100644 --- a/src/components/Reports/TotalReport/TotalReportBarGraph.jsx +++ b/src/components/Reports/TotalReport/TotalReportBarGraph.jsx @@ -1,5 +1,5 @@ import { useEffect } from 'react'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import './TotalReportBarGraph.css'; function TotalReportBarGraph({ barData, range }) { diff --git a/src/components/SetupProfile/SetupProfileUserEntry.jsx b/src/components/SetupProfile/SetupProfileUserEntry.jsx index 9b5d6379e8..e6dbf89097 100644 --- a/src/components/SetupProfile/SetupProfileUserEntry.jsx +++ b/src/components/SetupProfile/SetupProfileUserEntry.jsx @@ -28,7 +28,9 @@ import { useDispatch } from 'react-redux'; import jwtDecode from 'jwt-decode'; import Image from 'react-bootstrap/Image'; import { toast } from 'react-toastify'; -import { tokenKey } from '../../config.json'; +import config from '../../config.json'; + +const { tokenKey } = config; import { setCurrentUser } from '../../actions/authActions'; import HomeCountryModal from './homeCountryModal'; import ProfilePictureModal from './profilePictureModal'; diff --git a/src/components/Timelog/TimeEntry.jsx b/src/components/Timelog/TimeEntry.jsx index 0f04ea6263..40a3d9d9bf 100644 --- a/src/components/Timelog/TimeEntry.jsx +++ b/src/components/Timelog/TimeEntry.jsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { Card, Row, Col } from 'reactstrap'; import { useDispatch, connect } from 'react-redux'; -import ReactHtmlParser from 'react-html-parser'; +import ReactHtmlParser from 'html-react-parser'; import moment from 'moment-timezone'; import './Timelog.css'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; diff --git a/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx b/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx index 30070eb144..bb0a63f19a 100644 --- a/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx +++ b/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap'; -import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; +import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd'; import { ENDPOINTS } from 'utils/URL'; import axios from 'axios'; diff --git a/src/components/WeeklySummariesReport/FormattedReport.jsx b/src/components/WeeklySummariesReport/FormattedReport.jsx index dc03af7824..bc29f324d8 100644 --- a/src/components/WeeklySummariesReport/FormattedReport.jsx +++ b/src/components/WeeklySummariesReport/FormattedReport.jsx @@ -5,7 +5,7 @@ import { useDispatch } from 'react-redux'; import PropTypes from 'prop-types'; import moment from 'moment'; import 'moment-timezone'; -import ReactHtmlParser from 'react-html-parser'; +import ReactHtmlParser from 'html-react-parser'; import { Link } from 'react-router-dom'; import { toast } from 'react-toastify'; import axios from 'axios'; diff --git a/src/components/common/Modal/Modal.jsx b/src/components/common/Modal/Modal.jsx index c5935c8396..554f12a639 100644 --- a/src/components/common/Modal/Modal.jsx +++ b/src/components/common/Modal/Modal.jsx @@ -11,7 +11,7 @@ import { InputGroupText, Input, } from 'reactstrap'; -import ReactHtmlParser from 'react-html-parser'; +import ReactHtmlParser from 'html-react-parser'; import { boxStyle, boxStyleDark } from 'styles'; import '../../Header/DarkMode.css'; diff --git a/src/components/common/PieChart/PieChart.jsx b/src/components/common/PieChart/PieChart.jsx index cbebedab28..e090f5eebd 100644 --- a/src/components/common/PieChart/PieChart.jsx +++ b/src/components/common/PieChart/PieChart.jsx @@ -1,6 +1,6 @@ /* eslint-disable no-restricted-globals */ import { useEffect, useState, useMemo } from 'react'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import { CHART_RADIUS, CHART_SIZE } from './constants'; import { generateArrayOfUniqColors } from './colorsGenerator'; import './UserProjectPieChart.css'; diff --git a/src/components/common/PieChart/ProjectPieChart.jsx b/src/components/common/PieChart/ProjectPieChart.jsx index 09c47a8142..9de20b52e0 100644 --- a/src/components/common/PieChart/ProjectPieChart.jsx +++ b/src/components/common/PieChart/ProjectPieChart.jsx @@ -1,6 +1,6 @@ /* eslint-disable no-restricted-globals */ import { useEffect, useState, useMemo } from 'react'; -import * as d3 from 'd3/dist/d3.min'; +import * as d3 from 'd3'; import { CHART_RADIUS, CHART_SIZE } from './constants'; import { generateArrayOfUniqColors } from './colorsGenerator'; import './UserProjectPieChart.css'; From e22fa663f25a5a099cb6cd290eb1e5c0997633f5 Mon Sep 17 00:00:00 2001 From: Jaden Date: Sun, 12 Jul 2026 01:10:14 -0400 Subject: [PATCH 08/15] Remove unused formatDate/parseDate functions and fix import order formatDate in AddTaskModal and formatDate/parseDate in EditTaskModal were only used as DayPickerInput props - now unused after removing that component. DateUtils was also undefined (came from react-day-picker). Fixed const declaration appearing between import statements in SetupProfileUserEntry. --- .../Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx | 2 -- .../WBS/WBSDetail/EditTask/EditTaskModal.jsx | 13 +------------ .../SetupProfile/SetupProfileUserEntry.jsx | 4 ++-- 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx index 76541df444..b891ed68bb 100644 --- a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx +++ b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx @@ -178,8 +178,6 @@ function AddTaskModal(props) { setAssigned(true); }; - const formatDate = (date, format, locale) => dateFnsFormat(date, format, { locale }); - const calHoursEstimate = (isOn = null) => { let currHoursMost = parseInt(hoursMost); let currHoursWorst = parseInt(hoursWorst); diff --git a/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx b/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx index e08b76d9b0..b1d00c9a35 100644 --- a/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx +++ b/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx @@ -175,18 +175,7 @@ function EditTaskModal(props) { } }, [startedDate, dueDate]); - const formatDate = (date, format) => { - // consistent timezone handling - const zonedDate = utcToZonedTime(date, TIMEZONE); - return dateFnsFormat(zonedDate, format); - }; - const parseDate = (str, format, locale) => { - const parsed = dateFnsParse(str, format, new Date(), { locale }); - if (DateUtils.isDate(parsed)) { - return parsed; - } - return undefined; - }; + const addLink = () => { setLinks([...links, link]); diff --git a/src/components/SetupProfile/SetupProfileUserEntry.jsx b/src/components/SetupProfile/SetupProfileUserEntry.jsx index e6dbf89097..8d71965f25 100644 --- a/src/components/SetupProfile/SetupProfileUserEntry.jsx +++ b/src/components/SetupProfile/SetupProfileUserEntry.jsx @@ -29,8 +29,6 @@ import jwtDecode from 'jwt-decode'; import Image from 'react-bootstrap/Image'; import { toast } from 'react-toastify'; import config from '../../config.json'; - -const { tokenKey } = config; import { setCurrentUser } from '../../actions/authActions'; import HomeCountryModal from './homeCountryModal'; import ProfilePictureModal from './profilePictureModal'; @@ -41,6 +39,8 @@ import './SetupProfileUserEntry.css'; import logo from '../../assets/images/logo.png'; import TimeZoneDropDown from '../UserProfile/TimeZoneDropDown'; +const { tokenKey } = config; + function SetupProfileUserEntry({ token, userEmail }) { const dispatch = useDispatch(); const history = useHistory(); From bc95aeebf2dba73ab0ba76024c1b0f475c668f2d Mon Sep 17 00:00:00 2001 From: Jaden Date: Sun, 12 Jul 2026 01:22:31 -0400 Subject: [PATCH 09/15] Fix SonarQube reliability bugs and remove unused imports/variables - PeopleReport: remove no-op toString() call, convert to early return - ImportTask: remove redundant onClick from inner span (parent Button handles it) - AddTaskModal: remove unused dateWarning state, Row/Col imports, duplicate react/messages imports, and unused DUE_DATE message constant --- .../Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx | 7 ++----- .../Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx | 2 +- src/components/Reports/PeopleReport/PeopleReport.jsx | 4 ++-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx index b891ed68bb..7fc000dc11 100644 --- a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx +++ b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx @@ -1,13 +1,11 @@ -import React, { useState, useEffect, useRef } from 'react'; -import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Row, Col } from 'reactstrap'; +import React, { useState, useEffect, useRef, useMemo } from 'react'; +import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { connect } from 'react-redux'; import ReactTooltip from 'react-tooltip'; import { Editor } from '@tinymce/tinymce-react'; import dateFnsFormat from 'date-fns/format'; import { boxStyle, boxStyleDark } from 'styles'; -import { useMemo } from 'react'; import { addNewTask } from '../../../../../actions/task'; -import { DUE_DATE_MUST_GREATER_THAN_START_DATE } from '../../../../../languages/en/messages'; import { START_DATE_ERROR_MESSAGE, END_DATE_ERROR_MESSAGE, @@ -104,7 +102,6 @@ function AddTaskModal(props) { const [modal, setModal] = useState(false); const [isLoading, setIsLoading] = useState(false); const [newTaskNum, setNewTaskNum] = useState('1'); - const [dateWarning, setDateWarning] = useState(false); const [hoursWarning, setHoursWarning] = useState(false); const priorityRef = useRef(null); diff --git a/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx b/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx index 469f3e09f1..a2031087bb 100644 --- a/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx +++ b/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx @@ -261,7 +261,7 @@ const ImportTask = props => { ); diff --git a/src/components/Reports/PeopleReport/PeopleReport.jsx b/src/components/Reports/PeopleReport/PeopleReport.jsx index 5851616840..1fe17b5317 100644 --- a/src/components/Reports/PeopleReport/PeopleReport.jsx +++ b/src/components/Reports/PeopleReport/PeopleReport.jsx @@ -318,8 +318,8 @@ class PeopleReport extends Component { } const [startdate] = Object.keys(dict); - if (startdate) { - startdate.toString(); + if (!startdate) { + return; } if (props.infringements.length > 0) { props.infringements.map((current, index) => ( From d68b0e9182b0066d3dcd603517fff0c85ae86f2b Mon Sep 17 00:00:00 2001 From: Jaden Date: Sun, 12 Jul 2026 01:23:57 -0400 Subject: [PATCH 10/15] Revert @hello-pangea/dnd to react-beautiful-dnd react-beautiful-dnd is in package.json; @hello-pangea/dnd is not, so the substitution was breaking the Netlify build. --- src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx b/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx index bb0a63f19a..30070eb144 100644 --- a/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx +++ b/src/components/UserProfile/QuickSetupModal/EditTitlesModal.jsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap'; -import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd'; +import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; import { ENDPOINTS } from 'utils/URL'; import axios from 'axios'; From 18cf5243d6f1cc1be7d1e7175cc6ff2a626b1b1a Mon Sep 17 00:00:00 2001 From: Jaden Date: Sun, 12 Jul 2026 01:29:24 -0400 Subject: [PATCH 11/15] Revert unnecessary import changes that broke Netlify build All swapped imports (react-html-parser, d3, react-day-picker, react-beautiful-dnd, react-input-range) are in package.json and installed on Netlify. Only the core badge management bug fix should be in this PR. --- .../BMDashboard/LessonList/LessonCard.jsx | 2 +- .../WBS/WBSDetail/AddTask/AddTaskModal.jsx | 29 ++++++++++++------- .../WBS/WBSDetail/EditTask/EditTaskModal.jsx | 29 ++++++++++++++----- .../WBS/WBSDetail/ImportTask/ImportTask.jsx | 4 +-- src/components/Reports/InfringementsViz.jsx | 2 +- .../Reports/PeopleReport/PeopleReport.jsx | 5 ++-- .../Reports/TasksDetail/TasksDetail.jsx | 1 + .../TeamReport/components/ReportCharts.jsx | 2 +- .../components/TeamReportCharts.jsx | 2 +- .../components/TeamsReportCharts.jsx | 2 +- src/components/Reports/TimeEntriesViz.jsx | 2 +- .../TotalReport/TotalReportBarGraph.jsx | 2 +- .../SetupProfile/SetupProfileUserEntry.jsx | 4 +-- src/components/Timelog/TimeEntry.jsx | 2 +- .../WeeklySummariesReport/FormattedReport.jsx | 2 +- src/components/common/Modal/Modal.jsx | 2 +- src/components/common/PieChart/PieChart.jsx | 2 +- .../common/PieChart/ProjectPieChart.jsx | 2 +- 18 files changed, 60 insertions(+), 36 deletions(-) diff --git a/src/components/BMDashboard/LessonList/LessonCard.jsx b/src/components/BMDashboard/LessonList/LessonCard.jsx index 859605d742..f07aa228f8 100644 --- a/src/components/BMDashboard/LessonList/LessonCard.jsx +++ b/src/components/BMDashboard/LessonList/LessonCard.jsx @@ -5,7 +5,7 @@ import Nav from 'react-bootstrap/Nav'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faHeart } from '@fortawesome/free-regular-svg-icons'; import './LessonCard.css'; -import ReactHtmlParser from 'html-react-parser'; +import ReactHtmlParser from 'react-html-parser'; import { formatDateAndTime } from 'utils/formatDate'; import DeleteLessonCardPopUp from './DeleteLessonCardPopUp'; diff --git a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx index 7fc000dc11..688fd36316 100644 --- a/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx +++ b/src/components/Projects/WBS/WBSDetail/AddTask/AddTaskModal.jsx @@ -1,15 +1,19 @@ -import React, { useState, useEffect, useRef, useMemo } from 'react'; -import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import React, { useState, useEffect, useRef } from 'react'; +import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Row, Col } from 'reactstrap'; import { connect } from 'react-redux'; import ReactTooltip from 'react-tooltip'; +import DayPickerInput from 'react-day-picker/DayPickerInput'; import { Editor } from '@tinymce/tinymce-react'; import dateFnsFormat from 'date-fns/format'; import { boxStyle, boxStyleDark } from 'styles'; +import { useMemo } from 'react'; import { addNewTask } from '../../../../../actions/task'; +import { DUE_DATE_MUST_GREATER_THAN_START_DATE } from '../../../../../languages/en/messages'; import { START_DATE_ERROR_MESSAGE, END_DATE_ERROR_MESSAGE, } from '../../../../../languages/en/messages.js'; +import 'react-day-picker/lib/style.css'; import '../../../../Header/DarkMode.css'; import TagsSearch from '../components/TagsSearch'; import './AddTaskModal.css'; @@ -102,6 +106,7 @@ function AddTaskModal(props) { const [modal, setModal] = useState(false); const [isLoading, setIsLoading] = useState(false); const [newTaskNum, setNewTaskNum] = useState('1'); + const [dateWarning, setDateWarning] = useState(false); const [hoursWarning, setHoursWarning] = useState(false); const priorityRef = useRef(null); @@ -175,6 +180,8 @@ function AddTaskModal(props) { setAssigned(true); }; + const formatDate = (date, format, locale) => dateFnsFormat(date, format, { locale }); + const calHoursEstimate = (isOn = null) => { let currHoursMost = parseInt(hoursMost); let currHoursWorst = parseInt(hoursWorst); @@ -753,10 +760,11 @@ function AddTaskModal(props) {
- changeDateStart(e.target.value)} + onDayChange={(day, mod, input) => changeDateStart(input.state.value)} value={startedDate} />
{startDateError ? START_DATE_ERROR_MESSAGE : ''}
@@ -772,13 +780,14 @@ function AddTaskModal(props) { End Date - changeDateEnd(e.target.value)} + onDayChange={(day, mod, input) => changeDateEnd(input.state.value)} value={dueDate} - aria-label="End Date" + inputProps={{ 'aria-label': 'End Date' }} // Add aria-label for accessibility />
{endDateError ? END_DATE_ERROR_MESSAGE : ''}
diff --git a/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx b/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx index b1d00c9a35..11c9a62bc5 100644 --- a/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx +++ b/src/components/Projects/WBS/WBSDetail/EditTask/EditTaskModal.jsx @@ -3,6 +3,8 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { connect } from 'react-redux'; import ReactTooltip from 'react-tooltip'; import { DUE_DATE_MUST_GREATER_THAN_START_DATE } from 'languages/en/messages'; +import DayPickerInput from 'react-day-picker/DayPickerInput'; +import 'react-day-picker/lib/style.css'; import dateFnsFormat from 'date-fns/format'; import dateFnsParse from 'date-fns/parse'; import parseISO from 'date-fns/parseISO'; @@ -175,7 +177,18 @@ function EditTaskModal(props) { } }, [startedDate, dueDate]); - + const formatDate = (date, format) => { + // consistent timezone handling + const zonedDate = utcToZonedTime(date, TIMEZONE); + return dateFnsFormat(zonedDate, format); + }; + const parseDate = (str, format, locale) => { + const parsed = dateFnsParse(str, format, new Date(), { locale }); + if (DateUtils.isDate(parsed)) { + return parsed; + } + return undefined; + }; const addLink = () => { setLinks([...links, link]); @@ -828,10 +841,11 @@ function EditTaskModal(props) { {ReadOnlySectionWrapper(
- changeDateStart(e.target.value)} + onDayChange={(day, mod, input) => changeDateStart(input.state.value)} value={startedDate ? dateFnsFormat(new Date(startedDate), FORMAT) : ''} />
@@ -850,10 +864,11 @@ function EditTaskModal(props) { {ReadOnlySectionWrapper(
- changeDateEnd(e.target.value)} + onDayChange={(day, mod, input) => changeDateEnd(input.state.value)} value={dueDate ? dateFnsFormat(new Date(dueDate), FORMAT) : ''} />
diff --git a/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx b/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx index a2031087bb..7d31dd9aae 100644 --- a/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx +++ b/src/components/Projects/WBS/WBSDetail/ImportTask/ImportTask.jsx @@ -10,7 +10,7 @@ import { importTask } from './../../../../../actions/task'; import readXlsxFile from 'read-excel-file'; import { getPopupById } from './../../../../../actions/popupEditorAction'; import { TASK_IMPORT_POPUP_ID } from './../../../../../constants/popupId'; -import ReactHtmlParser from 'html-react-parser'; +import ReactHtmlParser from 'react-html-parser'; import { boxStyle, boxStyleDark } from 'styles'; import '../../../../Header/DarkMode.css' @@ -261,7 +261,7 @@ const ImportTask = props => { ); diff --git a/src/components/Reports/InfringementsViz.jsx b/src/components/Reports/InfringementsViz.jsx index 79f0c85df6..9042caf3f0 100644 --- a/src/components/Reports/InfringementsViz.jsx +++ b/src/components/Reports/InfringementsViz.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import { Button, Modal } from 'react-bootstrap'; import './PeopleReport/PeopleReport.css'; import { boxStyle, boxStyleDark } from '../../styles'; diff --git a/src/components/Reports/PeopleReport/PeopleReport.jsx b/src/components/Reports/PeopleReport/PeopleReport.jsx index 1fe17b5317..dfc4b2dfa6 100644 --- a/src/components/Reports/PeopleReport/PeopleReport.jsx +++ b/src/components/Reports/PeopleReport/PeopleReport.jsx @@ -16,6 +16,7 @@ import { import { getUserProjects } from '../../../actions/userProjects'; import { getWeeklySummaries, updateWeeklySummaries } from '../../../actions/weeklySummaries'; +import 'react-input-range/lib/css/index.css'; import { getTimeEntriesForPeriod } from '../../../actions/timeEntries'; import InfringementsViz from '../InfringementsViz'; import TimeEntriesViz from '../TimeEntriesViz'; @@ -318,8 +319,8 @@ class PeopleReport extends Component { } const [startdate] = Object.keys(dict); - if (!startdate) { - return; + if (startdate) { + startdate.toString(); } if (props.infringements.length > 0) { props.infringements.map((current, index) => ( diff --git a/src/components/Reports/TasksDetail/TasksDetail.jsx b/src/components/Reports/TasksDetail/TasksDetail.jsx index 5bbf981b26..5b74de7998 100644 --- a/src/components/Reports/TasksDetail/TasksDetail.jsx +++ b/src/components/Reports/TasksDetail/TasksDetail.jsx @@ -3,6 +3,7 @@ import { useState, useEffect } from 'react'; import { Button } from 'react-bootstrap'; import Collapse from 'react-bootstrap/Collapse'; import EditTaskModal from '../../Projects/WBS/WBSDetail/EditTask/EditTaskModal'; +import 'react-table/react-table.css'; import './TasksDetail.css'; diff --git a/src/components/Reports/TeamReport/components/ReportCharts.jsx b/src/components/Reports/TeamReport/components/ReportCharts.jsx index 278eed7081..8df9984f25 100644 --- a/src/components/Reports/TeamReport/components/ReportCharts.jsx +++ b/src/components/Reports/TeamReport/components/ReportCharts.jsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-unused-vars import { React, useEffect } from 'react'; import './ReportCharts.css'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import { CHART_RADIUS, CHART_SIZE } from '../../../common/PieChart/constants'; import { generateArrayOfUniqColors } from '../../../common/PieChart/colorsGenerator'; import '../../../common/PieChart/PieChart.css'; diff --git a/src/components/Reports/TeamReport/components/TeamReportCharts.jsx b/src/components/Reports/TeamReport/components/TeamReportCharts.jsx index 8f6cac6e2e..264c15e862 100644 --- a/src/components/Reports/TeamReport/components/TeamReportCharts.jsx +++ b/src/components/Reports/TeamReport/components/TeamReportCharts.jsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-unused-vars import { React, useEffect } from 'react'; import './ReportCharts.css'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import { CHART_RADIUS, CHART_SIZE } from '../../../common/PieChart/constants'; import '../../../common/PieChart/PieChart.css'; import PieChartInfoDetail from './PieChartInfoDetail'; diff --git a/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx b/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx index 2581b288b7..e6a163bc51 100644 --- a/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx +++ b/src/components/Reports/TeamReport/components/TeamsReportCharts.jsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-unused-vars import { React, useEffect, useState } from 'react'; import './ReportCharts.css'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import { CHART_RADIUS, CHART_SIZE } from '../../../common/PieChart/constants'; import '../../../common/PieChart/PieChart.css'; import PieChartInfoDetail from './PieChartInfoDetail'; diff --git a/src/components/Reports/TimeEntriesViz.jsx b/src/components/Reports/TimeEntriesViz.jsx index 09bf7783e7..637e36c32a 100644 --- a/src/components/Reports/TimeEntriesViz.jsx +++ b/src/components/Reports/TimeEntriesViz.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import { Button } from 'react-bootstrap'; import { boxStyle, boxStyleDark } from '../../styles'; diff --git a/src/components/Reports/TotalReport/TotalReportBarGraph.jsx b/src/components/Reports/TotalReport/TotalReportBarGraph.jsx index 90680f5138..c108884bef 100644 --- a/src/components/Reports/TotalReport/TotalReportBarGraph.jsx +++ b/src/components/Reports/TotalReport/TotalReportBarGraph.jsx @@ -1,5 +1,5 @@ import { useEffect } from 'react'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import './TotalReportBarGraph.css'; function TotalReportBarGraph({ barData, range }) { diff --git a/src/components/SetupProfile/SetupProfileUserEntry.jsx b/src/components/SetupProfile/SetupProfileUserEntry.jsx index 8d71965f25..9b5d6379e8 100644 --- a/src/components/SetupProfile/SetupProfileUserEntry.jsx +++ b/src/components/SetupProfile/SetupProfileUserEntry.jsx @@ -28,7 +28,7 @@ import { useDispatch } from 'react-redux'; import jwtDecode from 'jwt-decode'; import Image from 'react-bootstrap/Image'; import { toast } from 'react-toastify'; -import config from '../../config.json'; +import { tokenKey } from '../../config.json'; import { setCurrentUser } from '../../actions/authActions'; import HomeCountryModal from './homeCountryModal'; import ProfilePictureModal from './profilePictureModal'; @@ -39,8 +39,6 @@ import './SetupProfileUserEntry.css'; import logo from '../../assets/images/logo.png'; import TimeZoneDropDown from '../UserProfile/TimeZoneDropDown'; -const { tokenKey } = config; - function SetupProfileUserEntry({ token, userEmail }) { const dispatch = useDispatch(); const history = useHistory(); diff --git a/src/components/Timelog/TimeEntry.jsx b/src/components/Timelog/TimeEntry.jsx index 40a3d9d9bf..0f04ea6263 100644 --- a/src/components/Timelog/TimeEntry.jsx +++ b/src/components/Timelog/TimeEntry.jsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { Card, Row, Col } from 'reactstrap'; import { useDispatch, connect } from 'react-redux'; -import ReactHtmlParser from 'html-react-parser'; +import ReactHtmlParser from 'react-html-parser'; import moment from 'moment-timezone'; import './Timelog.css'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; diff --git a/src/components/WeeklySummariesReport/FormattedReport.jsx b/src/components/WeeklySummariesReport/FormattedReport.jsx index bc29f324d8..dc03af7824 100644 --- a/src/components/WeeklySummariesReport/FormattedReport.jsx +++ b/src/components/WeeklySummariesReport/FormattedReport.jsx @@ -5,7 +5,7 @@ import { useDispatch } from 'react-redux'; import PropTypes from 'prop-types'; import moment from 'moment'; import 'moment-timezone'; -import ReactHtmlParser from 'html-react-parser'; +import ReactHtmlParser from 'react-html-parser'; import { Link } from 'react-router-dom'; import { toast } from 'react-toastify'; import axios from 'axios'; diff --git a/src/components/common/Modal/Modal.jsx b/src/components/common/Modal/Modal.jsx index 554f12a639..c5935c8396 100644 --- a/src/components/common/Modal/Modal.jsx +++ b/src/components/common/Modal/Modal.jsx @@ -11,7 +11,7 @@ import { InputGroupText, Input, } from 'reactstrap'; -import ReactHtmlParser from 'html-react-parser'; +import ReactHtmlParser from 'react-html-parser'; import { boxStyle, boxStyleDark } from 'styles'; import '../../Header/DarkMode.css'; diff --git a/src/components/common/PieChart/PieChart.jsx b/src/components/common/PieChart/PieChart.jsx index e090f5eebd..cbebedab28 100644 --- a/src/components/common/PieChart/PieChart.jsx +++ b/src/components/common/PieChart/PieChart.jsx @@ -1,6 +1,6 @@ /* eslint-disable no-restricted-globals */ import { useEffect, useState, useMemo } from 'react'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import { CHART_RADIUS, CHART_SIZE } from './constants'; import { generateArrayOfUniqColors } from './colorsGenerator'; import './UserProjectPieChart.css'; diff --git a/src/components/common/PieChart/ProjectPieChart.jsx b/src/components/common/PieChart/ProjectPieChart.jsx index 9de20b52e0..09c47a8142 100644 --- a/src/components/common/PieChart/ProjectPieChart.jsx +++ b/src/components/common/PieChart/ProjectPieChart.jsx @@ -1,6 +1,6 @@ /* eslint-disable no-restricted-globals */ import { useEffect, useState, useMemo } from 'react'; -import * as d3 from 'd3'; +import * as d3 from 'd3/dist/d3.min'; import { CHART_RADIUS, CHART_SIZE } from './constants'; import { generateArrayOfUniqColors } from './colorsGenerator'; import './UserProjectPieChart.css'; From f80dcebb8247dd95f8f08cb9776a9d9b2150fcb8 Mon Sep 17 00:00:00 2001 From: Jaden Date: Sat, 1 Aug 2026 16:33:34 -0400 Subject: [PATCH 12/15] Fix dark mode table row hover visibility in BadgeDevelopmentTable - Add BadgeDevelopmentTable.module.css with scoped tableDark hover styles - Apply styles.tableDark in dark mode instead of plain dark-mode CSS string --- src/components/Badge/BadgeDevelopmentTable.jsx | 5 ++++- src/components/Badge/BadgeDevelopmentTable.module.css | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 src/components/Badge/BadgeDevelopmentTable.module.css diff --git a/src/components/Badge/BadgeDevelopmentTable.jsx b/src/components/Badge/BadgeDevelopmentTable.jsx index fc5b37244c..6d199295c4 100644 --- a/src/components/Badge/BadgeDevelopmentTable.jsx +++ b/src/components/Badge/BadgeDevelopmentTable.jsx @@ -22,6 +22,7 @@ import EditBadgePopup from './EditBadgePopup'; import DeleteBadgePopup from './DeleteBadgePopup'; import hasPermission from '../../utils/permissions'; import './Badge.module.css'; +import styles from './BadgeDevelopmentTable.module.css'; function BadgeDevelopmentTable(props) { const { darkMode } = props; @@ -271,7 +272,9 @@ function BadgeDevelopmentTable(props) { return ( Date: Sat, 1 Aug 2026 17:38:33 -0400 Subject: [PATCH 13/15] Fix dark mode styling on Badge Development filter section - Toggle filter button label between Add Filters and Remove Filters - Apply dark mode classes to all filter label text - Move filter section layout and button box-shadow to CSS module - Fix input and dropdown backgrounds in dark mode - Fix placeholder text color via ::placeholder rule - Fix text selection visibility in dark mode via ::selection rule --- src/components/Badge/BadgeDevelopment.jsx | 58 ++++++++++--------- .../Badge/BadgeDevelopment.module.css | 43 ++++++++++++++ .../Badge/BadgeDevelopmentTable.module.css | 6 ++ 3 files changed, 80 insertions(+), 27 deletions(-) create mode 100644 src/components/Badge/BadgeDevelopment.module.css diff --git a/src/components/Badge/BadgeDevelopment.jsx b/src/components/Badge/BadgeDevelopment.jsx index 973efa387b..10bf6b0f3b 100644 --- a/src/components/Badge/BadgeDevelopment.jsx +++ b/src/components/Badge/BadgeDevelopment.jsx @@ -1,11 +1,10 @@ import { useState } from 'react'; import { Button, Modal, ModalHeader, ModalBody } from 'reactstrap'; -import { boxStyle, boxStyleDark } from '~/styles'; import BadgeDevelopmentTable from './BadgeDevelopmentTable'; import BadgeTypes from './BadgeTypes'; import CreateNewBadgePopup from './CreateNewBadgePopup'; import '../Header/index.module.css'; -import { matches } from 'lodash'; +import styles from './BadgeDevelopment.module.css'; function BadgeDevelopment(props) { const { darkMode, allBadgeData = [] } = props; @@ -19,10 +18,8 @@ function BadgeDevelopment(props) { const toggle = () => setCreateNewBadgePopupOpen(prevIsOpen => !prevIsOpen); const toggleFilters = () => setAddFiltersOpen(prevState => !prevState); - // convert rank number into integer const chooseRankFilterNumber = chooseRankFilter ? Number(chooseRankFilter) : null; - // filter badge data based on type, report, and rank const filteredBadgeData = allBadgeData.filter(badge => { const matchesType = searchType === '' || @@ -46,23 +43,27 @@ function BadgeDevelopment(props) { return (
{isAddFiltersOpen && ( -
-
-

Search for a badge:

+
+
+

+ Search for a badge: +

-
-

Filter by type:

+
+

+ Filter by type: +

-
-

+

+

Filter by Rank (0 - {rankFilter}):

setRankFilter(e.target.value)} /> -
-

Or choose a rank:

- setChooseRankFilter(e.target.value)} - style={{ width: '80px', textAlign: 'center' }} - className={darkMode ? 'bg-darkmode-liblack text-light border-0' : ''} - /> -
+

+ Or choose a rank: +

+ setChooseRankFilter(e.target.value)} + className={`${styles.rankInput}${ + darkMode ? ' bg-darkmode-liblack text-light border-0' : '' + }`} + />
)} diff --git a/src/components/Badge/BadgeDevelopment.module.css b/src/components/Badge/BadgeDevelopment.module.css new file mode 100644 index 0000000000..0f7c3d0d3c --- /dev/null +++ b/src/components/Badge/BadgeDevelopment.module.css @@ -0,0 +1,43 @@ +.headerButton { + margin: 20px; + box-shadow: 2px 2px 4px 1px #d3d3d3; +} + +.headerButtonDark { + margin: 20px; + box-shadow: 0.5px 0.5px 5px #000; +} + +.filterSection { + margin-top: 20px; + padding-left: 20px; +} + +.filterRow { + display: flex; + align-items: center; + margin-bottom: 10px; +} + +.filterLabel { + margin: 0; + margin-right: 8px; +} + +.rankRow { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px; +} + +.rankInput { + width: 80px; + text-align: center; +} + +.filterSection input::placeholder, +.filterSection select::placeholder { + color: inherit; + opacity: 1; +} diff --git a/src/components/Badge/BadgeDevelopmentTable.module.css b/src/components/Badge/BadgeDevelopmentTable.module.css index aeff3f798e..660cf116cf 100644 --- a/src/components/Badge/BadgeDevelopmentTable.module.css +++ b/src/components/Badge/BadgeDevelopmentTable.module.css @@ -3,3 +3,9 @@ background-color: #2b3553; color: #fff; } + +.tableDark tbody tr td::selection, +.tableDark tbody tr td *::selection { + background-color: #4a5a8a; + color: #fff; +} From e824ce8106d2cb8219fa8de850eba6f253470c2c Mon Sep 17 00:00:00 2001 From: Jaden Date: Sat, 1 Aug 2026 17:42:52 -0400 Subject: [PATCH 14/15] Revert dark mode styling changes added to wrong PR branch --- src/components/Badge/BadgeDevelopment.jsx | 58 +++++++++---------- .../Badge/BadgeDevelopment.module.css | 43 -------------- .../Badge/BadgeDevelopmentTable.jsx | 5 +- .../Badge/BadgeDevelopmentTable.module.css | 11 ---- 4 files changed, 28 insertions(+), 89 deletions(-) delete mode 100644 src/components/Badge/BadgeDevelopment.module.css delete mode 100644 src/components/Badge/BadgeDevelopmentTable.module.css diff --git a/src/components/Badge/BadgeDevelopment.jsx b/src/components/Badge/BadgeDevelopment.jsx index 10bf6b0f3b..973efa387b 100644 --- a/src/components/Badge/BadgeDevelopment.jsx +++ b/src/components/Badge/BadgeDevelopment.jsx @@ -1,10 +1,11 @@ import { useState } from 'react'; import { Button, Modal, ModalHeader, ModalBody } from 'reactstrap'; +import { boxStyle, boxStyleDark } from '~/styles'; import BadgeDevelopmentTable from './BadgeDevelopmentTable'; import BadgeTypes from './BadgeTypes'; import CreateNewBadgePopup from './CreateNewBadgePopup'; import '../Header/index.module.css'; -import styles from './BadgeDevelopment.module.css'; +import { matches } from 'lodash'; function BadgeDevelopment(props) { const { darkMode, allBadgeData = [] } = props; @@ -18,8 +19,10 @@ function BadgeDevelopment(props) { const toggle = () => setCreateNewBadgePopupOpen(prevIsOpen => !prevIsOpen); const toggleFilters = () => setAddFiltersOpen(prevState => !prevState); + // convert rank number into integer const chooseRankFilterNumber = chooseRankFilter ? Number(chooseRankFilter) : null; + // filter badge data based on type, report, and rank const filteredBadgeData = allBadgeData.filter(badge => { const matchesType = searchType === '' || @@ -43,27 +46,23 @@ function BadgeDevelopment(props) { return (
{isAddFiltersOpen && ( -
-
-

- Search for a badge: -

+
+
+

Search for a badge:

-
-

- Filter by type: -

+
+

Filter by type:

-
-

+

+

Filter by Rank (0 - {rankFilter}):

setRankFilter(e.target.value)} /> -

- Or choose a rank: -

- setChooseRankFilter(e.target.value)} - className={`${styles.rankInput}${ - darkMode ? ' bg-darkmode-liblack text-light border-0' : '' - }`} - /> +
+

Or choose a rank:

+ setChooseRankFilter(e.target.value)} + style={{ width: '80px', textAlign: 'center' }} + className={darkMode ? 'bg-darkmode-liblack text-light border-0' : ''} + /> +
)} diff --git a/src/components/Badge/BadgeDevelopment.module.css b/src/components/Badge/BadgeDevelopment.module.css deleted file mode 100644 index 0f7c3d0d3c..0000000000 --- a/src/components/Badge/BadgeDevelopment.module.css +++ /dev/null @@ -1,43 +0,0 @@ -.headerButton { - margin: 20px; - box-shadow: 2px 2px 4px 1px #d3d3d3; -} - -.headerButtonDark { - margin: 20px; - box-shadow: 0.5px 0.5px 5px #000; -} - -.filterSection { - margin-top: 20px; - padding-left: 20px; -} - -.filterRow { - display: flex; - align-items: center; - margin-bottom: 10px; -} - -.filterLabel { - margin: 0; - margin-right: 8px; -} - -.rankRow { - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 8px; -} - -.rankInput { - width: 80px; - text-align: center; -} - -.filterSection input::placeholder, -.filterSection select::placeholder { - color: inherit; - opacity: 1; -} diff --git a/src/components/Badge/BadgeDevelopmentTable.jsx b/src/components/Badge/BadgeDevelopmentTable.jsx index 6d199295c4..fc5b37244c 100644 --- a/src/components/Badge/BadgeDevelopmentTable.jsx +++ b/src/components/Badge/BadgeDevelopmentTable.jsx @@ -22,7 +22,6 @@ import EditBadgePopup from './EditBadgePopup'; import DeleteBadgePopup from './DeleteBadgePopup'; import hasPermission from '../../utils/permissions'; import './Badge.module.css'; -import styles from './BadgeDevelopmentTable.module.css'; function BadgeDevelopmentTable(props) { const { darkMode } = props; @@ -272,9 +271,7 @@ function BadgeDevelopmentTable(props) { return (
Date: Sun, 2 Aug 2026 22:01:10 -0400 Subject: [PATCH 15/15] fix(dark-mode): improve table row hover visibility in badge management dark mode --- src/components/Badge/Badge.module.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/Badge/Badge.module.css b/src/components/Badge/Badge.module.css index 7ef214ec33..321870b441 100644 --- a/src/components/Badge/Badge.module.css +++ b/src/components/Badge/Badge.module.css @@ -170,3 +170,8 @@ font-size: 0.75rem !important; } } + +:global(.dark-mode) tbody tr:hover td { + background-color: #1e3a5f !important; + color: #fff !important; +}