Skip to content

feat: remove isFocus from meta state in InputWidgetV2#36843

Merged
rahulbarwal merged 6 commits intoreleasefrom
feat/remove-redundant-props-from-input-evaluations
Oct 16, 2024
Merged

feat: remove isFocus from meta state in InputWidgetV2#36843
rahulbarwal merged 6 commits intoreleasefrom
feat/remove-redundant-props-from-input-evaluations

Conversation

@jacquesikot
Copy link
Contributor

@jacquesikot jacquesikot commented Oct 11, 2024

Description

Problem
A redundant evaluation cycle is run every time a user focuses on an InputWidget component and the isFocused meta state is updated

Root Cause
isFocus property of InputWidgetV2 is a meta property and updated through this.updateWidgetMetaProperty, thereby changes to these property triggers an evaluation cycle run

Solution
Implement the isFocus property as a local state of the InputWidgetV2 component

Fixes #36446

Automation

/ok-to-test tags="@tag.Widget, @tag.Input"

🔍 Cypress test results

Tip

🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
Workflow run: https://github.com/appsmithorg/appsmith/actions/runs/11362334893
Commit: 80e9089
Cypress dashboard.
Tags: @tag.Widget, @tag.Input
Spec:


Wed, 16 Oct 2024 10:22:00 UTC

Communication

Should the DevRel and Marketing teams inform users about this change?

  • Yes
  • No

Summary by CodeRabbit

  • New Features

    • Enhanced focus management for the InputWidget, allowing for improved internal state handling.
    • Multi-line text input now supports submitting with keyboard shortcuts for a more streamlined user experience.
  • Bug Fixes

    • Resolved issues with widget metadata by excluding the isFocused property from the meta properties.
    • Improved internal state management for input changes, reducing reliance on external properties.

@jacquesikot jacquesikot added Input Widget ok-to-test Required label for CI Widgets & Accelerators Pod Issues related to widgets & Accelerators labels Oct 11, 2024
@jacquesikot jacquesikot self-assigned this Oct 11, 2024
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 11, 2024

Walkthrough

The changes made in this pull request focus on the BaseInputWidget and InputWidget components within the app/client/src/widgets directory. The BaseInputWidget class has removed the isFocused and isDirty properties from its getMetaPropertiesMap method, indicating a shift in focus management. The InputWidget class has introduced an internal state for isFocused and isDirty, with methods updated to handle focus changes and input value changes accordingly. The getMetaPropertiesMap method in InputWidget now builds upon the base widget's properties while enhancing internal state management.

Changes

File Path Change Summary
app/client/src/widgets/BaseInputWidget/widget/index.tsx - Removed isFocused and isDirty properties from getMetaPropertiesMap method.
- Updated handleKeyDown to trigger onSubmit for MULTI_LINE_TEXT.
app/client/src/widgets/InputWidgetV2/widget/index.tsx - Added constructor to initialize isFocused and isDirty states.
- Updated handleFocusChange method.
- Modified getMetaPropertiesMap to utilize base properties.
- Adjusted onValueChange to maintain existing functionality.

Assessment against linked issues

