Merge branch 'master' into fix-archived-stack-button
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
<h2>{{ t('deck', 'Loading board') }}</h2>
|
||||
<p />
|
||||
</div>
|
||||
<EmptyContent v-else-if="isEmpty" key="empty" icon="icon-deck">
|
||||
<NcEmptyContent v-else-if="isEmpty" key="empty" icon="icon-deck">
|
||||
{{ t('deck', 'No lists available') }}
|
||||
<template v-if="canManage" #desc>
|
||||
{{ t('deck', 'Create a new list to add cards to this board') }}
|
||||
@@ -48,7 +48,7 @@
|
||||
value="">
|
||||
</form>
|
||||
</template>
|
||||
</EmptyContent>
|
||||
</NcEmptyContent>
|
||||
<div v-else-if="!isEmpty && !loading" key="board" class="board">
|
||||
<Container lock-axix="y"
|
||||
orientation="horizontal"
|
||||
@@ -73,11 +73,11 @@
|
||||
|
||||
import { Container, Draggable } from 'vue-smooth-dnd'
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import Controls from '../Controls'
|
||||
import Stack from './Stack'
|
||||
import { EmptyContent } from '@nextcloud/vue'
|
||||
import GlobalSearchResults from '../search/GlobalSearchResults'
|
||||
import { showError } from '../../helpers/errors'
|
||||
import Controls from '../Controls.vue'
|
||||
import Stack from './Stack.vue'
|
||||
import { NcEmptyContent } from '@nextcloud/vue'
|
||||
import GlobalSearchResults from '../search/GlobalSearchResults.vue'
|
||||
import { showError } from '../../helpers/errors.js'
|
||||
|
||||
export default {
|
||||
name: 'Board',
|
||||
@@ -87,7 +87,7 @@ export default {
|
||||
Container,
|
||||
Draggable,
|
||||
Stack,
|
||||
EmptyContent,
|
||||
NcEmptyContent,
|
||||
},
|
||||
inject: [
|
||||
'boardApi',
|
||||
|
||||
@@ -21,57 +21,57 @@
|
||||
-->
|
||||
|
||||
<template>
|
||||
<AppSidebar v-if="board != null"
|
||||
<NcAppSidebar v-if="board != null"
|
||||
:actions="[]"
|
||||
:title="board.title"
|
||||
@close="closeSidebar">
|
||||
<AppSidebarTab id="sharing"
|
||||
<NcAppSidebarTab id="sharing"
|
||||
:order="0"
|
||||
:name="t('deck', 'Sharing')"
|
||||
icon="icon-shared">
|
||||
<SharingTabSidebar :board="board" />
|
||||
</AppSidebarTab>
|
||||
</NcAppSidebarTab>
|
||||
|
||||
<AppSidebarTab id="tags"
|
||||
<NcAppSidebarTab id="tags"
|
||||
:order="1"
|
||||
:name="t('deck', 'Tags')"
|
||||
icon="icon-tag">
|
||||
<TagsTabSidebar :board="board" />
|
||||
</AppSidebarTab>
|
||||
</NcAppSidebarTab>
|
||||
|
||||
<AppSidebarTab v-if="canEdit"
|
||||
<NcAppSidebarTab v-if="canEdit"
|
||||
id="deleted"
|
||||
:order="2"
|
||||
:name="t('deck', 'Deleted items')"
|
||||
icon="icon-delete">
|
||||
<DeletedTabSidebar :board="board" />
|
||||
</AppSidebarTab>
|
||||
</NcAppSidebarTab>
|
||||
|
||||
<AppSidebarTab v-if="hasActivity"
|
||||
<NcAppSidebarTab v-if="hasActivity"
|
||||
id="activity"
|
||||
:order="3"
|
||||
:name="t('deck', 'Timeline')"
|
||||
icon="icon-activity">
|
||||
<TimelineTabSidebar :board="board" />
|
||||
</AppSidebarTab>
|
||||
</AppSidebar>
|
||||
</NcAppSidebarTab>
|
||||
</NcAppSidebar>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import SharingTabSidebar from './SharingTabSidebar'
|
||||
import TagsTabSidebar from './TagsTabSidebar'
|
||||
import DeletedTabSidebar from './DeletedTabSidebar'
|
||||
import TimelineTabSidebar from './TimelineTabSidebar'
|
||||
import { AppSidebar, AppSidebarTab } from '@nextcloud/vue'
|
||||
import SharingTabSidebar from './SharingTabSidebar.vue'
|
||||
import TagsTabSidebar from './TagsTabSidebar.vue'
|
||||
import DeletedTabSidebar from './DeletedTabSidebar.vue'
|
||||
import TimelineTabSidebar from './TimelineTabSidebar.vue'
|
||||
import { NcAppSidebar, NcAppSidebarTab } from '@nextcloud/vue'
|
||||
|
||||
const capabilities = window.OC.getCapabilities()
|
||||
|
||||
export default {
|
||||
name: 'BoardSidebar',
|
||||
components: {
|
||||
AppSidebar,
|
||||
AppSidebarTab,
|
||||
NcAppSidebar,
|
||||
NcAppSidebarTab,
|
||||
SharingTabSidebar,
|
||||
TagsTabSidebar,
|
||||
DeletedTabSidebar,
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import relativeDate from '../../mixins/relativeDate'
|
||||
import relativeDate from '../../mixins/relativeDate.js'
|
||||
|
||||
export default {
|
||||
name: 'DeletedTabSidebar',
|
||||
@@ -86,8 +86,6 @@ export default {
|
||||
|
||||
li {
|
||||
display: flex;
|
||||
height: 44px;
|
||||
|
||||
&:hover, &:active, &.focus {
|
||||
button {
|
||||
opacity: 1;
|
||||
@@ -106,7 +104,10 @@ export default {
|
||||
.title {
|
||||
flex-grow: 2;
|
||||
padding: 3px 0px;
|
||||
|
||||
> span:not(.timestamp) {
|
||||
line-height: 1.2em;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.timestamp {
|
||||
font-size: 0.9em;
|
||||
color: var(--color-text-lighter);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<Multiselect v-if="canShare"
|
||||
<NcMultiselect v-if="canShare"
|
||||
v-model="addAcl"
|
||||
:placeholder="t('deck', 'Share board with a user, group or circle …')"
|
||||
:options="formatedSharees"
|
||||
@@ -18,12 +18,12 @@
|
||||
<template #noResult>
|
||||
{{ isSearching ? t('deck', 'Searching for users, groups and circles …') : t('deck', 'No participants found') }}
|
||||
</template>
|
||||
</Multiselect>
|
||||
</NcMultiselect>
|
||||
|
||||
<ul id="shareWithList"
|
||||
class="shareWithList">
|
||||
<li>
|
||||
<Avatar :user="board.owner.uid" />
|
||||
<NcAvatar :user="board.owner.uid" />
|
||||
<span class="has-tooltip username">
|
||||
{{ board.owner.displayname }}
|
||||
<span v-if="!isCurrentUser(board.owner.uid)" class="board-owner-label">
|
||||
@@ -32,7 +32,7 @@
|
||||
</span>
|
||||
</li>
|
||||
<li v-for="acl in board.acl" :key="acl.id">
|
||||
<Avatar v-if="acl.type===0" :user="acl.participant.uid" />
|
||||
<NcAvatar v-if="acl.type===0" :user="acl.participant.uid" />
|
||||
<div v-if="acl.type===1" class="avatardiv icon icon-group" />
|
||||
<div v-if="acl.type===7" class="avatardiv icon icon-circles" />
|
||||
<span class="has-tooltip username">
|
||||
@@ -41,10 +41,10 @@
|
||||
<span v-if="acl.type===7">{{ t('deck', '(Circle)') }}</span>
|
||||
</span>
|
||||
|
||||
<ActionCheckbox v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0) && (canManage || (canEdit && canShare))" :checked="acl.permissionEdit" @change="clickEditAcl(acl)">
|
||||
<NcActionCheckbox v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0) && (canManage || (canEdit && canShare))" :checked="acl.permissionEdit" @change="clickEditAcl(acl)">
|
||||
{{ t('deck', 'Can edit') }}
|
||||
</ActionCheckbox>
|
||||
<Actions v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0)" :force-menu="true">
|
||||
</NcActionCheckbox>
|
||||
<NcActions v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0)" :force-menu="true">
|
||||
<ActionCheckbox v-if="canManage || canShare" :checked="acl.permissionShare" @change="clickShareAcl(acl)">
|
||||
{{ t('deck', 'Can share') }}
|
||||
</ActionCheckbox>
|
||||
@@ -54,14 +54,18 @@
|
||||
<ActionCheckbox v-if="acl.type === 0 && isCurrentUser(board.owner.uid)" :checked="acl.owner" @change="clickTransferOwner(acl.participant.uid)">
|
||||
{{ t('deck', 'Owner') }}
|
||||
</ActionCheckbox>
|
||||
<ActionButton v-if="canManage" icon="icon-delete" @click="clickDeleteAcl(acl)">
|
||||
<NcActionButton v-if="canManage" icon="icon-delete" @click="clickDeleteAcl(acl)">
|
||||
{{ t('deck', 'Delete') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<CollectionList v-if="board.id"
|
||||
<NcRelatedResourcesPanel v-if="board.id"
|
||||
provider-id="deck"
|
||||
:item-id="board.id" />
|
||||
|
||||
<CollectionList v-if="projectsEnabled && board.id"
|
||||
:id="`${board.id}`"
|
||||
:name="board.title"
|
||||
type="deck" />
|
||||
@@ -69,22 +73,24 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Avatar, Multiselect, Actions, ActionButton, ActionCheckbox } from '@nextcloud/vue'
|
||||
import { NcAvatar, NcMultiselect, NcActions, NcActionButton, NcActionCheckbox, NcRelatedResourcesPanel } from '@nextcloud/vue'
|
||||
import { CollectionList } from 'nextcloud-vue-collections'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { showError, showSuccess } from '@nextcloud/dialogs'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import debounce from 'lodash/debounce'
|
||||
|
||||
export default {
|
||||
name: 'SharingTabSidebar',
|
||||
components: {
|
||||
Avatar,
|
||||
Actions,
|
||||
ActionButton,
|
||||
ActionCheckbox,
|
||||
Multiselect,
|
||||
NcAvatar,
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
NcActionCheckbox,
|
||||
NcMultiselect,
|
||||
CollectionList,
|
||||
NcRelatedResourcesPanel,
|
||||
},
|
||||
props: {
|
||||
board: {
|
||||
@@ -99,6 +105,7 @@ export default {
|
||||
addAcl: null,
|
||||
addAclForAPI: null,
|
||||
newOwner: null,
|
||||
projectsEnabled: loadState('core', 'projects_enabled', false),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
||||
@@ -67,16 +67,16 @@
|
||||
</ActionButton>
|
||||
<ActionButton icon="icon-delete" @click="deleteStack(stack)">
|
||||
{{ t('deck', 'Delete list') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
<Actions v-if="canEdit && !showArchived && !isArchived">
|
||||
<ActionButton icon="icon-add" @click.stop="showAddCard=true">
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<NcActions v-if="canEdit && !showArchived && !isArchived">
|
||||
<NcActionButton icon="icon-add" @click.stop="showAddCard=true">
|
||||
{{ t('deck', 'Add card') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
|
||||
<Modal v-if="modalArchivAllCardsShow" @close="modalArchivAllCardsShow=false">
|
||||
<NcModal v-if="modalArchivAllCardsShow" @close="modalArchivAllCardsShow=false">
|
||||
<div class="modal__content">
|
||||
<h3 v-if="!showArchived">
|
||||
{{ t('deck', 'Archive all cards in this list') }}
|
||||
@@ -96,7 +96,7 @@
|
||||
{{ t('deck', 'Cancel') }}
|
||||
</button>
|
||||
</div>
|
||||
</Modal>
|
||||
</NcModal>
|
||||
|
||||
<transition name="slide-top" appear>
|
||||
<div v-if="showAddCard" class="stack__card-add">
|
||||
@@ -146,22 +146,22 @@
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import { Container, Draggable } from 'vue-smooth-dnd'
|
||||
|
||||
import { Actions, ActionButton, Modal } from '@nextcloud/vue'
|
||||
import { NcActions, NcActionButton, NcModal } from '@nextcloud/vue'
|
||||
import { showError, showUndo } from '@nextcloud/dialogs'
|
||||
import CardItem from '../cards/CardItem'
|
||||
import CardItem from '../cards/CardItem.vue'
|
||||
|
||||
import '@nextcloud/dialogs/styles/toast.scss'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
|
||||
export default {
|
||||
name: 'Stack',
|
||||
components: {
|
||||
Actions,
|
||||
ActionButton,
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
CardItem,
|
||||
Container,
|
||||
Draggable,
|
||||
Modal,
|
||||
NcModal,
|
||||
ArchiveIcon,
|
||||
},
|
||||
|
||||
|
||||
@@ -5,59 +5,59 @@
|
||||
<!-- Edit Tag -->
|
||||
<template v-if="editingLabelId === label.id">
|
||||
<form class="label-form" @submit.prevent="updateLabel(label)">
|
||||
<ColorPicker class="color-picker-wrapper" :value="'#' + editingLabel.color" @input="updateColor">
|
||||
<NcColorPicker class="color-picker-wrapper" :value="'#' + editingLabel.color" @input="updateColor">
|
||||
<div :style="{ backgroundColor: '#' + editingLabel.color }" class="color0 icon-colorpicker" />
|
||||
</ColorPicker>
|
||||
</NcColorPicker>
|
||||
<input v-model="editingLabel.title" type="text">
|
||||
<input v-tooltip="{content: missingDataLabel, show: !editLabelObjValidated, trigger: 'manual' }"
|
||||
:disabled="!editLabelObjValidated"
|
||||
type="submit"
|
||||
value=""
|
||||
class="icon-confirm">
|
||||
<Actions>
|
||||
<ActionButton v-tooltip="{content: missingDataLabel, show: !editLabelObjValidated, trigger: 'manual' }"
|
||||
<NcActions>
|
||||
<NcActionButton v-tooltip="{content: missingDataLabel, show: !editLabelObjValidated, trigger: 'manual' }"
|
||||
:disabled="!editLabelObjValidated"
|
||||
icon="icon-close"
|
||||
@click="editingLabelId = null">
|
||||
{{ t('deck', 'Cancel') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</form>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="label-title" @click="clickEdit(label)">
|
||||
<span :style="{ backgroundColor: `#${label.color}`, color: textColor(label.color) }">{{ label.title }}</span>
|
||||
</div>
|
||||
<Actions v-if="canManage && !isArchived">
|
||||
<ActionButton icon="icon-rename" @click="clickEdit(label)">
|
||||
<NcActions v-if="canManage && !isArchived">
|
||||
<NcActionButton icon="icon-rename" @click="clickEdit(label)">
|
||||
{{ t('deck', 'Edit') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
<Actions v-if="canManage && !isArchived">
|
||||
<ActionButton icon="icon-delete" @click="deleteLabel(label.id)">
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<NcActions v-if="canManage && !isArchived">
|
||||
<NcActionButton icon="icon-delete" @click="deleteLabel(label.id)">
|
||||
{{ t('deck', 'Delete') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</template>
|
||||
</li>
|
||||
|
||||
<li v-if="addLabel" class="editing">
|
||||
<!-- New Tag -->
|
||||
<form class="label-form" @submit.prevent="clickAddLabel">
|
||||
<ColorPicker class="color-picker-wrapper" :value="'#' + addLabelObj.color" @input="updateColor">
|
||||
<NcColorPicker class="color-picker-wrapper" :value="'#' + addLabelObj.color" @input="updateColor">
|
||||
<div :style="{ backgroundColor: '#' + addLabelObj.color }" class="color0 icon-colorpicker" />
|
||||
</ColorPicker>
|
||||
</NcColorPicker>
|
||||
<input v-model="addLabelObj.title" type="text">
|
||||
<input v-tooltip="{content: missingDataLabel, show: !addLabelObjValidated, trigger: 'manual' }"
|
||||
:disabled="!addLabelObjValidated"
|
||||
type="submit"
|
||||
value=""
|
||||
class="icon-confirm">
|
||||
<Actions>
|
||||
<ActionButton icon="icon-close" @click="addLabel=false">
|
||||
<NcActions>
|
||||
<NcActionButton icon="icon-close" @click="addLabel=false">
|
||||
{{ t('deck', 'Cancel') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</form>
|
||||
</li>
|
||||
<button v-if="canManage && !isArchived" @click="clickShowAddLabel()">
|
||||
@@ -70,15 +70,15 @@
|
||||
<script>
|
||||
|
||||
import { mapGetters } from 'vuex'
|
||||
import Color from '../../mixins/color'
|
||||
import { ColorPicker, Actions, ActionButton } from '@nextcloud/vue'
|
||||
import Color from '../../mixins/color.js'
|
||||
import { NcColorPicker, NcActions, NcActionButton } from '@nextcloud/vue'
|
||||
|
||||
export default {
|
||||
name: 'TagsTabSidebar',
|
||||
components: {
|
||||
ColorPicker,
|
||||
Actions,
|
||||
ActionButton,
|
||||
NcColorPicker,
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
},
|
||||
mixins: [Color],
|
||||
data() {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ActivityList from '../ActivityList'
|
||||
import ActivityList from '../ActivityList.vue'
|
||||
|
||||
export default {
|
||||
name: 'TimelineTabSidebar',
|
||||
|
||||
Reference in New Issue
Block a user