Feliz.MaterialUI icon indicating copy to clipboard operation
Feliz.MaterialUI copied to clipboard

Editing content of input field moves caret position to end

Open panmona opened this issue 2 years ago • 3 comments

I noticed that when you edit an input field the caret always jumps to the end. This can be reproduced on the Demo app: https://shmew.github.io/Feliz.MaterialUI/#samples/sign-in

Repro

  1. Type into input
  2. Move caret to start
  3. Type a character

Expected result

Caret position stays the same

Actual Result

Caret moves to the end

A short video of what happens:

https://user-images.githubusercontent.com/16801528/128494896-340981d7-f3dd-43ed-9503-993e84b379b6.mp4

panmona avatar Aug 06 '21 10:08 panmona

Maybe because of textField.autoFocus true?

Zaid-Ajaj avatar Aug 06 '21 10:08 Zaid-Ajaj

@Zaid-Ajaj The behavior is the same when autoFocus is false.

panmona avatar Aug 06 '21 14:08 panmona

After investigating further I found references to the underlying issue (Zaid-Ajaj/Feliz#320, elmish/elmish#60) with the proposed solution of using valueOrDefault.

For Mui we would need the same but it has to be applied on inputRef instead of ref. The implementation would be:

open Fable.Core.JsInterop
    // ...

    /// Can be used instead of `textField.defaultValue` and `textField.value` props to override input box value.
    let inline valueOrDefault (value: string) =
        textField.inputRef (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)

Can we add this to the Feliz.MaterialUI library @Shmew? I would be very willing to make the PR but would need some guidance for it.

panmona avatar Sep 16 '21 15:09 panmona