mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
[ADD] WIP: Promoted category cards and app list filter button in BrowseView
This commit is contained in:
@@ -62,10 +62,13 @@ class NotificationManager: ObservableObject {
|
|||||||
detailText = underlyingError?.localizedDescription ?? error.localizedRecoverySuggestion
|
detailText = underlyingError?.localizedDescription ?? error.localizedRecoverySuggestion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.showNotification(title: text, detailText: detailText)
|
||||||
|
}
|
||||||
|
|
||||||
|
func showNotification(title: String, detailText: String?) {
|
||||||
let notificationId = UUID()
|
let notificationId = UUID()
|
||||||
|
|
||||||
self.notifications[notificationId] = Notification(id: notificationId, title: text, message: detailText)
|
self.notifications[notificationId] = Notification(id: notificationId, title: title, message: detailText)
|
||||||
|
|
||||||
let dismissWorkItem = DispatchWorkItem {
|
let dismissWorkItem = DispatchWorkItem {
|
||||||
self.notifications.removeValue(forKey: notificationId)
|
self.notifications.removeValue(forKey: notificationId)
|
||||||
|
|||||||
@@ -31,14 +31,26 @@ struct BrowseView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
LazyVStack(spacing: 32) {
|
VStack(alignment: .leading) {
|
||||||
ForEach(filteredApps, id: \.bundleIdentifier) { app in
|
if searchText.isEmpty {
|
||||||
NavigationLink {
|
VStack(alignment: .leading, spacing: 32) {
|
||||||
AppDetailView(storeApp: app)
|
promotedCategoriesView
|
||||||
} label: {
|
|
||||||
BrowseAppPreviewView(storeApp: app)
|
Text("All Apps")
|
||||||
|
.font(.title2)
|
||||||
|
.bold()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LazyVStack(spacing: 32) {
|
||||||
|
ForEach(filteredApps, id: \.bundleIdentifier) { app in
|
||||||
|
NavigationLink {
|
||||||
|
AppDetailView(storeApp: app)
|
||||||
|
} label: {
|
||||||
|
BrowseAppPreviewView(storeApp: app)
|
||||||
|
}
|
||||||
|
.buttonStyle(PlainButtonStyle())
|
||||||
}
|
}
|
||||||
.buttonStyle(PlainButtonStyle())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding()
|
.padding()
|
||||||
@@ -47,7 +59,7 @@ struct BrowseView: View {
|
|||||||
.background(Color(UIColor.systemGroupedBackground).ignoresSafeArea())
|
.background(Color(UIColor.systemGroupedBackground).ignoresSafeArea())
|
||||||
.navigationTitle("Browse")
|
.navigationTitle("Browse")
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .navigationBarTrailing) {
|
ToolbarItem(placement: .navigationBarLeading) {
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
self.isShowingSourcesView = true
|
self.isShowingSourcesView = true
|
||||||
} label: {
|
} label: {
|
||||||
@@ -59,6 +71,37 @@ struct BrowseView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ToolbarItem(placement: .navigationBarTrailing) {
|
||||||
|
SwiftUI.Button {
|
||||||
|
|
||||||
|
} label: {
|
||||||
|
Image(systemName: "line.3.horizontal.decrease.circle")
|
||||||
|
.imageScale(.large)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var promotedCategoriesView: some View {
|
||||||
|
VStack {
|
||||||
|
HStack {
|
||||||
|
Text("Promoted Categories")
|
||||||
|
.font(.title2)
|
||||||
|
.bold()
|
||||||
|
Spacer()
|
||||||
|
SwiftUI.Button(action: {}, label: { Text("Show all") })
|
||||||
|
.font(.callout)
|
||||||
|
}
|
||||||
|
|
||||||
|
LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())]) {
|
||||||
|
PromotedCategoryView()
|
||||||
|
.shadow(color: .black.opacity(0.1), radius: 8, y: 5)
|
||||||
|
|
||||||
|
PromotedCategoryView()
|
||||||
|
.shadow(color: .black.opacity(0.1), radius: 8, y: 5)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,3 +111,31 @@ struct BrowseView_Previews: PreviewProvider {
|
|||||||
BrowseView()
|
BrowseView()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct PromotedCategoryView: View {
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
ZStack {
|
||||||
|
GeometryReader { proxy in
|
||||||
|
RadialGradient(colors: [
|
||||||
|
Color(UIColor(hexString: "477E84")!),
|
||||||
|
Color(UIColor.secondarySystemBackground),
|
||||||
|
Color(UIColor.secondarySystemBackground),
|
||||||
|
Color(UIColor(hexString: "C38FF5")!)
|
||||||
|
], center: .bottomLeading, startRadius: 0, endRadius: proxy.size.width)
|
||||||
|
}
|
||||||
|
|
||||||
|
HStack {
|
||||||
|
Image(systemName: "dpad.right.filled")
|
||||||
|
Text("Games &\nEmulators")
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
}
|
||||||
|
.foregroundColor(.accentColor)
|
||||||
|
.padding()
|
||||||
|
}
|
||||||
|
.aspectRatio(21/9, contentMode: .fill)
|
||||||
|
.frame(maxWidth: .infinity)
|
||||||
|
.clipShape(RoundedRectangle(cornerRadius: 12))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user