diff --git a/src/PodcastsApp/PodcastsApp.xcodeproj/project.pbxproj b/src/PodcastsApp/PodcastsApp.xcodeproj/project.pbxproj index d5ebd08..0e21a6e 100644 --- a/src/PodcastsApp/PodcastsApp.xcodeproj/project.pbxproj +++ b/src/PodcastsApp/PodcastsApp.xcodeproj/project.pbxproj @@ -7,6 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + 1E92BCE42A13FD4E0026C641 /* PodcastListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E92BCE32A13FD4E0026C641 /* PodcastListItem.swift */; }; + 1E92BCE62A1400660026C641 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1E92BCE52A1400660026C641 /* Images.xcassets */; }; + 1E92BCE92A14015E0026C641 /* Images.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E92BCE82A14015E0026C641 /* Images.swift */; }; + 1E92BCEB2A14032D0026C641 /* Podcast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E92BCEA2A14032D0026C641 /* Podcast.swift */; }; + 1E92BCEF2A14319D0026C641 /* PodcastListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E92BCEE2A14319D0026C641 /* PodcastListView.swift */; }; + 1E92BCF12A1439000026C641 /* PodcastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E92BCF02A1439000026C641 /* PodcastView.swift */; }; + 1E92BCF32A1440B20026C641 /* LibraryMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E92BCF22A1440B20026C641 /* LibraryMenuItem.swift */; }; 1EFF14972A10E76A0018278E /* PodcastsAppApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14962A10E76A0018278E /* PodcastsAppApp.swift */; }; 1EFF14992A10E76A0018278E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14982A10E76A0018278E /* ContentView.swift */; }; 1EFF149B2A10E76C0018278E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1EFF149A2A10E76C0018278E /* Assets.xcassets */; }; @@ -14,7 +21,9 @@ 1EFF14A82A10E76D0018278E /* PodcastsAppTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14A72A10E76D0018278E /* PodcastsAppTests.swift */; }; 1EFF14B22A10E76D0018278E /* PodcastsAppUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14B12A10E76D0018278E /* PodcastsAppUITests.swift */; }; 1EFF14B42A10E76D0018278E /* PodcastsAppUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14B32A10E76D0018278E /* PodcastsAppUITestsLaunchTests.swift */; }; - 1EFF14C42A10FBDE0018278E /* PodcastsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14C32A10FBDE0018278E /* PodcastsListView.swift */; }; + 1EFF14C42A10FBDE0018278E /* LibraryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14C32A10FBDE0018278E /* LibraryView.swift */; }; + 1EFF14C72A1116D90018278E /* PodcastEpisode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14C62A1116D90018278E /* PodcastEpisode.swift */; }; + 1EFF14C92A1139E80018278E /* NowPlayingBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFF14C82A1139E80018278E /* NowPlayingBar.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -35,6 +44,13 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 1E92BCE32A13FD4E0026C641 /* PodcastListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastListItem.swift; sourceTree = ""; }; + 1E92BCE52A1400660026C641 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 1E92BCE82A14015E0026C641 /* Images.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Images.swift; sourceTree = ""; }; + 1E92BCEA2A14032D0026C641 /* Podcast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Podcast.swift; sourceTree = ""; }; + 1E92BCEE2A14319D0026C641 /* PodcastListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastListView.swift; sourceTree = ""; }; + 1E92BCF02A1439000026C641 /* PodcastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastView.swift; sourceTree = ""; }; + 1E92BCF22A1440B20026C641 /* LibraryMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryMenuItem.swift; sourceTree = ""; }; 1EFF14932A10E76A0018278E /* PodcastsApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PodcastsApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1EFF14962A10E76A0018278E /* PodcastsAppApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastsAppApp.swift; sourceTree = ""; }; 1EFF14982A10E76A0018278E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -45,7 +61,9 @@ 1EFF14AD2A10E76D0018278E /* PodcastsAppUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PodcastsAppUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1EFF14B12A10E76D0018278E /* PodcastsAppUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastsAppUITests.swift; sourceTree = ""; }; 1EFF14B32A10E76D0018278E /* PodcastsAppUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastsAppUITestsLaunchTests.swift; sourceTree = ""; }; - 1EFF14C32A10FBDE0018278E /* PodcastsListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastsListView.swift; sourceTree = ""; }; + 1EFF14C32A10FBDE0018278E /* LibraryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryView.swift; sourceTree = ""; }; + 1EFF14C62A1116D90018278E /* PodcastEpisode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastEpisode.swift; sourceTree = ""; }; + 1EFF14C82A1139E80018278E /* NowPlayingBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowPlayingBar.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -73,6 +91,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1E92BCE72A1401490026C641 /* Utils */ = { + isa = PBXGroup; + children = ( + 1E92BCE82A14015E0026C641 /* Images.swift */, + ); + path = Utils; + sourceTree = ""; + }; 1EFF148A2A10E76A0018278E = { isa = PBXGroup; children = ( @@ -96,10 +122,13 @@ 1EFF14952A10E76A0018278E /* PodcastsApp */ = { isa = PBXGroup; children = ( + 1E92BCE72A1401490026C641 /* Utils */, + 1EFF14C52A1116430018278E /* Model */, 1EFF14C02A10F3AC0018278E /* Views */, 1EFF14962A10E76A0018278E /* PodcastsAppApp.swift */, 1EFF14982A10E76A0018278E /* ContentView.swift */, 1EFF149A2A10E76C0018278E /* Assets.xcassets */, + 1E92BCE52A1400660026C641 /* Images.xcassets */, 1EFF149C2A10E76C0018278E /* Preview Content */, ); path = PodcastsApp; @@ -133,11 +162,25 @@ 1EFF14C02A10F3AC0018278E /* Views */ = { isa = PBXGroup; children = ( - 1EFF14C32A10FBDE0018278E /* PodcastsListView.swift */, + 1EFF14C32A10FBDE0018278E /* LibraryView.swift */, + 1EFF14C62A1116D90018278E /* PodcastEpisode.swift */, + 1EFF14C82A1139E80018278E /* NowPlayingBar.swift */, + 1E92BCE32A13FD4E0026C641 /* PodcastListItem.swift */, + 1E92BCEE2A14319D0026C641 /* PodcastListView.swift */, + 1E92BCF02A1439000026C641 /* PodcastView.swift */, + 1E92BCF22A1440B20026C641 /* LibraryMenuItem.swift */, ); path = Views; sourceTree = ""; }; + 1EFF14C52A1116430018278E /* Model */ = { + isa = PBXGroup; + children = ( + 1E92BCEA2A14032D0026C641 /* Podcast.swift */, + ); + path = Model; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -242,6 +285,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1E92BCE62A1400660026C641 /* Images.xcassets in Resources */, 1EFF149E2A10E76C0018278E /* Preview Assets.xcassets in Resources */, 1EFF149B2A10E76C0018278E /* Assets.xcassets in Resources */, ); @@ -268,9 +312,17 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1E92BCE92A14015E0026C641 /* Images.swift in Sources */, + 1E92BCF32A1440B20026C641 /* LibraryMenuItem.swift in Sources */, 1EFF14992A10E76A0018278E /* ContentView.swift in Sources */, - 1EFF14C42A10FBDE0018278E /* PodcastsListView.swift in Sources */, + 1E92BCEF2A14319D0026C641 /* PodcastListView.swift in Sources */, + 1EFF14C42A10FBDE0018278E /* LibraryView.swift in Sources */, 1EFF14972A10E76A0018278E /* PodcastsAppApp.swift in Sources */, + 1EFF14C92A1139E80018278E /* NowPlayingBar.swift in Sources */, + 1E92BCF12A1439000026C641 /* PodcastView.swift in Sources */, + 1EFF14C72A1116D90018278E /* PodcastEpisode.swift in Sources */, + 1E92BCEB2A14032D0026C641 /* Podcast.swift in Sources */, + 1E92BCE42A13FD4E0026C641 /* PodcastListItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -426,6 +478,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"PodcastsApp/Preview Content\""; @@ -454,6 +507,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"PodcastsApp/Preview Content\""; diff --git a/src/PodcastsApp/PodcastsApp/Assets.xcassets/AccentColor.colorset/Contents.json b/src/PodcastsApp/PodcastsApp/Assets.xcassets/AccentColor.colorset/Contents.json index eb87897..42e5b65 100644 --- a/src/PodcastsApp/PodcastsApp/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/src/PodcastsApp/PodcastsApp/Assets.xcassets/AccentColor.colorset/Contents.json @@ -1,6 +1,23 @@ { "colors" : [ { + "color" : { + "platform" : "universal", + "reference" : "systemPurpleColor" + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "platform" : "universal", + "reference" : "systemPurpleColor" + }, "idiom" : "universal" } ], diff --git a/src/PodcastsApp/PodcastsApp/Assets.xcassets/AppIcon.appiconset/1024.png b/src/PodcastsApp/PodcastsApp/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000..751cd64 Binary files /dev/null and b/src/PodcastsApp/PodcastsApp/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/src/PodcastsApp/PodcastsApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/src/PodcastsApp/PodcastsApp/Assets.xcassets/AppIcon.appiconset/Contents.json index 13613e3..cff1680 100644 --- a/src/PodcastsApp/PodcastsApp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/src/PodcastsApp/PodcastsApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,6 +1,7 @@ { "images" : [ { + "filename" : "1024.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" diff --git a/src/PodcastsApp/PodcastsApp/ContentView.swift b/src/PodcastsApp/PodcastsApp/ContentView.swift index 078ee4f..0b6ebd5 100644 --- a/src/PodcastsApp/PodcastsApp/ContentView.swift +++ b/src/PodcastsApp/PodcastsApp/ContentView.swift @@ -8,30 +8,62 @@ import SwiftUI struct ContentView: View { + @State private var selection: Tab = .library + + enum Tab { + case listen + case explore + case library + case search + } + var body: some View { - TabView { - PodcastsListView() + TabView(selection: $selection) { + LibraryView() .tabItem({ Label("Écouter", systemImage: "play.circle.fill") }) - PodcastsListView() + .tag(Tab.listen) + LibraryView() .tabItem({ Label("Explorer", systemImage: "square.grid.2x2.fill") }) - PodcastsListView() + .tag(Tab.explore) + LibraryView() .tabItem({ Label("Bibliothèque", systemImage: "square.stack.fill") }) - PodcastsListView() + .tag(Tab.library) + LibraryView() .tabItem({ Label("Rechercher", systemImage: "magnifyingglass") }) + .tag(Tab.search) + } + .onAppear { + let appearance = UITabBarAppearance() + appearance.backgroundEffect = UIBlurEffect(style: .systemUltraThinMaterial) + appearance.backgroundColor = UIColor(Color.black.opacity(0.2)) + + // Use this appearance when scrolling behind the TabView: + UITabBar.appearance().standardAppearance = appearance + // Use this appearance when scrolled all the way up: + UITabBar.appearance().scrollEdgeAppearance = appearance } + .overlay(VStack { + Spacer() + NowPlayingBar() + .frame(height: 162) + }) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { - ContentView() + Group { + ContentView() + ContentView().preferredColorScheme(.dark) + } } } + diff --git a/src/PodcastsApp/PodcastsApp/Images.xcassets/Contents.json b/src/PodcastsApp/PodcastsApp/Images.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/src/PodcastsApp/PodcastsApp/Images.xcassets/underscore_podcast.imageset/Contents.json b/src/PodcastsApp/PodcastsApp/Images.xcassets/underscore_podcast.imageset/Contents.json new file mode 100644 index 0000000..328c25d --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Images.xcassets/underscore_podcast.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "underscore.jpeg", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/src/PodcastsApp/PodcastsApp/Images.xcassets/underscore_podcast.imageset/underscore.jpeg b/src/PodcastsApp/PodcastsApp/Images.xcassets/underscore_podcast.imageset/underscore.jpeg new file mode 100644 index 0000000..4fe97f5 Binary files /dev/null and b/src/PodcastsApp/PodcastsApp/Images.xcassets/underscore_podcast.imageset/underscore.jpeg differ diff --git a/src/PodcastsApp/PodcastsApp/Model/Podcast.swift b/src/PodcastsApp/PodcastsApp/Model/Podcast.swift new file mode 100644 index 0000000..9afa26f --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Model/Podcast.swift @@ -0,0 +1,12 @@ +// +// Podcast.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 16/05/2023. +// + +import Foundation + +struct Podcast { + +} diff --git a/src/PodcastsApp/PodcastsApp/Utils/Images.swift b/src/PodcastsApp/PodcastsApp/Utils/Images.swift new file mode 100644 index 0000000..6f469cd --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Utils/Images.swift @@ -0,0 +1,12 @@ +// +// Images.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 16/05/2023. +// + +import Foundation + +//static class Images { +// +//} diff --git a/src/PodcastsApp/PodcastsApp/Views/LibraryMenuItem.swift b/src/PodcastsApp/PodcastsApp/Views/LibraryMenuItem.swift new file mode 100644 index 0000000..e05ec97 --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Views/LibraryMenuItem.swift @@ -0,0 +1,35 @@ +// +// LibraryMenuItem.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 17/05/2023. +// + +import SwiftUI + +struct LibraryMenuItem: View { + @State var imageName: String + @State var text: String + + var body: some View { + HStack { + Image(systemName: imageName) + .foregroundColor(.accentColor) + Text(text) + .bold() + } + } +} + +struct LibraryMenuItem_Previews: PreviewProvider { + static var previews: some View { + Group { + LibraryMenuItem(imageName: "square.stack", text: "Podcasts") + LibraryMenuItem(imageName: "checklist.unchecked", text: "Chaînes") + + LibraryMenuItem(imageName: "square.stack", text: "Podcasts").preferredColorScheme(.dark) + LibraryMenuItem(imageName: "checklist.unchecked", text: "Chaînes").preferredColorScheme(.dark) + } + + } +} diff --git a/src/PodcastsApp/PodcastsApp/Views/LibraryView.swift b/src/PodcastsApp/PodcastsApp/Views/LibraryView.swift new file mode 100644 index 0000000..1dfd7d0 --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Views/LibraryView.swift @@ -0,0 +1,79 @@ +// +// PodcastsListView.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 14/05/2023. +// + +import SwiftUI + +struct LibraryView: View { + let columns = [GridItem(.flexible()), GridItem(.flexible())] + + var body: some View { + NavigationStack { + List { + NavigationLink(destination: PodcastListView()) { + LibraryMenuItem(imageName: "square.stack", text: "Podcasts") + } + NavigationLink(destination: PodcastListView()) { + LibraryMenuItem(imageName: "checklist.unchecked", text: "Chaînes") + } + NavigationLink(destination: PodcastListView()) { + LibraryMenuItem(imageName: "bookmark", text: "Enregistrés") + } + NavigationLink(destination: PodcastListView()) { + LibraryMenuItem(imageName: "arrow.down.circle", text: "Téléchargés") + } + NavigationLink(destination: PodcastListView()) { + LibraryMenuItem(imageName: "clock", text: "Derniers épisodes") + } + + VStack { + Text("Mis à jour récemment") + .font(.title2) + .bold() + + LazyVGrid(columns: columns, spacing: 20) { + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + } + } + .padding(.top) + } + .navigationTitle("Bibliothèque") + } + } +} + +struct PodcastsListView_Previews: PreviewProvider { + static var previews: some View { + Group { + LibraryView() + LibraryView().preferredColorScheme(.dark) + } + + } +} diff --git a/src/PodcastsApp/PodcastsApp/Views/NowPlayingBar.swift b/src/PodcastsApp/PodcastsApp/Views/NowPlayingBar.swift new file mode 100644 index 0000000..776dc23 --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Views/NowPlayingBar.swift @@ -0,0 +1,51 @@ +// +// NowPlayingBar.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 14/05/2023. +// + +import SwiftUI + +struct NowPlayingBar : View { + var body: some View { + ZStack { + Rectangle() + .foregroundColor(Color.black.opacity(0.2)) + .frame(width: UIScreen.main.bounds.size.width, height: 65) + HStack { + Button(action: {}) { + HStack { + Image("Cover") + .resizable() + .frame(width: 45, height: 45) + .shadow(radius: 6, x: 0, y: 3) + .padding(.leading) + Text("Shake It Off").padding(.leading, 10) + Spacer() + } + } + .buttonStyle(PlainButtonStyle()) + + Button(action: {}) { + Image(systemName: "play.fill").font(.title3) + } + .buttonStyle(PlainButtonStyle()).padding(.horizontal) + + Button(action: {}) { + Image(systemName: "forward.fill").font(.title3) + } + .buttonStyle(PlainButtonStyle()) + .padding(.trailing, 30) + } + } + + } + +} + +struct NowPlayingBar_Previews: PreviewProvider { + static var previews: some View { + NowPlayingBar() + } +} diff --git a/src/PodcastsApp/PodcastsApp/Views/PodcastEpisode.swift b/src/PodcastsApp/PodcastsApp/Views/PodcastEpisode.swift new file mode 100644 index 0000000..aa5e192 --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Views/PodcastEpisode.swift @@ -0,0 +1,46 @@ +// +// PodcastEpisodeDetail.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 14/05/2023. +// + +import SwiftUI + +struct PodcastEpisode: View { + var body: some View { + VStack(alignment: .leading) { + Text("Samedi") + .font(.caption) + .textCase(.uppercase) + Text("Title of episode") + .font(.title2) + Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do") + HStack { + Button(action: {}) { + Image(systemName: "play.fill") + } + .frame(width: 33, height: 33) + .foregroundColor(Color.purple) + .background(Color.gray) + .clipShape(Circle()) + + Text("52 min") + Spacer() + Image(systemName: "ellipsis") + + } + } + .padding() + } +} + +struct PodcastEpisodeDetail_Previews: PreviewProvider { + static var previews: some View { + Group { + PodcastEpisode() + PodcastEpisode().preferredColorScheme(.dark) + } + + } +} diff --git a/src/PodcastsApp/PodcastsApp/Views/PodcastListItem.swift b/src/PodcastsApp/PodcastsApp/Views/PodcastListItem.swift new file mode 100644 index 0000000..bdef4bf --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Views/PodcastListItem.swift @@ -0,0 +1,37 @@ +// +// PodcastListDetail.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 16/05/2023. +// + +import SwiftUI + +struct PodcastListItem: View { + var body: some View { + VStack(alignment: .center) { + Image(uiImage: UIImage(named: "underscore_podcast")!) + .resizable() + .aspectRatio(contentMode: .fit) + .cornerRadius(5) + VStack(alignment: .leading) { + Text("Underscore_") + HStack { + Text("Mise à jour : ") + Text("Mardi") + } + } + } + .frame(width: 200, height: 200) + + } +} + +struct PodcastListDetail_Previews: PreviewProvider { + static var previews: some View { + Group { + PodcastListItem() + PodcastListItem().preferredColorScheme(.dark) + } + } +} diff --git a/src/PodcastsApp/PodcastsApp/Views/PodcastListView.swift b/src/PodcastsApp/PodcastsApp/Views/PodcastListView.swift new file mode 100644 index 0000000..d577879 --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Views/PodcastListView.swift @@ -0,0 +1,62 @@ +// +// PodcastsList.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 16/05/2023. +// + +import SwiftUI + +struct PodcastListView: View { + let columns = [GridItem(.flexible()), GridItem(.flexible())] + + var body: some View { + NavigationStack { + List { + LazyVGrid(columns: columns, spacing: 20) { + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + NavigationLink(destination: PodcastView()) { + PodcastListItem() + } + } + } + .navigationTitle("Podcasts") + .toolbar { + Button(action: {}) { + Image(systemName: "ellipsis") + } + .clipShape(Circle()) + } + } + + } +} + +struct PodcastsList_Previews: PreviewProvider { + static var previews: some View { + Group { + PodcastListView() + PodcastListView().preferredColorScheme(.dark) + } + } +} diff --git a/src/PodcastsApp/PodcastsApp/Views/PodcastView.swift b/src/PodcastsApp/PodcastsApp/Views/PodcastView.swift new file mode 100644 index 0000000..953dc1c --- /dev/null +++ b/src/PodcastsApp/PodcastsApp/Views/PodcastView.swift @@ -0,0 +1,63 @@ +// +// PodcastInfoDetail.swift +// PodcastsApp +// +// Created by BREUIL Yohann on 17/05/2023. +// + +import SwiftUI + +struct PodcastView: View { + var body: some View { + NavigationStack { + List { + VStack { + Image(uiImage: UIImage(named: "underscore_podcast")!) + .resizable() + .aspectRatio(contentMode: .fit) + .cornerRadius(5) + Text("Underscore") + Text("Micode") + Button(action: {}) { + HStack { + Image(systemName: "play.fill") + Text("Reprendre") + } + } + .clipShape(Rectangle()) + .background(.gray) + .blur(radius: 0.5) + + List { + PodcastEpisode() + PodcastEpisode() + PodcastEpisode() + } + } + .toolbar { + HStack { + Button(action: {}) { + Image(systemName: "checkmark") + } + .clipShape(Circle()) + + Button(action: {}) { + Image(systemName: "ellipsis") + } + .clipShape(Circle()) + } + } + } + } + } +} + +struct PodcastInfoDetail_Previews: PreviewProvider { + static var previews: some View { + Group { + PodcastView() + PodcastView().preferredColorScheme(.dark) + } + + } +} diff --git a/src/PodcastsApp/PodcastsApp/Views/PodcastsListView.swift b/src/PodcastsApp/PodcastsApp/Views/PodcastsListView.swift deleted file mode 100644 index 25b4eaa..0000000 --- a/src/PodcastsApp/PodcastsApp/Views/PodcastsListView.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// PodcastsListView.swift -// PodcastsApp -// -// Created by BREUIL Yohann on 14/05/2023. -// - -import SwiftUI - -struct PodcastsListView: View { - var body: some View { - Text("Coming soon") - } -} - -struct PodcastsListView_Previews: PreviewProvider { - static var previews: some View { - PodcastsListView() - } -}