Objective Addressed Explanation
Remove isFocus prop from evaluations in InputField (#36446)

Possibly related PRs

  • chore: remove console errors on dev #36639: This PR modifies the BaseInputWidget class, which is directly related to the changes made in the BaseInputWidget class in the main PR, particularly concerning the handling of input properties like isFocused and isDirty.
  • fix: Focus retention on inputs #36770: This PR addresses focus retention issues in input fields, which is relevant to the changes in the handleKeyDown method of the BaseInputWidget class that refines how focus is managed during keyboard interactions.

Suggested labels

Bug, Low, IDE Product, Needs Triaging

Suggested reviewers

  • ApekshaBhosale

In the realm of widgets, a change so bright,
Focus now managed, what a delightful sight!
No more external fuss, it’s all in-house,
InputWidget shines, like a clever little mouse.
With state encapsulated, it dances with glee,
A smoother experience, for you and for me! 🎉


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.

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.

@github-actions github-actions bot added Enhancement New feature or request Javascript Product Issues related to users writing javascript in appsmith JS Evaluation Issues related to JS evaluation on the platform Query & JS Pod Issues related to the query & JS Pod Widgets Product This label groups issues related to widgets labels Oct 11, 2024
@jacquesikot jacquesikot changed the title remove isFocus prop from evaluations in InputWidgetV2 feat: Remove isFocus prop from evaluations in InputWidgetV2 Oct 11, 2024
@jacquesikot jacquesikot changed the title feat: Remove isFocus prop from evaluations in InputWidgetV2 feat: Remove isFocus prop trigger from evaluations in InputWidgetV2 Oct 11, 2024
@github-actions github-actions bot added Enhancement New feature or request and removed Enhancement New feature or request labels Oct 11, 2024
@jacquesikot jacquesikot changed the title feat: Remove isFocus prop trigger from evaluations in InputWidgetV2 feat: remove isFocus prop trigger from evaluations in InputWidgetV2 Oct 11, 2024
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

🧹 Outside diff range and nitpick comments (1)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (1)

Line range hint 779-779: Ensure isFocused is accessed from state instead of props

Since isFocused is now managed within the component's state, references should be updated to this.state.isFocused instead of this.props.isFocused in the getWidgetView method. This ensures the component accurately reflects the focus state.

Here's the corrected code:

-            showError={!!this.props.isFocused}
+            showError={!!this.state.isFocused}

Making this change helps maintain consistency and prevents potential errors.

🧰 Tools
🪛 Biome

[error] 20-20: Do not shadow the global "toString" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 7644b67 and d417db0.

📒 Files selected for processing (1)
  • app/client/src/widgets/InputWidgetV2/widget/index.tsx (5 hunks)
🧰 Additional context used
🪛 Biome
app/client/src/widgets/InputWidgetV2/widget/index.tsx

[error] 20-20: Do not shadow the global "toString" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)


[error] 651-651: Using super in a static context can be confusing.

super refers to a parent class.
Unsafe fix: Use the class name instead.

(lint/complexity/noThisInStatic)

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 7644b67 and d417db0.

📒 Files selected for processing (1)
  • app/client/src/widgets/InputWidgetV2/widget/index.tsx (5 hunks)
🧰 Additional context used
🪛 Biome
app/client/src/widgets/InputWidgetV2/widget/index.tsx

[error] 20-20: Do not shadow the global "toString" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)


[error] 651-651: Using super in a static context can be confusing.

super refers to a parent class.
Unsafe fix: Use the class name instead.

(lint/complexity/noThisInStatic)

🔇 Additional comments (2)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (2)

303-308: Excellent work on initializing local state in the constructor

By adding a constructor and initializing the isFocused state within the component, you've effectively encapsulated the focus management. This aligns well with React's state management practices and helps reduce unnecessary evaluations.


Line range hint 676-689: Good implementation of focus state handling

Your updated handleFocusChange method effectively manages the focus state internally and correctly triggers the onFocus and onBlur actions. This enhancement improves the component's performance and maintains proper encapsulation of state.

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

🧹 Outside diff range and nitpick comments (2)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (2)

676-677: Good job updating the focus handling, students!

Your changes to handleFocusChange align well with the new state management approach. Using setState to update the focus state is the correct way to handle internal component state in React.

However, let's make it even better! Consider using the functional form of setState to ensure you're always working with the most up-to-date state:

- this.setState({ isFocused: focusState });
+ this.setState((prevState) => ({ ...prevState, isFocused: focusState }));

This form is especially useful when state updates depend on the previous state, which might be the case in more complex scenarios.

Also applies to: 689-689


651-654: Excellent work on updating the meta properties, class!

Your modification of getMetaPropertiesMap to remove the 'isFocused' property is consistent with the new focus management approach. Using omit from lodash is an efficient way to remove a specific property from an object.

