Skip to content

Commit

Permalink
Merge pull request #47882 from nextcloud/backport/47294/stable30
Browse files Browse the repository at this point in the history
[stable30] fix(files): Sort tree views correctly by natural order
  • Loading branch information
AndyScherzinger authored Sep 12, 2024
2 parents e664039 + 5e8df98 commit 7776d68
Show file tree
Hide file tree
Showing 111 changed files with 178 additions and 166 deletions.
20 changes: 17 additions & 3 deletions apps/files/src/services/FolderTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,19 @@ import axios from '@nextcloud/axios'
import { generateOcsUrl } from '@nextcloud/router'
import { getCurrentUser } from '@nextcloud/auth'
import { dirname, encodePath, joinPaths } from '@nextcloud/paths'
import { getCanonicalLocale, getLanguage } from '@nextcloud/l10n'

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

// eslint-disable-next-line no-use-before-define
type Tree = Array<{
type Tree = TreeNodeData[]

interface TreeNodeData {
id: number,
basename: string,
displayName?: string,
children: Tree,
}>
}

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

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

const collator = Intl.Collator(
[getLanguage(), getCanonicalLocale()],
{
numeric: true,
usage: 'sort',
},
)

const compareNodes = (a: TreeNodeData, b: TreeNodeData) => collator.compare(a.displayName ?? a.basename, b.displayName ?? b.basename)

const getTreeNodes = (tree: Tree, currentPath: string = '/', nodes: TreeNode[] = []): TreeNode[] => {
for (const { id, basename, displayName, children } of tree) {
const sortedTree = tree.toSorted(compareNodes)
for (const { id, basename, displayName, children } of sortedTree) {
const path = joinPaths(currentPath, basename)
const source = `${sourceRoot}${path}`
const node: TreeNode = {
Expand Down
1 change: 0 additions & 1 deletion apps/files/src/views/Navigation.vue
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ export default defineComponent({
return this.views
.reduce((map, view) => {
map[view.parent!] = [...(map[view.parent!] || []), view]
// TODO Allow undefined order for natural sort
map[view.parent!].sort((a, b) => {
if (typeof a.order === 'number' || typeof b.order === 'number') {
return (a.order ?? 0) - (b.order ?? 0)
Expand Down
1 change: 0 additions & 1 deletion apps/files/src/views/folderTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ const registerNodeView = (node: TreeNode | Folder) => {
name: node.displayName ?? node.displayname ?? node.basename,

icon: FolderSvg,
order: 0, // TODO Allow undefined order for natural sort

getContents,
loadChildViews: getLoadChildViews(node),
Expand Down
2 changes: 1 addition & 1 deletion dist/1762-1762.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
2 changes: 1 addition & 1 deletion dist/3235-3235.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
2 changes: 1 addition & 1 deletion dist/6652-6652.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
2 changes: 1 addition & 1 deletion dist/6818-6818.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
2 changes: 1 addition & 1 deletion dist/6818-6818.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/802-802.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/802-802.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
2 changes: 1 addition & 1 deletion dist/802-802.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/9725-9725.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
4 changes: 2 additions & 2 deletions dist/comments-comments-app.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/comments-comments-app.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/comments-comments-tab.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/comments-comments-tab.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/comments-init.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/core-legacy-unified-search.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/core-legacy-unified-search.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/core-login.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/core-login.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
2 changes: 1 addition & 1 deletion dist/core-login.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/core-main.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/core-main.js.license
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ This file is generated from multiple sources. Included packages:
- version: 3.3.1
- license: GPL-3.0-or-later
- @nextcloud/files
- version: 3.8.0
- version: 3.9.0
- license: AGPL-3.0-or-later
- @nextcloud/initial-state
- version: 2.2.0
Expand Down
2 changes: 1 addition & 1 deletion dist/core-main.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/core-profile.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/core-profile.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/dav-settings-personal-availability.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/dav-settings-personal-availability.js.map

Large diffs are not rendered by default.

Loading

0 comments on commit 7776d68

Please sign in to comment.