Skip to content

Commit d368d4d

Browse files
committed
refactor: Extract tabs to array
1 parent 1433ca2 commit d368d4d

3 files changed

Lines changed: 37 additions & 28 deletions

File tree

qBitControl.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
90200BA52B44BA6F00D3BA55 /* logo1.png in Resources */ = {isa = PBXBuildFile; fileRef = 90200BA42B44BA6E00D3BA55 /* logo1.png */; };
1414
90200BA62B44BA6F00D3BA55 /* logo1.png in Resources */ = {isa = PBXBuildFile; fileRef = 90200BA42B44BA6E00D3BA55 /* logo1.png */; };
1515
90200BA72B44BA6F00D3BA55 /* logo1.png in Resources */ = {isa = PBXBuildFile; fileRef = 90200BA42B44BA6E00D3BA55 /* logo1.png */; };
16+
9023703F2E8DAD150048F5E1 /* TabItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9023703E2E8DAD130048F5E1 /* TabItem.swift */; };
1617
9042ABDF2DB2CC05003584EF /* SearchPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9042ABDE2DB2CC02003584EF /* SearchPlugin.swift */; };
1718
9042ABE12DB2CC8F003584EF /* SearchCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9042ABE02DB2CC8A003584EF /* SearchCategory.swift */; };
1819
905284982D457618000EB12C /* ChangeTagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 905284972D457618000EB12C /* ChangeTagsView.swift */; };
@@ -120,6 +121,7 @@
120121
90200BA42B44BA6E00D3BA55 /* logo1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = logo1.png; path = qBitControl/Assets.xcassets/AppIcon.appiconset/logo1.png; sourceTree = "<group>"; };
121122
90200BA82B44BC2600D3BA55 /* qBitControlTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "qBitControlTests-Bridging-Header.h"; sourceTree = "<group>"; };
122123
90200BA92B44BC2600D3BA55 /* qBitControlUITests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "qBitControlUITests-Bridging-Header.h"; sourceTree = "<group>"; };
124+
9023703E2E8DAD130048F5E1 /* TabItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabItem.swift; sourceTree = "<group>"; };
123125
9042ABDE2DB2CC02003584EF /* SearchPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchPlugin.swift; sourceTree = "<group>"; };
124126
9042ABE02DB2CC8A003584EF /* SearchCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCategory.swift; sourceTree = "<group>"; };
125127
905284972D457618000EB12C /* ChangeTagsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeTagsView.swift; sourceTree = "<group>"; };
@@ -279,6 +281,7 @@
279281
90726B1E2CDA22160032993E /* Models */ = {
280282
isa = PBXGroup;
281283
children = (
284+
9023703E2E8DAD130048F5E1 /* TabItem.swift */,
282285
9042ABE02DB2CC8A003584EF /* SearchCategory.swift */,
283286
9042ABDE2DB2CC02003584EF /* SearchPlugin.swift */,
284287
90AB036D2DB16D51009870BB /* SearchSortOptions.swift */,
@@ -673,6 +676,7 @@
673676
90726B692CDA22190032993E /* TorrentDetailsView.swift in Sources */,
674677
90726B6A2CDA22190032993E /* FiltersMenuView.swift in Sources */,
675678
90726B6B2CDA22190032993E /* PeerDetailsView.swift in Sources */,
679+
9023703F2E8DAD150048F5E1 /* TabItem.swift in Sources */,
676680
90726B6C2CDA22190032993E /* TorrentRowView.swift in Sources */,
677681
90726B6D2CDA22190032993E /* MainView.swift in Sources */,
678682
90AE893D2CDBEF1C000E0276 /* RSSArticleView.swift in Sources */,

qBitControl/Models/TabItem.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// TabItem.swift
3+
// qBitControl
4+
//
5+
// Created by Michał Grzegoszczyk on 01/10/2025.
6+
//
7+
import SwiftUI
8+
9+
struct TabItem {
10+
let label: String
11+
let systemImage: String
12+
let content: () -> AnyView
13+
}

qBitControl/Views/MainView.swift

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,26 @@ struct MainView: View {
55
@ObservedObject var serversHelper = ServersHelper.shared
66
@Environment(\.scenePhase) var scenePhase
77

8+
let tabs = [
9+
TabItem(label: "Tasks", systemImage: "square.and.arrow.down.on.square") { AnyView(TorrentListView()) },
10+
TabItem(label: "RSS", systemImage: "dot.radiowaves.up.forward") { AnyView(RSSView()) },
11+
TabItem(label: "Stats", systemImage: "chart.line.uptrend.xyaxis") { AnyView(StatsView()) },
12+
TabItem(label: "Servers", systemImage: "server.rack") { AnyView(ServersView()) },
13+
]
14+
15+
func mainTabView() -> some View {
16+
TabView {
17+
ForEach(tabs, id: \.label) { tab in
18+
tab.content()
19+
.tabItem {
20+
Label(tab.label, systemImage: tab.systemImage)
21+
}
22+
}
23+
}.onChange(of: scenePhase) { phase in
24+
viewModel.reconnectIfNeeded(on: phase)
25+
}
26+
}
27+
828
var body: some View {
929
Group {
1030
if serversHelper.connectingServerId != nil && !serversHelper.isLoggedIn {
@@ -31,32 +51,4 @@ struct MainView: View {
3151
}
3252
}
3353
}
34-
35-
36-
func mainTabView() -> some View {
37-
TabView {
38-
TorrentListView()
39-
.tabItem {
40-
Label("Tasks", systemImage: "square.and.arrow.down.on.square")
41-
}
42-
.onChange(of: scenePhase) { phase in
43-
viewModel.reconnectIfNeeded(on: phase)
44-
}
45-
46-
RSSView()
47-
.tabItem {
48-
Label("RSS", systemImage: "dot.radiowaves.up.forward")
49-
}
50-
51-
StatsView()
52-
.tabItem {
53-
Label("Stats", systemImage: "chart.line.uptrend.xyaxis")
54-
}
55-
56-
ServersView()
57-
.tabItem {
58-
Label("Servers", systemImage: "server.rack")
59-
}
60-
}
61-
}
6254
}

0 commit comments

Comments
 (0)