1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.FieldsStore = exports.FieldEvent = void 0;
|
4 | const assert_1 = require("./assert");
|
5 | const EventEmitter_1 = require("./EventEmitter");
|
6 | const Field_1 = require("./Field");
|
7 | var FieldEvent;
|
8 | (function (FieldEvent) {
|
9 | FieldEvent["Added"] = "FIELD_ADDED";
|
10 | FieldEvent["Removed"] = "FIELD_REMOVED";
|
11 | })(FieldEvent = exports.FieldEvent || (exports.FieldEvent = {}));
|
12 | class FieldsStore extends EventEmitter_1.EventEmitter {
|
13 | constructor() {
|
14 | super(...arguments);
|
15 | this.fields = new Array();
|
16 | }
|
17 | getField(fieldName) {
|
18 | const fields = this.fields.filter(_field => _field.name === fieldName);
|
19 | return fields.length === 1 ? fields[0] : undefined;
|
20 | }
|
21 | addField(fieldName) {
|
22 | const fields = this.fields.filter(_field => _field.name === fieldName);
|
23 | (0, assert_1.assert)(fields.length === 0 || fields.length === 1, `Cannot have more than 1 field matching '${fieldName}'`);
|
24 | if (fields.length === 0) {
|
25 | const newField = new Field_1.Field(fieldName);
|
26 | this.fields.push(newField);
|
27 | this.emitSync(FieldEvent.Added, newField);
|
28 | }
|
29 | else {
|
30 | }
|
31 | }
|
32 | removeField(fieldName) {
|
33 | const fields = this.fields.filter(_field => _field.name === fieldName);
|
34 | const index = this.fields.indexOf(fields[0]);
|
35 | if (index > -1) {
|
36 | this.fields.splice(index, 1);
|
37 | this.emitSync(FieldEvent.Removed, fieldName);
|
38 | }
|
39 | }
|
40 | isValid() {
|
41 | return this.fields.every(field => field.isValid());
|
42 | }
|
43 | hasFeedbacks() {
|
44 | return this.fields.some(field => field.hasFeedbacks());
|
45 | }
|
46 | }
|
47 | exports.FieldsStore = FieldsStore;
|