invert order

Massimo Melina committed Jan 10, 2022 at 20:35 UTC 3e6f9b3b1b1306d39c851f89220ba0ce3e1f2faa
4 files changed +14 -6
frontend/src/options.ts
+6
@@ -18,6 +18,12 @@ export function showOptions (){
18 close(state.sortBy = x)
19 }
20 }, x, ' ', snap.sortBy===x && hIcon('check'))),
21 + h(Checkbox, {
22 + value: snap.invertOrder,
23 + onChange(v) {
24 + state.invertOrder = v
25 + }
26 + }, 'Invert order'),
27 h(Checkbox, {
28 value: snap.foldersFirst,
29 onChange(v) {
frontend/src/state.ts
+2
@@ -11,6 +11,7 @@ export const state = proxy<{
11 remoteSearch: string,
12 filteredEntries: number,
13 sortBy: string,
14 + invertOrder: boolean,
15 foldersFirst: boolean,
16 theme: string,
17 }>({
@@ -20,6 +21,7 @@ export const state = proxy<{
21 remoteSearch: '',
22 filteredEntries: -1,
23 sortBy: 'name',
24 + invertOrder: false,
25 foldersFirst: true,
26 theme: '',
27 })
frontend/src/useFetchList.ts
+5 -4
@@ -15,10 +15,10 @@ export default function useFetchList() {
15 const [reload, forcer] = useForceUpdate()
16
17 // reorder in case sort criteria change
18 - const { sortBy, foldersFirst } = snap
18 + const { sortBy, invertOrder, foldersFirst } = snap
19 useEffect(()=>{
20 setList(sort(list))
21 - }, [sortBy, foldersFirst])
21 + }, [sortBy, invertOrder, foldersFirst])
22
23 useEffect(()=>{
24 const loc = window.location
@@ -96,14 +96,15 @@ function sort(list: DirList) {
96 const bySize = sortBy === 'size'
97 const byExt = sortBy === 'extension'
98 const byTime = sortBy === 'time'
99 + const invert = state.invertOrder ? -1 : 1
100 return list.sort((a,b) =>
101 foldersFirst && -compare(a.isFolder, b.isFolder)
101 - || (bySize ? compare(a.s||0, b.s||0)
102 + || invert*(bySize ? compare(a.s||0, b.s||0)
103 : byExt ? localCompare(a.ext, b.ext)
104 : byTime ? compare(a.t, b.t)
105 : 0
106 )
106 - || localCompare(a.n, b.n) // fallback to name/path
107 + || invert*localCompare(a.n, b.n) // fallback to name/path
108 )
109 }
110
todo.md
+1 -2
@@ -1,6 +1,5 @@
1 # To do
2 -- inverted order
3 -- download counter
2 +- download counter (as plugin?)
3 - update tests to SRP login
4 - anti-csrf
5 - upload