Tusker/Tusker/Screens/Compose/ComposeUIState.swift

81 lines
1.8 KiB
Swift

//
// 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<UUID>()
@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
}
}