diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/js/components/Options/OptionItemOwner.vue | 90 | ||||
-rw-r--r-- | src/js/components/VoteTable/VoteTable.vue | 12 |
2 files changed, 100 insertions, 2 deletions
diff --git a/src/js/components/Options/OptionItemOwner.vue b/src/js/components/Options/OptionItemOwner.vue new file mode 100644 index 00000000..0a5006b2 --- /dev/null +++ b/src/js/components/Options/OptionItemOwner.vue @@ -0,0 +1,90 @@ +<!-- + - @copyright Copyright (c) 2018 René Gieling <github@dartcafe.de> + - + - @author René Gieling <github@dartcafe.de> + - + - @license GNU AGPL version 3 or any later version + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + - + --> + +<template> + <div class="option-item-owner"> + <Actions v-if="!acl.allowEdit && acl.userId === option.owner" class="action"> + <ActionButton icon="icon-delete" @click="removeOption(option)"> + {{ t('polls', 'Delete your proposal') }} + </ActionButton> + </Actions> + <Avatar v-else-if="option.owner && option.owner !== pollOwner" + :user="option.owner" + :display-name="option.ownerDisplayName" + :is-no-user="option.ownerIsNoUser" + disable-menu + :tooltip-message="t('polls', '{displayName}\'s proposal', { displayName: option.ownerDisplayName })" /> + </div> +</template> + +<script> +import { mapState, mapGetters } from 'vuex' +import { Actions, ActionButton, Avatar } from '@nextcloud/vue' +import { removeOption } from '../../mixins/optionMixins' + +export default { + name: 'OptionItemOwner', + + components: { + Avatar, + Actions, + ActionButton, + }, + + mixins: [ + removeOption, + ], + + props: { + option: { + type: Object, + default: undefined, + }, + }, + + computed: { + ...mapState({ + pollOwner: state => state.poll.owner, + acl: state => state.poll.acl, + }), + + ...mapGetters({ + }), + }, +} + +</script> + +<style lang="scss" scoped> + +.option-item-owner { + align-items: center; + justify-content: center; + background-repeat: no-repeat; + background-position: center; + background-size: 21px; + font-size: 0; + align-self: stretch; + min-width: 24px; +} + +</style> diff --git a/src/js/components/VoteTable/VoteTable.vue b/src/js/components/VoteTable/VoteTable.vue index d16e98eb..c04fd29b 100644 --- a/src/js/components/VoteTable/VoteTable.vue +++ b/src/js/components/VoteTable/VoteTable.vue @@ -36,7 +36,7 @@ </ActionButton> </Actions> </UserItem> - + <div v-if="acl.allowAddOptions" class="owner" /> <div v-if="acl.allowEdit && closed" class="confirm" /> </div> @@ -55,7 +55,7 @@ :class="{currentuser: participant.userId === acl.userId}"> <VoteItem :user-id="participant.userId" :option="option" /> </div> - + <OptionItemOwner v-if="acl.allowAddOptions" :option="option" class="owner" /> <Actions v-if="acl.allowEdit && closed" class="action confirm"> <ActionButton v-if="closed" :icon="option.confirmed ? 'icon-polls-confirmed' : 'icon-polls-unconfirmed'" @click="confirmOption(option)"> @@ -85,6 +85,7 @@ import ButtonDiv from '../Base/ButtonDiv' import CalendarPeek from '../Calendar/CalendarPeek' import Counter from '../Options/Counter' import Confirmation from '../Options/Confirmation' +import OptionItemOwner from '../Options/OptionItemOwner' import UserMenu from '../User/UserMenu' import VoteItem from './VoteItem' import VoteTableHeaderItem from './VoteTableHeaderItem' @@ -103,6 +104,7 @@ export default { UserMenu, VoteTableHeaderItem, VoteItem, + OptionItemOwner, }, mixins: [confirmOption], @@ -195,6 +197,12 @@ export default { order: 20; } + .owner { + display: flex; + height: 56px; + order: 19; + } + .spacer { flex: 1; order: 1; |