1
1
import type { ErrorMessage , ValidationErrors , ValidatableField , FormValidityObserver } from "@form-observer/core" ;
2
2
import type { JSX } from "preact" ;
3
3
4
- export interface PreactFormValidityObserver < M = string > extends Omit < FormValidityObserver < M > , "configure" > {
4
+ export interface PreactFormValidityObserver < M = string , R extends boolean = false >
5
+ extends Omit < FormValidityObserver < M , R > , "configure" > {
5
6
/**
6
7
* An enhanced version of {@link FormValidityObserver.configure} for `Preact`. In addition to configuring a field's
7
8
* error messages, it generates the props that should be applied to the field based on the provided arguments.
@@ -21,7 +22,7 @@ export interface PreactFormValidityObserver<M = string> extends Omit<FormValidit
21
22
* <input {...configure("comment", { maxlength: 10 }) } />
22
23
* <input name="another-comment" maxlength={10} />
23
24
*/
24
- configure < E extends ValidatableField > ( name : string , errorMessages : PreactValidationErrors < M , E > ) : PreactFieldProps ;
25
+ configure < E extends ValidatableField > ( name : string , errorMessages : PreactValidationErrors < M , E , R > ) : PreactFieldProps ;
25
26
26
27
/**
27
28
* Creates a Preact `ref` callback used to automatically setup and cleanup a form's observer.
@@ -54,21 +55,28 @@ export type PreactFieldProps = Pick<
54
55
* An augmetation of {@link ValidationErrors} for `Preact`. Represents the constraints that should be applied
55
56
* to a form field, and the error messages that should be displayed when those constraints are broken.
56
57
*/
57
- export interface PreactValidationErrors < M , E extends ValidatableField = ValidatableField >
58
- extends Pick < ValidationErrors < M , E > , "badinput" | "validate" > {
58
+ export interface PreactValidationErrors < M , E extends ValidatableField = ValidatableField , R extends boolean = false >
59
+ extends Pick < ValidationErrors < M , E , R > , "badinput" | "validate" > {
59
60
// Standard HTML Attributes
60
- required ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "required" ] , E > | ErrorMessage < string , E > ;
61
- minlength ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "minlength" ] , E > ;
62
- min ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "min" ] , E > ;
63
- maxlength ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "maxlength" ] , E > ;
64
- max ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "max" ] , E > ;
65
- step ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "step" ] , E > ;
66
- type ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "type" ] , E > ;
67
- pattern ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "pattern" ] , E > ;
61
+ required ?:
62
+ | PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "required" ] , E , R >
63
+ | ErrorMessage < R extends true ? M : string , E > ;
64
+ minlength ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "minlength" ] , E , R > ;
65
+ min ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "min" ] , E , R > ;
66
+ maxlength ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "maxlength" ] , E , R > ;
67
+ max ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "max" ] , E , R > ;
68
+ step ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "step" ] , E , R > ;
69
+ type ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "type" ] , E , R > ;
70
+ pattern ?: PreactErrorDetails < M , JSX . IntrinsicElements [ "input" ] [ "pattern" ] , E , R > ;
68
71
}
69
72
70
73
/** An augmentation of the core `ErrorDetails` type for `Preact`. */
71
- export type PreactErrorDetails < M , V , E extends ValidatableField = ValidatableField > =
74
+ export type PreactErrorDetails < M , V , E extends ValidatableField = ValidatableField , R extends boolean = false > =
72
75
| V
73
- | { render : true ; message : ErrorMessage < M , E > ; value : V }
74
- | { render ?: false ; message : ErrorMessage < string , E > ; value : V } ;
76
+ | ( R extends true
77
+ ?
78
+ | { render ?: true ; message : ErrorMessage < M , E > ; value : V }
79
+ | { render : false ; message : ErrorMessage < string , E > ; value : V }
80
+ :
81
+ | { render : true ; message : ErrorMessage < M , E > ; value : V }
82
+ | { render ?: false ; message : ErrorMessage < string , E > ; value : V } ) ;
0 commit comments