forked from shadowfacts/Tusker
parent
abf6ff8115
commit
62c7a30bbc
|
@ -234,6 +234,12 @@ struct ComposeAutocompleteEmojisView: View {
|
|||
} else {
|
||||
horizontalScrollView
|
||||
.onReceive(uiState.$autocompleteState, perform: queryChanged)
|
||||
.onAppear {
|
||||
if uiState.shouldEmojiAutocompletionBeginExpanded {
|
||||
expanded = true
|
||||
uiState.shouldEmojiAutocompletionBeginExpanded = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ struct ComposeEmojiTextField: UIViewRepresentable {
|
|||
var skipSettingTextOnNextUpdate = false
|
||||
|
||||
var toolbarElements: [ComposeUIState.ToolbarElement] {
|
||||
[]
|
||||
[.emojiPicker]
|
||||
}
|
||||
|
||||
@objc func didChange(_ textField: UITextField) {
|
||||
|
@ -108,6 +108,10 @@ struct ComposeEmojiTextField: UIViewRepresentable {
|
|||
self.updateAutocompleteState(textField: textField)
|
||||
}
|
||||
|
||||
func beginAutocompletingEmoji() {
|
||||
textField?.insertText(":")
|
||||
}
|
||||
|
||||
func applyFormat(_ format: StatusFormat) {
|
||||
}
|
||||
|
||||
|
|
|
@ -145,6 +145,10 @@ class ComposeHostingController: UIHostingController<ComposeContainerView> {
|
|||
localOnlyChanged(draft.localOnly)
|
||||
}
|
||||
|
||||
if input?.toolbarElements.contains(.emojiPicker) == true {
|
||||
items.append(UIBarButtonItem(image: UIImage(systemName: "face.smiling"), style: .plain, target: self, action: #selector(emojiPickerButtonPressed)))
|
||||
}
|
||||
|
||||
items.append(UIBarButtonItem(systemItem: .flexibleSpace))
|
||||
|
||||
if input?.toolbarElements.contains(.formattingButtons) == true,
|
||||
|
@ -311,6 +315,14 @@ class ComposeHostingController: UIHostingController<ComposeContainerView> {
|
|||
uiState.currentInput?.applyFormat(format)
|
||||
}
|
||||
|
||||
@objc func emojiPickerButtonPressed() {
|
||||
guard uiState.autocompleteState == nil else {
|
||||
return
|
||||
}
|
||||
uiState.shouldEmojiAutocompletionBeginExpanded = true
|
||||
uiState.currentInput?.beginAutocompletingEmoji()
|
||||
}
|
||||
|
||||
@objc func draftsButtonPresed() {
|
||||
let draftsVC = DraftsTableViewController(account: mastodonController.accountInfo!, exclude: draft)
|
||||
draftsVC.delegate = self
|
||||
|
|
|
@ -31,6 +31,7 @@ class ComposeUIState: ObservableObject {
|
|||
|
||||
var composeDrawingMode: ComposeDrawingMode?
|
||||
|
||||
var shouldEmojiAutocompletionBeginExpanded = false
|
||||
@Published var currentInput: ComposeInput?
|
||||
|
||||
init(draft: Draft) {
|
||||
|
@ -66,10 +67,13 @@ protocol ComposeInput: AnyObject {
|
|||
func autocomplete(with string: String)
|
||||
|
||||
func applyFormat(_ format: StatusFormat)
|
||||
|
||||
func beginAutocompletingEmoji()
|
||||
}
|
||||
|
||||
extension ComposeUIState {
|
||||
enum ToolbarElement {
|
||||
case emojiPicker
|
||||
case formattingButtons
|
||||
}
|
||||
}
|
||||
|
|
|
@ -139,7 +139,7 @@ struct MainComposeWrappedTextView: UIViewRepresentable {
|
|||
var skipSettingTextOnNextUpdate = false
|
||||
|
||||
var toolbarElements: [ComposeUIState.ToolbarElement] {
|
||||
[.formattingButtons]
|
||||
[.emojiPicker, .formattingButtons]
|
||||
}
|
||||
|
||||
init(text: Binding<String>, uiState: ComposeUIState, didChange: @escaping (UITextView) -> Void) {
|
||||
|
@ -193,6 +193,10 @@ struct MainComposeWrappedTextView: UIViewRepresentable {
|
|||
self.updateAutocompleteState()
|
||||
}
|
||||
|
||||
func beginAutocompletingEmoji() {
|
||||
textView?.insertText(":")
|
||||
}
|
||||
|
||||
func autocomplete(with string: String) {
|
||||
guard let textView = textView,
|
||||
let text = textView.text,
|
||||
|
|
Loading…
Reference in New Issue