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

PCH Excerpt Suggestions: Allow editing when reviewing #2506

Merged

Conversation

acicovic
Copy link
Collaborator

@acicovic acicovic commented May 21, 2024

Description

This PR introduces code to allow editing the excerpt in the PCH Excerpt Suggestions tool while in review mode.

As part of this PR, we have grouped some excerpt state variables in an excerptData object. We're also handling updates to the textbox that come from keyboard shortcuts and aren't caught by the onChange event.

Motivation and context

Make Excerpt Suggestions usage more intuitive.

How has this been tested?

Manually tested.

Summary by CodeRabbit

  • New Features

    • Enhanced UI interaction for word count and excerpt changes.
  • Refactor

    • Improved state management for excerpt data.
    • Refactored word count calculation and display logic.
  • Style

    • Removed textarea:read-only styling from the excerpt textarea.

Copy link
Contributor

coderabbitai bot commented May 21, 2024

Walkthrough

The recent updates focus on enhancing the excerpt generation functionality within the application. The changes include the introduction of a new ExcerptData interface for better state management, removal of outdated state variables, and improvements to the word count calculation and display logic. Additionally, the handling of generated excerpts has been refined, and the UI interaction has been enhanced for a more intuitive user experience. Some styling adjustments were also made by removing unnecessary CSS rules.

Changes

File Change Summary
src/content-helper/excerpt-generator/components/excerpt-panel.tsx - Introduced ExcerptData interface.
- Removed generatedExcerpt and generatedExcerptCount state variables.
- Added onChangeFired and wordCountString state variables.
- Updated state management to use setExcerptData for excerpt data.
- Refactored word count calculation and display logic.
- Improved handling of generated excerpt changes.
- Updated functions to use ExcerptData.
- Enhanced UI interaction for word count and excerpt changes.
src/content-helper/excerpt-generator/excerpt-generator.scss - Removed textarea:read-only styling from .editor-post-excerpt__textarea class.

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>.
    • 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 generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @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.

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 as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration 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.

@acicovic acicovic marked this pull request as ready for review May 21, 2024 13:23
@acicovic acicovic requested a review from a team as a code owner May 21, 2024 13:23
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: 2

Outside diff range and nitpick comments (1)
src/content-helper/excerpt-generator/components/excerpt-panel.tsx (1)

33-38: Refactor ExcerptData interface to use more consistent naming.

Consider renaming newExcerptGenerated and newExcerptGeneratedCount to isExcerptGenerated and excerptGenerationCount respectively, to enhance clarity and consistency in naming conventions.

Review Details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits Files that changed from the base of the PR and between 38b5e75 and facf8ee.
Files ignored due to path filters (4)
  • build/content-helper/excerpt-generator-rtl.css is excluded by !build/**
  • build/content-helper/excerpt-generator.asset.php is excluded by !build/**
  • build/content-helper/excerpt-generator.css is excluded by !build/**
  • build/content-helper/excerpt-generator.js is excluded by !build/**
Files selected for processing (2)
  • src/content-helper/excerpt-generator/components/excerpt-panel.tsx (9 hunks)
  • src/content-helper/excerpt-generator/excerpt-generator.scss (1 hunks)
Files skipped from review due to trivial changes (1)
  • src/content-helper/excerpt-generator/excerpt-generator.scss
Additional Context Used
Path-based Instructions (1)
src/content-helper/excerpt-generator/components/excerpt-panel.tsx (1)

Pattern **/*.{js,ts,tsx,jsx}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the code to ensure it is well-structured and adheres to best practices.
  • Verify compliance with WordPress coding standards.
  • Ensure the code is well-documented.
  • Check for security vulnerabilities and confirm the code is secure.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
  • Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
Additional comments not posted (4)
src/content-helper/excerpt-generator/components/excerpt-panel.tsx (4)

48-55: Ensure initial state aligns with expected data types and default values.

The initial state setup for excerptData is clear and correctly uses the ExcerptData interface. This encapsulation improves the manageability of related data.


128-133: Ensure error handling is robust in asynchronous operations.

The error handling in generateExcerpt uses a generic catch block. Verify that the error object provides a meaningful message and consider logging this error for better traceability.

} catch (err: any) {
  console.error('Error generating excerpt:', err.message);
  setError(err);
}

