2020-08-31 23:28:50 +00:00
|
|
|
//
|
|
|
|
// ComposeUIState.swift
|
|
|
|
// Tusker
|
|
|
|
//
|
|
|
|
// Created by Shadowfacts on 8/24/20.
|
|
|
|
// Copyright © 2020 Shadowfacts. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import SwiftUI
|
|
|
|
|
2021-05-22 17:42:53 +00:00
|
|
|
protocol ComposeUIStateDelegate: AnyObject {
|
2020-08-31 23:28:50 +00:00
|
|
|
var assetPickerDelegate: AssetPickerViewControllerDelegate? { get }
|
|
|
|
|
2020-12-14 03:37:37 +00:00
|
|
|
func dismissCompose(mode: ComposeUIState.DismissMode)
|
2022-06-29 00:27:41 +00:00
|
|
|
// @available(iOS, obsoleted: 16.0)
|
2020-08-31 23:28:50 +00:00
|
|
|
func presentAssetPickerSheet()
|
|
|
|
func presentComposeDrawing()
|
2022-11-09 23:18:31 +00:00
|
|
|
func selectDraft(_ draft: Draft)
|
2020-08-31 23:28:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class ComposeUIState: ObservableObject {
|
|
|
|
|
|
|
|
weak var delegate: ComposeUIStateDelegate?
|
|
|
|
|
|
|
|
@Published var draft: Draft
|
|
|
|
@Published var isShowingSaveDraftSheet = false
|
2022-11-09 23:18:31 +00:00
|
|
|
@Published var isShowingDraftsList = false
|
2020-08-31 23:28:50 +00:00
|
|
|
@Published var attachmentsMissingDescriptions = Set<UUID>()
|
2020-10-12 02:14:45 +00:00
|
|
|
@Published var autocompleteState: AutocompleteState? = nil
|
2022-11-13 03:48:02 +00:00
|
|
|
@Published var isDucking = false
|
2020-08-31 23:28:50 +00:00
|
|
|
|
|
|
|
var composeDrawingMode: ComposeDrawingMode?
|
|
|
|
|
2022-04-09 15:52:09 +00:00
|
|
|
var shouldEmojiAutocompletionBeginExpanded = false
|
2022-04-09 15:41:27 +00:00
|
|
|
@Published var currentInput: ComposeInput?
|
2020-10-12 02:14:45 +00:00
|
|
|
|
2020-08-31 23:28:50 +00:00
|
|
|
init(draft: Draft) {
|
|
|
|
self.draft = draft
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
extension ComposeUIState {
|
|
|
|
enum ComposeDrawingMode {
|
|
|
|
case createNew
|
|
|
|
case edit(id: UUID)
|
|
|
|
}
|
|
|
|
}
|
2020-10-12 02:14:45 +00:00
|
|
|
|
|
|
|
extension ComposeUIState {
|
2022-07-01 01:41:05 +00:00
|
|
|
enum AutocompleteState: Equatable {
|
2020-10-12 02:14:45 +00:00
|
|
|
case mention(String)
|
|
|
|
case emoji(String)
|
|
|
|
case hashtag(String)
|
|
|
|
}
|
|
|
|
}
|
2020-10-18 15:11:47 +00:00
|
|
|
|
2020-12-14 03:37:37 +00:00
|
|
|
extension ComposeUIState {
|
|
|
|
enum DismissMode {
|
|
|
|
case cancel, post
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-09 15:41:27 +00:00
|
|
|
protocol ComposeInput: AnyObject {
|
|
|
|
var toolbarElements: [ComposeUIState.ToolbarElement] { get }
|
|
|
|
|
2020-10-18 15:11:47 +00:00
|
|
|
func autocomplete(with string: String)
|
2022-04-09 15:41:27 +00:00
|
|
|
|
|
|
|
func applyFormat(_ format: StatusFormat)
|
2022-04-09 15:52:09 +00:00
|
|
|
|
|
|
|
func beginAutocompletingEmoji()
|
2022-04-09 15:41:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
extension ComposeUIState {
|
|
|
|
enum ToolbarElement {
|
2022-04-09 15:52:09 +00:00
|
|
|
case emojiPicker
|
2022-04-09 15:41:27 +00:00
|
|
|
case formattingButtons
|
|
|
|
}
|
2020-10-18 15:11:47 +00:00
|
|
|
}
|