spring-shell icon indicating copy to clipboard operation
spring-shell copied to clipboard

Can you replace user's input when using CompletionProposal?

Open yaharga opened this issue 1 year ago • 0 comments
trafficstars

Let's say the options are an enum of DayOfWeek; and each day has an associated number and color (just for the sake of an example).

public enum DayOfWeek {
    MONDAY(0, "yellow"),
    TUESDAY(1, "blue"),
    WEDNESDAY(2, "pink"),
    THURSDAY(3, "purple"),
    FRIDAY(4, "orange"),
    SATURDAY(5, "green"),
    SUNDAY(6, "red");

    public int num;
    public String color;

    public DayOfWeek(int num, String color) {
        this.num = num;
        this.color = color;
    }

    public static List<CompletionProposal> completion() {
        return Arrays.stream(values()).map(Enum::name).map(CompletionProposal::new).toList();
    }
}

I want the user to get autocomplete with all the properties, in addition to the enum name.

If I give the List<CompletionProposal> of the names of the enum constants, this will work: MON -> MONDAY

What if I want the user to type gre or green and then have it change to SATURDAY?

Even if that is not possible, what if I type satur? It won't autocomplete to SATURDAY or saturday, unless I include the day twice as upper and lower cases, which is confusing to the user.

The only way I can think of showing it to the user is to use the displayText, category, or description method to the user, but it's still a chore to type exactly the words.

In my case I have IDs of a huge list, and the user won't remember the entire IDs of the list, so I would like them to autocomplete with a sort of a "search" feature. Let's say I type "Mark Twain" or "Tom Sawyer", I want to get "94782293" to replace the words I typed, since the final value will be an ID, but the other words help search. So far I'm using displayText as Tom Sawyer by Mark Twain: 94782293, but the value is 94782293, which is obscuring what's happening to the user.

yaharga avatar Jun 26 '24 20:06 yaharga