提交 cc38e018 编写于 作者: R Rajat Jain

[skip ci] debugging code

上级 ad03952f
...@@ -50,8 +50,7 @@ export default { ...@@ -50,8 +50,7 @@ export default {
return this.detailIssue.issue && this.detailIssue.issue.id === this.issue.id; return this.detailIssue.issue && this.detailIssue.issue.id === this.issue.id;
}, },
multiSelectVisible() { multiSelectVisible() {
const ids = this.multiSelect.list.map(issue => issue.id); return this.multiSelect.list.findIndex(issue => issue.id === this.issue.id) > -1;
return ids.indexOf(this.issue.id) !== -1;
}, },
canMultiSelect() { canMultiSelect() {
return gon.features && gon.features.multiSelectBoard; return gon.features && gon.features.multiSelectBoard;
...@@ -71,12 +70,13 @@ export default { ...@@ -71,12 +70,13 @@ export default {
// If CMD or CTRL is clicked // If CMD or CTRL is clicked
const isMultiSelect = this.canMultiSelect && (e.ctrlKey || e.metaKey); const isMultiSelect = this.canMultiSelect && (e.ctrlKey || e.metaKey);
if (
boardsStore.detail.issue && if (boardsStore.detail.issue && boardsStore.detail.issue.id === this.issue.id) {
boardsStore.detail.issue.id === this.issue.id &&
!isMultiSelect
) {
eventHub.$emit('clearDetailIssue', isMultiSelect); eventHub.$emit('clearDetailIssue', isMultiSelect);
if (isMultiSelect) {
eventHub.$emit('newDetailIssue', this.issue, isMultiSelect);
}
} else { } else {
eventHub.$emit('newDetailIssue', this.issue, isMultiSelect); eventHub.$emit('newDetailIssue', this.issue, isMultiSelect);
boardsStore.setListDetail(this.list); boardsStore.setListDetail(this.list);
......
...@@ -104,6 +104,7 @@ export default { ...@@ -104,6 +104,7 @@ export default {
multiSelectOpts.multiDrag = true; multiSelectOpts.multiDrag = true;
multiSelectOpts.selectedClass = 'js-multi-select'; multiSelectOpts.selectedClass = 'js-multi-select';
multiSelectOpts.animation = 500; multiSelectOpts.animation = 500;
// multiSelectOpts.multiDragKey = 'shift'
} }
const options = getBoardSortableDefaultOptions({ const options = getBoardSortableDefaultOptions({
...@@ -166,30 +167,27 @@ export default { ...@@ -166,30 +167,27 @@ export default {
const { list } = card; const { list } = card;
let issue = list.findIssue(Number(e.item.dataset.issueId)); const issue = list.findIssue(Number(e.item.dataset.issueId));
if (e.items && e.items.length) {
issue = [];
e.items.forEach(item => {
issue.push(list.findIssue(Number(item.dataset.issueId)));
});
}
boardsStore.startMoving(list, issue); boardsStore.startMoving(list, issue);
sortableStart(); sortableStart();
}, },
onAdd: e => { onAdd: e => {
if (e.items && e.items.length) { const { items = [], newIndicies = [] } = e;
// Not using e.newIndex here instead taking if (items.length) {
// min of all the newIndicies // Not using e.newIndex here instead taking a min of all
// Whenever the we select multiple items and drag // the newIndicies. Basically we have to find that during
const newIndex = Math.min(...e.newIndicies.map(obj => obj.index)); // a drop which is the index we're going to start putting
// all the dropped elements from.
console.log(newIndicies.map(obj => obj.index))
const newIndex = Math.min(...newIndicies.map(obj => obj.index).filter(i => i !== -1));
console.log(newIndex);
const issues = items.map(item => boardsStore.moving.list.findIssue(Number(item.dataset.issueId)));
boardsStore.moveMultipleIssuesToList( boardsStore.moveMultipleIssuesToList(
boardsStore.moving.list, boardsStore.moving.list,
this.list, this.list,
boardsStore.moving.issue, issues,
newIndex, newIndex,
); );
...@@ -221,15 +219,20 @@ export default { ...@@ -221,15 +219,20 @@ export default {
onUpdate: e => { onUpdate: e => {
const sortedArray = this.sortable.toArray().filter(id => id !== '-1'); const sortedArray = this.sortable.toArray().filter(id => id !== '-1');
if (e.items && e.items.length) { const { items = [], newIndicies = [], oldIndicies = [] } = e;
const newIndex = Math.min(...e.newIndicies.map(obj => obj.index)); if (items.length) {
const newIndex = Math.min(...newIndicies.map(obj => obj.index));
const issues = items.map(item => boardsStore.moving.list.findIssue(Number(item.dataset.issueId)));
boardsStore.moveMultipleIssuesInList( boardsStore.moveMultipleIssuesInList(
this.list, this.list,
boardsStore.moving.issue, issues,
e.oldIndex, oldIndicies.map(obj => obj.index),
newIndex, newIndex,
sortedArray, sortedArray,
); );
e.items.forEach(el => {
Sortable.utils.deselect(el);
});
boardsStore.clearMultiSelect(); boardsStore.clearMultiSelect();
return; return;
} }
...@@ -245,6 +248,29 @@ export default { ...@@ -245,6 +248,29 @@ export default {
onMove(e) { onMove(e) {
return !e.related.classList.contains('board-list-count'); return !e.related.classList.contains('board-list-count');
}, },
onSelect(e) {
const {
item: { classList },
} = e;
if (
classList &&
classList.contains('js-multi-select') &&
!classList.contains('multi-select')
) {
Sortable.utils.deselect(e.item);
}
},
onDeselect: (e) => {
const {
item: { dataset, classList },
} = e;
if (classList && classList.contains('multi-select') && !classList.contains('js-multi-select')) {
const issue = this.list.findIssue(Number(dataset.issueId));
boardsStore.toggleMultiSelect(issue);
}
},
}); });
this.sortable = Sortable.create(this.$refs.list, options); this.sortable = Sortable.create(this.$refs.list, options);
...@@ -289,6 +315,11 @@ export default { ...@@ -289,6 +315,11 @@ export default {
this.loadNextPage(); this.loadNextPage();
} }
}, },
foo(issues) {
console.log(this.list.title);
console.log(issues.map(issue => issue.id));
return issues;
}
}, },
}; };
</script> </script>
...@@ -316,9 +347,10 @@ export default { ...@@ -316,9 +347,10 @@ export default {
class="board-list w-100 h-100 list-unstyled mb-0 p-1 js-board-list" class="board-list w-100 h-100 list-unstyled mb-0 p-1 js-board-list"
> >
<board-card <board-card
v-for="(issue, index) in issues" v-for="(issue, index) in foo(issues)"
ref="issue" ref="issue"
:key="issue.id" :key="issue.id"
:foo="issue.id"
:index="index" :index="index"
:list="list" :list="list"
:issue="issue" :issue="issue"
......
...@@ -195,7 +195,6 @@ export default () => { ...@@ -195,7 +195,6 @@ export default () => {
clearDetailIssue(multiSelect = false) { clearDetailIssue(multiSelect = false) {
if (multiSelect) { if (multiSelect) {
boardsStore.clearMultiSelect(); boardsStore.clearMultiSelect();
return;
} }
boardsStore.clearDetailIssue(); boardsStore.clearDetailIssue();
}, },
......
...@@ -5,6 +5,7 @@ import { __ } from '~/locale'; ...@@ -5,6 +5,7 @@ import { __ } from '~/locale';
import ListLabel from './label'; import ListLabel from './label';
import ListAssignee from './assignee'; import ListAssignee from './assignee';
import { urlParamsToObject } from '~/lib/utils/common_utils'; import { urlParamsToObject } from '~/lib/utils/common_utils';
import flash from '~/flash';
import boardsStore from '../stores/boards_store'; import boardsStore from '../stores/boards_store';
import ListMilestone from './milestone'; import ListMilestone from './milestone';
...@@ -193,7 +194,7 @@ class List { ...@@ -193,7 +194,7 @@ class List {
this.issues.splice(newIndex, 0, ...issues); this.issues.splice(newIndex, 0, ...issues);
} else { } else {
Array.prototype.push.apply(this.issues, issues); this.issues.push(...issues);
} }
if (this.label) { if (this.label) {
...@@ -276,15 +277,15 @@ class List { ...@@ -276,15 +277,15 @@ class List {
}); });
} }
moveMultipleIssues(issues, oldIndex, newIndex, moveBeforeId, moveAfterId) { moveMultipleIssues(issues, oldIndicies, newIndex, moveBeforeId, moveAfterId) {
this.issues.splice(oldIndex, issues.length); oldIndicies.reverse().forEach(index => {
this.issues.splice(index, 1);
});
this.issues.splice(newIndex, 0, ...issues); this.issues.splice(newIndex, 0, ...issues);
gl.boardService gl.boardService
.moveMultipleIssues(issues.map(issue => issue.id), null, null, moveBeforeId, moveAfterId) .moveMultipleIssues(issues.map(issue => issue.id), null, null, moveBeforeId, moveAfterId)
.catch(() => { .catch(() => flash(__('Something went wrong on our end.')));
// TODO: handle request error
});
} }
updateIssueLabel(issue, listFrom, moveBeforeId, moveAfterId) { updateIssueLabel(issue, listFrom, moveBeforeId, moveAfterId) {
...@@ -304,15 +305,27 @@ class List { ...@@ -304,15 +305,27 @@ class List {
moveBeforeId, moveBeforeId,
moveAfterId, moveAfterId,
) )
.catch(() => { .catch(() => flash(__('Something went wrong on our end.')));
// TODO: handle error
});
} }
findIssue(id) { findIssue(id) {
return this.issues.find(issue => issue.id === id); return this.issues.find(issue => issue.id === id);
} }
removeMultipleIssues(removeIssues) {
const ids = removeIssues.map(issue => issue.id);
debugger;
this.issues = this.issues.filter(issue => {
const matchesRemove = ids.findIndex(id => id === issue.id) > -1;
if (matchesRemove) {
this.issuesSize -= 1;
issue.removeLabel(this.label);
}
return !matchesRemove;
});
console.log(this.issues);
}
removeIssue(removeIssue) { removeIssue(removeIssue) {
this.issues = this.issues.filter(issue => { this.issues = this.issues.filter(issue => {
const matchesRemove = removeIssue.id === issue.id; const matchesRemove = removeIssue.id === issue.id;
......
...@@ -173,9 +173,14 @@ const boardsStore = { ...@@ -173,9 +173,14 @@ const boardsStore = {
currentList.removeIssue(issue); currentList.removeIssue(issue);
}); });
}); });
if (this.shouldRemoveIssue(listFrom, listTo)) {
listFrom.removeMultipleIssues(issues);
}
listTo.addMultipleIssues(issues, listFrom, newIndex); listTo.addMultipleIssues(issues, listFrom, newIndex);
} else { } else {
if (this.shouldRemoveIssue(listFrom, listTo)) {
listFrom.removeMultipleIssues(issues);
}
// Add to new lists issues if it doesn't already exist // Add to new lists issues if it doesn't already exist
listTo.addMultipleIssues(issues, listFrom, newIndex); listTo.addMultipleIssues(issues, listFrom, newIndex);
} }
...@@ -214,10 +219,6 @@ const boardsStore = { ...@@ -214,10 +219,6 @@ const boardsStore = {
list.removeIssue(issue); list.removeIssue(issue);
}); });
}); });
} else if (this.shouldRemoveIssue(listFrom, listTo)) {
issues.forEach(issue => {
listFrom.removeIssue(issue);
});
} }
}, },
...@@ -282,11 +283,11 @@ const boardsStore = { ...@@ -282,11 +283,11 @@ const boardsStore = {
list.moveIssue(issue, oldIndex, newIndex, beforeId, afterId); list.moveIssue(issue, oldIndex, newIndex, beforeId, afterId);
}, },
moveMultipleIssuesInList(list, issues, oldIndex, newIndex, idArray) { moveMultipleIssuesInList(list, issues, oldIndicies, newIndex, idArray) {
const beforeId = parseInt(idArray[newIndex - 1], 10) || null; const beforeId = parseInt(idArray[newIndex - 1], 10) || null;
const afterId = parseInt(idArray[newIndex + issues.length], 10) || null; const afterId = parseInt(idArray[newIndex + issues.length], 10) || null;
list.moveMultipleIssues(issues, oldIndex, newIndex, beforeId, afterId); list.moveMultipleIssues(issues, oldIndicies, newIndex, beforeId, afterId);
}, },
findList(key, val, type = 'label') { findList(key, val, type = 'label') {
const filteredList = this.state.lists.filter(list => { const filteredList = this.state.lists.filter(list => {
......
...@@ -387,32 +387,34 @@ describe('Store', () => { ...@@ -387,32 +387,34 @@ describe('Store', () => {
}); });
describe('toggleMultiSelect', () => { describe('toggleMultiSelect', () => {
let basicIssueObj;
beforeAll(() => {
basicIssueObj = { id: 987654 };
});
afterEach(() => { afterEach(() => {
boardsStore.clearMultiSelect(); boardsStore.clearMultiSelect();
}); });
it('adds issue when not present', () => { it('adds issue when not present', () => {
const issue = { id: 987654 }; boardsStore.toggleMultiSelect(basicIssueObj);
boardsStore.toggleMultiSelect(issue);
const selectedIds = boardsStore.multiSelect.list.map(x => x.id); const selectedIds = boardsStore.multiSelect.list.map(x => x.id);
expect(selectedIds.includes(issue.id)).toEqual(true); expect(selectedIds.includes(basicIssueObj.id)).toEqual(true);
}); });
it('removes issue when issue is present', () => { it('removes issue when issue is present', () => {
const issue = { id: 987654 }; boardsStore.toggleMultiSelect(basicIssueObj);
boardsStore.toggleMultiSelect(issue);
let selectedIds = boardsStore.multiSelect.list.map(x => x.id); let selectedIds = boardsStore.multiSelect.list.map(x => x.id);
expect(selectedIds.includes(issue.id)).toEqual(true); expect(selectedIds.includes(basicIssueObj.id)).toEqual(true);
boardsStore.toggleMultiSelect(issue); boardsStore.toggleMultiSelect(basicIssueObj);
selectedIds = boardsStore.multiSelect.list.map(x => x.id); selectedIds = boardsStore.multiSelect.list.map(x => x.id);
expect(selectedIds.includes(issue.id)).toEqual(false); expect(selectedIds.includes(basicIssueObj.id)).toEqual(false);
}); });
}); });
...@@ -455,22 +457,19 @@ describe('Store', () => { ...@@ -455,22 +457,19 @@ describe('Store', () => {
describe('moveMultipleIssuesInList', () => { describe('moveMultipleIssuesInList', () => {
it('moves multiple issues in list', done => { it('moves multiple issues in list', done => {
const issue1 = new ListIssue({ const issueObj = {
title: 'Issue #1', title: 'Issue #1',
id: 12345, id: 12345,
iid: 2, iid: 2,
confidential: false, confidential: false,
labels: [], labels: [],
assignees: [], assignees: [],
}); };
const issue1 = new ListIssue(issueObj);
const issue2 = new ListIssue({ const issue2 = new ListIssue({
...issueObj,
title: 'Issue #2', title: 'Issue #2',
id: 12346, id: 12346,
iid: 2,
confidential: false,
labels: [],
assignees: [],
}); });
const list = boardsStore.addList(listObj); const list = boardsStore.addList(listObj);
...@@ -482,9 +481,9 @@ describe('Store', () => { ...@@ -482,9 +481,9 @@ describe('Store', () => {
expect(list.issues.length).toBe(3); expect(list.issues.length).toBe(3);
expect(list.issues[0].id).not.toBe(issue2.id); expect(list.issues[0].id).not.toBe(issue2.id);
boardsStore.moveMultipleIssuesInList(list, [issue1, issue2], 0, 1, [1, 12345, 12346]); boardsStore.moveMultipleIssuesInList(list, [issue1, issue2], [0], 1, [1, 12345, 12346]);
expect(list.issues[0].id).toBe(issue2.id); expect(list.issues[0].id).toBe(issue1.id);
expect(gl.boardService.moveMultipleIssues).toHaveBeenCalledWith( expect(gl.boardService.moveMultipleIssues).toHaveBeenCalledWith(
[issue1.id, issue2.id], [issue1.id, issue2.id],
......
...@@ -11105,10 +11105,10 @@ sort-keys@^2.0.0: ...@@ -11105,10 +11105,10 @@ sort-keys@^2.0.0:
dependencies: dependencies:
is-plain-obj "^1.0.0" is-plain-obj "^1.0.0"
sortablejs@1.10.0-rc3: sortablejs@1.10.0:
version "1.10.0-rc3" version "1.10.0"
resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.0-rc3.tgz#2fe63463a38b5cd12ec914fc3e03583048496f42" resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.0.tgz#0ebc054acff2486569194a2f975b2b145dd5e7d6"
integrity sha512-uw8vZqwI3nkIeAqdrP6N/GDxFW3dY7yz3/rK0GLLoe8aJ2RZALmo6mAwOi+uA7RYuqfz2lm7AACr4ms6gXcb6w== integrity sha512-+e0YakK1BxgEZpf9l9UiFaiQ8ZOBn1p/4qkkXr8QDVmYyCrUDTyDRRGm0AgW4E4cD0wtgxJ6yzIRkSPUwqhuhg==
source-list-map@^2.0.0: source-list-map@^2.0.0:
version "2.0.0" version "2.0.0"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册