From 98150fe69606c36a680fe3fe074b8238642a9779 Mon Sep 17 00:00:00 2001 From: Haylie Pedersen Date: Thu, 12 Mar 2026 19:16:44 -0400 Subject: [PATCH 1/2] #3959: add delete filtering --- src/backend/src/prisma-query-args/projects.query-args.ts | 2 +- src/frontend/src/components/ProjectDetailCard.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/src/prisma-query-args/projects.query-args.ts b/src/backend/src/prisma-query-args/projects.query-args.ts index 1c430b3c8a..de45bb1fd9 100644 --- a/src/backend/src/prisma-query-args/projects.query-args.ts +++ b/src/backend/src/prisma-query-args/projects.query-args.ts @@ -123,7 +123,7 @@ export const getProjectOverviewQueryArgs = (organizationId: string) => manager: getUserQueryArgs(organizationId), status: true, links: getLinkQueryArgs(), - tasks: getTaskQueryArgs(organizationId) + tasks: { where: { dateDeleted: null }, ...getTaskQueryArgs(organizationId) } } }, workPackages: getWorkPackagePreviewQueryArgs(), diff --git a/src/frontend/src/components/ProjectDetailCard.tsx b/src/frontend/src/components/ProjectDetailCard.tsx index 3efafb772c..46b81ca82c 100644 --- a/src/frontend/src/components/ProjectDetailCard.tsx +++ b/src/frontend/src/components/ProjectDetailCard.tsx @@ -23,7 +23,7 @@ interface ProjectDetailCardProps { const ProjectDetailCard: React.FC = ({ project, projectIsFavorited }) => { const containsActiveWorkPackages = project.workPackages.filter((wp) => wp.status === WbsElementStatus.Active).length; - const tasksLeft: number = project.tasks.filter((task) => task.status !== TaskStatus.DONE).length; + const tasksLeft: number = project.tasks.filter((task) => !task.dateDeleted && task.status !== TaskStatus.DONE).length; const ProjectDetailCardTitle = () => ( From 533d4eda825fa3cf8e88edba92f076888e78d0c0 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 24 Mar 2026 12:44:32 -0400 Subject: [PATCH 2/2] only return task count instead of whole task list --- .../src/prisma-query-args/projects.query-args.ts | 10 ++++++++-- src/backend/src/transformers/projects.transformer.ts | 2 +- .../src/apis/transformers/projects.transformers.ts | 3 +-- src/frontend/src/components/ProjectDetailCard.tsx | 6 +++--- src/shared/src/types/project-types.ts | 2 +- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/backend/src/prisma-query-args/projects.query-args.ts b/src/backend/src/prisma-query-args/projects.query-args.ts index de45bb1fd9..0a51b7564e 100644 --- a/src/backend/src/prisma-query-args/projects.query-args.ts +++ b/src/backend/src/prisma-query-args/projects.query-args.ts @@ -1,4 +1,4 @@ -import { Prisma } from '@prisma/client'; +import { Prisma, Task_Status } from '@prisma/client'; import { getUserQueryArgs } from './user.query-args.js'; import { getDescriptionBulletQueryArgs } from './description-bullets.query-args.js'; import { getTeamPreviewQueryArgs } from './teams.query-args.js'; @@ -123,7 +123,13 @@ export const getProjectOverviewQueryArgs = (organizationId: string) => manager: getUserQueryArgs(organizationId), status: true, links: getLinkQueryArgs(), - tasks: { where: { dateDeleted: null }, ...getTaskQueryArgs(organizationId) } + _count: { + select: { + tasks: { + where: { AND: [{ dateDeleted: null }, { NOT: { status: Task_Status.DONE } }] } + } + } + } } }, workPackages: getWorkPackagePreviewQueryArgs(), diff --git a/src/backend/src/transformers/projects.transformer.ts b/src/backend/src/transformers/projects.transformer.ts index 85325ae54f..4f4a3ce16c 100644 --- a/src/backend/src/transformers/projects.transformer.ts +++ b/src/backend/src/transformers/projects.transformer.ts @@ -141,7 +141,7 @@ export const projectPreviewTransformer = (project: Prisma.ProjectGetPayload): ProjectOverview => { return { ...projectPreviewTransformer(project), - tasks: project.wbsElement.tasks.map(taskTransformer), + tasksRemaining: project.wbsElement._count.tasks, links: project.wbsElement.links }; }; diff --git a/src/frontend/src/apis/transformers/projects.transformers.ts b/src/frontend/src/apis/transformers/projects.transformers.ts index 280bdcdfa1..78ef0f5cd7 100644 --- a/src/frontend/src/apis/transformers/projects.transformers.ts +++ b/src/frontend/src/apis/transformers/projects.transformers.ts @@ -99,8 +99,7 @@ export const projectOverviewTransformer = (project: ProjectOverview): ProjectOve startDate: new Date(wp.startDate), endDate: new Date(wp.endDate) })), - links: project.links, - tasks: project.tasks.map(taskTransformer) + links: project.links }; }; diff --git a/src/frontend/src/components/ProjectDetailCard.tsx b/src/frontend/src/components/ProjectDetailCard.tsx index 46b81ca82c..9cc1fd77c4 100644 --- a/src/frontend/src/components/ProjectDetailCard.tsx +++ b/src/frontend/src/components/ProjectDetailCard.tsx @@ -8,7 +8,7 @@ import AttachMoneyIcon from '@mui/icons-material/AttachMoney'; import ScheduleIcon from '@mui/icons-material/Schedule'; import { Box, Card, CardContent, Link, Typography, Grid } from '@mui/material'; import { Link as RouterLink } from 'react-router-dom'; -import { calculateDaysLeftInProject, daysBetween, ProjectOverview, TaskStatus, WbsElementStatus, wbsPipe } from 'shared'; +import { calculateDaysLeftInProject, daysBetween, ProjectOverview, WbsElementStatus, wbsPipe } from 'shared'; import { daysOrWeeksLeftOrLate, emDashPipe, fullNamePipe } from '../utils/pipes'; import WorkPackageStageChip from './WorkPackageStageChip'; import FavoriteProjectButton from './FavoriteProjectButton'; @@ -23,7 +23,6 @@ interface ProjectDetailCardProps { const ProjectDetailCard: React.FC = ({ project, projectIsFavorited }) => { const containsActiveWorkPackages = project.workPackages.filter((wp) => wp.status === WbsElementStatus.Active).length; - const tasksLeft: number = project.tasks.filter((task) => !task.dateDeleted && task.status !== TaskStatus.DONE).length; const ProjectDetailCardTitle = () => ( @@ -63,7 +62,8 @@ const ProjectDetailCard: React.FC = ({ project, projectI )} - {`${tasksLeft} task${tasksLeft === 1 ? '' : 's'} left`} + {' '} + {`${project.tasksRemaining} task${project.tasksRemaining === 1 ? '' : 's'} left`} {fullNamePipe(project.manager)} diff --git a/src/shared/src/types/project-types.ts b/src/shared/src/types/project-types.ts index fb1a22bad1..1bc60edb7d 100644 --- a/src/shared/src/types/project-types.ts +++ b/src/shared/src/types/project-types.ts @@ -86,7 +86,7 @@ export interface ProjectPreview extends WbsElementPreview { export interface ProjectOverview extends ProjectPreview { links: Link[]; - tasks: Task[]; + tasksRemaining: number; } export interface RetrospectiveWorkPackage extends WorkPackage {