// // ComposeUIState.swift // Tusker // // Created by Shadowfacts on 8/24/20. // Copyright © 2020 Shadowfacts. All rights reserved. // import SwiftUI protocol ComposeUIStateDelegate: AnyObject { var assetPickerDelegate: AssetPickerViewControllerDelegate? { get } func dismissCompose(mode: ComposeUIState.DismissMode) // @available(iOS, obsoleted: 16.0) func presentAssetPickerSheet() func presentComposeDrawing() func selectDraft(_ draft: OldDraft) func paste(itemProviders: [NSItemProvider]) } class ComposeUIState: ObservableObject { weak var delegate: ComposeUIStateDelegate? @Published var draft: OldDraft @Published var isShowingSaveDraftSheet = false @Published var isShowingDraftsList = false @Published var attachmentsMissingDescriptions = Set() @Published var autocompleteState: AutocompleteState? = nil @Published var isDucking = false var composeDrawingMode: ComposeDrawingMode? var shouldEmojiAutocompletionBeginExpanded = false @Published var currentInput: ComposeInput? init(draft: OldDraft) { self.draft = draft } } extension ComposeUIState { enum ComposeDrawingMode { case createNew case edit(id: UUID) } } extension ComposeUIState { enum AutocompleteState: Equatable { case mention(String) case emoji(String) case hashtag(String) } } extension ComposeUIState { enum DismissMode { case cancel, post } } protocol ComposeInput: AnyObject { var toolbarElements: [ComposeUIState.ToolbarElement] { get } func autocomplete(with string: String) func applyFormat(_ format: StatusFormat) func beginAutocompletingEmoji() } extension ComposeUIState { enum ToolbarElement { case emojiPicker case formattingButtons } }