Skip to content
Snippets Groups Projects
Commit 4be69b61 authored by Katharina J. Kühn's avatar Katharina J. Kühn
Browse files

#4 finish sidemenu

parent 9bebba99
No related branches found
No related tags found
1 merge request!3Fb 4 side menu content
//
// SideMenuView.swift
// RSS_Reader
//
// Created by Johannes Grothe on 31.10.20.
//
import SwiftUI
/**
Content of the side Menu
*/
struct MenuContent: View {
@ObservedObject var model: Model = .shared
init() {
UITableView.appearance().backgroundColor = .clear
UITableViewCell.appearance().backgroundColor = .clear
}
func createMenuItem() -> [MenuItem] {
var menu_item_list: [MenuItem] = []
for feed_provider in model.feed_data {
var feed_provider_item = MenuItem(id: UUID(), name: feed_provider.name, image: feed_provider.icon.url, subMenuItems: [])
for sub_feed in feed_provider.feeds {
let sub_feed_item = MenuItem(id: UUID(), name: sub_feed.name, image: nil, subMenuItems: nil)
feed_provider_item.subMenuItems?.append(sub_feed_item)
}
menu_item_list.append(feed_provider_item)
}
return menu_item_list
}
var body: some View {
VStack {
Text("Feeds")
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
// .multilineTextAlignment(.leading)
Button(action: {
print("Show All Feeds Button pressed")
}) {
// Label("All", systemImage: "newspaper")
HStack {
Image(systemName: "newspaper")
.font(.title)
.padding()
Text("All")
.font(.title)
Spacer()
}
.background(Color("LightGreen"))
.frame(minWidth: 0, maxWidth: .infinity)
}
Button(action: {
print("Saved Button pressed")
}) {
HStack {
Image(systemName: "tray.2")
.font(.title)
.padding()
Text("Saved")
.font(.title)
Spacer()
}
.background(Color("LightGreen"))
.frame(minWidth: 0, maxWidth: .infinity)
}
List(createMenuItem(), children: \.subMenuItems) { item in
// List(sampleMenuItems, children: \.subMenuItems) { item in
// List {
HStack {
if item.image != nil {
Image(item.image!)
.resizable()
.scaledToFit()
.frame(width: 50, height: 50)
}
Text(item.name)
.font(.system(.title3, design: .rounded))
.bold()
Spacer()
}
}
}
}
}
struct MenuItem: Identifiable {
var id = UUID()
var name: String
var image: String?
var subMenuItems: [MenuItem]?
}
// Main menu items
let sampleMenuItems = [ MenuItem(name: "All", image: "newspaper", subMenuItems: nil),
MenuItem(name: "Grinders", image: "swift-mini", subMenuItems: nil),
MenuItem(name: "Other Equipment", image: "espresso-ep", subMenuItems: nil)
]
// Main menu items
//let sampleMenuItems = [ MenuItem(name: "Espresso Machines", image: "linea-mini", subMenuItems: nil),
// MenuItem(name: "Grinders", image: "swift-mini", subMenuItems: nil),
// MenuItem(name: "Other Equipment", image: "espresso-ep", subMenuItems: nil)
// ]
/**
View for the side menu
*/
struct SideMenuView: View {
let width: CGFloat
let isOpen: Bool
let menuClose: () -> Void
var body: some View {
ZStack {
GeometryReader { _ in
EmptyView()
}
.background(Color.gray.opacity(0.1))
.opacity(self.isOpen ? 1.0 : 0.0)
.animation(Animation.easeIn.delay(0.25))
.onTapGesture {
self.menuClose()
}
HStack {
MenuContent()
.frame(width: self.width)
.background(Color.white)
.offset(x: self.isOpen ? 0 : -self.width)
.animation(.default)
Spacer()
}
}
}
}
struct SideMenuView_Previews: PreviewProvider {
static var previews: some View {
/*@START_MENU_TOKEN@*/Text("Hello, World!")/*@END_MENU_TOKEN@*/
}
}
/**
###########
//
// SideMenuView.swift
// RSS_Reader
//
// Created by Johannes Grothe on 31.10.20.
//
import SwiftUI
/**
......@@ -180,23 +12,46 @@ struct SideMenuView_Previews: PreviewProvider {
UITableViewCell.appearance().backgroundColor = .clear
}
func createMenuItem() -> [MenuItem] {
var menu_item_list: [MenuItem] = []
/**
creates a list with feed items
*/
func createFeedItem() -> [MenuItem] {
var feed_item_list: [MenuItem] = []
for feed_provider in model.feed_data {
var feed_provider_item = MenuItem(id: UUID(), name: feed_provider.name, image: feed_provider.icon.url, subMenuItems: [])
var feed_provider_item = MenuItem(id: UUID(), name: feed_provider.name, image: nil, subMenuItems: [])
for sub_feed in feed_provider.feeds {
let sub_feed_item = MenuItem(id: UUID(), name: sub_feed.name, image: nil, subMenuItems: nil)
feed_provider_item.subMenuItems?.append(sub_feed_item)
}
menu_item_list.append(feed_provider_item)
feed_item_list.append(feed_provider_item)
}
return menu_item_list
return feed_item_list
}
/**
creates a list with collection items
*/
func createCollectionItem() -> [MenuItem] {
var collection_item_list: [MenuItem] = []
for feed_provider in model.collection_data {
let collection_provider_item = MenuItem(id: UUID(), name: feed_provider.name, image: nil, subMenuItems: [])
collection_item_list.append(collection_provider_item)
}
return collection_item_list
}
/**
the view
*/
var body: some View {
/**
displayes the content of the sidemenu
*/
VStack {
Text("Feeds")
......@@ -206,7 +61,10 @@ struct SideMenuView_Previews: PreviewProvider {
Button(action: {
print("Show All Feeds Button pressed")
}) {
/**
displayes booksmark- and all-button
*/
HStack {
Image(systemName: "newspaper")
.font(.system(size: 20))
......@@ -238,13 +96,32 @@ struct SideMenuView_Previews: PreviewProvider {
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
//ToDo: Add here collections logic
List(createCollectionItem(), children: \.subMenuItems) { item in
/**
displayes the collections
*/
HStack {
Image(systemName: "questionmark.circle")
.resizable()
.scaledToFit()
.frame(width: 20, height: 20)
Text(item.name)
.font(.system(size: 20))//, design: .rounded))
.frame(maxWidth: .infinity, alignment: .leading)
}
}
Text("Newspaper")
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
List(createMenuItem(), children: \.subMenuItems) { item in
List(createFeedItem(), children: \.subMenuItems) { item in
/**
displayes the feed provider an his subfeeds
*/
HStack {
if item.image != nil && item.image != "" {
......@@ -269,10 +146,25 @@ struct SideMenuView_Previews: PreviewProvider {
}
}
/**
an menu item
*/
struct MenuItem: Identifiable {
/**
id of the menu item
*/
var id = UUID()
/**
name of the menu item
*/
var name: String
/**
of the menu item
*/
var image: String?
/**
of the menu item
*/
var subMenuItems: [MenuItem]?
}
......@@ -280,10 +172,25 @@ struct SideMenuView_Previews: PreviewProvider {
View for the side menu
*/
struct SideMenuView: View {
let width: CGFloat
/**
the width of the sidemenu
*/
let width: CGFloat
/**
contain informations about the visibil status of the sidemenu
*/
let isOpen: Bool
/**
closed the sidemenu
*/
let menuClose: () -> Void
/**
contain also informations about the visibil status of the sidemenu
*/
@State var showMenu: Bool = true
var body: some View {
......@@ -298,6 +205,9 @@ struct SideMenuView_Previews: PreviewProvider {
}
}
/**
slides the sidemenu over the main view
*/
ZStack {
GeometryReader { _ in
EmptyView()
......@@ -331,5 +241,4 @@ struct SideMenuView_Previews: PreviewProvider {
//}
*/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment