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