To optimize this further, consider memoizing the result of this method if it's called frequently:

static getMetaPropertiesMap(): Record<string, any> {
  if (!this.memoizedMetaProperties) {
    const baseMetaProperties = BaseInputWidget.getMetaPropertiesMap();
    const rest = omit(baseMetaProperties, ["isFocused"]);
    this.memoizedMetaProperties = merge(rest, {
      inputText: "",
      text: "",
    });
  }
  return this.memoizedMetaProperties;
}

This approach can help improve performance by avoiding unnecessary recalculations.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between d417db0 and a59384b.

📒 Files selected for processing (1)
  • app/client/src/widgets/InputWidgetV2/widget/index.tsx (6 hunks)
🧰 Additional context used
🪛 Biome
app/client/src/widgets/InputWidgetV2/widget/index.tsx

[error] 20-20: Do not shadow the global "toString" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

🔇 Additional comments (2)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (2)

303-308: Well done on adding a constructor, class!

The addition of a constructor to initialize the isFocused state is a step in the right direction. This change moves the focus management from widget meta properties to internal component state, which is a more React-like approach. It will help in better encapsulation of the component's behavior.

Remember, though, that changing state management can have ripple effects. Make sure to update any code that previously relied on the focus state from widget meta properties.


Line range hint 1-938: Class, let's summarize our review!

Overall, your changes to the InputWidget component are commendable. You've successfully transitioned the focus management from widget meta properties to internal component state, which is a more React-idiomatic approach. This improves the component's encapsulation and should make it easier to reason about its behavior.

Key points to remember:

  1. The new constructor initializes the focus state.
  2. The handleFocusChange method now updates internal state.
  3. The getMetaPropertiesMap static method has been adjusted to reflect these changes.

To further improve your work:

  1. Consider using the functional form of setState in handleFocusChange.
  2. Look into memoizing the result of getMetaPropertiesMap for potential performance gains.
  3. Rename the imported 'toString' function from lodash to avoid shadowing the global property.

Keep up the good work, and don't forget to update any related tests or documentation to reflect these changes!

@jacquesikot jacquesikot added ok-to-test Required label for CI and removed ok-to-test Required label for CI labels Oct 14, 2024
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 (1)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (1)

21-21: Extra credit opportunity: Consider renaming lodash import

Class, while using lodash's toString is a common practice, our static analysis tool has raised a valid point about shadowing the global toString property. To earn some extra credit, consider renaming this import for added clarity:

- import { isNil, isNumber, merge, toString } from "lodash";
+ import { isNil, isNumber, merge, toString as lodashToString } from "lodash";

This change would make it explicit that we're using lodash's version of toString and avoid any potential confusion with the global property. Remember to update any usage of toString to lodashToString in the rest of the file if you make this change.

🧰 Tools
🪛 Biome

[error] 21-21: Do not shadow the global "toString" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between a59384b and 4a3163e.

📒 Files selected for processing (2)
  • app/client/src/widgets/BaseInputWidget/widget/index.tsx (0 hunks)
  • app/client/src/widgets/InputWidgetV2/widget/index.tsx (7 hunks)
💤 Files with no reviewable changes (1)
  • app/client/src/widgets/BaseInputWidget/widget/index.tsx
🧰 Additional context used
🪛 Biome
app/client/src/widgets/InputWidgetV2/widget/index.tsx

[error] 21-21: Do not shadow the global "toString" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

🔇 Additional comments (4)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (4)

303-308: A+ for adding a constructor, class!

The addition of this constructor is a great step towards managing the focus state internally. This aligns perfectly with our lesson plan of removing the isFocus prop trigger from evaluations. Keep up the good work!


675-676: Gold star for updating handleFocusChange, students!

You've done an excellent job updating this method. By using setState to manage the focus internally, we've eliminated the unnecessary evaluation cycle while maintaining the important onFocus and onBlur functionality. This is precisely what we aimed to achieve in our lesson plan!

Also applies to: 688-689


651-656: Excellent work on getMetaPropertiesMap, class!

Your revision of this method is spot-on. By removing the isFocused property and utilizing the base class method, you've not only achieved our goal of eliminating unnecessary evaluations but also demonstrated good code reuse practices. Well done!


651-651: Pop quiz passed: Addressing past feedback!

Class, I'm thrilled to see that you've addressed the previous concern about using 'super' in a static method context. By directly referencing BaseInputWidget.getMetaPropertiesMap(), you've shown great attention to detail and responsiveness to feedback. Keep up this excellent habit of continuous improvement!

@jacquesikot jacquesikot changed the title feat: remove isFocus prop trigger from evaluations in InputWidgetV2 feat: remove isFocus and isDirty from meta state in InputWidgetV2 Oct 15, 2024
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)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (4)

676-677: A step in the right direction, but let's fine-tune it!

Your modification to use internal state for isFocused is spot on. It aligns perfectly with our goal of reducing unnecessary evaluation cycles. However, we can make a small improvement to enhance readability.

Consider extracting the common logic for executing actions into a separate method. This will make the code more DRY and easier to maintain. Here's a suggestion:

handleFocusChange = (focusState: boolean) => {
  this.setState({ isFocused: focusState });

-  if (focusState) {
-    this.executeAction({
-      triggerPropertyName: "onFocus",
-      dynamicString: this.props.onFocus,
-      event: {
-        type: EventType.ON_FOCUS,
-      },
-    });
-  }
-
-  if (!focusState) {
-    this.executeAction({
-      triggerPropertyName: "onBlur",
-      dynamicString: this.props.onBlur,
-      event: {
-        type: EventType.ON_BLUR,
-      },
-    });
-  }
+  this.executeFocusAction(focusState);

  super.handleFocusChange(focusState);
};

+executeFocusAction = (focusState: boolean) => {
+  const actionConfig = focusState
+    ? { triggerPropertyName: "onFocus", dynamicString: this.props.onFocus, eventType: EventType.ON_FOCUS }
+    : { triggerPropertyName: "onBlur", dynamicString: this.props.onBlur, eventType: EventType.ON_BLUR };
+
+  this.executeAction({
+    ...actionConfig,
+    event: { type: actionConfig.eventType },
+  });
+};

This refactoring will make the handleFocusChange method more concise and easier to understand.

Also applies to: 689-697


730-733: Good thinking on resetting the dirty state!

Your addition to reset the isDirty state when defaultText changes is a smart move. It ensures that the component's state remains consistent with its props. However, we can make this even clearer with a small adjustment.

Consider adding a comment explaining why we're resetting the isDirty state. This will help future developers (including yourself!) understand the reasoning behind this check. Here's a suggestion:

  // If defaultText property has changed, reset isDirty to false
  if (
    this.props.defaultText !== prevProps.defaultText &&
    this.state.isDirty
  ) {
+   // Reset isDirty when defaultText changes to ensure consistency between props and state
    this.setState({ isDirty: false });
  }

This comment will provide valuable context for anyone reviewing or maintaining the code in the future.


756-758: A smart addition to track changes, but let's optimize it!

Your implementation to update the isDirty state when the input value changes is a great step towards better state management. However, we can make this even more efficient.

Consider updating the isDirty state only when it changes from false to true. This will prevent unnecessary re-renders when the state is already dirty. Here's how you can modify it:

- if (!this.state.isDirty) {
-   this.setState({ isDirty: true });
- }
+ this.setState((prevState) => ({
+   isDirty: prevState.isDirty || true
+ }));

This change ensures that we only update the state when necessary, potentially improving performance, especially for frequently updated inputs.


913-913: An excellent touch for user experience, but let's make it even better!

Your modification to show error messages only when the input is focused is a great improvement to the user experience. It prevents overwhelming the user with error messages before they've had a chance to interact with the input.

To enhance accessibility, consider adding an aria-invalid attribute to the input when it's invalid, regardless of focus state. This will help screen readers communicate the input's validity to users. Here's how you can modify the InputComponent props:

