2022-11-29 11:46:02 +01:00
|
|
|
import Account
|
2023-01-17 11:36:01 +01:00
|
|
|
import AppAccount
|
2023-01-25 13:02:28 +01:00
|
|
|
import Conversations
|
2022-12-20 09:37:07 +01:00
|
|
|
import DesignSystem
|
2023-01-17 11:36:01 +01:00
|
|
|
import Env
|
2023-01-02 19:23:44 +01:00
|
|
|
import Lists
|
2023-01-17 11:36:01 +01:00
|
|
|
import Status
|
|
|
|
import SwiftUI
|
|
|
|
import Timeline
|
2022-11-29 11:46:02 +01:00
|
|
|
|
2023-01-17 07:39:13 +01:00
|
|
|
@MainActor
|
2022-11-29 11:46:02 +01:00
|
|
|
extension View {
|
2023-01-17 15:14:50 +01:00
|
|
|
func withAppRouter() -> some View {
|
|
|
|
navigationDestination(for: RouterDestinations.self) { destination in
|
2022-11-29 11:46:02 +01:00
|
|
|
switch destination {
|
|
|
|
case let .accountDetail(id):
|
2022-11-29 12:18:06 +01:00
|
|
|
AccountDetailView(accountId: id)
|
2022-12-17 13:37:46 +01:00
|
|
|
case let .accountDetailWithAccount(account):
|
|
|
|
AccountDetailView(account: account)
|
2023-01-25 21:18:34 +01:00
|
|
|
case let .accountSettingsWithAccount(account, appAccount):
|
|
|
|
AccountSettingsView(account: account, appAccount: appAccount)
|
2022-11-29 11:46:02 +01:00
|
|
|
case let .statusDetail(id):
|
|
|
|
StatusDetailView(statusId: id)
|
2023-01-22 16:55:03 +01:00
|
|
|
case let .conversationDetail(conversation):
|
|
|
|
ConversationDetailView(conversation: conversation)
|
2023-01-06 12:14:05 +01:00
|
|
|
case let .remoteStatusDetail(url):
|
|
|
|
StatusDetailView(remoteStatusURL: url)
|
2022-12-21 20:26:38 +01:00
|
|
|
case let .hashTag(tag, accountId):
|
2022-12-31 12:28:27 +01:00
|
|
|
TimelineView(timeline: .constant(.hashtag(tag: tag, accountId: accountId)), scrollToTopSignal: .constant(0))
|
2023-01-02 19:23:44 +01:00
|
|
|
case let .list(list):
|
|
|
|
TimelineView(timeline: .constant(.list(list: list)), scrollToTopSignal: .constant(0))
|
2022-12-23 18:47:19 +01:00
|
|
|
case let .following(id):
|
2022-12-28 10:08:41 +01:00
|
|
|
AccountsListView(mode: .following(accountId: id))
|
2022-12-23 18:47:19 +01:00
|
|
|
case let .followers(id):
|
2022-12-24 13:41:25 +01:00
|
|
|
AccountsListView(mode: .followers(accountId: id))
|
2023-01-24 06:35:43 +01:00
|
|
|
case let .favoritedBy(id):
|
|
|
|
AccountsListView(mode: .favoritedBy(statusId: id))
|
2022-12-24 13:41:25 +01:00
|
|
|
case let .rebloggedBy(id):
|
|
|
|
AccountsListView(mode: .rebloggedBy(statusId: id))
|
2022-11-29 11:46:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-01-17 11:36:01 +01:00
|
|
|
|
2022-12-20 09:37:07 +01:00
|
|
|
func withSheetDestinations(sheetDestinations: Binding<SheetDestinations?>) -> some View {
|
2023-01-17 11:36:01 +01:00
|
|
|
sheet(item: sheetDestinations) { destination in
|
2022-12-20 09:37:07 +01:00
|
|
|
switch destination {
|
2022-12-26 08:24:55 +01:00
|
|
|
case let .replyToStatusEditor(status):
|
|
|
|
StatusEditorView(mode: .replyTo(status: status))
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2023-01-05 12:21:54 +01:00
|
|
|
case let .newStatusEditor(visibility):
|
2023-01-17 15:14:50 +01:00
|
|
|
StatusEditorView(mode: .new(visibility: visibility))
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2022-12-26 08:24:55 +01:00
|
|
|
case let .editStatusEditor(status):
|
|
|
|
StatusEditorView(mode: .edit(status: status))
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2022-12-27 07:51:44 +01:00
|
|
|
case let .quoteStatusEditor(status):
|
|
|
|
StatusEditorView(mode: .quote(status: status))
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2023-01-04 18:37:58 +01:00
|
|
|
case let .mentionStatusEditor(account, visibility):
|
|
|
|
StatusEditorView(mode: .mention(account: account, visibility: visibility))
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2023-01-02 19:23:44 +01:00
|
|
|
case let .listEdit(list):
|
|
|
|
ListEditView(list: list)
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2023-01-02 19:23:44 +01:00
|
|
|
case let .listAddAccount(account):
|
|
|
|
ListAddAccountView(account: account)
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2023-01-06 12:14:05 +01:00
|
|
|
case .addAccount:
|
|
|
|
AddAccountView()
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2023-01-06 17:14:34 +01:00
|
|
|
case .addRemoteLocalTimeline:
|
|
|
|
AddRemoteTimelineView()
|
2023-01-17 07:39:13 +01:00
|
|
|
.withEnvironments()
|
2023-01-19 21:19:19 +01:00
|
|
|
case let .statusEditHistory(status):
|
|
|
|
StatusEditHistoryView(statusId: status)
|
|
|
|
.withEnvironments()
|
2022-12-20 09:37:07 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-01-17 11:36:01 +01:00
|
|
|
|
2023-01-17 07:39:13 +01:00
|
|
|
func withEnvironments() -> some View {
|
2023-01-17 11:36:01 +01:00
|
|
|
environmentObject(CurrentAccount.shared)
|
2023-01-17 07:39:13 +01:00
|
|
|
.environmentObject(UserPreferences.shared)
|
|
|
|
.environmentObject(CurrentInstance.shared)
|
|
|
|
.environmentObject(Theme.shared)
|
|
|
|
.environmentObject(AppAccountsManager.shared)
|
|
|
|
}
|
2022-11-29 11:46:02 +01:00
|
|
|
}
|