mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:44:05 +00:00
Adopt new timeline item debug info and overhaul the timeline item deb… (#781)
* Adopt new timeline item debug info and overhaul the timeline item debug menu
This commit is contained in:
@@ -97,7 +97,7 @@ struct RoomScreenViewStateBindings {
|
||||
/// Information describing the currently displayed alert.
|
||||
var alertInfo: AlertInfo<RoomScreenErrorType>?
|
||||
|
||||
var debugInfo: TimelineItemDebugView.DebugInfo?
|
||||
var debugInfo: TimelineItemDebugInfo?
|
||||
}
|
||||
|
||||
enum RoomScreenErrorType: Hashable {
|
||||
|
||||
@@ -319,9 +319,9 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
||||
state.bindings.composerFocused = true
|
||||
state.composerMode = .reply(id: item.id, displayName: item.sender.displayName ?? item.sender.id)
|
||||
case .viewSource:
|
||||
let debugDescription = timelineController.debugDescription(for: item.id)
|
||||
MXLog.info(debugDescription)
|
||||
state.bindings.debugInfo = .init(title: "Timeline item", content: debugDescription)
|
||||
let debugInfo = timelineController.debugInfo(for: item.id)
|
||||
MXLog.info(debugInfo)
|
||||
state.bindings.debugInfo = debugInfo
|
||||
case .retryDecryption(let sessionID):
|
||||
Task {
|
||||
await timelineController.retryDecryption(for: sessionID)
|
||||
|
||||
@@ -17,41 +17,84 @@
|
||||
import SwiftUI
|
||||
|
||||
struct TimelineItemDebugView: View {
|
||||
struct DebugInfo: Identifiable {
|
||||
let id = UUID()
|
||||
let title: String
|
||||
var content: String
|
||||
}
|
||||
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
let info: DebugInfo
|
||||
let info: TimelineItemDebugInfo
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
ScrollView {
|
||||
Text(info.content)
|
||||
.padding()
|
||||
.font(.element.footnote)
|
||||
.foregroundColor(.element.primaryContent)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
VStack {
|
||||
TimelineItemInfoDisclosureGroup(title: "Model", text: info.model, isInitiallyExpanded: true)
|
||||
|
||||
if let originalJSONInfo = info.originalJSON {
|
||||
TimelineItemInfoDisclosureGroup(title: "Original JSON", text: originalJSONInfo)
|
||||
}
|
||||
|
||||
if let latestEditJSONInfo = info.latestEditJSON {
|
||||
TimelineItemInfoDisclosureGroup(title: "Latest edit JSON", text: latestEditJSONInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.navigationTitle(info.title)
|
||||
.navigationTitle("Timeline item")
|
||||
.toolbarBackground(.visible, for: .navigationBar)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button(L10n.actionCancel) {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
ToolbarItem(placement: .secondaryAction) {
|
||||
|
||||
ToolbarItem(placement: .primaryAction) {
|
||||
Button(L10n.actionCopy) {
|
||||
UIPasteboard.general.string = info.content
|
||||
UIPasteboard.general.string = info.description
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private struct TimelineItemInfoDisclosureGroup: View {
|
||||
@State private var isExpanded: Bool
|
||||
|
||||
let title: String
|
||||
let text: String
|
||||
|
||||
init(title: String, text: String, isInitiallyExpanded: Bool = false) {
|
||||
self.title = title
|
||||
self.text = text
|
||||
isExpanded = isInitiallyExpanded
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0.0) {
|
||||
DisclosureGroup(title, isExpanded: $isExpanded) {
|
||||
disclosureGroupContent
|
||||
}
|
||||
.font(.element.subheadline)
|
||||
.padding()
|
||||
|
||||
Divider()
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
var disclosureGroupContent: some View {
|
||||
VStack(alignment: .leading) {
|
||||
Spacer()
|
||||
|
||||
Divider()
|
||||
|
||||
Text(text)
|
||||
.font(.element.caption1.monospaced())
|
||||
.foregroundColor(.element.primaryContent)
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TimelineItemDebugView_Previews: PreviewProvider {
|
||||
@@ -71,6 +114,8 @@ struct TimelineItemDebugView_Previews: PreviewProvider {
|
||||
"""
|
||||
|
||||
static var previews: some View {
|
||||
TimelineItemDebugView(info: .init(title: "Timeline item", content: smallContent))
|
||||
TimelineItemDebugView(info: .init(model: smallContent,
|
||||
originalJSON: "{\"Hi\": \"Alice\"}",
|
||||
latestEditJSON: "{\"Hi\": \"Bob\"}"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user