diff --git a/client/src/js/components/Projects.tsx b/client/src/js/components/Projects.tsx index 5a39a1c..ca6eb98 100644 --- a/client/src/js/components/Projects.tsx +++ b/client/src/js/components/Projects.tsx @@ -41,13 +41,18 @@ export function Projects() { }} > - {project.name} - - {project.path} - +
+ {project.name} + + {project.path} + +
+
+ {project.openTaskCount} open tasks +
); diff --git a/client/src/js/hooks/queries/useProjects.ts b/client/src/js/hooks/queries/useProjects.ts index 9a972af..385ff94 100644 --- a/client/src/js/hooks/queries/useProjects.ts +++ b/client/src/js/hooks/queries/useProjects.ts @@ -7,6 +7,7 @@ const GQL = gql` name path color + openTaskCount } } `; diff --git a/server/lib/twenty/server/graphql/type/project.rb b/server/lib/twenty/server/graphql/type/project.rb index e611802..391f577 100644 --- a/server/lib/twenty/server/graphql/type/project.rb +++ b/server/lib/twenty/server/graphql/type/project.rb @@ -7,5 +7,6 @@ module Twenty::GraphQL::Type field :path, String, null: false field :color, String, null: false field :tasks, "[Twenty::GraphQL::Type::Task]", null: false + field :open_task_count, Integer, null: false end end diff --git a/server/lib/twenty/server/graphql/type/query.rb b/server/lib/twenty/server/graphql/type/query.rb index 0d501b8..4f6cf4d 100644 --- a/server/lib/twenty/server/graphql/type/query.rb +++ b/server/lib/twenty/server/graphql/type/query.rb @@ -23,7 +23,10 @@ module Twenty::GraphQL::Type end def projects - Twenty::Project.all + Twenty::Project + .all + .sort_by { _1.open_task_count } + .reverse end end end diff --git a/server/lib/twenty/server/model/project.rb b/server/lib/twenty/server/model/project.rb index 055d397..fe33615 100644 --- a/server/lib/twenty/server/model/project.rb +++ b/server/lib/twenty/server/model/project.rb @@ -14,4 +14,14 @@ class Twenty::Project < Sequel::Model def path super&.sub(Dir.home, "~") end + + ## + # @return [Integer] + # Returns the number of open tasks a project has. + def open_task_count + @open_task_count ||= Twenty::Task + .where(project_id: id) + .where(Sequel.lit("status IN (0,1,2)")) + .count + end end