IceCubesApp/IceCubesApp/App/AppRouteur.swift

81 lines
2.8 KiB
Swift
Raw Normal View History

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