mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-08-03 12:37:15 -04:00
Remove top level only item from OutlineTree
This commit is contained in:
parent
1164425624
commit
6c5344e4a3
@ -91,23 +91,15 @@ final class OutlineItem: ObservableObject, Identifiable {
|
|||||||
let index: Int
|
let index: Int
|
||||||
let text: String
|
let text: String
|
||||||
let level: Int
|
let level: Int
|
||||||
let isCollapsible: Bool
|
|
||||||
private(set) var children: [OutlineItem]?
|
private(set) var children: [OutlineItem]?
|
||||||
|
|
||||||
@Published var isExpanded = true
|
@Published var isExpanded = true
|
||||||
|
|
||||||
func asNonCollapsible() -> OutlineItem {
|
|
||||||
let copy = OutlineItem(id: id, index: index, text: text, level: level, isCollapsible: false)
|
|
||||||
copy.children = children
|
|
||||||
return copy
|
|
||||||
}
|
|
||||||
|
|
||||||
init(id: String, index: Int, text: String, level: Int, isCollapsible: Bool = true) {
|
init(id: String, index: Int, text: String, level: Int) {
|
||||||
self.id = id
|
self.id = id
|
||||||
self.index = index
|
self.index = index
|
||||||
self.text = text
|
self.text = text
|
||||||
self.level = level
|
self.level = level
|
||||||
self.isCollapsible = isCollapsible
|
|
||||||
}
|
}
|
||||||
|
|
||||||
convenience init(index: Int, text: String, level: Int) {
|
convenience init(index: Int, text: String, level: Int) {
|
||||||
|
@ -732,14 +732,12 @@ final class BrowserViewModel: NSObject, ObservableObject,
|
|||||||
@MainActor private func generateOutlineTree(headings: [[String: String]]) {
|
@MainActor private func generateOutlineTree(headings: [[String: String]]) {
|
||||||
let root = OutlineItem(index: -1, text: "", level: 0)
|
let root = OutlineItem(index: -1, text: "", level: 0)
|
||||||
var stack: [OutlineItem] = [root]
|
var stack: [OutlineItem] = [root]
|
||||||
var all = [String: OutlineItem]()
|
|
||||||
|
|
||||||
headings.enumerated().forEach { index, heading in
|
headings.enumerated().forEach { index, heading in
|
||||||
guard let id = heading["id"],
|
guard let id = heading["id"],
|
||||||
let text = heading["text"],
|
let text = heading["text"],
|
||||||
let tag = heading["tag"], let level = Int(tag.suffix(1)) else { return }
|
let tag = heading["tag"], let level = Int(tag.suffix(1)) else { return }
|
||||||
let item = OutlineItem(id: id, index: index, text: text, level: level)
|
let item = OutlineItem(id: id, index: index, text: text, level: level)
|
||||||
all[item.id] = item
|
|
||||||
|
|
||||||
// get last item in stack
|
// get last item in stack
|
||||||
// if last item is child of item's sibling, unwind stack until a sibling is found
|
// if last item is child of item's sibling, unwind stack until a sibling is found
|
||||||
@ -760,9 +758,9 @@ final class BrowserViewModel: NSObject, ObservableObject,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if there is only one h1, make the first item non collapsible
|
// if there is only one item at top level, do not display it only it's children
|
||||||
if let rootChildren = root.children, rootChildren.count == 1, let rootFirstChild = rootChildren.first {
|
if let rootChildren = root.children, rootChildren.count == 1, let rootFirstChild = rootChildren.first {
|
||||||
self.outlineItemTree = [rootFirstChild.asNonCollapsible()]
|
self.outlineItemTree = rootFirstChild.children ?? []
|
||||||
} else {
|
} else {
|
||||||
self.outlineItemTree = root.children ?? []
|
self.outlineItemTree = root.children ?? []
|
||||||
}
|
}
|
||||||
|
@ -90,8 +90,7 @@ struct OutlineButton: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
if let children = item.children {
|
if let children = item.children {
|
||||||
let isExpanded = item.isCollapsible ? $item.isExpanded : .constant(true)
|
DisclosureGroup(isExpanded: $item.isExpanded) {
|
||||||
DisclosureGroup(isExpanded: isExpanded) {
|
|
||||||
ForEach(children) { child in
|
ForEach(children) { child in
|
||||||
OutlineNode(item: child, action: action)
|
OutlineNode(item: child, action: action)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user