Skip to content

feat(group): add Validate for cross-field group validation - #817

Open
ChrisJr404 wants to merge 1 commit into
charmbracelet:mainfrom
ChrisJr404:group-validate
Open

feat(group): add Validate for cross-field group validation#817
ChrisJr404 wants to merge 1 commit into
charmbracelet:mainfrom
ChrisJr404:group-validate

Conversation

@ChrisJr404

Copy link
Copy Markdown

Refs #386.

huh lets you validate individual fields, but there was no way to validate a group as a whole. This adds Group.Validate(func() error) that runs when the form tries to advance past the group. If it returns an error the form stays put and shows the message, just like a field error does.

It's meant for checks that span more than one field, like confirming two inputs match or that a date range makes sense. The func closes over your bound values, so you can look at whatever you need:

huh.NewGroup(
    huh.NewInput().Value(&password).Title("Password"),
    huh.NewInput().Value(&confirm).Title("Confirm"),
).Validate(func() error {
    if password != confirm {
        return errors.New("passwords do not match")
    }
    return nil
})

Groups without a Validate behave exactly as before. The error clears when you go back a group, and it re-runs every time you try to move forward, so fixing the input and advancing again just works.

This only covers the synchronous case from the issue. I left the async/spinner idea out since that's a bigger design question, happy to look at it separately if you want it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant