@dereekb/dbx-form 1.2.0 → 3.0.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/README.md +1 -1
- package/esm2020/lib/form/action/form.action.directive.mjs +34 -19
- package/esm2020/lib/form/action/form.action.module.mjs +4 -4
- package/esm2020/lib/form/action/transition/form.action.transition.module.mjs +4 -4
- package/esm2020/lib/form/action/transition/form.action.transition.safety.directive.mjs +9 -9
- package/esm2020/lib/form/form.mjs +11 -1
- package/esm2020/lib/form/form.module.mjs +4 -4
- package/esm2020/lib/form/io/form.changes.directive.mjs +18 -7
- package/esm2020/lib/form/io/form.input.directive.mjs +36 -18
- package/esm2020/lib/form/io/form.io.module.mjs +4 -4
- package/esm2020/lib/form/io/form.loading.directive.mjs +27 -17
- package/esm2020/lib/form.module.mjs +4 -4
- package/esm2020/lib/formly/config/validation.mjs +3 -3
- package/esm2020/lib/formly/field/checklist/checklist.item.field.component.mjs +8 -8
- package/esm2020/lib/formly/field/checklist/checklist.item.field.content.default.component.mjs +3 -3
- package/esm2020/lib/formly/field/checklist/checklist.item.field.module.mjs +13 -13
- package/esm2020/lib/formly/field/component/component.field.component.mjs +8 -21
- package/esm2020/lib/formly/field/component/component.field.mjs +3 -5
- package/esm2020/lib/formly/field/component/component.field.module.mjs +14 -14
- package/esm2020/lib/formly/field/form.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/selection/pickable/pickable.chip.field.component.mjs +7 -7
- package/esm2020/lib/formly/field/selection/pickable/pickable.field.directive.mjs +8 -6
- package/esm2020/lib/formly/field/selection/pickable/pickable.field.mjs +2 -2
- package/esm2020/lib/formly/field/selection/pickable/pickable.field.module.mjs +13 -13
- package/esm2020/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +28 -21
- package/esm2020/lib/formly/field/selection/searchable/searchable.chip.field.component.mjs +4 -4
- package/esm2020/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.mjs +16 -16
- package/esm2020/lib/formly/field/selection/searchable/searchable.field.directive.mjs +7 -8
- package/esm2020/lib/formly/field/selection/searchable/searchable.field.module.mjs +13 -13
- package/esm2020/lib/formly/field/selection/searchable/searchable.mjs +1 -1
- package/esm2020/lib/formly/field/selection/searchable/searchable.text.field.component.mjs +3 -3
- package/esm2020/lib/formly/field/selection/selection.module.mjs +4 -4
- package/esm2020/lib/formly/field/texteditor/texteditor.field.component.mjs +4 -5
- package/esm2020/lib/formly/field/texteditor/texteditor.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/value/array/array.field.component.mjs +7 -7
- package/esm2020/lib/formly/field/value/array/array.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/value/boolean/boolean.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/value/date/date.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +51 -40
- package/esm2020/lib/formly/field/value/date/datetime.field.mjs +7 -7
- package/esm2020/lib/formly/field/value/enum/enum.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/value/phone/phone.field.component.mjs +3 -3
- package/esm2020/lib/formly/field/value/phone/phone.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/value/text/text.additional.field.mjs +15 -18
- package/esm2020/lib/formly/field/value/text/text.address.field.mjs +2 -2
- package/esm2020/lib/formly/field/value/text/text.field.mjs +3 -2
- package/esm2020/lib/formly/field/value/text/text.field.module.mjs +4 -4
- package/esm2020/lib/formly/field/value/value.module.mjs +4 -4
- package/esm2020/lib/formly/field/wrapper/autotouch.wrapper.component.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/expandable.wrapper.component.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/expandable.wrapper.delegate.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/flex.wrapper.component.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/form.wrapper.module.mjs +18 -10
- package/esm2020/lib/formly/field/wrapper/index.mjs +2 -1
- package/esm2020/lib/formly/field/wrapper/info.wrapper.component.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/section.wrapper.component.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/style.wrapper.component.mjs +4 -4
- package/esm2020/lib/formly/field/wrapper/subsection.wrapper.component.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/toggle.wrapper.component.mjs +3 -3
- package/esm2020/lib/formly/field/wrapper/working.wrapper.component.mjs +45 -0
- package/esm2020/lib/formly/field/wrapper/wrapper.mjs +7 -1
- package/esm2020/lib/formly/formly.context.directive.mjs +3 -3
- package/esm2020/lib/formly/formly.context.mjs +19 -8
- package/esm2020/lib/formly/formly.directive.mjs +17 -14
- package/esm2020/lib/formly/formly.form.component.mjs +63 -22
- package/esm2020/lib/formly/formly.module.mjs +9 -6
- package/esm2020/lib/formly/index.mjs +2 -1
- package/esm2020/lib/formly/template/available.mjs +16 -0
- package/esm2020/lib/formly/template/index.mjs +3 -0
- package/esm2020/lib/formly/template/login.mjs +90 -0
- package/esm2020/lib/layout/form.layout.module.mjs +4 -4
- package/esm2020/lib/layout/form.spacer.component.mjs +3 -3
- package/esm2020/lib/validator/available.mjs +32 -0
- package/esm2020/lib/validator/field.mjs +31 -0
- package/esm2020/lib/validator/index.mjs +3 -1
- package/fesm2015/dereekb-dbx-form.mjs +818 -505
- package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form.mjs +834 -501
- package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
- package/lib/form/action/form.action.directive.d.ts +13 -16
- package/lib/form/action/transition/form.action.transition.safety.directive.d.ts +3 -3
- package/lib/form/form.d.ts +30 -3
- package/lib/form/io/form.changes.directive.d.ts +7 -3
- package/lib/form/io/form.input.directive.d.ts +19 -7
- package/lib/form/io/form.loading.directive.d.ts +8 -2
- package/lib/formly/field/checklist/checklist.item.field.component.d.ts +2 -2
- package/lib/formly/field/checklist/checklist.item.field.module.d.ts +1 -1
- package/lib/formly/field/component/component.field.component.d.ts +8 -21
- package/lib/formly/field/component/component.field.d.ts +3 -5
- package/lib/formly/field/component/component.field.module.d.ts +1 -1
- package/lib/formly/field/selection/pickable/pickable.field.directive.d.ts +8 -3
- package/lib/formly/field/selection/pickable/pickable.field.module.d.ts +1 -1
- package/lib/formly/field/selection/pickable/pickable.list.field.component.d.ts +8 -6
- package/lib/formly/field/selection/searchable/searchable.chip.field.component.d.ts +2 -1
- package/lib/formly/field/selection/searchable/searchable.d.ts +3 -3
- package/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.d.ts +3 -3
- package/lib/formly/field/selection/searchable/searchable.field.directive.d.ts +4 -4
- package/lib/formly/field/selection/searchable/searchable.field.module.d.ts +1 -1
- package/lib/formly/field/texteditor/_texteditor.scss +0 -2
- package/lib/formly/field/value/array/array.field.component.d.ts +2 -2
- package/lib/formly/field/value/date/datetime.field.component.d.ts +8 -10
- package/lib/formly/field/value/date/datetime.field.d.ts +2 -2
- package/lib/formly/field/value/phone/_phone.scss +4 -0
- package/lib/formly/field/value/text/text.additional.field.d.ts +1 -1
- package/lib/formly/field/value/text/text.field.d.ts +2 -0
- package/lib/formly/field/wrapper/form.wrapper.module.d.ts +9 -8
- package/lib/formly/field/wrapper/index.d.ts +1 -0
- package/lib/formly/field/wrapper/style.wrapper.component.d.ts +3 -3
- package/lib/formly/field/wrapper/working.wrapper.component.d.ts +22 -0
- package/lib/formly/field/wrapper/wrapper.d.ts +3 -0
- package/lib/formly/formly.context.d.ts +9 -6
- package/lib/formly/formly.directive.d.ts +2 -0
- package/lib/formly/formly.form.component.d.ts +13 -3
- package/lib/formly/index.d.ts +1 -0
- package/lib/formly/template/available.d.ts +7 -0
- package/lib/formly/template/index.d.ts +2 -0
- package/lib/formly/template/login.d.ts +59 -0
- package/lib/validator/available.d.ts +30 -0
- package/lib/validator/field.d.ts +32 -0
- package/lib/validator/index.d.ts +2 -0
- package/package.json +17 -44
- package/lib/formly/field/fields_TODO.scss +0 -4
- package/lib/formly/form_TODO.scss +0 -153
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { textField } from '../field/value/text/text.field';
|
|
2
|
+
import { emailField } from '../field/value/text/text.additional.field';
|
|
3
|
+
import { fieldValuesAreEqualValidator } from '../../validator/field';
|
|
4
|
+
import { capitalizeFirstLetter } from '@dereekb/util';
|
|
5
|
+
;
|
|
6
|
+
/**
|
|
7
|
+
* Configured simple text password field.
|
|
8
|
+
*
|
|
9
|
+
* @param config
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export function textPasswordField(config) {
|
|
13
|
+
return textField({
|
|
14
|
+
key: 'password',
|
|
15
|
+
...config,
|
|
16
|
+
label: config?.label ?? 'Password',
|
|
17
|
+
inputType: 'password',
|
|
18
|
+
required: true
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Configured verify field for a password.
|
|
23
|
+
* @param config
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
export function textVerifyPasswordField(config) {
|
|
27
|
+
return textPasswordField({
|
|
28
|
+
key: 'verifyPassword',
|
|
29
|
+
label: 'Verify Password',
|
|
30
|
+
...config,
|
|
31
|
+
required: true
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export function textPasswordWithVerifyFieldGroup(config) {
|
|
35
|
+
const passwordFieldConfig = textPasswordField(config.password);
|
|
36
|
+
const verifyPasswordFieldKey = config.verifyPassword?.key ?? `verify${capitalizeFirstLetter(String(passwordFieldConfig.key))}`;
|
|
37
|
+
const verifyPasswordField = textVerifyPasswordField({
|
|
38
|
+
...config.password,
|
|
39
|
+
...config.verifyPassword,
|
|
40
|
+
label: (config.verifyPassword?.label) ?? `Verify ${passwordFieldConfig.templateOptions?.label}`,
|
|
41
|
+
key: verifyPasswordFieldKey
|
|
42
|
+
});
|
|
43
|
+
const validators = {
|
|
44
|
+
validation: [{
|
|
45
|
+
errorPath: verifyPasswordFieldKey,
|
|
46
|
+
expression: fieldValuesAreEqualValidator({ keysFilter: [passwordFieldConfig.key, verifyPasswordField.key], message: 'The passwords do not match.' })
|
|
47
|
+
}]
|
|
48
|
+
};
|
|
49
|
+
const groupFieldConfig = {
|
|
50
|
+
validators,
|
|
51
|
+
fieldGroup: [passwordFieldConfig, verifyPasswordField]
|
|
52
|
+
};
|
|
53
|
+
return groupFieldConfig;
|
|
54
|
+
}
|
|
55
|
+
;
|
|
56
|
+
/**
|
|
57
|
+
* Template for login field that takes in a username and password.
|
|
58
|
+
*
|
|
59
|
+
* @param param0
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
export function usernamePasswordLoginFields({ username, password, verifyPassword }) {
|
|
63
|
+
let usernameField;
|
|
64
|
+
let usernameFieldConfig = username;
|
|
65
|
+
const defaultUsernameFieldConfig = { key: 'username', required: true };
|
|
66
|
+
if (typeof username === 'string') {
|
|
67
|
+
if (username === 'email') {
|
|
68
|
+
usernameFieldConfig = {
|
|
69
|
+
email: defaultUsernameFieldConfig
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
usernameFieldConfig = {
|
|
74
|
+
username: defaultUsernameFieldConfig
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (usernameFieldConfig.email) {
|
|
79
|
+
usernameField = emailField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });
|
|
83
|
+
}
|
|
84
|
+
const passwordField = (verifyPassword) ? (textPasswordWithVerifyFieldGroup({ password, verifyPassword: (verifyPassword === true) ? undefined : verifyPassword })) : textPasswordField(password);
|
|
85
|
+
return [
|
|
86
|
+
usernameField,
|
|
87
|
+
passwordField
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS90ZW1wbGF0ZS9sb2dpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVFLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFFLHFCQUFxQixFQUFTLE1BQU0sZUFBZSxDQUFDO0FBS3lFLENBQUM7QUFPdkk7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBZ0M7SUFDaEUsT0FBTyxTQUFTLENBQUM7UUFDZixHQUFHLEVBQUUsVUFBVTtRQUNmLEdBQUcsTUFBTTtRQUNULEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLFVBQVU7UUFDbEMsU0FBUyxFQUFFLFVBQVU7UUFDckIsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxNQUFnQztJQUN0RSxPQUFPLGlCQUFpQixDQUFDO1FBQ3ZCLEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixHQUFHLE1BQU07UUFDVCxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztBQUNMLENBQUM7QUFPRCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsTUFBeUM7SUFDeEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxTQUFTLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0gsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQztRQUNsRCxHQUFHLE1BQU0sQ0FBQyxRQUFRO1FBQ2xCLEdBQUcsTUFBTSxDQUFDLGNBQWM7UUFDeEIsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxVQUFVLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUU7UUFDL0YsR0FBRyxFQUFFLHNCQUFzQjtLQUM1QixDQUFDLENBQUM7SUFFSCxNQUFNLFVBQVUsR0FBUTtRQUN0QixVQUFVLEVBQUUsQ0FBQztnQkFDWCxTQUFTLEVBQUUsc0JBQXNCO2dCQUNqQyxVQUFVLEVBQUUsNEJBQTRCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFhLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUM7YUFDakssQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFzQjtRQUMxQyxVQUFVO1FBQ1YsVUFBVSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7S0FDdkQsQ0FBQztJQUVGLE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUtBLENBQUM7QUFvQkY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBNkI7SUFDM0csSUFBSSxhQUFnQyxDQUFDO0lBQ3JDLElBQUksbUJBQW1CLEdBQXFDLFFBQTRDLENBQUM7SUFDekcsTUFBTSwwQkFBMEIsR0FBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRTVFLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hDLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRTtZQUN4QixtQkFBbUIsR0FBRztnQkFDcEIsS0FBSyxFQUFFLDBCQUEwQjthQUNsQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLG1CQUFtQixHQUFHO2dCQUNwQixRQUFRLEVBQUUsMEJBQTBCO2FBQ3JDLENBQUM7U0FDSDtLQUNGO0lBRUQsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUU7UUFDN0IsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0tBQ2hHO1NBQU07UUFDTCxhQUFhLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRywwQkFBMEIsRUFBRSxDQUFDLENBQUM7S0FDL0Y7SUFFRCxNQUFNLGFBQWEsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWhNLE9BQU87UUFDTCxhQUFhO1FBQ2IsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpZWxkQ29uZmlnLCB0ZXh0RmllbGQgfSBmcm9tICcuLi9maWVsZC92YWx1ZS90ZXh0L3RleHQuZmllbGQnO1xuaW1wb3J0IHsgRW1haWxGaWVsZENvbmZpZywgZW1haWxGaWVsZCB9IGZyb20gJy4uL2ZpZWxkL3ZhbHVlL3RleHQvdGV4dC5hZGRpdGlvbmFsLmZpZWxkJztcbmltcG9ydCB7IGZpZWxkVmFsdWVzQXJlRXF1YWxWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3IvZmllbGQnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tIFwiQG5neC1mb3JtbHkvY29yZVwiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGludGVyZmFjZSBmb3IgdGhlIHBhc3N3b3JkIHBhcmFtZXRlcnMgY29uZmlndXJhdGlvbiBmb3IgYSBUZXh0UGFzc3dvcmRGaWVsZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0UGFzc3dvcmRGaWVsZFBhc3N3b3JkUGFyYW1ldGVycyBleHRlbmRzIFBhcnRpYWw8UGljazxUZXh0RmllbGRDb25maWcsICdtYXhMZW5ndGgnIHwgJ21pbkxlbmd0aCcgfCAncGF0dGVybic+PiB7IH07XG5cbi8qKlxuICogdGV4dFBhc3N3b3JkRmllbGQoKSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRQYXNzd29yZEZpZWxkQ29uZmlnIGV4dGVuZHMgT21pdDxUZXh0RmllbGRDb25maWcsICdpbnB1dFR5cGUnIHwgJ2tleSc+LCBQYXJ0aWFsPFBpY2s8VGV4dEZpZWxkQ29uZmlnLCAna2V5Jz4+IHsgfVxuXG4vKipcbiAqIENvbmZpZ3VyZWQgc2ltcGxlIHRleHQgcGFzc3dvcmQgZmllbGQuXG4gKiBcbiAqIEBwYXJhbSBjb25maWcgXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHRQYXNzd29yZEZpZWxkKGNvbmZpZz86IFRleHRQYXNzd29yZEZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xuICByZXR1cm4gdGV4dEZpZWxkKHtcbiAgICBrZXk6ICdwYXNzd29yZCcsXG4gICAgLi4uY29uZmlnLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdQYXNzd29yZCcsXG4gICAgaW5wdXRUeXBlOiAncGFzc3dvcmQnLFxuICAgIHJlcXVpcmVkOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZWQgdmVyaWZ5IGZpZWxkIGZvciBhIHBhc3N3b3JkLlxuICogQHBhcmFtIGNvbmZpZyBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dFZlcmlmeVBhc3N3b3JkRmllbGQoY29uZmlnPzogVGV4dFBhc3N3b3JkRmllbGRDb25maWcpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gIHJldHVybiB0ZXh0UGFzc3dvcmRGaWVsZCh7XG4gICAga2V5OiAndmVyaWZ5UGFzc3dvcmQnLFxuICAgIGxhYmVsOiAnVmVyaWZ5IFBhc3N3b3JkJyxcbiAgICAuLi5jb25maWcsXG4gICAgcmVxdWlyZWQ6IHRydWVcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFBhc3N3b3JkV2l0aFZlcmlmeUZpZWxkQ29uZmlnIHtcbiAgcGFzc3dvcmQ/OiBUZXh0UGFzc3dvcmRGaWVsZENvbmZpZztcbiAgdmVyaWZ5UGFzc3dvcmQ/OiBUZXh0UGFzc3dvcmRGaWVsZENvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRleHRQYXNzd29yZFdpdGhWZXJpZnlGaWVsZEdyb3VwKGNvbmZpZzogVGV4dFBhc3N3b3JkV2l0aFZlcmlmeUZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xuICBjb25zdCBwYXNzd29yZEZpZWxkQ29uZmlnID0gdGV4dFBhc3N3b3JkRmllbGQoY29uZmlnLnBhc3N3b3JkKTtcbiAgY29uc3QgdmVyaWZ5UGFzc3dvcmRGaWVsZEtleSA9IGNvbmZpZy52ZXJpZnlQYXNzd29yZD8ua2V5ID8/IGB2ZXJpZnkke2NhcGl0YWxpemVGaXJzdExldHRlcihTdHJpbmcocGFzc3dvcmRGaWVsZENvbmZpZy5rZXkpKX1gO1xuICBjb25zdCB2ZXJpZnlQYXNzd29yZEZpZWxkID0gdGV4dFZlcmlmeVBhc3N3b3JkRmllbGQoe1xuICAgIC4uLmNvbmZpZy5wYXNzd29yZCxcbiAgICAuLi5jb25maWcudmVyaWZ5UGFzc3dvcmQsXG4gICAgbGFiZWw6IChjb25maWcudmVyaWZ5UGFzc3dvcmQ/LmxhYmVsKSA/PyBgVmVyaWZ5ICR7cGFzc3dvcmRGaWVsZENvbmZpZy50ZW1wbGF0ZU9wdGlvbnM/LmxhYmVsfWAsXG4gICAga2V5OiB2ZXJpZnlQYXNzd29yZEZpZWxkS2V5XG4gIH0pO1xuXG4gIGNvbnN0IHZhbGlkYXRvcnM6IGFueSA9IHtcbiAgICB2YWxpZGF0aW9uOiBbe1xuICAgICAgZXJyb3JQYXRoOiB2ZXJpZnlQYXNzd29yZEZpZWxkS2V5LFxuICAgICAgZXhwcmVzc2lvbjogZmllbGRWYWx1ZXNBcmVFcXVhbFZhbGlkYXRvcih7IGtleXNGaWx0ZXI6IFtwYXNzd29yZEZpZWxkQ29uZmlnLmtleSwgdmVyaWZ5UGFzc3dvcmRGaWVsZC5rZXldIGFzIHN0cmluZ1tdLCBtZXNzYWdlOiAnVGhlIHBhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyB9KVxuICAgIH1dXG4gIH07XG5cbiAgY29uc3QgZ3JvdXBGaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgdmFsaWRhdG9ycyxcbiAgICBmaWVsZEdyb3VwOiBbcGFzc3dvcmRGaWVsZENvbmZpZywgdmVyaWZ5UGFzc3dvcmRGaWVsZF1cbiAgfTtcblxuICByZXR1cm4gZ3JvdXBGaWVsZENvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VybmFtZUxvZ2luRmllbGRVc2VybmFtZUNvbmZpZyB7XG4gIGVtYWlsPzogT21pdDxFbWFpbEZpZWxkQ29uZmlnLCAna2V5Jz47XG4gIHVzZXJuYW1lPzogT21pdDxUZXh0RmllbGRDb25maWcsICdrZXknPjtcbn07XG5cbi8qKlxuICogdXNlcm5hbWVQYXNzd29yZExvZ2luRmllbGRzKCkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VybmFtZUxvZ2luRmllbGRzQ29uZmlnIHtcbiAgdXNlcm5hbWU6ICdlbWFpbCcgfCAndXNlcm5hbWUnIHwgVXNlcm5hbWVMb2dpbkZpZWxkVXNlcm5hbWVDb25maWc7XG4gIHBhc3N3b3JkPzogVGV4dFBhc3N3b3JkRmllbGRDb25maWc7XG4gIHZlcmlmeVBhc3N3b3JkPzogTWF5YmU8Ym9vbGVhbiB8IFRleHRQYXNzd29yZEZpZWxkQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBWYWx1ZSB0eXBlIGV4cG9ydGVkIGJ5IHVzZXJuYW1lTG9naW5GaWVsZHMoKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRVc2VybmFtZUxvZ2luRmllbGRzVmFsdWUge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICB2ZXJpZnlQYXNzd29yZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUZW1wbGF0ZSBmb3IgbG9naW4gZmllbGQgdGhhdCB0YWtlcyBpbiBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAqIFxuICogQHBhcmFtIHBhcmFtMCBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlcm5hbWVQYXNzd29yZExvZ2luRmllbGRzKHsgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJpZnlQYXNzd29yZCB9OiBVc2VybmFtZUxvZ2luRmllbGRzQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gIGxldCB1c2VybmFtZUZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZztcbiAgbGV0IHVzZXJuYW1lRmllbGRDb25maWc6IFVzZXJuYW1lTG9naW5GaWVsZFVzZXJuYW1lQ29uZmlnID0gdXNlcm5hbWUgYXMgVXNlcm5hbWVMb2dpbkZpZWxkVXNlcm5hbWVDb25maWc7XG4gIGNvbnN0IGRlZmF1bHRVc2VybmFtZUZpZWxkQ29uZmlnOiBhbnkgPSB7IGtleTogJ3VzZXJuYW1lJywgcmVxdWlyZWQ6IHRydWUgfTtcblxuICBpZiAodHlwZW9mIHVzZXJuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGlmICh1c2VybmFtZSA9PT0gJ2VtYWlsJykge1xuICAgICAgdXNlcm5hbWVGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgZW1haWw6IGRlZmF1bHRVc2VybmFtZUZpZWxkQ29uZmlnXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB1c2VybmFtZUZpZWxkQ29uZmlnID0ge1xuICAgICAgICB1c2VybmFtZTogZGVmYXVsdFVzZXJuYW1lRmllbGRDb25maWdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZXJuYW1lRmllbGRDb25maWcuZW1haWwpIHtcbiAgICB1c2VybmFtZUZpZWxkID0gZW1haWxGaWVsZCh7IC4uLnVzZXJuYW1lRmllbGRDb25maWcudXNlcm5hbWUsIC4uLmRlZmF1bHRVc2VybmFtZUZpZWxkQ29uZmlnIH0pO1xuICB9IGVsc2Uge1xuICAgIHVzZXJuYW1lRmllbGQgPSB0ZXh0RmllbGQoeyAuLi51c2VybmFtZUZpZWxkQ29uZmlnLnVzZXJuYW1lLCAuLi5kZWZhdWx0VXNlcm5hbWVGaWVsZENvbmZpZyB9KTtcbiAgfVxuXG4gIGNvbnN0IHBhc3N3b3JkRmllbGQgPSAodmVyaWZ5UGFzc3dvcmQpID8gKHRleHRQYXNzd29yZFdpdGhWZXJpZnlGaWVsZEdyb3VwKHsgcGFzc3dvcmQsIHZlcmlmeVBhc3N3b3JkOiAodmVyaWZ5UGFzc3dvcmQgPT09IHRydWUpID8gdW5kZWZpbmVkIDogdmVyaWZ5UGFzc3dvcmQgfSkpIDogdGV4dFBhc3N3b3JkRmllbGQocGFzc3dvcmQpO1xuXG4gIHJldHVybiBbXG4gICAgdXNlcm5hbWVGaWVsZCxcbiAgICBwYXNzd29yZEZpZWxkXG4gIF07XG59XG4iXX0=
|
|
@@ -4,12 +4,12 @@ import { DbxFormSpacerComponent } from './form.spacer.component';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class DbxFormLayoutModule {
|
|
6
6
|
}
|
|
7
|
-
DbxFormLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2
|
|
8
|
-
DbxFormLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2
|
|
9
|
-
DbxFormLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2
|
|
7
|
+
DbxFormLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
8
|
+
DbxFormLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, declarations: [DbxFormSpacerComponent], imports: [CommonModule], exports: [DbxFormSpacerComponent] });
|
|
9
|
+
DbxFormLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, imports: [[
|
|
10
10
|
CommonModule
|
|
11
11
|
]] });
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, decorators: [{
|
|
13
13
|
type: NgModule,
|
|
14
14
|
args: [{
|
|
15
15
|
imports: [
|
|
@@ -5,9 +5,9 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
*/
|
|
6
6
|
export class DbxFormSpacerComponent {
|
|
7
7
|
}
|
|
8
|
-
DbxFormSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2
|
|
9
|
-
DbxFormSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
8
|
+
DbxFormSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
DbxFormSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: DbxFormSpacerComponent, selector: "dbx-form-spacer", ngImport: i0, template: `<div class="dbx-form-spacer"></div>`, isInline: true });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormSpacerComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
12
|
args: [{
|
|
13
13
|
selector: 'dbx-form-spacer',
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { first, switchMap } from 'rxjs/operators';
|
|
2
|
+
import { map, of, catchError } from 'rxjs';
|
|
3
|
+
import { asyncPusherCache } from '@dereekb/rxjs';
|
|
4
|
+
export const FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY = 'fieldValueIsAvailable';
|
|
5
|
+
export const FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY = 'fieldValueIsAvailableError';
|
|
6
|
+
/**
|
|
7
|
+
* Validator for validating all values within an object.
|
|
8
|
+
*
|
|
9
|
+
* This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.
|
|
10
|
+
*
|
|
11
|
+
* @param config
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
export function fieldValueIsAvailableValidator(config) {
|
|
15
|
+
const { throttle = 400, checkValueIsAvailable, message = 'This value is not available.' } = config;
|
|
16
|
+
const pusher = asyncPusherCache({
|
|
17
|
+
throttle
|
|
18
|
+
});
|
|
19
|
+
return (control) => pusher(control.valueChanges)(control.value).pipe(switchMap((x) => checkValueIsAvailable(x)), map((isAvailable) => {
|
|
20
|
+
if (isAvailable) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return {
|
|
25
|
+
[FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY]: { message }
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}), catchError(() => of({
|
|
29
|
+
[FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY]: { message: 'An error occured.' }
|
|
30
|
+
})), first());
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi92YWxpZGF0b3IvYXZhaWxhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyx1QkFBdUIsQ0FBQztBQUMvRSxNQUFNLENBQUMsTUFBTSw2Q0FBNkMsR0FBRyw0QkFBNEIsQ0FBQztBQXlCMUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBSSxNQUErQztJQUMvRixNQUFNLEVBQ0osUUFBUSxHQUFHLEdBQUcsRUFDZCxxQkFBcUIsRUFDckIsT0FBTyxHQUFHLDhCQUE4QixFQUN6QyxHQUFHLE1BQU0sQ0FBQztJQUVYLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFJO1FBQ2pDLFFBQVE7S0FDVCxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsT0FBd0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBVSxDQUFDLENBQUMsSUFBSSxDQUN4RixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ2xCLElBQUksV0FBVyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTztnQkFDTCxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7YUFDdkQsQ0FBQztTQUNIO0lBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsQixDQUFDLDZDQUE2QyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7S0FDbEYsQ0FBQyxDQUFDLEVBQ0gsS0FBSyxFQUFFLENBQ1IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBvZiwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBhc3luY1B1c2hlckNhY2hlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9WQUxVRV9JU19BVkFJTEFCTEVfVkFMSURBVElPTl9LRVkgPSAnZmllbGRWYWx1ZUlzQXZhaWxhYmxlJztcbmV4cG9ydCBjb25zdCBGSUVMRF9WQUxVRV9JU19BVkFJTEFCTEVfRVJST1JfVkFMSURBVElPTl9LRVkgPSAnZmllbGRWYWx1ZUlzQXZhaWxhYmxlRXJyb3InO1xuXG5leHBvcnQgdHlwZSBGaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3JGdW5jdGlvbjxUPiA9ICh2YWx1ZTogVCkgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3JDb25maWc8VD4ge1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGluIGJldHdlZW4gdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHRocm90dGxlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBjaGVja3Mgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIGlzIGN1cnJlbnRseSBhdmFpbGFibGUuXG4gICAqIFxuICAgKiBAcGFyYW0gdmFsdWUgXG4gICAqL1xuICByZWFkb25seSBjaGVja1ZhbHVlSXNBdmFpbGFibGU6IEZpZWxkVmFsdWVJc0F2YWlsYWJsZVZhbGlkYXRvckZ1bmN0aW9uPFQ+O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0b3IuXG4gICAqL1xuICBtZXNzYWdlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogVmFsaWRhdG9yIGZvciB2YWxpZGF0aW5nIGFsbCB2YWx1ZXMgd2l0aGluIGFuIG9iamVjdC4gXG4gKiBcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciB2YWxpZGF0aW5nIGEgY29udHJvbCBncm91cCB3aGVyZSB0d28gb3IgbW9yZSB2YWx1ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHRoZSBzYW1lLCBzdWNoIGFzIGEgcGFzc3dvcmQgYW5kIGEgcGFzc3dvcmQgdmVyaWZpY2F0aW9uIGZpZWxkLlxuICogXG4gKiBAcGFyYW0gY29uZmlnIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3I8VD4oY29uZmlnOiBGaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3JDb25maWc8VD4pOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgY29uc3Qge1xuICAgIHRocm90dGxlID0gNDAwLFxuICAgIGNoZWNrVmFsdWVJc0F2YWlsYWJsZSxcbiAgICBtZXNzYWdlID0gJ1RoaXMgdmFsdWUgaXMgbm90IGF2YWlsYWJsZS4nXG4gIH0gPSBjb25maWc7XG5cbiAgY29uc3QgcHVzaGVyID0gYXN5bmNQdXNoZXJDYWNoZTxUPih7XG4gICAgdGhyb3R0bGVcbiAgfSk7XG5cbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHB1c2hlcihjb250cm9sLnZhbHVlQ2hhbmdlcykoY29udHJvbC52YWx1ZSBhcyBUKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gY2hlY2tWYWx1ZUlzQXZhaWxhYmxlKHgpKSxcbiAgICBtYXAoKGlzQXZhaWxhYmxlKSA9PiB7XG4gICAgICBpZiAoaXNBdmFpbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtGSUVMRF9WQUxVRV9JU19BVkFJTEFCTEVfVkFMSURBVElPTl9LRVldOiB7IG1lc3NhZ2UgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pLFxuICAgIGNhdGNoRXJyb3IoKCkgPT4gb2Yoe1xuICAgICAgW0ZJRUxEX1ZBTFVFX0lTX0FWQUlMQUJMRV9FUlJPUl9WQUxJREFUSU9OX0tFWV06IHsgbWVzc2FnZTogJ0FuIGVycm9yIG9jY3VyZWQuJyB9XG4gICAgfSkpLFxuICAgIGZpcnN0KClcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { allObjectsAreEqual, KeyValueTypleValueFilter, valuesFromPOJO } from "@dereekb/util";
|
|
2
|
+
export const FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY = 'fieldValuesAreEqual';
|
|
3
|
+
/**
|
|
4
|
+
* Validator for validating all values within an object.
|
|
5
|
+
*
|
|
6
|
+
* This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.
|
|
7
|
+
*
|
|
8
|
+
* @param config
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export function fieldValuesAreEqualValidator(config = {}) {
|
|
12
|
+
const { keysFilter, valuesFilter: inputValuesFilter, isEqual = ((a, b) => a === b), message = 'Field values are not equal.' } = config;
|
|
13
|
+
const valuesFilter = inputValuesFilter ?? {
|
|
14
|
+
valueFilter: KeyValueTypleValueFilter.NONE,
|
|
15
|
+
keysFilter
|
|
16
|
+
};
|
|
17
|
+
return (control) => {
|
|
18
|
+
const object = control.value;
|
|
19
|
+
const values = valuesFromPOJO(object, valuesFilter);
|
|
20
|
+
const isValid = allObjectsAreEqual(values, isEqual);
|
|
21
|
+
if (isValid) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return {
|
|
26
|
+
[FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY]: { message }
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL3ZhbGlkYXRvci9maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXVCLGtCQUFrQixFQUFtQix3QkFBd0IsRUFBYSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUksTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcscUJBQXFCLENBQUM7QUE0QjNFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQXlCLFNBQWdELEVBQUU7SUFDckgsTUFBTSxFQUNKLFVBQVUsRUFDVixZQUFZLEVBQUUsaUJBQWlCLEVBQy9CLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3QixPQUFPLEdBQUcsNkJBQTZCLEVBQ3hDLEdBQUcsTUFBTSxDQUFDO0lBRVgsTUFBTSxZQUFZLEdBQWdDLGlCQUFpQixJQUFJO1FBQ3JFLFdBQVcsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJO1FBQzFDLFVBQVU7S0FDWCxDQUFDO0lBRUYsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtRQUNsQyxNQUFNLE1BQU0sR0FBaUIsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBUSxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFO2FBQ3JELENBQUM7U0FDSDtJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZVR1cGxlRmlsdGVyLCBhbGxPYmplY3RzQXJlRXF1YWwsIElzRXF1YWxGdW5jdGlvbiwgS2V5VmFsdWVUeXBsZVZhbHVlRmlsdGVyLCBPYmplY3RNYXAsIHZhbHVlc0Zyb21QT0pPIH0gZnJvbSBcIkBkZXJlZWtiL3V0aWxcIjtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX1ZBTFVFU19BUkVfRVFVQUxfVkFMSURBVElPTl9LRVkgPSAnZmllbGRWYWx1ZXNBcmVFcXVhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRWYWx1ZXNBcmVFcXVhbFZhbGlkYXRvckNvbmZpZzxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG5cbiAgLyoqXG4gICAqIEtleXMgb2YgdGhlIHZhbHVlIHRvIG1hdGNoIG9uLiBcbiAgICogXG4gICAqIElmIG5vbmUgYXJlIGRlZmluZWQsIHRoZW4gYWxsIGZpZWxkcyBmcm9tIHRoZSBjb250cm9sIGFyZSBtYXRjaGVkLlxuICAgKi9cbiAga2V5c0ZpbHRlcj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdWxsIGZpbHRlciB0byB1c2UsIGlmIGRlZmluZWQuXG4gICAqL1xuICB2YWx1ZXNGaWx0ZXI/OiBLZXlWYWx1ZVR1cGxlRmlsdGVyPFQsIGFueT47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVxdWl2YWxlbmNlIGNvbXBhcmF0b3IuXG4gICAqL1xuICBpc0VxdWFsPzogSXNFcXVhbEZ1bmN0aW9uPFQ+O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0b3IuXG4gICAqL1xuICBtZXNzYWdlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogVmFsaWRhdG9yIGZvciB2YWxpZGF0aW5nIGFsbCB2YWx1ZXMgd2l0aGluIGFuIG9iamVjdC4gXG4gKiBcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciB2YWxpZGF0aW5nIGEgY29udHJvbCBncm91cCB3aGVyZSB0d28gb3IgbW9yZSB2YWx1ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHRoZSBzYW1lLCBzdWNoIGFzIGEgcGFzc3dvcmQgYW5kIGEgcGFzc3dvcmQgdmVyaWZpY2F0aW9uIGZpZWxkLlxuICogXG4gKiBAcGFyYW0gY29uZmlnIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZFZhbHVlc0FyZUVxdWFsVmFsaWRhdG9yPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+KGNvbmZpZzogRmllbGRWYWx1ZXNBcmVFcXVhbFZhbGlkYXRvckNvbmZpZzxUPiA9IHt9KTogVmFsaWRhdG9yRm4ge1xuICBjb25zdCB7XG4gICAga2V5c0ZpbHRlcixcbiAgICB2YWx1ZXNGaWx0ZXI6IGlucHV0VmFsdWVzRmlsdGVyLFxuICAgIGlzRXF1YWwgPSAoKGEsIGIpID0+IGEgPT09IGIpLFxuICAgIG1lc3NhZ2UgPSAnRmllbGQgdmFsdWVzIGFyZSBub3QgZXF1YWwuJ1xuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHZhbHVlc0ZpbHRlcjogS2V5VmFsdWVUdXBsZUZpbHRlcjxULCBhbnk+ID0gaW5wdXRWYWx1ZXNGaWx0ZXIgPz8ge1xuICAgIHZhbHVlRmlsdGVyOiBLZXlWYWx1ZVR5cGxlVmFsdWVGaWx0ZXIuTk9ORSwgLy8ga2VlcCBhbGwgdmFsdWVzLiBOdWxsL3VuZGVmaW5lZCBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuICAgIGtleXNGaWx0ZXJcbiAgfTtcblxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgIGNvbnN0IG9iamVjdDogT2JqZWN0TWFwPFQ+ID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZXM6IFRbXSA9IHZhbHVlc0Zyb21QT0pPKG9iamVjdCwgdmFsdWVzRmlsdGVyKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gYWxsT2JqZWN0c0FyZUVxdWFsKHZhbHVlcywgaXNFcXVhbCk7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtGSUVMRF9WQUxVRVNfQVJFX0VRVUFMX1ZBTElEQVRJT05fS0VZXTogeyBtZXNzYWdlIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuIl19
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './boolean';
|
|
2
2
|
export * from './email';
|
|
3
|
+
export * from './field';
|
|
3
4
|
export * from './number';
|
|
4
|
-
|
|
5
|
+
export * from './available';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9vbGVhbic7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmllbGQnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXInO1xuZXhwb3J0ICogZnJvbSAnLi9hdmFpbGFibGUnO1xuIl19
|