Skip to content
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: bulk docs prop #1568

Merged
merged 43 commits into from
Feb 10, 2025
Merged

feat: bulk docs prop #1568

merged 43 commits into from
Feb 10, 2025

Conversation

AdiGajbhiye
Copy link
Collaborator

@AdiGajbhiye AdiGajbhiye commented Jan 29, 2025

Overview

Screenshot 2025-02-05 at 12 42 11 PM Screenshot 2025-02-04 at 7 22 13 PM ### Problem

Describe the problem you are solving. Mention the ticket/issue if applicable.

Solution

Describe the implemented solution. Add external references if needed.

Screenshot/Demo

A picture is worth a thousand words. Please highlight the changes if applicable.

How to test

  • Steps to be followed to verify the solution or code changes
  • Mention if there is any settings configuration added/changed/deleted

Checklist

  • I have run this code and it appears to resolve the stated issue
  • README.md updated and added information about my change

Important

Add bulk documentation propagation feature with new UI components, state management, and telemetry events.

  • Behavior:
    • Added bulk documentation propagation panel to DocumentationEditor.tsx.
    • Introduced BulkDocumentationPropagationPanel and SingleColumnCard components in DocumentationPropagation.tsx.
    • Added ability to cancel column lineage operations in docsEditPanel.ts and newLineagePanel.ts.
    • New telemetry event DocumentationEditor/SaveBulk in events.ts.
  • UI Components:
    • Added Loader component in loader/index.tsx with configurable sizes.
    • Updated BulkGenerateButton.tsx to include "Propagate to downstream models" option.
    • Added new CSS styles in styles.module.scss for documentation propagation.
  • State Management:
    • Updated documentationSlice.ts to manage visibility of documentation panels.
    • Added showSingleDocsPropRightPanel and showBulkDocsPropRightPanel to DocumentationStateProps in types.ts.
  • Misc:
    • Minor updates to stack/Stack.tsx and index.ts for component exports.

This description was created by Ellipsis for defe7f9. It will automatically update as commits are pushed.


Summary by CodeRabbit

Release Notes

  • New Features

    • Added a bulk documentation propagation panel to the documentation editor.
    • Introduced a new loader component with configurable sizes.
    • Added ability to cancel column lineage operations.
    • New telemetry event for documentation editor's save functionality.
  • Improvements

    • Enhanced documentation editor with more flexible state management.
    • Improved UI components with better styling and interaction options.
    • Updated user interface to manage progress and cancellation during lineage retrieval.
    • Adjusted layout and design for documentation propagation with new styles.
  • Technical Updates

    • Enhanced cancellation handling for long-running column lineage tasks.
    • Introduced new components for better document management and interaction.
    • Added new utility functions and refined existing logic for improved user interaction.
    • Streamlined unsaved changes handling in the documentation provider.
    • Updated the DocumentationHelpContent to reflect broader functionality in the actions button.
    • Modified the DocumentationProvider to simplify unsaved changes interactions.
    • Introduced new state properties for managing visibility of documentation panels.
    • Added new CSS classes for improved loader and documentation propagation styles.
    • Updated the Stack component to improve class name handling.

Copy link
Contributor

coderabbitai bot commented Jan 29, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

This pull request introduces several changes across multiple files, focusing on the management of cancellation tokens, documentation propagation, and the addition of UI components. Key modifications include the removal of the handleColumnLineage method from DbtLineageService, updates to the cancellation handling in DocsEditViewPanel, and the introduction of a new Loader component. The changes also enhance the documentation propagation features in the documentation editor with new components and state management improvements.

Changes

File Change Summary
src/services/dbtLineageService.ts Removed handleColumnLineage method; updated getConnectedColumns method to accept cancellationTokenSource as a parameter.
src/webview_provider/docsEditPanel.ts Added CancellationTokenSource import and enhanced logic for cancelling column lineage operations.
webview_panels/src/assets/icons/index.tsx Added export for LoaderIcon component.
webview_panels/src/modules/documentationEditor/DocumentationEditor.tsx Imported and added BulkDocumentationPropagationPanel to the JSX structure.
webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx Introduced new option for "Propagate to downstream models" and updated onOptionSelect logic.
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx Added new components and logic, including mergeDocItems, SingleColumnCard, and BulkDocumentationPropagationPanel, along with updates to existing logic for better state management.
webview_panels/src/modules/documentationEditor/state/documentationSlice.ts Introduced new state property showBulkDocsPropRightPanel and added a reducer function updateBulkDocsPropRightPanel.
webview_panels/src/modules/documentationEditor/state/types.ts Added showBulkDocsPropRightPanel to DocumentationStateProps interface.
webview_panels/src/uiCore/components/loader/index.tsx Introduced new Loader component with props for size and styling.
webview_panels/src/uiCore/components/loader/styles.module.scss Added styles for the loader component, including size-specific classes and animations.
webview_panels/src/uiCore/index.ts Added export for Loader component.
src/webview_provider/newLineagePanel.ts Introduced DerivedCancellationTokenSource class and updated cancellation handling in NewLineagePanel.
webview_panels/src/modules/documentationEditor/components/documentationPropagation/styles.module.scss Added new CSS classes including .propagateContainer, .singleColumnAccordion, and .captionText with specific styles.
src/telemetry/events.ts Added new telemetry event for bulk documentation saves.
src/altimate.ts Introduced BulkDocsPropRequest interface and bulkDocsPropCredit method in AltimateRequest class.
webview_panels/src/modules/documentationEditor/components/help/DocumentationHelpContent.tsx Modified text content to refer to the "actions" button instead of the "Generate" button.
webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx Removed SAVE_PROCEED entry from ActionState enum, simplifying unsaved changes handling.

Possibly related PRs

  • feat: documentation lineage propagation #1498: The changes in the main PR, specifically the modifications to the DbtLineageService class and the introduction of the DerivedCancellationTokenSource, are directly related to the changes in the retrieved PR, which also involves the DbtLineageService and its methods for managing column lineage, including the addition of the handleColumnLineage method.
  • feat: lineage refactor #1212: The changes in the main PR, which involve modifications to the DbtLineageService class and its cancellation handling, are related to the retrieved PR as both involve the NewLineagePanel class and its handling of cancellation tokens in lineage operations.

Suggested reviewers

  • AdiGajbhiye

Warning

There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx

Oops! Something went wrong! :(

ESLint: 8.57.1

ESLint couldn't find the plugin "eslint-plugin-react".

(The package "eslint-plugin-react" was not found when loaded as a Node module from the directory "/webview_panels".)

It's likely that the plugin isn't installed correctly. Try reinstalling by running the following:

npm install eslint-plugin-react@latest --save-dev

The plugin "eslint-plugin-react" was referenced from the config file in "webview_panels/.eslintrc.cjs".

If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3dc39c7 and defe7f9.

📒 Files selected for processing (2)
  • src/webview_provider/docsEditPanel.ts (7 hunks)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (7 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

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?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Reviewed everything up to e99d753 in 1 minute and 38 seconds

More details
  • Looked at 890 lines of code in 12 files
  • Skipped 1 files when reviewing.
  • Skipped posting 4 drafted comments based on config settings.
1. src/services/dbtLineageService.ts:263
  • Draft comment:
    Consider encapsulating the logic for setting cancellationTokenSource in a method to ensure consistent behavior and reduce potential errors.
  • Reason this comment was not posted:
    Confidence changes required: 50%
    The cancellationTokenSource is being set directly in multiple places, which can lead to potential issues if not managed properly. It would be better to encapsulate this logic within a method to ensure consistent behavior and reduce the risk of errors.
2. src/webview_provider/docsEditPanel.ts:721
  • Draft comment:
    Ensure consistent error handling and response sending in handleSyncRequestFromWebview method across all usages.
  • Reason this comment was not posted:
    Confidence changes required: 50%
    The handleSyncRequestFromWebview method is used multiple times with similar logic. It would be beneficial to ensure that the error handling and response sending are consistent across all usages.
3. webview_panels/src/uiCore/components/loader/index.tsx:19
  • Draft comment:
    Ensure that LoaderIcon is optimized for performance, especially if it involves complex rendering like SVG.
  • Reason this comment was not posted:
    Confidence changes required: 33%
    The Loader component is implemented correctly, but the LoaderIcon is being used directly. It might be beneficial to ensure that the LoaderIcon is properly optimized for performance, especially if it involves SVG or other complex rendering.
4. src/services/dbtLineageService.ts:264
  • Draft comment:
    Specify a return type for the getConnectedColumns function to improve clarity and ease of refactoring.
  • Reason this comment was not posted:
    Comment was on unchanged code.

Workflow ID: wflow_b3I4wdHYtwYo2Wpk


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🔭 Outside diff range comments (2)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

Line range hint 166-288: Consider adding error handling for asynchronous calls.
If executeRequestInSync("getDownstreamColumns", ...) fails, the function might terminate unexpectedly. A try/catch or error check would improve resilience.

🧰 Tools
🪛 Biome (1.9.4)

[error] 82-82: Avoid the use of spread (...) syntax on accumulators.

Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.

(lint/performance/noAccumulatingSpread)

webview_panels/src/modules/documentationEditor/state/documentationSlice.ts (1)

Add tests for the bulk documentation propagation feature

The codebase lacks test coverage for the documentation editor module. Specifically:

  • No tests found for documentationSlice.ts reducers
  • Missing tests for BulkGenerateButton component
  • No integration tests for the bulk documentation feature

Consider adding tests under webview_panels/src/modules/documentationEditor/__tests__/ to align with the existing project structure.

🔗 Analysis chain

Line range hint 1-278: Add tests for the new bulk documentation propagation feature.

Consider adding tests to verify:

  1. The new reducer behavior
  2. The integration with BulkGenerateButton
  3. Error handling scenarios

Let me help you verify the current test coverage:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for existing test files related to documentation editor
fd -e test.tsx -e spec.tsx -e test.ts -e spec.ts . webview_panels/src/modules/documentationEditor

# Search for existing test cases related to bulk generation
rg -l "describe.*[Bb]ulk.*[Gg]enerat" webview_panels/src/modules/documentationEditor

Length of output: 186


Script:

#!/bin/bash
# First, let's verify the repository structure
ls -la webview_panels/src/modules/documentationEditor/

# Look for test files in the entire webview_panels directory
fd -e test.tsx -e spec.tsx -e test.ts -e spec.ts . webview_panels/

# Search for any files containing 'documentationSlice'
rg -l "documentationSlice" webview_panels/

Length of output: 2091


Script:

#!/bin/bash
# Look for test files in different common test directory patterns
fd -t d "(test|tests|__tests__|__test__|spec)" webview_panels/

# Look for any file containing the word "test" in the path
fd . webview_panels/ | rg -i "test"

# Check if there are any Jest configuration files that might indicate test location
fd "jest" webview_panels/

Length of output: 2654

🧹 Nitpick comments (8)
webview_panels/src/uiCore/components/loader/index.tsx (2)

5-8: Consider adding aria attributes for accessibility.

The LoaderProps interface should include aria-label for better accessibility.

 interface LoaderProps {
   size?: "small" | "medium" | "large";
   className?: string;
+  "aria-label"?: string;
 }

16-22: Apply consistent className handling and improve accessibility.

  1. Use nullish coalescing for className like in Stack component
  2. Add aria attributes for loading state
-const Loader: FC<LoaderProps> = ({ size = "medium", className = "" }) => {
+const Loader: FC<LoaderProps> = ({ 
+  size = "medium", 
+  className, 
+  "aria-label": ariaLabel = "Loading" 
+}) => {
   return (
     <div 
-      className={`${styles.loader} ${styleSizeMap[size]} ${className}`}
+      className={`${styles.loader} ${styleSizeMap[size]} ${className ?? ""}`}
+      role="status"
+      aria-label={ariaLabel}
+      aria-live="polite"
     >
       <LoaderIcon />
     </div>
   );
 };
webview_panels/src/uiCore/components/loader/styles.module.scss (2)

1-16: Optimize animation performance.

The loader animation could benefit from hardware acceleration and motion preferences support.

Consider applying these improvements:

 .loader {
   display: flex;
   justify-content: center;
   align-items: center;
+  will-change: transform;
 
   @keyframes rotate {
     0% {
-      transform: rotate(0deg);
+      transform: rotate(0) translateZ(0);
     }
     100% {
-      transform: rotate(360deg);
+      transform: rotate(360deg) translateZ(0);
     }
   }
 
   animation: rotate 2s linear infinite;
+
+  @media (prefers-reduced-motion: reduce) {
+    animation: none;
+  }
 }

18-31: Consider using SCSS variables for maintainable size definitions.

The size classes could be more maintainable using SCSS variables and calculations.

Consider refactoring to:

+$loader-size-base: 20px;
+
 .sizeSmall {
-  width: 20px;
-  height: 20px;
+  width: $loader-size-base;
+  height: $loader-size-base;
 }
 
 .sizeMedium {
-  width: 40px;
-  height: 40px;
+  width: $loader-size-base * 2;
+  height: $loader-size-base * 2;
 }
 
 .sizeLarge {
-  width: 60px;
-  height: 60px;
+  width: $loader-size-base * 3;
+  height: $loader-size-base * 3;
 }
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (2)

79-88: Optimize object accumulator usage inside .reduce().
Using the spread operator (...acc) in every iteration can lead to O(n²) performance. Rewrite it to mutate the accumulator directly for efficiency.

- setSelectedColumns(
-   downstreamColumns.reduce(
-     (acc, curr) => ({
-       ...acc,
-       [curr.model + "/" + curr.column]: value,
-     }),
-     {},
-   ),
- );
+ setSelectedColumns(
+   downstreamColumns.reduce((acc, curr) => {
+     acc[curr.model + "/" + curr.column] = value;
+     return acc;
+   }, {})
+ );
🧰 Tools
🪛 Biome (1.9.4)

[error] 82-82: Avoid the use of spread (...) syntax on accumulators.

Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.

(lint/performance/noAccumulatingSpread)


Line range hint 290-429: Minor improvement: Simplify counting logic for downstream columns.
At line 400, using Object.values(allColumns).flat().length is unnecessary if allColumns is a one-dimensional array of objects. Replace with allColumns.length to improve clarity:

- <div>{Object.values(allColumns).flat().length}</div>
+ <div>{allColumns.length}</div>
webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx (2)

162-165: Add telemetry for docs propagation action.

For consistency with other actions, consider sending a telemetry event after dispatching the action. This will help track usage of the new feature.

 case "docs-prop": {
   dispatch(updateBulkDocsPropRightPanel(true));
+  sendTelemetryEvent(value);
   break;
 }

162-165: Add error handling for docs propagation.

Other actions in the switch statement have specific error handling in their respective functions. Consider wrapping the dispatch in a try-catch block for consistency and robustness.

 case "docs-prop": {
-  dispatch(updateBulkDocsPropRightPanel(true));
+  try {
+    dispatch(updateBulkDocsPropRightPanel(true));
+    sendTelemetryEvent(value);
+  } catch (err) {
+    panelLogger.error("error updating bulk docs prop panel", err);
+  }
   break;
 }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5735fa6 and e99d753.

⛔ Files ignored due to path filters (1)
  • webview_panels/src/assets/icons/loader.svg is excluded by !**/*.svg
📒 Files selected for processing (12)
  • src/services/dbtLineageService.ts (1 hunks)
  • src/webview_provider/docsEditPanel.ts (4 hunks)
  • webview_panels/src/assets/icons/index.tsx (1 hunks)
  • webview_panels/src/modules/documentationEditor/DocumentationEditor.tsx (2 hunks)
  • webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx (3 hunks)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (8 hunks)
  • webview_panels/src/modules/documentationEditor/state/documentationSlice.ts (3 hunks)
  • webview_panels/src/modules/documentationEditor/state/types.ts (1 hunks)
  • webview_panels/src/uiCore/components/loader/index.tsx (1 hunks)
  • webview_panels/src/uiCore/components/loader/styles.module.scss (1 hunks)
  • webview_panels/src/uiCore/components/stack/Stack.tsx (1 hunks)
  • webview_panels/src/uiCore/index.ts (1 hunks)
🧰 Additional context used
🪛 Biome (1.9.4)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx

[error] 82-82: Avoid the use of spread (...) syntax on accumulators.

Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.

(lint/performance/noAccumulatingSpread)

⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
🔇 Additional comments (22)
webview_panels/src/uiCore/components/stack/Stack.tsx (1)

18-18: Good improvement in className handling!

The use of nullish coalescing operator (??) is a better approach to handle potentially undefined className props, preventing "undefined" from appearing in the final className string.

webview_panels/src/uiCore/index.ts (1)

53-53: LGTM!

The Loader component export follows the established pattern and maintains consistent file organization.

webview_panels/src/assets/icons/index.tsx (1)

31-31: LGTM!

The LoaderIcon export follows the established pattern and maintains consistent file organization with other SVG icons.

src/services/dbtLineageService.ts (1)

263-263: LGTM! Property visibility change enables cancellation functionality.

The change from private to public visibility for cancellationTokenSource is necessary to support the new cancellation functionality in docsEditPanel.ts.

Let's verify all the places where this property is accessed:

✅ Verification successful

Verified: Property visibility change is properly implemented and necessary

The cancellationTokenSource property is accessed exactly as intended - externally only by docsEditPanel.ts for cancellation control, and internally by dbtLineageService.ts for token lifecycle management. The visibility change enables the required cancellation functionality without introducing any architectural issues.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find all usages of cancellationTokenSource in the codebase.
rg -A 5 'cancellationTokenSource' --type ts

Length of output: 6217

src/webview_provider/docsEditPanel.ts (4)

4-4: LGTM! Import added for cancellation functionality.

The import of CancellationTokenSource is correctly placed with other vscode imports and is necessary for the new cancellation functionality.


724-724: LGTM! Proper handling of empty tables case.

The response correctly includes empty arrays for column lineage and tables, along with the tests object, following defensive programming practices.


733-734: LGTM! Proper initialization of cancellation token source.

The cancellation token source is correctly initialized before the async operation, enabling cancellation support.


750-753: LGTM! Clean implementation of cancellation handler.

The cancellation handler is simple and effective, properly calling cancel() on the cancellation token source to stop ongoing column lineage operations.

webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (8)

3-12: No concerns with the import statements.
Everything looks good here, and these imports are in line with the new UI elements being used.


15-15: No issues with adding this import.
This import for executeRequestInSync is consistent with its usage in this file.


18-18: No issues with adding this import.
The import for bringing in updateBulkDocsPropRightPanel is aligned with the new panel feature.


29-29: New optional “root” property looks properly integrated.
This additional property provides clarity on the origin column. No issues detected.


49-59: mergeDocItems function logic is sound.
The function effectively merges distinct items by comparing model and column. This is a clean and simple approach to avoid duplicates.


61-78: General structure of SingleColumnCard meets functional requirements.
Shows a neat layout for column details and a consistent React design pattern.


90-164: No issues with the remainder of SingleColumnCard.
The “Select All” / “Unselect All” flow is handled elegantly, and the dynamic rendering of columns is well-structured.


Line range hint 431-524: Implementation of the DocumentationPropagationButton looks good.
The logic properly manages state, triggers propagation upon user interaction, and gracefully handles the loading state.

webview_panels/src/modules/documentationEditor/state/types.ts (1)

76-76: Addition of showBulkDocsPropRightPanel is consistent with its usage.
This boolean flag to toggle the new right panel is straightforward and well-aligned with the state’s design.

webview_panels/src/modules/documentationEditor/DocumentationEditor.tsx (2)

24-24: Importing BulkDocumentationPropagationPanel is correct.
No issues found with introducing this import statement.


153-153: Proper integration of BulkDocumentationPropagationPanel into the editor.
This addition extends the functionality without disrupting existing logic.

webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx (1)

6-9: LGTM! Clear and descriptive option added for documentation propagation.

The new option "Propagate docs to downstream models" is well-placed in the Documentation section and its purpose is clear from the label.

Also applies to: 44-44

webview_panels/src/modules/documentationEditor/state/documentationSlice.ts (2)

34-34: LGTM! State property follows conventions.

The new state property showBulkDocsPropRightPanel follows the existing naming pattern and is appropriately initialized.


71-78: LGTM! Reducer implementation follows Redux Toolkit patterns.

The new reducer is well-implemented with proper typing and follows the established patterns in the codebase.

Also applies to: 275-275

@@ -260,7 +260,7 @@ export class DbtLineageService {
return g.get(key)?.nodes.length || 0;
}

private cancellationTokenSource: CancellationTokenSource | undefined;
cancellationTokenSource: CancellationTokenSource | undefined;
Copy link
Contributor

Choose a reason for hiding this comment

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

Create method and make private or move this to doc edit panel. I think it is weird for the service to have this state.

Comment on lines 733 to 734
this.dbtLineageService.cancellationTokenSource =
new CancellationTokenSource();
Copy link
Contributor

Choose a reason for hiding this comment

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

See above

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 137c99b in 1 minute and 2 seconds

More details
  • Looked at 318 lines of code in 3 files
  • Skipped 0 files when reviewing.
  • Skipped posting 5 drafted comments based on config settings.
1. src/webview_provider/newLineagePanel.ts:32
  • Draft comment:
    The DerivedCancellationTokenSource class is defined here and in dbtLineageService.ts. Consider defining it once and reusing it to avoid redundancy.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable:
    Without being able to see dbtLineageService.ts, I cannot verify if this class is actually duplicated. The comment makes a claim about code in another file that I cannot validate. According to the rules, I should not keep comments that require more context or seeing other files to verify.
    The comment could be correct - there might actually be duplication that should be fixed. Removing it could mean missing an opportunity to improve code quality.
    While the duplication might exist, I cannot verify it with the information provided. The rules clearly state that if understanding requires seeing other files, the comment should be deleted.
    Delete the comment since verifying its claim requires seeing another file that is not part of this diff.
2. src/webview_provider/newLineagePanel.ts:173
  • Draft comment:
    Ensure the previous cancellationTokenSource is disposed of before creating a new one to prevent potential memory leaks.
  • Reason this comment was not posted:
    Comment did not seem useful.
3. src/webview_provider/docsEditPanel.ts:735
  • Draft comment:
    Ensure the previous cancellationTokenSource is disposed of before creating a new one to prevent potential memory leaks.
  • Reason this comment was not posted:
    Marked as duplicate.
4. src/services/dbtLineageService.ts:212
  • Draft comment:
    Specify a return type for the getConnectedColumns function to improve code readability and maintainability.
  • Reason this comment was not posted:
    Comment was on unchanged code.
5. src/webview_provider/docsEditPanel.ts:726
  • Draft comment:
    Specify a return type for the getConnectedColumns function to improve code readability and maintainability.
  • Reason this comment was not posted:
    Marked as duplicate.

Workflow ID: wflow_DzFLr2F5xcFLYYmd


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (5)
src/webview_provider/newLineagePanel.ts (2)

168-174: Consider disposing the cancellation token source.

The token source should be disposed after use to prevent memory leaks.

 const body = await this.dbtLineageService.getConnectedColumns(
   {
     ...params,
     eventType: "column_lineage",
   },
   this.cancellationTokenSource ?? new CancellationTokenSource(),
 );
+this.cancellationTokenSource?.dispose();

319-321: Replace console.log with proper logging.

Use the terminal service for consistent logging across the application.

-    this.cancellationTokenSource?.token.onCancellationRequested((e) => {
-      console.log(e);
-    });
+    this.cancellationTokenSource?.token.onCancellationRequested((e) => {
+      this.terminal.debug("handleColumnLineage", "Cancellation requested", e);
+    });
src/services/dbtLineageService.ts (1)

279-279: Consider extracting the empty result into a constant.

The empty result object is duplicated. Extract it into a constant for better maintainability.

+const EMPTY_COLUMN_LINEAGE_RESULT = { column_lineage: [] };
+
 async getConnectedColumns(
   // ... existing parameters ...
 ) {
   // ... existing code ...
   if (cancellationTokenSource.token.isCancellationRequested) {
-    return { column_lineage: [] };
+    return EMPTY_COLUMN_LINEAGE_RESULT;
   }
   // ... existing code ...
   if (cancellationTokenSource.token.isCancellationRequested) {
-    return { column_lineage: [] };
+    return EMPTY_COLUMN_LINEAGE_RESULT;
   }
   // ... existing code ...
 }

Also applies to: 365-365

src/webview_provider/docsEditPanel.ts (2)

725-736: Consider disposing the cancellation token source after use.

The token source should be disposed after the operation completes or fails to prevent memory leaks.

 this.cancellationTokenSource = new CancellationTokenSource();
 const columns = await this.dbtLineageService.getConnectedColumns(
   {
     targets,
     currAnd1HopTables,
     selectedColumn,
     upstreamExpansion: true,
     showIndirectEdges: false,
     eventType: "documentation_propagation",
   },
   this.cancellationTokenSource!,
 );
+this.cancellationTokenSource?.dispose();

744-747: Consider disposing the token source after cancellation.

The token source should be disposed after cancellation to prevent memory leaks.

 case "cancelColumnLineage": {
   this.cancellationTokenSource?.cancel();
+  this.cancellationTokenSource?.dispose();
   break;
 }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e99d753 and 137c99b.

📒 Files selected for processing (3)
  • src/services/dbtLineageService.ts (3 hunks)
  • src/webview_provider/docsEditPanel.ts (4 hunks)
  • src/webview_provider/newLineagePanel.ts (5 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: test (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
🔇 Additional comments (4)
src/webview_provider/newLineagePanel.ts (2)

32-39: LGTM! Clean implementation of cancellation token linking.

The DerivedCancellationTokenSource class effectively implements token linking, following the single responsibility principle.


48-49: LGTM! Well-typed property declarations.

The private properties are properly typed and initialized.

src/services/dbtLineageService.ts (1)

212-230: LGTM! Well-structured method signature with clear parameter types.

The method signature is clear and follows TypeScript best practices.

src/webview_provider/docsEditPanel.ts (1)

4-4: LGTM! Clean import and property declaration.

The import and property are well-structured and properly typed.

Also applies to: 114-114

Copy link
Contributor

@mdesmet mdesmet left a comment

Choose a reason for hiding this comment

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

LGTM

@@ -38,6 +41,7 @@ const BulkGenerateButton = (): JSX.Element => {
{ label: "Generate all columns", value: "all" },
{ label: "Generate only missing columns", value: "missing" },
{ label: "Select columns", value: "selected" },
{ label: "Propagate docs to downstream models", value: "docs-prop" },
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
{ label: "Propagate docs to downstream models", value: "docs-prop" },
{ label: "Propagate to downstream models", value: "docs-prop" },

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

❌ Changes requested. Incremental review on d6d2e38 in 1 minute and 28 seconds

More details
  • Looked at 90 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 5 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:359
  • Draft comment:
    The filtering logic was changed: previously, the filter checked both for a truthy description and that downstream columns exist (or loading was in progress). Now it only checks for a truthy description and then sorts by downstream count. Verify that removing the downstream existence condition is intended.
  • Reason this comment was not posted:
    Comment did not seem useful.
2. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:386
  • Draft comment:
    The conditional rendering for the action buttons has been refactored to use a ternary operator, rendering a Cancel button when loading, and the Select/Unselect buttons when not loading. This improves clarity. Ensure that this logic aligns with the intended UX, as the switch in conditions is a significant change.
  • Reason this comment was not posted:
    Comment did not seem useful.
3. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:420
  • Draft comment:
    The Propagate documentation button now displays a count of selected columns inline. While this is useful for feedback, consider adding clearer spacing or formatting so that the count is visually distinct from the button label.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable:
    This is a pure UI styling suggestion about how to display the count more visually distinctly. According to the rules, we should NOT comment on UI or styling changes - we should assume the author styled it correctly. The parentheses format is a common and clear way to show counts.
    The comment does identify a potential usability concern about visual clarity. Maybe there's an accessibility issue here that makes this more than just styling?
    No, this is purely about visual styling preferences. The parentheses format is standard and accessible. There's no clear technical or accessibility issue being raised.
    Delete this comment as it violates the rule about not commenting on UI/styling changes. The author's choice to use parentheses is reasonable and standard.
4. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:386
  • Draft comment:
    The conditional rendering for the action buttons now uses nested ternary operators based on 'isLoading' and 'allColumns.length'. For better readability and maintainability, consider extracting this logic into a separate component or variable, or using early returns to simplify the JSX.
  • Reason this comment was not posted:
    Marked as duplicate.
5. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:422
  • Draft comment:
    Appending the count of selected columns to the 'Propagate documentation' button improves feedback. Just ensure that the formatting (especially spacing and parentheses) remains clear, and that the count updates correctly with state changes.
  • Reason this comment was not posted:
    Confidence changes required: 33%
    None

Workflow ID: wflow_hG3zcapKJY3yjM2f


Want Ellipsis to fix these issues? Tag @ellipsis-dev in a comment. You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

.filter((c) => Boolean(c.description))
.sort(
(a, b) =>
allColumns.filter((item) => item.root === b.name).length -
Copy link
Contributor

Choose a reason for hiding this comment

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

The new sort comparator directly calls filter on 'allColumns' for each comparison. If 'allColumns' grows large, this might impact performance. Consider precomputing the counts for each column or caching results to avoid repeated filtering.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🔭 Outside diff range comments (2)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (2)

187-230: Add error handling for API calls

The loadMoreDownstreamModels function should handle potential API errors to prevent the UI from being stuck in a loading state.

 const loadMoreDownstreamModels = async () => {
   isCancelled.current = false;
   setIsLoading(true);
+  try {
     let iCurrColumns = currColumns;
     while (iCurrColumns.length > 0 && !isCancelled.current) {
       const result = (await executeRequestInSync("getDownstreamColumns", {
         targets: iCurrColumns.map((c) => [c.model, c.column]),
         model: currentDocsData?.uniqueId,
         column: iCurrColumns[0].column,
       })) as DownstreamColumns;
       // ... rest of the code
     }
+  } catch (error) {
+    console.error('Failed to load downstream models:', error);
+    // Consider showing an error message to the user
+  } finally {
     setIsLoading(false);
     setCurrColumns(iCurrColumns);
+  }
 };

334-342: Optimize reducer performance

The spread operator in the reducer can lead to O(n²) complexity. Consider using Object.assign for better performance.

 setSelectedColumns(
   allColumns.reduce(
     (acc, curr) => ({
-      ...acc,
-      [curr.model + "/" + curr.column]: value,
+      [curr.model + "/" + curr.column]: value
     }),
-    {},
+    Object.create(null)
   ),
 );
🧰 Tools
🪛 Biome (1.9.4)

[error] 337-337: Avoid the use of spread (...) syntax on accumulators.

Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.

(lint/performance/noAccumulatingSpread)

🧹 Nitpick comments (3)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (3)

49-59: Optimize mergeDocItems performance using Set

The current implementation uses a linear search to check for duplicates, which has O(n²) complexity. Consider using a Set for better performance.

 const mergeDocItems = (a: DocsItem[], b: DocsItem[]): DocsItem[] => {
-  const result = [...a];
-  for (const item of b) {
-    if (
-      !result.find((i) => i.model === item.model && i.column === item.column)
-    ) {
-      result.push(item);
-    }
-  }
-  return result;
+  const seen = new Set(a.map(item => `${item.model}/${item.column}`));
+  return [...a, ...b.filter(item => {
+    const key = `${item.model}/${item.column}`;
+    if (seen.has(key)) return false;
+    seen.add(key);
+    return true;
+  })];
 };

333-343: Extract shared column selection logic

The setAllColumnsValue function is duplicated across components. Consider extracting it into a shared utility function.

+const createSetAllColumnsValue = (columns: DocsItem[], setSelectedColumns: React.Dispatch<React.SetStateAction<Record<string, boolean>>>) => 
+  (value: boolean) => {
+    setSelectedColumns(
+      columns.reduce(
+        (acc, curr) => ({
+          ...acc,
+          [curr.model + "/" + curr.column]: value,
+        }),
+        {},
+      ),
+    );
+  };

-const setAllColumnsValue = (value: boolean) => {
-  setSelectedColumns(
-    allColumns.reduce(
-      (acc, curr) => ({
-        ...acc,
-        [curr.model + "/" + curr.column]: value,
-      }),
-      {},
-    ),
-  );
-};
+const setAllColumnsValue = createSetAllColumnsValue(allColumns, setSelectedColumns);
🧰 Tools
🪛 Biome (1.9.4)

[error] 337-337: Avoid the use of spread (...) syntax on accumulators.

Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.

(lint/performance/noAccumulatingSpread)


359-378: Optimize array operations in render

The filtering and sorting operations in the render method could be memoized to prevent unnecessary recalculations.

+const useMemoizedColumns = (columns: any[], allColumns: DocsItem[]) => {
+  return useMemo(() => 
+    columns
+      .filter((c) => Boolean(c.description))
+      .sort(
+        (a, b) =>
+          allColumns.filter((item) => item.root === b.name).length -
+          allColumns.filter((item) => item.root === a.name).length,
+      ),
+    [columns, allColumns]
+  );
+};

+const memoizedColumns = useMemoizedColumns(currentDocsData?.columns ?? [], allColumns);

-{currentDocsData?.columns
-  .filter((c) => Boolean(c.description))
-  .sort(
-    (a, b) =>
-      allColumns.filter((item) => item.root === b.name).length -
-      allColumns.filter((item) => item.root === a.name).length,
-  )
+{memoizedColumns
   .map((c) => (
     <SingleColumnCard
       // ... props
     />
   ))}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 137c99b and d6d2e38.

📒 Files selected for processing (2)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (8 hunks)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/styles.module.scss (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/styles.module.scss
🧰 Additional context used
🪛 Biome (1.9.4)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx

[error] 82-82: Avoid the use of spread (...) syntax on accumulators.

Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.

(lint/performance/noAccumulatingSpread)

⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: test (macos-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (macos-latest)
🔇 Additional comments (1)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

61-164: Well-structured component with proper prop typing and loading state handling

The SingleColumnCard component is well-implemented with proper TypeScript types and handles loading states appropriately.

🧰 Tools
🪛 Biome (1.9.4)

[error] 82-82: Avoid the use of spread (...) syntax on accumulators.

Spread syntax should be avoided on accumulators (like those in .reduce) because it causes a time complexity of O(n^2).
Consider methods such as .splice or .push instead.

(lint/performance/noAccumulatingSpread)

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 2ec0d7f in 23 seconds

More details
  • Looked at 34 lines of code in 2 files
  • Skipped 0 files when reviewing.
  • Skipped posting 4 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:147
  • Draft comment:
    Good use of conditional rendering for the description field. This prevents rendering an empty description row when none exists. Ensure that the description text is sanitized if it comes from external sources.
  • Reason this comment was not posted:
    Confidence changes required: 0%
    None
2. webview_panels/src/modules/documentationEditor/components/documentationPropagation/styles.module.scss:9
  • Draft comment:
    Grid template columns updated from '1fr 3fr' to '1.2fr 3fr'. Confirm that these new column ratios are consistent with the overall design system.
  • Reason this comment was not posted:
    Confidence changes required: 0%
    None
3. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:148
  • Draft comment:
    Good use of conditional rendering for 'item.description'. This prevents rendering an empty row when no description is provided. Consider also trimming the description if whitespace-only strings are possible.
  • Reason this comment was not posted:
    Confidence changes required: 0%
    None
4. webview_panels/src/modules/documentationEditor/components/documentationPropagation/styles.module.scss:8
  • Draft comment:
    The grid-template-columns adjustment from '1fr 3fr' to '1.2fr 3fr' refines the layout. Verify that this change provides the intended visual balance across various screen sizes.
  • Reason this comment was not posted:
    Confidence changes required: 0%
    None

Workflow ID: wflow_eOcc6bnTjNaZNT6B


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on bbb5b4e in 55 seconds

More details
  • Looked at 56 lines of code in 3 files
  • Skipped 0 files when reviewing.
  • Skipped posting 9 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx:44
  • Draft comment:
    Updated option label for propagation: changed from 'Propagate docs to downstream models' to 'Propagate to downstream models' for brevity and clarity.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative, explaining a change in the label text for brevity and clarity. It does not provide a suggestion, ask for confirmation, or highlight a potential issue. According to the rules, purely informative comments should be removed.
2. webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx:186
  • Draft comment:
    Updated button text from 'Bulk generate' to 'Bulk actions' to reflect expanded functionality.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative, explaining a change in the button text. It does not provide any actionable feedback or suggestions for improvement, nor does it ask for confirmation of intent or testing. According to the rules, purely informative comments should be removed.
3. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:424
  • Draft comment:
    Replaced per-column loading indicator (isColumnLineageLoading[c.name]) with the global isLoading state; ensure this meets UX needs for feedback.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    The comment is asking the author to ensure that the change meets UX needs, which is against the rules. It doesn't provide a specific suggestion or point out a clear issue with the code. Therefore, it should be removed.
4. webview_panels/src/modules/documentationEditor/components/help/DocumentationHelpContent.tsx:57
  • Draft comment:
    Updated help content text to reference the new 'Bulk actions' button label.
  • Reason this comment was not posted:
    Marked as duplicate.
5. webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx:44
  • Draft comment:
    Changed option label to 'Propagate to downstream models' for conciseness. Ensure this aligns with the design language.
  • Reason this comment was not posted:
    Marked as duplicate.
6. webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx:189
  • Draft comment:
    Updated dropdown button text from 'Bulk generate' to 'Bulk actions' to better reflect the range of available operations.
  • Reason this comment was not posted:
    Marked as duplicate.
7. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:424
  • Draft comment:
    Replaced per-column loading indicator (isColumnLineageLoading[c.name]) with a global 'isLoading' flag. Verify that this change meets the intended user experience for loading feedback.
  • Reason this comment was not posted:
    Marked as duplicate.
8. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:372
  • Draft comment:
    The 'isColumnLineageLoading' property has been removed from the destructuring in BulkDocumentationPropagationPanel. If per-column loading is no longer needed, consider cleaning up its state in the hook as well.
  • Reason this comment was not posted:
    Marked as duplicate.
9. webview_panels/src/modules/documentationEditor/components/help/DocumentationHelpContent.tsx:56
  • Draft comment:
    Updated help text from referring to 'Bulk Generate' button to 'Bulk actions' for consistency with recent UI changes.
  • Reason this comment was not posted:
    Marked as duplicate.

Workflow ID: wflow_9inYVAFVVjnJJXPX


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

🧹 Nitpick comments (1)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

49-59: Consider using Set for more efficient deduplication.

The current implementation has O(n²) complexity due to array iteration. Using Set would be more efficient for large arrays.

 const mergeDocItems = (a: DocsItem[], b: DocsItem[]): DocsItem[] => {
-  const result = [...a];
-  for (const item of b) {
-    if (
-      !result.find((i) => i.model === item.model && i.column === item.column)
-    ) {
-      result.push(item);
-    }
-  }
-  return result;
+  const seen = new Set(a.map(item => `${item.model}/${item.column}`));
+  return [...a, ...b.filter(item => {
+    const key = `${item.model}/${item.column}`;
+    return !seen.has(key) && seen.add(key);
+  })];
 };
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 311ade3 and bbb5b4e.

📒 Files selected for processing (3)
  • webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx (4 hunks)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (7 hunks)
  • webview_panels/src/modules/documentationEditor/components/help/DocumentationHelpContent.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • webview_panels/src/modules/documentationEditor/components/help/DocumentationHelpContent.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • webview_panels/src/modules/documentationEditor/components/docGenerator/BulkGenerateButton.tsx
⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: test (macos-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (ubuntu-latest)
🔇 Additional comments (5)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (5)

93-96: Replace clickable div with button for better accessibility.

Using a div with onClick handler is not accessible. Use a button element instead.

Also applies to: 123-125


244-249: Add error handling for executeRequestInSync calls.

The code should handle potential errors from executeRequestInSync calls to prevent uncaught exceptions.


331-335: Add cleanup for cancellation token.

The reset function should cancel any ongoing operations to prevent memory leaks.


437-437: Fix incorrect length calculation.

The expression Object.values(allColumns).flat().length is incorrect since allColumns is already an array.


473-476: Add error handling for propagateDocumentation.

The async operation should be wrapped in try-catch to handle potential errors.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on b558082 in 31 seconds

More details
  • Looked at 23 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:79
  • Draft comment:
    Good improvement: Using the updater function with prev state ensures that previous selections are preserved when updating selectedColumns. Make sure this merge is intended for all use cases.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    The comment starts with a positive note about the improvement, which is not necessary for the review. The latter part asks the author to ensure the merge is intended for all use cases, which violates the rule against asking for confirmation of intention. Therefore, this comment should not be approved.
2. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:79
  • Draft comment:
    Good refactor: using the functional update to merge new column selections with previous state avoids overwriting. Confirm that merging is the intended behavior.
  • Reason this comment was not posted:
    Marked as duplicate.

Workflow ID: wflow_oPFc8e8HotveJm8e


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

49-59: Optimize mergeDocItems using Set for better performance.

The current implementation has O(n*m) complexity. Using Set would improve performance to O(n+m).

 const mergeDocItems = (a: DocsItem[], b: DocsItem[]): DocsItem[] => {
-  const result = [...a];
-  for (const item of b) {
-    if (
-      !result.find((i) => i.model === item.model && i.column === item.column)
-    ) {
-      result.push(item);
-    }
-  }
-  return result;
+  const seen = new Set(a.map(item => `${item.model}/${item.column}`));
+  return [
+    ...a,
+    ...b.filter(item => !seen.has(`${item.model}/${item.column}`))
+  ];
 };
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bbb5b4e and b558082.

📒 Files selected for processing (1)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (7 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (macos-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
🔇 Additional comments (4)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (4)

94-97: Replace clickable div with button for better accessibility.

Using a div with onClick handler is not accessible. Use a button element instead.

Also applies to: 123-126


246-250: Add error handling for executeRequestInSync calls.

The code should handle potential errors from executeRequestInSync calls to prevent uncaught exceptions.

Also applies to: 326-330


438-438: Fix incorrect length calculation.

The expression Object.values(allColumns).flat().length is incorrect since allColumns is already an array.


581-584: Add error handling for propagateDocumentation.

The async operation should be wrapped in try-catch to handle potential errors.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 90d6b91 in 1 minute and 24 seconds

More details
  • Looked at 51 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 6 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:68
  • Draft comment:
    Removed the SAVE_PROCEED enum value. Confirm that omitting the 'save changes' option is intended.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 0% vs. threshold = 50%
    This comment violates several rules: 1) It asks for confirmation of intention which is explicitly forbidden 2) It's speculative - assumes this might be unintended 3) The change appears deliberate as the entire save functionality was removed consistently from both the enum and the dialog options 4) The PR author clearly meant to remove this option as they removed all related code.
    Perhaps removing the save option is a significant UX change that deserves discussion? Maybe there are requirements or context I'm missing about why saving should be preserved?
    Even if this is a significant UX change, asking for confirmation of intention is not the right approach. If there are requirements about saving, they should be raised as direct issues, not questions about intention.
    Delete this comment as it violates multiple rules, particularly the rule against asking for confirmation of intention. The change appears deliberate and consistent.
2. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:159
  • Draft comment:
    Removed the SAVE_PROCEED case branch in unsaved changes handling. Ensure saving is managed elsewhere if needed.
  • Reason this comment was not posted:
    Marked as duplicate.
3. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:68
  • Draft comment:
    The 'SAVE_PROCEED' enum option has been removed, but the unsaved changes prompt still mentions saving. Update the infoMessage text to remove any reference to saving changes.
  • Reason this comment was not posted:
    Marked as duplicate.
4. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:159
  • Draft comment:
    The destructuring of 'currentDocsTests' has been removed. Verify that removing test data is intentional and that no side effects occur in unsaved changes handling.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    The comment is asking the PR author to verify their intention, which is against the rules. It does not provide a specific suggestion or ask for a specific test to be written. Therefore, it should be removed.
5. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:169
  • Draft comment:
    The SAVE_PROCEED branch in the promise chain has been removed. Confirm that users should no longer have the option to save unsaved changes, and update the UI messaging accordingly.
  • Reason this comment was not posted:
    Marked as duplicate.
6. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:183
  • Draft comment:
    The .catch block was refactored to a concise arrow function. This change is stylistic; ensure consistency with similar promise handling across the codebase.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50%
    None

Workflow ID: wflow_ParojeMLx78LFUFu


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b558082 and 90d6b91.

📒 Files selected for processing (1)
  • webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
🔇 Additional comments (2)
webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx (2)

68-71: LGTM! Simplified action states for better UX.

The removal of SAVE_PROCEED from ActionState streamlines the user decision-making process by providing clear, binary choices.


168-182: LGTM! Clean action handling implementation.

The switch statement correctly handles both actions with appropriate state updates and follows a clear control flow.

Comment on lines 161 to 167
const { currentDocsData } = stateRef.current;
executeRequestInSync("showWarningMessage", {
infoMessage: `You have unsaved changes in model: ‘${currentDocsData?.name}’. Would you
like to discard the changes, save them and proceed, or remain in the
current state?`,
items: [
ActionState.DISCARD_PROCEED,
ActionState.CANCEL_STAY,
ActionState.SAVE_PROCEED,
],
items: [ActionState.DISCARD_PROCEED, ActionState.CANCEL_STAY],
})
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix inconsistency in warning message.

The warning message still mentions "save them and proceed" but this option is no longer available in the dialog options.

Apply this diff to align the message with available options:

-          infoMessage: `You have unsaved changes in model: '${currentDocsData?.name}'. Would you
-          like to discard the changes, save them and proceed, or remain in the
-          current state?`,
+          infoMessage: `You have unsaved changes in model: '${currentDocsData?.name}'. Would you
+          like to discard the changes or remain in the current state?`,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const { currentDocsData } = stateRef.current;
executeRequestInSync("showWarningMessage", {
infoMessage: `You have unsaved changes in model: ‘${currentDocsData?.name}. Would you
like to discard the changes, save them and proceed, or remain in the
current state?`,
items: [
ActionState.DISCARD_PROCEED,
ActionState.CANCEL_STAY,
ActionState.SAVE_PROCEED,
],
items: [ActionState.DISCARD_PROCEED, ActionState.CANCEL_STAY],
})
const { currentDocsData } = stateRef.current;
executeRequestInSync("showWarningMessage", {
infoMessage: `You have unsaved changes in model: '${currentDocsData?.name}'. Would you
like to discard the changes or remain in the current state?`,
items: [ActionState.DISCARD_PROCEED, ActionState.CANCEL_STAY],
})

…tionProvider and DocumentationPropagation components
Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 363c1e0 in 1 minute and 5 seconds

More details
  • Looked at 78 lines of code in 2 files
  • Skipped 0 files when reviewing.
  • Skipped posting 6 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:158
  • Draft comment:
    Ensure that the additional condition checking showBulkDocsPropRightPanel is intended. Consider adding a brief comment to clarify why renderDocumentation is skipped when showBulkDocsPropRightPanel is true.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50%
    None
2. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:438
  • Draft comment:
    allColumns is already an array; consider using allColumns.length instead of Object.values(allColumns).flat().length.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
3. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:158
  • Draft comment:
    Ensure the unsaved changes check now including '!showBulkDocsPropRightPanel' is intentional. This prevents auto-render when the bulk docs panel is open. Verify this behavior aligns with user expectations.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50%
    None
4. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:438
  • Draft comment:
    The downstream columns count is computed as Object.values(allColumns).flat().length, but since 'allColumns' is already a flat array, consider using allColumns.length for clarity.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50%
    None
5. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:500
  • Draft comment:
    For consistency with the bulk panel, add the 'root' property (e.g. root: name) to the startColumns object in DocumentationPropagationButton. This ensures downstream processes correctly reference the originating column.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
6. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:320
  • Draft comment:
    Consider using the nullish coalescing operator (??) instead of '||' for assigning patchPath, if falsy values may be significant.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50%
    None

Workflow ID: wflow_iE07tuDRaQq0LVzh


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🔭 Outside diff range comments (1)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

238-289: Add error handling for loadMoreDownstreamModels.

The async operations should be wrapped in try-catch blocks to handle potential errors.

 const loadMoreDownstreamModels = async () => {
   isCancelled.current = false;
   setIsLoading(true);
   setIsColumnLineageLoading(
     Object.fromEntries(currColumns.map((curr) => [curr.column, true])),
   );
   let iCurrColumns = currColumns;
   while (iCurrColumns.length > 0 && !isCancelled.current) {
+    try {
       const result = (await executeRequestInSync("getDownstreamColumns", {
         targets: iCurrColumns.map((c) => [c.model, c.column]),
         model: currentDocsData?.uniqueId,
         column: iCurrColumns[0].column,
       })) as DownstreamColumns;
+    } catch (error) {
+      console.error('Failed to fetch downstream columns:', error);
+      break;
+    }
     // ... rest of the code
   }
   setIsLoading(false);
   setCurrColumns(iCurrColumns);
 };
🧹 Nitpick comments (1)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

49-59: Optimize mergeDocItems for better performance.

The current implementation has O(n*m) complexity. Consider using Set or Map for better performance.

 const mergeDocItems = (a: DocsItem[], b: DocsItem[]): DocsItem[] => {
-  const result = [...a];
-  for (const item of b) {
-    if (
-      !result.find((i) => i.model === item.model && i.column === item.column)
-    ) {
-      result.push(item);
-    }
-  }
-  return result;
+  const seen = new Map(
+    a.map(item => [`${item.model}/${item.column}`, item])
+  );
+  b.forEach(item => {
+    const key = `${item.model}/${item.column}`;
+    if (!seen.has(key)) {
+      seen.set(key, item);
+    }
+  });
+  return Array.from(seen.values());
 };
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 90d6b91 and 363c1e0.

📒 Files selected for processing (2)
  • webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx (2 hunks)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (7 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: test (windows-latest)
🔇 Additional comments (9)
webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx (4)

23-23: LGTM!

The import of updateBulkDocsPropRightPanel follows the existing pattern and is used appropriately in the code.


164-168: Fix inconsistency in warning message.

The warning message still mentions "save them and proceed" but this option is no longer available in the dialog options.


158-160: LGTM!

The additional check for showBulkDocsPropRightPanel correctly prevents rendering documentation while the bulk documentation propagation panel is active.


170-176: LGTM!

The action handling correctly resets the bulk documentation propagation panel state when discarding changes, ensuring a clean state transition.

webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (5)

94-97: Replace clickable div with button for better accessibility.

Using a div with onClick handler is not accessible. Use a button element instead.

-          <div
+          <button
             className={styles.singleColumnAccordion}
             onClick={() => setIsExpanded(true)}
+            aria-expanded={isExpanded}
+            type="button"
-          >
+          >
             <ArrowDownIcon />
-          </div>
+          </button>

Also applies to: 123-126


332-336: Ensure reset clears all state variables.

The reset function should clear all state variables to prevent stale state.

 const reset = () => {
+  cancelColumnLineage();
   setAllColumns([]);
   setCurrColumns(startColumns);
   setTableMetadata([]);
+  setIsLoading(false);
+  setIsColumnLineageLoading({});
+  setTestsMetadata({});
+  setSelectedColumns({});
 };

416-420: Optimize sorting performance.

The sort comparator directly calls filter on 'allColumns' for each comparison, leading to O(n²) complexity.

-            .sort(
-              (a, b) =>
-                allColumns.filter((item) => item.root === b.name).length -
-                allColumns.filter((item) => item.root === a.name).length,
-            )
+            .sort((a, b) => {
+              const countMap = new Map();
+              for (const item of allColumns) {
+                countMap.set(item.root, (countMap.get(item.root) || 0) + 1);
+              }
+              return (countMap.get(b.name) || 0) - (countMap.get(a.name) || 0);
+            })

438-438: Fix incorrect length calculation.

The expression Object.values(allColumns).flat().length is incorrect since allColumns is already an array.

-            <div>{Object.values(allColumns).flat().length}</div>
+            <div>{allColumns.length}</div>

595-598: Add error handling for propagateDocumentation.

The async operation should be wrapped in try-catch to handle potential errors.

-            onClick={async () => {
-              await propagateDocumentation();
-              drawerRef.current?.close();
-            }}
+            onClick={async () => {
+              try {
+                await propagateDocumentation();
+                drawerRef.current?.close();
+              } catch (error) {
+                console.error('Failed to propagate documentation:', error);
+                // Consider showing an error message to the user
+              }
+            }}

…ntationProvider and DocumentationPropagation components
Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 6453333 in 1 minute and 4 seconds

More details
  • Looked at 145 lines of code in 4 files
  • Skipped 0 files when reviewing.
  • Skipped posting 12 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:159
  • Draft comment:
    Nice improvement: the condition now also checks showSingleDocsPropRightPanel to prevent unwanted re-rendering when unsaved changes exist. This makes the state check more robust.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
2. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:183
  • Draft comment:
    Good handling in DISCARD_PROCEED: conditionally dispatches updateBulkDocsPropRightPanel and updateSingleDocsPropRightPanel. This ensures both panels are reset appropriately.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
3. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:18
  • Draft comment:
    Import now includes updateSingleDocsPropRightPanel along with updateBulkDocsPropRightPanel. This aligns with the new single doc propagation feature.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
4. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:523
  • Draft comment:
    Switching dependency from showBulkDocsPropRightPanel to showSingleDocsPropRightPanel for the singular propagation drawer is well-handled.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
5. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:555
  • Draft comment:
    The onClose handler properly dispatches updateSingleDocsPropRightPanel(false) for singular propagation, ensuring consistent state resets.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
6. webview_panels/src/modules/documentationEditor/state/documentationSlice.ts:72
  • Draft comment:
    The addition of showSingleDocsPropRightPanel in initialState and its corresponding reducer updateSingleDocsPropRightPanel integrates well with the new feature. No issues noted.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
7. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:159
  • Draft comment:
    Including 'showSingleDocsPropRightPanel' in the unsaved changes check is appropriate. The new combined condition (dirty state OR any open propagation panel) correctly prevents overwriting unsaved data.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative, explaining why a change is appropriate. It doesn't suggest any code changes or ask for specific confirmations. According to the rules, purely informative comments should be removed.
8. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:183
  • Draft comment:
    The DISCARD_PROCEED action now conditionally dispatches resets for both bulk and single propagation panels. This ensures any open panel is properly closed upon discarding unsaved changes.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative, explaining what the code does without suggesting any changes or asking for clarification. It doesn't align with the rules for good comments, which should provide actionable feedback or specific questions.
9. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:523
  • Draft comment:
    The useEffect dependency is updated to use 'showSingleDocsPropRightPanel' for the single column propagation drawer, ensuring that the drawer toggles appropriately based on the correct state value.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
10. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:556
  • Draft comment:
    Using updateSingleDocsPropRightPanel(false) in the onClose callback of the single column drawer is correct and ensures that only the intended panel's state is reset when the drawer is closed.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative and does not provide any actionable feedback or suggestions for improvement. It simply states that the current implementation is correct, which does not align with the rules provided.
11. webview_panels/src/modules/documentationEditor/state/documentationSlice.ts:72
  • Draft comment:
    The new 'updateSingleDocsPropRightPanel' reducer is added correctly and updates the state accordingly. The implementation and export are consistent with the slice structure.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative and does not provide any actionable feedback or suggestions for improvement. It simply states that the reducer is added correctly and is consistent with the slice structure, which does not align with the rules provided.
12. webview_panels/src/modules/documentationEditor/state/types.ts:76
  • Draft comment:
    The DocumentationStateProps type now includes 'showSingleDocsPropRightPanel', ensuring type safety for the new state flag.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative, explaining a change in the type definition. It does not provide any actionable feedback or suggestions for improvement.

Workflow ID: wflow_Y3DOueeioxhnMhjf


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

🧹 Nitpick comments (2)
webview_panels/src/modules/documentationEditor/state/documentationSlice.ts (1)

34-35: Consider grouping panel visibility states under a common interface.

To improve type safety and maintainability, consider grouping all panel visibility states under a common interface:

interface PanelVisibilityState {
  showConversationsRightPanel: boolean;
  showSingleDocsPropRightPanel: boolean;
  showBulkDocsPropRightPanel: boolean;
}

This would make it easier to:

  • Manage panel visibility states together
  • Ensure consistent naming
  • Add new panel states in the future
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

52-62: Optimize mergeDocItems performance using Set.

The current implementation has O(n*m) complexity due to array iteration. Using Set would improve performance to O(n+m).

 const mergeDocItems = (a: DocsItem[], b: DocsItem[]): DocsItem[] => {
-  const result = [...a];
-  for (const item of b) {
-    if (
-      !result.find((i) => i.model === item.model && i.column === item.column)
-    ) {
-      result.push(item);
-    }
-  }
-  return result;
+  const seen = new Set(a.map(item => `${item.model}/${item.column}`));
+  return [
+    ...a,
+    ...b.filter(item => !seen.has(`${item.model}/${item.column}`))
+  ];
 };
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 363c1e0 and 6453333.

📒 Files selected for processing (4)
  • webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx (2 hunks)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (7 hunks)
  • webview_panels/src/modules/documentationEditor/state/documentationSlice.ts (3 hunks)
  • webview_panels/src/modules/documentationEditor/state/types.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • webview_panels/src/modules/documentationEditor/state/types.ts
  • webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx
⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
  • GitHub Check: test (ubuntu-latest)
🔇 Additional comments (7)
webview_panels/src/modules/documentationEditor/state/documentationSlice.ts (3)

34-35: LGTM! Initial state properties follow consistent naming and initialization patterns.

The new state properties for controlling right panel visibility are well-named and correctly initialized to false.


72-87: LGTM! Reducers follow Redux best practices and maintain consistency.

The new reducers are well-typed using PayloadAction and follow the established pattern for panel state management.


284-285: LGTM! Actions are properly exported and maintain ordering.

The new actions are correctly exported from the slice and maintain the alphabetical ordering of exports.

webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (4)

97-100: Replace clickable div with button for better accessibility.

Using a div with onClick handler is not accessible. Use a button element instead.


249-253: Add error handling for executeRequestInSync calls.

The code should handle potential errors from executeRequestInSync calls to prevent uncaught exceptions.


441-441: Fix incorrect length calculation.

The expression Object.values(allColumns).flat().length is incorrect since allColumns is already an array.


1-610: Well-structured implementation with good practices!

The code demonstrates:

  • Clear type definitions
  • Consistent naming conventions
  • Good component structure and separation of concerns

Comment on lines 385 to 393
useEffect(() => {
if (!drawerRef.current) return;
if (showBulkDocsPropRightPanel) {
void loadMoreDownstreamModels();
drawerRef.current.open();
} else {
drawerRef.current.close();
}
}, [showBulkDocsPropRightPanel]);
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Add cleanup in useEffect.

The useEffect hook should clean up resources when the component unmounts.

 useEffect(() => {
   if (!drawerRef.current) return;
   if (showBulkDocsPropRightPanel) {
     void loadMoreDownstreamModels();
     drawerRef.current.open();
   } else {
     drawerRef.current.close();
   }
+  return () => {
+    void cancelColumnLineage();
+  };
 }, [showBulkDocsPropRightPanel]);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
useEffect(() => {
if (!drawerRef.current) return;
if (showBulkDocsPropRightPanel) {
void loadMoreDownstreamModels();
drawerRef.current.open();
} else {
drawerRef.current.close();
}
}, [showBulkDocsPropRightPanel]);
useEffect(() => {
if (!drawerRef.current) return;
if (showBulkDocsPropRightPanel) {
void loadMoreDownstreamModels();
drawerRef.current.open();
} else {
drawerRef.current.close();
}
return () => {
void cancelColumnLineage();
};
}, [showBulkDocsPropRightPanel]);

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 41e6fc7 in 55 seconds

More details
  • Looked at 14 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 3 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:175
  • Draft comment:
    The unsaved changes prompt now only offers 'discard' and 'stay' options, removing the 'save' option. Confirm that this is the intended behavior and that no side-effects related to saving are now required.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    The comment is asking the PR author to confirm their intention regarding the removal of the 'save' option in the unsaved changes prompt. This violates the rule against asking the author to confirm their intention or ensure behavior is intended. Therefore, this comment should be removed.
2. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:175
  • Draft comment:
    The updated unsaved changes message now only offers a choice to discard changes, but the old prompt mentioned saving. Confirm that the removal of the save option was intentional to avoid confusing users.
  • Reason this comment was not posted:
    Marked as duplicate.
3. webview_panels/src/modules/documentationEditor/DocumentationProvider.tsx:175
  • Draft comment:
    Consider formatting the template literal as a single-line string to avoid unintended whitespace or line breaks in the warning message dialog.
  • Reason this comment was not posted:
    Comment was on unchanged code.

Workflow ID: wflow_yjeUsLv7evyUKz9k


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 0edcce6 in 1 minute and 55 seconds

More details
  • Looked at 55 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 9 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:388
  • Draft comment:
    Consider awaiting or error handling the asynchronous cancelColumnLineage() call here. Using 'void' may hide potential cancellation errors.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 10% vs. threshold = 50%
  1. The cancelColumnLineage() function sets a flag and makes a request to stop background operations. 2. The operation is fire-and-forget - we don't need to wait for it to complete before closing the drawer. 3. Even if it fails, it's not critical since it's just cleanup. 4. The void operator is appropriate here since we intentionally want to ignore the promise.
    The comment raises a valid point that we're ignoring potential errors. In some cases, unhandled promise rejections could cause issues.
    In this case, the cancelColumnLineage() operation is non-critical cleanup that can safely run in the background. We don't need to block the UI on it or handle errors.
    The void operator is appropriate here since this is an intentional fire-and-forget cleanup operation. The comment should be deleted.
2. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:406
  • Draft comment:
    The onClose handler for the bulk panel no longer calls cancelColumnLineage explicitly; ensure that relying solely on useEffect for cancellation meets your intended behavior.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 50% <= threshold 50%
    The comment is asking the author to ensure that the behavior is intended, which violates the rule against asking for confirmation of intention. However, it does point out a specific change in behavior, which could be useful for the author to consider. The comment could be rephrased to suggest a specific action or ask a more direct question about the change.
3. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:555
  • Draft comment:
    Similarly, in the single documentation panel, onClose no longer calls cancelColumnLineage. Confirm that the useEffect hook reliably triggers cancellation when the panel state changes.
  • Reason this comment was not posted:
    Marked as duplicate.
4. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:477
  • Draft comment:
    Replacing drawerRef.current?.close() with a state dispatch for panel closure ensures consistency. Verify that the useEffect hook properly manages drawer closure after updating state.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50%
    None
5. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:389
  • Draft comment:
    Ensure calling cancelColumnLineage() in the useEffect (when the panel is closed) is intentional. Consider awaiting its result or handling errors if needed.
  • Reason this comment was not posted:
    Marked as duplicate.
6. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:404
  • Draft comment:
    Removal of cancelColumnLineage() from the Drawer onClose prop centralizes cancellation logic. An inline comment explaining this would be helpful.
  • Reason this comment was not posted:
    Marked as duplicate.
7. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:530
  • Draft comment:
    The addition of cancelColumnLineage() in the single panel useEffect aligns cancellation behavior with the bulk panel. Confirm that this consistent behavior is intended.
  • Reason this comment was not posted:
    Marked as duplicate.
8. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:553
  • Draft comment:
    Refactored onOpen/onClose handlers in DocumentationPropagationButton now use dispatch and loadMoreDownstreamModels; verify these state changes correctly trigger cancellation via the useEffect.
  • Reason this comment was not posted:
    Marked as duplicate.
9. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:597
  • Draft comment:
    Using dispatch(updateSingleDocsPropRightPanel(false)) in the propagateDocumentation onClick instead of directly closing the drawer ensures state consistency. This change looks good.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative and does not provide any actionable feedback or suggestions for improvement. It simply states that the change looks good, which is not allowed according to the rules.

Workflow ID: wflow_nHaSktsc6xiwajVX


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on baedd3f in 1 minute and 56 seconds

More details
  • Looked at 38 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 8 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:247
  • Draft comment:
    Changing initialization from currColumns to startColumns ensures that propagation walks through the original set of columns rather than a possibly modified subset. Verify this aligns with the intended data flow.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    The comment is asking the PR author to verify if the change aligns with the intended data flow, which is against the rules. It does not provide a specific suggestion or point out a clear issue with the code.
2. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:336
  • Draft comment:
    Resetting isCancelled to false in reset() helps avoid leftover cancellation flags when reopening. Ensure that all execution paths handle resets accordingly.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 20% <= threshold 50%
    The comment is informative and suggests ensuring that all execution paths handle resets accordingly. It doesn't provide a specific code suggestion or ask for a specific test to be written. It seems to be more of a reminder or a cautionary note rather than a direct actionable comment.
3. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:390
  • Draft comment:
    Calling reset() before closing the drawer ensures state is cleared after cancelling column lineage. This looks like a good cleanup step.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative and does not provide any actionable feedback or suggestions for improvement. It simply states that calling reset() is a good cleanup step, which does not align with the rules for useful comments.
4. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:477
  • Draft comment:
    Dispatching an update to hide the panel (updateBulkDocsPropRightPanel(false)) instead of directly closing the drawer improves consistency in state management. Confirm this is aligned with other similar components.
  • Reason this comment was not posted:
    Comment looked like it was already resolved.
5. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:247
  • Draft comment:
    Using 'startColumns' instead of 'currColumns' for initializing iCurrColumns ensures that the original set of columns is processed. Please verify that this change aligns with the intended state management for bulk propagation.
  • Reason this comment was not posted:
    Marked as duplicate.
6. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:339
  • Draft comment:
    Resetting the isCancelled flag here ensures that previous cancellation states do not affect subsequent operations. This explicit reset improves the reliability of the reset function.
  • Reason this comment was not posted:
    Marked as duplicate.
7. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:390
  • Draft comment:
    Calling reset() immediately after canceling column lineage when the panel is closed helps ensure that all relevant state is cleared. Confirm that this reset does not interfere with any pending processes if the panel is toggled rapidly.
  • Reason this comment was not posted:
    Marked as duplicate.
8. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:477
  • Draft comment:
    Replacing the direct drawer close call with dispatching an update to the Redux state ('updateBulkDocsPropRightPanel(false)') ensures consistent state management across the app. Confirm that all components properly react to the state change.
  • Reason this comment was not posted:
    Marked as duplicate.

Workflow ID: wflow_Shw3Q8l7GZitZ26d


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (1)

52-62: Optimize mergeDocItems using Set for better performance.

The current implementation has O(n*m) complexity due to using .find() inside a loop. Consider using Set for better performance.

 const mergeDocItems = (a: DocsItem[], b: DocsItem[]): DocsItem[] => {
-  const result = [...a];
-  for (const item of b) {
-    if (
-      !result.find((i) => i.model === item.model && i.column === item.column)
-    ) {
-      result.push(item);
-    }
-  }
-  return result;
+  const seen = new Set(a.map(item => `${item.model}/${item.column}`));
+  return [
+    ...a,
+    ...b.filter(item => !seen.has(`${item.model}/${item.column}`))
+  ];
 };
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0edcce6 and baedd3f.

📒 Files selected for processing (1)
  • webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (7 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: build (windows-latest)
  • GitHub Check: test (windows-latest)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: test (windows-latest)
🔇 Additional comments (4)
webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx (4)

97-100: Replace clickable div with button for better accessibility.

Using a div with onClick handler is not accessible. Use a button element instead.

-          <div
+          <button
+            type="button"
             className={styles.singleColumnAccordion}
             onClick={() => setIsExpanded(true)}
+            aria-expanded={isExpanded}
-          >
+          >
             <ArrowDownIcon />
-          </div>
+          </button>

Also applies to: 126-129


249-253: Add error handling for executeRequestInSync calls.

The async operations should handle potential errors to prevent uncaught exceptions.

-      const result = (await executeRequestInSync("getDownstreamColumns", {
-        targets: iCurrColumns.map((c) => [c.model, c.column]),
-        model: currentDocsData?.uniqueId,
-        column: iCurrColumns[0].column,
-      })) as DownstreamColumns;
+      try {
+        const result = (await executeRequestInSync("getDownstreamColumns", {
+          targets: iCurrColumns.map((c) => [c.model, c.column]),
+          model: currentDocsData?.uniqueId,
+          column: iCurrColumns[0].column,
+        })) as DownstreamColumns;
+      } catch (error) {
+        console.error('Failed to fetch downstream columns:', error);
+        break;
+      }

-    await executeRequestInSync("saveDocumentationBulk", {
-      models: req,
-      numColumns: startColumns.length,
-    });
+    try {
+      await executeRequestInSync("saveDocumentationBulk", {
+        models: req,
+        numColumns: startColumns.length,
+      });
+    } catch (error) {
+      console.error('Failed to save documentation:', error);
+      throw error; // Re-throw to handle in UI
+    }

Also applies to: 329-333


442-442: Fix incorrect length calculation.

The expression Object.values(allColumns).flat().length is incorrect since allColumns is already an array.

-            <div>{Object.values(allColumns).flat().length}</div>
+            <div>{allColumns.length}</div>

493-610: LGTM!

The component follows good practices for state management, cleanup, and error handling.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

❌ Changes requested. Incremental review on 3dc39c7 in 1 minute and 11 seconds

More details
  • Looked at 38 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 1 drafted comments based on config settings.
1. src/webview_provider/docsEditPanel.ts:762
  • Draft comment:
    Removing the window.withProgress block simplifies the bulk save loop, but it also removes the UI progress feedback. If the bulk save might take noticeable time, consider reintroducing some form of progress indicator.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.

Workflow ID: wflow_rkFcRx4pGjDyNrps


Want Ellipsis to fix these issues? Tag @ellipsis-dev in a comment. You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

@@ -761,20 +761,24 @@ export class DocsEditViewPanel implements WebviewViewProvider {
break;
case "saveDocumentationBulk": {
this.telemetry.sendTelemetryEvent(
Copy link
Contributor

Choose a reason for hiding this comment

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

The previous implementation used window.withProgress to provide visual feedback during the bulk save operation. Removing this might affect user experience in cases where saving takes longer. Consider if a progress indicator is still needed.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 502e26c in 1 minute and 2 seconds

More details
  • Looked at 13 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 drafted comments based on config settings.
1. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:336
  • Draft comment:
    Clear state updates (testsMetadata and selectedColumns) in reset look appropriate but double-check that clearing testsMetadata (used later in propagateDocumentation) is intended during each reset. Ensure that there's no case where you might need to persist these values across sessions.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
2. webview_panels/src/modules/documentationEditor/components/documentationPropagation/DocumentationPropagation.tsx:336
  • Draft comment:
    The reset function now clears testsMetadata and selectedColumns. This ensures previous state is fully cleared, which appears intended. Please verify that resetting selectedColumns here (thus also wiping user selections) aligns with the desired UX on panel reopen.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 50% <= threshold 50%
    The comment is asking the PR author to verify if the behavior aligns with the desired UX, which violates the rule against asking for confirmation of intention. However, it does provide a specific observation about the code change, which is useful. The comment could be rephrased to focus on the observation without asking for verification.

Workflow ID: wflow_WvPRVpb59iHaBb6U


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on 408f172 in 1 minute and 18 seconds

More details
  • Looked at 13 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 drafted comments based on config settings.
1. src/webview_provider/docsEditPanel.ts:774
  • Draft comment:
    Removing the await on window.showInformationMessage is acceptable here if you don't need its resolved value. Just ensure that the subsequent call to bulkDocsPropCredit doesn’t depend on the message's completion.
  • Reason this comment was not posted:
    Comment looked like it was already resolved.
2. src/webview_provider/docsEditPanel.ts:771
  • Draft comment:
    Removed 'await' on window.showInformationMessage. If this is intentional, use 'void' to clarify fire-and-forget behavior, or handle the promise to catch potential rejections.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50%
    None

Workflow ID: wflow_BGzVQGy9CyWlZSPd


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

@mdesmet mdesmet merged commit f688ac9 into master Feb 10, 2025
14 of 15 checks passed
Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

👍 Looks good to me! Incremental review on defe7f9 in 45 seconds

More details
  • Looked at 13 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 drafted comments based on config settings.
1. src/webview_provider/docsEditPanel.ts:774
  • Draft comment:
    Changed info message from 'Successfully saved:' to 'Successfully propagated to:'. Ensure this wording aligns with the intended bulk propagation functionality.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50%
    None
2. src/webview_provider/docsEditPanel.ts:774
  • Draft comment:
    Updated the success message to say 'Successfully propagated to:' which aligns with the bulk documentation propagation feature. This change appears intentional and improves messaging consistency.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50%
    This comment is purely informative, explaining a change that was made and stating that it aligns with existing features. It does not provide any actionable feedback or suggestions for improvement.

Workflow ID: wflow_xo6vgFJEuJxSTw0L


You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants