2022-12-03 07:23:38 +01:00
|
|
|
//
|
|
|
|
// BrowseView.swift
|
|
|
|
// Browse
|
|
|
|
//
|
|
|
|
// Created by Javier Cicchelli on 03/12/2022.
|
|
|
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
|
|
|
//
|
|
|
|
|
2022-12-12 01:13:50 +01:00
|
|
|
import DataModels
|
2022-12-03 07:23:38 +01:00
|
|
|
import SwiftUI
|
|
|
|
|
2022-12-03 09:15:23 +01:00
|
|
|
public struct BrowseView: View {
|
|
|
|
|
2022-12-12 01:13:50 +01:00
|
|
|
// MARK: Properties
|
|
|
|
|
2022-12-13 00:20:23 +01:00
|
|
|
private let folder: Folder
|
2022-12-12 01:13:50 +01:00
|
|
|
private let createFolder: ActionClosure
|
|
|
|
private let uploadFile: ActionClosure
|
|
|
|
private let showProfile: ActionClosure
|
|
|
|
|
2022-12-03 09:15:23 +01:00
|
|
|
// MARK: Initialisers
|
|
|
|
|
2022-12-12 01:13:50 +01:00
|
|
|
public init(
|
2022-12-13 00:20:23 +01:00
|
|
|
folder: Folder,
|
2022-12-12 01:13:50 +01:00
|
|
|
createFolder: @escaping ActionClosure,
|
|
|
|
uploadFile: @escaping ActionClosure,
|
|
|
|
showProfile: @escaping ActionClosure
|
|
|
|
) {
|
2022-12-13 00:20:23 +01:00
|
|
|
self.folder = folder
|
2022-12-12 01:13:50 +01:00
|
|
|
self.createFolder = createFolder
|
|
|
|
self.uploadFile = uploadFile
|
|
|
|
self.showProfile = showProfile
|
|
|
|
}
|
2022-12-03 09:15:23 +01:00
|
|
|
|
|
|
|
// MARK: Body
|
|
|
|
|
|
|
|
public var body: some View {
|
2022-12-03 07:23:38 +01:00
|
|
|
List {
|
|
|
|
Group {
|
2022-12-03 08:19:48 +01:00
|
|
|
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"
|
|
|
|
)
|
|
|
|
}
|
2022-12-03 07:23:38 +01:00
|
|
|
}
|
2022-12-03 08:19:48 +01:00
|
|
|
.swipeActions(
|
|
|
|
edge: .trailing,
|
|
|
|
allowsFullSwipe: true
|
|
|
|
) {
|
|
|
|
Button {
|
2022-12-03 08:46:22 +01:00
|
|
|
// TODO: Implement the removal of the item from the API.
|
2022-12-03 08:19:48 +01:00
|
|
|
} label: {
|
|
|
|
Label {
|
2022-12-03 09:15:23 +01:00
|
|
|
Text(
|
|
|
|
"browse.swipe_action.delete_item.text",
|
|
|
|
bundle: .module,
|
|
|
|
comment: "Delete item swipe action text."
|
|
|
|
)
|
2022-12-03 08:19:48 +01:00
|
|
|
} icon: {
|
|
|
|
Image.trash
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.tint(.red)
|
|
|
|
|
|
|
|
// TODO: allow download only if item is a file.
|
|
|
|
Button {
|
2022-12-03 08:46:22 +01:00
|
|
|
// TODO: Implement the downloading of the data of the item from the API into the device.
|
2022-12-03 08:19:48 +01:00
|
|
|
} label: {
|
|
|
|
Label {
|
2022-12-03 09:15:23 +01:00
|
|
|
Text(
|
|
|
|
"browse.swipe_action.download_item.text",
|
|
|
|
bundle: .module,
|
|
|
|
comment: "Download item swipe action text."
|
|
|
|
)
|
2022-12-03 08:19:48 +01:00
|
|
|
} icon: {
|
|
|
|
Image.download
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.tint(.orange)
|
2022-12-03 07:23:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
.listStyle(.inset)
|
|
|
|
.background(Color.red)
|
2022-12-13 00:20:23 +01:00
|
|
|
.navigationTitle(folder.name)
|
2022-12-03 07:41:17 +01:00
|
|
|
.toolbar {
|
2022-12-12 01:13:50 +01:00
|
|
|
BrowseToolbar(
|
|
|
|
createFolder: createFolder,
|
|
|
|
uploadFile: uploadFile,
|
|
|
|
showProfile: showProfile
|
|
|
|
)
|
2022-12-03 07:41:17 +01:00
|
|
|
}
|
2022-12-03 07:23:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-03 07:41:17 +01:00
|
|
|
// MARK: - Image+Constants
|
|
|
|
|
|
|
|
private extension Image {
|
2022-12-03 08:19:48 +01:00
|
|
|
static let trash = Image(systemName: "trash")
|
|
|
|
static let download = Image(systemName: "arrow.down.doc")
|
2022-12-03 07:41:17 +01:00
|
|
|
}
|
|
|
|
|
2022-12-03 07:23:38 +01:00
|
|
|
// MARK: - Previews
|
|
|
|
|
|
|
|
struct BrowseView_Previews: PreviewProvider {
|
|
|
|
static var previews: some View {
|
|
|
|
NavigationView {
|
2022-12-13 00:20:23 +01:00
|
|
|
BrowseView(folder: .init(
|
|
|
|
id: UUID().uuidString,
|
|
|
|
name: "Some folder name"
|
|
|
|
)) {
|
2022-12-12 01:13:50 +01:00
|
|
|
// ...
|
|
|
|
} uploadFile: {
|
|
|
|
// ...
|
|
|
|
} showProfile: {
|
|
|
|
// ...
|
|
|
|
}
|
2022-12-03 07:23:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|