Skip to content

Forms signal minDate and maxDate validator#67544

Open
brunoredes wants to merge 1 commit intoangular:mainfrom
brunoredes:forms-signal-min-max-validator
Open

Forms signal minDate and maxDate validator#67544
brunoredes wants to merge 1 commit intoangular:mainfrom
brunoredes:forms-signal-min-max-validator

Conversation

@brunoredes
Copy link

PR Checklist

Please check if your PR fulfills the following requirements:

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • angular.dev application / infrastructure changes
  • Other... Please describe:

What is the current behavior?

The min() and max() validators only accept numeric values as the constraint argument. When used with string paths, passing a string like '2025-06-01' results in a TypeScript error.

This prevents using these validators for date/time inputs without workarounds.

Issue Number: 151664003

What is the new behavior?

  • Added minDate() validator that validates string-based form fields (date, time, datetime-local) are greater than or equal to a given minimum string value using lexicographic comparison.
  • Added maxDate() validator that validates string-based form fields (date, time, datetime-local) are less than or equal to a given maximum string value using lexicographic comparison.
  • Both validators support static string values, dynamic values via LogicFn, custom error messages, and custom error functions.
  • Empty strings are treated as valid (skipped), consistent with other validators like min() and max().

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

Solves Experimental Signal Forms (view)

Add dedicated `minDate()` and `maxDate()` validation rules for string-based
date and time form fields. These validators use lexicographic string comparison,
which correctly handles ISO-formatted values from `<input type="date">`,
`<input type="time">`, and `<input type="datetime-local">`.

Both validators support static string values, dynamic values via LogicFn,
and custom error messages/functions.
@pullapprove pullapprove bot requested a review from JeanMeche March 10, 2026 13:28
@angular-robot angular-robot bot added detected: feature PR contains a feature commit area: forms labels Mar 10, 2026
@ngbot ngbot bot added this to the Backlog milestone Mar 10, 2026
@JeanMeche JeanMeche requested a review from kirjs March 10, 2026 13:30
Copy link
Member

@JeanMeche JeanMeche left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like this implementation is incomplete (or at least not covered by tests).

Check out packages/forms/signals/test/web/form_field_directive.spec.ts, you'll see that min/minlength etc add the matching attribute to the dom.

@brunoredes
Copy link
Author

Looks like this implementation is incomplete (or at least not covered by tests).

Check out packages/forms/signals/test/web/form_field_directive.spec.ts, you'll see that min/minlength etc add the matching attribute to the dom.

@JeanMeche it seems I will change some code from control.ts, types.ts, metadata.ts. Can I add string type on the generics of min and max from FormUiControl or should I create a new interface attribute maxDate/minDate? Just for me to know the way I must follow

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

Labels

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

2 participants