diff --git a/Mail/Utils/AdaptivePanelViewModifier.swift b/Mail/Utils/AdaptivePanelViewModifier.swift index 170e50e0a..27b528394 100644 --- a/Mail/Utils/AdaptivePanelViewModifier.swift +++ b/Mail/Utils/AdaptivePanelViewModifier.swift @@ -31,17 +31,34 @@ struct AdaptivePanelViewModifier: ViewMo @Binding var item: Item? @ViewBuilder var panelContent: (Item) -> PanelContent + enum AdaptiveSizeType { + case compact + case regular + } + func body(content: Content) -> some View { - if isCompactWindow { - content.floatingPanel(item: $item) { item in + content + .floatingPanel(item: getBindingForSize(.compact)) { item in panelContent(item) } - } else { - content.popover(item: $item) { item in + .popover(item: getBindingForSize(.regular)) { item in panelContent(item) .padding() .frame(idealWidth: 400) } - } + } + + func getBindingForSize(_ size: AdaptiveSizeType) -> Binding { + // We can't use if statement in this modifier because this creates performance issues in the List: + // => SwiftUI needs to create each element of the list before rendering if an if statement is present) + Binding(get: { + if isCompactWindow && size == .compact || !isCompactWindow && size == .regular { + return item + } else { + return nil + } + }, set: { newItem in + item = newItem + }) } } diff --git a/Mail/Views/Thread List/ThreadListSwipeAction.swift b/Mail/Views/Thread List/ThreadListSwipeAction.swift index e1051e2b3..a35205804 100644 --- a/Mail/Views/Thread List/ThreadListSwipeAction.swift +++ b/Mail/Views/Thread List/ThreadListSwipeAction.swift @@ -123,7 +123,7 @@ struct ThreadListSwipeActions: ViewModifier { edgeActions([swipeFullTrailing, swipeTrailing]) } } - //.actionsPanel(actionsTarget: $actionsTarget) + .actionsPanel(actionsTarget: $actionsTarget) .sheet(item: $moveAction) { moveAction in MoveEmailView(moveAction: moveAction) .sheetViewStyle()