1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.FieldFeedbacks = void 0;
|
4 | const React = require("react");
|
5 | const prop_types_1 = require("prop-types");
|
6 | const FormWithConstraints_1 = require("./FormWithConstraints");
|
7 | const withValidateFieldEventEmitter_1 = require("./withValidateFieldEventEmitter");
|
8 | class FieldFeedbacksComponent extends React.PureComponent {
|
9 | }
|
10 | class FieldFeedbacks extends (0, withValidateFieldEventEmitter_1.withValidateFieldEventEmitter)(FieldFeedbacksComponent) {
|
11 | constructor(props, context) {
|
12 | super(props, context);
|
13 | this.fieldFeedbackKeyCounter = 0;
|
14 | this.validate = async (input) => {
|
15 | const { form, fieldFeedbacks: fieldFeedbacksParent } = this.context;
|
16 | let validations;
|
17 | if (input.name === this.fieldName) {
|
18 | const field = form.fieldsStore.getField(this.fieldName);
|
19 | if (fieldFeedbacksParent && (fieldFeedbacksParent.props.stop === 'first' && field.hasFeedbacks(fieldFeedbacksParent.key) ||
|
20 | fieldFeedbacksParent.props.stop === 'first-error' && field.hasErrors(fieldFeedbacksParent.key) ||
|
21 | fieldFeedbacksParent.props.stop === 'first-warning' && field.hasWarnings(fieldFeedbacksParent.key) ||
|
22 | fieldFeedbacksParent.props.stop === 'first-info' && field.hasInfos(fieldFeedbacksParent.key))) {
|
23 | }
|
24 | else {
|
25 | validations = await this._validate(input);
|
26 | }
|
27 | }
|
28 | return validations;
|
29 | };
|
30 | const { form, fieldFeedbacks: fieldFeedbacksParent } = context;
|
31 | this.key = fieldFeedbacksParent
|
32 | ? fieldFeedbacksParent.computeFieldFeedbackKey()
|
33 | : form.computeFieldFeedbacksKey();
|
34 | if (fieldFeedbacksParent) {
|
35 | this.fieldName = fieldFeedbacksParent.fieldName;
|
36 | if (props.for !== undefined) {
|
37 | throw new Error("FieldFeedbacks cannot have a parent and a 'for' prop");
|
38 | }
|
39 | }
|
40 | else {
|
41 | if (props.for === undefined) {
|
42 | throw new Error("FieldFeedbacks cannot be without parent and without 'for' prop");
|
43 | }
|
44 | else {
|
45 | this.fieldName = props.for;
|
46 | }
|
47 | }
|
48 | }
|
49 | getChildContext() {
|
50 | return {
|
51 | fieldFeedbacks: this
|
52 | };
|
53 | }
|
54 | computeFieldFeedbackKey() {
|
55 | return `${this.key}.${this.fieldFeedbackKeyCounter++}`;
|
56 | }
|
57 | addFieldFeedback() {
|
58 | return this.computeFieldFeedbackKey();
|
59 | }
|
60 | componentDidMount() {
|
61 | const { form, fieldFeedbacks: fieldFeedbacksParent } = this.context;
|
62 | form.fieldsStore.addField(this.fieldName);
|
63 | const parent = fieldFeedbacksParent !== null && fieldFeedbacksParent !== void 0 ? fieldFeedbacksParent : form;
|
64 | parent.addValidateFieldEventListener(this.validate);
|
65 | }
|
66 | componentWillUnmount() {
|
67 | const { form, fieldFeedbacks: fieldFeedbacksParent } = this.context;
|
68 | form.fieldsStore.removeField(this.fieldName);
|
69 | const parent = fieldFeedbacksParent !== null && fieldFeedbacksParent !== void 0 ? fieldFeedbacksParent : form;
|
70 | parent.removeValidateFieldEventListener(this.validate);
|
71 | }
|
72 | async _validate(input) {
|
73 | const arrayOfArrays = await this.emitValidateFieldEvent(input);
|
74 | const validations = arrayOfArrays.flat(Number.POSITIVE_INFINITY);
|
75 | return validations;
|
76 | }
|
77 | render() {
|
78 | const { children } = this.props;
|
79 | return children !== undefined ? children : null;
|
80 | }
|
81 | }
|
82 | exports.FieldFeedbacks = FieldFeedbacks;
|
83 | FieldFeedbacks.defaultProps = {
|
84 | stop: 'first-error'
|
85 | };
|
86 | FieldFeedbacks.contextTypes = {
|
87 | form: (0, prop_types_1.instanceOf)(FormWithConstraints_1.FormWithConstraints).isRequired,
|
88 | fieldFeedbacks: (0, prop_types_1.instanceOf)(FieldFeedbacks)
|
89 | };
|
90 | FieldFeedbacks.childContextTypes = {
|
91 | fieldFeedbacks: (0, prop_types_1.instanceOf)(FieldFeedbacks).isRequired
|
92 | };
|