@@ -67,22 +67,28 @@ struct SampleProjectsView: View {
67
67
}
68
68
69
69
struct SampleProjectsList : View {
70
+ // displays loading screen when tapped
71
+ @State private var urlLoadingForPresentation : URL ?
72
+
70
73
@Bindable var store : StitchStore
71
74
72
75
var body : some View {
73
76
VStack ( alignment: . leading) {
74
77
HStack {
75
78
SampleProjectView ( store: store,
79
+ urlLoadingForPresentation: $urlLoadingForPresentation,
76
80
data: . init( projectName: " Monthly Stays (Josh Pekera) " ,
77
81
projectURL: " Monthly_Stays/Monthly%20Stays%20(Josh%20Pekera).stitch " ,
78
82
projectAssetName: " MonthlyStays " )
79
83
)
80
84
SampleProjectView ( store: store,
85
+ urlLoadingForPresentation: $urlLoadingForPresentation,
81
86
data: . init( projectName: " Music Player (GK3) " ,
82
87
projectURL: " Music_Player/Music%20Player%20(GK3).stitch " ,
83
88
projectAssetName: " MusicPlayer " )
84
89
)
85
90
SampleProjectView ( store: store,
91
+ urlLoadingForPresentation: $urlLoadingForPresentation,
86
92
data: . init( projectName: " Hello World " ,
87
93
projectURL: " Hello_World/Hello%20World.stitch " ,
88
94
projectAssetName: " HelloWorld " )
@@ -91,11 +97,13 @@ struct SampleProjectsList: View {
91
97
92
98
HStack {
93
99
SampleProjectView ( store: store,
100
+ urlLoadingForPresentation: $urlLoadingForPresentation,
94
101
data: . init( projectName: " Wallet " ,
95
102
projectURL: " Wallet/Wallet%20(Wayne%20Sang).stitch " ,
96
103
projectAssetName: " Wallet " )
97
104
)
98
105
SampleProjectView ( store: store,
106
+ urlLoadingForPresentation: $urlLoadingForPresentation,
99
107
data: . init( projectName: " AR Robot (Elliot) " ,
100
108
projectURL: " AR_Robot/AR%20Robot%20(Elliot).stitch " ,
101
109
projectAssetName: " ARRobot " )
@@ -135,25 +143,41 @@ struct SampleProjectsList: View {
135
143
}
136
144
137
145
struct SampleProjectView : View {
138
- // displays loading screen when tapped
139
- @State private var isLoadingForPresentation = false
140
146
141
147
@Bindable var store : StitchStore
142
148
149
+ // displays loading screen when tapped
150
+ @Binding var urlLoadingForPresentation : URL ?
151
+
143
152
let data : SampleProjectData ?
144
153
154
+ var isLoadingForPresentation : Bool {
155
+ urlLoadingForPresentation == data? . url
156
+ }
157
+
145
158
var body : some View {
146
159
if let data = data {
147
160
Button {
148
- self . isLoadingForPresentation = true
161
+ // Only load project if another isn't loading
162
+ guard !self . isLoadingForPresentation else {
163
+ return
164
+ }
165
+
166
+ DispatchQueue . main. async {
167
+ self . urlLoadingForPresentation = data. url
168
+ }
149
169
150
170
Task ( priority: . high) { [ weak store] in
151
171
if let store = store {
152
- await importStitchSampleProject ( sampleProjectURL: data. url,
153
- store: store)
154
-
155
- await MainActor . run { [ weak store] in
156
- store? . showsSampleProjectModal = false
172
+ do {
173
+ try await importStitchSampleProject ( sampleProjectURL: data. url,
174
+ store: store)
175
+
176
+ await MainActor . run { [ weak store] in
177
+ store? . showsSampleProjectModal = false
178
+ }
179
+ } catch {
180
+ store. displayError ( error: . customError( " Sample project could not load, please check your internet connection and try again. " ) )
157
181
}
158
182
}
159
183
}
0 commit comments