mirror of
https://github.com/mastodon/mastodon-ios.git
synced 2024-12-13 00:56:23 +01:00
100 lines
4.5 KiB
Swift
100 lines
4.5 KiB
Swift
//
|
|
// PollOptionRow.swift
|
|
//
|
|
//
|
|
// Created by MainasuK on 2022-5-31.
|
|
//
|
|
|
|
import SwiftUI
|
|
import MastodonAsset
|
|
import MastodonCore
|
|
import MastodonLocalization
|
|
|
|
public struct PollOptionRow: View {
|
|
|
|
@ObservedObject var viewModel: PollComposeItem.Option
|
|
|
|
let index: Int
|
|
let moveUp: (() -> Void)?
|
|
let moveDown: (() -> Void)?
|
|
let removeOption: (() -> Void)?
|
|
let deleteBackwardResponseTextFieldRelayDelegate: DeleteBackwardResponseTextFieldRelayDelegate?
|
|
let configurationHandler: (DeleteBackwardResponseTextField) -> Void
|
|
|
|
public var body: some View {
|
|
HStack(alignment: .center, spacing: 16) {
|
|
HStack(alignment: .center, spacing: .zero) {
|
|
Image(systemName: "circle")
|
|
.frame(width: 20, height: 20)
|
|
.padding(.leading, 16)
|
|
.padding(.trailing, 16 - 10) // 8pt for TextField leading
|
|
.font(.system(size: 17))
|
|
.accessibilityHidden(true)
|
|
let field = PollOptionTextField(
|
|
text: $viewModel.text,
|
|
index: index,
|
|
delegate: deleteBackwardResponseTextFieldRelayDelegate
|
|
) { textField in
|
|
viewModel.textField = textField
|
|
configurationHandler(textField)
|
|
}
|
|
.onReceive(viewModel.$shouldBecomeFirstResponder) { shouldBecomeFirstResponder in
|
|
guard shouldBecomeFirstResponder else { return }
|
|
viewModel.shouldBecomeFirstResponder = false
|
|
viewModel.textField?.becomeFirstResponder()
|
|
}
|
|
|
|
if #available(iOS 16.0, *) {
|
|
field.accessibilityActions {
|
|
if let moveUp {
|
|
Button(L10n.Scene.Compose.Poll.moveUp, action: moveUp)
|
|
}
|
|
if let moveDown {
|
|
Button(L10n.Scene.Compose.Poll.moveDown, action: moveDown)
|
|
}
|
|
if let removeOption {
|
|
Button(L10n.Scene.Compose.Poll.removeOption, action: removeOption)
|
|
}
|
|
}
|
|
} else {
|
|
switch (moveUp, moveDown, removeOption) {
|
|
case let (.some(up), .some(down), .some(remove)):
|
|
field
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.moveUp, up)
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.moveDown, down)
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.removeOption, remove)
|
|
case let (.some(up), .some(down), .none):
|
|
field
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.moveUp, up)
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.moveDown, down)
|
|
case let (.some(up), .none, .some(remove)):
|
|
field
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.moveUp, up)
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.removeOption, remove)
|
|
case let (.some(up), .none, .none):
|
|
field.accessibilityAction(named: L10n.Scene.Compose.Poll.moveUp, up)
|
|
case let (.none, .some(down), .some(remove)):
|
|
field
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.moveDown, down)
|
|
.accessibilityAction(named: L10n.Scene.Compose.Poll.removeOption, remove)
|
|
case let (.none, .some(down), .none):
|
|
field.accessibilityAction(named: L10n.Scene.Compose.Poll.moveDown, down)
|
|
case let (.none, .none, .some(remove)):
|
|
field.accessibilityAction(named: L10n.Scene.Compose.Poll.removeOption, remove)
|
|
case (.none, .none, .none):
|
|
field
|
|
}
|
|
}
|
|
}
|
|
.background(Color(viewModel.backgroundColor))
|
|
.cornerRadius(10)
|
|
.shadow(color: .black.opacity(0.3), radius: 2, x: 0, y: 1)
|
|
Image(uiImage: Asset.Scene.Compose.reorderDot.image.withRenderingMode(.alwaysTemplate))
|
|
.foregroundColor(Color(UIColor.label))
|
|
.accessibilityHidden(true)
|
|
}
|
|
.background(Color.clear)
|
|
}
|
|
|
|
}
|