Added FeedCardView

This commit is contained in:
severin.memmishofer 2023-07-12 17:58:21 +02:00
parent fba4ed65e9
commit 6507b50666
8 changed files with 100 additions and 16 deletions

View File

@ -29,6 +29,8 @@
F5A4B1232A5D5F8B00F5AE01 /* BTPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */; }; F5A4B1232A5D5F8B00F5AE01 /* BTPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */; };
F5A4B1252A5D7A8D00F5AE01 /* DataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1242A5D7A8D00F5AE01 /* DataStore.swift */; }; F5A4B1252A5D7A8D00F5AE01 /* DataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1242A5D7A8D00F5AE01 /* DataStore.swift */; };
F5A4B1272A5D861E00F5AE01 /* SettingsEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */; }; F5A4B1272A5D861E00F5AE01 /* SettingsEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */; };
F5F1419C2A5EFA3600C81B1A /* LogEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5F1419B2A5EFA3600C81B1A /* LogEntryView.swift */; };
F5F1419E2A5EFA4700C81B1A /* FeedCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5F1419D2A5EFA4700C81B1A /* FeedCardView.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -74,6 +76,8 @@
F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BTPeripheral.swift; sourceTree = "<group>"; }; F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BTPeripheral.swift; sourceTree = "<group>"; };
F5A4B1242A5D7A8D00F5AE01 /* DataStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStore.swift; sourceTree = "<group>"; }; F5A4B1242A5D7A8D00F5AE01 /* DataStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStore.swift; sourceTree = "<group>"; };
F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEditView.swift; sourceTree = "<group>"; }; F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEditView.swift; sourceTree = "<group>"; };
F5F1419B2A5EFA3600C81B1A /* LogEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogEntryView.swift; sourceTree = "<group>"; };
F5F1419D2A5EFA4700C81B1A /* FeedCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedCardView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -176,6 +180,8 @@
96BD33152A5C403C007A6E53 /* PeeringView.swift */, 96BD33152A5C403C007A6E53 /* PeeringView.swift */,
F5A4B1202A5D4D1F00F5AE01 /* SettingsView.swift */, F5A4B1202A5D4D1F00F5AE01 /* SettingsView.swift */,
F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */, F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */,
F5F1419B2A5EFA3600C81B1A /* LogEntryView.swift */,
F5F1419D2A5EFA4700C81B1A /* FeedCardView.swift */,
); );
path = Views; path = Views;
sourceTree = "<group>"; sourceTree = "<group>";
@ -320,8 +326,10 @@
96BD33102A5C27B0007A6E53 /* NewFeedEntryView.swift in Sources */, 96BD33102A5C27B0007A6E53 /* NewFeedEntryView.swift in Sources */,
F5A4B1232A5D5F8B00F5AE01 /* BTPeripheral.swift in Sources */, F5A4B1232A5D5F8B00F5AE01 /* BTPeripheral.swift in Sources */,
F5A4B1252A5D7A8D00F5AE01 /* DataStore.swift in Sources */, F5A4B1252A5D7A8D00F5AE01 /* DataStore.swift in Sources */,
F5F1419C2A5EFA3600C81B1A /* LogEntryView.swift in Sources */,
F5847B6A2A59AB24009E28D4 /* FeedStore.swift in Sources */, F5847B6A2A59AB24009E28D4 /* FeedStore.swift in Sources */,
F5A4B1272A5D861E00F5AE01 /* SettingsEditView.swift in Sources */, F5A4B1272A5D861E00F5AE01 /* SettingsEditView.swift in Sources */,
F5F1419E2A5EFA4700C81B1A /* FeedCardView.swift in Sources */,
F581F59B2A5AE72F0081C383 /* BluetoothController.swift in Sources */, F581F59B2A5AE72F0081C383 /* BluetoothController.swift in Sources */,
96454F1D2A558EBC0040BEBD /* ContentView.swift in Sources */, 96454F1D2A558EBC0040BEBD /* ContentView.swift in Sources */,
F5A4B1212A5D4D1F00F5AE01 /* SettingsView.swift in Sources */, F5A4B1212A5D4D1F00F5AE01 /* SettingsView.swift in Sources */,

View File

