@skbkontur/react-ui-validations 1.5.7 → 1.6.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +256 -263
- package/index.js +78 -53
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -1,263 +1,256 @@
|
|
|
1
|
-
// Generated by dts-bundle v0.7.3
|
|
2
|
-
// Dependencies for this module:
|
|
3
|
-
// ../../react
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
export function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
import
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
static
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
export
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
declare module '@skbkontur/react-ui-validations/src/
|
|
110
|
-
import
|
|
111
|
-
import
|
|
112
|
-
import {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
export
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
declare module '@skbkontur/react-ui-validations/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
export
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
export
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
getReader(tokens: PathTokensCache): ValidationReader<T>;
|
|
258
|
-
set(validation: ValidationInfo): void;
|
|
259
|
-
isValidated(): boolean;
|
|
260
|
-
getNode<TChild>(path: string[]): ValidationWriter<TChild>;
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
1
|
+
// Generated by dts-bundle v0.7.3
|
|
2
|
+
// Dependencies for this module:
|
|
3
|
+
// ../../react
|
|
4
|
+
|
|
5
|
+
declare module '@skbkontur/react-ui-validations' {
|
|
6
|
+
import { text, tooltip } from '@skbkontur/react-ui-validations/src/ErrorRenderer';
|
|
7
|
+
import { ValidationContainer, ValidationContainerProps } from '@skbkontur/react-ui-validations/src/ValidationContainer';
|
|
8
|
+
import { TooltipPosition, ValidationTooltip, ValidationTooltipProps } from '@skbkontur/react-ui-validations/src/ValidationTooltip';
|
|
9
|
+
import { RenderErrorMessage, Validation, ValidationBehaviour } from '@skbkontur/react-ui-validations/src/ValidationWrapperInternal';
|
|
10
|
+
import { ValidationWrapper, ValidationInfo, ValidationWrapperProps } from '@skbkontur/react-ui-validations/src/ValidationWrapper';
|
|
11
|
+
import { ValidationContext, ValidationContextType, ValidationContextWrapper, ValidationContextWrapperProps } from '@skbkontur/react-ui-validations/src/ValidationContextWrapper';
|
|
12
|
+
export { ValidationContainer, ValidationContainerProps, ValidationContext, ValidationContextType, ValidationContextWrapper, ValidationContextWrapperProps, ValidationWrapper as ValidationWrapperV1, ValidationWrapperProps as ValidationWrapperV1Props, RenderErrorMessage, ValidationBehaviour, Validation, ValidationWrapper, ValidationWrapperProps, ValidationInfo, ValidationTooltip, ValidationTooltipProps, TooltipPosition, tooltip, text, };
|
|
13
|
+
export * from '@skbkontur/react-ui-validations/src/Validations';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare module '@skbkontur/react-ui-validations/src/ErrorRenderer' {
|
|
17
|
+
import { TooltipPosition } from '@skbkontur/react-ui-validations/src/ValidationTooltip';
|
|
18
|
+
import { RenderErrorMessage } from '@skbkontur/react-ui-validations/src/ValidationWrapperInternal';
|
|
19
|
+
export function tooltip(pos: TooltipPosition): RenderErrorMessage;
|
|
20
|
+
export function text(pos?: 'bottom' | 'right'): RenderErrorMessage;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
declare module '@skbkontur/react-ui-validations/src/ValidationContainer' {
|
|
24
|
+
import React from 'react';
|
|
25
|
+
import { Nullable } from '@skbkontur/react-ui-validations/typings/Types';
|
|
26
|
+
export interface ScrollOffset {
|
|
27
|
+
top?: number;
|
|
28
|
+
bottom?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface ValidationContainerProps {
|
|
31
|
+
children?: React.ReactNode;
|
|
32
|
+
onValidationUpdated?: (isValid?: Nullable<boolean>) => void;
|
|
33
|
+
scrollOffset?: number | ScrollOffset;
|
|
34
|
+
disableSmoothScroll: boolean;
|
|
35
|
+
}
|
|
36
|
+
export class ValidationContainer extends React.Component<ValidationContainerProps> {
|
|
37
|
+
static __KONTUR_REACT_UI__: string;
|
|
38
|
+
static defaultProps: {
|
|
39
|
+
disableSmoothScroll: boolean;
|
|
40
|
+
};
|
|
41
|
+
static propTypes: {
|
|
42
|
+
scrollOffset(props: ValidationContainerProps, propName: keyof ValidationContainerProps, componentName: string): Error | undefined;
|
|
43
|
+
};
|
|
44
|
+
submit(withoutFocus?: boolean): Promise<void>;
|
|
45
|
+
validate(withoutFocus?: boolean): Promise<boolean>;
|
|
46
|
+
render(): JSX.Element;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
declare module '@skbkontur/react-ui-validations/src/ValidationTooltip' {
|
|
51
|
+
import React from 'react';
|
|
52
|
+
export type TooltipPosition = 'top left' | 'top center' | 'top right' | 'bottom left' | 'bottom center' | 'bottom right' | 'left top' | 'left middle' | 'left bottom' | 'right top' | 'right middle' | 'right bottom';
|
|
53
|
+
export interface ValidationTooltipProps {
|
|
54
|
+
children: React.ReactElement<any>;
|
|
55
|
+
error: boolean;
|
|
56
|
+
pos?: TooltipPosition;
|
|
57
|
+
render?: () => React.ReactNode;
|
|
58
|
+
}
|
|
59
|
+
export class ValidationTooltip extends React.Component<ValidationTooltipProps> {
|
|
60
|
+
render(): JSX.Element;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
declare module '@skbkontur/react-ui-validations/src/ValidationWrapperInternal' {
|
|
65
|
+
import React from 'react';
|
|
66
|
+
import { Nullable } from '@skbkontur/react-ui-validations/typings/Types';
|
|
67
|
+
import { ValidationContextType } from '@skbkontur/react-ui-validations/src/ValidationContextWrapper';
|
|
68
|
+
export type ValidationBehaviour = 'immediate' | 'lostfocus' | 'submit';
|
|
69
|
+
export type ValidationLevel = 'error' | 'warning';
|
|
70
|
+
export interface Validation {
|
|
71
|
+
level: ValidationLevel;
|
|
72
|
+
behaviour: ValidationBehaviour;
|
|
73
|
+
message: React.ReactNode;
|
|
74
|
+
independent: boolean;
|
|
75
|
+
}
|
|
76
|
+
export type RenderErrorMessage = (control: React.ReactElement<any>, hasError: boolean, validation: Nullable<Validation>) => React.ReactElement<any>;
|
|
77
|
+
export interface ValidationWrapperInternalProps {
|
|
78
|
+
children?: React.ReactElement<any>;
|
|
79
|
+
validation: Nullable<Validation>;
|
|
80
|
+
errorMessage: RenderErrorMessage;
|
|
81
|
+
}
|
|
82
|
+
interface ValidationWrapperInternalState {
|
|
83
|
+
validation: Nullable<Validation>;
|
|
84
|
+
}
|
|
85
|
+
interface Point {
|
|
86
|
+
x: number;
|
|
87
|
+
y: number;
|
|
88
|
+
}
|
|
89
|
+
export class ValidationWrapperInternal extends React.Component<ValidationWrapperInternalProps, ValidationWrapperInternalState> {
|
|
90
|
+
state: ValidationWrapperInternalState;
|
|
91
|
+
isChanging: boolean;
|
|
92
|
+
static contextType: React.Context<ValidationContextType>;
|
|
93
|
+
context: ValidationContextType;
|
|
94
|
+
componentDidMount(): void;
|
|
95
|
+
componentWillUnmount(): void;
|
|
96
|
+
componentDidUpdate(): void;
|
|
97
|
+
focus(): Promise<void>;
|
|
98
|
+
render(): React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any> | null) | (new (props: any) => React.Component<any, any, any>)>;
|
|
99
|
+
getRootNode: () => Nullable<HTMLElement>;
|
|
100
|
+
getControlPosition(): Nullable<Point>;
|
|
101
|
+
processBlur(): Promise<void>;
|
|
102
|
+
processSubmit(): Promise<void>;
|
|
103
|
+
hasError(): boolean;
|
|
104
|
+
isIndependent(): boolean;
|
|
105
|
+
}
|
|
106
|
+
export {};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
declare module '@skbkontur/react-ui-validations/src/ValidationWrapper' {
|
|
110
|
+
import React from 'react';
|
|
111
|
+
import { Nullable } from '@skbkontur/react-ui-validations/typings/Types';
|
|
112
|
+
import { RenderErrorMessage, ValidationBehaviour, ValidationLevel } from '@skbkontur/react-ui-validations/src/ValidationWrapperInternal';
|
|
113
|
+
export interface ValidationInfo {
|
|
114
|
+
type?: Nullable<ValidationBehaviour>;
|
|
115
|
+
level?: Nullable<ValidationLevel>;
|
|
116
|
+
message: React.ReactNode;
|
|
117
|
+
independent?: boolean;
|
|
118
|
+
}
|
|
119
|
+
export interface ValidationWrapperProps {
|
|
120
|
+
children?: React.ReactElement<any>;
|
|
121
|
+
validationInfo: Nullable<ValidationInfo>;
|
|
122
|
+
renderMessage?: Nullable<RenderErrorMessage>;
|
|
123
|
+
}
|
|
124
|
+
export class ValidationWrapper extends React.Component<ValidationWrapperProps> {
|
|
125
|
+
static __KONTUR_REACT_UI__: string;
|
|
126
|
+
render(): JSX.Element;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
declare module '@skbkontur/react-ui-validations/src/ValidationContextWrapper' {
|
|
131
|
+
import React from 'react';
|
|
132
|
+
import { ValidationWrapperInternal } from '@skbkontur/react-ui-validations/src/ValidationWrapperInternal';
|
|
133
|
+
import { ScrollOffset } from '@skbkontur/react-ui-validations/src/ValidationContainer';
|
|
134
|
+
export interface ValidationContextSettings {
|
|
135
|
+
scrollOffset: ScrollOffset;
|
|
136
|
+
disableSmoothScroll: boolean;
|
|
137
|
+
}
|
|
138
|
+
export interface ValidationContextWrapperProps {
|
|
139
|
+
children?: React.ReactNode;
|
|
140
|
+
onValidationUpdated?: (isValid?: boolean) => void;
|
|
141
|
+
scrollOffset?: number | ScrollOffset;
|
|
142
|
+
disableSmoothScroll: boolean;
|
|
143
|
+
}
|
|
144
|
+
export interface ValidationContextType {
|
|
145
|
+
register: (wrapper: ValidationWrapperInternal) => void;
|
|
146
|
+
unregister: (wrapper: ValidationWrapperInternal) => void;
|
|
147
|
+
instanceProcessBlur: (wrapper: ValidationWrapperInternal) => void;
|
|
148
|
+
onValidationUpdated: (wrapper: ValidationWrapperInternal, isValid: boolean) => void;
|
|
149
|
+
getSettings: () => ValidationContextSettings;
|
|
150
|
+
isAnyWrapperInChangingMode: () => boolean;
|
|
151
|
+
}
|
|
152
|
+
export const ValidationContext: React.Context<ValidationContextType>;
|
|
153
|
+
export class ValidationContextWrapper extends React.Component<ValidationContextWrapperProps> {
|
|
154
|
+
childWrappers: ValidationWrapperInternal[];
|
|
155
|
+
getSettings(): ValidationContextSettings;
|
|
156
|
+
register(wrapper: ValidationWrapperInternal): void;
|
|
157
|
+
unregister(wrapper: ValidationWrapperInternal): void;
|
|
158
|
+
instanceProcessBlur(instance: ValidationWrapperInternal): void;
|
|
159
|
+
onValidationUpdated(wrapper: ValidationWrapperInternal, isValid?: boolean): void;
|
|
160
|
+
isAnyWrapperInChangingMode(): boolean;
|
|
161
|
+
onValidationRemoved(): void;
|
|
162
|
+
getChildWrappersSortedByPosition(): ValidationWrapperInternal[];
|
|
163
|
+
validate(withoutFocus: boolean): Promise<boolean>;
|
|
164
|
+
render(): JSX.Element;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
declare module '@skbkontur/react-ui-validations/src/Validations' {
|
|
169
|
+
import { ValidationBuilder } from '@skbkontur/react-ui-validations/src/Validations/ValidationBuilder';
|
|
170
|
+
import { RootValidationRule, ValidationRule, ItemValidationRule } from '@skbkontur/react-ui-validations/src/Validations/Types';
|
|
171
|
+
import { ValidationReader } from '@skbkontur/react-ui-validations/src/Validations/ValidationReader';
|
|
172
|
+
export type Validator<T> = (value: T) => ValidationReader<T>;
|
|
173
|
+
export function createValidator<T>(rule: RootValidationRule<T>): Validator<T>;
|
|
174
|
+
export { ValidationReader, ValidationBuilder, RootValidationRule, ValidationRule, ItemValidationRule };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
declare module '@skbkontur/react-ui-validations/typings/Types' {
|
|
178
|
+
export type Nullable<T> = T | null | undefined;
|
|
179
|
+
export type Omit<T extends object, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
|
|
180
|
+
export type ExtractItem<T> = T extends Array<infer TItem> ? TItem : never;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
declare module '@skbkontur/react-ui-validations/src/Validations/ValidationBuilder' {
|
|
184
|
+
import React from 'react';
|
|
185
|
+
import { ValidationBehaviour, ValidationLevel } from '@skbkontur/react-ui-validations/src/ValidationWrapperInternal';
|
|
186
|
+
import { ValidationInfo } from '@skbkontur/react-ui-validations/src/ValidationWrapper';
|
|
187
|
+
import { LambdaPath, PathTokensCache } from '@skbkontur/react-ui-validations/src/Validations/PathHelper';
|
|
188
|
+
import { ValidationWriter } from '@skbkontur/react-ui-validations/src/Validations/ValidationWriter';
|
|
189
|
+
import { ItemValidationRule, ValidationRule } from '@skbkontur/react-ui-validations/src/Validations/Types';
|
|
190
|
+
export class ValidationBuilder<TRoot, T> {
|
|
191
|
+
constructor(writer: ValidationWriter<TRoot>, tokens: PathTokensCache, path: string[], data: T);
|
|
192
|
+
prop<TChild>(lambdaPath: LambdaPath<T, TChild>, rule: ValidationRule<TRoot, TChild>): void;
|
|
193
|
+
array<TChild>(lambdaPath: LambdaPath<T, TChild[]>, rule: ItemValidationRule<TRoot, TChild>): void;
|
|
194
|
+
invalid(isInvalid: (value: T) => boolean, validationInfo: ValidationInfo): void;
|
|
195
|
+
invalid(isInvalid: (value: T) => boolean, message: React.ReactNode, type?: ValidationBehaviour, level?: ValidationLevel, independent?: boolean): void;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
declare module '@skbkontur/react-ui-validations/src/Validations/Types' {
|
|
200
|
+
import { Nullable } from '@skbkontur/react-ui-validations/typings/Types';
|
|
201
|
+
import { ValidationInfo } from '@skbkontur/react-ui-validations/src/ValidationWrapper';
|
|
202
|
+
import { ValidationBuilder } from '@skbkontur/react-ui-validations/src/Validations/ValidationBuilder';
|
|
203
|
+
export interface ValidationNode<T> {
|
|
204
|
+
validation: Nullable<ValidationInfo>;
|
|
205
|
+
children: Nullable<{
|
|
206
|
+
[K in keyof T]: ValidationNode<T[K]>;
|
|
207
|
+
}>;
|
|
208
|
+
}
|
|
209
|
+
export type ValidationRule<TRoot, T> = (builder: ValidationBuilder<TRoot, T>, value: T) => void;
|
|
210
|
+
export type ItemValidationRule<TRoot, T> = (builder: ValidationBuilder<TRoot, T>, value: T, index: number, array: T[]) => void;
|
|
211
|
+
export type RootValidationRule<T> = ValidationRule<T, T>;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
declare module '@skbkontur/react-ui-validations/src/Validations/ValidationReader' {
|
|
215
|
+
import { ValidationInfo } from '@skbkontur/react-ui-validations/src/ValidationWrapper';
|
|
216
|
+
import { ExtractItem, Nullable } from '@skbkontur/react-ui-validations/typings/Types';
|
|
217
|
+
import { ValidationNode } from '@skbkontur/react-ui-validations/src/Validations/Types';
|
|
218
|
+
import { LambdaPath, PathTokensCache } from '@skbkontur/react-ui-validations/src/Validations/PathHelper';
|
|
219
|
+
export class ValidationReader<T> {
|
|
220
|
+
constructor(node: Nullable<ValidationNode<T>>, tokens: PathTokensCache);
|
|
221
|
+
getNode<TChild>(lambdaPath: LambdaPath<T, TChild>): ValidationReader<TChild>;
|
|
222
|
+
getNodeByIndex(index: number): ValidationReader<ExtractItem<T>>;
|
|
223
|
+
getNodeByKey<TKey extends keyof T>(key: TKey): ValidationReader<T[TKey]>;
|
|
224
|
+
get(): Nullable<ValidationInfo>;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
declare module '@skbkontur/react-ui-validations/src/Validations/PathHelper' {
|
|
229
|
+
type NonNullableRecursive<T> = {
|
|
230
|
+
[K in keyof T]: T[K] extends object ? NonNullable<NonNullableRecursive<T[K]>> : NonNullable<T[K]>;
|
|
231
|
+
};
|
|
232
|
+
export type LambdaPath<T, TChild> = (x: NonNullable<NonNullableRecursive<T>>) => TChild;
|
|
233
|
+
export function extractPath(lambda: string): string;
|
|
234
|
+
export function extractTokens(path: string): string[];
|
|
235
|
+
export class PathTokensCache {
|
|
236
|
+
getOrAdd<T, TChild>(lambdaPath: LambdaPath<T, TChild>): string[];
|
|
237
|
+
has<T, TChild>(lambdaPath: LambdaPath<T, TChild>): boolean;
|
|
238
|
+
get size(): number;
|
|
239
|
+
}
|
|
240
|
+
export {};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
declare module '@skbkontur/react-ui-validations/src/Validations/ValidationWriter' {
|
|
244
|
+
import { ValidationInfo } from '@skbkontur/react-ui-validations/src/ValidationWrapper';
|
|
245
|
+
import { ValidationNode } from '@skbkontur/react-ui-validations/src/Validations/Types';
|
|
246
|
+
import { ValidationReader } from '@skbkontur/react-ui-validations/src/Validations/ValidationReader';
|
|
247
|
+
import { PathTokensCache } from '@skbkontur/react-ui-validations/src/Validations/PathHelper';
|
|
248
|
+
export class ValidationWriter<T> {
|
|
249
|
+
constructor(node?: ValidationNode<T>);
|
|
250
|
+
getReader(tokens: PathTokensCache): ValidationReader<T>;
|
|
251
|
+
set(validation: ValidationInfo): void;
|
|
252
|
+
isValidated(): boolean;
|
|
253
|
+
getNode<TChild>(path: string[]): ValidationWriter<TChild>;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
package/index.js
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
|
-
var PropTypes = require('prop-types');
|
|
7
|
-
var ReactDom = require('react-dom');
|
|
8
6
|
var warning = require('warning');
|
|
9
7
|
|
|
10
8
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -192,19 +190,26 @@ var isReactUITestEnv = Boolean(REACT_UI_TEST) || // for cases when NODE_ENV is n
|
|
|
192
190
|
var isTestEnv = NODE_ENV === 'test' || isReactUITestEnv;
|
|
193
191
|
var isBrowser = typeof window !== 'undefined';
|
|
194
192
|
|
|
195
|
-
var ValidationContext =
|
|
196
|
-
|
|
197
|
-
function
|
|
193
|
+
var ValidationContext = React__default['default'].createContext({
|
|
194
|
+
register: function () { return undefined; },
|
|
195
|
+
unregister: function () { return undefined; },
|
|
196
|
+
instanceProcessBlur: function () { return undefined; },
|
|
197
|
+
onValidationUpdated: function () { return undefined; },
|
|
198
|
+
getSettings: function () { return ({
|
|
199
|
+
scrollOffset: {},
|
|
200
|
+
disableSmoothScroll: false,
|
|
201
|
+
}); },
|
|
202
|
+
isAnyWrapperInChangingMode: function () { return false; },
|
|
203
|
+
});
|
|
204
|
+
ValidationContext.displayName = 'ValidationContext';
|
|
205
|
+
var ValidationContextWrapper = /** @class */ (function (_super) {
|
|
206
|
+
__extends(ValidationContextWrapper, _super);
|
|
207
|
+
function ValidationContextWrapper() {
|
|
198
208
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
199
209
|
_this.childWrappers = [];
|
|
200
210
|
return _this;
|
|
201
211
|
}
|
|
202
|
-
|
|
203
|
-
return {
|
|
204
|
-
validationContext: this,
|
|
205
|
-
};
|
|
206
|
-
};
|
|
207
|
-
ValidationContext.prototype.getSettings = function () {
|
|
212
|
+
ValidationContextWrapper.prototype.getSettings = function () {
|
|
208
213
|
var scrollOffset = {};
|
|
209
214
|
if (typeof this.props.scrollOffset === 'number') {
|
|
210
215
|
scrollOffset = { top: this.props.scrollOffset };
|
|
@@ -221,20 +226,20 @@ var ValidationContext = /** @class */ (function (_super) {
|
|
|
221
226
|
disableSmoothScroll: this.props.disableSmoothScroll,
|
|
222
227
|
};
|
|
223
228
|
};
|
|
224
|
-
|
|
229
|
+
ValidationContextWrapper.prototype.register = function (wrapper) {
|
|
225
230
|
this.childWrappers.push(wrapper);
|
|
226
231
|
};
|
|
227
|
-
|
|
232
|
+
ValidationContextWrapper.prototype.unregister = function (wrapper) {
|
|
228
233
|
this.childWrappers.splice(this.childWrappers.indexOf(wrapper), 1);
|
|
229
234
|
this.onValidationRemoved();
|
|
230
235
|
};
|
|
231
|
-
|
|
232
|
-
for (var _i = 0, _a = this.childWrappers.filter(function (x) { return x !== instance; }); _i < _a.length; _i++) {
|
|
236
|
+
ValidationContextWrapper.prototype.instanceProcessBlur = function (instance) {
|
|
237
|
+
for (var _i = 0, _a = this.childWrappers.filter(function (x) { return x !== instance && !x.isIndependent(); }); _i < _a.length; _i++) {
|
|
233
238
|
var wrapper = _a[_i];
|
|
234
239
|
wrapper.processBlur();
|
|
235
240
|
}
|
|
236
241
|
};
|
|
237
|
-
|
|
242
|
+
ValidationContextWrapper.prototype.onValidationUpdated = function (wrapper, isValid) {
|
|
238
243
|
var onValidationUpdated = this.props.onValidationUpdated;
|
|
239
244
|
if (onValidationUpdated) {
|
|
240
245
|
var isValidResult = !this.childWrappers.find(function (x) {
|
|
@@ -246,17 +251,17 @@ var ValidationContext = /** @class */ (function (_super) {
|
|
|
246
251
|
onValidationUpdated(isValidResult);
|
|
247
252
|
}
|
|
248
253
|
};
|
|
249
|
-
|
|
254
|
+
ValidationContextWrapper.prototype.isAnyWrapperInChangingMode = function () {
|
|
250
255
|
return this.childWrappers.some(function (x) { return x.isChanging; });
|
|
251
256
|
};
|
|
252
|
-
|
|
257
|
+
ValidationContextWrapper.prototype.onValidationRemoved = function () {
|
|
253
258
|
var onValidationUpdated = this.props.onValidationUpdated;
|
|
254
259
|
if (onValidationUpdated) {
|
|
255
260
|
var isValidResult = !this.childWrappers.find(function (x) { return x.hasError(); });
|
|
256
261
|
onValidationUpdated(isValidResult);
|
|
257
262
|
}
|
|
258
263
|
};
|
|
259
|
-
|
|
264
|
+
ValidationContextWrapper.prototype.getChildWrappersSortedByPosition = function () {
|
|
260
265
|
var wrappersWithPosition = __spreadArrays(this.childWrappers).map(function (x) { return ({
|
|
261
266
|
target: x,
|
|
262
267
|
position: x.getControlPosition(),
|
|
@@ -280,7 +285,7 @@ var ValidationContext = /** @class */ (function (_super) {
|
|
|
280
285
|
});
|
|
281
286
|
return wrappersWithPosition.map(function (x) { return x.target; });
|
|
282
287
|
};
|
|
283
|
-
|
|
288
|
+
ValidationContextWrapper.prototype.validate = function (withoutFocus) {
|
|
284
289
|
return __awaiter(this, void 0, void 0, function () {
|
|
285
290
|
var firstInvalid;
|
|
286
291
|
return __generator(this, function (_a) {
|
|
@@ -302,13 +307,11 @@ var ValidationContext = /** @class */ (function (_super) {
|
|
|
302
307
|
});
|
|
303
308
|
});
|
|
304
309
|
};
|
|
305
|
-
|
|
306
|
-
return React__default['default'].createElement(
|
|
310
|
+
ValidationContextWrapper.prototype.render = function () {
|
|
311
|
+
return (React__default['default'].createElement(ValidationContext.Provider, { value: this },
|
|
312
|
+
React__default['default'].createElement("span", null, this.props.children)));
|
|
307
313
|
};
|
|
308
|
-
|
|
309
|
-
validationContext: PropTypes.any,
|
|
310
|
-
};
|
|
311
|
-
return ValidationContext;
|
|
314
|
+
return ValidationContextWrapper;
|
|
312
315
|
}(React__default['default'].Component));
|
|
313
316
|
|
|
314
317
|
var ValidationContainer = /** @class */ (function (_super) {
|
|
@@ -344,7 +347,7 @@ var ValidationContainer = /** @class */ (function (_super) {
|
|
|
344
347
|
return this.childContext.validate(withoutFocus);
|
|
345
348
|
};
|
|
346
349
|
ValidationContainer.prototype.render = function () {
|
|
347
|
-
return (React__default['default'].createElement(
|
|
350
|
+
return (React__default['default'].createElement(ValidationContextWrapper, { ref: this.refChildContext, scrollOffset: this.props.scrollOffset, disableSmoothScroll: this.props.disableSmoothScroll, onValidationUpdated: this.props.onValidationUpdated }, this.props.children));
|
|
348
351
|
};
|
|
349
352
|
ValidationContainer.__KONTUR_REACT_UI__ = 'ValidationContainer';
|
|
350
353
|
ValidationContainer.defaultProps = {
|
|
@@ -523,11 +526,19 @@ function getType(validation) {
|
|
|
523
526
|
function getLevel(validation) {
|
|
524
527
|
return validation ? validation.level : null;
|
|
525
528
|
}
|
|
529
|
+
function getIndependent(validation) {
|
|
530
|
+
return validation ? validation.independent : null;
|
|
531
|
+
}
|
|
526
532
|
function isEqual(a, b) {
|
|
527
533
|
if (a === b) {
|
|
528
534
|
return true;
|
|
529
535
|
}
|
|
530
|
-
return !!a &&
|
|
536
|
+
return (!!a &&
|
|
537
|
+
!!b &&
|
|
538
|
+
a.behaviour === b.behaviour &&
|
|
539
|
+
a.level === a.level &&
|
|
540
|
+
a.message === b.message &&
|
|
541
|
+
a.independent === b.independent);
|
|
531
542
|
}
|
|
532
543
|
|
|
533
544
|
if (isBrowser && typeof HTMLElement === 'undefined') {
|
|
@@ -542,25 +553,26 @@ var ValidationWrapperInternal = /** @class */ (function (_super) {
|
|
|
542
553
|
validation: null,
|
|
543
554
|
};
|
|
544
555
|
_this.isChanging = false;
|
|
556
|
+
_this.context = _this.context;
|
|
557
|
+
_this.setRootNode = function (element) {
|
|
558
|
+
_this.rootNode = element;
|
|
559
|
+
};
|
|
560
|
+
_this.getRootNode = function () {
|
|
561
|
+
return _this.rootNode;
|
|
562
|
+
};
|
|
545
563
|
return _this;
|
|
546
564
|
}
|
|
547
|
-
ValidationWrapperInternal.prototype.UNSAFE_componentWillMount = function () {
|
|
548
|
-
this.applyValidation(this.props.validation);
|
|
549
|
-
};
|
|
550
565
|
ValidationWrapperInternal.prototype.componentDidMount = function () {
|
|
551
|
-
warning__default['default'](this.context
|
|
566
|
+
warning__default['default'](this.context, 'ValidationWrapper should appears as child of ValidationContainer.\n' +
|
|
552
567
|
'https://tech.skbkontur.ru/react-ui-validations/#/getting-started');
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
}
|
|
568
|
+
this.context.register(this);
|
|
569
|
+
this.applyValidation(this.props.validation);
|
|
556
570
|
};
|
|
557
571
|
ValidationWrapperInternal.prototype.componentWillUnmount = function () {
|
|
558
|
-
|
|
559
|
-
this.context.validationContext.unregister(this);
|
|
560
|
-
}
|
|
572
|
+
this.context.unregister(this);
|
|
561
573
|
};
|
|
562
|
-
ValidationWrapperInternal.prototype.
|
|
563
|
-
this.applyValidation(
|
|
574
|
+
ValidationWrapperInternal.prototype.componentDidUpdate = function () {
|
|
575
|
+
this.applyValidation(this.props.validation);
|
|
564
576
|
};
|
|
565
577
|
ValidationWrapperInternal.prototype.focus = function () {
|
|
566
578
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -568,9 +580,9 @@ var ValidationWrapperInternal = /** @class */ (function (_super) {
|
|
|
568
580
|
return __generator(this, function (_b) {
|
|
569
581
|
switch (_b.label) {
|
|
570
582
|
case 0:
|
|
571
|
-
htmlElement =
|
|
583
|
+
htmlElement = this.getRootNode();
|
|
572
584
|
if (!(htmlElement instanceof HTMLElement)) return [3 /*break*/, 3];
|
|
573
|
-
_a = this.context.
|
|
585
|
+
_a = this.context.getSettings(), disableSmoothScroll = _a.disableSmoothScroll, scrollOffset = _a.scrollOffset;
|
|
574
586
|
if (!!disableSmoothScroll) return [3 /*break*/, 2];
|
|
575
587
|
return [4 /*yield*/, smoothScrollIntoView(htmlElement, scrollOffset)];
|
|
576
588
|
case 1:
|
|
@@ -657,10 +669,10 @@ var ValidationWrapperInternal = /** @class */ (function (_super) {
|
|
|
657
669
|
},
|
|
658
670
|
});
|
|
659
671
|
}
|
|
660
|
-
return this.props.errorMessage(React__default['default'].createElement("span",
|
|
672
|
+
return this.props.errorMessage(React__default['default'].createElement("span", { ref: this.setRootNode }, clonedChild), !!validation, validation);
|
|
661
673
|
};
|
|
662
674
|
ValidationWrapperInternal.prototype.getControlPosition = function () {
|
|
663
|
-
var htmlElement =
|
|
675
|
+
var htmlElement = this.getRootNode();
|
|
664
676
|
if (htmlElement instanceof HTMLElement) {
|
|
665
677
|
var rect = htmlElement.getBoundingClientRect();
|
|
666
678
|
return { x: rect.top, y: rect.left };
|
|
@@ -684,11 +696,16 @@ var ValidationWrapperInternal = /** @class */ (function (_super) {
|
|
|
684
696
|
ValidationWrapperInternal.prototype.hasError = function () {
|
|
685
697
|
return getLevel(this.state.validation) === 'error';
|
|
686
698
|
};
|
|
699
|
+
ValidationWrapperInternal.prototype.isIndependent = function () {
|
|
700
|
+
return getIndependent(this.state.validation || this.props.validation) === true;
|
|
701
|
+
};
|
|
687
702
|
ValidationWrapperInternal.prototype.handleBlur = function () {
|
|
688
703
|
var _this = this;
|
|
689
704
|
setTimeout(function () {
|
|
690
705
|
_this.processBlur();
|
|
691
|
-
_this.
|
|
706
|
+
if (!_this.isIndependent()) {
|
|
707
|
+
_this.context.instanceProcessBlur(_this);
|
|
708
|
+
}
|
|
692
709
|
_this.setState({});
|
|
693
710
|
});
|
|
694
711
|
};
|
|
@@ -705,7 +722,7 @@ var ValidationWrapperInternal = /** @class */ (function (_super) {
|
|
|
705
722
|
return new Promise(function (resolve) {
|
|
706
723
|
_this.setState({ validation: validation }, resolve);
|
|
707
724
|
if (Boolean(current) !== Boolean(validation)) {
|
|
708
|
-
_this.context.
|
|
725
|
+
_this.context.onValidationUpdated(_this, !validation);
|
|
709
726
|
}
|
|
710
727
|
});
|
|
711
728
|
};
|
|
@@ -722,12 +739,10 @@ var ValidationWrapperInternal = /** @class */ (function (_super) {
|
|
|
722
739
|
if (isEqual(visible, actual)) {
|
|
723
740
|
return visible;
|
|
724
741
|
}
|
|
725
|
-
var changing = this.context.
|
|
742
|
+
var changing = this.context.isAnyWrapperInChangingMode();
|
|
726
743
|
return getVisibleValidation(visible, actual, changing);
|
|
727
744
|
};
|
|
728
|
-
ValidationWrapperInternal.
|
|
729
|
-
validationContext: PropTypes.any,
|
|
730
|
-
};
|
|
745
|
+
ValidationWrapperInternal.contextType = ValidationContext;
|
|
731
746
|
return ValidationWrapperInternal;
|
|
732
747
|
}(React__default['default'].Component));
|
|
733
748
|
|
|
@@ -743,6 +758,7 @@ var ValidationWrapper = /** @class */ (function (_super) {
|
|
|
743
758
|
level: validationInfo.level || 'error',
|
|
744
759
|
behaviour: validationInfo.type || 'lostfocus',
|
|
745
760
|
message: validationInfo.message,
|
|
761
|
+
independent: validationInfo.independent || false,
|
|
746
762
|
}
|
|
747
763
|
: null;
|
|
748
764
|
return (React__default['default'].createElement(ValidationWrapperInternal, { errorMessage: renderMessage || tooltip('right top'), validation: validation }, children));
|
|
@@ -778,7 +794,7 @@ var ValidationBuilder = /** @class */ (function () {
|
|
|
778
794
|
rule(builder, builder.data, i, array);
|
|
779
795
|
}
|
|
780
796
|
};
|
|
781
|
-
ValidationBuilder.prototype.invalid = function (isInvalid,
|
|
797
|
+
ValidationBuilder.prototype.invalid = function (isInvalid, messageOrValidationInfo, type, level, independent) {
|
|
782
798
|
var validationWriter = this.writer.getNode(this.path);
|
|
783
799
|
if (validationWriter.isValidated()) {
|
|
784
800
|
return;
|
|
@@ -787,7 +803,12 @@ var ValidationBuilder = /** @class */ (function () {
|
|
|
787
803
|
if (!invalid) {
|
|
788
804
|
return;
|
|
789
805
|
}
|
|
790
|
-
|
|
806
|
+
if (isValidationInfo(messageOrValidationInfo)) {
|
|
807
|
+
validationWriter.set(messageOrValidationInfo);
|
|
808
|
+
}
|
|
809
|
+
else {
|
|
810
|
+
validationWriter.set({ message: messageOrValidationInfo, type: type, level: level, independent: independent });
|
|
811
|
+
}
|
|
791
812
|
};
|
|
792
813
|
ValidationBuilder.prototype.getPathInfo = function (lambdaPath) {
|
|
793
814
|
var path = this.tokens.getOrAdd(lambdaPath);
|
|
@@ -802,7 +823,10 @@ var ValidationBuilder = /** @class */ (function () {
|
|
|
802
823
|
return { data: data, path: __spreadArrays(this.path, path) };
|
|
803
824
|
};
|
|
804
825
|
return ValidationBuilder;
|
|
805
|
-
}());
|
|
826
|
+
}());
|
|
827
|
+
var isValidationInfo = function (argument) {
|
|
828
|
+
return typeof argument === 'object' && Object.prototype.hasOwnProperty.call(argument, 'message');
|
|
829
|
+
};
|
|
806
830
|
|
|
807
831
|
var ValidationReader = /** @class */ (function () {
|
|
808
832
|
function ValidationReader(node, tokens) {
|
|
@@ -932,6 +956,7 @@ function createValidator(rule) {
|
|
|
932
956
|
exports.ValidationBuilder = ValidationBuilder;
|
|
933
957
|
exports.ValidationContainer = ValidationContainer;
|
|
934
958
|
exports.ValidationContext = ValidationContext;
|
|
959
|
+
exports.ValidationContextWrapper = ValidationContextWrapper;
|
|
935
960
|
exports.ValidationReader = ValidationReader;
|
|
936
961
|
exports.ValidationTooltip = ValidationTooltip;
|
|
937
962
|
exports.ValidationWrapper = ValidationWrapper;
|