@beinformed/ui 1.18.8 → 1.19.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/CHANGELOG.md +18 -0
- package/esm/hooks/useNotification.js +11 -1
- package/esm/hooks/useNotification.js.map +1 -1
- package/esm/models/attributes/PasswordAttributeModel.js +50 -31
- package/esm/models/attributes/PasswordAttributeModel.js.map +1 -1
- package/lib/hooks/useNotification.js +15 -1
- package/lib/hooks/useNotification.js.flow +20 -1
- package/lib/hooks/useNotification.js.map +1 -1
- package/lib/models/attributes/PasswordAttributeModel.js +50 -31
- package/lib/models/attributes/PasswordAttributeModel.js.flow +63 -46
- package/lib/models/attributes/PasswordAttributeModel.js.map +1 -1
- package/package.json +14 -14
- package/src/hooks/useNotification.js +20 -1
- package/src/models/attributes/PasswordAttributeModel.js +63 -46
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [1.19.1](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.19.0...v1.19.1) (2022-06-16)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **confirm-password:** confirm constraint only in specific situations ([bf39462](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/bf394622b39c51145411bf4176d055d57488c412))
|
|
10
|
+
|
|
11
|
+
## [1.19.0](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.9...v1.19.0) (2022-06-15)
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- **hooks:** add error notification hook ([dc8f71a](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/dc8f71a849418d4b3022b8ab96a5cfae018cea7d))
|
|
16
|
+
|
|
17
|
+
### [1.18.9](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.8...v1.18.9) (2022-06-14)
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
- **confirm-password:** only validate confirm-password with value ([9190faa](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/9190faa31e50e5a018003e478bcdad2a06b011ef))
|
|
22
|
+
|
|
5
23
|
### [1.18.8](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.7...v1.18.8) (2022-06-13)
|
|
6
24
|
|
|
7
25
|
### Bug Fixes
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useSelector, useDispatch } from "react-redux";
|
|
2
|
-
import { dismissNotification } from "../redux/actions";
|
|
2
|
+
import { dismissNotification, showNotification } from "../redux/actions";
|
|
3
|
+
import { NOTIFICATION_TYPES } from "../constants";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
*/
|
|
@@ -24,4 +25,13 @@ export var useNotification = function useNotification() {
|
|
|
24
25
|
}
|
|
25
26
|
};
|
|
26
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
export var useErrorNotification = function useErrorNotification() {
|
|
32
|
+
var dispatch = useDispatch();
|
|
33
|
+
return function (message, error) {
|
|
34
|
+
return dispatch(showNotification(NOTIFICATION_TYPES.ERROR, message, error));
|
|
35
|
+
};
|
|
36
|
+
};
|
|
27
37
|
//# sourceMappingURL=useNotification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNotification.js","names":["useSelector","useDispatch","dismissNotification","useNotification","dispatch","state","notification","render","messageType","message","error","dismiss"],"sources":["../../src/hooks/useNotification.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { dismissNotification } from \"../redux/actions\";\n\nimport type {\n DismissNotificationAction,\n NotificationState,\n} from \"../redux/types\";\ntype NotificationHook = {\n ...NotificationState,\n dismiss: () => DismissNotificationAction,\n};\n\n/**\n */\nexport const useNotification = (): NotificationHook => {\n const dispatch = useDispatch();\n const { render, messageType, message, error } = useSelector(\n (state) => state.notification\n );\n\n return {\n render,\n messageType,\n message,\n error,\n dismiss: () => dispatch(dismissNotification()),\n };\n};\n"],"mappings":"AACA,SAASA,WAAT,EAAsBC,WAAtB,QAAyC,aAAzC;AACA,SAASC,mBAAT,
|
|
1
|
+
{"version":3,"file":"useNotification.js","names":["useSelector","useDispatch","dismissNotification","showNotification","NOTIFICATION_TYPES","useNotification","dispatch","state","notification","render","messageType","message","error","dismiss","useErrorNotification","ERROR"],"sources":["../../src/hooks/useNotification.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { dismissNotification, showNotification } from \"../redux/actions\";\n\nimport type {\n DismissNotificationAction,\n NotificationState,\n ShowNotificationAction,\n} from \"../redux/types\";\n\nimport { NOTIFICATION_TYPES } from \"../constants\";\n\nimport type { MessageObject } from \"../i18n\";\nimport type ErrorResponse from \"../models/error/ErrorResponse\";\ntype NotificationHook = {\n ...NotificationState,\n dismiss: () => DismissNotificationAction,\n};\ntype ErrorNotificationHook = (\n message: MessageObject,\n error?: ?ErrorResponse\n) => ShowNotificationAction;\n\n/**\n */\nexport const useNotification = (): NotificationHook => {\n const dispatch = useDispatch();\n const { render, messageType, message, error } = useSelector(\n (state) => state.notification\n );\n\n return {\n render,\n messageType,\n message,\n error,\n dismiss: () => dispatch(dismissNotification()),\n };\n};\n\n/**\n */\nexport const useErrorNotification = (): ErrorNotificationHook => {\n const dispatch = useDispatch();\n return (message: MessageObject, error?: ?ErrorResponse) => {\n return dispatch(showNotification(NOTIFICATION_TYPES.ERROR, message, error));\n };\n};\n"],"mappings":"AACA,SAASA,WAAT,EAAsBC,WAAtB,QAAyC,aAAzC;AACA,SAASC,mBAAT,EAA8BC,gBAA9B,QAAsD,kBAAtD;AAQA,SAASC,kBAAT,QAAmC,cAAnC;;AAaA;AACA;AACA,OAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,GAAwB;EACrD,IAAMC,QAAQ,GAAGL,WAAW,EAA5B;;EACA,mBAAgDD,WAAW,CACzD,UAACO,KAAD;IAAA,OAAWA,KAAK,CAACC,YAAjB;EAAA,CADyD,CAA3D;EAAA,IAAQC,MAAR,gBAAQA,MAAR;EAAA,IAAgBC,WAAhB,gBAAgBA,WAAhB;EAAA,IAA6BC,OAA7B,gBAA6BA,OAA7B;EAAA,IAAsCC,KAAtC,gBAAsCA,KAAtC;;EAIA,OAAO;IACLH,MAAM,EAANA,MADK;IAELC,WAAW,EAAXA,WAFK;IAGLC,OAAO,EAAPA,OAHK;IAILC,KAAK,EAALA,KAJK;IAKLC,OAAO,EAAE;MAAA,OAAMP,QAAQ,CAACJ,mBAAmB,EAApB,CAAd;IAAA;EALJ,CAAP;AAOD,CAbM;AAeP;AACA;;AACA,OAAO,IAAMY,oBAAoB,GAAG,SAAvBA,oBAAuB,GAA6B;EAC/D,IAAMR,QAAQ,GAAGL,WAAW,EAA5B;EACA,OAAO,UAACU,OAAD,EAAyBC,KAAzB,EAAoD;IACzD,OAAON,QAAQ,CAACH,gBAAgB,CAACC,kBAAkB,CAACW,KAApB,EAA2BJ,OAA3B,EAAoCC,KAApC,CAAjB,CAAf;EACD,CAFD;AAGD,CALM"}
|
|
@@ -136,36 +136,56 @@ var PasswordAttributeModel = /*#__PURE__*/function (_StringAttributeModel) {
|
|
|
136
136
|
}, {
|
|
137
137
|
key: "addConstraints",
|
|
138
138
|
value: function addConstraints() {
|
|
139
|
+
if (this.isConfirmPassword) {
|
|
140
|
+
return this.getConfirmPasswordConstraints();
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return this.getStandardPasswordConstraints();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Constraints for a confirmation password
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
}, {
|
|
150
|
+
key: "getConfirmPasswordConstraints",
|
|
151
|
+
value: function getConfirmPasswordConstraints() {
|
|
139
152
|
var constraints = new ConstraintCollection();
|
|
153
|
+
constraints.add(new PasswordConfirmConstraint(this.confirmValue, this.otherLabel));
|
|
154
|
+
return constraints;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Constrains for a standard password
|
|
158
|
+
*/
|
|
140
159
|
|
|
141
|
-
|
|
160
|
+
}, {
|
|
161
|
+
key: "getStandardPasswordConstraints",
|
|
162
|
+
value: function getStandardPasswordConstraints() {
|
|
163
|
+
var constraints = new ConstraintCollection();
|
|
164
|
+
|
|
165
|
+
if (this.upperAndLowerCaseMandatory) {
|
|
166
|
+
constraints.add(new PasswordLowerAndUpperCaseConstraint());
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (this.maxSequenceOfIdenticalCharacters) {
|
|
170
|
+
constraints.add(new PasswordThreeConsecutiveCharactersNotAllowedConstraint(this.maxSequenceOfIdenticalCharacters));
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (this.minNumberOfNumericCharacters) {
|
|
174
|
+
constraints.add(new PasswordMinNumericCharactersConstraint(this.minNumberOfNumericCharacters));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (this.minNumberOfSpecialCharacters) {
|
|
178
|
+
constraints.add(new PasswordMinSpecialCharactersConstraint(this.minNumberOfSpecialCharacters));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
182
|
+
this.regexConstraints.forEach(function (regexConstraint) {
|
|
183
|
+
constraints.add(new RegexConstraint(regexConstraint));
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (this.layouthint.has(CONFIRM_PASSWORD) && this.isConfirmPassword == null) {
|
|
142
188
|
constraints.add(new PasswordConfirmConstraint(this.confirmValue, this.otherLabel));
|
|
143
|
-
} else {
|
|
144
|
-
if (this.upperAndLowerCaseMandatory) {
|
|
145
|
-
constraints.add(new PasswordLowerAndUpperCaseConstraint());
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (this.maxSequenceOfIdenticalCharacters) {
|
|
149
|
-
constraints.add(new PasswordThreeConsecutiveCharactersNotAllowedConstraint(this.maxSequenceOfIdenticalCharacters));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (this.minNumberOfNumericCharacters) {
|
|
153
|
-
constraints.add(new PasswordMinNumericCharactersConstraint(this.minNumberOfNumericCharacters));
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (this.minNumberOfSpecialCharacters) {
|
|
157
|
-
constraints.add(new PasswordMinSpecialCharactersConstraint(this.minNumberOfSpecialCharacters));
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
161
|
-
this.regexConstraints.forEach(function (regexConstraint) {
|
|
162
|
-
constraints.add(new RegexConstraint(regexConstraint));
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
if (this.layouthint.has(CONFIRM_PASSWORD)) {
|
|
167
|
-
constraints.add(new PasswordConfirmConstraint(this.confirmValue, this.otherLabel));
|
|
168
|
-
}
|
|
169
189
|
}
|
|
170
190
|
|
|
171
191
|
return constraints;
|
|
@@ -178,9 +198,8 @@ var PasswordAttributeModel = /*#__PURE__*/function (_StringAttributeModel) {
|
|
|
178
198
|
key: "constraintCollection",
|
|
179
199
|
get: function get() {
|
|
180
200
|
if (this.isConfirmPassword) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
return constraints;
|
|
201
|
+
// confirm password only needs local constraints, no server constraints
|
|
202
|
+
return this.getConfirmPasswordConstraints();
|
|
184
203
|
}
|
|
185
204
|
|
|
186
205
|
return _get(_getPrototypeOf(PasswordAttributeModel.prototype), "constraintCollection", this);
|
|
@@ -191,7 +210,7 @@ var PasswordAttributeModel = /*#__PURE__*/function (_StringAttributeModel) {
|
|
|
191
210
|
}, {
|
|
192
211
|
key: "isConfirmPassword",
|
|
193
212
|
get: function get() {
|
|
194
|
-
return this._isConfirmPassword
|
|
213
|
+
return this._isConfirmPassword;
|
|
195
214
|
}
|
|
196
215
|
/**
|
|
197
216
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordAttributeModel.js","names":["StringAttributeModel","ConstraintCollection","PasswordLowerAndUpperCaseConstraint","PasswordThreeConsecutiveCharactersNotAllowedConstraint","PasswordMinNumericCharactersConstraint","PasswordMinSpecialCharactersConstraint","RegexConstraint","PasswordConfirmConstraint","CONFIRM_PASSWORD","PasswordAttributeModel","value","updateLastModification","inputvalue","getContribution","constraints","upperAndLowerCaseMandatory","maxSequenceOfIdenticalCharacters","maxSequenceOfUsernameCharacters","minNumberOfNumericCharacters","minNumberOfSpecialCharacters","regexConstraint","isConfirmPassword","add","confirmValue","otherLabel","regexConstraints","length","forEach","layouthint","has","addConstraints","_isConfirmPassword","_confirmValue","validate","_otherLabel","useClientsideValidation","isOptionalAndEmpty","_isValid","_validatedValue","constraintCollection","inError","name","contributions","type","Array","isArray"],"sources":["../../../src/models/attributes/PasswordAttributeModel.js"],"sourcesContent":["// @flow\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\n\nimport PasswordLowerAndUpperCaseConstraint from \"./input-constraints/PasswordLowerAndUpperCaseConstraint\";\nimport PasswordThreeConsecutiveCharactersNotAllowedConstraint from \"./input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint\";\nimport PasswordMinNumericCharactersConstraint from \"./input-constraints/PasswordMinNumericCharactersConstraint\";\nimport PasswordMinSpecialCharactersConstraint from \"./input-constraints/PasswordMinSpecialCharactersConstraint\";\nimport RegexConstraint from \"./input-constraints/RegexConstraint\";\nimport PasswordConfirmConstraint from \"./input-constraints/PasswordConfirmConstraint\";\n\nimport { CONFIRM_PASSWORD } from \"../../constants/LayoutHints\";\n\nimport type { RegexObject } from \"./input-constraints/RegexConstraint\";\n\n/**\n * Password attribute\n */\nexport default class PasswordAttributeModel extends StringAttributeModel {\n _confirmValue: string;\n _isConfirmPassword: boolean;\n _otherLabel: string;\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n const layouthint = contributions?.layouthint;\n return (\n contributions.type === \"password\" ||\n (Array.isArray(layouthint) && layouthint.includes(\"password\"))\n );\n }\n\n /**\n */\n get type(): string {\n return \"password\";\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: string): PasswordAttributeModel {\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n /**\n */\n get constraints(): Object {\n return this.getContribution(\"constraints\", {});\n }\n\n /**\n */\n get upperAndLowerCaseMandatory(): ?boolean {\n return this.constraints.upperAndLowerCaseMandatory;\n }\n\n /**\n */\n get maxSequenceOfIdenticalCharacters(): ?number {\n return this.constraints.maxSequenceOfIdenticalCharacters;\n }\n\n /**\n */\n get maxSequenceOfUsernameCharacters(): ?number {\n return this.constraints.maxSequenceOfUsernameCharacters;\n }\n\n /**\n */\n get minNumberOfNumericCharacters(): ?number {\n return this.constraints.minNumberOfNumericCharacters;\n }\n\n /**\n */\n get minNumberOfSpecialCharacters(): ?number {\n return this.constraints.minNumberOfSpecialCharacters;\n }\n\n /**\n */\n get regexConstraints(): ?Array<RegexObject> {\n return this.constraints.regexConstraint;\n }\n\n /**\n * Add password constraints\n */\n addConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.isConfirmPassword) {\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n } else {\n if (this.upperAndLowerCaseMandatory) {\n constraints.add(new PasswordLowerAndUpperCaseConstraint());\n }\n\n if (this.maxSequenceOfIdenticalCharacters) {\n constraints.add(\n new PasswordThreeConsecutiveCharactersNotAllowedConstraint(\n this.maxSequenceOfIdenticalCharacters\n )\n );\n }\n\n if (this.minNumberOfNumericCharacters) {\n constraints.add(\n new PasswordMinNumericCharactersConstraint(\n this.minNumberOfNumericCharacters\n )\n );\n }\n\n if (this.minNumberOfSpecialCharacters) {\n constraints.add(\n new PasswordMinSpecialCharactersConstraint(\n this.minNumberOfSpecialCharacters\n )\n );\n }\n\n if (this.regexConstraints && this.regexConstraints.length > 0) {\n this.regexConstraints.forEach((regexConstraint) => {\n constraints.add(new RegexConstraint(regexConstraint));\n });\n }\n\n if (this.layouthint.has(CONFIRM_PASSWORD)) {\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n }\n }\n\n return constraints;\n }\n\n /**\n * Retrieve applicable constraint for this attribute\n */\n get constraintCollection(): ConstraintCollection {\n if (this.isConfirmPassword) {\n const constraints = new ConstraintCollection();\n constraints.add(this.addConstraints());\n return constraints;\n }\n\n return super.constraintCollection;\n }\n\n /**\n */\n get isConfirmPassword(): boolean {\n return this._isConfirmPassword || false;\n }\n\n /**\n */\n set isConfirmPassword(isConfirmPassword: boolean) {\n this._isConfirmPassword = isConfirmPassword;\n }\n\n /**\n */\n get confirmValue(): string {\n return this._confirmValue || \"\";\n }\n\n /**\n */\n set confirmValue(confirmValue: string) {\n this._confirmValue = confirmValue;\n\n this.validate(this.inputvalue);\n }\n\n /**\n */\n get otherLabel(): string {\n return this._otherLabel;\n }\n\n /**\n */\n set otherLabel(otherLabel: string) {\n this._otherLabel = otherLabel;\n }\n\n /**\n * Validate input\n */\n validate(value: string): boolean {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n if (this.isOptionalAndEmpty(value)) {\n this._isValid = true;\n } else if (this._validatedValue !== `${this.confirmValue}-${value}`) {\n this._isValid = this.constraintCollection.validate(value);\n }\n this._validatedValue = `${this.confirmValue}-${value}`;\n\n return this._isValid;\n }\n\n /**\n */\n getFormData(): { [string]: any } | null {\n if (this.isConfirmPassword || this.inError()) {\n return null;\n }\n\n return {\n [this.name]: this.value,\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PasswordAttributeModel.js","names":["StringAttributeModel","ConstraintCollection","PasswordLowerAndUpperCaseConstraint","PasswordThreeConsecutiveCharactersNotAllowedConstraint","PasswordMinNumericCharactersConstraint","PasswordMinSpecialCharactersConstraint","RegexConstraint","PasswordConfirmConstraint","CONFIRM_PASSWORD","PasswordAttributeModel","value","updateLastModification","inputvalue","getContribution","constraints","upperAndLowerCaseMandatory","maxSequenceOfIdenticalCharacters","maxSequenceOfUsernameCharacters","minNumberOfNumericCharacters","minNumberOfSpecialCharacters","regexConstraint","isConfirmPassword","getConfirmPasswordConstraints","getStandardPasswordConstraints","add","confirmValue","otherLabel","regexConstraints","length","forEach","layouthint","has","_isConfirmPassword","_confirmValue","validate","_otherLabel","useClientsideValidation","isOptionalAndEmpty","_isValid","_validatedValue","constraintCollection","inError","name","contributions","type","Array","isArray"],"sources":["../../../src/models/attributes/PasswordAttributeModel.js"],"sourcesContent":["// @flow\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\n\nimport PasswordLowerAndUpperCaseConstraint from \"./input-constraints/PasswordLowerAndUpperCaseConstraint\";\nimport PasswordThreeConsecutiveCharactersNotAllowedConstraint from \"./input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint\";\nimport PasswordMinNumericCharactersConstraint from \"./input-constraints/PasswordMinNumericCharactersConstraint\";\nimport PasswordMinSpecialCharactersConstraint from \"./input-constraints/PasswordMinSpecialCharactersConstraint\";\nimport RegexConstraint from \"./input-constraints/RegexConstraint\";\nimport PasswordConfirmConstraint from \"./input-constraints/PasswordConfirmConstraint\";\n\nimport { CONFIRM_PASSWORD } from \"../../constants/LayoutHints\";\n\nimport type { RegexObject } from \"./input-constraints/RegexConstraint\";\n\n/**\n * Password attribute\n */\nexport default class PasswordAttributeModel extends StringAttributeModel {\n _confirmValue: string;\n _isConfirmPassword: boolean;\n _otherLabel: string;\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n const layouthint = contributions?.layouthint;\n return (\n contributions.type === \"password\" ||\n (Array.isArray(layouthint) && layouthint.includes(\"password\"))\n );\n }\n\n /**\n */\n get type(): string {\n return \"password\";\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: string): PasswordAttributeModel {\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n /**\n */\n get constraints(): Object {\n return this.getContribution(\"constraints\", {});\n }\n\n /**\n */\n get upperAndLowerCaseMandatory(): ?boolean {\n return this.constraints.upperAndLowerCaseMandatory;\n }\n\n /**\n */\n get maxSequenceOfIdenticalCharacters(): ?number {\n return this.constraints.maxSequenceOfIdenticalCharacters;\n }\n\n /**\n */\n get maxSequenceOfUsernameCharacters(): ?number {\n return this.constraints.maxSequenceOfUsernameCharacters;\n }\n\n /**\n */\n get minNumberOfNumericCharacters(): ?number {\n return this.constraints.minNumberOfNumericCharacters;\n }\n\n /**\n */\n get minNumberOfSpecialCharacters(): ?number {\n return this.constraints.minNumberOfSpecialCharacters;\n }\n\n /**\n */\n get regexConstraints(): ?Array<RegexObject> {\n return this.constraints.regexConstraint;\n }\n\n /**\n * Add password constraints\n */\n addConstraints(): ConstraintCollection {\n if (this.isConfirmPassword) {\n return this.getConfirmPasswordConstraints();\n }\n return this.getStandardPasswordConstraints();\n }\n\n /**\n * Constraints for a confirmation password\n */\n getConfirmPasswordConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n return constraints;\n }\n\n /**\n * Constrains for a standard password\n */\n getStandardPasswordConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.upperAndLowerCaseMandatory) {\n constraints.add(new PasswordLowerAndUpperCaseConstraint());\n }\n\n if (this.maxSequenceOfIdenticalCharacters) {\n constraints.add(\n new PasswordThreeConsecutiveCharactersNotAllowedConstraint(\n this.maxSequenceOfIdenticalCharacters\n )\n );\n }\n\n if (this.minNumberOfNumericCharacters) {\n constraints.add(\n new PasswordMinNumericCharactersConstraint(\n this.minNumberOfNumericCharacters\n )\n );\n }\n\n if (this.minNumberOfSpecialCharacters) {\n constraints.add(\n new PasswordMinSpecialCharactersConstraint(\n this.minNumberOfSpecialCharacters\n )\n );\n }\n\n if (this.regexConstraints && this.regexConstraints.length > 0) {\n this.regexConstraints.forEach((regexConstraint) => {\n constraints.add(new RegexConstraint(regexConstraint));\n });\n }\n\n if (\n this.layouthint.has(CONFIRM_PASSWORD) &&\n this.isConfirmPassword == null\n ) {\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n }\n\n return constraints;\n }\n\n /**\n * Retrieve applicable constraint for this attribute\n */\n get constraintCollection(): ConstraintCollection {\n if (this.isConfirmPassword) {\n // confirm password only needs local constraints, no server constraints\n return this.getConfirmPasswordConstraints();\n }\n\n return super.constraintCollection;\n }\n\n /**\n */\n get isConfirmPassword(): boolean | null {\n return this._isConfirmPassword;\n }\n\n /**\n */\n set isConfirmPassword(isConfirmPassword: boolean) {\n this._isConfirmPassword = isConfirmPassword;\n }\n\n /**\n */\n get confirmValue(): string {\n return this._confirmValue || \"\";\n }\n\n /**\n */\n set confirmValue(confirmValue: string) {\n this._confirmValue = confirmValue;\n\n this.validate(this.inputvalue);\n }\n\n /**\n */\n get otherLabel(): string {\n return this._otherLabel;\n }\n\n /**\n */\n set otherLabel(otherLabel: string) {\n this._otherLabel = otherLabel;\n }\n\n /**\n * Validate input\n */\n validate(value: string): boolean {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n if (this.isOptionalAndEmpty(value)) {\n this._isValid = true;\n } else if (this._validatedValue !== `${this.confirmValue}-${value}`) {\n this._isValid = this.constraintCollection.validate(value);\n }\n this._validatedValue = `${this.confirmValue}-${value}`;\n\n return this._isValid;\n }\n\n /**\n */\n getFormData(): { [string]: any } | null {\n if (this.isConfirmPassword || this.inError()) {\n return null;\n }\n\n return {\n [this.name]: this.value,\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.useNotification = void 0;
|
|
6
|
+
exports.useNotification = exports.useErrorNotification = void 0;
|
|
7
7
|
|
|
8
8
|
var _reactRedux = require("react-redux");
|
|
9
9
|
|
|
10
10
|
var _actions = require("../redux/actions");
|
|
11
11
|
|
|
12
|
+
var _constants = require("../constants");
|
|
13
|
+
|
|
12
14
|
/**
|
|
13
15
|
*/
|
|
14
16
|
var useNotification = function useNotification() {
|
|
@@ -32,6 +34,18 @@ var useNotification = function useNotification() {
|
|
|
32
34
|
}
|
|
33
35
|
};
|
|
34
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
*/
|
|
39
|
+
|
|
35
40
|
|
|
36
41
|
exports.useNotification = useNotification;
|
|
42
|
+
|
|
43
|
+
var useErrorNotification = function useErrorNotification() {
|
|
44
|
+
var dispatch = (0, _reactRedux.useDispatch)();
|
|
45
|
+
return function (message, error) {
|
|
46
|
+
return dispatch((0, _actions.showNotification)(_constants.NOTIFICATION_TYPES.ERROR, message, error));
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.useErrorNotification = useErrorNotification;
|
|
37
51
|
//# sourceMappingURL=useNotification.js.map
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
import { useSelector, useDispatch } from "react-redux";
|
|
3
|
-
import { dismissNotification } from "../redux/actions";
|
|
3
|
+
import { dismissNotification, showNotification } from "../redux/actions";
|
|
4
4
|
|
|
5
5
|
import type {
|
|
6
6
|
DismissNotificationAction,
|
|
7
7
|
NotificationState,
|
|
8
|
+
ShowNotificationAction,
|
|
8
9
|
} from "../redux/types";
|
|
10
|
+
|
|
11
|
+
import { NOTIFICATION_TYPES } from "../constants";
|
|
12
|
+
|
|
13
|
+
import type { MessageObject } from "../i18n";
|
|
14
|
+
import type ErrorResponse from "../models/error/ErrorResponse";
|
|
9
15
|
type NotificationHook = {
|
|
10
16
|
...NotificationState,
|
|
11
17
|
dismiss: () => DismissNotificationAction,
|
|
12
18
|
};
|
|
19
|
+
type ErrorNotificationHook = (
|
|
20
|
+
message: MessageObject,
|
|
21
|
+
error?: ?ErrorResponse
|
|
22
|
+
) => ShowNotificationAction;
|
|
13
23
|
|
|
14
24
|
/**
|
|
15
25
|
*/
|
|
@@ -27,3 +37,12 @@ export const useNotification = (): NotificationHook => {
|
|
|
27
37
|
dismiss: () => dispatch(dismissNotification()),
|
|
28
38
|
};
|
|
29
39
|
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
*/
|
|
43
|
+
export const useErrorNotification = (): ErrorNotificationHook => {
|
|
44
|
+
const dispatch = useDispatch();
|
|
45
|
+
return (message: MessageObject, error?: ?ErrorResponse) => {
|
|
46
|
+
return dispatch(showNotification(NOTIFICATION_TYPES.ERROR, message, error));
|
|
47
|
+
};
|
|
48
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNotification.js","names":["useNotification","dispatch","useDispatch","useSelector","state","notification","render","messageType","message","error","dismiss","dismissNotification"],"sources":["../../src/hooks/useNotification.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { dismissNotification } from \"../redux/actions\";\n\nimport type {\n DismissNotificationAction,\n NotificationState,\n} from \"../redux/types\";\ntype NotificationHook = {\n ...NotificationState,\n dismiss: () => DismissNotificationAction,\n};\n\n/**\n */\nexport const useNotification = (): NotificationHook => {\n const dispatch = useDispatch();\n const { render, messageType, message, error } = useSelector(\n (state) => state.notification\n );\n\n return {\n render,\n messageType,\n message,\n error,\n dismiss: () => dispatch(dismissNotification()),\n };\n};\n"],"mappings":";;;;;;;AACA;;AACA;;
|
|
1
|
+
{"version":3,"file":"useNotification.js","names":["useNotification","dispatch","useDispatch","useSelector","state","notification","render","messageType","message","error","dismiss","dismissNotification","useErrorNotification","showNotification","NOTIFICATION_TYPES","ERROR"],"sources":["../../src/hooks/useNotification.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { dismissNotification, showNotification } from \"../redux/actions\";\n\nimport type {\n DismissNotificationAction,\n NotificationState,\n ShowNotificationAction,\n} from \"../redux/types\";\n\nimport { NOTIFICATION_TYPES } from \"../constants\";\n\nimport type { MessageObject } from \"../i18n\";\nimport type ErrorResponse from \"../models/error/ErrorResponse\";\ntype NotificationHook = {\n ...NotificationState,\n dismiss: () => DismissNotificationAction,\n};\ntype ErrorNotificationHook = (\n message: MessageObject,\n error?: ?ErrorResponse\n) => ShowNotificationAction;\n\n/**\n */\nexport const useNotification = (): NotificationHook => {\n const dispatch = useDispatch();\n const { render, messageType, message, error } = useSelector(\n (state) => state.notification\n );\n\n return {\n render,\n messageType,\n message,\n error,\n dismiss: () => dispatch(dismissNotification()),\n };\n};\n\n/**\n */\nexport const useErrorNotification = (): ErrorNotificationHook => {\n const dispatch = useDispatch();\n return (message: MessageObject, error?: ?ErrorResponse) => {\n return dispatch(showNotification(NOTIFICATION_TYPES.ERROR, message, error));\n };\n};\n"],"mappings":";;;;;;;AACA;;AACA;;AAQA;;AAaA;AACA;AACO,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,GAAwB;EACrD,IAAMC,QAAQ,GAAG,IAAAC,uBAAA,GAAjB;;EACA,mBAAgD,IAAAC,uBAAA,EAC9C,UAACC,KAAD;IAAA,OAAWA,KAAK,CAACC,YAAjB;EAAA,CAD8C,CAAhD;EAAA,IAAQC,MAAR,gBAAQA,MAAR;EAAA,IAAgBC,WAAhB,gBAAgBA,WAAhB;EAAA,IAA6BC,OAA7B,gBAA6BA,OAA7B;EAAA,IAAsCC,KAAtC,gBAAsCA,KAAtC;;EAIA,OAAO;IACLH,MAAM,EAANA,MADK;IAELC,WAAW,EAAXA,WAFK;IAGLC,OAAO,EAAPA,OAHK;IAILC,KAAK,EAALA,KAJK;IAKLC,OAAO,EAAE;MAAA,OAAMT,QAAQ,CAAC,IAAAU,4BAAA,GAAD,CAAd;IAAA;EALJ,CAAP;AAOD,CAbM;AAeP;AACA;;;;;AACO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,GAA6B;EAC/D,IAAMX,QAAQ,GAAG,IAAAC,uBAAA,GAAjB;EACA,OAAO,UAACM,OAAD,EAAyBC,KAAzB,EAAoD;IACzD,OAAOR,QAAQ,CAAC,IAAAY,yBAAA,EAAiBC,6BAAA,CAAmBC,KAApC,EAA2CP,OAA3C,EAAoDC,KAApD,CAAD,CAAf;EACD,CAFD;AAGD,CALM"}
|
|
@@ -159,36 +159,56 @@ var PasswordAttributeModel = /*#__PURE__*/function (_StringAttributeModel) {
|
|
|
159
159
|
}, {
|
|
160
160
|
key: "addConstraints",
|
|
161
161
|
value: function addConstraints() {
|
|
162
|
+
if (this.isConfirmPassword) {
|
|
163
|
+
return this.getConfirmPasswordConstraints();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return this.getStandardPasswordConstraints();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Constraints for a confirmation password
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
}, {
|
|
173
|
+
key: "getConfirmPasswordConstraints",
|
|
174
|
+
value: function getConfirmPasswordConstraints() {
|
|
162
175
|
var constraints = new _ConstraintCollection.default();
|
|
176
|
+
constraints.add(new _PasswordConfirmConstraint.default(this.confirmValue, this.otherLabel));
|
|
177
|
+
return constraints;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Constrains for a standard password
|
|
181
|
+
*/
|
|
163
182
|
|
|
164
|
-
|
|
183
|
+
}, {
|
|
184
|
+
key: "getStandardPasswordConstraints",
|
|
185
|
+
value: function getStandardPasswordConstraints() {
|
|
186
|
+
var constraints = new _ConstraintCollection.default();
|
|
187
|
+
|
|
188
|
+
if (this.upperAndLowerCaseMandatory) {
|
|
189
|
+
constraints.add(new _PasswordLowerAndUpperCaseConstraint.default());
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (this.maxSequenceOfIdenticalCharacters) {
|
|
193
|
+
constraints.add(new _PasswordThreeConsecutiveCharactersNotAllowedConstraint.default(this.maxSequenceOfIdenticalCharacters));
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (this.minNumberOfNumericCharacters) {
|
|
197
|
+
constraints.add(new _PasswordMinNumericCharactersConstraint.default(this.minNumberOfNumericCharacters));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (this.minNumberOfSpecialCharacters) {
|
|
201
|
+
constraints.add(new _PasswordMinSpecialCharactersConstraint.default(this.minNumberOfSpecialCharacters));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
205
|
+
this.regexConstraints.forEach(function (regexConstraint) {
|
|
206
|
+
constraints.add(new _RegexConstraint.default(regexConstraint));
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (this.layouthint.has(_LayoutHints.CONFIRM_PASSWORD) && this.isConfirmPassword == null) {
|
|
165
211
|
constraints.add(new _PasswordConfirmConstraint.default(this.confirmValue, this.otherLabel));
|
|
166
|
-
} else {
|
|
167
|
-
if (this.upperAndLowerCaseMandatory) {
|
|
168
|
-
constraints.add(new _PasswordLowerAndUpperCaseConstraint.default());
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
if (this.maxSequenceOfIdenticalCharacters) {
|
|
172
|
-
constraints.add(new _PasswordThreeConsecutiveCharactersNotAllowedConstraint.default(this.maxSequenceOfIdenticalCharacters));
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
if (this.minNumberOfNumericCharacters) {
|
|
176
|
-
constraints.add(new _PasswordMinNumericCharactersConstraint.default(this.minNumberOfNumericCharacters));
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (this.minNumberOfSpecialCharacters) {
|
|
180
|
-
constraints.add(new _PasswordMinSpecialCharactersConstraint.default(this.minNumberOfSpecialCharacters));
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
184
|
-
this.regexConstraints.forEach(function (regexConstraint) {
|
|
185
|
-
constraints.add(new _RegexConstraint.default(regexConstraint));
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
if (this.layouthint.has(_LayoutHints.CONFIRM_PASSWORD)) {
|
|
190
|
-
constraints.add(new _PasswordConfirmConstraint.default(this.confirmValue, this.otherLabel));
|
|
191
|
-
}
|
|
192
212
|
}
|
|
193
213
|
|
|
194
214
|
return constraints;
|
|
@@ -201,9 +221,8 @@ var PasswordAttributeModel = /*#__PURE__*/function (_StringAttributeModel) {
|
|
|
201
221
|
key: "constraintCollection",
|
|
202
222
|
get: function get() {
|
|
203
223
|
if (this.isConfirmPassword) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return constraints;
|
|
224
|
+
// confirm password only needs local constraints, no server constraints
|
|
225
|
+
return this.getConfirmPasswordConstraints();
|
|
207
226
|
}
|
|
208
227
|
|
|
209
228
|
return (0, _get2.default)((0, _getPrototypeOf2.default)(PasswordAttributeModel.prototype), "constraintCollection", this);
|
|
@@ -214,7 +233,7 @@ var PasswordAttributeModel = /*#__PURE__*/function (_StringAttributeModel) {
|
|
|
214
233
|
}, {
|
|
215
234
|
key: "isConfirmPassword",
|
|
216
235
|
get: function get() {
|
|
217
|
-
return this._isConfirmPassword
|
|
236
|
+
return this._isConfirmPassword;
|
|
218
237
|
}
|
|
219
238
|
/**
|
|
220
239
|
*/
|
|
@@ -93,52 +93,70 @@ export default class PasswordAttributeModel extends StringAttributeModel {
|
|
|
93
93
|
* Add password constraints
|
|
94
94
|
*/
|
|
95
95
|
addConstraints(): ConstraintCollection {
|
|
96
|
+
if (this.isConfirmPassword) {
|
|
97
|
+
return this.getConfirmPasswordConstraints();
|
|
98
|
+
}
|
|
99
|
+
return this.getStandardPasswordConstraints();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Constraints for a confirmation password
|
|
104
|
+
*/
|
|
105
|
+
getConfirmPasswordConstraints(): ConstraintCollection {
|
|
96
106
|
const constraints = new ConstraintCollection();
|
|
107
|
+
constraints.add(
|
|
108
|
+
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
109
|
+
);
|
|
110
|
+
return constraints;
|
|
111
|
+
}
|
|
97
112
|
|
|
98
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Constrains for a standard password
|
|
115
|
+
*/
|
|
116
|
+
getStandardPasswordConstraints(): ConstraintCollection {
|
|
117
|
+
const constraints = new ConstraintCollection();
|
|
118
|
+
|
|
119
|
+
if (this.upperAndLowerCaseMandatory) {
|
|
120
|
+
constraints.add(new PasswordLowerAndUpperCaseConstraint());
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (this.maxSequenceOfIdenticalCharacters) {
|
|
124
|
+
constraints.add(
|
|
125
|
+
new PasswordThreeConsecutiveCharactersNotAllowedConstraint(
|
|
126
|
+
this.maxSequenceOfIdenticalCharacters
|
|
127
|
+
)
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (this.minNumberOfNumericCharacters) {
|
|
132
|
+
constraints.add(
|
|
133
|
+
new PasswordMinNumericCharactersConstraint(
|
|
134
|
+
this.minNumberOfNumericCharacters
|
|
135
|
+
)
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (this.minNumberOfSpecialCharacters) {
|
|
140
|
+
constraints.add(
|
|
141
|
+
new PasswordMinSpecialCharactersConstraint(
|
|
142
|
+
this.minNumberOfSpecialCharacters
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
148
|
+
this.regexConstraints.forEach((regexConstraint) => {
|
|
149
|
+
constraints.add(new RegexConstraint(regexConstraint));
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (
|
|
154
|
+
this.layouthint.has(CONFIRM_PASSWORD) &&
|
|
155
|
+
this.isConfirmPassword == null
|
|
156
|
+
) {
|
|
99
157
|
constraints.add(
|
|
100
158
|
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
101
159
|
);
|
|
102
|
-
} else {
|
|
103
|
-
if (this.upperAndLowerCaseMandatory) {
|
|
104
|
-
constraints.add(new PasswordLowerAndUpperCaseConstraint());
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (this.maxSequenceOfIdenticalCharacters) {
|
|
108
|
-
constraints.add(
|
|
109
|
-
new PasswordThreeConsecutiveCharactersNotAllowedConstraint(
|
|
110
|
-
this.maxSequenceOfIdenticalCharacters
|
|
111
|
-
)
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (this.minNumberOfNumericCharacters) {
|
|
116
|
-
constraints.add(
|
|
117
|
-
new PasswordMinNumericCharactersConstraint(
|
|
118
|
-
this.minNumberOfNumericCharacters
|
|
119
|
-
)
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (this.minNumberOfSpecialCharacters) {
|
|
124
|
-
constraints.add(
|
|
125
|
-
new PasswordMinSpecialCharactersConstraint(
|
|
126
|
-
this.minNumberOfSpecialCharacters
|
|
127
|
-
)
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
132
|
-
this.regexConstraints.forEach((regexConstraint) => {
|
|
133
|
-
constraints.add(new RegexConstraint(regexConstraint));
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (this.layouthint.has(CONFIRM_PASSWORD)) {
|
|
138
|
-
constraints.add(
|
|
139
|
-
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
160
|
}
|
|
143
161
|
|
|
144
162
|
return constraints;
|
|
@@ -149,9 +167,8 @@ export default class PasswordAttributeModel extends StringAttributeModel {
|
|
|
149
167
|
*/
|
|
150
168
|
get constraintCollection(): ConstraintCollection {
|
|
151
169
|
if (this.isConfirmPassword) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return constraints;
|
|
170
|
+
// confirm password only needs local constraints, no server constraints
|
|
171
|
+
return this.getConfirmPasswordConstraints();
|
|
155
172
|
}
|
|
156
173
|
|
|
157
174
|
return super.constraintCollection;
|
|
@@ -159,8 +176,8 @@ export default class PasswordAttributeModel extends StringAttributeModel {
|
|
|
159
176
|
|
|
160
177
|
/**
|
|
161
178
|
*/
|
|
162
|
-
get isConfirmPassword(): boolean {
|
|
163
|
-
return this._isConfirmPassword
|
|
179
|
+
get isConfirmPassword(): boolean | null {
|
|
180
|
+
return this._isConfirmPassword;
|
|
164
181
|
}
|
|
165
182
|
|
|
166
183
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordAttributeModel.js","names":["PasswordAttributeModel","value","updateLastModification","inputvalue","getContribution","constraints","upperAndLowerCaseMandatory","maxSequenceOfIdenticalCharacters","maxSequenceOfUsernameCharacters","minNumberOfNumericCharacters","minNumberOfSpecialCharacters","regexConstraint","ConstraintCollection","isConfirmPassword","add","PasswordConfirmConstraint","confirmValue","otherLabel","PasswordLowerAndUpperCaseConstraint","PasswordThreeConsecutiveCharactersNotAllowedConstraint","PasswordMinNumericCharactersConstraint","PasswordMinSpecialCharactersConstraint","regexConstraints","length","forEach","RegexConstraint","layouthint","has","CONFIRM_PASSWORD","addConstraints","_isConfirmPassword","_confirmValue","validate","_otherLabel","useClientsideValidation","isOptionalAndEmpty","_isValid","_validatedValue","constraintCollection","inError","name","contributions","type","Array","isArray","StringAttributeModel"],"sources":["../../../src/models/attributes/PasswordAttributeModel.js"],"sourcesContent":["// @flow\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\n\nimport PasswordLowerAndUpperCaseConstraint from \"./input-constraints/PasswordLowerAndUpperCaseConstraint\";\nimport PasswordThreeConsecutiveCharactersNotAllowedConstraint from \"./input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint\";\nimport PasswordMinNumericCharactersConstraint from \"./input-constraints/PasswordMinNumericCharactersConstraint\";\nimport PasswordMinSpecialCharactersConstraint from \"./input-constraints/PasswordMinSpecialCharactersConstraint\";\nimport RegexConstraint from \"./input-constraints/RegexConstraint\";\nimport PasswordConfirmConstraint from \"./input-constraints/PasswordConfirmConstraint\";\n\nimport { CONFIRM_PASSWORD } from \"../../constants/LayoutHints\";\n\nimport type { RegexObject } from \"./input-constraints/RegexConstraint\";\n\n/**\n * Password attribute\n */\nexport default class PasswordAttributeModel extends StringAttributeModel {\n _confirmValue: string;\n _isConfirmPassword: boolean;\n _otherLabel: string;\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n const layouthint = contributions?.layouthint;\n return (\n contributions.type === \"password\" ||\n (Array.isArray(layouthint) && layouthint.includes(\"password\"))\n );\n }\n\n /**\n */\n get type(): string {\n return \"password\";\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: string): PasswordAttributeModel {\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n /**\n */\n get constraints(): Object {\n return this.getContribution(\"constraints\", {});\n }\n\n /**\n */\n get upperAndLowerCaseMandatory(): ?boolean {\n return this.constraints.upperAndLowerCaseMandatory;\n }\n\n /**\n */\n get maxSequenceOfIdenticalCharacters(): ?number {\n return this.constraints.maxSequenceOfIdenticalCharacters;\n }\n\n /**\n */\n get maxSequenceOfUsernameCharacters(): ?number {\n return this.constraints.maxSequenceOfUsernameCharacters;\n }\n\n /**\n */\n get minNumberOfNumericCharacters(): ?number {\n return this.constraints.minNumberOfNumericCharacters;\n }\n\n /**\n */\n get minNumberOfSpecialCharacters(): ?number {\n return this.constraints.minNumberOfSpecialCharacters;\n }\n\n /**\n */\n get regexConstraints(): ?Array<RegexObject> {\n return this.constraints.regexConstraint;\n }\n\n /**\n * Add password constraints\n */\n addConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.isConfirmPassword) {\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n } else {\n if (this.upperAndLowerCaseMandatory) {\n constraints.add(new PasswordLowerAndUpperCaseConstraint());\n }\n\n if (this.maxSequenceOfIdenticalCharacters) {\n constraints.add(\n new PasswordThreeConsecutiveCharactersNotAllowedConstraint(\n this.maxSequenceOfIdenticalCharacters\n )\n );\n }\n\n if (this.minNumberOfNumericCharacters) {\n constraints.add(\n new PasswordMinNumericCharactersConstraint(\n this.minNumberOfNumericCharacters\n )\n );\n }\n\n if (this.minNumberOfSpecialCharacters) {\n constraints.add(\n new PasswordMinSpecialCharactersConstraint(\n this.minNumberOfSpecialCharacters\n )\n );\n }\n\n if (this.regexConstraints && this.regexConstraints.length > 0) {\n this.regexConstraints.forEach((regexConstraint) => {\n constraints.add(new RegexConstraint(regexConstraint));\n });\n }\n\n if (this.layouthint.has(CONFIRM_PASSWORD)) {\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n }\n }\n\n return constraints;\n }\n\n /**\n * Retrieve applicable constraint for this attribute\n */\n get constraintCollection(): ConstraintCollection {\n if (this.isConfirmPassword) {\n const constraints = new ConstraintCollection();\n constraints.add(this.addConstraints());\n return constraints;\n }\n\n return super.constraintCollection;\n }\n\n /**\n */\n get isConfirmPassword(): boolean {\n return this._isConfirmPassword || false;\n }\n\n /**\n */\n set isConfirmPassword(isConfirmPassword: boolean) {\n this._isConfirmPassword = isConfirmPassword;\n }\n\n /**\n */\n get confirmValue(): string {\n return this._confirmValue || \"\";\n }\n\n /**\n */\n set confirmValue(confirmValue: string) {\n this._confirmValue = confirmValue;\n\n this.validate(this.inputvalue);\n }\n\n /**\n */\n get otherLabel(): string {\n return this._otherLabel;\n }\n\n /**\n */\n set otherLabel(otherLabel: string) {\n this._otherLabel = otherLabel;\n }\n\n /**\n * Validate input\n */\n validate(value: string): boolean {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n if (this.isOptionalAndEmpty(value)) {\n this._isValid = true;\n } else if (this._validatedValue !== `${this.confirmValue}-${value}`) {\n this._isValid = this.constraintCollection.validate(value);\n }\n this._validatedValue = `${this.confirmValue}-${value}`;\n\n return this._isValid;\n }\n\n /**\n */\n getFormData(): { [string]: any } | null {\n if (this.isConfirmPassword || this.inError()) {\n return null;\n }\n\n return {\n [this.name]: this.value,\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PasswordAttributeModel.js","names":["PasswordAttributeModel","value","updateLastModification","inputvalue","getContribution","constraints","upperAndLowerCaseMandatory","maxSequenceOfIdenticalCharacters","maxSequenceOfUsernameCharacters","minNumberOfNumericCharacters","minNumberOfSpecialCharacters","regexConstraint","isConfirmPassword","getConfirmPasswordConstraints","getStandardPasswordConstraints","ConstraintCollection","add","PasswordConfirmConstraint","confirmValue","otherLabel","PasswordLowerAndUpperCaseConstraint","PasswordThreeConsecutiveCharactersNotAllowedConstraint","PasswordMinNumericCharactersConstraint","PasswordMinSpecialCharactersConstraint","regexConstraints","length","forEach","RegexConstraint","layouthint","has","CONFIRM_PASSWORD","_isConfirmPassword","_confirmValue","validate","_otherLabel","useClientsideValidation","isOptionalAndEmpty","_isValid","_validatedValue","constraintCollection","inError","name","contributions","type","Array","isArray","StringAttributeModel"],"sources":["../../../src/models/attributes/PasswordAttributeModel.js"],"sourcesContent":["// @flow\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\n\nimport PasswordLowerAndUpperCaseConstraint from \"./input-constraints/PasswordLowerAndUpperCaseConstraint\";\nimport PasswordThreeConsecutiveCharactersNotAllowedConstraint from \"./input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint\";\nimport PasswordMinNumericCharactersConstraint from \"./input-constraints/PasswordMinNumericCharactersConstraint\";\nimport PasswordMinSpecialCharactersConstraint from \"./input-constraints/PasswordMinSpecialCharactersConstraint\";\nimport RegexConstraint from \"./input-constraints/RegexConstraint\";\nimport PasswordConfirmConstraint from \"./input-constraints/PasswordConfirmConstraint\";\n\nimport { CONFIRM_PASSWORD } from \"../../constants/LayoutHints\";\n\nimport type { RegexObject } from \"./input-constraints/RegexConstraint\";\n\n/**\n * Password attribute\n */\nexport default class PasswordAttributeModel extends StringAttributeModel {\n _confirmValue: string;\n _isConfirmPassword: boolean;\n _otherLabel: string;\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n const layouthint = contributions?.layouthint;\n return (\n contributions.type === \"password\" ||\n (Array.isArray(layouthint) && layouthint.includes(\"password\"))\n );\n }\n\n /**\n */\n get type(): string {\n return \"password\";\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: string): PasswordAttributeModel {\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n /**\n */\n get constraints(): Object {\n return this.getContribution(\"constraints\", {});\n }\n\n /**\n */\n get upperAndLowerCaseMandatory(): ?boolean {\n return this.constraints.upperAndLowerCaseMandatory;\n }\n\n /**\n */\n get maxSequenceOfIdenticalCharacters(): ?number {\n return this.constraints.maxSequenceOfIdenticalCharacters;\n }\n\n /**\n */\n get maxSequenceOfUsernameCharacters(): ?number {\n return this.constraints.maxSequenceOfUsernameCharacters;\n }\n\n /**\n */\n get minNumberOfNumericCharacters(): ?number {\n return this.constraints.minNumberOfNumericCharacters;\n }\n\n /**\n */\n get minNumberOfSpecialCharacters(): ?number {\n return this.constraints.minNumberOfSpecialCharacters;\n }\n\n /**\n */\n get regexConstraints(): ?Array<RegexObject> {\n return this.constraints.regexConstraint;\n }\n\n /**\n * Add password constraints\n */\n addConstraints(): ConstraintCollection {\n if (this.isConfirmPassword) {\n return this.getConfirmPasswordConstraints();\n }\n return this.getStandardPasswordConstraints();\n }\n\n /**\n * Constraints for a confirmation password\n */\n getConfirmPasswordConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n return constraints;\n }\n\n /**\n * Constrains for a standard password\n */\n getStandardPasswordConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.upperAndLowerCaseMandatory) {\n constraints.add(new PasswordLowerAndUpperCaseConstraint());\n }\n\n if (this.maxSequenceOfIdenticalCharacters) {\n constraints.add(\n new PasswordThreeConsecutiveCharactersNotAllowedConstraint(\n this.maxSequenceOfIdenticalCharacters\n )\n );\n }\n\n if (this.minNumberOfNumericCharacters) {\n constraints.add(\n new PasswordMinNumericCharactersConstraint(\n this.minNumberOfNumericCharacters\n )\n );\n }\n\n if (this.minNumberOfSpecialCharacters) {\n constraints.add(\n new PasswordMinSpecialCharactersConstraint(\n this.minNumberOfSpecialCharacters\n )\n );\n }\n\n if (this.regexConstraints && this.regexConstraints.length > 0) {\n this.regexConstraints.forEach((regexConstraint) => {\n constraints.add(new RegexConstraint(regexConstraint));\n });\n }\n\n if (\n this.layouthint.has(CONFIRM_PASSWORD) &&\n this.isConfirmPassword == null\n ) {\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)\n );\n }\n\n return constraints;\n }\n\n /**\n * Retrieve applicable constraint for this attribute\n */\n get constraintCollection(): ConstraintCollection {\n if (this.isConfirmPassword) {\n // confirm password only needs local constraints, no server constraints\n return this.getConfirmPasswordConstraints();\n }\n\n return super.constraintCollection;\n }\n\n /**\n */\n get isConfirmPassword(): boolean | null {\n return this._isConfirmPassword;\n }\n\n /**\n */\n set isConfirmPassword(isConfirmPassword: boolean) {\n this._isConfirmPassword = isConfirmPassword;\n }\n\n /**\n */\n get confirmValue(): string {\n return this._confirmValue || \"\";\n }\n\n /**\n */\n set confirmValue(confirmValue: string) {\n this._confirmValue = confirmValue;\n\n this.validate(this.inputvalue);\n }\n\n /**\n */\n get otherLabel(): string {\n return this._otherLabel;\n }\n\n /**\n */\n set otherLabel(otherLabel: string) {\n this._otherLabel = otherLabel;\n }\n\n /**\n * Validate input\n */\n validate(value: string): boolean {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n if (this.isOptionalAndEmpty(value)) {\n this._isValid = true;\n } else if (this._validatedValue !== `${this.confirmValue}-${value}`) {\n this._isValid = this.constraintCollection.validate(value);\n }\n this._validatedValue = `${this.confirmValue}-${value}`;\n\n return this._isValid;\n }\n\n /**\n */\n getFormData(): { [string]: any } | null {\n if (this.isConfirmPassword || this.inError()) {\n return null;\n }\n\n return {\n [this.name]: this.value,\n };\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beinformed/ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.19.1",
|
|
4
4
|
"description": "Toolbox for be informed javascript layouts",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"bugs": "http://support.beinformed.com",
|
|
@@ -72,10 +72,10 @@
|
|
|
72
72
|
"react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0",
|
|
73
73
|
"react-helmet-async": "^1.0.0",
|
|
74
74
|
"react-redux": "^7.0.0 || ^8.0.0",
|
|
75
|
-
"react-router": "^5.
|
|
75
|
+
"react-router": "^5.0.0",
|
|
76
76
|
"redux": "^4.0.0",
|
|
77
|
-
"redux-thunk": "^2.
|
|
78
|
-
"styled-components": "^5.
|
|
77
|
+
"redux-thunk": "^2.0.0",
|
|
78
|
+
"styled-components": "^5.0.0"
|
|
79
79
|
},
|
|
80
80
|
"dependencies": {
|
|
81
81
|
"@babel/runtime-corejs3": "^7.18.3",
|
|
@@ -135,20 +135,20 @@
|
|
|
135
135
|
"jest-sonar-reporter": "^2.0.0",
|
|
136
136
|
"jscodeshift": "^0.13.1",
|
|
137
137
|
"lint-staged": "^13.0.1",
|
|
138
|
-
"polished": "^4.
|
|
139
|
-
"prettier": "^2.
|
|
140
|
-
"react": "^18.
|
|
141
|
-
"react-dom": "^18.
|
|
142
|
-
"react-helmet-async": "^1.
|
|
143
|
-
"react-redux": "^8.0.
|
|
144
|
-
"react-router": "^5.
|
|
138
|
+
"polished": "^4.0.0",
|
|
139
|
+
"prettier": "^2.7.1",
|
|
140
|
+
"react": "^18.0.0",
|
|
141
|
+
"react-dom": "^18.0.0",
|
|
142
|
+
"react-helmet-async": "^1.0.0",
|
|
143
|
+
"react-redux": "^8.0.0",
|
|
144
|
+
"react-router": "^5.0.0",
|
|
145
145
|
"react-test-renderer": "^18.1.0",
|
|
146
|
-
"redux": "^4.
|
|
146
|
+
"redux": "^4.0.0",
|
|
147
147
|
"redux-mock-store": "^1.5.4",
|
|
148
|
-
"redux-thunk": "^2.
|
|
148
|
+
"redux-thunk": "^2.0.0",
|
|
149
149
|
"rimraf": "^3.0.2",
|
|
150
150
|
"standard-version": "^9.5.0",
|
|
151
|
-
"styled-components": "^5.
|
|
151
|
+
"styled-components": "^5.0.0",
|
|
152
152
|
"xhr-mock": "^2.5.1"
|
|
153
153
|
},
|
|
154
154
|
"scarfSettings": {
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
import { useSelector, useDispatch } from "react-redux";
|
|
3
|
-
import { dismissNotification } from "../redux/actions";
|
|
3
|
+
import { dismissNotification, showNotification } from "../redux/actions";
|
|
4
4
|
|
|
5
5
|
import type {
|
|
6
6
|
DismissNotificationAction,
|
|
7
7
|
NotificationState,
|
|
8
|
+
ShowNotificationAction,
|
|
8
9
|
} from "../redux/types";
|
|
10
|
+
|
|
11
|
+
import { NOTIFICATION_TYPES } from "../constants";
|
|
12
|
+
|
|
13
|
+
import type { MessageObject } from "../i18n";
|
|
14
|
+
import type ErrorResponse from "../models/error/ErrorResponse";
|
|
9
15
|
type NotificationHook = {
|
|
10
16
|
...NotificationState,
|
|
11
17
|
dismiss: () => DismissNotificationAction,
|
|
12
18
|
};
|
|
19
|
+
type ErrorNotificationHook = (
|
|
20
|
+
message: MessageObject,
|
|
21
|
+
error?: ?ErrorResponse
|
|
22
|
+
) => ShowNotificationAction;
|
|
13
23
|
|
|
14
24
|
/**
|
|
15
25
|
*/
|
|
@@ -27,3 +37,12 @@ export const useNotification = (): NotificationHook => {
|
|
|
27
37
|
dismiss: () => dispatch(dismissNotification()),
|
|
28
38
|
};
|
|
29
39
|
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
*/
|
|
43
|
+
export const useErrorNotification = (): ErrorNotificationHook => {
|
|
44
|
+
const dispatch = useDispatch();
|
|
45
|
+
return (message: MessageObject, error?: ?ErrorResponse) => {
|
|
46
|
+
return dispatch(showNotification(NOTIFICATION_TYPES.ERROR, message, error));
|
|
47
|
+
};
|
|
48
|
+
};
|
|
@@ -93,52 +93,70 @@ export default class PasswordAttributeModel extends StringAttributeModel {
|
|
|
93
93
|
* Add password constraints
|
|
94
94
|
*/
|
|
95
95
|
addConstraints(): ConstraintCollection {
|
|
96
|
+
if (this.isConfirmPassword) {
|
|
97
|
+
return this.getConfirmPasswordConstraints();
|
|
98
|
+
}
|
|
99
|
+
return this.getStandardPasswordConstraints();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Constraints for a confirmation password
|
|
104
|
+
*/
|
|
105
|
+
getConfirmPasswordConstraints(): ConstraintCollection {
|
|
96
106
|
const constraints = new ConstraintCollection();
|
|
107
|
+
constraints.add(
|
|
108
|
+
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
109
|
+
);
|
|
110
|
+
return constraints;
|
|
111
|
+
}
|
|
97
112
|
|
|
98
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Constrains for a standard password
|
|
115
|
+
*/
|
|
116
|
+
getStandardPasswordConstraints(): ConstraintCollection {
|
|
117
|
+
const constraints = new ConstraintCollection();
|
|
118
|
+
|
|
119
|
+
if (this.upperAndLowerCaseMandatory) {
|
|
120
|
+
constraints.add(new PasswordLowerAndUpperCaseConstraint());
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (this.maxSequenceOfIdenticalCharacters) {
|
|
124
|
+
constraints.add(
|
|
125
|
+
new PasswordThreeConsecutiveCharactersNotAllowedConstraint(
|
|
126
|
+
this.maxSequenceOfIdenticalCharacters
|
|
127
|
+
)
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (this.minNumberOfNumericCharacters) {
|
|
132
|
+
constraints.add(
|
|
133
|
+
new PasswordMinNumericCharactersConstraint(
|
|
134
|
+
this.minNumberOfNumericCharacters
|
|
135
|
+
)
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (this.minNumberOfSpecialCharacters) {
|
|
140
|
+
constraints.add(
|
|
141
|
+
new PasswordMinSpecialCharactersConstraint(
|
|
142
|
+
this.minNumberOfSpecialCharacters
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
148
|
+
this.regexConstraints.forEach((regexConstraint) => {
|
|
149
|
+
constraints.add(new RegexConstraint(regexConstraint));
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (
|
|
154
|
+
this.layouthint.has(CONFIRM_PASSWORD) &&
|
|
155
|
+
this.isConfirmPassword == null
|
|
156
|
+
) {
|
|
99
157
|
constraints.add(
|
|
100
158
|
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
101
159
|
);
|
|
102
|
-
} else {
|
|
103
|
-
if (this.upperAndLowerCaseMandatory) {
|
|
104
|
-
constraints.add(new PasswordLowerAndUpperCaseConstraint());
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (this.maxSequenceOfIdenticalCharacters) {
|
|
108
|
-
constraints.add(
|
|
109
|
-
new PasswordThreeConsecutiveCharactersNotAllowedConstraint(
|
|
110
|
-
this.maxSequenceOfIdenticalCharacters
|
|
111
|
-
)
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (this.minNumberOfNumericCharacters) {
|
|
116
|
-
constraints.add(
|
|
117
|
-
new PasswordMinNumericCharactersConstraint(
|
|
118
|
-
this.minNumberOfNumericCharacters
|
|
119
|
-
)
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (this.minNumberOfSpecialCharacters) {
|
|
124
|
-
constraints.add(
|
|
125
|
-
new PasswordMinSpecialCharactersConstraint(
|
|
126
|
-
this.minNumberOfSpecialCharacters
|
|
127
|
-
)
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (this.regexConstraints && this.regexConstraints.length > 0) {
|
|
132
|
-
this.regexConstraints.forEach((regexConstraint) => {
|
|
133
|
-
constraints.add(new RegexConstraint(regexConstraint));
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (this.layouthint.has(CONFIRM_PASSWORD)) {
|
|
138
|
-
constraints.add(
|
|
139
|
-
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
160
|
}
|
|
143
161
|
|
|
144
162
|
return constraints;
|
|
@@ -149,9 +167,8 @@ export default class PasswordAttributeModel extends StringAttributeModel {
|
|
|
149
167
|
*/
|
|
150
168
|
get constraintCollection(): ConstraintCollection {
|
|
151
169
|
if (this.isConfirmPassword) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return constraints;
|
|
170
|
+
// confirm password only needs local constraints, no server constraints
|
|
171
|
+
return this.getConfirmPasswordConstraints();
|
|
155
172
|
}
|
|
156
173
|
|
|
157
174
|
return super.constraintCollection;
|
|
@@ -159,8 +176,8 @@ export default class PasswordAttributeModel extends StringAttributeModel {
|
|
|
159
176
|
|
|
160
177
|
/**
|
|
161
178
|
*/
|
|
162
|
-
get isConfirmPassword(): boolean {
|
|
163
|
-
return this._isConfirmPassword
|
|
179
|
+
get isConfirmPassword(): boolean | null {
|
|
180
|
+
return this._isConfirmPassword;
|
|
164
181
|
}
|
|
165
182
|
|
|
166
183
|
/**
|