Skip to content

Commit 4af7624

Browse files
committed
feat: fully working sortable threads
1 parent 9fb3fb7 commit 4af7624

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

src/views/Threads.vue

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656

5757
<!-- Thread Sorting Controls -->
5858
<div class="thread-sort">Sort <a href="" @click.prevent="setSortField()">{{ threadData.data.desc === true ? 'descending' : 'ascending' }}</a> by
59-
<select v-model="sortVal" name="select-thread-sort" class="select-clean" @change="setSortField()">
59+
<select v-model="sortField" name="select-thread-sort" class="select-clean" @change="setSortField()">
6060
<option v-for="item in sortItems" :key="item.value" :value="item.value">{{item.label}}</option>
6161
</select>
6262
</div>
@@ -253,31 +253,31 @@ export default {
253253
const watchBoard = () => console.log('watchBoard()')
254254
255255
const setSortField = newField => {
256-
// Get/Set current sort field
257-
if (!newField) { newField = v.sortVal }
258-
else { v.sortVal = newField }
256+
// Get/Set new sort field
257+
if (newField) v.sortField = newField
258+
else newField = v.sortField
259259
// Convert desc query param to boolean
260260
let desc = $route.query.desc === 'false' ? false : true
261261
// Sort Field hasn't changed just toggle desc
262-
if (newField === $route.query.field || (!$route.query.desc && desc)) { desc = !desc }
262+
const defaultField = newField === 'updated_at' && !$route.query.field
263+
if (defaultField || newField === $route.query.field) desc = !desc
264+
else desc = true // Sort field changed, default to desc true
263265
// Update router to have new query params, watch on query params will update data
264-
$router.replace({ name: $route.name, params: $route.params, query: { desc: desc, field: newField }})
266+
let query = { field: newField }
267+
if (!desc) query.desc = false // only display desc in query string when false
268+
if (newField === 'updated_at') delete query.field // do not display default field in qs
269+
const params = { ...$route.params, saveScrollPos: true } // save scroll pos when sorting table
270+
$router.replace({ name: $route.name, params: params, query: query })
265271
}
266272
267273
const getSortClass = field => {
268-
let sortClass
274+
let sortClass = 'fa '
269275
const desc = v.threadData.data.desc
270276
const curField = v.threadData.data.field
271-
if (field === 'updated_at' && !curField && !desc) {
272-
sortClass = 'fa fa-sort-down'
273-
}
274-
else if (curField === field && desc) {
275-
sortClass = 'fa fa-sort-down'
276-
}
277-
else if (curField === field && !desc) {
278-
sortClass = 'fa fa-sort-up';
279-
}
280-
else { sortClass = 'fa fa-sort'; }
277+
const defaultField = field === 'updated_at' && !curField
278+
if ((defaultField || curField === field) && desc) sortClass += 'fa-sort-down'
279+
else if ((defaultField || curField === field) && !desc) sortClass += 'fa-sort-up'
280+
else sortClass += 'fa-sort'
281281
return sortClass
282282
}
283283
@@ -300,7 +300,7 @@ export default {
300300
prefs: preferences.data,
301301
loggedIn: auth.loggedIn,
302302
showSetModerators: true,
303-
sortVal: $route.params.field ? $route.params.field : 'updated_at',
303+
sortField: $route.params.field ? $route.params.field : 'updated_at',
304304
sortItems: [
305305
{
306306
value: 'updated_at',
@@ -322,14 +322,13 @@ export default {
322322
})
323323
324324
/* Watched Data */
325-
watch(() => $route.query, () => v.threadData.mutate(fetchThreads)) // Update boards on login
325+
watch(() => $route.query, () => v.threadData.mutate(processThreads)) // Update on query change
326326
327327
/* Computed Data */
328328
const canCreate = computed(() => { return true })
329329
const canSetModerator = computed(() => { return true })
330330
331331
return { ...toRefs(v), canCreate, canSetModerator, loadEditor, watchBoard, setSortField, getSortClass, humanDate, decode, truncate }
332-
333332
}
334333
}
335334
</script>

0 commit comments

Comments
 (0)