123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.keypressBehavior = void 0;
- var _dom = require("@testing-library/dom");
- var _shared = require("../shared");
- var _utils = require("../../utils");
- /**
- * This file should cover the behavior for keys that produce character input
- */
- const keypressBehavior = [{
- matches: (keyDef, element) => {
- var _keyDef$key;
- return ((_keyDef$key = keyDef.key) == null ? void 0 : _keyDef$key.length) === 1 && (0, _utils.isElementType)(element, 'input', {
- type: 'time',
- readOnly: false
- });
- },
- handle: (keyDef, element, options, state) => {
- var _state$carryValue;
- let newEntry = keyDef.key;
- const textToBeTyped = ((_state$carryValue = state.carryValue) != null ? _state$carryValue : '') + newEntry;
- const timeNewEntry = (0, _utils.buildTimeValue)(textToBeTyped);
- if ((0, _utils.isValidInputTimeValue)(element, timeNewEntry)) {
- newEntry = timeNewEntry;
- }
- const {
- newValue,
- newSelectionStart
- } = (0, _utils.calculateNewValue)(newEntry, element);
- const prevValue = (0, _utils.getValue)(element); // this check was provided by fireInputEventIfNeeded
- // TODO: verify if it is even needed by this handler
- if (prevValue !== newValue) {
- (0, _shared.fireInputEvent)(element, {
- newValue,
- newSelectionStart,
- eventOverrides: {
- data: keyDef.key,
- inputType: 'insertText'
- }
- });
- }
- (0, _shared.fireChangeForInputTimeIfValid)(element, prevValue, timeNewEntry);
- state.carryValue = textToBeTyped;
- }
- }, {
- matches: (keyDef, element) => {
- var _keyDef$key2;
- return ((_keyDef$key2 = keyDef.key) == null ? void 0 : _keyDef$key2.length) === 1 && (0, _utils.isElementType)(element, 'input', {
- type: 'date',
- readOnly: false
- });
- },
- handle: (keyDef, element, options, state) => {
- var _state$carryValue2;
- let newEntry = keyDef.key;
- const textToBeTyped = ((_state$carryValue2 = state.carryValue) != null ? _state$carryValue2 : '') + newEntry;
- const isValidToBeTyped = (0, _utils.isValidDateValue)(element, textToBeTyped);
- if (isValidToBeTyped) {
- newEntry = textToBeTyped;
- }
- const {
- newValue,
- newSelectionStart
- } = (0, _utils.calculateNewValue)(newEntry, element);
- const prevValue = (0, _utils.getValue)(element); // this check was provided by fireInputEventIfNeeded
- // TODO: verify if it is even needed by this handler
- if (prevValue !== newValue) {
- (0, _shared.fireInputEvent)(element, {
- newValue,
- newSelectionStart,
- eventOverrides: {
- data: keyDef.key,
- inputType: 'insertText'
- }
- });
- }
- if (isValidToBeTyped) {
- _dom.fireEvent.change(element, {
- target: {
- value: textToBeTyped
- }
- });
- }
- state.carryValue = textToBeTyped;
- }
- }, {
- matches: (keyDef, element) => {
- var _keyDef$key3;
- return ((_keyDef$key3 = keyDef.key) == null ? void 0 : _keyDef$key3.length) === 1 && (0, _utils.isElementType)(element, 'input', {
- type: 'number',
- readOnly: false
- });
- },
- handle: (keyDef, element, options, state) => {
- var _ref, _state$carryValue3, _newValue$match, _newValue$match2;
- if (!/[\d.\-e]/.test(keyDef.key)) {
- return;
- }
- const oldValue = (_ref = (_state$carryValue3 = state.carryValue) != null ? _state$carryValue3 : (0, _utils.getValue)(element)) != null ? _ref :
- /* istanbul ignore next */
- '';
- const {
- newValue,
- newSelectionStart
- } = (0, _utils.calculateNewValue)(keyDef.key, element, oldValue); // the browser allows some invalid input but not others
- // it allows up to two '-' at any place before any 'e' or one directly following 'e'
- // it allows one '.' at any place before e
- const valueParts = newValue.split('e', 2);
- if (Number((_newValue$match = newValue.match(/-/g)) == null ? void 0 : _newValue$match.length) > 2 || Number((_newValue$match2 = newValue.match(/\./g)) == null ? void 0 : _newValue$match2.length) > 1 || valueParts[1] && !/^-?\d*$/.test(valueParts[1])) {
- return;
- }
- (0, _shared.fireInputEvent)(element, {
- newValue,
- newSelectionStart,
- eventOverrides: {
- data: keyDef.key,
- inputType: 'insertText'
- }
- });
- const appliedValue = (0, _utils.getValue)(element);
- if (appliedValue === newValue) {
- state.carryValue = undefined;
- } else {
- state.carryValue = newValue;
- }
- }
- }, {
- matches: (keyDef, element) => {
- var _keyDef$key4;
- return ((_keyDef$key4 = keyDef.key) == null ? void 0 : _keyDef$key4.length) === 1 && ((0, _utils.isElementType)(element, ['input', 'textarea'], {
- readOnly: false
- }) && !(0, _utils.isClickableInput)(element) || (0, _utils.isContentEditable)(element)) && (0, _utils.getSpaceUntilMaxLength)(element) !== 0;
- },
- handle: (keyDef, element) => {
- const {
- newValue,
- newSelectionStart
- } = (0, _utils.calculateNewValue)(keyDef.key, element);
- (0, _shared.fireInputEvent)(element, {
- newValue,
- newSelectionStart,
- eventOverrides: {
- data: keyDef.key,
- inputType: 'insertText'
- }
- });
- }
- }, {
- matches: (keyDef, element) => keyDef.key === 'Enter' && ((0, _utils.isElementType)(element, 'textarea', {
- readOnly: false
- }) || (0, _utils.isContentEditable)(element)) && (0, _utils.getSpaceUntilMaxLength)(element) !== 0,
- handle: (keyDef, element, options, state) => {
- const {
- newValue,
- newSelectionStart
- } = (0, _utils.calculateNewValue)('\n', element);
- const inputType = (0, _utils.isContentEditable)(element) && !state.modifiers.shift ? 'insertParagraph' : 'insertLineBreak';
- (0, _shared.fireInputEvent)(element, {
- newValue,
- newSelectionStart,
- eventOverrides: {
- inputType
- }
- });
- }
- }];
- exports.keypressBehavior = keypressBehavior;
|