Skip to content

Commit fb8b407

Browse files
r-farkhutdinovRuslan Farkhutdinov
andauthored
FileUploader: Fix dialog trigger not working on multiple clicks (T1290774) (#30051)
Co-authored-by: Ruslan Farkhutdinov <[email protected]>
1 parent f4a0a29 commit fb8b407

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

packages/devextreme/js/__internal/ui/m_file_uploader.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ const DRAG_EVENT_DELTA = 1;
6262
const DIALOG_TRIGGER_EVENT_NAMESPACE = 'dxFileUploaderDialogTrigger';
6363

6464
const keyUpEventName = 'keyup';
65+
const nativeClickEvent = 'click';
6566

6667
const ENTER_KEY = 'enter';
6768
const SPACE_KEY = 'space';
@@ -871,7 +872,7 @@ class FileUploader extends Editor<Properties> {
871872

872873
const $target = $(target);
873874

874-
eventsEngine.on($target, addNamespace(clickEventName, DIALOG_TRIGGER_EVENT_NAMESPACE), () => {
875+
eventsEngine.on($target, addNamespace(nativeClickEvent, DIALOG_TRIGGER_EVENT_NAMESPACE), () => {
875876
this._selectFileDialogClickHandler();
876877
});
877878
eventsEngine.on($target, addNamespace(keyUpEventName, DIALOG_TRIGGER_EVENT_NAMESPACE), (e: KeyboardEvent) => {
@@ -1033,8 +1034,8 @@ class FileUploader extends Editor<Properties> {
10331034

10341035
_shouldRaiseDragOver(e, dropZoneElement) {
10351036
return this._activeDropZone === null
1036-
&& this.isMouseOverElement(e, dropZoneElement, false)
1037-
&& e.originalEvent.dataTransfer.types.find((item) => item === 'Files');
1037+
&& this.isMouseOverElement(e, dropZoneElement, false)
1038+
&& e.originalEvent.dataTransfer.types.find((item) => item === 'Files');
10381039
}
10391040

10401041
_dragOverHandler(isCustomTarget, e) {

packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/fileUploader.tests.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4365,8 +4365,8 @@ QUnit.module('readOnly option', moduleConfig, () => {
43654365
});
43664366

43674367
QUnit.module('integration of dx button components via dialogTrigger', moduleConfig, () => {
4368-
['enter', 'space'].forEach(keyName => {
4369-
['dxButton', 'dxButtonGroup', 'dxDropDownButton'].forEach(component => {
4368+
['dxButton', 'dxButtonGroup', 'dxDropDownButton'].forEach(component => {
4369+
['enter', 'space'].forEach(keyName => {
43704370
QUnit.test(`dialog should be shown after press ${keyName} key on ${component} (T1178836, T1256752)`, function(assert) {
43714371
if(devices.real().deviceType !== 'desktop') {
43724372
assert.ok(true, 'keyboard is not supported for not generic devices');
@@ -4390,5 +4390,25 @@ QUnit.module('integration of dx button components via dialogTrigger', moduleConf
43904390
assert.strictEqual(fileUploaderInputClickSpy.calledOnce, true, 'click on input fired once');
43914391
});
43924392
});
4393+
4394+
QUnit.test(`dialog should be shown after multiple clicks on ${component} (T1290774)`, function(assert) {
4395+
const $dialogTrigger = $('<div>')[component]().appendTo('#qunit-fixture');
4396+
4397+
$('#fileuploader').dxFileUploader({ dialogTrigger: $dialogTrigger });
4398+
4399+
const $fileUploaderInput = $(`.${FILEUPLOADER_INPUT_CLASS}`);
4400+
const fileUploaderInputClickSpy = sinon.spy();
4401+
4402+
$fileUploaderInput.on('click', fileUploaderInputClickSpy);
4403+
4404+
$dialogTrigger.trigger('click');
4405+
assert.strictEqual(fileUploaderInputClickSpy.callCount, 1, 'first click triggers input click');
4406+
4407+
$dialogTrigger.trigger('click');
4408+
assert.strictEqual(fileUploaderInputClickSpy.callCount, 2, 'second click triggers input click');
4409+
4410+
$dialogTrigger.trigger('click');
4411+
assert.strictEqual(fileUploaderInputClickSpy.callCount, 3, 'third click triggers input click');
4412+
});
43934413
});
43944414
});

0 commit comments

Comments
 (0)