diff --git a/twenty-backend/lib/twenty-backend/graphql/type/query.rb b/twenty-backend/lib/twenty-backend/graphql/type/query.rb index 610e200..14a4af2 100644 --- a/twenty-backend/lib/twenty-backend/graphql/type/query.rb +++ b/twenty-backend/lib/twenty-backend/graphql/type/query.rb @@ -5,6 +5,7 @@ module Twenty::GraphQL::Type end field :tasks, [Task], null: false do argument :status, TaskStatus + argument :project_id, Int, required: false end field :projects, [Project], null: false @@ -12,10 +13,11 @@ module Twenty::GraphQL::Type Twenty::Task.find_by(id: task_id) end - def tasks(status:) - Twenty::Task + def tasks(status:, project_id: nil) + tasks = Twenty::Task .where(status:) .order(updated_at: :desc) + project_id ? tasks.where(project_id:) : tasks end def projects diff --git a/twenty-backend/share/twenty-backend/schema.graphql b/twenty-backend/share/twenty-backend/schema.graphql index 309ddce..233af8b 100644 --- a/twenty-backend/share/twenty-backend/schema.graphql +++ b/twenty-backend/share/twenty-backend/schema.graphql @@ -44,7 +44,7 @@ type Project { type Query { findTask(taskId: Int!): Task projects: [Project!]! - tasks(status: TaskStatus!): [Task!]! + tasks(projectId: Int, status: TaskStatus!): [Task!]! } type Task { diff --git a/twenty-frontend/src/js/components/Tasks.tsx b/twenty-frontend/src/js/components/Tasks.tsx index 81b17b9..261dd5c 100644 --- a/twenty-frontend/src/js/components/Tasks.tsx +++ b/twenty-frontend/src/js/components/Tasks.tsx @@ -1,17 +1,23 @@ -import React, { useEffect } from "react"; +import React, { useEffect, useContext } from "react"; +import { ParamContext } from "/Context"; import { NavBar } from "/components/NavBar"; import { Group } from "/components/Group"; -import { TaskStatus } from "/types/schema"; +import { TaskStatus, Maybe } from "/types/schema"; import { useTasks } from "/hooks/queries/useTasks"; export function Tasks() { + const params = useContext(ParamContext); + const projectId: Maybe = params.projectId + ? parseInt(params.projectId) + : null; + useEffect(() => { document.title = "Tasks"; }, []); const getTasks = (status: TaskStatus) => { return () => { - return useTasks({ variables: { status } }); + return useTasks({ variables: { status, projectId } }); }; }; diff --git a/twenty-frontend/src/js/hooks/queries/useTasks.ts b/twenty-frontend/src/js/hooks/queries/useTasks.ts index b00758e..a3e9e7a 100644 --- a/twenty-frontend/src/js/hooks/queries/useTasks.ts +++ b/twenty-frontend/src/js/hooks/queries/useTasks.ts @@ -2,8 +2,8 @@ import { useQuery, gql } from "@apollo/client"; import { Task } from "/types/schema"; export const GET_TASKS = gql` - query GetTasks($status: TaskStatus!) { - tasks(status: $status) { + query GetTasks($status: TaskStatus!, $projectId: Int) { + tasks(status: $status, projectId: $projectId) { id title status diff --git a/twenty-frontend/src/js/types/schema.ts b/twenty-frontend/src/js/types/schema.ts index 076ec9d..52e2b4a 100644 --- a/twenty-frontend/src/js/types/schema.ts +++ b/twenty-frontend/src/js/types/schema.ts @@ -80,14 +80,14 @@ export type Project = { id: Scalars["Int"]["output"]; name: Scalars["String"]["output"]; path: Scalars["String"]["output"]; - tasks: Task[]; + tasks: Array; }; export type Query = { __typename?: "Query"; findTask?: Maybe; - projects: Project[]; - tasks: Task[]; + projects: Array; + tasks: Array; }; export type QueryFindTaskArgs = { @@ -95,6 +95,7 @@ export type QueryFindTaskArgs = { }; export type QueryTasksArgs = { + projectId?: InputMaybe; status: TaskStatus; };