What has been done: - TT#47510, SoundManagement: As a SubscriberAdmin, I want to have an extra page section for managing SoundSets - TT#47511, SoundManagement: As a SubscriberAdmin, I want to see a list of all owned SoundSets Change-Id: I1e1d6d49d90d1b8b5deef5689c686b921eb6f7d8changes/90/26590/14
parent
0193351546
commit
fb4ba3093b
@ -0,0 +1,82 @@
|
|||||||
|
<template>
|
||||||
|
<q-collapsible
|
||||||
|
:label="group.name"
|
||||||
|
>
|
||||||
|
<q-list
|
||||||
|
striped-odd
|
||||||
|
no-border
|
||||||
|
multiline
|
||||||
|
:highlight="!mobile"
|
||||||
|
>
|
||||||
|
<q-item
|
||||||
|
v-if="!mobile"
|
||||||
|
>
|
||||||
|
<div class="col">
|
||||||
|
Handle
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
Filename
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
Loopplay
|
||||||
|
</div>
|
||||||
|
</q-item>
|
||||||
|
<csc-pbx-sound-item
|
||||||
|
v-for="item in group.handles"
|
||||||
|
:key="item.id"
|
||||||
|
:item="item"
|
||||||
|
:mobile="mobile"
|
||||||
|
/>
|
||||||
|
</q-list>
|
||||||
|
</q-collapsible>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CscPbxSoundItem from './CscPbxSoundItem'
|
||||||
|
import {
|
||||||
|
QList,
|
||||||
|
QItem,
|
||||||
|
QItemSide,
|
||||||
|
QItemMain,
|
||||||
|
QItemTile,
|
||||||
|
QBtn,
|
||||||
|
QIcon,
|
||||||
|
QCollapsible,
|
||||||
|
QCheckbox
|
||||||
|
} from 'quasar-framework'
|
||||||
|
export default {
|
||||||
|
name: 'csc-pbx-sound-group',
|
||||||
|
props: {
|
||||||
|
group: Object,
|
||||||
|
mobile: Boolean
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
CscPbxSoundItem,
|
||||||
|
QList,
|
||||||
|
QItem,
|
||||||
|
QItemSide,
|
||||||
|
QItemMain,
|
||||||
|
QItemTile,
|
||||||
|
QBtn,
|
||||||
|
QIcon,
|
||||||
|
QCollapsible,
|
||||||
|
QCheckbox
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" rel="stylesheet/stylus">
|
||||||
|
@import '../../../themes/quasar.variables.styl';
|
||||||
|
</style>
|
@ -0,0 +1,129 @@
|
|||||||
|
<template>
|
||||||
|
<q-item
|
||||||
|
highlight
|
||||||
|
>
|
||||||
|
<q-item-main
|
||||||
|
v-if="!mobile"
|
||||||
|
class="row"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!--NOTE: Would like some feedback on this, please. Made separate styling-->
|
||||||
|
<!--for mobile/desktop, as with 60 or more items in some of the groups-->
|
||||||
|
<!--I don't see a better way to display it. Will clean up css once-->
|
||||||
|
<!--feedback is implemented-->
|
||||||
|
<div class="col">
|
||||||
|
{{ item.handle }}
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
{{ item.filename }}
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<q-checkbox
|
||||||
|
readonly
|
||||||
|
:value="loop"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-item-main>
|
||||||
|
<q-item-main
|
||||||
|
v-if="mobile"
|
||||||
|
class="sound-item-row mobile"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<span class="item-sublabel">
|
||||||
|
Handle:
|
||||||
|
</span>
|
||||||
|
<span class="item-values">
|
||||||
|
{{ item.handle }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="item-sublabel">
|
||||||
|
Filename:
|
||||||
|
</span>
|
||||||
|
<span class="item-values">
|
||||||
|
{{ item.filename }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="item-sublabel">
|
||||||
|
Loopplay:
|
||||||
|
</span>
|
||||||
|
<span class="item-values">
|
||||||
|
<q-checkbox
|
||||||
|
readonly
|
||||||
|
:value="loop"
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</q-item-main>
|
||||||
|
</q-item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
QList,
|
||||||
|
QItem,
|
||||||
|
QItemSide,
|
||||||
|
QItemMain,
|
||||||
|
QItemTile,
|
||||||
|
QBtn,
|
||||||
|
QIcon,
|
||||||
|
QCollapsible,
|
||||||
|
QCheckbox
|
||||||
|
} from 'quasar-framework'
|
||||||
|
export default {
|
||||||
|
name: 'csc-pbx-sound-item',
|
||||||
|
props: {
|
||||||
|
item: Object,
|
||||||
|
mobile: Boolean
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
QList,
|
||||||
|
QItem,
|
||||||
|
QItemSide,
|
||||||
|
QItemMain,
|
||||||
|
QItemTile,
|
||||||
|
QBtn,
|
||||||
|
QIcon,
|
||||||
|
QCollapsible,
|
||||||
|
QCheckbox
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
loop: this.hasLoop()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
hasLoop() {
|
||||||
|
return !!this.item.loopplay;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" rel="stylesheet/stylus">
|
||||||
|
@import '../../../themes/quasar.variables.styl';
|
||||||
|
@import '../../../themes/quasar.variables.styl';
|
||||||
|
|
||||||
|
.sound-item-row.mobile
|
||||||
|
padding 16px
|
||||||
|
padding-left 0px
|
||||||
|
display block
|
||||||
|
color $white
|
||||||
|
white-space nowrap
|
||||||
|
overflow hidden
|
||||||
|
font-size 16px
|
||||||
|
|
||||||
|
.item-values
|
||||||
|
color $white
|
||||||
|
|
||||||
|
.item-sublabel
|
||||||
|
color $light
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,187 @@
|
|||||||
|
<template>
|
||||||
|
<q-item
|
||||||
|
:class="itemClasses"
|
||||||
|
>
|
||||||
|
<q-item-side
|
||||||
|
v-if="!expanded"
|
||||||
|
>
|
||||||
|
<q-icon
|
||||||
|
size="24px"
|
||||||
|
name="music_note"
|
||||||
|
color="white"
|
||||||
|
/>
|
||||||
|
</q-item-side>
|
||||||
|
<q-item-main>
|
||||||
|
<q-item-tile
|
||||||
|
v-if="!expanded"
|
||||||
|
class="csc-item-title"
|
||||||
|
label
|
||||||
|
>
|
||||||
|
{{ set.name }}
|
||||||
|
</q-item-tile>
|
||||||
|
<q-item-tile
|
||||||
|
v-if="!expanded"
|
||||||
|
class="csc-item-subtitle"
|
||||||
|
sublabel
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<span class="csc-item-label">{{ $t('pbxConfig.description') }}:</span>
|
||||||
|
<span class="csc-item-value">{{ set.description }}</span>
|
||||||
|
</div>
|
||||||
|
</q-item-tile>
|
||||||
|
<q-item-tile
|
||||||
|
v-if="expanded"
|
||||||
|
class="csc-list-item-main"
|
||||||
|
>
|
||||||
|
<q-field label="Name">
|
||||||
|
<q-input
|
||||||
|
dark
|
||||||
|
readonly
|
||||||
|
:value="set.name"
|
||||||
|
/>
|
||||||
|
</q-field>
|
||||||
|
<q-field label="Description">
|
||||||
|
<q-input
|
||||||
|
dark
|
||||||
|
readonly
|
||||||
|
:value="set.description"
|
||||||
|
/>
|
||||||
|
</q-field>
|
||||||
|
</q-item-tile>
|
||||||
|
<q-item-tile
|
||||||
|
class="csc-list-collapsible"
|
||||||
|
v-if="expanded"
|
||||||
|
>
|
||||||
|
<div class="csc-sublabel">
|
||||||
|
{{ $t('pbxConfig.groups') }}
|
||||||
|
</div>
|
||||||
|
<csc-pbx-sound-group
|
||||||
|
v-for="(group, index) in set.groups"
|
||||||
|
:group="group"
|
||||||
|
:key="index"
|
||||||
|
:highlight="!mobile"
|
||||||
|
:mobile="mobile"
|
||||||
|
/>
|
||||||
|
</q-item-tile>
|
||||||
|
</q-item-main>
|
||||||
|
<q-item-side
|
||||||
|
right
|
||||||
|
class="csc-list-actions-pinned"
|
||||||
|
>
|
||||||
|
<q-item-tile>
|
||||||
|
<q-btn
|
||||||
|
:icon="titleIcon"
|
||||||
|
:big="mobile"
|
||||||
|
color="primary"
|
||||||
|
flat
|
||||||
|
@click="toggleMain()"
|
||||||
|
/>
|
||||||
|
</q-item-tile>
|
||||||
|
</q-item-side>
|
||||||
|
<q-inner-loading :visible="loading">
|
||||||
|
<q-spinner-mat
|
||||||
|
size="60px"
|
||||||
|
color="primary"
|
||||||
|
/>
|
||||||
|
</q-inner-loading>
|
||||||
|
</q-item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CscPbxSoundGroup from './CscPbxSoundGroup'
|
||||||
|
import {
|
||||||
|
QItem,
|
||||||
|
QItemSide,
|
||||||
|
QItemMain,
|
||||||
|
QItemTile,
|
||||||
|
QBtn,
|
||||||
|
QIcon,
|
||||||
|
QCollapsible,
|
||||||
|
QCheckbox,
|
||||||
|
QField,
|
||||||
|
QInput,
|
||||||
|
QInnerLoading,
|
||||||
|
QSpinnerMat
|
||||||
|
} from 'quasar-framework'
|
||||||
|
export default {
|
||||||
|
name: 'csc-pbx-sound-set',
|
||||||
|
props: {
|
||||||
|
set: Object,
|
||||||
|
mobile: Boolean,
|
||||||
|
loading: Boolean
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
CscPbxSoundGroup,
|
||||||
|
QItem,
|
||||||
|
QItemSide,
|
||||||
|
QItemMain,
|
||||||
|
QItemTile,
|
||||||
|
QBtn,
|
||||||
|
QIcon,
|
||||||
|
QCollapsible,
|
||||||
|
QCheckbox,
|
||||||
|
QField,
|
||||||
|
QInput,
|
||||||
|
QInnerLoading,
|
||||||
|
QSpinnerMat
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
expanded: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
itemClasses() {
|
||||||
|
let classes = ['csc-list-item'];
|
||||||
|
if (this.expanded) {
|
||||||
|
classes.push('csc-item-expanded');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
classes.push('csc-item-collapsed');
|
||||||
|
}
|
||||||
|
return classes;
|
||||||
|
},
|
||||||
|
titleIcon() {
|
||||||
|
if(!this.expanded) {
|
||||||
|
return 'keyboard arrow down';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 'keyboard arrow up';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
toggleMain() {
|
||||||
|
this.expanded = !this.expanded;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" rel="stylesheet/stylus">
|
||||||
|
@import '../../../themes/quasar.variables.styl';
|
||||||
|
|
||||||
|
.csc-list-collapsible
|
||||||
|
margin-top $flex-gutter-md
|
||||||
|
|
||||||
|
.q-item
|
||||||
|
padding-left 0
|
||||||
|
|
||||||
|
.q-item-section
|
||||||
|
padding-top 0
|
||||||
|
|
||||||
|
.q-item-icon
|
||||||
|
color $primary
|
||||||
|
|
||||||
|
.q-collapsible-sub-item
|
||||||
|
padding 0
|
||||||
|
|
||||||
|
.csc-sublabel
|
||||||
|
color $light
|
||||||
|
margin-bottom $flex-gutter-sm
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,70 @@
|
|||||||
|
<template>
|
||||||
|
<csc-page
|
||||||
|
:is-list="true"
|
||||||
|
>
|
||||||
|
<q-list
|
||||||
|
striped-odd
|
||||||
|
no-border
|
||||||
|
multiline
|
||||||
|
:highlight="!isMobile"
|
||||||
|
>
|
||||||
|
<csc-pbx-sound-set
|
||||||
|
v-for="set in soundSets"
|
||||||
|
:loading="soundSetFilesLoading(set.id)"
|
||||||
|
:key="set.id"
|
||||||
|
:set="set"
|
||||||
|
:mobile="isMobile"
|
||||||
|
/>
|
||||||
|
</q-list>
|
||||||
|
<div
|
||||||
|
v-if="soundSets.length === 0 && !isSoundSetsRequesting"
|
||||||
|
class="row justify-center csc-no-entities"
|
||||||
|
>
|
||||||
|
{{ $t('pbxConfig.noSoundSets') }}
|
||||||
|
</div>
|
||||||
|
</csc-page>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CscPage from '../../CscPage'
|
||||||
|
import CscPbxSoundSet from './CscPbxSoundSet'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
import {
|
||||||
|
Platform,
|
||||||
|
QList,
|
||||||
|
QBtn
|
||||||
|
} from 'quasar-framework'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
CscPage,
|
||||||
|
CscPbxSoundSet,
|
||||||
|
QList,
|
||||||
|
QBtn
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$store.dispatch('pbxConfig/listSoundSets');
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters('pbxConfig', [
|
||||||
|
'soundSets',
|
||||||
|
'soundSetFilesLoading',
|
||||||
|
'isSoundSetsRequesting'
|
||||||
|
]),
|
||||||
|
isMobile() {
|
||||||
|
return !!Platform.is.mobile;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" rel="stylesheet/stylus">
|
||||||
|
@import '../../../themes/quasar.variables.styl';
|
||||||
|
</style>
|
Loading…
Reference in new issue