Skip to content

Commit f909e18

Browse files
[6.x] Fix asset editor prev/next buttons and "Edit Image" button in Bard (#14728)
Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent 3920bd5 commit f909e18

6 files changed

Lines changed: 49 additions & 11 deletions

File tree

resources/js/components/assets/Editor/Editor.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@
157157
</ui-badge>
158158
</div>
159159
<div class="flex items-center space-x-3 rtl:space-x-reverse">
160-
<ui-button icon="chevron-left" @click="navigateToPreviousAsset" v-tooltip="__('Previous Asset')" />
161-
<ui-button icon="chevron-right" @click="navigateToNextAsset" v-tooltip="__('Next Asset')" />
160+
<ui-button v-if="showNavigation" icon="chevron-left" @click="navigateToPreviousAsset" v-tooltip="__('Previous Asset')" />
161+
<ui-button v-if="showNavigation" icon="chevron-right" @click="navigateToNextAsset" v-tooltip="__('Next Asset')" />
162162
<ui-button variant="primary" icon="save" @click="saveAndClose" v-if="!readOnly" :text="__('Save')" />
163163
</div>
164164
</div>
@@ -239,6 +239,10 @@ export default {
239239
type: Boolean,
240240
default: true,
241241
},
242+
showNavigation: {
243+
type: Boolean,
244+
default: true,
245+
},
242246
allowDeleting: {
243247
type: Boolean,
244248
default() {

resources/js/components/fieldtypes/assets/Asset.js

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,16 @@ export default {
1616
type: Boolean,
1717
default: true,
1818
},
19+
siblings: {
20+
type: Array,
21+
default: () => [],
22+
},
1923
},
2024

2125
data() {
2226
return {
2327
editing: false,
28+
editingId: null,
2429
};
2530
},
2631

@@ -73,9 +78,10 @@ export default {
7378

7479
edit() {
7580
if (this.readOnly) return;
76-
if (this.asset.invalid) return;
81+
if (this.asset?.invalid) return;
7782

7883
this.editing = true;
84+
this.editingId = this.asset?.id ?? null;
7985
},
8086

8187
remove() {
@@ -98,6 +104,7 @@ export default {
98104

99105
closeEditor() {
100106
this.editing = false;
107+
this.editingId = null;
101108
},
102109

103110
assetSaved(asset) {
@@ -108,10 +115,28 @@ export default {
108115
actionCompleted(successful, response) {
109116
if (successful === false) return;
110117
const id = response.ids[0] || null;
111-
if (id && id !== this.asset.id) {
112-
this.$emit('id-changed', id);
118+
if (id && id !== this.editingId) {
119+
this.$emit('id-changed', this.editingId, id);
113120
}
114121
this.closeEditor();
115122
},
123+
124+
navigateToPrevious() {
125+
const index = this.siblings.findIndex((asset) => asset.id === this.editingId);
126+
if (index <= 0) return;
127+
128+
const previousId = this.siblings[index - 1].id;
129+
this.editingId = null;
130+
this.$nextTick(() => (this.editingId = previousId));
131+
},
132+
133+
navigateToNext() {
134+
const index = this.siblings.findIndex((asset) => asset.id === this.editingId);
135+
if (index === -1 || index >= this.siblings.length - 1) return;
136+
137+
const nextId = this.siblings[index + 1].id;
138+
this.editingId = null;
139+
this.$nextTick(() => (this.editingId = nextId));
140+
},
116141
},
117142
};

resources/js/components/fieldtypes/assets/AssetRow.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,12 @@
5757
/>
5858

5959
<asset-editor
60-
v-if="editing"
61-
:id="asset.id"
60+
v-if="editingId"
61+
:id="editingId"
6262
:allow-deleting="false"
63+
:show-navigation="siblings.length > 1"
64+
@previous="navigateToPrevious"
65+
@next="navigateToNext"
6366
@closed="closeEditor"
6467
@saved="assetSaved"
6568
@action-completed="actionCompleted"

resources/js/components/fieldtypes/assets/AssetTile.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@
99
:title="asset.invalid ? invalidLabel : label"
1010
>
1111
<asset-editor
12-
v-if="editing"
13-
:id="asset.id"
12+
v-if="editingId"
13+
:id="editingId"
1414
:allow-deleting="false"
15+
:show-navigation="siblings.length > 1"
16+
@previous="navigateToPrevious"
17+
@next="navigateToNext"
1518
@closed="closeEditor"
1619
@saved="assetSaved"
1720
@action-completed="actionCompleted"

resources/js/components/fieldtypes/assets/AssetsFieldtype.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,14 @@
116116
v-for="asset in assets"
117117
:key="asset.id"
118118
:asset="asset"
119+
:siblings="assets"
119120
:read-only="isReadOnly"
120121
:show-filename="config.show_filename"
121122
:show-set-alt="showSetAlt"
122123
:checkerboard-mode="checkerboardMode"
123124
@updated="assetUpdated"
124125
@removed="assetRemoved"
125-
@id-changed="idChanged(asset.id, $event)"
126+
@id-changed="idChanged"
126127
>
127128
</asset-tile>
128129
</div>
@@ -156,12 +157,13 @@
156157
v-for="asset in assets"
157158
:key="asset.id"
158159
:asset="asset"
160+
:siblings="assets"
159161
:read-only="isReadOnly"
160162
:show-filename="config.show_filename"
161163
:show-set-alt="showSetAlt"
162164
@updated="assetUpdated"
163165
@removed="assetRemoved"
164-
@id-changed="idChanged(asset.id, $event)"
166+
@id-changed="idChanged"
165167
/>
166168
</tbody>
167169
</sortable-list>

resources/js/components/fieldtypes/bard/Image.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
:id="assetId"
5656
:showToolbar="false"
5757
:allow-deleting="false"
58+
:show-navigation="false"
5859
@closed="closeEditor"
5960
@saved="editorAssetSaved"
6061
@actionCompleted="actionCompleted"

0 commit comments

Comments
 (0)