UNPKG

4.01 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.FieldFeedbacks = void 0;
4const React = require("react");
5const prop_types_1 = require("prop-types");
6const FormWithConstraints_1 = require("./FormWithConstraints");
7const withValidateFieldEventEmitter_1 = require("./withValidateFieldEventEmitter");
8class FieldFeedbacksComponent extends React.PureComponent {
9}
10class 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}
82exports.FieldFeedbacks = FieldFeedbacks;
83FieldFeedbacks.defaultProps = {
84 stop: 'first-error'
85};
86FieldFeedbacks.contextTypes = {
87 form: (0, prop_types_1.instanceOf)(FormWithConstraints_1.FormWithConstraints).isRequired,
88 fieldFeedbacks: (0, prop_types_1.instanceOf)(FieldFeedbacks)
89};
90FieldFeedbacks.childContextTypes = {
91 fieldFeedbacks: (0, prop_types_1.instanceOf)(FieldFeedbacks).isRequired
92};