Skip to content

Commit d4313c2

Browse files
authored
Merge pull request #47294 from nextcloud/fix/natural-order-tree
fix(files): Sort tree views correctly by natural order
2 parents 5afe212 + 569bd1a commit d4313c2

File tree

118 files changed

+183
-171
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+183
-171
lines changed

apps/files/src/services/FolderTree.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@ import axios from '@nextcloud/axios'
1111
import { generateOcsUrl } from '@nextcloud/router'
1212
import { getCurrentUser } from '@nextcloud/auth'
1313
import { dirname, encodePath, joinPaths } from '@nextcloud/paths'
14+
import { getCanonicalLocale, getLanguage } from '@nextcloud/l10n'
1415

1516
import { getContents as getFiles } from './Files.ts'
1617

1718
// eslint-disable-next-line no-use-before-define
18-
type Tree = Array<{
19+
type Tree = TreeNodeData[]
20+
21+
interface TreeNodeData {
1922
id: number,
2023
basename: string,
2124
displayName?: string,
2225
children: Tree,
23-
}>
26+
}
2427

2528
export interface TreeNode {
2629
source: string,
@@ -35,8 +38,19 @@ export const folderTreeId = 'folders'
3538

3639
export const sourceRoot = `${davRemoteURL}/files/${getCurrentUser()?.uid}`
3740

41+
const collator = Intl.Collator(
42+
[getLanguage(), getCanonicalLocale()],
43+
{
44+
numeric: true,
45+
usage: 'sort',
46+
},
47+
)
48+
49+
const compareNodes = (a: TreeNodeData, b: TreeNodeData) => collator.compare(a.displayName ?? a.basename, b.displayName ?? b.basename)
50+
3851
const getTreeNodes = (tree: Tree, currentPath: string = '/', nodes: TreeNode[] = []): TreeNode[] => {
39-
for (const { id, basename, displayName, children } of tree) {
52+
const sortedTree = tree.toSorted(compareNodes)
53+
for (const { id, basename, displayName, children } of sortedTree) {
4054
const path = joinPaths(currentPath, basename)
4155
const source = `${sourceRoot}${path}`
4256
const node: TreeNode = {

apps/files/src/views/Navigation.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ export default defineComponent({
122122
return this.views
123123
.reduce((map, view) => {
124124
map[view.parent!] = [...(map[view.parent!] || []), view]
125-
// TODO Allow undefined order for natural sort
126125
map[view.parent!].sort((a, b) => {
127126
if (typeof a.order === 'number' || typeof b.order === 'number') {
128127
return (a.order ?? 0) - (b.order ?? 0)

apps/files/src/views/folderTree.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ const registerNodeView = (node: TreeNode | Folder) => {
7777
name: node.displayName ?? node.displayname ?? node.basename,
7878

7979
icon: FolderSvg,
80-
order: 0, // TODO Allow undefined order for natural sort
8180

8281
getContents,
8382
loadChildViews: getLoadChildViews(node),

dist/1762-1762.js.license

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ This file is generated from multiple sources. Included packages:
112112
- version: 3.3.1
113113
- license: GPL-3.0-or-later
114114
- @nextcloud/files
115-
- version: 3.8.0
115+
- version: 3.9.0
116116
- license: AGPL-3.0-or-later
117117
- @nextcloud/initial-state
118118
- version: 2.2.0

dist/3794-3794.js.license

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ This file is generated from multiple sources. Included packages:
6868
- version: 3.3.1
6969
- license: GPL-3.0-or-later
7070
- @nextcloud/files
71-
- version: 3.8.0
71+
- version: 3.9.0
7272
- license: AGPL-3.0-or-later
7373
- @nextcloud/initial-state
7474
- version: 2.2.0

dist/583-583.js.license

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ This file is generated from multiple sources. Included packages:
110110
- version: 3.3.1
111111
- license: GPL-3.0-or-later
112112
- @nextcloud/files
113-
- version: 3.8.0
113+
- version: 3.9.0
114114
- license: AGPL-3.0-or-later
115115
- @nextcloud/initial-state
116116
- version: 2.2.0

dist/6794-6794.js.license

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ This file is generated from multiple sources. Included packages:
8787
- version: 3.3.1
8888
- license: GPL-3.0-or-later
8989
- @nextcloud/files
90-
- version: 3.8.0
90+
- version: 3.9.0
9191
- license: AGPL-3.0-or-later
9292
- @nextcloud/initial-state
9393
- version: 2.2.0

dist/6794-6794.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/7145-7145.js.license

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ This file is generated from multiple sources. Included packages:
6363
- version: 3.3.1
6464
- license: GPL-3.0-or-later
6565
- @nextcloud/files
66-
- version: 3.8.0
66+
- version: 3.9.0
6767
- license: AGPL-3.0-or-later
6868
- @nextcloud/initial-state
6969
- version: 2.2.0

dist/802-802.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)