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

fix: form data that is not submitted by the form should not be carried when switching paging #4847

Merged
merged 1 commit into from
Nov 9, 2024

Conversation

anncwb
Copy link
Collaborator

@anncwb anncwb commented Nov 9, 2024

Description

fixed #4617

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update
  • Please, don't make changes to pnpm-lock.yaml unless you introduce a new test example.

Checklist

ℹ️ Check all checkboxes - this will indicate that you have done everything in accordance with the rules in CONTRIBUTING.

  • If you introduce new functionality, document it. You can run documentation with pnpm run docs:dev command.
  • Run the tests with pnpm test.
  • Changes in changelog are generated from PR name. Please, make sure that it explains your changes in an understandable manner. Please, prefix changeset messages with feat:, fix:, perf:, docs:, or chore:.
  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

Summary by CodeRabbit

  • New Features

    • Enhanced form submission handling with the ability to track and retrieve the latest submission values.
    • Updated initialization process for forms to utilize the latest submission values.
  • Bug Fixes

    • Improved data handling for form submissions, ensuring accurate values are captured and used.
  • Documentation

    • Updated interface and method signatures to reflect changes in form API interactions.

Copy link

changeset-bot bot commented Nov 9, 2024

⚠️ No Changeset found

Latest commit: adc2ffa

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link
Contributor

coderabbitai bot commented Nov 9, 2024

Walkthrough

The changes in this pull request enhance the FormApi class and the use-vxe-grid.vue component. A new private property latestSubmissionValues is introduced to manage the most recent form submission values. Public methods getLatestSubmissionValues and setLatestSubmissionValues are added for accessing and updating these values. The mount and unmount methods are modified to utilize this new state management. Additionally, the handleSubmit, handleReset, and init methods in the use-vxe-grid.vue component are updated to reflect these changes, ensuring improved handling of form values during grid operations.

Changes

File Path Change Summary
packages/@core/ui-kit/form-ui/src/form-api.ts Added private property latestSubmissionValues, methods getLatestSubmissionValues and setLatestSubmissionValues, updated mount, unmount, and submitForm methods.
packages/effects/plugins/src/vxe-table/use-vxe-grid.vue Modified handleSubmit, handleReset, and init methods to integrate formApi.setLatestSubmissionValues and formApi.getLatestSubmissionValues.

Assessment against linked issues

Objective Addressed Explanation
Ensure form submission values are correctly managed to avoid pagination issues (#4617)

Possibly related PRs

Suggested labels

bug

Suggested reviewers

  • vince292007

Poem

In the fields where forms do play,
A rabbit hops and shouts hooray!
With values stored and states so bright,
Our submissions now feel just right.
So let us leap and dance with glee,
For forms are swift, as swift can be! 🐇✨


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

@anncwb anncwb mentioned this pull request Nov 9, 2024
16 tasks
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 and nitpick comments (4)
packages/@core/ui-kit/form-ui/src/form-api.ts (3)

45-46: Translate Chinese comment to English for better accessibility.

Consider translating the Chinese comment to English:

-// 最后一次点击提交时的表单值
+// The form values from the last submission

219-221: Consider aligning null handling between getter and setter.

The getter never returns null (falls back to empty object), but the setter accepts null. Consider either:

  1. Making the setter reject null values to maintain consistency, or
  2. Documenting why null values are accepted in the setter but transformed in the getter
-setLatestSubmissionValues(values: null | Recordable<any>) {
+setLatestSubmissionValues(values: Recordable<any>) {
   this.latestSubmissionValues = { ...toRaw(values) };
 }

Line range hint 261-266: Consider updating latestSubmissionValues in submitForm.

The submitForm method calculates rawValues but doesn't update latestSubmissionValues. Consider updating it to maintain consistency with the form's submission state:

 async submitForm(e?: Event) {
   e?.preventDefault();
   e?.stopPropagation();
   const form = await this.getForm();
   await form.submitForm();
   const rawValues = toRaw(form.values || {});
   await this.state?.handleSubmit?.(rawValues);
+  this.setLatestSubmissionValues(rawValues);

   return rawValues;
 }
packages/effects/plugins/src/vxe-table/use-vxe-grid.vue (1)

Line range hint 69-232: Well-structured solution for form state management.

The implementation follows a clean architecture where:

  1. Form values are explicitly captured at submission points (submit/reset)
  2. These values are stored in a dedicated state (latestSubmissionValues)
  3. Grid operations consistently use these stored values

This approach effectively solves the issue of outdated form data being carried over during paging while maintaining a clear separation of concerns between form state and grid operations.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 5e44aa9 and adc2ffa.

📒 Files selected for processing (2)
  • packages/@core/ui-kit/form-ui/src/form-api.ts (6 hunks)
  • packages/effects/plugins/src/vxe-table/use-vxe-grid.vue (2 hunks)
🔇 Additional comments (6)
packages/@core/ui-kit/form-ui/src/form-api.ts (3)

117-119: LGTM! Well-designed getter method.

The method appropriately handles null values by returning an empty object, preventing potential null reference issues.


175-175: LGTM! Proper initialization of submission values.

The mount method correctly initializes the submission values with the current form state, ensuring proper state management from the start.


272-272: LGTM! Proper cleanup in unmount.

The unmount method appropriately cleans up the submission values state, preventing any potential issues with stale data.

packages/effects/plugins/src/vxe-table/use-vxe-grid.vue (3)

69-69: LGTM: Properly stores form values at submission time.

The addition of setLatestSubmissionValues with toRaw ensures that only explicitly submitted form values are stored, directly addressing the issue of outdated form data being carried over during paging.


75-75: LGTM: Reset properly updates stored form values.

The addition ensures that form reset operations correctly update the stored submission values, maintaining consistency with the new form state.


230-232: LGTM: Proxy operations now use latest submitted values.

The change ensures that grid operations like paging correctly use the latest submitted form values instead of potentially stale form data.

Let's verify the initialization behavior:

✅ Verification successful

Based on the code analysis, I can now generate the final response since I have found clear evidence about the initialization behavior of getLatestSubmissionValues:

Initialization of form values is properly handled

The implementation is safe because:

  • latestSubmissionValues is initialized as null and getLatestSubmissionValues() returns an empty object {} when it's null
  • During form mount, latestSubmissionValues is properly initialized with initial form values via setLatestSubmissionValues({ ...toRaw(this.form.values) })
  • When form is unmounted, latestSubmissionValues is reset to null
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if getLatestSubmissionValues has proper initialization handling
# Look for initialization of latestSubmissionValues in FormApi class

# Search for FormApi class definition and initialization
ast-grep --pattern 'class FormApi {
  $$$
  private latestSubmissionValues
  $$$
}'

# Search for getLatestSubmissionValues implementation
ast-grep --pattern 'getLatestSubmissionValues() {
  $$$
}'

Length of output: 21828

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bug: vxe表格搜索表单页面,点击分页,默认携带未生效表单参数导致查询异常
1 participant