147-148: Validate state updates in asynchronous functions.

The state updates in acceptGeneratedExcerpt and discardGeneratedExcerpt functions are handled correctly, ensuring that the UI reflects the current state of the excerpt data.

Also applies to: 158-163


Line range hint 244-273: Ensure UI elements reflect the current state accurately.

The conditional rendering of buttons based on excerptData.newExcerptGenerated and excerptData.newExcerptGeneratedCount is implemented correctly, providing a clear and responsive UI for the user.

Copy link
Contributor

@vaurdan vaurdan left a comment

Choose a reason for hiding this comment

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

Thanks for working on this one! Looks great, I just have added a single comment, and once it is addressed I can go ahead and approve it.

Copy link
Contributor

@vaurdan vaurdan left a comment

Choose a reason for hiding this comment

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

Approved per my last reply.

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: 2

Review Details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits Files that changed from the base of the PR and between facf8ee and 4af8c17.
Files ignored due to path filters (2)
  • build/content-helper/excerpt-generator.asset.php is excluded by !build/**
  • build/content-helper/excerpt-generator.js is excluded by !build/**
Files selected for processing (1)
  • src/content-helper/excerpt-generator/components/excerpt-panel.tsx (9 hunks)
Additional Context Used
Path-based Instructions (1)
src/content-helper/excerpt-generator/components/excerpt-panel.tsx (1)

Pattern **/*.{js,ts,tsx,jsx}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the code to ensure it is well-structured and adheres to best practices.
  • Verify compliance with WordPress coding standards.
  • Ensure the code is well-documented.
  • Check for security vulnerabilities and confirm the code is secure.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
  • Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
Additional comments not posted (3)
src/content-helper/excerpt-generator/components/excerpt-panel.tsx (3)

48-55: Ensure initial state aligns with the ExcerptData interface.

The initial state for excerptData is set with all properties defined, which is good practice. However, ensure that there are no cases where these properties might be accessed before being initialized, which could lead to undefined behavior.

const [excerptData, setExcerptData] = useState<ExcerptData>({
  currentExcerpt: '',
  isUnderReview: false,
  newExcerptGeneratedCount: 0,
  oldExcerpt: '',
});

128-133: Validate error handling in asynchronous operations.

The generateExcerpt function handles errors, but ensure that the error handling is robust and covers all potential issues that could arise from the generateExcerpt operation.

try {
  const requestedExcerpt = await excerptGeneratorProvider.generateExcerpt(postTitle, postContent);
  setExcerptData({
    currentExcerpt: requestedExcerpt,
    isUnderReview: true,
    newExcerptGeneratedCount: excerptData.newExcerptGeneratedCount + 1,
    oldExcerpt: excerpt,
  });
} catch (err: any) {
  setError(err);
} finally {
  setLoading(false);
}

192-209: Ensure robust handling of keyboard events.

The logic for handling onChange and onKeyUp events in the TextareaControl component is complex. Verify that this setup does not lead to any race conditions or state inconsistencies, especially when fast user input is involved.

onChange={(value) => {
  if (!excerptData.isUnderReview) {
    editPost({ excerpt: value });
  }
  setExcerptData({ ...excerptData, currentExcerpt: value });
  setOnChangeFired(true);
}}
onKeyUp={() => {
  if (onChangeFired) {
    setOnChangeFired(false);
    return;
  }
  const textarea = document.querySelector('.editor-post-excerpt textarea');
  const value = textarea?.textContent ?? '';
  setExcerptData({ ...excerptData, currentExcerpt: value });
}}

@acicovic
Copy link
Collaborator Author

@coderabbitai resolve

Copy link
Contributor

coderabbitai bot commented May 23, 2024

Actions Performed

Comments resolved and changes approved.

@acicovic acicovic merged commit 11b1138 into develop May 23, 2024
36 checks passed
@acicovic acicovic deleted the update/allow-editing-when-reviewing-in-excerpt-generator branch May 23, 2024 07:50
@acicovic acicovic changed the title PCH Excerpt Generator: Allow editing when reviewing PCH Excerpt Suggestions: Allow editing when reviewing Jul 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants