292292 :label="t('buttons.share')"
293293 show="share"
294294 />
295+ <action
296+ v-if="editAvailable"
297+ id="edit-button"
298+ icon="mode_edit"
299+ :label="t('buttons.edit')"
300+ @action="openSelectedFile"
301+ />
295302 <action
296303 v-if="headerButtons.rename"
297304 icon="mode_edit"
@@ -413,7 +420,7 @@ import {
413420 toRef,
414421 watch,
415422} from "vue";
416- import { useRoute, onBeforeRouteUpdate } from "vue-router";
423+ import { useRoute, useRouter, onBeforeRouteUpdate } from "vue-router";
417424import { useI18n } from "vue-i18n";
418425import { removePrefix } from "@/api/utils";
419426
@@ -438,6 +445,7 @@ const route = useRoute();
438445onBeforeRouteUpdate(() => {
439446 hideContextMenu();
440447});
448+ const router = useRouter();
441449
442450const { t } = useI18n();
443451
@@ -1162,6 +1170,24 @@ const handleEmptyAreaClick = (e: MouseEvent) => {
11621170
11631171 fileStore.selected = [];
11641172};
1173+
1174+ const editAvailable = computed((): boolean => {
1175+ return (
1176+ fileStore.selectedCount === 1 &&
1177+ fileStore.req !== null &&
1178+ !fileStore.req.items[fileStore.selected[0]].isDir
1179+ );
1180+ });
1181+
1182+ const openSelectedFile = () => {
1183+ if (
1184+ fileStore.selectedCount === 1 &&
1185+ fileStore.req !== null &&
1186+ !fileStore.req.items[fileStore.selected[0]].isDir
1187+ ) {
1188+ router.push({ path: fileStore.req.items[fileStore.selected[0]].url });
1189+ }
1190+ };
11651191</script>
11661192<style scoped>
11671193#listing {
0 commit comments