From 5e704465a73d53037fa14830eacdc5b61871582f Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Mon, 4 Feb 2019 16:27:11 +0530 Subject: [PATCH] macOS: Tunnel detail: Refactor calculation of tableViewModelRows --- .../TunnelDetailTableViewController.swift | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift index 9e80009..e481a11 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift @@ -78,12 +78,15 @@ class TunnelDetailTableViewController: NSViewController { let tunnelsManager: TunnelsManager let tunnel: TunnelContainer + var tunnelViewModel: TunnelViewModel { - didSet { - updateTableViewModelRows() - } + didSet { updateTableViewModelRowsBySection() } + } + private var tableViewModelRowsBySection = [[(isVisible: Bool, modelRow: TableViewModelRow)]]() { + didSet { updateTableViewModelRows() } } private var tableViewModelRows = [TableViewModelRow]() + private var statusObservationToken: AnyObject? private var tunnelEditVC: TunnelEditViewController? private var reloadRuntimeConfigurationTimer: Timer? @@ -160,19 +163,34 @@ class TunnelDetailTableViewController: NSViewController { view = containerView } - func updateTableViewModelRows() { - tableViewModelRows = [] - for field in interfaceFields where !tunnelViewModel.interfaceData[field].isEmpty { - tableViewModelRows.append(.interfaceFieldRow(field)) + func updateTableViewModelRowsBySection() { + var modelRowsBySection = [[(isVisible: Bool, modelRow: TableViewModelRow)]]() + + var interfaceSection = [(isVisible: Bool, modelRow: TableViewModelRow)]() + for field in interfaceFields { + interfaceSection.append((isVisible: !tunnelViewModel.interfaceData[field].isEmpty, modelRow: .interfaceFieldRow(field))) } + interfaceSection.append((isVisible: true, modelRow: .spacerRow)) + modelRowsBySection.append(interfaceSection) + for peerData in tunnelViewModel.peersData { - tableViewModelRows.append(.spacerRow) - for field in peerFields where !peerData[field].isEmpty { - tableViewModelRows.append(.peerFieldRow(peer: peerData, field: field)) + var peerSection = [(isVisible: Bool, modelRow: TableViewModelRow)]() + for field in peerFields { + peerSection.append((isVisible: !peerData[field].isEmpty, modelRow: .peerFieldRow(peer: peerData, field: field))) } + peerSection.append((isVisible: true, modelRow: .spacerRow)) + modelRowsBySection.append(peerSection) } - tableViewModelRows.append(.spacerRow) - tableViewModelRows.append(.onDemandRow) + + var onDemandSection = [(isVisible: Bool, modelRow: TableViewModelRow)]() + onDemandSection.append((isVisible: true, modelRow: .onDemandRow)) + modelRowsBySection.append(onDemandSection) + + tableViewModelRowsBySection = modelRowsBySection + } + + func updateTableViewModelRows() { + tableViewModelRows = tableViewModelRowsBySection.flatMap { $0.filter { $0.isVisible }.map { $0.modelRow } } } func updateStatus() {