Skip to content

Commit 5b8f328

Browse files
Merge pull request #1521 from jrmlt/add-force-argument-trigger-event
Add `force` argument to `triggerEvent`
2 parents 336c0d9 + 671cc68 commit 5b8f328

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

addon/src/dom/trigger-event.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ registerHook('triggerEvent', 'start', (target: Target, eventType: string) => {
1818
* @param {string|Element|IDOMElementDescriptor} target the element, selector, or descriptor to trigger the event on
1919
* @param {string} eventType the type of event to trigger
2020
* @param {Object} options additional properties to be set on the event
21+
* @param {boolean} force if true, will bypass availability checks (false by default)
2122
* @return {Promise<void>} resolves when the application is settled
2223
*
2324
* @example
@@ -58,6 +59,7 @@ export default function triggerEvent(
5859
target: Target,
5960
eventType: string,
6061
options?: Record<string, unknown>,
62+
force: boolean = false,
6163
): Promise<void> {
6264
return Promise.resolve()
6365
.then(() => {
@@ -82,7 +84,7 @@ export default function triggerEvent(
8284
);
8385
}
8486

85-
if (isFormControl(element) && element.disabled) {
87+
if (!force && isFormControl(element) && element.disabled) {
8688
throw new Error(`Can not \`triggerEvent\` on disabled ${element}`);
8789
}
8890

test-app/tests/unit/dom/trigger-event-test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,24 @@ module('DOM Helper: triggerEvent', function (hooks) {
177177
);
178178
});
179179

180+
test('allows triggering events on disabled form control when `force` is true', async function (assert) {
181+
element = buildInstrumentedElement('textarea');
182+
element.setAttribute('disabled', true);
183+
184+
element.addEventListener('fliberty', (e) => {
185+
assert.step('fliberty');
186+
assert.ok(
187+
e instanceof Event,
188+
`fliberty listener receives a native event`
189+
);
190+
});
191+
192+
await setupContext(context);
193+
await triggerEvent(element, 'fliberty', {}, true);
194+
195+
assert.verifySteps(['fliberty']);
196+
});
197+
180198
test('events properly bubble upwards', async function (assert) {
181199
await setupContext(context);
182200
element = buildInstrumentedElement('div');

type-tests/api.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ expectTypeOf(triggerEvent).toEqualTypeOf<
122122
(
123123
target: Target,
124124
eventType: string,
125-
options?: Record<string, unknown>
125+
options?: Record<string, unknown>,
126+
force?: boolean,
126127
) => Promise<void>
127128
>();
128129
expectTypeOf(triggerKeyEvent).toEqualTypeOf<

0 commit comments

Comments
 (0)