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

Adding format on type feature prop #677

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

bncunha
Copy link

@bncunha bncunha commented Sep 28, 2022

Describe the issue/change

Hi! This is a suggestion for a new feature to show mask only when typing.

Describe the changes proposed/implemented in this PR

This PR propose a new prop called formatOnType, this new prop only show the mask when typing, eliminating white spaces and improving screen readers.

Example usage (If applicable)

<PatternFormat format="+1 (###) ###-####" formatOnType />

Screenshot (If applicable)

This video below is how is the library today, the mask already show on input when start typing.
https://user-images.githubusercontent.com/21287627/192879722-9c9728ab-d60e-404f-9e17-c3ce84124f35.mov

This video below is the suggestion. Realize that mask only show when digit comes to mask.
https://user-images.githubusercontent.com/21287627/192880076-3814b96f-b716-46ab-b39e-e58b54ef301f.mov

Please check which browsers were used for testing

  • Chrome
  • Chrome (Android)
  • Safari (OSX)
  • Safari (iOS)
  • Firefox
  • Firefox (Android)

@s-yadav
Copy link
Owner

s-yadav commented Oct 1, 2022

There is one corner case with this, try format="+1 (###) 2##-####"

Then try to type this character by character 2222, you will see after typing 4th 2, the cursor comes at the wrong place. +1 (222) 2|2.
See the behavior here:

Screen.Recording.2022-10-01.at.10.45.20.PM.mov

The reason for this is the caret engine of RNF is agnostic of pattern, it tries to find the new caret position based on the input value (what user types), formatted value (value after formatting is applied), and input caret position (before applying formatting).
To handle the pattern which has the number what we do is to move the cursor to next allowed caret position even before the character is added, so the caret engine doesn't have to deal with this. Reference: https://github.com/s-yadav/react-number-format/blob/master/src/pattern_format.tsx#L224

With the partial format being applied this would not be possible.

@s-yadav
Copy link
Owner

s-yadav commented Oct 1, 2022

If you have a custom use case where the number doesn't come as a format character in middle, you can implement this logic outside. See the customization guide. https://s-yadav.github.io/react-number-format/docs/customization/

And if you implement some custom logic outside please do share a codesandbox example here, so others with similar use cases can do the same.

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.

2 participants