@beinformed/ui 1.18.9 → 1.19.0
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 +6 -0
- package/esm/hooks/useNotification.js +11 -1
- package/esm/hooks/useNotification.js.map +1 -1
- package/esm/models/attributes/PasswordAttributeModel.js +47 -27
- 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 +47 -27
- package/lib/models/attributes/PasswordAttributeModel.js.flow +56 -41
- package/lib/models/attributes/PasswordAttributeModel.js.map +1 -1
- package/package.json +1 -1
- package/src/hooks/useNotification.js +20 -1
- package/src/models/attributes/PasswordAttributeModel.js +56 -41
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
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.0](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.9...v1.19.0) (2022-06-15)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **hooks:** add error notification hook ([dc8f71a](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/dc8f71a849418d4b3022b8ab96a5cfae018cea7d))
|
|
10
|
+
|
|
5
11
|
### [1.18.9](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.8...v1.18.9) (2022-06-14)
|
|
6
12
|
|
|
7
13
|
### 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.confirmValue !== "") {
|
|
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) && this.confirmValue !== "") {
|
|
167
|
-
constraints.add(new PasswordConfirmConstraint(this.confirmValue, this.otherLabel));
|
|
168
|
-
}
|
|
169
189
|
}
|
|
170
190
|
|
|
171
191
|
return constraints;
|
|
@@ -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) && this.confirmValue !== \"\") {\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","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 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 (this.layouthint.has(CONFIRM_PASSWORD) && this.confirmValue !== \"\") {\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 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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"}
|
|
@@ -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.confirmValue !== "") {
|
|
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) && this.confirmValue !== "") {
|
|
190
|
-
constraints.add(new _PasswordConfirmConstraint.default(this.confirmValue, this.otherLabel));
|
|
191
|
-
}
|
|
192
212
|
}
|
|
193
213
|
|
|
194
214
|
return constraints;
|
|
@@ -93,52 +93,67 @@ 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 (this.layouthint.has(CONFIRM_PASSWORD) && this.confirmValue !== "") {
|
|
99
154
|
constraints.add(
|
|
100
155
|
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
101
156
|
);
|
|
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) && this.confirmValue !== "") {
|
|
138
|
-
constraints.add(
|
|
139
|
-
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
157
|
}
|
|
143
158
|
|
|
144
159
|
return constraints;
|
|
@@ -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) && this.confirmValue !== \"\") {\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","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 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 (this.layouthint.has(CONFIRM_PASSWORD) && this.confirmValue !== \"\") {\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 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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"}
|
package/package.json
CHANGED
|
@@ -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,67 @@ 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 (this.layouthint.has(CONFIRM_PASSWORD) && this.confirmValue !== "") {
|
|
99
154
|
constraints.add(
|
|
100
155
|
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
101
156
|
);
|
|
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) && this.confirmValue !== "") {
|
|
138
|
-
constraints.add(
|
|
139
|
-
new PasswordConfirmConstraint(this.confirmValue, this.otherLabel)
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
157
|
}
|
|
143
158
|
|
|
144
159
|
return constraints;
|