@@ -46,13 +46,13 @@ import { Text } from './text';
4646import { IButtonProps } from './button' ;
4747import { createGroupNode } from './utils/create-group-node.util' ;
4848import { createId } from './utils/create-id.util' ;
49- import { createBuilderValidationResult } from './utils/create-builder-validation-result.util' ;
5049import { emitQuery } from './utils/emit-query.util' ;
5150import { ingestQuery } from './utils/ingest-query.util' ;
5251import { isPromiseLike } from './utils/is-promise-like.util' ;
5352import { isSameQuery } from './utils/is-same-query.util' ;
5453import { moveQueryNode } from './utils/move-query-node.util' ;
55- import { validateBuilderQuery } from './utils/validate-builder-query.util' ;
54+ import { createBuilderValidationResult } from './utils/validation/create-builder-validation-result.util' ;
55+ import { validateBuilderQuery } from './utils/validation/validate-builder-query.util' ;
5656import {
5757 DenormalizedQuery ,
5858 INormalizedRuleNode ,
@@ -111,16 +111,26 @@ export interface IBuilderValidationMessageContext {
111111 operator ?: BuilderFieldOperator ;
112112 value ?: BuilderFieldValue ;
113113 ruleId ?: string ;
114+ rangeBoundary ?: 'start' | 'end' ;
114115}
115116
116117export type BuilderValidationMessage =
117118 | string
118119 | ( ( context : IBuilderValidationMessageContext ) => string ) ;
119120
120- export interface IBuilderRangeValidation < TValue = string | number > {
121+ export interface IBuilderRangeValidation <
122+ TValueValidation = unknown ,
123+ TRangeValue = string | number
124+ > {
125+ common ?: Partial < TValueValidation > ;
126+ start ?: Partial < TValueValidation > ;
127+ end ?: Partial < TValueValidation > ;
121128 allowEqual ?: boolean ;
122129 requireAscending ?: boolean ;
123- validate ?: ( range : [ TValue , TValue ] ) => boolean | Promise < boolean > ;
130+ validate ?: (
131+ range : [ TRangeValue , TRangeValue ] ,
132+ context : IBuilderValidationMessageContext
133+ ) => boolean | Promise < boolean > ;
124134 message ?: BuilderValidationMessage ;
125135}
126136
@@ -134,48 +144,100 @@ export interface IBuilderFieldValidationBase<TValue = unknown> {
134144 customMessage ?: BuilderValidationMessage ;
135145}
136146
137- export interface ITextFieldValidation
147+ export interface ITextValueValidationRule
138148 extends IBuilderFieldValidationBase < string | string [ ] > {
139149 minLength ?: number ;
140150 maxLength ?: number ;
141151 matches ?: RegExp ;
142- range ?: IBuilderRangeValidation < string > ;
143152}
144153
145- export interface INumberFieldValidation
154+ export interface INumberValueValidationRule
146155 extends IBuilderFieldValidationBase < number | number [ ] > {
147156 min ?: number ;
148157 max ?: number ;
149158 integer ?: boolean ;
150159 positive ?: boolean ;
151160 negative ?: boolean ;
152- range ?: IBuilderRangeValidation < number > ;
153161}
154162
155- export interface IDateFieldValidation
163+ export interface IDateValueValidationRule
156164 extends IBuilderFieldValidationBase < string | string [ ] > {
157165 minDate ?: string | Date ;
158166 maxDate ?: string | Date ;
159- range ?: IBuilderRangeValidation < string > ;
160167}
161168
162- export type IBooleanFieldValidation = IBuilderFieldValidationBase < boolean > ;
169+ export type IBooleanValueValidationRule = IBuilderFieldValidationBase < boolean > ;
163170
164- export type IListFieldValidation =
171+ export type IListValueValidationRule =
165172 IBuilderFieldValidationBase < string | number > ;
166173
167- export interface IMultiListFieldValidation
174+ export interface IMultiListValueValidationRule
168175 extends IBuilderFieldValidationBase < Array < string | number > > {
169176 minItems ?: number ;
170177 maxItems ?: number ;
171178}
172179
173- export type IStatementFieldValidation = IBuilderFieldValidationBase < string > & {
180+ export type IStatementValueValidationRule =
181+ IBuilderFieldValidationBase < string > & {
174182 minLength ?: number ;
175183 maxLength ?: number ;
176184 matches ?: RegExp ;
177185} ;
178186
187+ export type IBuilderOperatorValidationRule < TRule > = Partial < TRule > & {
188+ operators : BuilderFieldOperator [ ] ;
189+ } ;
190+
191+ export interface IBuilderValidationConfig < TRule > {
192+ common ?: Partial < TRule > ;
193+ rules ?: Array < IBuilderOperatorValidationRule < TRule > > ;
194+ }
195+
196+ export interface ITextFieldValidationRule extends ITextValueValidationRule {
197+ range ?: IBuilderRangeValidation < ITextValueValidationRule , string > ;
198+ }
199+
200+ export interface INumberFieldValidationRule extends INumberValueValidationRule {
201+ range ?: IBuilderRangeValidation < INumberValueValidationRule , number > ;
202+ }
203+
204+ export interface IDateFieldValidationRule extends IDateValueValidationRule {
205+ range ?: IBuilderRangeValidation < IDateValueValidationRule , string > ;
206+ }
207+
208+ export type IStatementFieldValidationRule = IStatementValueValidationRule ;
209+ export type IBooleanFieldValidationRule = IBooleanValueValidationRule ;
210+ export type IListFieldValidationRule = IListValueValidationRule ;
211+ export type IMultiListFieldValidationRule = IMultiListValueValidationRule ;
212+
213+ export type ITextFieldValidation =
214+ | Partial < ITextFieldValidationRule >
215+ | IBuilderValidationConfig < ITextFieldValidationRule > ;
216+
217+ export type INumberFieldValidation =
218+ | Partial < INumberFieldValidationRule >
219+ | IBuilderValidationConfig < INumberFieldValidationRule > ;
220+
221+ export type IDateFieldValidation =
222+ | Partial < IDateFieldValidationRule >
223+ | IBuilderValidationConfig < IDateFieldValidationRule > ;
224+
225+ export type IBooleanFieldValidation =
226+ | Partial < IBooleanFieldValidationRule >
227+ | IBuilderValidationConfig < IBooleanFieldValidationRule > ;
228+
229+ export type IListFieldValidation =
230+ | Partial < IListFieldValidationRule >
231+ | IBuilderValidationConfig < IListFieldValidationRule > ;
232+
233+ export type IMultiListFieldValidation =
234+ | Partial < IMultiListFieldValidationRule >
235+ | IBuilderValidationConfig < IMultiListFieldValidationRule > ;
236+
237+ export type IStatementFieldValidation =
238+ | Partial < IStatementFieldValidationRule >
239+ | IBuilderValidationConfig < IStatementFieldValidationRule > ;
240+
179241interface IBuilderFieldBase <
180242 TType extends BuilderFieldType ,
181243 TValue extends BuilderFieldValue | undefined ,
0 commit comments