Skip to content

Commit 3617c5e

Browse files
committed
Decoupled lots of views
Signed-off-by: Wouter01 <wouterhennen@gmail.com>
1 parent aeb32c7 commit 3617c5e

28 files changed

Lines changed: 85 additions & 161 deletions

CodeEdit.xcodeproj/project.pbxproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,8 @@
305305
6C05A8AF284D0CA3007F4EAA /* WorkspaceDocument+Listeners.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C05A8AE284D0CA3007F4EAA /* WorkspaceDocument+Listeners.swift */; };
306306
6C14CEB028777D3C001468FE /* FindNavigatorListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C14CEAF28777D3C001468FE /* FindNavigatorListViewController.swift */; };
307307
6C14CEB32877A68F001468FE /* FindNavigatorMatchListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C14CEB22877A68F001468FE /* FindNavigatorMatchListCell.swift */; };
308-
6C48D8F22972DAFC00D6D205 /* IsFullscreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C48D8F12972DAFC00D6D205 /* IsFullscreen.swift */; };
309-
6C48D8F42972DB1A00D6D205 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C48D8F32972DB1A00D6D205 /* Window.swift */; };
308+
6C48D8F22972DAFC00D6D205 /* Env+IsFullscreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C48D8F12972DAFC00D6D205 /* Env+IsFullscreen.swift */; };
309+
6C48D8F42972DB1A00D6D205 /* Env+Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C48D8F32972DB1A00D6D205 /* Env+Window.swift */; };
310310
6C48D8F72972E5F300D6D205 /* WindowObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C48D8F62972E5F300D6D205 /* WindowObserver.swift */; };
311311
6CDA84AB284C0E4A00C1CC3A /* TabBarItemButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA84AA284C0E4A00C1CC3A /* TabBarItemButtonStyle.swift */; };
312312
6CDA84AD284C1BA000C1CC3A /* TabBarContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA84AC284C1BA000C1CC3A /* TabBarContextMenu.swift */; };
@@ -672,8 +672,8 @@
672672
6C05A8AE284D0CA3007F4EAA /* WorkspaceDocument+Listeners.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WorkspaceDocument+Listeners.swift"; sourceTree = "<group>"; };
673673
6C14CEAF28777D3C001468FE /* FindNavigatorListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindNavigatorListViewController.swift; sourceTree = "<group>"; };
674674
6C14CEB22877A68F001468FE /* FindNavigatorMatchListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindNavigatorMatchListCell.swift; sourceTree = "<group>"; };
675-
6C48D8F12972DAFC00D6D205 /* IsFullscreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IsFullscreen.swift; sourceTree = "<group>"; };
676-
6C48D8F32972DB1A00D6D205 /* Window.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Window.swift; sourceTree = "<group>"; };
675+
6C48D8F12972DAFC00D6D205 /* Env+IsFullscreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Env+IsFullscreen.swift"; sourceTree = "<group>"; };
676+
6C48D8F32972DB1A00D6D205 /* Env+Window.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Env+Window.swift"; sourceTree = "<group>"; };
677677
6C48D8F62972E5F300D6D205 /* WindowObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowObserver.swift; sourceTree = "<group>"; };
678678
6CDA84AA284C0E4A00C1CC3A /* TabBarItemButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarItemButtonStyle.swift; sourceTree = "<group>"; };
679679
6CDA84AC284C1BA000C1CC3A /* TabBarContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarContextMenu.swift; sourceTree = "<group>"; };
@@ -2122,8 +2122,8 @@
21222122
6C48D8EF2972DAC300D6D205 /* Environment */ = {
21232123
isa = PBXGroup;
21242124
children = (
2125-
6C48D8F12972DAFC00D6D205 /* IsFullscreen.swift */,
2126-
6C48D8F32972DB1A00D6D205 /* Window.swift */,
2125+
6C48D8F12972DAFC00D6D205 /* Env+IsFullscreen.swift */,
2126+
6C48D8F32972DB1A00D6D205 /* Env+Window.swift */,
21272127
);
21282128
path = Environment;
21292129
sourceTree = "<group>";
@@ -2609,7 +2609,7 @@
26092609
5882252D292C280D00E83CDE /* StatusBarSplitTerminalButton.swift in Sources */,
26102610
58798238292E30B90085B254 /* FeedbackWindowController.swift in Sources */,
26112611
587B9E6C29301D8F00AC7927 /* GitLabNamespace.swift in Sources */,
2612-
6C48D8F22972DAFC00D6D205 /* IsFullscreen.swift in Sources */,
2612+
6C48D8F22972DAFC00D6D205 /* Env+IsFullscreen.swift in Sources */,
26132613
587B9E8729301D8F00AC7927 /* GitHubRepositories.swift in Sources */,
26142614
587B9DA329300ABD00AC7927 /* SettingsTextEditor.swift in Sources */,
26152615
2072FA1A280D872600C7F8D4 /* LineEndings.swift in Sources */,
@@ -2703,7 +2703,7 @@
27032703
58F2EB09292FB2B0004A9BDE /* TerminalPreferences.swift in Sources */,
27042704
587D9B742933BF5700BF7490 /* FileItem+Array.swift in Sources */,
27052705
587D9B772933BF5700BF7490 /* Live.swift in Sources */,
2706-
6C48D8F42972DB1A00D6D205 /* Window.swift in Sources */,
2706+
6C48D8F42972DB1A00D6D205 /* Env+Window.swift in Sources */,
27072707
2072FA18280D871200C7F8D4 /* TextEncoding.swift in Sources */,
27082708
58F2EAF3292FB2B0004A9BDE /* ThemePreviewIcon.swift in Sources */,
27092709
58F2EB07292FB2B0004A9BDE /* GeneralPreferences.swift in Sources */,

CodeEdit/Features/Documents/Views/WorkspaceCodeFileView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import SwiftUI
99
import UniformTypeIdentifiers
1010

1111
struct WorkspaceCodeFileView: View {
12-
@ObservedObject
13-
var workspace: WorkspaceDocument
12+
@EnvironmentObject
13+
private var workspace: WorkspaceDocument
1414

1515
@StateObject
1616
private var prefs: AppPreferencesModel = .shared

CodeEdit/Features/NavigatorSidebar/ExtensionNavigator/ExtensionNavigatorView.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,27 @@ import SwiftUI
99
import Combine
1010

1111
struct ExtensionNavigatorView: View {
12-
@EnvironmentObject var workspace: WorkspaceDocument
13-
@ObservedObject var data: ExtensionNavigatorData
12+
@EnvironmentObject
13+
private var workspace: WorkspaceDocument
14+
1415
@State var showing = false
1516

1617
var body: some View {
1718
VStack {
1819
Divider() // TODO: fix this workaround because when switching tabs without this, the app crashes
1920
List {
20-
ForEach(data.plugins) { plugin in
21+
ForEach(workspace.extensionNavigatorData.plugins) { plugin in
2122
ExtensionNavigatorItemView(plugin: plugin)
2223
.tag(plugin)
23-
.environmentObject(workspace)
2424
}
2525

26-
if !data.listFull {
26+
if !workspace.extensionNavigatorData.listFull {
2727
HStack {
2828
Spacer()
2929
ProgressView()
3030
.progressViewStyle(CircularProgressViewStyle())
3131
.onAppear {
32-
data.fetch()
32+
workspace.extensionNavigatorData.fetch()
3333
}
3434
Spacer()
3535
}

CodeEdit/Features/NavigatorSidebar/FindNavigator/FindNavigatorResultList/FindNavigatorResultList.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Combine
1010

1111
struct FindNavigatorResultList: NSViewControllerRepresentable {
1212

13-
@StateObject
13+
@EnvironmentObject
1414
var workspace: WorkspaceDocument
1515

1616
@StateObject

CodeEdit/Features/NavigatorSidebar/FindNavigator/FindNavigatorView.swift

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
import SwiftUI
99

1010
struct FindNavigatorView: View {
11-
@ObservedObject
12-
private var state: WorkspaceDocument.SearchState
1311

14-
@ObservedObject
12+
@EnvironmentObject
1513
private var workspace: WorkspaceDocument
1614

15+
private var state: WorkspaceDocument.SearchState {
16+
workspace.searchState ?? .init(workspace)
17+
}
18+
1719
@State
1820
private var searchText: String = ""
1921

@@ -32,11 +34,6 @@ struct FindNavigatorView: View {
3234
state.searchResult.count
3335
}
3436

35-
init(workspace: WorkspaceDocument, state: WorkspaceDocument.SearchState) {
36-
self.workspace = workspace
37-
self.state = state
38-
}
39-
4037
var body: some View {
4138
VStack {
4239
VStack {
@@ -90,7 +87,7 @@ struct FindNavigatorView: View {
9087
.font(.system(size: 10))
9188
}
9289
Divider()
93-
FindNavigatorResultList(workspace: workspace)
90+
FindNavigatorResultList()
9491
}
9592
.onSubmit {
9693
state.search(searchText)

CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,8 @@ struct NavigatorSidebarToolbarBottom: View {
1111
@Environment(\.controlActiveState)
1212
private var activeState
1313

14-
@ObservedObject
15-
private var workspace: WorkspaceDocument
16-
17-
init(workspace: WorkspaceDocument) {
18-
self.workspace = workspace
19-
}
14+
@EnvironmentObject
15+
var workspace: WorkspaceDocument
2016

2117
var body: some View {
2218
HStack(spacing: 10) {

CodeEdit/Features/NavigatorSidebar/NavigatorSidebarView.swift

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,13 @@ struct NavigatorSidebarView: View {
2424
VStack {
2525
switch selection {
2626
case 0:
27-
ProjectNavigatorView(workspace: workspace)
27+
ProjectNavigatorView()
2828
case 1:
29-
SourceControlNavigatorView(workspace: workspace)
29+
SourceControlNavigatorView()
3030
case 2:
31-
FindNavigatorView(workspace: workspace, state: workspace.searchState ?? .init(workspace))
31+
FindNavigatorView()
3232
case 7:
33-
ExtensionNavigatorView(data: workspace.extensionNavigatorData)
34-
.environmentObject(workspace)
33+
ExtensionNavigatorView()
3534
default:
3635
Spacer()
3736
}
@@ -41,23 +40,18 @@ struct NavigatorSidebarView: View {
4140
.padding(.bottom, toolbarPadding)
4241
}
4342
.safeAreaInset(edge: .bottom) {
44-
switch selection {
45-
case 0:
46-
NavigatorSidebarToolbarBottom(workspace: workspace)
47-
.padding(.top, toolbarPadding)
48-
case 1:
49-
SourceControlToolbarBottom()
50-
.padding(.top, toolbarPadding)
51-
case 2:
52-
NavigatorSidebarToolbarBottom(workspace: workspace)
53-
.padding(.top, toolbarPadding)
54-
case 7:
55-
NavigatorSidebarToolbarBottom(workspace: workspace)
56-
.padding(.top, toolbarPadding)
57-
default:
58-
NavigatorSidebarToolbarBottom(workspace: workspace)
59-
.padding(.top, toolbarPadding)
43+
Group {
44+
switch selection {
45+
case 0:
46+
NavigatorSidebarToolbarBottom()
47+
case 1:
48+
SourceControlToolbarBottom()
49+
default:
50+
NavigatorSidebarToolbarBottom()
51+
}
6052
}
53+
.padding(.top, toolbarPadding)
6154
}
55+
.environmentObject(workspace)
6256
}
6357
}

CodeEdit/Features/NavigatorSidebar/ProjectNavigator/OutlineView/OutlineView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Combine
1111
/// Wraps an ``OutlineViewController`` inside a `NSViewControllerRepresentable`
1212
struct OutlineView: NSViewControllerRepresentable {
1313

14-
@StateObject
14+
@EnvironmentObject
1515
var workspace: WorkspaceDocument
1616

1717
@StateObject

CodeEdit/Features/NavigatorSidebar/ProjectNavigator/ProjectNavigatorView.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ import SwiftUI
1515
/// When selecting a file it will open in the editor.
1616
///
1717
struct ProjectNavigatorView: View {
18-
@ObservedObject var workspace: WorkspaceDocument
1918

2019
var body: some View {
21-
OutlineView(workspace: workspace)
20+
OutlineView()
2221
}
2322
}

CodeEdit/Features/NavigatorSidebar/SourceControlNavigator/SourceControlNavigatorView.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ import SwiftUI
99

1010
struct SourceControlNavigatorView: View {
1111

12-
@ObservedObject
12+
@EnvironmentObject
1313
private var workspace: WorkspaceDocument
1414

1515
@State
1616
private var selectedSection: Int = 0
1717

18-
init(workspace: WorkspaceDocument) {
19-
self.workspace = workspace
20-
}
21-
2218
var body: some View {
2319
VStack {
2420
SegmentedControl($selectedSection,

0 commit comments

Comments
 (0)