-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(web): add indicator for active gql requests #1190
Conversation
Note Currently processing new changes in this PR. This may take a few minutes, please wait... 📒 Files selected for processing (3)
WalkthroughA new functional component named Changes
Possibly related PRs
Suggested reviewers
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
✅ Deploy Preview for reearth-web ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 9
🧹 Outside diff range and nitpick comments (2)
web/src/services/gql/provider/index.tsx (1)
61-67
: Consider monitoring performance impactWhile the task tracking implementation is clean, adding a new link to the Apollo chain could impact request performance. Consider:
- Monitoring the overhead added by task tracking
- Adding performance metrics for GraphQL operations
- Implementing a way to disable task tracking in production if needed
web/src/services/state/index.ts (1)
104-106
: Add TypeScript return types and documentation for exported hooks.The hooks would benefit from explicit return type annotations and JSDoc documentation.
Consider these improvements:
+/** Adds a new GraphQL task with automatic timeout cleanup */ -export const useAddGQLTask = () => useSetAtom(addGQLTaskAtom); +export const useAddGQLTask = (): ((task: GQLTask) => void) => useSetAtom(addGQLTaskAtom); + +/** Removes a GraphQL task from the active tasks list */ -export const useRemoveGQLTask = () => useSetAtom(removeGQLTaskAtom); +export const useRemoveGQLTask = (): ((task: GQLTask) => void) => useSetAtom(removeGQLTaskAtom); + +/** Returns [hasActiveTasks, setHasActiveTasks] tuple indicating if any GraphQL tasks are in progress */ -export const useHasActiveGQLTasks = () => useAtom(hasActiveGQLTasksAtom); +export const useHasActiveGQLTasks = (): [boolean, (value: boolean) => void] => useAtom(hasActiveGQLTasksAtom);
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
📒 Files selected for processing (6)
- web/src/beta/features/CursorStatus/index.tsx (1 hunks)
- web/src/beta/features/Editor/index.tsx (2 hunks)
- web/src/services/gql/provider/index.tsx (2 hunks)
- web/src/services/gql/provider/links/index.ts (1 hunks)
- web/src/services/gql/provider/links/taskLink.ts (1 hunks)
- web/src/services/state/index.ts (2 hunks)
🧰 Additional context used
🔇 Additional comments (11)
web/src/services/gql/provider/links/index.ts (1)
5-5
: LGTM! Verify the imported module exists.The new export follows the established pattern and naming convention. The addition aligns well with the PR's objective of tracking active GraphQL requests.
Let's verify the existence and structure of the imported module:
✅ Verification successful
The taskLink module exists and exports a default Apollo Link implementation
The verification confirms that:
- The
taskLink.ts
file exists in the expected location- It exports a default function that creates an Apollo Link for tracking GraphQL tasks
- The implementation properly handles task lifecycle (add/remove) across all observable states (next/error/complete)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the taskLink module exists and exports a default # Expected: Find the taskLink.ts file and confirm it has a default export # Check if the file exists in the same directory fd -t f "taskLink.ts" "web/src/services/gql/provider/links" # Verify the default export pattern ast-grep --pattern 'export default $_' "web/src/services/gql/provider/links/taskLink.ts"Length of output: 2383
web/src/services/gql/provider/links/taskLink.ts (3)
1-3
: LGTM! Imports are well-organized and complete.The imports follow a good organization pattern (external dependencies followed by internal ones) and include all necessary types and utilities.
28-32
: LGTM! Proper cleanup implementation.The cleanup logic correctly handles both unsubscription and task removal, ensuring no memory leaks or orphaned tasks.
1-33
: Verify integration with UI components.While this implementation provides the necessary task tracking mechanism for the GQL request indicator, we should verify its integration with the UI components.
✅ Verification successful
Let me gather more information about how the GQL task state is being used in the identified files.
Let me check one more thing to see how the GQL task state is being used in the cursor status component, as it seems to be the most relevant for showing loading state.
Let me check the cursor status component's content directly to understand its implementation.
Based on all the gathered information, I can now provide the final response:
Implementation is properly integrated with UI components
The task tracking mechanism is correctly integrated with the UI through the CursorStatus component which:
- Uses the
useHasActiveGQLTasks
hook to track active GQL requests- Displays a loading indicator next to the cursor when requests are in progress
- Properly cleans up tasks through the task link implementation
The implementation successfully fulfills the PR objective of adding an indicator for active GQL requests.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for UI components using the GQL task state rg -l "useGQLTasks|addGQLTask|removeGQLTask" # Search for cursor-related components that might use this task state ast-grep --pattern 'const $_ = styled.$_` cursor: $_ `'Length of output: 178
Script:
#!/bin/bash # Check the implementation of GQL task state rg -A 10 "useGQLTasks|addGQLTask|removeGQLTask" web/src/services/state/index.ts # Check how the task state is integrated in the provider rg -A 10 "useGQLTasks|addGQLTask|removeGQLTask" web/src/services/gql/provider/index.tsx # Look for components that might be using loading states rg -l "isLoading|loading"Length of output: 3332
Script:
#!/bin/bash # Check the implementation of cursor status component rg -A 10 "hasActiveGQLTasks" web/src/beta/features/CursorStatus/index.tsx # Also check if there are any styled components in the cursor status ast-grep --pattern 'const $_ = styled.$_` $$$ cursor: $_ $$$ `' web/src/beta/features/CursorStatus/index.tsxLength of output: 190
Script:
#!/bin/bash # Get the full content of the cursor status component cat web/src/beta/features/CursorStatus/index.tsx # Also check for any imports of GQL task-related functions rg "import.*useHasActiveGQLTasks" web/src/beta/features/CursorStatus/index.tsxLength of output: 1359
web/src/beta/features/CursorStatus/index.tsx (1)
13-13
: Verify GraphQL task tracking integrationLet's verify the integration with the GraphQL task tracking system to ensure proper error handling and state management.
✅ Verification successful
Let me gather more information about the implementation and usage of
useHasActiveGQLTasks
with a different search strategy.
Let me try one more search with corrected file type and patterns:
Let me try one final search with just
rg
without file type specifications:
Based on the gathered information, I can now provide a final response:
GraphQL task tracking integration is properly implemented
The implementation follows a clean architecture where:
- The
useHasActiveGQLTasks
hook is properly exported from the state management layer (web/src/services/state/index.ts
)- It uses atomic state management via
useAtom(hasActiveGQLTasksAtom)
- The
CursorStatus
component is correctly integrated into the Editor component- The component is positioned with proper z-indexing and styling for visual feedback
Since the hook is implemented at the state management level and follows the atomic pattern, it inherently handles state updates and error boundaries through React's built-in mechanisms. No additional error handling is required at the component level.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for useHasActiveGQLTasks usage and implementation echo "Checking useHasActiveGQLTasks implementation..." ast-grep --pattern 'export const useHasActiveGQLTasks = () => { $$$ }' echo "Checking for error handling in GraphQL operations..." rg -l 'useHasActiveGQLTasks' | xargs rg -A 5 'catch|error'Length of output: 710
Script:
#!/bin/bash # Search for the hook definition and its dependencies echo "Searching for useHasActiveGQLTasks definition..." rg -A 10 "useHasActiveGQLTasks" --type typescript echo -e "\nChecking GraphQL task-related queries and mutations..." rg -A 5 "gql`.*task" --type typescript echo -e "\nChecking CursorStatus component implementation..." rg -A 10 "CursorStatus" --type typescriptLength of output: 410
Script:
#!/bin/bash # Search for the hook definition and its dependencies echo "Searching for useHasActiveGQLTasks definition..." rg -A 10 "useHasActiveGQLTasks" --type ts --type tsx echo -e "\nChecking GraphQL task-related code..." rg -A 5 "task.*gql|gql.*task" --type ts --type tsx echo -e "\nChecking CursorStatus component usage..." fd -e ts -e tsx | xargs rg -l "CursorStatus"Length of output: 585
Script:
#!/bin/bash # Search for the hook definition echo "Searching for useHasActiveGQLTasks definition..." rg -A 10 "export.*useHasActiveGQLTasks" echo -e "\nChecking CursorStatus component implementation..." rg -A 15 "export.*CursorStatus" web/src/beta/features/CursorStatus/index.tsx echo -e "\nChecking Editor component's usage of CursorStatus..." rg -A 5 "CursorStatus" web/src/beta/features/Editor/index.tsxLength of output: 1169
web/src/services/gql/provider/index.tsx (3)
7-7
: LGTM: Import changes are well-organizedThe new imports for task management hooks and taskLink are properly organized and align with the PR's objective of tracking active GraphQL requests.
Also applies to: 12-12
61-62
: LGTM: Hook implementation follows React best practicesThe task management hooks are properly implemented at the component level. Let's verify their implementation to ensure they handle task lifecycle correctly.
#!/bin/bash # Description: Verify the implementation of task management hooks # Expected: Find the hook implementations and their usage patterns # Check the hook implementations ast-grep --pattern 'export const use(Add|Remove)GQLTask = ' # Look for other usages of these hooks to understand the patterns rg -l 'use(Add|Remove)GQLTask'
67-67
: Verify taskLink error handling and operation lifecycleThe taskLink is correctly positioned as the first link in the chain, ensuring comprehensive task tracking. However, we should verify its error handling and operation lifecycle management.
✅ Verification successful
Let me gather more context about the taskLink implementation to make a comprehensive verification.
Let me try a different pattern to get the taskLink implementation.
taskLink implementation has proper error handling and cleanup
The taskLink implementation shows robust error handling and operation lifecycle management:
- Error handling: Properly propagates errors to the observer and removes the task
- Cleanup: Task removal is handled in all scenarios (error, completion, and unsubscription)
- Task lifecycle: Uses UUID for unique task tracking and manages task state through callbacks
- Link position: Being first in the chain ensures accurate task tracking for all operations
The implementation follows Apollo Link best practices and ensures proper resource cleanup in all execution paths.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify taskLink implementation and error handling # Expected: Find taskLink implementation and error handling patterns # Check taskLink implementation ast-grep --pattern 'export const taskLink = ' # Look for error handling patterns in taskLink rg -A 5 'catch|error' ./web/src/services/gql/provider/links/taskLink.tsLength of output: 326
Script:
#!/bin/bash # Get the full implementation of taskLink ast-grep --pattern 'export const taskLink = $_($_) { $$$ }' # Check if there are any tests for taskLink fd taskLink.*testLength of output: 85
Script:
#!/bin/bash # Get the content of taskLink file cat ./web/src/services/gql/provider/links/taskLink.ts # Alternative way to find tests rg -l "taskLink.*test|test.*taskLink"Length of output: 977
web/src/services/state/index.ts (1)
79-106
: Verify integration with GraphQL provider and cursor indicator.The implementation provides the necessary state management for tracking GraphQL requests. Let's verify the integration points.
✅ Verification successful
Let me correct the file type flags and try again to verify the integration.
Let me check the GraphQL provider integration specifically.
Based on the verification results, I can now provide a final response:
Implementation is properly integrated and functional ✓
The code shows correct integration at all necessary points:
- GraphQL Provider correctly uses the task tracking hooks to monitor requests
- Task Link middleware properly adds/removes tasks during GraphQL operations
- CursorStatus component correctly implements the loading indicator using the task state
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the integration of GQL task tracking # Check GraphQL provider integration echo "Checking GraphQL provider integration..." rg -l "useAddGQLTask|useRemoveGQLTask" --type ts --type tsx # Check cursor indicator implementation echo "Checking cursor indicator implementation..." rg -l "useHasActiveGQLTasks" --type ts --type tsx # Check for proper error handling echo "Checking error handling in GraphQL operations..." rg "catch.*useAddGQLTask|catch.*useRemoveGQLTask" --type ts --type tsxLength of output: 563
Script:
#!/bin/bash # Description: Verify the integration of GQL task tracking with corrected file types # Check GraphQL provider integration echo "Checking GraphQL provider integration..." rg -l "useAddGQLTask|useRemoveGQLTask" # Check cursor indicator implementation echo "Checking cursor indicator implementation..." rg -l "useHasActiveGQLTasks" # Look for GraphQL operations and hooks usage echo "Checking GraphQL operations..." rg "useQuery|useMutation" -A 5Length of output: 38168
Script:
#!/bin/bash # Check the GraphQL provider implementation echo "Checking GraphQL provider implementation..." rg -A 10 "useAddGQLTask|useRemoveGQLTask" web/src/services/gql/provider/index.tsx # Check cursor status implementation echo "Checking cursor status implementation..." rg -A 10 "useHasActiveGQLTasks" web/src/beta/features/CursorStatus/index.tsxLength of output: 1924
web/src/beta/features/Editor/index.tsx (2)
5-5
: LGTM! Clean import statement.The import follows the existing pattern and is correctly positioned with other feature imports.
148-148
: LGTM! Strategic component placement.The CursorStatus component is well-positioned at the Wrapper level, ensuring it remains visible across all Editor states and above other UI elements, which is ideal for displaying cursor-related indicators.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Outside diff range and nitpick comments (1)
web/src/beta/features/ProjectSettings/index.tsx (1)
13-13
: Consider using absolute imports for consistency.The codebase predominantly uses absolute imports (e.g.,
@reearth/beta/features/Navbar
). Consider updating the import to use the same pattern:-import CursorStatus from "../CursorStatus"; +import CursorStatus from "@reearth/beta/features/CursorStatus";
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
📒 Files selected for processing (5)
- web/src/beta/features/AccountSetting/index.tsx (2 hunks)
- web/src/beta/features/CursorStatus/index.tsx (1 hunks)
- web/src/beta/features/Dashboard/index.tsx (2 hunks)
- web/src/beta/features/ProjectSettings/index.tsx (2 hunks)
- web/src/beta/features/WorkspaceSetting/index.tsx (2 hunks)
🧰 Additional context used
🔇 Additional comments (11)
web/src/beta/features/WorkspaceSetting/index.tsx (2)
5-5
: LGTM!The import statement follows the project's conventions and is properly grouped with other feature imports.
37-37
: Reconsider adding CursorStatus to settings pages.Based on the PR objectives, the GQL request indicator was primarily intended for the Editor component where long-running GraphQL operations are more common. Adding it to settings pages seems unnecessary and might confuse users since these pages typically don't have long-running operations that would benefit from such an indicator.
Consider limiting the CursorStatus component to pages/components that actually need it, like the Editor.
Let's verify if there are any long-running GraphQL operations in the workspace settings:
web/src/beta/features/CursorStatus/index.tsx (4)
1-3
: LGTM! Imports are clean and well-organized.All necessary dependencies are properly imported.
8-11
: LGTM! Clean state initialization.Good practice setting initial position off-screen and using the GQL task hook for visibility control.
24-33
: LGTM! Clean conditional rendering implementation.The component correctly handles conditional rendering and positioning.
45-58
: LGTM! Well-implemented loading animation.The loading animation is cleanly implemented using keyframes and CSS properties. The use of aspect-ratio and radial/conic gradients creates a nice visual effect.
web/src/beta/features/Dashboard/index.tsx (2)
5-5
: LGTM: Clean import statementThe import follows React conventions and uses appropriate relative path resolution.
66-66
: Verify CursorStatus implementation and configurationWhile the component is added correctly, there are a few points to verify:
- The component name "CursorStatus" might not clearly indicate its purpose of showing GraphQL request status
- Verify if the component requires any configuration props
- Ensure the component's positioning works correctly within the Wrapper component
Let's verify the implementation:
✅ Verification successful
Let me generate additional scripts to gather more specific information about the CursorStatus component since the previous results weren't conclusive.
The previous search didn't give us enough context about the component itself. This script will help us:
- Locate the CursorStatus component file
- View its implementation to check for required props
- See how it's imported across the codebase
- Check for any styling that might affect its positioning
Let me try one more time with corrected file type flags and specific path:
This script should:
- Show us the actual implementation of the CursorStatus component
- Show how it's imported and used across the codebase
- Show any styling related to the component
- Help us understand if any props are required
Based on the implementation we found, I can now provide a final response:
CursorStatus implementation is correct and well-configured
The CursorStatus component is correctly implemented as a prop-less component that:
- Automatically tracks mouse position
- Shows a loading indicator next to the cursor only when GraphQL tasks are active
- Uses proper styling and positioning with absolute positioning and z-index
- Handles its own state management through
useHasActiveGQLTasks
hookThe component name, while not explicitly mentioning GraphQL, is appropriate as it reflects its UI behavior (showing status near the cursor) rather than its technical implementation detail.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check CursorStatus implementation and usage across the codebase # Check if CursorStatus accepts any props echo "Checking CursorStatus component definition:" ast-grep --pattern 'const CursorStatus: FC<$_> = $_' # Check consistent usage across other components echo "\nChecking CursorStatus usage patterns:" rg -A 2 '<CursorStatus' --type tsx # Check if there are any related GraphQL hooks or utilities echo "\nChecking related GraphQL status utilities:" rg -l 'useQuery|useMutation' --type ts $(fd -e ts -e tsx CursorStatus)Length of output: 1159
Script:
#!/bin/bash # Search for CursorStatus component definition and implementation echo "Searching for CursorStatus component files:" fd CursorStatus echo "\nChecking CursorStatus component content:" fd CursorStatus -t f -e tsx -e ts -x cat {} echo "\nChecking for CursorStatus imports:" rg "import.*CursorStatus" --type typescript echo "\nChecking for styled components related to CursorStatus:" rg "styled.*CursorStatus" --type typescriptLength of output: 663
Script:
#!/bin/bash # Check the implementation of CursorStatus component echo "Checking CursorStatus component implementation:" cat web/src/beta/features/CursorStatus/index.tsx echo "\nChecking imports across the codebase:" rg "import.*CursorStatus" -t ts -t tsx echo "\nChecking usage patterns:" rg "<CursorStatus" -t ts -t tsx -A 2 echo "\nChecking styled components:" rg "styled.*CursorStatus" -t ts -t tsxLength of output: 2060
web/src/beta/features/AccountSetting/index.tsx (2)
15-15
: LGTM!Clean import statement following the relative path convention.
110-110
: Verify the placement and configuration of CursorStatus.The CursorStatus component is added without any props, and its placement at the end of SettingBase might affect the layout. Additionally, it's unclear how this implementation connects to the PR's objective of showing GraphQL request indicators.
Consider:
- Does CursorStatus need any configuration props?
- Is this the optimal placement for the component in terms of UI/UX?
- How does this implementation track GraphQL requests?
Let's check the CursorStatus implementation and its usage:
✅ Verification successful
Let me gather more information about the CursorStatus component since the previous results didn't show its implementation.
Let me search for the
useHasActiveGQLTasks
hook to understand how the GraphQL request tracking is implemented.
I have enough information to provide the final response now.
The CursorStatus component is correctly implemented and placed
The CursorStatus component is a well-implemented loading indicator that:
- Tracks active GraphQL requests using the
useHasActiveGQLTasks
hook- Shows a loading indicator near the cursor only when there are active GraphQL tasks
- Is consistently placed at the end of layout components across multiple pages
- Requires no additional props as it's self-contained with its own state management
The implementation aligns perfectly with the PR's objective of showing GraphQL request indicators, as it:
- Uses Jotai atoms to track active GraphQL tasks (
activeGQLTasksAtom
)- Automatically removes tasks after a timeout
- Shows a loading indicator only when tasks are active
- Follows the cursor to provide contextual feedback
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Analyze CursorStatus implementation and usage # Check CursorStatus implementation echo "=== CursorStatus Implementation ===" ast-grep --pattern 'export default function CursorStatus' -A 20 # Check if CursorStatus accepts any props echo "=== CursorStatus Props Interface ===" ast-grep --pattern 'interface $_ { $$$ }' # Check other usages of CursorStatus for consistency echo "=== Other CursorStatus Usages ===" rg -A 2 '<CursorStatus'Length of output: 17528
Script:
#!/bin/bash # Search for CursorStatus component definition and implementation echo "=== CursorStatus Component Definition ===" rg -g '*.{ts,tsx}' -A 20 'const CursorStatus|function CursorStatus|class CursorStatus' # Search for imports of CursorStatus echo "=== CursorStatus Imports ===" rg -g '*.{ts,tsx}' 'import.*CursorStatus' # Search for any GraphQL related code near CursorStatus echo "=== GraphQL Related Code Near CursorStatus ===" rg -g '*.{ts,tsx}' -B 5 -A 5 'CursorStatus.*' | rg -C 10 'graphql|useQuery|useMutation'Length of output: 2421
Script:
#!/bin/bash # Search for useHasActiveGQLTasks implementation and usage echo "=== useHasActiveGQLTasks Implementation ===" rg -g '*.{ts,tsx}' -A 10 'useHasActiveGQLTasks' # Search for any related GraphQL task tracking code echo "=== GraphQL Task Tracking Related Code ===" rg -g '*.{ts,tsx}' -A 10 'GQLTasks|graphqlTasks|ActiveGQLTasks' # Search for any Apollo Client related code that might be tracking requests echo "=== Apollo Client Request Tracking ===" rg -g '*.{ts,tsx}' -A 10 'ApolloClient.*link|useApolloClient'Length of output: 6532
web/src/beta/features/ProjectSettings/index.tsx (1)
141-141
: Verify the necessity and implementation of CursorStatus in ProjectSettings.A few concerns regarding the implementation:
- The PR objective mentions this feature is for showing active GraphQL request indicators in the Editor, but it's being added to ProjectSettings.
- No configuration or props are passed to control the component's behavior.
- It's unclear how the component integrates with GraphQL request tracking in this context.
Let's check if this component is consistently implemented across other components:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🧹 Outside diff range and nitpick comments (1)
web/src/beta/features/CursorStatus/index.tsx (1)
9-9
: Consider adjusting initial position to prevent visual flashThe initial position of
-100
could cause a brief flash of the loader off-screen. Consider usingnull
for the initial state to prevent rendering until the first mouse move.-const [mousePosition, setMousePosition] = useState({ x: -100, y: -100 }); +const [mousePosition, setMousePosition] = useState<{ x: number; y: number } | null>(null);
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
📒 Files selected for processing (4)
- web/src/beta/features/CursorStatus/index.tsx (1 hunks)
- web/src/beta/features/Editor/index.tsx (2 hunks)
- web/src/services/gql/provider/links/taskLink.ts (1 hunks)
- web/src/services/state/index.ts (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- web/src/beta/features/Editor/index.tsx
- web/src/services/state/index.ts
Overview
This PR adds an indicator besides mouse cursor for active gql request on Editor / Dashboard / Project Settings / Account Settings / Workspace Settings.
What I've done
What I haven't done
How I tested
Which point I want you to review particularly
Memo
Summary by CodeRabbit
Summary by CodeRabbit
Release Notes
New Features
CursorStatus
component to display the mouse cursor's position and a loading spinner based on active GraphQL tasks.Editor
,AccountSetting
,Dashboard
,ProjectSettings
, andWorkspaceSetting
components by integrating theCursorStatus
for improved UI feedback.Improvements
Refactor
taskLink
for managing GraphQL tasks, ensuring proper lifecycle handling and cleanup.