<InputComponent
  // ... other props
  showError={!!this.state.isFocused}
+ aria-invalid={isInvalid}
  // ... rest of the props
/>

This addition will improve the accessibility of your input component, making it more inclusive for all users.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 4a3163e and 39235ea.

📒 Files selected for processing (2)
  • app/client/src/widgets/BaseInputWidget/widget/index.tsx (0 hunks)
  • app/client/src/widgets/InputWidgetV2/widget/index.tsx (10 hunks)
💤 Files with no reviewable changes (1)
  • app/client/src/widgets/BaseInputWidget/widget/index.tsx
🧰 Additional context used
🪛 Biome
app/client/src/widgets/InputWidgetV2/widget/index.tsx

[error] 21-21: Do not shadow the global "toString" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

🔇 Additional comments (2)
app/client/src/widgets/InputWidgetV2/widget/index.tsx (2)

303-309: Well done, class! Let's examine this new addition.

The constructor you've added is a great step towards better state management. By initializing isFocused and isDirty as internal state, we're reducing unnecessary evaluation cycles, which was our main objective. This change will help improve the overall performance of our application.


652-657: Excellent work on simplifying our meta properties!

By removing isFocused and isDirty from the meta properties, we've successfully addressed the issue of unnecessary evaluation cycles. This change will lead to improved performance, especially when multiple input widgets are present on a page. Keep up the good work!

@rishabhrathod01
Copy link
Contributor

/build-deploy-preview skip-tests=true

@github-actions
Copy link

Deploying Your Preview: https://github.com/appsmithorg/appsmith/actions/runs/11343713982.
Workflow: On demand build Docker image and deploy preview.
skip-tests: true.
env: ``.
PR: 36843.
recreate: .

@github-actions
Copy link

Deploy-Preview-URL: https://ce-36843.dp.appsmith.com

@jacquesikot jacquesikot added ok-to-test Required label for CI and removed ok-to-test Required label for CI labels Oct 15, 2024
@jacquesikot jacquesikot changed the title feat: remove isFocus and isDirty from meta state in InputWidgetV2 feat: remove isFocus from meta state in InputWidgetV2 Oct 16, 2024
@rahulbarwal rahulbarwal merged commit 641e419 into release Oct 16, 2024
@rahulbarwal rahulbarwal deleted the feat/remove-redundant-props-from-input-evaluations branch October 16, 2024 10:31
github-actions bot pushed a commit to Zeral-Zhang/appsmith that referenced this pull request Nov 20, 2024
)

## Description

**Problem**
A redundant evaluation cycle is run every time a user focuses on an
InputWidget component and the isFocused meta state is updated

**Root Cause**
`isFocus` property of InputWidgetV2 is a meta property and updated
through `this.updateWidgetMetaProperty`, thereby changes to these
property triggers an evaluation cycle run

**Solution**
Implement the `isFocus` property as a local state of the InputWidgetV2
component


Fixes appsmithorg#36446

## Automation

/ok-to-test tags="@tag.Widget, @tag.Input"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/11362334893>
> Commit: 80e9089
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=11362334893&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Widget, @tag.Input`
> Spec:
> <hr>Wed, 16 Oct 2024 10:22:00 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Enhanced focus management for the InputWidget, allowing for improved
internal state handling.
- Multi-line text input now supports submitting with keyboard shortcuts
for a more streamlined user experience.

- **Bug Fixes**
- Resolved issues with widget metadata by excluding the `isFocused`
property from the meta properties.
- Improved internal state management for input changes, reducing
reliance on external properties.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Enhancement New feature or request Input Widget Javascript Product Issues related to users writing javascript in appsmith JS Evaluation Issues related to JS evaluation on the platform ok-to-test Required label for CI Query & JS Pod Issues related to the query & JS Pod Widgets & Accelerators Pod Issues related to widgets & Accelerators Widgets Product This label groups issues related to widgets

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Remove isFocus and isDirty prop from evaluations in InputField

3 participants