HistoryView: Adds ability to delete history items
This commit is contained in:
@@ -9,24 +9,19 @@ import SwiftUI
|
||||
import UniformTypeIdentifiers
|
||||
|
||||
struct HistoryView: View {
|
||||
var historyItems: [HistoryItem]
|
||||
|
||||
private let dateFormatter: DateFormatter
|
||||
@StateObject public var viewModel: BrowserHistory.ViewModel
|
||||
@State public var selectedItems = Set<HistoryItem.ID>()
|
||||
@Environment(\.dismiss) private var dismissAction
|
||||
|
||||
init(historyItems: [HistoryItem]) {
|
||||
self.historyItems = historyItems
|
||||
|
||||
let formatter = DateFormatter()
|
||||
formatter.locale = Locale.current
|
||||
formatter.dateStyle = .medium
|
||||
formatter.timeStyle = .short
|
||||
self.dateFormatter = formatter
|
||||
private let dateFormatter = DateFormatter() .. {
|
||||
$0.locale = Locale.current
|
||||
$0.dateStyle = .medium
|
||||
$0.timeStyle = .short
|
||||
}
|
||||
|
||||
@Environment(\.dismiss) private var dismissAction
|
||||
|
||||
var body: some View {
|
||||
Table(historyItems, selection: $selectedItems) {
|
||||
Table(viewModel.historyItems, selection: $selectedItems) {
|
||||
TableColumn("Title", value: \.title)
|
||||
|
||||
TableColumn("URL") { item in
|
||||
@@ -38,34 +33,30 @@ struct HistoryView: View {
|
||||
}
|
||||
}
|
||||
.contextMenu(forSelectionType: HistoryItem.ID.self, menu: { items in
|
||||
if let firstItem: HistoryItem.ID = items.first,
|
||||
let historyItem = historyItems.first { $0.id == firstItem }
|
||||
{
|
||||
Button("Copy") {
|
||||
UIPasteboard.general.addItems([
|
||||
[ UTType.url.identifier : historyItem.url ]
|
||||
])
|
||||
}
|
||||
|
||||
// TODO: Delete?
|
||||
let historyItems = items.compactMap { viewModel.item(forIdentifier: $0) }
|
||||
Button("Copy") {
|
||||
UIPasteboard.general.setItems(historyItems.map { [
|
||||
UTType.url.identifier : $0.url,
|
||||
UTType.utf8PlainText.identifier : $0.url.absoluteString,
|
||||
] })
|
||||
}
|
||||
|
||||
Button("Delete") {
|
||||
viewModel.deleteItems(items)
|
||||
}
|
||||
}, primaryAction: { items in
|
||||
if let firstItem: HistoryItem.ID = items.first,
|
||||
let historyItem = historyItems.first(where: { $0.id == firstItem })
|
||||
{
|
||||
UIApplication.shared.open(historyItem.url)
|
||||
items.compactMap({ viewModel.item(forIdentifier: $0) }).forEach { item in
|
||||
UIApplication.shared.open(item.url)
|
||||
dismissAction()
|
||||
}
|
||||
})
|
||||
.searchable(text: $viewModel.searchQuery)
|
||||
}
|
||||
}
|
||||
|
||||
struct HistoryViewPreviewProvider: PreviewProvider {
|
||||
static var previews: some View {
|
||||
HistoryView(historyItems: [
|
||||
HistoryItem(url: URL(string: "https://apple.com")!, title: "Apple", lastVisited: Date.now),
|
||||
HistoryItem(url: URL(string: "https://google.com")!, title: "Google", lastVisited: Date.now)
|
||||
])
|
||||
HistoryView(viewModel: BrowserHistory.shared.viewModel())
|
||||
.previewLayout(.fixed(width: 480.0, height: 800.0))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user