@ -21,14 +21,14 @@ struct ContentView: View {
PeeringView() PeeringView()
.environmentObject(dataStore) .environmentObject(dataStore)
case 1: case 1:
FeedListView(feeds: []) FeedListView()
.environmentObject(dataStore) .environmentObject(dataStore)
case 2: case 2:
SettingsView() SettingsView()
.environmentObject(dataStore) .environmentObject(dataStore)
.navigationTitle("Settings") .navigationTitle("Settings")
default: default:
FeedListView(feeds: []) FeedListView()
.environmentObject(dataStore) .environmentObject(dataStore)
} }
HStack { HStack {

View File

@ -8,8 +8,9 @@
import SwiftUI import SwiftUI
@MainActor @MainActor
class FeedStore: ObservableObject { class FeedStore: ObservableObject, Identifiable {
let id: UUID = UUID()
@Published var feed: Feed @Published var feed: Feed
init(feed: Feed) { init(feed: Feed) {

View File

@ -13,7 +13,7 @@ struct LogEntry: Codable {
let sequenceNumber: Int let sequenceNumber: Int
let body: Body let body: Body
init(feedid: String, sequenceNumber: Int, body: Body) { init(feedid: String = "", sequenceNumber: Int = 0, body: Body = Body()) {
self.feedid = feedid self.feedid = feedid
self.sequenceNumber = sequenceNumber self.sequenceNumber = sequenceNumber
self.body = body self.body = body

View File

@ -0,0 +1,40 @@
//
// FeedDetailView.swift
// RippleChat
//
// Created by Severin Memmishofer on 12.07.23.
//
import SwiftUI
struct FeedCardView: View {
@EnvironmentObject var dataStore: DataStore
var feed: Feed
private var lastLogEntry: LogEntry {
if feed.feed.isEmpty {
return LogEntry()
} else {
return feed.feed.last!
}
}
var body: some View {
VStack (alignment: .leading) {
HStack {
Text("feedID: \(feed.feedID)")
Spacer()
Text("Sequence Number: \(lastLogEntry.sequenceNumber)")
}
Text("Log Entry: \(lastLogEntry.body.value)")
}
.padding()
}
}
struct FeedDetailView_Previews: PreviewProvider {
static var previews: some View {
FeedCardView(feed: Feed.sampleFeed)
.environmentObject(DataStore.sampleDataStore)
}
}

View File

@ -8,9 +8,6 @@
import SwiftUI import SwiftUI
struct FeedListView: View { struct FeedListView: View {
@State var feeds: [Feed]
@StateObject var store = FeedStore(feed: Feed.sampleFeed)
var feedStores = [FeedStore(feed: Feed.sampleFeed), FeedStore(feed: Feed.sampleFeed2)]
@EnvironmentObject var dataStore: DataStore @EnvironmentObject var dataStore: DataStore
var body: some View { var body: some View {
@ -20,23 +17,21 @@ struct FeedListView: View {
.foregroundColor(.accentColor) .foregroundColor(.accentColor)
Text("Hello, world!") Text("Hello, world!")
Button("Save Feed") { Button("Save Feed") {
Task { }
do { NavigationStack {
try await DataStore.sampleDataStore.saveFriends() List(dataStore.feedStores) { feedStore in
try await DataStore.sampleDataStore.savePersonalID() NavigationLink(destination: Text(feedStore.feed.feedID)) {
try await DataStore.sampleDataStore.saveFeedStores() FeedCardView(feed: feedStore.feed)
} catch {
fatalError(error.localizedDescription)
} }
} }
} }
Spacer()
NewFeedEntryView() NewFeedEntryView()
} }
} }
struct FeedListView_Previews: PreviewProvider { struct FeedListView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
FeedListView(feeds: []) FeedListView()
.environmentObject(DataStore.sampleDataStore)
} }
} }

View File

@ -0,0 +1,20 @@
//
// FeedView.swift
// RippleChat
//
// Created by Severin Memmishofer on 12.07.23.
//
import SwiftUI
struct FeedView: View {
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
}
}
struct FeedView_Previews: PreviewProvider {
static var previews: some View {
FeedView()
}
}

View File

@ -0,0 +1,20 @@
//
// LogEntryView.swift
// RippleChat
//
// Created by Severin Memmishofer on 12.07.23.
//
import SwiftUI
struct LogEntryView: View {
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
}
}
struct LogEntryView_Previews: PreviewProvider {
static var previews: some View {
LogEntryView()
}
}