blob: 99c4f8ede8b35032a688f8576c25b89616c65140 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import Foundation
struct FolderHierarchy {
private let foldersByIdentifier: [UUID: SettingsFolder]
private let folderNames: Set<String>
private let nestedFoldersByTopLevelName: [String: [SettingsFolder]]
let rootFolders: [SettingsFolder]
var sortedTopLevelNames: [String] {
nestedFoldersByTopLevelName.keys.sorted()
}
init(folders: [SettingsFolder]) {
foldersByIdentifier = Dictionary(uniqueKeysWithValues: folders.map { ($0.id, $0) })
folderNames = Set(folders.map(\.name))
var rootFolders: [SettingsFolder] = []
var nestedFoldersByTopLevelName: [String: [SettingsFolder]] = [:]
for folder in folders {
guard let topLevelName = folder.topLevelName else {
rootFolders.append(folder)
continue
}
nestedFoldersByTopLevelName[topLevelName, default: []].append(folder)
}
self.rootFolders = rootFolders
self.nestedFoldersByTopLevelName = nestedFoldersByTopLevelName
}
func folder(for identifier: UUID) -> SettingsFolder? {
foldersByIdentifier[identifier]
}
func folders(forTopLevelName topLevelName: String) -> [SettingsFolder] {
nestedFoldersByTopLevelName[topLevelName] ?? []
}
func hasTopLevelUncategorized(forTopLevelName topLevelName: String) -> Bool {
folderNames.contains(topLevelName)
}
}
|