Composer: Better ALT editing UI

This commit is contained in:
Thomas Ricouard 2023-02-21 18:50:56 +01:00
parent 263ecbb715
commit 255af8c482

View file

@ -12,6 +12,9 @@ struct StatusEditorMediaEditView: View {
let container: StatusEditorMediaContainer let container: StatusEditorMediaContainer
@State private var imageDescription: String = "" @State private var imageDescription: String = ""
@FocusState private var isFieldFocused: Bool
@State private var isUpdating: Bool = false
var body: some View { var body: some View {
NavigationStack { NavigationStack {
@ -20,6 +23,7 @@ struct StatusEditorMediaEditView: View {
TextField("status.editor.media.image-description", TextField("status.editor.media.image-description",
text: $imageDescription, text: $imageDescription,
axis: .vertical) axis: .vertical)
.focused($isFieldFocused)
} }
.listRowBackground(theme.primaryBackgroundColor) .listRowBackground(theme.primaryBackgroundColor)
Section { Section {
@ -48,24 +52,35 @@ struct StatusEditorMediaEditView: View {
.background(theme.secondaryBackgroundColor) .background(theme.secondaryBackgroundColor)
.onAppear { .onAppear {
imageDescription = container.mediaAttachment?.description ?? "" imageDescription = container.mediaAttachment?.description ?? ""
isFieldFocused = true
} }
.navigationTitle("status.editor.media.edit-image") .navigationTitle("status.editor.media.edit-image")
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
.toolbar { .toolbar {
ToolbarItem(placement: .navigationBarTrailing) { ToolbarItem(placement: .navigationBarTrailing) {
Button("action.done") { Button {
if !imageDescription.isEmpty { if !imageDescription.isEmpty {
isUpdating = true
if currentInstance.isEditAltTextSupported && viewModel.mode.isEditing { if currentInstance.isEditAltTextSupported && viewModel.mode.isEditing {
Task { Task {
await viewModel.editDescription(container: container, description: imageDescription) await viewModel.editDescription(container: container, description: imageDescription)
dismiss()
isUpdating = false
} }
} else { } else {
Task { Task {
await viewModel.addDescription(container: container, description: imageDescription) await viewModel.addDescription(container: container, description: imageDescription)
}
}
}
dismiss() dismiss()
isUpdating = false
}
}
}
} label: {
if isUpdating {
ProgressView()
} else {
Text("action.done")
}
} }
} }