Rithika taking over for Aditya-feat: Phase 2 Interactive list of open issues for BM Dashboard (integrates #3683)#4800
Conversation
…ighestGoodNetworkApp into Vamsi_Krishna_Create_an_interactive_list_of_open_issues
…ighestGoodNetworkApp into Vamsi_Krishna_Create_an_interactive_list_of_open_issues
…ighestGoodNetworkApp into Vamsi_Krishna_Create_an_interactive_list_of_open_issues
…ighestGoodNetworkApp into Vamsi_Krishna_Create_an_interactive_list_of_open_issues
- Add comprehensive validation to filter issues without valid issueTitle - Remove 'Untitled' fallback since validation ensures valid titles - Fixes empty rows appearing in table when filtering by date/project - Resolves reviewer-reported bugs with Untitled entries
- Change from createdDate to issueDate for accurate duration display - Add default value of 0 for cost field to prevent undefined display - Use Date.now() instead of new Date() for better performance - Aligns with backend schema and requirements specification
- Change payload from dot notation to array format for backend compatibility - Add validation to prevent empty issue names - Add trim() to remove whitespace from input - Improve error messages with more context
- Change from full ISO string to date-only format - Matches backend specification and openIssueCharts pattern - Prevents potential timezone-related filtering issues - Improve error message format
- Add conditional rendering to prevent "undefined - undefined" display - Show "Unassigned" when person data is missing - Handle partial person data (name only without role) - Improve UX with proper fallback values
- Conditionally render tag button only when tag exists - Show "No tag" text for issues without tags - Use null instead of empty string for cleaner logic - Prevent empty tag buttons from appearing
- Display informative message when no issues match filters - Provide different messages based on filter state - Follow pattern from openIssueCharts component - Improve user experience when table is empty
Co-authored-by: Cursor <cursoragent@cursor.com>
Convert IssuesList.css to IssuesList.module.css to comply with CSS module policy that only allows .module.css or index.css files. Updated component to use CSS module imports and converted all class names to camelCase format.
…://github.com/OneCommunityGlobal/HighestGoodNetworkApp into fix/Create_an_interactive_list_of_open_issues
HemanthNidamanuru
left a comment
There was a problem hiding this comment.
Hi Aditya,
In the project filter dropdown, selected projects are not displaying their full names. Only partial or single-character labels are visible instead of the complete project name. Please review the selected value rendering logic to ensure full project names are displayed correctly in the filter UI.
Anusha-Gali
left a comment
There was a problem hiding this comment.
Hi Aditya,
I have reviewed your PR locally and though all the functionalities work as per requirement, few UI issues persist.
- The calendar is in dark mode when the application is in light mode
- The option selected in filter by project is not visible in large screen sizes
- In smaller screen sizes, the cross icon for unselecting the dates is expanded and attached to the projects dropdown
- Add .datepickerWrapper flex layout and inner wrapper flex:1 min-width:0 so clear button stays compact on all screen sizes - Remove obsolete mobile-only media block for datepicker - Add .lightCalendar global overrides so datepicker respects light mode when not in dark theme (overrides RentalChart dark rules) Made-with: Cursor
…elect chips - Add mb-2 mb-md-0 to DatePicker and Select Cols for spacing when stacked on xs - Use calendarClassName 'lightCalendar' in non-dark mode for new overrides - Add Select styles: flexShrink 0 on multiValue (prevent chip collapse), multiValueLabel color for light/dark Made-with: Cursor
Hi Anusha, Screen.Recording.2026-02-27.at.7.40.21.PM.mov |
Hi Hemanth, Thank you for the review. I fixed the issue. Check it out. Screen.Recording.2026-02-27.at.7.43.11.PM.mov |
Use CSS custom properties for table th/td font-size and padding so narrow-screen overrides live in one .issueTable block instead of repeating .issueTable thead th and .issueTable tbody td in the media query. Behavior unchanged; pre-commit stylelint passes. Made-with: Cursor
…f_open_issues' into fix/Create_an_interactive_list_of_open_issues
|
Anusha-Gali
left a comment
There was a problem hiding this comment.
Hi Aditya,
Thank you working on the issue, they appear to be fixed. However i did notice that the UI got disturbed as i suppose the card layout expanded, since the functionality is as per requirement in smaller screens.
- The dropdown options are not visible unless scrolled
- The submit button is constricted even though there is open space due to the card layout
- The filters have a lot of gap between them but i would leave the UI decision upto you.
…y and CSS cleanup
|





























Description
This PR implements Phase 2: Create an interactive list of open issues for the BM Dashboard. It adds a filterable, paginated table of open issues with tag, date range, and project filters, and row actions (Rename, Delete, Close Issue). The list is integrated into the Weekly Project Summary under the "Issue Tracking" section and uses the backend open-issues API with filter support. It also integrates feedback and resolves conflicts from PR #3683.
Related PRs (if any):
Main changes explained:
Created/Updated Files:
src/components/BMDashboard/Issues/IssuesList.jsxprojectIds,startDate,endDate,tag).status: 'closed'). Uses BootstrapDropdownand a custom modal for deletion.ENDPOINTS.BM_GET_ISSUE_PROJECTS,ENDPOINTS.BM_GET_OPEN_ISSUES(projectIds, startDate, endDate, tag),ENDPOINTS.BM_ISSUE_UPDATE(id)for PATCH (rename/close) and DELETE.Unassigned,No tag). Open Since computed fromissueDate(days). Pagination (5 per page) with first/last page buttons and page number group.isValidIssue,formatDateForAPI,getErrorMessage; JSDoc on component and helpers. Redux theme selector for dark mode.src/components/BMDashboard/Issues/IssuesList.css.dark-themefor container, table, thead/tbody, dropdown, datepicker, react-select (custom-select), and react-datepicker calendar (.dark-theme-calendar).src/utils/URL.jsBM_GET_OPEN_ISSUES(projectIds, startDate, endDate, tag)→GET /api/bm/issues/open?projectIds=...&startDate=...&endDate=...&tag=...(params only added when provided).BM_GET_ISSUE_PROJECTS→GET /api/bm/issues/projects.BM_ISSUE_UPDATE(issueId)→ base forPATCH /api/bm/issues/:issueIdandDELETE /api/bm/issues/:issueId.src/components/BMDashboard/WeeklyProjectSummary/WeeklyProjectSummary.jsxIssueListfrom../Issues/IssuesList.<IssueList />in the first card and<IssueCharts />in a second card (unchanged chart component), so the interactive list appears above the charts.src/reducers/bmdashboard/issueReducer.jsconst issueReducer→export const issueReducer(for consistency with store usage).src/reducers/index.jsbmIssues: issueReducerinlocalReducers(no functional change; aligns with other reducer ordering).src/components/TeamLocations/TeamLocations.jsx,src/components/TeamLocations/TestSafeMarkerCluster.jsx,src/components/__tests__/TagsSearch.test.jsxKey Implementation Details:
GET /api/bm/issues/open. The frontend does not filter the response array; it refetches when filters change and resets to page 1.YYYY-MM-DDviadate.toISOString().split('T')[0]. "Open Since" is computed client-side fromissue.issueDateas integer days.issueTitleas an array; PATCH body is{ issueTitle: [trimmedName] }.{ status: 'closed' }; list refetches so closed issues disappear.BM_ISSUE_UPDATE(id); confirmation modal before calling API; toasts and refetch on success/error._id,issueTitle(array),tag,issueDate,cost,person(e.g.,{ name, role }). Invalid or missingissueTitleentries are filtered out viaisValidIssue.darkModefrom Reduxstate.theme.darkMode; applied to container and passed to DatePicker/Select/table/dropdown/modal via class names and CSS.How to test:
fix/Create_an_interactive_list_of_open_issuesrm -rf node_modules && yarn cache cleanyarn installand start the app:yarn start:localREACT_APP_APIENDPOINTin.envpointing to API base URL)npm run start:local(ornpm startfor frontend)API examples (for manual/backend checks):
GET /api/bm/issues/openGET /api/bm/issues/open?projectIds=id1,id2&startDate=2024-01-01&endDate=2024-12-31&tag=VirtualGET /api/bm/issues/projectsPATCH /api/bm/issues/:issueIdbody{ issueTitle: ["New Name"] }or{ status: "closed" }DELETE /api/bm/issues/:issueIdScreenshots or videos of changes:
TestVideo.mov
Note: