2023-01-17 10:36:01 +00:00
|
|
|
import Env
|
2023-01-04 17:37:58 +00:00
|
|
|
import Foundation
|
|
|
|
import SwiftUI
|
|
|
|
|
|
|
|
struct StatusRowContextMenu: View {
|
|
|
|
@EnvironmentObject private var account: CurrentAccount
|
|
|
|
@EnvironmentObject private var routeurPath: RouterPath
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-08 18:56:16 +00:00
|
|
|
@Environment(\.openURL) var openURL
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-04 17:37:58 +00:00
|
|
|
@ObservedObject var viewModel: StatusRowViewModel
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-04 17:37:58 +00:00
|
|
|
var body: some View {
|
2023-01-06 11:14:05 +00:00
|
|
|
if !viewModel.isRemote {
|
|
|
|
Button { Task {
|
|
|
|
if viewModel.isFavourited {
|
|
|
|
await viewModel.unFavourite()
|
|
|
|
} else {
|
|
|
|
await viewModel.favourite()
|
|
|
|
}
|
|
|
|
} } label: {
|
|
|
|
Label(viewModel.isFavourited ? "Unfavorite" : "Favorite", systemImage: "star")
|
2023-01-04 17:37:58 +00:00
|
|
|
}
|
2023-01-06 11:14:05 +00:00
|
|
|
Button { Task {
|
|
|
|
if viewModel.isReblogged {
|
|
|
|
await viewModel.unReblog()
|
|
|
|
} else {
|
|
|
|
await viewModel.reblog()
|
|
|
|
}
|
|
|
|
} } label: {
|
|
|
|
Label(viewModel.isReblogged ? "Unboost" : "Boost", systemImage: "arrow.left.arrow.right.circle")
|
2023-01-04 17:37:58 +00:00
|
|
|
}
|
2023-01-09 18:26:56 +00:00
|
|
|
Button { Task {
|
|
|
|
if viewModel.isBookmarked {
|
|
|
|
await viewModel.unbookmark()
|
|
|
|
} else {
|
|
|
|
await viewModel.bookmark()
|
|
|
|
}
|
|
|
|
} } label: {
|
|
|
|
Label(viewModel.isReblogged ? "Unbookmark" : "Bookmark",
|
|
|
|
systemImage: "bookmark")
|
|
|
|
}
|
2023-01-10 11:57:45 +00:00
|
|
|
Button {
|
|
|
|
routeurPath.presentedSheet = .replyToStatusEditor(status: viewModel.status)
|
|
|
|
} label: {
|
|
|
|
Label("Reply", systemImage: "arrowshape.turn.up.left")
|
|
|
|
}
|
2023-01-04 17:37:58 +00:00
|
|
|
}
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-06 11:14:05 +00:00
|
|
|
if viewModel.status.visibility == .pub, !viewModel.isRemote {
|
2023-01-04 17:37:58 +00:00
|
|
|
Button {
|
|
|
|
routeurPath.presentedSheet = .quoteStatusEditor(status: viewModel.status)
|
|
|
|
} label: {
|
|
|
|
Label("Quote this post", systemImage: "quote.bubble")
|
|
|
|
}
|
|
|
|
}
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-07 17:01:06 +00:00
|
|
|
Divider()
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-07 15:07:10 +00:00
|
|
|
if let url = viewModel.status.reblog?.url ?? viewModel.status.url {
|
2023-01-17 10:36:01 +00:00
|
|
|
ShareLink(item: url) {
|
|
|
|
Label("Share this post", systemImage: "square.and.arrow.up")
|
|
|
|
}
|
2023-01-07 15:07:10 +00:00
|
|
|
}
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-04 17:37:58 +00:00
|
|
|
if let url = viewModel.status.reblog?.url ?? viewModel.status.url {
|
2023-01-08 18:56:16 +00:00
|
|
|
Button { openURL(url) } label: {
|
2023-01-04 17:37:58 +00:00
|
|
|
Label("View in Browser", systemImage: "safari")
|
|
|
|
}
|
|
|
|
}
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-07 16:56:24 +00:00
|
|
|
Button {
|
|
|
|
UIPasteboard.general.string = viewModel.status.content.asRawText
|
|
|
|
} label: {
|
|
|
|
Label("Copy Text", systemImage: "doc.on.doc")
|
|
|
|
}
|
2023-01-04 17:37:58 +00:00
|
|
|
|
|
|
|
if account.account?.id == viewModel.status.account.id {
|
|
|
|
Section("Your post") {
|
|
|
|
Button {
|
|
|
|
Task {
|
|
|
|
if viewModel.isPinned {
|
|
|
|
await viewModel.unPin()
|
|
|
|
} else {
|
|
|
|
await viewModel.pin()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} label: {
|
2023-01-17 10:36:01 +00:00
|
|
|
Label(viewModel.isPinned ? "Unpin" : "Pin", systemImage: viewModel.isPinned ? "pin.fill" : "pin")
|
2023-01-04 17:37:58 +00:00
|
|
|
}
|
|
|
|
Button {
|
|
|
|
routeurPath.presentedSheet = .editStatusEditor(status: viewModel.status)
|
|
|
|
} label: {
|
|
|
|
Label("Edit", systemImage: "pencil")
|
|
|
|
}
|
|
|
|
Button(role: .destructive) { Task { await viewModel.delete() } } label: {
|
|
|
|
Label("Delete", systemImage: "trash")
|
|
|
|
}
|
|
|
|
}
|
2023-01-06 11:14:05 +00:00
|
|
|
} else if !viewModel.isRemote {
|
2023-01-04 17:37:58 +00:00
|
|
|
Section(viewModel.status.account.acct) {
|
|
|
|
Button {
|
|
|
|
routeurPath.presentedSheet = .mentionStatusEditor(account: viewModel.status.account, visibility: .pub)
|
|
|
|
} label: {
|
|
|
|
Label("Mention", systemImage: "at")
|
|
|
|
}
|
|
|
|
Button {
|
|
|
|
routeurPath.presentedSheet = .mentionStatusEditor(account: viewModel.status.account, visibility: .direct)
|
|
|
|
} label: {
|
|
|
|
Label("Message", systemImage: "tray.full")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|