1
0
mirror of git://jb55.com/damus synced 2024-10-06 11:43:21 +00:00

Add .frame & .position modifiers to TextEntry using ScrollView geometry

Closes: #1201
Changelog-Fixed: Fix issue where cursor dissapears when typing long message
This commit is contained in:
gladiusKatana 2023-05-29 10:45:43 -04:00 committed by William Casarin
parent fe4277e817
commit f7a0370824

View File

@ -207,25 +207,29 @@ struct PostView: View {
} }
} }
var TextEntry: some View { func TextEntry(scrollViewGeometry: GeometryProxy) -> some View {
ZStack(alignment: .topLeading) { GeometryReader { (geometry: GeometryProxy) in
TextViewWrapper(attributedText: $post, postTextViewCanScroll: $postTextViewCanScroll, cursorIndex: newCursorIndex, getFocusWordForMention: { word, range in ZStack(alignment: .topLeading) {
focusWordAttributes = (word, range) TextViewWrapper(attributedText: $post, postTextViewCanScroll: $postTextViewCanScroll, cursorIndex: newCursorIndex, getFocusWordForMention: { word, range in
self.newCursorIndex = nil focusWordAttributes = (word, range)
}) self.newCursorIndex = nil
})
.environmentObject(tagModel) .environmentObject(tagModel)
.frame(maxHeight: scrollViewGeometry.size.height)
.position(x: geometry.frame(in: .local).midX, y: scrollViewGeometry.frame(in: .local).midY)
.focused($focus) .focused($focus)
.textInputAutocapitalization(.sentences) .textInputAutocapitalization(.sentences)
.onChange(of: post) { p in .onChange(of: post) { p in
post_changed(post: p, media: uploadedMedias) post_changed(post: p, media: uploadedMedias)
} }
if post.string.isEmpty { if post.string.isEmpty {
Text(POST_PLACEHOLDER) Text(POST_PLACEHOLDER)
.padding(.top, 8) .padding(.top, 8)
.padding(.leading, 4) .padding(.leading, 4)
.foregroundColor(Color(uiColor: .placeholderText)) .foregroundColor(Color(uiColor: .placeholderText))
.allowsHitTesting(false) .allowsHitTesting(false)
}
} }
} }
} }
@ -297,12 +301,12 @@ struct PostView: View {
} }
} }
func Editor(deviceSize: GeometryProxy) -> some View { func Editor(deviceSize: GeometryProxy, scrollViewGeometry: GeometryProxy) -> some View {
VStack(alignment: .leading, spacing: 0) { VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .top) { HStack(alignment: .top) {
ProfilePicView(pubkey: damus_state.pubkey, size: PFP_SIZE, highlight: .none, profiles: damus_state.profiles, disable_animation: damus_state.settings.disable_animation) ProfilePicView(pubkey: damus_state.pubkey, size: PFP_SIZE, highlight: .none, profiles: damus_state.profiles, disable_animation: damus_state.settings.disable_animation)
TextEntry TextEntry(scrollViewGeometry: scrollViewGeometry)
} }
.frame(height: deviceSize.size.height * multiply_factor) .frame(height: deviceSize.size.height * multiply_factor)
.id("post") .id("post")
@ -327,16 +331,18 @@ struct PostView: View {
TopBar TopBar
ScrollViewReader { scroller in ScrollViewReader { scroller in
ScrollView { GeometryReader { (geometry: GeometryProxy) in
if case .replying_to(let replying_to) = self.action { ScrollView {
ReplyView(replying_to: replying_to, damus: damus_state, originalReferences: $originalReferences, references: $references) if case .replying_to(let replying_to) = self.action {
} ReplyView(replying_to: replying_to, damus: damus_state, originalReferences: $originalReferences, references: $references)
}
Editor(deviceSize: deviceSize) Editor(deviceSize: deviceSize, scrollViewGeometry: geometry)
} }
.frame(maxHeight: searching == nil ? .infinity : 70) .frame(maxHeight: searching == nil ? .infinity : 70)
.onAppear { .onAppear {
scroll_to_event(scroller: scroller, id: "post", delay: 1.0, animate: true, anchor: .top) scroll_to_event(scroller: scroller, id: "post", delay: 1.0, animate: true, anchor: .top)
}
} }
} }