6
6
</v-col >
7
7
</v-row >
8
8
9
- <v-row align =" center" >
10
- <v-col cols =" 12" sm =" 6" md =" 3" v-for =" note of filteredNotes" :key =" note.id" >
9
+ <!-- the following class of draggable will mocks a <v-row align="center"> -->
10
+ <draggable v-model =" filteredNoteOrder"
11
+ class =" row align-center draggable"
12
+ handle =" .v-toolbar"
13
+ :scroll-sensitivity =" 200"
14
+ :force-fallback =" true" >
11
15
16
+ <v-col cols =" 12" sm =" 6" md =" 3" v-for =" note of filteredNotes" :key =" note.id" >
12
17
<NoteCardText v-if =" note.type === 'text'" :note =" note"
13
18
:show-tags =" showTags"
14
19
@onCopy =" onCopyNote"
39
44
@onCopy =" onCopyNote"
40
45
@onEdit =" onEditRequest(note)"
41
46
@onDelete =" onDeleteRequest(note.id)" />
42
-
43
47
</v-col >
44
- </v-row >
48
+ </draggable >
45
49
46
50
<v-dialog v-model =" dialog.delete.open" max-width =" 290" >
47
51
<v-card >
75
79
76
80
<v-footer app class =" pa-0" >
77
81
<v-toolbar dense color =" footer" >
78
- <v-toolbar-items >
79
- <NoteOrderConfig />
80
- </v-toolbar-items >
81
82
<div class =" flex-grow-1" ></div >
82
83
83
84
<v-toolbar-items >
@@ -138,7 +139,6 @@ import NoteFormPicture from "../components/note/form/Picture";
138
139
import NoteFormTemplate from " ../components/note/form/Template" ;
139
140
import NoteCardTemplate from " ../components/note/card/Template" ;
140
141
import HelpFirstSteps from " ../components/help/FirstSteps" ;
141
- import NoteOrderConfig from " ../components/note/OrderConfig" ;
142
142
import NoteFormCredentials from " ../components/note/form/Credentials" ;
143
143
import NoteCardCredentials from " ../components/note/card/Credentials" ;
144
144
import NoteFormCamera from " ../components/note/form/Camera" ;
@@ -150,7 +150,6 @@ export default {
150
150
components: {
151
151
NoteCardReminder,
152
152
NoteFormReminder,
153
- NoteOrderConfig,
154
153
HelpFirstSteps,
155
154
NoteCardTemplate,
156
155
NoteFormTemplate,
@@ -201,6 +200,29 @@ export default {
201
200
noteDeleteHard : state => state .settings .notes .deleteHard ,
202
201
noteDefaultType : state => state .settings .notes .defaultType
203
202
}),
203
+ filteredNoteOrder: {
204
+ get () {
205
+ return this .filteredNotes .map (n => n .id )
206
+ },
207
+ set (value ) {
208
+ // the filteredNoteOrder array can be a subset of noteOrder
209
+ // so here we have to translate the new subset order to the whole noteOrder!
210
+ let valueOrdinal = {}
211
+ for (let i= 0 ; i < value .length ; i++ ) {
212
+ valueOrdinal[value[i]] = i
213
+ }
214
+
215
+ let newOrder = [... this .noteOrder ]
216
+ newOrder .sort ((a , b ) => {
217
+ if (! valueOrdinal .hasOwnProperty (a)) return 0 // a is a note not included in the filteredNotes!
218
+ if (! valueOrdinal .hasOwnProperty (b)) return - 1
219
+ if (valueOrdinal[a] > valueOrdinal[b]) return 1
220
+ if (valueOrdinal[a] < valueOrdinal[b]) return - 1
221
+ return 0
222
+ })
223
+ this .$store .dispatch (' note/setNoteOrder' , newOrder)
224
+ }
225
+ },
204
226
availableTags () {
205
227
let tags = {}
206
228
for (let tag of this .noteTags ) tags[tag] = true
@@ -335,3 +357,9 @@ export default {
335
357
},
336
358
}
337
359
</script >
360
+
361
+ <style >
362
+ .draggable .v-toolbar {
363
+ cursor : grab ;
364
+ }
365
+ </style >
0 commit comments