Fix card, list and swimlane move.

Allow moving cards in multiselect mode.

Closes #2771,
closes #2743,
closes #2704,
related #2081
This commit is contained in:
Lauri Ojansivu 2019-11-13 19:33:13 +02:00
parent 82f0924914
commit 274a997e62
4 changed files with 54 additions and 30 deletions

View file

@ -89,7 +89,6 @@ BlazeComponent.extendComponent({
helper.append(list.clone());
return helper;
},
handle: '.js-swimlane-header-handle',
items: '.swimlane:not(.placeholder)',
placeholder: 'swimlane placeholder',
distance: 7,
@ -193,6 +192,24 @@ BlazeComponent.extendComponent({
// ugly touch event hotfix
enableClickOnTouch('.js-swimlane:not(.placeholder)');
this.autorun(() => {
if (
Utils.isMiniScreen() ||
(!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles())
) {
$swimlanesDom.sortable({
handle: '.js-swimlane-header-handle',
});
} else {
$swimlanesDom.sortable({
handle: '.swimlane-header',
});
}
// Disable drag-dropping if the current user is not a board member or is comment only
$swimlanesDom.sortable('option', 'disabled', !userIsMember());
});
function userIsMember() {
return (
Meteor.user() &&

View file

@ -31,18 +31,6 @@ BlazeComponent.extendComponent({
const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)';
const $cards = this.$('.js-minicards');
if (Utils.isMiniScreen) {
$('.js-minicards').sortable({
handle: '.handle',
});
}
if (!Utils.isMiniScreen && showDesktopDragHandles) {
$('.js-minicards').sortable({
handle: '.handle',
});
}
$cards.sortable({
connectWith: '.js-minicards:not(.js-list-full)',
tolerance: 'pointer',
@ -128,8 +116,21 @@ BlazeComponent.extendComponent({
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (
Utils.isMiniScreen() ||
(!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles())
) {
$cards.sortable({
handle: '.handle',
});
} else {
$cards.sortable({
handle: '.minicard',
});
}
// Disable drag-dropping if the current user is not a board member or is comment only
$cards.sortable('option', 'disabled', !userIsMember());
});

View file

@ -17,6 +17,8 @@ template(name="swimlaneFixedHeader")
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
a.fa.fa-navicon.js-open-swimlane-menu
unless isMiniScreen
unless showDesktopDragHandles
a.swimlane-header.handle.fa.fa-arrows.js-swimlane-header-handle
if showDesktopDragHandles
a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle
if isMiniScreen

View file

@ -53,18 +53,6 @@ function initSortable(boardComponent, $listsDom) {
},
};
if (Utils.isMiniScreen) {
$listsDom.sortable({
handle: '.js-list-handle',
});
}
if (!Utils.isMiniScreen && showDesktopDragHandles) {
$listsDom.sortable({
handle: '.js-list-header',
});
}
$listsDom.sortable({
tolerance: 'pointer',
helper: 'clone',
@ -108,15 +96,29 @@ function initSortable(boardComponent, $listsDom) {
);
}
// Disable drag-dropping while in multi-selection mode, or if the current user
// is not a board member
boardComponent.autorun(() => {
if (
Utils.isMiniScreen() ||
(!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles())
) {
$listsDom.sortable({
handle: '.js-list-handle',
});
} else {
$listsDom.sortable({
handle: '.js-list-header',
});
}
const $listDom = $listsDom;
if ($listDom.data('sortable')) {
$listsDom.sortable(
'option',
'disabled',
MultiSelection.isActive() || !userIsMember(),
// Disable drag-dropping when user is not member
!userIsMember(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
}
});
@ -164,7 +166,9 @@ BlazeComponent.extendComponent({
// his mouse.
const noDragInside = ['a', 'input', 'textarea', 'p'].concat(
Util.isMiniScreen || (!Util.isMiniScreen && showDesktopDragHandles)
Utils.isMiniScreen() ||
(!Utils.isMiniScreen() &&
Meteor.user().hasShowDesktopDragHandles())
? ['.js-list-handle', '.js-swimlane-header-handle']
: ['.js-list-header'],
);