cmux/Sources/Panels/PanelContentView.swift
Lawrence Chen 4588c3b0d1 Avoid O(N) re-renders by passing derived Bool instead of ObservableObject
Replace @ObservedObject notificationStore in TerminalPanelView and
PanelContentView with a plain `let hasUnreadNotification: Bool`.
The parent WorkspaceContentView already subscribes to the store
via @EnvironmentObject; it now computes the per-panel Bool and
passes it down, so child views only re-render when their own
notification state actually changes.
2026-02-20 02:41:52 -08:00

45 lines
1.4 KiB
Swift

import SwiftUI
import Foundation
/// View that renders the appropriate panel view based on panel type
struct PanelContentView: View {
let panel: any Panel
let isFocused: Bool
let isSelectedInPane: Bool
let isVisibleInUI: Bool
let portalPriority: Int
let isSplit: Bool
let appearance: PanelAppearance
let hasUnreadNotification: Bool
let onFocus: () -> Void
let onRequestPanelFocus: () -> Void
let onTriggerFlash: () -> Void
var body: some View {
switch panel.panelType {
case .terminal:
if let terminalPanel = panel as? TerminalPanel {
TerminalPanelView(
panel: terminalPanel,
isFocused: isFocused,
isVisibleInUI: isVisibleInUI,
portalPriority: portalPriority,
isSplit: isSplit,
appearance: appearance,
hasUnreadNotification: hasUnreadNotification,
onFocus: onFocus,
onTriggerFlash: onTriggerFlash
)
}
case .browser:
if let browserPanel = panel as? BrowserPanel {
BrowserPanelView(
panel: browserPanel,
isFocused: isFocused,
isVisibleInUI: isVisibleInUI,
onRequestPanelFocus: onRequestPanelFocus
)
}
}
}
}