Skip to content

Commit 7d7ae71

Browse files
authored
TextBox: input should not remove excess characters in front when mask is applied (T1237175) (#29381)
1 parent f5642d4 commit 7d7ae71

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

packages/devextreme/js/__internal/ui/text_box/m_text_editor.mask.strategy.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export default class MaskStrategy {
109109
}
110110

111111
_handleBackwardDeleteInputEvent() {
112-
this._clearSelectedText();
112+
this._clearSelectedText(true);
113113

114114
const caret = this._editorCaret();
115115
this.editor.setForwardDirection();
@@ -122,9 +122,10 @@ export default class MaskStrategy {
122122
}
123123
}
124124

125-
_clearSelectedText() {
126-
// eslint-disable-next-line no-unsafe-optional-chaining
127-
const length = (this._prevCaret?.end - this._prevCaret?.start) || 1;
125+
_clearSelectedText(isDeleteInputEvent?: boolean): void {
126+
const selectionLength = this._prevCaret && (this._prevCaret.end - this._prevCaret.start);
127+
const length = selectionLength || Number(isDeleteInputEvent);
128+
128129
const caret = this._editorCaret();
129130

130131
if (!this._isAutoFill()) {

packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/textEditorParts/mask.tests.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,23 @@ QUnit.module('typing', moduleConfig, () => {
715715

716716
assert.deepEqual(keyboard.caret(), { start: 4, end: 4 }, 'caret position is correct');
717717
});
718+
719+
QUnit.test('does not remove extra characters in front (T1237175)', function(assert) {
720+
const $textEditor = $('#texteditor').dxTextEditor({
721+
mask: '000',
722+
value: '123'
723+
});
724+
725+
const $input = $textEditor.find(`.${TEXTEDITOR_INPUT_CLASS}`);
726+
const keyboard = keyboardMock($input, true);
727+
728+
keyboard
729+
.caret(0)
730+
.type('9');
731+
732+
assert.strictEqual($input.val(), '923', 'only replaced character is removed');
733+
assert.deepEqual(keyboard.caret(), { start: 1, end: 1 }, 'caret position is correct');
734+
});
718735
});
719736

720737
QUnit.module('backspace key', moduleConfig, () => {

0 commit comments

Comments
 (0)