// // BrowseView.swift // Browse // // Created by Javier Cicchelli on 03/12/2022. // Copyright © 2022 Röck+Cöde. All rights reserved. // import DataModels import SwiftUI public struct BrowseView: View { // MARK: Properties private let folder: Folder private let createFolder: ActionClosure private let uploadFile: ActionClosure private let showProfile: ActionClosure // MARK: Initialisers public init( folder: Folder, createFolder: @escaping ActionClosure, uploadFile: @escaping ActionClosure, showProfile: @escaping ActionClosure ) { self.folder = folder self.createFolder = createFolder self.uploadFile = uploadFile self.showProfile = showProfile } // MARK: Body public var body: some View { List { Group { Group { FolderItem(name: "Some folder #1 name") FolderItem(name: "Some folder #2 name") FolderItem(name: "Some folder #3 name") FolderItem(name: "Some folder #4 name") FolderItem(name: "Some folder #5 name") FolderItem(name: "Some folder #6 name") FolderItem(name: "Some folder #7 name") } Group { DocumentItem( name: "Some document #1 name", lastModified: "3 months ago", fileSize: "1,23 Mbytes" ) DocumentItem( name: "Some document #2 name", lastModified: "2 years ago", fileSize: "123 Kbytes" ) DocumentItem( name: "Some document #3 name", lastModified: "13 days ago", fileSize: "12 bytes" ) DocumentItem( name: "Some document #4 name", lastModified: "13 hours ago", fileSize: "12,3 Gbytes" ) DocumentItem( name: "Some document #5 name", lastModified: "13 minutes ago", fileSize: "123 Tbytes" ) DocumentItem( name: "Some document #6 name", lastModified: "13 seconds ago", fileSize: "123 Tbytes" ) DocumentItem( name: "Some document #7 name", lastModified: "13 nanoseconds ago", fileSize: "123 Tbytes" ) } } .swipeActions( edge: .trailing, allowsFullSwipe: true ) { Button { // TODO: Implement the removal of the item from the API. } label: { Label { Text( "browse.swipe_action.delete_item.text", bundle: .module, comment: "Delete item swipe action text." ) } icon: { Image.trash } } .tint(.red) // TODO: allow download only if item is a file. Button { // TODO: Implement the downloading of the data of the item from the API into the device. } label: { Label { Text( "browse.swipe_action.download_item.text", bundle: .module, comment: "Download item swipe action text." ) } icon: { Image.download } } .tint(.orange) } } .listStyle(.inset) .background(Color.red) .navigationTitle(folder.name) .toolbar { BrowseToolbar( createFolder: createFolder, uploadFile: uploadFile, showProfile: showProfile ) } } } // MARK: - Image+Constants private extension Image { static let trash = Image(systemName: "trash") static let download = Image(systemName: "arrow.down.doc") } // MARK: - Previews struct BrowseView_Previews: PreviewProvider { static var previews: some View { NavigationView { BrowseView(folder: .init( id: UUID().uuidString, name: "Some folder name" )) { // ... } uploadFile: { // ... } showProfile: { // ... } } } }