(
element: HTMLElement,
{
newValue,
newSelectionStart,
eventOverrides,
}: {
newValue: string
newSelectionStart: number
eventOverrides: Partial<Parameters<typeof fireEvent>[1]> & {
[k: string]: unknown
}
},
)
| 9 | } from '../../utils' |
| 10 | |
| 11 | export function fireInputEvent( |
| 12 | element: HTMLElement, |
| 13 | { |
| 14 | newValue, |
| 15 | newSelectionStart, |
| 16 | eventOverrides, |
| 17 | }: { |
| 18 | newValue: string |
| 19 | newSelectionStart: number |
| 20 | eventOverrides: Partial<Parameters<typeof fireEvent>[1]> & { |
| 21 | [k: string]: unknown |
| 22 | } |
| 23 | }, |
| 24 | ) { |
| 25 | // apply the changes before firing the input event, so that input handlers can access the altered dom and selection |
| 26 | if (isContentEditable(element)) { |
| 27 | applyNative(element, 'textContent', newValue) |
| 28 | } else /* istanbul ignore else */ if ( |
| 29 | isElementType(element, ['input', 'textarea']) |
| 30 | ) { |
| 31 | applyNative(element, 'value', newValue) |
| 32 | } else { |
| 33 | // TODO: properly type guard |
| 34 | throw new Error('Invalid Element') |
| 35 | } |
| 36 | setSelectionRangeAfterInput(element, newSelectionStart) |
| 37 | |
| 38 | fireEvent.input(element, { |
| 39 | ...eventOverrides, |
| 40 | }) |
| 41 | |
| 42 | setSelectionRangeAfterInputHandler(element, newValue, newSelectionStart) |
| 43 | } |
| 44 | |
| 45 | function setSelectionRangeAfterInput( |
| 46 | element: Element, |
no test coverage detected