[core] draggable shortcutlinks

This commit is contained in:
Tim Gröger 2021-04-18 23:43:16 +02:00
parent 3c7d711f59
commit 95867428a8
3 changed files with 44 additions and 36 deletions

View File

@ -1,7 +1,7 @@
<template> <template>
<q-btn v-if="isGranted" flat dense :icon="shortcut.icon" :to="{ name: shortcut.link }" round> <q-btn v-if="isGranted" flat dense :icon="shortcut.icon" :to="{ name: shortcut.link }" round>
<q-menu v-if='context' context-menu> <q-menu v-if="context" context-menu>
<q-btn v-close-popup label='Verknüpfung entfernen' @click='deleteShortcut'/> <q-btn v-close-popup label="Verknüpfung entfernen" @click="deleteShortcut" />
</q-menu> </q-menu>
</q-btn> </q-btn>
</template> </template>
@ -21,15 +21,15 @@ export default defineComponent({
context: { context: {
type: Boolean, type: Boolean,
default: false, default: false,
} },
}, },
emits: { emits: {
deleteShortcut: (val: FG_Plugin.MenuLink| FG_Plugin.Shortcut) => val.link deleteShortcut: (val: FG_Plugin.MenuLink | FG_Plugin.Shortcut) => val.link,
}, },
setup(props, { emit }) { setup(props, { emit }) {
const isGranted = computed(() => hasPermissions(props.shortcut.permissions || [])); const isGranted = computed(() => hasPermissions(props.shortcut.permissions || []));
function deleteShortcut() { function deleteShortcut() {
emit('deleteShortcut', props.shortcut) emit('deleteShortcut', props.shortcut);
} }
return { isGranted, deleteShortcut }; return { isGranted, deleteShortcut };
}, },

View File

@ -14,8 +14,10 @@
</q-toolbar-title> </q-toolbar-title>
<!-- Hier kommen die Shortlinks hin --> <!-- Hier kommen die Shortlinks hin -->
<q-btn icon="mdi-message-bulleted" flat dense <q-btn icon="mdi-message-bulleted" flat dense round>
><q-badge color="negative" floating>{{ notifications.length }}</q-badge> <q-badge color="negative" floating>
{{ notifications.length }}
</q-badge>
<q-menu style="max-height: 400px; overflow: auto"> <q-menu style="max-height: 400px; overflow: auto">
<q-btn <q-btn
v-if="useNative && noPermission" v-if="useNative && noPermission"
@ -33,18 +35,11 @@
<div v-else class="q-pa-sm">Keine neuen Benachrichtigungen</div> <div v-else class="q-pa-sm">Keine neuen Benachrichtigungen</div>
</q-menu> </q-menu>
</q-btn> </q-btn>
<!--<shortcut-link <drag v-model="shortCuts" item-key="link" ghost-class="ghost">
v-for="(shortcut, index) in shortcuts" <template #item="{ element }">
:key="'shortcut' + index" <shortcut-link :shortcut="element" context @delete-shortcut="deleteShortcut" />
:shortcut="shortcut" </template>
/>--> </drag>
<shortcut-link
v-for="(shortcut, index) in shortCuts"
:key="'shortcut' + index"
:shortcut="shortcut"
context
@delete-shortcut="deleteShortcut"
/>
<q-btn flat round dense icon="mdi-exit-to-app" @click="logout()" /> <q-btn flat round dense icon="mdi-exit-to-app" @click="logout()" />
</q-toolbar> </q-toolbar>
</q-header> </q-header>
@ -64,13 +59,6 @@
:entry="entry" :entry="entry"
@add-short-cut="addShortcut" @add-short-cut="addShortcut"
/> />
<!--<q-separator />
Plugin functions
<essential-link
v-for="(entry, index) in subLinks"
:key="'childPlugin' + index"
:entry="entry"
/>-->
</q-list> </q-list>
<q-separator /> <q-separator />
<essential-link <essential-link
@ -89,13 +77,23 @@
import EssentialLink from 'src/components/navigation/EssentialLink.vue'; import EssentialLink from 'src/components/navigation/EssentialLink.vue';
import ShortcutLink from 'src/components/navigation/ShortcutLink.vue'; import ShortcutLink from 'src/components/navigation/ShortcutLink.vue';
import Notification from 'src/components/Notification.vue'; import Notification from 'src/components/Notification.vue';
import { defineComponent, ref, inject, computed, onBeforeMount, onBeforeUnmount } from 'vue'; import {
defineComponent,
ref,
inject,
computed,
onBeforeMount,
onBeforeUnmount,
ComponentPublicInstance,
} from 'vue';
import { useMainStore } from 'src/stores'; import { useMainStore } from 'src/stores';
import { FG_Plugin } from 'src/plugins'; import { FG_Plugin } from 'src/plugins';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { Screen } from 'quasar'; import { Screen } from 'quasar';
import config from 'src/config'; import config from 'src/config';
import EssentialExpansionLink from 'components/navigation/EssentialExpansionLink.vue'; import EssentialExpansionLink from 'components/navigation/EssentialExpansionLink.vue';
import draggable from 'vuedraggable';
const drag: ComponentPublicInstance = <ComponentPublicInstance>draggable;
const essentials: FG_Plugin.MenuLink[] = [ const essentials: FG_Plugin.MenuLink[] = [
{ {
title: 'Über Flaschengeist', title: 'Über Flaschengeist',
@ -106,7 +104,7 @@ const essentials: FG_Plugin.MenuLink[] = [
export default defineComponent({ export default defineComponent({
name: 'MainLayout', name: 'MainLayout',
components: { EssentialExpansionLink, EssentialLink, ShortcutLink, Notification }, components: { EssentialExpansionLink, EssentialLink, ShortcutLink, Notification, drag },
setup() { setup() {
const router = useRouter(); const router = useRouter();
const mainStore = useMainStore(); const mainStore = useMainStore();
@ -171,8 +169,8 @@ export default defineComponent({
const shortCuts = computed({ const shortCuts = computed({
get: () => mainStore.shortcuts, get: () => mainStore.shortcuts,
set: (val: Array<FG_Plugin.MenuLink>) => { set: (val: Array<FG_Plugin.MenuLink>) => {
console.log('hier bin ich', val);
mainStore.shortcuts = val; mainStore.shortcuts = val;
void mainStore.setShortcuts();
}, },
}); });
@ -185,7 +183,6 @@ export default defineComponent({
} }
function deleteShortcut(val: FG_Plugin.MenuLink) { function deleteShortcut(val: FG_Plugin.MenuLink) {
console.log('deleteShortcut');
const idx = shortCuts.value.findIndex((a: FG_Plugin.MenuLink) => a.link === val.link); const idx = shortCuts.value.findIndex((a: FG_Plugin.MenuLink) => a.link === val.link);
if (idx > -1) { if (idx > -1) {
shortCuts.value.splice(idx, 1); shortCuts.value.splice(idx, 1);
@ -212,3 +209,8 @@ export default defineComponent({
}, },
}); });
</script> </script>
<style scoped lang="sass">
.ghost
opacity: 0.5
background: $accent
</style>

View File

@ -36,9 +36,15 @@
</q-form> </q-form>
</q-card-section> </q-card-section>
<div class="row justify-end"> <div class="row justify-end">
<q-btn v-if='$q.platform.is.cordova || $q.platform.is.electron' flat round icon="mdi-menu-down" @click="openServerSettings" /> <q-btn
v-if="$q.platform.is.cordova || $q.platform.is.electron"
flat
round
icon="mdi-menu-down"
@click="openServerSettings"
/>
</div> </div>
<q-slide-transition v-if='$q.platform.is.cordova || $q.platform.is.electron'> <q-slide-transition v-if="$q.platform.is.cordova || $q.platform.is.electron">
<div v-show="visible"> <div v-show="visible">
<q-separator /> <q-separator />
<q-card-section> <q-card-section>
@ -78,7 +84,7 @@ export default defineComponent({
const password = ref(''); const password = ref('');
const server = ref<string | undefined>(api.defaults.baseURL); const server = ref<string | undefined>(api.defaults.baseURL);
const visible = ref(false); const visible = ref(false);
const $q = useQuasar() const $q = useQuasar();
function openServerSettings() { function openServerSettings() {
visible.value = !visible.value; visible.value = !visible.value;
@ -152,7 +158,7 @@ export default defineComponent({
server, server,
userid, userid,
visible, visible,
$q $q,
}; };
}, },
}); });