@beinformed/ui 1.32.0 → 1.33.0-beta.2
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/CHANGELOG.md +16 -0
- package/esm/models/attributes/AttributeModel.js +1 -1
- package/esm/models/attributes/AttributeModel.js.map +1 -1
- package/esm/models/attributes/DatetimeAttributeModel.js +0 -6
- package/esm/models/attributes/DatetimeAttributeModel.js.map +1 -1
- package/esm/models/attributes/NumberAttributeModel.js +0 -6
- package/esm/models/attributes/NumberAttributeModel.js.map +1 -1
- package/esm/models/attributes/StringAttributeModel.js +46 -18
- package/esm/models/attributes/StringAttributeModel.js.map +1 -1
- package/lib/models/attributes/AttributeModel.js +1 -1
- package/lib/models/attributes/AttributeModel.js.flow +1 -1
- package/lib/models/attributes/AttributeModel.js.map +1 -1
- package/lib/models/attributes/DatetimeAttributeModel.js +0 -6
- package/lib/models/attributes/DatetimeAttributeModel.js.flow +0 -6
- package/lib/models/attributes/DatetimeAttributeModel.js.map +1 -1
- package/lib/models/attributes/NumberAttributeModel.js +0 -6
- package/lib/models/attributes/NumberAttributeModel.js.flow +0 -6
- package/lib/models/attributes/NumberAttributeModel.js.map +1 -1
- package/lib/models/attributes/StringAttributeModel.js +46 -18
- package/lib/models/attributes/StringAttributeModel.js.flow +67 -18
- package/lib/models/attributes/StringAttributeModel.js.map +1 -1
- package/lib/models/attributes/__tests__/StringAttributeModel.spec.js.flow +23 -0
- package/lib/models/filters/__tests__/ZipcodeFilter.spec.js.flow +111 -0
- package/package.json +1 -1
- package/src/models/attributes/AttributeModel.js +1 -1
- package/src/models/attributes/DatetimeAttributeModel.js +0 -6
- package/src/models/attributes/NumberAttributeModel.js +0 -6
- package/src/models/attributes/StringAttributeModel.js +67 -18
- package/src/models/attributes/__tests__/StringAttributeModel.spec.js +23 -0
- package/src/models/filters/__tests__/ZipcodeFilter.spec.js +111 -0
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
|
|
9
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
9
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
10
11
|
var _AttributeModel = _interopRequireDefault(require("./AttributeModel"));
|
|
11
12
|
var _ConstraintCollection = _interopRequireDefault(require("./input-constraints/ConstraintCollection"));
|
|
@@ -117,14 +118,16 @@ class StringAttributeModel extends _AttributeModel.default {
|
|
|
117
118
|
const constraints = new _ConstraintCollection.default();
|
|
118
119
|
if (this.isBSN()) {
|
|
119
120
|
constraints.add(new _BSNConstraint.default());
|
|
120
|
-
} else if (this.isIBAN()) {
|
|
121
|
+
} else if (this.isIBAN() && (this.operator === "" || this.operator === "exactly" || this.operator === "isNot")) {
|
|
122
|
+
// validate iban when no operator is set or exact or isNot
|
|
121
123
|
constraints.add(new _IBANConstraint.default());
|
|
122
124
|
}
|
|
123
|
-
if (this.isZipcode() && this.
|
|
125
|
+
if (this.isZipcode() && (this.operator === "" || this.operator === "exactly" || this.operator === "isNot")) {
|
|
126
|
+
// validate zip when regex is set is set or exact or isNot
|
|
124
127
|
constraints.add(new _RegexConstraint.default({
|
|
125
128
|
messageKey: "Constraint.ZipCode.InvalidFormat",
|
|
126
129
|
defaultMessage: "Must be a valid Dutch ZIP code, e.g. 1234 AB",
|
|
127
|
-
regex:
|
|
130
|
+
regex: new RegExp("^[1-9][0-9]{3} ?[a-zA-Z]{2}$", "gi")
|
|
128
131
|
}));
|
|
129
132
|
} else if (this.isEmail() && this.regexp) {
|
|
130
133
|
constraints.add(new _RegexConstraint.default({
|
|
@@ -153,15 +156,18 @@ class StringAttributeModel extends _AttributeModel.default {
|
|
|
153
156
|
*/
|
|
154
157
|
formatIBAN(value) {
|
|
155
158
|
const noFormat = this.removeFormat(value);
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
if (this.operator === "" || this.operator === "exactly" || this.operator === "isNot") {
|
|
160
|
+
const groups = noFormat.replace(/\s/g, "").match(/.{1,4}/g);
|
|
161
|
+
return groups == null ? "" : groups.join(" ");
|
|
162
|
+
}
|
|
163
|
+
return noFormat;
|
|
158
164
|
}
|
|
159
165
|
|
|
160
166
|
/**
|
|
161
167
|
*/
|
|
162
168
|
formatZipcode(value) {
|
|
163
169
|
const noFormat = this.removeFormat(value);
|
|
164
|
-
if (noFormat.length
|
|
170
|
+
if (noFormat.length === 6) {
|
|
165
171
|
return noFormat.substring(0, 4) + " " + noFormat.substring(4).toUpperCase();
|
|
166
172
|
}
|
|
167
173
|
return noFormat;
|
|
@@ -179,16 +185,22 @@ class StringAttributeModel extends _AttributeModel.default {
|
|
|
179
185
|
if (value == null || value.toString() === "") {
|
|
180
186
|
return "";
|
|
181
187
|
}
|
|
182
|
-
if (
|
|
183
|
-
return
|
|
184
|
-
}
|
|
185
|
-
if (this.isZipcode()) {
|
|
186
|
-
return this.formatZipcode(value);
|
|
187
|
-
}
|
|
188
|
-
if (this.isBSN()) {
|
|
189
|
-
return this.formatBSN(value);
|
|
188
|
+
if (typeof value !== "string") {
|
|
189
|
+
return value;
|
|
190
190
|
}
|
|
191
|
-
|
|
191
|
+
const values = this.isMultiple ? value.split(",") : [value];
|
|
192
|
+
return (0, _map.default)(values).call(values, val => {
|
|
193
|
+
if (this.isIBAN()) {
|
|
194
|
+
return this.formatIBAN(val);
|
|
195
|
+
}
|
|
196
|
+
if (this.isZipcode()) {
|
|
197
|
+
return this.formatZipcode(val);
|
|
198
|
+
}
|
|
199
|
+
if (this.isBSN()) {
|
|
200
|
+
return this.formatBSN(val);
|
|
201
|
+
}
|
|
202
|
+
return val;
|
|
203
|
+
}).join(",");
|
|
192
204
|
}
|
|
193
205
|
|
|
194
206
|
/**
|
|
@@ -198,7 +210,7 @@ class StringAttributeModel extends _AttributeModel.default {
|
|
|
198
210
|
return "";
|
|
199
211
|
}
|
|
200
212
|
if (this.isIBAN() || this.isZipcode() || this.isBSN()) {
|
|
201
|
-
return value.replace(
|
|
213
|
+
return value.replace(/[^a-z0-9,]/gi, "");
|
|
202
214
|
}
|
|
203
215
|
return value;
|
|
204
216
|
}
|
|
@@ -220,7 +232,14 @@ class StringAttributeModel extends _AttributeModel.default {
|
|
|
220
232
|
*/
|
|
221
233
|
set inputvalue(value) {
|
|
222
234
|
this._inputvalue = value;
|
|
223
|
-
|
|
235
|
+
if (value == null) {
|
|
236
|
+
this.value = value;
|
|
237
|
+
} else if (this.isMultiple) {
|
|
238
|
+
var _context;
|
|
239
|
+
this.value = (0, _map.default)(_context = value.split(",")).call(_context, val => this.removeFormat(val)).join(",");
|
|
240
|
+
} else {
|
|
241
|
+
this.value = this.removeFormat(value);
|
|
242
|
+
}
|
|
224
243
|
this.validate(this.validateValue);
|
|
225
244
|
}
|
|
226
245
|
|
|
@@ -228,7 +247,9 @@ class StringAttributeModel extends _AttributeModel.default {
|
|
|
228
247
|
*/
|
|
229
248
|
get readonlyvalue() {
|
|
230
249
|
if (typeof this.value === "string") {
|
|
231
|
-
|
|
250
|
+
const formattedValue = this.formatValue(this.value);
|
|
251
|
+
// fix for rendering of multiple spaces
|
|
252
|
+
return formattedValue.replace(/ {2}/gi, " \u00A0");
|
|
232
253
|
}
|
|
233
254
|
return this.value == null ? "" : this.value;
|
|
234
255
|
}
|
|
@@ -258,6 +279,13 @@ class StringAttributeModel extends _AttributeModel.default {
|
|
|
258
279
|
// default value (also applied for email address + download attribute)
|
|
259
280
|
return _constants.ATTRIBUTE_WIDTH.MEDIUM;
|
|
260
281
|
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Indicates if a value is multiple choice, used for filters
|
|
285
|
+
*/
|
|
286
|
+
get isMultiple() {
|
|
287
|
+
return this.getContribution("multiplechoice", false);
|
|
288
|
+
}
|
|
261
289
|
}
|
|
262
290
|
exports.default = StringAttributeModel;
|
|
263
291
|
//# sourceMappingURL=StringAttributeModel.js.map
|
|
@@ -117,16 +117,28 @@ export default class StringAttributeModel extends AttributeModel {
|
|
|
117
117
|
|
|
118
118
|
if (this.isBSN()) {
|
|
119
119
|
constraints.add(new BSNConstraint());
|
|
120
|
-
} else if (
|
|
120
|
+
} else if (
|
|
121
|
+
this.isIBAN() &&
|
|
122
|
+
(this.operator === "" ||
|
|
123
|
+
this.operator === "exactly" ||
|
|
124
|
+
this.operator === "isNot")
|
|
125
|
+
) {
|
|
126
|
+
// validate iban when no operator is set or exact or isNot
|
|
121
127
|
constraints.add(new IBANConstraint());
|
|
122
128
|
}
|
|
123
129
|
|
|
124
|
-
if (
|
|
130
|
+
if (
|
|
131
|
+
this.isZipcode() &&
|
|
132
|
+
(this.operator === "" ||
|
|
133
|
+
this.operator === "exactly" ||
|
|
134
|
+
this.operator === "isNot")
|
|
135
|
+
) {
|
|
136
|
+
// validate zip when regex is set is set or exact or isNot
|
|
125
137
|
constraints.add(
|
|
126
138
|
new RegexConstraint({
|
|
127
139
|
messageKey: "Constraint.ZipCode.InvalidFormat",
|
|
128
140
|
defaultMessage: "Must be a valid Dutch ZIP code, e.g. 1234 AB",
|
|
129
|
-
regex:
|
|
141
|
+
regex: new RegExp("^[1-9][0-9]{3} ?[a-zA-Z]{2}$", "gi"),
|
|
130
142
|
}),
|
|
131
143
|
);
|
|
132
144
|
} else if (this.isEmail() && this.regexp) {
|
|
@@ -162,15 +174,23 @@ export default class StringAttributeModel extends AttributeModel {
|
|
|
162
174
|
formatIBAN(value: string): string {
|
|
163
175
|
const noFormat = this.removeFormat(value);
|
|
164
176
|
|
|
165
|
-
|
|
166
|
-
|
|
177
|
+
if (
|
|
178
|
+
this.operator === "" ||
|
|
179
|
+
this.operator === "exactly" ||
|
|
180
|
+
this.operator === "isNot"
|
|
181
|
+
) {
|
|
182
|
+
const groups = noFormat.replace(/\s/g, "").match(/.{1,4}/g);
|
|
183
|
+
return groups == null ? "" : groups.join(" ");
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return noFormat;
|
|
167
187
|
}
|
|
168
188
|
|
|
169
189
|
/**
|
|
170
190
|
*/
|
|
171
191
|
formatZipcode(value: string): string {
|
|
172
192
|
const noFormat = this.removeFormat(value);
|
|
173
|
-
if (noFormat.length
|
|
193
|
+
if (noFormat.length === 6) {
|
|
174
194
|
return (
|
|
175
195
|
noFormat.substring(0, 4) + " " + noFormat.substring(4).toUpperCase()
|
|
176
196
|
);
|
|
@@ -191,19 +211,29 @@ export default class StringAttributeModel extends AttributeModel {
|
|
|
191
211
|
return "";
|
|
192
212
|
}
|
|
193
213
|
|
|
194
|
-
if (
|
|
195
|
-
return
|
|
214
|
+
if (typeof value !== "string") {
|
|
215
|
+
return value;
|
|
196
216
|
}
|
|
197
217
|
|
|
198
|
-
|
|
199
|
-
return this.formatZipcode(value);
|
|
200
|
-
}
|
|
218
|
+
const values = this.isMultiple ? value.split(",") : [value];
|
|
201
219
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
220
|
+
return values
|
|
221
|
+
.map((val) => {
|
|
222
|
+
if (this.isIBAN()) {
|
|
223
|
+
return this.formatIBAN(val);
|
|
224
|
+
}
|
|
205
225
|
|
|
206
|
-
|
|
226
|
+
if (this.isZipcode()) {
|
|
227
|
+
return this.formatZipcode(val);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (this.isBSN()) {
|
|
231
|
+
return this.formatBSN(val);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return val;
|
|
235
|
+
})
|
|
236
|
+
.join(",");
|
|
207
237
|
}
|
|
208
238
|
|
|
209
239
|
/**
|
|
@@ -214,7 +244,7 @@ export default class StringAttributeModel extends AttributeModel {
|
|
|
214
244
|
}
|
|
215
245
|
|
|
216
246
|
if (this.isIBAN() || this.isZipcode() || this.isBSN()) {
|
|
217
|
-
return value.replace(
|
|
247
|
+
return value.replace(/[^a-z0-9,]/gi, "");
|
|
218
248
|
}
|
|
219
249
|
|
|
220
250
|
return value;
|
|
@@ -238,7 +268,17 @@ export default class StringAttributeModel extends AttributeModel {
|
|
|
238
268
|
set inputvalue(value: string) {
|
|
239
269
|
this._inputvalue = value;
|
|
240
270
|
|
|
241
|
-
|
|
271
|
+
if (value == null) {
|
|
272
|
+
this.value = value;
|
|
273
|
+
} else if (this.isMultiple) {
|
|
274
|
+
this.value = value
|
|
275
|
+
.split(",")
|
|
276
|
+
.map((val) => this.removeFormat(val))
|
|
277
|
+
.join(",");
|
|
278
|
+
} else {
|
|
279
|
+
this.value = this.removeFormat(value);
|
|
280
|
+
}
|
|
281
|
+
|
|
242
282
|
this.validate(this.validateValue);
|
|
243
283
|
}
|
|
244
284
|
|
|
@@ -246,7 +286,9 @@ export default class StringAttributeModel extends AttributeModel {
|
|
|
246
286
|
*/
|
|
247
287
|
get readonlyvalue(): string {
|
|
248
288
|
if (typeof this.value === "string") {
|
|
249
|
-
|
|
289
|
+
const formattedValue = this.formatValue(this.value);
|
|
290
|
+
// fix for rendering of multiple spaces
|
|
291
|
+
return formattedValue.replace(/ {2}/gi, " \u00A0");
|
|
250
292
|
}
|
|
251
293
|
|
|
252
294
|
return this.value == null ? "" : this.value;
|
|
@@ -280,4 +322,11 @@ export default class StringAttributeModel extends AttributeModel {
|
|
|
280
322
|
// default value (also applied for email address + download attribute)
|
|
281
323
|
return ATTRIBUTE_WIDTH.MEDIUM;
|
|
282
324
|
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Indicates if a value is multiple choice, used for filters
|
|
328
|
+
*/
|
|
329
|
+
get isMultiple(): boolean {
|
|
330
|
+
return this.getContribution("multiplechoice", false);
|
|
331
|
+
}
|
|
283
332
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StringAttributeModel.js","names":["_AttributeModel","_interopRequireDefault","require","_ConstraintCollection","_RegexConstraint","_BSNConstraint","_IBANConstraint","_constants","StringAttributeModel","AttributeModel","constructor","attribute","attributeContributions","_defineProperty2","default","_placeholder","getContribution","getInitialInputValue","value","formatValue","isApplicableModel","contributions","layouthint","type","Array","isArray","_includes","call","regexp","regexpvalidationmessage","postfix","prefix","placeholder","isBSN","has","isIBAN","isZipcode","isEmail","addConstraints","constraints","ConstraintCollection","add","BSNConstraint","IBANConstraint","RegexConstraint","messageKey","defaultMessage","regex","RegExp","reset","inputvalue","formatIBAN","noFormat","removeFormat","groups","replace","match","join","formatZipcode","length","substring","toUpperCase","formatBSN","toString","validateValue","getInputValue","_inputvalue","validate","readonlyvalue","update","updateLastModification","readonlyWidth","ATTRIBUTE_WIDTH","SMALL","LARGE","MEDIUM","exports"],"sources":["../../../src/models/attributes/StringAttributeModel.js"],"sourcesContent":["// @flow\nimport AttributeModel from \"./AttributeModel\";\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\nimport RegexConstraint from \"./input-constraints/RegexConstraint\";\nimport BSNConstraint from \"./input-constraints/BSNConstraint\";\nimport IBANConstraint from \"./input-constraints/IBANConstraint\";\n\nimport { ATTRIBUTE_WIDTH } from \"../../constants\";\n\n/**\n * String attribute\n */\nexport default class StringAttributeModel extends AttributeModel {\n _placeholder: string;\n\n /**\n */\n constructor(attribute: Object, attributeContributions: Object) {\n super(attribute, attributeContributions);\n\n this._placeholder = this.getContribution(\"placeholder\", \"\");\n }\n\n /**\n * Retrieve initial input value\n */\n getInitialInputValue(value: any): string {\n return this.formatValue(value);\n }\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n const layouthint = contributions?.layouthint;\n return (\n contributions.type === \"string\" ||\n (Array.isArray(layouthint) && layouthint.includes(\"string\"))\n );\n }\n\n /**\n */\n get type(): string {\n return \"string\";\n }\n\n /**\n * Get Regexp pattern\n */\n get regexp(): string | null {\n return this.getContribution(\"regexp\");\n }\n\n /**\n */\n get regexpvalidationmessage(): string | null {\n return this.getContribution(\"regexpValidationMessage\");\n }\n\n /**\n * Get postfix text\n */\n get postfix(): string {\n return this.getContribution(\"postfix\", \"\");\n }\n\n /**\n * Get prefix text\n */\n get prefix(): string {\n return this.getContribution(\"prefix\", \"\");\n }\n\n /**\n * Get placeholder text\n */\n get placeholder(): string {\n return this._placeholder;\n }\n\n /**\n * Set placeholder text\n */\n set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n }\n\n /**\n */\n isBSN(): boolean {\n return this.layouthint.has(\"bsn\");\n }\n\n /**\n */\n isIBAN(): boolean {\n return this.layouthint.has(\"iban\");\n }\n\n /**\n */\n isZipcode(): boolean {\n return this.layouthint.has(\"zipcode\");\n }\n\n /**\n */\n isEmail(): boolean {\n return this.layouthint.has(\"email\");\n }\n\n /**\n * Add regex constraints\n */\n addConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.isBSN()) {\n constraints.add(new BSNConstraint());\n } else if (this.isIBAN()) {\n constraints.add(new IBANConstraint());\n }\n\n if (this.isZipcode() && this.regexp) {\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.ZipCode.InvalidFormat\",\n defaultMessage: \"Must be a valid Dutch ZIP code, e.g. 1234 AB\",\n regex: this.regexp,\n }),\n );\n } else if (this.isEmail() && this.regexp) {\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.Email.InvalidFormat\",\n defaultMessage: \"Must be a valid e-mail address\",\n regex: new RegExp(this.regexp, \"gi\"),\n }),\n );\n } else if (this.regexp) {\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.String.InvalidRegex\",\n defaultMessage: this.regexpvalidationmessage,\n regex: this.regexp,\n }),\n );\n }\n\n return constraints;\n }\n\n /**\n * Reset attribute to empty string\n */\n reset() {\n this.inputvalue = \"\";\n }\n\n /**\n */\n formatIBAN(value: string): string {\n const noFormat = this.removeFormat(value);\n\n const groups = noFormat.replace(/\\s/g, \"\").match(/.{1,4}/g);\n return groups == null ? \"\" : groups.join(\" \");\n }\n\n /**\n */\n formatZipcode(value: string): string {\n const noFormat = this.removeFormat(value);\n if (noFormat.length > 4) {\n return (\n noFormat.substring(0, 4) + \" \" + noFormat.substring(4).toUpperCase()\n );\n }\n return noFormat;\n }\n\n /**\n */\n formatBSN(value: string): string {\n return this.removeFormat(value);\n }\n\n /**\n */\n formatValue(value: ?string): string {\n if (value == null || value.toString() === \"\") {\n return \"\";\n }\n\n if (this.isIBAN()) {\n return this.formatIBAN(value);\n }\n\n if (this.isZipcode()) {\n return this.formatZipcode(value);\n }\n\n if (this.isBSN()) {\n return this.formatBSN(value);\n }\n\n return value;\n }\n\n /**\n */\n removeFormat(value: ?string): string {\n if (value == null || value.toString() === \"\") {\n return \"\";\n }\n\n if (this.isIBAN() || this.isZipcode() || this.isBSN()) {\n return value.replace(/\\.|\\s/g, \"\");\n }\n\n return value;\n }\n\n /**\n */\n get validateValue(): string {\n return this.removeFormat(this.inputvalue);\n }\n\n /**\n */\n get inputvalue(): string {\n return this.getInputValue();\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n set inputvalue(value: string) {\n this._inputvalue = value;\n\n this.value = value == null ? value : this.removeFormat(value);\n this.validate(this.validateValue);\n }\n\n /**\n */\n get readonlyvalue(): string {\n if (typeof this.value === \"string\") {\n return this.formatValue(this.value);\n }\n\n return this.value == null ? \"\" : this.value;\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: string): StringAttributeModel {\n if (this.inputvalue === value) {\n return this;\n }\n\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n /**\n */\n get readonlyWidth(): $Keys<typeof ATTRIBUTE_WIDTH> {\n if (this.isZipcode() || this.isBSN()) {\n return ATTRIBUTE_WIDTH.SMALL;\n }\n\n if (this.isIBAN()) {\n return ATTRIBUTE_WIDTH.LARGE;\n }\n\n // default value (also applied for email address + download attribute)\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StringAttributeModel.js","names":["_AttributeModel","_interopRequireDefault","require","_ConstraintCollection","_RegexConstraint","_BSNConstraint","_IBANConstraint","_constants","StringAttributeModel","AttributeModel","constructor","attribute","attributeContributions","_defineProperty2","default","_placeholder","getContribution","getInitialInputValue","value","formatValue","isApplicableModel","contributions","layouthint","type","Array","isArray","_includes","call","regexp","regexpvalidationmessage","postfix","prefix","placeholder","isBSN","has","isIBAN","isZipcode","isEmail","addConstraints","constraints","ConstraintCollection","add","BSNConstraint","operator","IBANConstraint","RegexConstraint","messageKey","defaultMessage","regex","RegExp","reset","inputvalue","formatIBAN","noFormat","removeFormat","groups","replace","match","join","formatZipcode","length","substring","toUpperCase","formatBSN","toString","values","isMultiple","split","_map","val","validateValue","getInputValue","_inputvalue","_context","validate","readonlyvalue","formattedValue","update","updateLastModification","readonlyWidth","ATTRIBUTE_WIDTH","SMALL","LARGE","MEDIUM","exports"],"sources":["../../../src/models/attributes/StringAttributeModel.js"],"sourcesContent":["// @flow\nimport AttributeModel from \"./AttributeModel\";\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\nimport RegexConstraint from \"./input-constraints/RegexConstraint\";\nimport BSNConstraint from \"./input-constraints/BSNConstraint\";\nimport IBANConstraint from \"./input-constraints/IBANConstraint\";\n\nimport { ATTRIBUTE_WIDTH } from \"../../constants\";\n\n/**\n * String attribute\n */\nexport default class StringAttributeModel extends AttributeModel {\n _placeholder: string;\n\n /**\n */\n constructor(attribute: Object, attributeContributions: Object) {\n super(attribute, attributeContributions);\n\n this._placeholder = this.getContribution(\"placeholder\", \"\");\n }\n\n /**\n * Retrieve initial input value\n */\n getInitialInputValue(value: any): string {\n return this.formatValue(value);\n }\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n const layouthint = contributions?.layouthint;\n return (\n contributions.type === \"string\" ||\n (Array.isArray(layouthint) && layouthint.includes(\"string\"))\n );\n }\n\n /**\n */\n get type(): string {\n return \"string\";\n }\n\n /**\n * Get Regexp pattern\n */\n get regexp(): string | null {\n return this.getContribution(\"regexp\");\n }\n\n /**\n */\n get regexpvalidationmessage(): string | null {\n return this.getContribution(\"regexpValidationMessage\");\n }\n\n /**\n * Get postfix text\n */\n get postfix(): string {\n return this.getContribution(\"postfix\", \"\");\n }\n\n /**\n * Get prefix text\n */\n get prefix(): string {\n return this.getContribution(\"prefix\", \"\");\n }\n\n /**\n * Get placeholder text\n */\n get placeholder(): string {\n return this._placeholder;\n }\n\n /**\n * Set placeholder text\n */\n set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n }\n\n /**\n */\n isBSN(): boolean {\n return this.layouthint.has(\"bsn\");\n }\n\n /**\n */\n isIBAN(): boolean {\n return this.layouthint.has(\"iban\");\n }\n\n /**\n */\n isZipcode(): boolean {\n return this.layouthint.has(\"zipcode\");\n }\n\n /**\n */\n isEmail(): boolean {\n return this.layouthint.has(\"email\");\n }\n\n /**\n * Add regex constraints\n */\n addConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.isBSN()) {\n constraints.add(new BSNConstraint());\n } else if (\n this.isIBAN() &&\n (this.operator === \"\" ||\n this.operator === \"exactly\" ||\n this.operator === \"isNot\")\n ) {\n // validate iban when no operator is set or exact or isNot\n constraints.add(new IBANConstraint());\n }\n\n if (\n this.isZipcode() &&\n (this.operator === \"\" ||\n this.operator === \"exactly\" ||\n this.operator === \"isNot\")\n ) {\n // validate zip when regex is set is set or exact or isNot\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.ZipCode.InvalidFormat\",\n defaultMessage: \"Must be a valid Dutch ZIP code, e.g. 1234 AB\",\n regex: new RegExp(\"^[1-9][0-9]{3} ?[a-zA-Z]{2}$\", \"gi\"),\n }),\n );\n } else if (this.isEmail() && this.regexp) {\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.Email.InvalidFormat\",\n defaultMessage: \"Must be a valid e-mail address\",\n regex: new RegExp(this.regexp, \"gi\"),\n }),\n );\n } else if (this.regexp) {\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.String.InvalidRegex\",\n defaultMessage: this.regexpvalidationmessage,\n regex: this.regexp,\n }),\n );\n }\n\n return constraints;\n }\n\n /**\n * Reset attribute to empty string\n */\n reset() {\n this.inputvalue = \"\";\n }\n\n /**\n */\n formatIBAN(value: string): string {\n const noFormat = this.removeFormat(value);\n\n if (\n this.operator === \"\" ||\n this.operator === \"exactly\" ||\n this.operator === \"isNot\"\n ) {\n const groups = noFormat.replace(/\\s/g, \"\").match(/.{1,4}/g);\n return groups == null ? \"\" : groups.join(\" \");\n }\n\n return noFormat;\n }\n\n /**\n */\n formatZipcode(value: string): string {\n const noFormat = this.removeFormat(value);\n if (noFormat.length === 6) {\n return (\n noFormat.substring(0, 4) + \" \" + noFormat.substring(4).toUpperCase()\n );\n }\n return noFormat;\n }\n\n /**\n */\n formatBSN(value: string): string {\n return this.removeFormat(value);\n }\n\n /**\n */\n formatValue(value: ?string): string {\n if (value == null || value.toString() === \"\") {\n return \"\";\n }\n\n if (typeof value !== \"string\") {\n return value;\n }\n\n const values = this.isMultiple ? value.split(\",\") : [value];\n\n return values\n .map((val) => {\n if (this.isIBAN()) {\n return this.formatIBAN(val);\n }\n\n if (this.isZipcode()) {\n return this.formatZipcode(val);\n }\n\n if (this.isBSN()) {\n return this.formatBSN(val);\n }\n\n return val;\n })\n .join(\",\");\n }\n\n /**\n */\n removeFormat(value: ?string): string {\n if (value == null || value.toString() === \"\") {\n return \"\";\n }\n\n if (this.isIBAN() || this.isZipcode() || this.isBSN()) {\n return value.replace(/[^a-z0-9,]/gi, \"\");\n }\n\n return value;\n }\n\n /**\n */\n get validateValue(): string {\n return this.removeFormat(this.inputvalue);\n }\n\n /**\n */\n get inputvalue(): string {\n return this.getInputValue();\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n set inputvalue(value: string) {\n this._inputvalue = value;\n\n if (value == null) {\n this.value = value;\n } else if (this.isMultiple) {\n this.value = value\n .split(\",\")\n .map((val) => this.removeFormat(val))\n .join(\",\");\n } else {\n this.value = this.removeFormat(value);\n }\n\n this.validate(this.validateValue);\n }\n\n /**\n */\n get readonlyvalue(): string {\n if (typeof this.value === \"string\") {\n const formattedValue = this.formatValue(this.value);\n // fix for rendering of multiple spaces\n return formattedValue.replace(/ {2}/gi, \" \\u00A0\");\n }\n\n return this.value == null ? \"\" : this.value;\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: string): StringAttributeModel {\n if (this.inputvalue === value) {\n return this;\n }\n\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n /**\n */\n get readonlyWidth(): $Keys<typeof ATTRIBUTE_WIDTH> {\n if (this.isZipcode() || this.isBSN()) {\n return ATTRIBUTE_WIDTH.SMALL;\n }\n\n if (this.isIBAN()) {\n return ATTRIBUTE_WIDTH.LARGE;\n }\n\n // default value (also applied for email address + download attribute)\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n\n /**\n * Indicates if a value is multiple choice, used for filters\n */\n get isMultiple(): boolean {\n return this.getContribution(\"multiplechoice\", false);\n }\n}\n"],"mappings":"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"}
|
|
@@ -112,4 +112,27 @@ describe("stringAttributeModel", () => {
|
|
|
112
112
|
|
|
113
113
|
expect(attribute).not.toBe(clonedAttribute);
|
|
114
114
|
});
|
|
115
|
+
|
|
116
|
+
it("handles multiple spaces in the readonlyvalue", () => {
|
|
117
|
+
const attribute = new StringAttributeModel({}, { type: "string" });
|
|
118
|
+
|
|
119
|
+
attribute.update("test test");
|
|
120
|
+
|
|
121
|
+
expect(attribute.value).toBe("test test");
|
|
122
|
+
expect(attribute.inputvalue).toBe("test test");
|
|
123
|
+
expect(attribute.readonlyvalue).toBe("test \u00A0 \u00A0 test");
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("format isMultiple with escaped comma", () => {
|
|
127
|
+
const attribute = new StringAttributeModel(
|
|
128
|
+
{},
|
|
129
|
+
{ type: "string", multiplechoice: true },
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
attribute.update("test test");
|
|
133
|
+
|
|
134
|
+
expect(attribute.value).toBe("test test");
|
|
135
|
+
expect(attribute.inputvalue).toBe("test test");
|
|
136
|
+
expect(attribute.readonlyvalue).toBe("test \u00A0 \u00A0 test");
|
|
137
|
+
});
|
|
115
138
|
});
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import FilterModel from "../FilterModel";
|
|
2
|
+
|
|
3
|
+
describe("filterModel", () => {
|
|
4
|
+
let data;
|
|
5
|
+
let contributions;
|
|
6
|
+
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
data = {
|
|
9
|
+
name: "zipfilter",
|
|
10
|
+
param: "zipfilter",
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
contributions = {
|
|
14
|
+
label: "zipfilter",
|
|
15
|
+
layouthint: ["zipcode"],
|
|
16
|
+
multiplechoice: false,
|
|
17
|
+
operator: "exactly",
|
|
18
|
+
type: "string",
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("should be able to create a filter from a typical modular UI json filter structure without value", () => {
|
|
23
|
+
const filter = new FilterModel(data, contributions);
|
|
24
|
+
|
|
25
|
+
expect(filter).toBeInstanceOf(FilterModel);
|
|
26
|
+
expect(filter.label).toBe("zipfilter");
|
|
27
|
+
expect(filter.name).toBe("zipfilter");
|
|
28
|
+
expect(filter.value).toBeNull();
|
|
29
|
+
expect(filter.inputvalue).toBeUndefined();
|
|
30
|
+
expect(filter.type).toBe("string");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("modular ui input, zipcode no space", () => {
|
|
34
|
+
const stringFilterWithValue = { ...data };
|
|
35
|
+
|
|
36
|
+
stringFilterWithValue.value = "1234AB";
|
|
37
|
+
|
|
38
|
+
const filter = new FilterModel(stringFilterWithValue, contributions);
|
|
39
|
+
|
|
40
|
+
expect(filter).toBeInstanceOf(FilterModel);
|
|
41
|
+
expect(filter.attribute.value).toBe("1234AB");
|
|
42
|
+
expect(filter.attribute.inputvalue).toBe("1234 AB");
|
|
43
|
+
expect(filter.params).toStrictEqual([
|
|
44
|
+
{
|
|
45
|
+
name: "zipfilter",
|
|
46
|
+
value: "1234AB",
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
filter.reset();
|
|
51
|
+
expect(filter.attribute.inputvalue).toBe("");
|
|
52
|
+
expect(filter.attribute.value).toBeNull();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("modular ui input, zipcode space", () => {
|
|
56
|
+
const filter = new FilterModel(data, contributions);
|
|
57
|
+
|
|
58
|
+
filter.update(filter.attribute, "1234 AB");
|
|
59
|
+
|
|
60
|
+
expect(filter).toBeInstanceOf(FilterModel);
|
|
61
|
+
expect(filter.attribute.value).toBe("1234AB");
|
|
62
|
+
expect(filter.attribute.inputvalue).toBe("1234 AB");
|
|
63
|
+
expect(filter.params).toStrictEqual([
|
|
64
|
+
{
|
|
65
|
+
name: "zipfilter",
|
|
66
|
+
value: "1234AB",
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
|
|
70
|
+
expect(filter.isValid).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("modular ui input, wrong zipcode", () => {
|
|
74
|
+
const filter = new FilterModel(data, contributions);
|
|
75
|
+
|
|
76
|
+
filter.update(filter.attribute, "123");
|
|
77
|
+
|
|
78
|
+
expect(filter).toBeInstanceOf(FilterModel);
|
|
79
|
+
expect(filter.attribute.value).toBe("123");
|
|
80
|
+
expect(filter.attribute.inputvalue).toBe("123");
|
|
81
|
+
expect(filter.params).toStrictEqual([
|
|
82
|
+
{
|
|
83
|
+
name: "zipfilter",
|
|
84
|
+
value: "123",
|
|
85
|
+
},
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
expect(filter.isValid).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("modular ui input - starts with, zipcode part", () => {
|
|
92
|
+
const filter = new FilterModel(data, {
|
|
93
|
+
operator: "startsWith",
|
|
94
|
+
contributions,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
filter.update(filter.attribute, "123");
|
|
98
|
+
|
|
99
|
+
expect(filter).toBeInstanceOf(FilterModel);
|
|
100
|
+
expect(filter.attribute.value).toBe("123");
|
|
101
|
+
expect(filter.attribute.inputvalue).toBe("123");
|
|
102
|
+
expect(filter.params).toStrictEqual([
|
|
103
|
+
{
|
|
104
|
+
name: "zipfilter",
|
|
105
|
+
value: "123",
|
|
106
|
+
},
|
|
107
|
+
]);
|
|
108
|
+
|
|
109
|
+
expect(filter.isValid).toBe(true);
|
|
110
|
+
});
|
|
111
|
+
});
|
package/package.json
CHANGED
|
@@ -170,12 +170,6 @@ class DatetimeAttributeModel extends StringAttributeModel {
|
|
|
170
170
|
return this.formatUtil.convertFormat(format);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
/**
|
|
174
|
-
*/
|
|
175
|
-
get operator(): string {
|
|
176
|
-
return this.getContribution("operator", "");
|
|
177
|
-
}
|
|
178
|
-
|
|
179
173
|
/**
|
|
180
174
|
*/
|
|
181
175
|
get hasDate(): boolean {
|
|
@@ -102,12 +102,6 @@ export default class NumberAttributeModel extends AttributeModel {
|
|
|
102
102
|
return this.getContribution("placeholder", "");
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
/**
|
|
106
|
-
*/
|
|
107
|
-
get operator(): string {
|
|
108
|
-
return this.getContribution("operator", "");
|
|
109
|
-
}
|
|
110
|
-
|
|
111
105
|
/**
|
|
112
106
|
* Add number constraints
|
|
113
107
|
*/
|