mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-31 12:41:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import Defaults
 | |
| import SwiftUI
 | |
| 
 | |
| struct EditFavorites: View {
 | |
|     @EnvironmentObject<PlaylistsModel> private var playlistsModel
 | |
| 
 | |
|     private var model = FavoritesModel.shared
 | |
| 
 | |
|     @Default(.favorites) private var favorites
 | |
| 
 | |
|     var body: some View {
 | |
|         VStack {
 | |
|             ScrollView {
 | |
|                 ForEach(favorites) { item in
 | |
|                     HStack {
 | |
|                         Text(label(item))
 | |
| 
 | |
|                         Spacer()
 | |
|                         HStack(spacing: 30) {
 | |
|                             Button {
 | |
|                                 model.moveUp(item)
 | |
|                             } label: {
 | |
|                                 Image(systemName: "arrow.up")
 | |
|                             }
 | |
| 
 | |
|                             Button {
 | |
|                                 model.moveDown(item)
 | |
|                             } label: {
 | |
|                                 Image(systemName: "arrow.down")
 | |
|                             }
 | |
| 
 | |
|                             Button {
 | |
|                                 model.remove(item)
 | |
|                             } label: {
 | |
|                                 Image(systemName: "trash")
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 .padding(.trailing, 40)
 | |
| 
 | |
|                 Divider()
 | |
|                     .padding(20)
 | |
| 
 | |
|                 ForEach(model.addableItems()) { item in
 | |
|                     HStack {
 | |
|                         Text(label(item))
 | |
| 
 | |
|                         Spacer()
 | |
| 
 | |
|                         Button {
 | |
|                             model.add(item)
 | |
|                         } label: {
 | |
|                             Label("Add to Favorites", systemImage: "heart")
 | |
|                                 .font(.system(size: 30))
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 .padding(.trailing, 40)
 | |
| 
 | |
|                 HStack {
 | |
|                     Text("Add Channels, Playlists and Searches to Favorites using")
 | |
|                     Button {} label: {
 | |
|                         Label("Add to Favorites", systemImage: "heart")
 | |
|                             .labelStyle(.iconOnly)
 | |
|                     }
 | |
|                     .disabled(true)
 | |
|                 }
 | |
|                 .foregroundColor(.secondary)
 | |
|                 .padding(.top, 80)
 | |
|             }
 | |
|             .frame(width: 1000, alignment: .leading)
 | |
|         }
 | |
|         .navigationTitle("Favorites")
 | |
|     }
 | |
| 
 | |
|     func label(_ item: FavoriteItem) -> String {
 | |
|         if case let .playlist(id) = item.section {
 | |
|             return playlistsModel.find(id: id)?.title ?? "Playlist"
 | |
|         }
 | |
| 
 | |
|         return item.section.label
 | |
|     }
 | |
| }
 | |
| 
 | |
| struct EditFavorites_Previews: PreviewProvider {
 | |
|     static var previews: some View {
 | |
|         EditFavorites()
 | |
|             .injectFixtureEnvironmentObjects()
 | |
|     }
 | |
| }
 | 
