Skip to content

Conversation

@abcd-ca
Copy link
Contributor

@abcd-ca abcd-ca commented Jan 9, 2026

Description

  1. Tag Management - Add/remove tags from tasks
  2. Subtasks Support - View, create subtasks; convert tasks to/from subtasks
  3. Task Renaming - Rename tasks and subtasks

Screencast

https://youtu.be/fc_1RrHIHto

Checklist

Add a "Change Tags" submenu to task actions that allows users to add or    remove existing workspace tags from tasks.
subtasks have same actions as tasks
Add three new actions:
1. "Convert to Subtask" - For tasks only, pick a parent task
2. "Convert to Task" - For subtasks only, remove parent relationship
3. "Add Subtask" - For tasks only, create subtask with inherited project/section and assignee option
@raycastbot raycastbot added extension fix / improvement Label for PRs with extension's fix improvements extension: asana Issues related to the asana extension platform: macOS platform: Windows OP is contributor The OP of the PR is a contributor of the extension labels Jan 9, 2026
@raycastbot
Copy link
Collaborator

raycastbot commented Jan 9, 2026

Thank you for your contribution! 🎉

🔔 @thomaslombart @spaceDolph1n @tuzemec @xmok you might want to have a look.

You can use this guide to learn how to check out the Pull Request locally in order to test it.

📋 Quick checkout commands
BRANCH="feature/tags-and-subtasks"
FORK_URL="https://github.com/abcd-ca/ray-cast-extension-asana.git"
EXTENSION_NAME="asana"
REPO_NAME="ray-cast-extension-asana"

git clone -n --depth=1 --filter=tree:0 -b $BRANCH $FORK_URL
cd $REPO_NAME
git sparse-checkout set --no-cone "extensions/$EXTENSION_NAME"
git checkout
cd "extensions/$EXTENSION_NAME"
npm install && npm run dev

Due to our current reduced availability, the initial review may take up to 10-15 business days.

@abcd-ca abcd-ca marked this pull request as ready for review January 9, 2026 23:00
@abcd-ca abcd-ca marked this pull request as draft January 9, 2026 23:04
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Greptile Overview

Greptile Summary

This PR adds three significant features to the Asana extension:

  1. Subtasks Support: Users can now view, create, and manage subtasks. The implementation includes:

    • Viewing subtasks in task detail view with a checklist display
    • Creating new subtasks with assignee, description, and due date
    • Converting tasks to subtasks and vice versa
    • Preventing circular dependencies by filtering subtasks from parent selection
  2. Tag Management: Users can add and remove tags from existing tasks through a new submenu with lazy-loaded tag data.

  3. Task Renaming: A simple form to rename tasks and subtasks with optimistic updates.

The implementation follows existing patterns in the codebase with proper error handling, optimistic updates, and TypeScript typing. However, there are a few issues that need attention:

  • Keyboard shortcut conflict between "View Subtasks" and "Move to Section" actions
  • Missing cache mutation when creating subtasks from task actions, leading to stale subtask counts
  • Minor date typo in the CHANGELOG (2026 instead of 2025)

The API integration is clean, reusing the existing request infrastructure. The new components (CreateSubtaskForm, ParentTaskPicker, RenameTaskForm, SubtasksList) are well-structured and follow Raycast UI patterns.

Confidence Score: 3/5

  • This PR has solid implementation but contains logical issues that will cause UX problems
  • The code quality is generally good with proper error handling and follows existing patterns. However, the keyboard shortcut conflict will cause one action to not work as expected, and the missing mutateSubtasks prop will lead to stale data requiring manual refreshes. These are functional bugs that will impact user experience. The CHANGELOG date issue is minor but should be fixed.
  • Pay close attention to TaskActions.tsx and TaskDetail.tsx - they contain the keyboard shortcut conflict and cache mutation issues

Important Files Changed

File Analysis

Filename Score Overview
extensions/asana/CHANGELOG.md 4/5 Changelog updated with new features; minor date typo (2026 instead of 2025)
extensions/asana/src/api/tasks.ts 5/5 Added subtask APIs and parent field to Task type; clean implementation with proper typing
extensions/asana/src/components/TaskActions.tsx 3/5 Added subtask/tag actions and rename functionality; keyboard shortcut conflict and missing mutateSubtasks prop
extensions/asana/src/components/TaskDetail.tsx 3/5 Enhanced with subtasks display and actions; keyboard shortcut conflict with existing actions

title="Add Subtask"
icon={Icon.Plus}
shortcut={{ modifiers: ["cmd", "shift"], key: "n" }}
target={<CreateSubtaskForm parentTask={task} workspace={workspace} />}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing mutateSubtasks prop: When creating a subtask from TaskActions, the CreateSubtaskForm is not provided with a way to update the parent's subtasks cache. This means after creating a subtask, the subtask count in TaskDetail won't update until the user manually refreshes.

