diff --git a/package.json b/package.json
index a1a7ba0a6..095ca49ed 100644
--- a/package.json
+++ b/package.json
@@ -33,6 +33,7 @@
"vue-i18n": "8.25.0",
"vue-shortkey": "3.1.7",
"vue-smooth-dnd": "0.8.1",
+ "vuedraggable": "^2.24.3",
"vuex": "3.6.2",
"workbox-precaching": "6.1.5"
},
diff --git a/src/components/tasks/add-task.vue b/src/components/tasks/add-task.vue
index 64f71c91f..d92854628 100644
--- a/src/components/tasks/add-task.vue
+++ b/src/components/tasks/add-task.vue
@@ -66,6 +66,12 @@ export default {
this.labelService = new LabelService()
this.labelTaskService = new LabelTaskService()
},
+ props: {
+ defaultPosition: {
+ type: Number,
+ required: false,
+ },
+ },
methods: {
addTask() {
if (this.newTaskTitle === '') {
@@ -74,7 +80,7 @@ export default {
}
this.errorMessage = ''
- this.createNewTask(this.newTaskTitle, 0, this.$store.state.auth.settings.defaultListId)
+ this.createNewTask(this.newTaskTitle, 0, this.$store.state.auth.settings.defaultListId, this.defaultPosition)
.then(task => {
this.newTaskTitle = ''
this.$emit('taskAdded', task)
diff --git a/src/components/tasks/mixins/createTask.js b/src/components/tasks/mixins/createTask.js
index 989636a6e..968516666 100644
--- a/src/components/tasks/mixins/createTask.js
+++ b/src/components/tasks/mixins/createTask.js
@@ -22,7 +22,7 @@ export default {
labels: state => state.labels.labels,
}),
methods: {
- createNewTask(newTaskTitle, bucketId = 0, lId = 0) {
+ createNewTask(newTaskTitle, bucketId = 0, lId = 0, position = 0) {
const parsedTask = parseTaskText(newTaskTitle)
const assignees = []
@@ -57,6 +57,7 @@ export default {
priority: parsedTask.priority,
assignees: assignees,
bucketId: bucketId,
+ position: position,
})
return this.taskService.create(task)
.then(task => {
diff --git a/src/components/tasks/mixins/taskList.js b/src/components/tasks/mixins/taskList.js
index 2a2576915..64c425b66 100644
--- a/src/components/tasks/mixins/taskList.js
+++ b/src/components/tasks/mixins/taskList.js
@@ -1,5 +1,6 @@
import TaskCollectionService from '../../../services/taskCollection'
import cloneDeep from 'lodash/cloneDeep'
+import {calculateTaskPosition} from '../../../helpers/calculateTaskPosition'
/**
* This mixin provides a base set of methods and properties to get tasks on a list.
@@ -20,7 +21,7 @@ export default {
showTaskFilter: false,
params: {
- sort_by: ['done', 'id'],
+ sort_by: ['position', 'id'],
order_by: ['asc', 'desc'],
filter_by: ['done'],
filter_value: ['false'],
@@ -187,5 +188,23 @@ export default {
},
}
},
+ saveTaskPosition(e) {
+ console.log(e.oldIndex, e.newIndex)
+ console.log('elem', this.tasks[e.newIndex].title)
+
+ const task = this.tasks[e.newIndex]
+ const taskBefore = this.tasks[e.newIndex - 1] ?? null
+ const taskAfter = this.tasks[e.newIndex + 1] ?? null
+
+ task.position = calculateTaskPosition(taskBefore !== null ? taskBefore.position : null, taskAfter !== null ? taskAfter.position : null)
+
+ this.$store.dispatch('tasks/update', task)
+ .then(r => {
+ this.$set(this.tasks, e.newIndex, r)
+ })
+ .catch(e => {
+ this.error(e)
+ })
+ },
},
}
\ No newline at end of file
diff --git a/src/views/list/views/List.vue b/src/views/list/views/List.vue
index 722c67041..47d75b7e4 100644
--- a/src/views/list/views/List.vue
+++ b/src/views/list/views/List.vue
@@ -21,7 +21,7 @@
v-model="searchTerm"
/>
-