Skip to content

Commit d333bd2

Browse files
authored
UX: Improve behavior of dropdowns in the Add to Album and Upload dialogs photoprism#5177 photoprism#5290
1 parent 2128696 commit d333bd2

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

frontend/src/component/photo/album/dialog.vue

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<v-combobox
1919
ref="input"
2020
v-model="selectedAlbums"
21+
v-model:menu="albumsMenu"
2122
:disabled="loading"
2223
:loading="loading"
2324
hide-details
@@ -28,8 +29,10 @@
2829
:items="items"
2930
item-title="Title"
3031
item-value="UID"
31-
:placeholder="$gettext('Select or create albums')"
3232
return-object
33+
:placeholder="$gettext('Select or create albums')"
34+
@update:menu="onAlbumsMenuUpdate"
35+
@keydown.enter.stop="onAlbumsEnter"
3336
>
3437
<template #no-data>
3538
<v-list-item>
@@ -91,6 +94,8 @@ export default {
9194
albums: [],
9295
items: [],
9396
selectedAlbums: [],
97+
albumsMenu: false,
98+
suppressAlbumsMenuOpen: false,
9499
labels: {
95100
addToAlbum: this.$gettext("Add to album"),
96101
createAlbum: this.$gettext("Create album"),
@@ -213,11 +218,27 @@ export default {
213218
}
214219
});
215220
},
221+
onAlbumsEnter() {
222+
this.suppressAlbumsMenuOpen = true;
223+
this.albumsMenu = false;
224+
window.setTimeout(() => {
225+
this.suppressAlbumsMenuOpen = false;
226+
}, 250);
227+
},
228+
onAlbumsMenuUpdate(val) {
229+
if (val && this.suppressAlbumsMenuOpen) {
230+
this.albumsMenu = false;
231+
return;
232+
}
233+
this.albumsMenu = val;
234+
},
216235
reset() {
217236
this.loading = false;
218237
this.selectedAlbums = [];
219238
this.albums = [];
220239
this.items = [];
240+
this.albumsMenu = false;
241+
this.suppressAlbumsMenuOpen = false;
221242
},
222243
removeSelection(index) {
223244
this.selectedAlbums.splice(index, 1);

frontend/src/component/upload/dialog.vue

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
<div class="form-controls">
5252
<v-combobox
5353
v-model="selectedAlbums"
54+
v-model:menu="albumsMenu"
55+
@update:menu="onAlbumsMenuUpdate"
5456
:disabled="busy || loading || total > 0 || filesQuotaReached"
5557
hide-details
5658
chips
@@ -62,6 +64,7 @@
6264
item-value="UID"
6365
:placeholder="$gettext('Select or create albums')"
6466
return-object
67+
@keydown.enter.stop="onAlbumsEnter"
6568
>
6669
<template #no-data>
6770
<v-list-item>
@@ -156,6 +159,8 @@ export default {
156159
accept: this.$config.get("uploadAllow"),
157160
albums: [],
158161
selectedAlbums: [],
162+
albumsMenu: false,
163+
suppressAlbumsMenuOpen: false,
159164
selected: [],
160165
uploads: [],
161166
busy: false,
@@ -239,6 +244,20 @@ export default {
239244
onLoaded() {
240245
this.loading = false;
241246
},
247+
onAlbumsEnter() {
248+
this.suppressAlbumsMenuOpen = true;
249+
this.albumsMenu = false;
250+
window.setTimeout(() => {
251+
this.suppressAlbumsMenuOpen = false;
252+
}, 250);
253+
},
254+
onAlbumsMenuUpdate(val) {
255+
if (val && this.suppressAlbumsMenuOpen) {
256+
this.albumsMenu = false;
257+
return;
258+
}
259+
this.albumsMenu = val;
260+
},
242261
load(q) {
243262
if (this.loading) {
244263
return;
@@ -296,6 +315,8 @@ export default {
296315
this.remainingTime = -1;
297316
this.eta = "";
298317
this.token = "";
318+
this.albumsMenu = false;
319+
this.suppressAlbumsMenuOpen = false;
299320
},
300321
onUploadDialog() {
301322
this.$refs.upload.click();

0 commit comments

Comments
 (0)