To fix this, you need to:

  1. Get the subtasks mutation function (likely need to pass it down from TaskDetail)
  2. Pass it to CreateSubtaskForm

Example fix in TaskDetail.tsx:

<TaskActions
  task={task}
  workspace={workspace}
  isDetail={true}
  mutateList={mutateList}
  mutateDetail={mutateDetail}
  mutateSubtasks={mutate}  // Pass the subtasks mutate function
/>

Then update TaskActions to accept and pass this through:

target={<CreateSubtaskForm parentTask={task} workspace={workspace} mutateSubtasks={mutateSubtasks} />}

@abcd-ca abcd-ca marked this pull request as ready for review January 9, 2026 23:35
@abcd-ca
Copy link
Contributor Author

abcd-ca commented Jan 9, 2026

@pernielsentikaer Hello, may I ask you to review, please?

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 9, 2026

Greptile Overview

Greptile Summary

This PR adds three major features to the Asana extension:

Features Added

  1. Tag Management: Users can now add and remove tags from existing tasks through a new submenu in TaskActions
  2. Subtask Support:
    • View subtasks in task detail view (both in metadata and as markdown checklist)
    • Create new subtasks with assignee, due date, and description
    • Convert tasks to subtasks (with validation to prevent tasks with subtasks from being converted)
    • Convert subtasks back to top-level tasks
  3. Task Renaming: Users can rename both tasks and subtasks through a new action

Implementation Quality

The implementation follows existing patterns well:

  • New API functions match the structure of existing ones
  • Components use proper form validation and error handling
  • Optimistic updates are implemented for better UX
  • New hooks follow the useCachedPromise pattern used throughout the codebase

Issues Found

  1. Critical: CreateSubtaskForm won't refresh the parent task's subtasks list when created from TaskActions because the mutateSubtasks prop is not passed (line 236 of TaskActions.tsx)
  2. Minor: CHANGELOG date is set to 2026 instead of 2025

The subtasks refresh issue means users won't see newly created subtasks in TaskDetail until they manually refresh.

Confidence Score: 3/5

  • This PR has a functional bug that affects UX but not data integrity
  • The code is well-structured and follows existing patterns, but has a critical UX bug where newly created subtasks won't appear in the parent task detail view without manual refresh. The CHANGELOG date error is minor. Once the mutateSubtasks issue is fixed, this would be a solid 4-5.
  • TaskActions.tsx needs the mutateSubtasks prop passed to CreateSubtaskForm (line 236), and CHANGELOG.md needs date correction

Important Files Changed

File Analysis

Filename Score Overview
extensions/asana/CHANGELOG.md 4/5 Added changelog entry with future date (2026 instead of 2025). Otherwise properly documents all new features.
extensions/asana/src/api/tasks.ts 5/5 Added parent field, subtask operations, search, and rename support. Well-structured API functions with proper type definitions.
extensions/asana/src/components/CreateSubtaskForm.tsx 5/5 New component for creating subtasks. Good form validation, error handling, and follows existing form patterns from CreateTaskForm.
extensions/asana/src/components/TaskActions.tsx 3/5 Added subtask creation, task/subtask conversion, rename, and tag management actions. Missing mutateSubtasks prop when creating subtasks causes refresh issue.

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile

@@ -1,5 +1,13 @@
# Asana Changelog

## [Add subtasks support and tag management] - 2026-01-09
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the date "2026-01-09" is in the future. This should likely be "2025-01-09" (current year).

Suggested change
## [Add subtasks support and tag management] - 2026-01-09
## [Add subtasks support and tag management] - 2025-01-09

title="Add Subtask"
icon={Icon.Plus}
shortcut={{ modifiers: ["cmd", "shift"], key: "n" }}
target={<CreateSubtaskForm parentTask={task} workspace={workspace} />}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the CreateSubtaskForm is missing the mutateSubtasks prop. When a subtask is created from TaskActions (e.g., from within TaskDetail), the parent task's subtasks list won't be refreshed. This means newly created subtasks won't appear in TaskDetail until the user manually refreshes.

The fix requires accessing the subtasks mutation function. Since TaskDetail calls useSubtasks(task.gid), you would need to either:

  1. Pass the mutate function down from TaskDetail through TaskActions, or
  2. Have CreateSubtaskForm call mutateDetail() to refresh the entire task detail (which will trigger useSubtasks to re-fetch)

Option 2 is simpler - pass mutateDetail to CreateSubtaskForm and have it call that after creating a subtask.

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extension: asana Issues related to the asana extension extension fix / improvement Label for PRs with extension's fix improvements OP is contributor The OP of the PR is a contributor of the extension platform: macOS platform: Windows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants