File: /var/www/apklausos/assets/packages/adminsidepanel/src/components/subcomponents/_quickmenu.vue
<script>
import ajaxMethods from '../../mixins/runAjax.js';
export default {
mixins: [ajaxMethods],
props: {
'menuEntries' : {type: [Array,Object]},
'activeMenuIndex': {type: String},
loading: {type: Boolean, default: false}
},
data(){
return { };
},
computed: {
loadingState: {
get() { return this.loading; },
set(newState) { this.$emit('changeLoadingState', newState); }
},
sortedMenues(){
return LS.ld.orderBy(this.$store.state.collapsedmenus,(a)=>{return parseInt((a.ordering || 999999)) }, ['asc']);
}
},
methods:{
sortedMenuEntries(entries) {
const self = this;
let orderedArray = LS.ld.orderBy(entries,(a)=>{return parseInt((a.ordering || 999999)) }, ['asc']);
return orderedArray;
},
setActiveMenuIndex(menuItem){
let activeMenuIndex = menuItem.id;
this.$store.commit('lastMenuItemOpen', menuItem)
},
compileEntryClasses(menuItem){
let classes = "";
if(this.$store.state.lastMenuItemOpen == menuItem.id){
classes+=' btn-primary ';
} else {
classes+=' btn-outline-secondary ';
}
if(!menuItem.link_external){
classes+=' pjax ';
}
return classes;
},
reConvertHTML(string) {
var chars = ["'","©","Û","®","ž","Ü","Ÿ","Ý","$","Þ","%","¡","ß","¢","à","£","á","À","¤","â","Á","¥","ã","Â","¦","ä","Ã","§","å","Ä","¨","æ","Å","©","ç","Æ","ª","è","Ç","«","é","È","¬","ê","É","","ë","Ê","®","ì","Ë","¯","í","Ì","°","î","Í","±","ï","Î","²","ð","Ï","³","ñ","Ð","´","ò","Ñ","µ","ó","Õ","¶","ô","Ö","·","õ","Ø","¸","ö","Ù","¹","÷","Ú","º","ø","Û","»","ù","Ü","@","¼","ú","Ý","½","û","Þ","€","¾","ü","ß","¿","ý","à","‚","À","þ","á","ƒ","Á","ÿ","å","„","Â","æ","…","Ã","ç","†","Ä","è","‡","Å","é","ˆ","Æ","ê","‰","Ç","ë","Š","È","ì","‹","É","í","Œ","Ê","î","Ë","ï","Ž","Ì","ð","Í","ñ","Î","ò","‘","Ï","ó","’","Ð","ô","“","Ñ","õ","”","Ò","ö","•","Ó","ø","–","Ô","ù","—","Õ","ú","˜","Ö","û","™","×","ý","š","Ø","þ","›","Ù","ÿ","œ","Ú"];
var codes = ["'","©","Û","®","ž","Ü","Ÿ","Ý","$","Þ","%","¡","ß","¢","à","£","á","À","¤","â","Á","¥","ã","Â","¦","ä","Ã","§","å","Ä","¨","æ","Å","©","ç","Æ","ª","è","Ç","«","é","È","¬","ê","É","­","ë","Ê","®","ì","Ë","¯","í","Ì","°","î","Í","±","ï","Î","²","ð","Ï","³","ñ","Ð","´","ò","Ñ","µ","ó","Õ","¶","ô","Ö","·","õ","Ø","¸","ö","Ù","¹","÷","Ú","º","ø","Û","»","ù","Ü","@","¼","ú","Ý","½","û","Þ","€","¾","ü","ß","¿","ý","à","‚","À","þ","á","ƒ","Á","ÿ","å","„","Â","æ","…","Ã","ç","†","Ä","è","‡","Å","é","ˆ","Æ","ê","‰","Ç","ë","Š","È","ì","‹","É","í","Œ","Ê","î","Ë","ï","Ž","Ì","ð","Í","ñ","Î","ò","‘","Ï","ó","’","Ð","ô","“","Ñ","õ","”","Ò","ö","•","Ó","ø","–","Ô","ù","—","Õ","ú","˜","Ö","û","™","×","ý","š","Ø","þ","›","Ù","ÿ","œ","Ú"];
LS.ld.each(codes, (code, i) => {
string = string.replace(code, chars[i]);
});
return string;
}
},
created(){
const self = this;
this.$store.dispatch('getCollapsedmenus')
.then(
(result) => {},
this.$log.error
)
.finally(
(result) => { this.loadingState = false }
);
},
mounted(){
}
}
</script>
<template>
<div class='ls-flex-column fill'>
<div class="ls-space margin top-10" v-show="!loadingState" v-for="menu in sortedMenues" :title="menu.title" v-bind:key="menu.title" >
<div class="btn-group-vertical ls-space padding right-10">
<a v-for="(menuItem) in sortedMenuEntries(menu.entries)"
@click="setActiveMenuIndex(menuItem)"
v-bind:key="menuItem.id"
:href="menuItem.link" :title="reConvertHTML(menuItem.menu_description)"
:target="menuItem.link_external ? '_blank' : '_self'"
data-bs-toggle="tooltip"
class="btn"
:class="compileEntryClasses(menuItem)"
>
<template v-if="menuItem.menu_icon_type == 'fontawesome'">
<i class="quickmenuIcon fa" :class="'fa-'+menuItem.menu_icon"></i>
</template>
<template v-else-if="menuItem.menu_icon_type == 'image'">
<img width="32px" :src="menuItem.menu_icon" />
</template>
<template v-else-if="menuItem.menu_icon_type == 'iconclass'">
<i class="quickmenuIcon" :class="menuItem.menu_icon" ></i>
</template>
<template v-else-if="menuItem.menu_icon_type == 'remix'">
<i class="quickmenuIcon" :class="menuItem.menu_icon" ></i>
</template>
</a>
</div>
</div>
<loader-widget v-if="loadingState" id="quickmenuLoadingIcon" extra-class="loader-quickmenu"/>
</div>
</template>
<style lang="scss">
.loader-adminpanel.loader-quickmenu .contain-pulse{
width: 2em;
}
</style>