@abp/ng.theme.shared 5.0.1 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/abp-ng.theme.shared.d.ts +5 -5
- package/bundles/abp-ng.theme.shared-extensions.umd.js +1749 -1748
- package/bundles/abp-ng.theme.shared-extensions.umd.js.map +1 -1
- package/bundles/abp-ng.theme.shared-testing.umd.js +41 -41
- package/bundles/abp-ng.theme.shared-testing.umd.js.map +1 -1
- package/bundles/abp-ng.theme.shared.umd.js +2316 -2316
- package/bundles/abp-ng.theme.shared.umd.js.map +1 -1
- package/esm2015/abp-ng.theme.shared.js +4 -4
- package/esm2015/extensions/abp-ng.theme.shared-extensions.js +4 -4
- package/esm2015/extensions/lib/adapters/date-time.adapter.js +34 -34
- package/esm2015/extensions/lib/adapters/date.adapter.js +41 -41
- package/esm2015/extensions/lib/adapters/time.adapter.js +36 -36
- package/esm2015/extensions/lib/components/abstract-actions/abstract-actions.component.js +25 -25
- package/esm2015/extensions/lib/components/date-time-picker/date-time-picker.component.js +109 -109
- package/esm2015/extensions/lib/components/extensible-form/extensible-form-prop.component.js +164 -164
- package/esm2015/extensions/lib/components/extensible-form/extensible-form.component.js +70 -70
- package/esm2015/extensions/lib/components/extensible-table/extensible-table.component.js +134 -134
- package/esm2015/extensions/lib/components/grid-actions/grid-actions.component.js +45 -45
- package/esm2015/extensions/lib/components/page-toolbar/page-toolbar.component.js +46 -46
- package/esm2015/extensions/lib/constants/extra-properties.js +2 -2
- package/esm2015/extensions/lib/directives/disabled.directive.js +29 -29
- package/esm2015/extensions/lib/directives/prop-data.directive.js +41 -41
- package/esm2015/extensions/lib/enums/props.enum.js +2 -2
- package/esm2015/extensions/lib/models/actions.js +46 -46
- package/esm2015/extensions/lib/models/entity-actions.js +29 -29
- package/esm2015/extensions/lib/models/entity-props.js +36 -34
- package/esm2015/extensions/lib/models/form-props.js +52 -52
- package/esm2015/extensions/lib/models/internal/object-extensions.js +2 -2
- package/esm2015/extensions/lib/models/object-extensions.js +3 -3
- package/esm2015/extensions/lib/models/props.js +50 -50
- package/esm2015/extensions/lib/models/toolbar-actions.js +41 -41
- package/esm2015/extensions/lib/services/extensions.service.js +24 -24
- package/esm2015/extensions/lib/tokens/extensions.token.js +7 -7
- package/esm2015/extensions/lib/ui-extensions.module.js +92 -92
- package/esm2015/extensions/lib/utils/actions.util.js +9 -9
- package/esm2015/extensions/lib/utils/enum.util.js +42 -42
- package/esm2015/extensions/lib/utils/factory.util.js +4 -4
- package/esm2015/extensions/lib/utils/form-props.util.js +51 -51
- package/esm2015/extensions/lib/utils/localization.util.js +13 -13
- package/esm2015/extensions/lib/utils/props.util.js +14 -14
- package/esm2015/extensions/lib/utils/state.util.js +124 -124
- package/esm2015/extensions/lib/utils/typeahead.util.js +52 -52
- package/esm2015/extensions/lib/utils/validation.util.js +11 -11
- package/esm2015/extensions/public-api.js +28 -28
- package/esm2015/lib/animations/bounce.animations.js +17 -17
- package/esm2015/lib/animations/collapse.animations.js +50 -50
- package/esm2015/lib/animations/fade.animations.js +38 -38
- package/esm2015/lib/animations/index.js +7 -7
- package/esm2015/lib/animations/modal.animations.js +11 -11
- package/esm2015/lib/animations/slide.animations.js +8 -8
- package/esm2015/lib/animations/toast.animations.js +13 -13
- package/esm2015/lib/components/breadcrumb/breadcrumb.component.js +49 -49
- package/esm2015/lib/components/breadcrumb-items/breadcrumb-items.component.js +22 -22
- package/esm2015/lib/components/button/button.component.js +98 -98
- package/esm2015/lib/components/confirmation/confirmation.component.js +40 -40
- package/esm2015/lib/components/http-error-wrapper/http-error-wrapper.component.js +65 -65
- package/esm2015/lib/components/index.js +13 -13
- package/esm2015/lib/components/loader-bar/loader-bar.component.js +126 -126
- package/esm2015/lib/components/loading/loading.component.js +47 -47
- package/esm2015/lib/components/modal/modal-close.directive.js +28 -28
- package/esm2015/lib/components/modal/modal-ref.service.js +26 -26
- package/esm2015/lib/components/modal/modal.component.js +188 -188
- package/esm2015/lib/components/toast/toast.component.js +61 -61
- package/esm2015/lib/components/toast-container/toast-container.component.js +49 -49
- package/esm2015/lib/constants/styles.js +182 -182
- package/esm2015/lib/constants/validation.js +15 -15
- package/esm2015/lib/directives/ellipsis.directive.js +63 -63
- package/esm2015/lib/directives/index.js +5 -5
- package/esm2015/lib/directives/loading.directive.js +90 -90
- package/esm2015/lib/directives/ngx-datatable-default.directive.js +75 -75
- package/esm2015/lib/directives/ngx-datatable-list.directive.js +94 -94
- package/esm2015/lib/enums/index.js +2 -2
- package/esm2015/lib/enums/route-names.js +2 -2
- package/esm2015/lib/handlers/document-dir.handler.js +33 -33
- package/esm2015/lib/handlers/error.handler.js +292 -292
- package/esm2015/lib/handlers/index.js +3 -3
- package/esm2015/lib/models/common.js +2 -2
- package/esm2015/lib/models/confirmation.js +10 -10
- package/esm2015/lib/models/index.js +6 -6
- package/esm2015/lib/models/nav-item.js +7 -7
- package/esm2015/lib/models/statistics.js +2 -2
- package/esm2015/lib/models/toaster.js +2 -2
- package/esm2015/lib/providers/index.js +3 -3
- package/esm2015/lib/providers/ng-bootstrap-config.provider.js +17 -17
- package/esm2015/lib/providers/route.provider.js +18 -18
- package/esm2015/lib/services/confirmation.service.js +68 -68
- package/esm2015/lib/services/index.js +5 -5
- package/esm2015/lib/services/nav-items.service.js +51 -51
- package/esm2015/lib/services/page-alert.service.js +26 -26
- package/esm2015/lib/services/toaster.service.js +103 -103
- package/esm2015/lib/theme-shared.module.js +165 -165
- package/esm2015/lib/tokens/append-content.token.js +11 -11
- package/esm2015/lib/tokens/http-error.token.js +10 -10
- package/esm2015/lib/tokens/index.js +5 -5
- package/esm2015/lib/tokens/ngx-datatable-messages.token.js +8 -8
- package/esm2015/lib/tokens/suppress-unsaved-changes-warning.token.js +3 -3
- package/esm2015/lib/utils/date-parser-formatter.js +59 -59
- package/esm2015/lib/utils/index.js +3 -3
- package/esm2015/lib/utils/validation-utils.js +33 -33
- package/esm2015/public-api.js +16 -16
- package/esm2015/testing/abp-ng.theme.shared-testing.js +4 -4
- package/esm2015/testing/lib/models/config.js +2 -2
- package/esm2015/testing/lib/models/index.js +2 -2
- package/esm2015/testing/lib/theme-shared-testing.module.js +43 -43
- package/esm2015/testing/public-api.js +4 -4
- package/extensions/abp-ng.theme.shared-extensions.d.ts +5 -5
- package/extensions/lib/adapters/date-time.adapter.d.ts +11 -11
- package/extensions/lib/adapters/date.adapter.d.ts +9 -9
- package/extensions/lib/adapters/time.adapter.d.ts +8 -8
- package/extensions/lib/components/abstract-actions/abstract-actions.component.d.ts +14 -14
- package/extensions/lib/components/date-time-picker/date-time-picker.component.d.ts +16 -16
- package/extensions/lib/components/extensible-form/extensible-form-prop.component.d.ts +37 -37
- package/extensions/lib/components/extensible-form/extensible-form.component.d.ts +24 -24
- package/extensions/lib/components/extensible-table/extensible-table.component.d.ts +35 -35
- package/extensions/lib/components/grid-actions/grid-actions.component.d.ts +13 -13
- package/extensions/lib/components/page-toolbar/page-toolbar.component.d.ts +12 -12
- package/extensions/lib/constants/extra-properties.d.ts +1 -1
- package/extensions/lib/directives/disabled.directive.d.ts +11 -11
- package/extensions/lib/directives/prop-data.directive.d.ts +19 -19
- package/extensions/lib/enums/props.enum.d.ts +15 -15
- package/extensions/lib/models/actions.d.ts +35 -35
- package/extensions/lib/models/entity-actions.d.ts +22 -22
- package/extensions/lib/models/entity-props.d.ts +29 -29
- package/extensions/lib/models/form-props.d.ts +42 -42
- package/extensions/lib/models/internal/object-extensions.d.ts +85 -85
- package/extensions/lib/models/object-extensions.d.ts +2 -2
- package/extensions/lib/models/props.d.ts +39 -39
- package/extensions/lib/models/toolbar-actions.d.ts +29 -29
- package/extensions/lib/services/extensions.service.d.ts +14 -14
- package/extensions/lib/tokens/extensions.token.d.ts +14 -14
- package/extensions/lib/ui-extensions.module.d.ts +23 -23
- package/extensions/lib/utils/actions.util.d.ts +7 -7
- package/extensions/lib/utils/enum.util.d.ts +7 -7
- package/extensions/lib/utils/factory.util.d.ts +1 -1
- package/extensions/lib/utils/form-props.util.d.ts +3 -3
- package/extensions/lib/utils/localization.util.d.ts +3 -3
- package/extensions/lib/utils/props.util.d.ts +8 -8
- package/extensions/lib/utils/state.util.d.ts +5 -5
- package/extensions/lib/utils/typeahead.util.d.ts +11 -11
- package/extensions/lib/utils/validation.util.d.ts +3 -3
- package/extensions/public-api.d.ts +27 -27
- package/fesm2015/abp-ng.theme.shared-extensions.js +1263 -1262
- package/fesm2015/abp-ng.theme.shared-extensions.js.map +1 -1
- package/fesm2015/abp-ng.theme.shared-testing.js +37 -37
- package/fesm2015/abp-ng.theme.shared-testing.js.map +1 -1
- package/fesm2015/abp-ng.theme.shared.js +2117 -2117
- package/fesm2015/abp-ng.theme.shared.js.map +1 -1
- package/lib/animations/bounce.animations.d.ts +1 -1
- package/lib/animations/collapse.animations.d.ts +9 -9
- package/lib/animations/fade.animations.d.ts +10 -10
- package/lib/animations/index.d.ts +6 -6
- package/lib/animations/modal.animations.d.ts +2 -2
- package/lib/animations/slide.animations.d.ts +1 -1
- package/lib/animations/toast.animations.d.ts +1 -1
- package/lib/components/breadcrumb/breadcrumb.component.d.ts +16 -16
- package/lib/components/breadcrumb-items/breadcrumb-items.component.d.ts +7 -7
- package/lib/components/button/button.component.d.ts +25 -25
- package/lib/components/confirmation/confirmation.component.d.ts +14 -14
- package/lib/components/http-error-wrapper/http-error-wrapper.component.d.ts +27 -27
- package/lib/components/index.d.ts +12 -12
- package/lib/components/loader-bar/loader-bar.component.d.ts +33 -33
- package/lib/components/loading/loading.component.d.ts +5 -5
- package/lib/components/modal/modal-close.directive.d.ts +9 -9
- package/lib/components/modal/modal-ref.service.d.ts +13 -13
- package/lib/components/modal/modal.component.d.ts +50 -50
- package/lib/components/toast/toast.component.d.ts +14 -14
- package/lib/components/toast-container/toast-container.component.d.ts +18 -18
- package/lib/constants/styles.d.ts +2 -2
- package/lib/constants/validation.d.ts +14 -14
- package/lib/directives/ellipsis.directive.d.ts +21 -21
- package/lib/directives/index.d.ts +4 -4
- package/lib/directives/loading.directive.d.ts +25 -25
- package/lib/directives/ngx-datatable-default.directive.d.ts +30 -30
- package/lib/directives/ngx-datatable-list.directive.d.ts +24 -24
- package/lib/enums/index.d.ts +1 -1
- package/lib/enums/route-names.d.ts +3 -3
- package/lib/handlers/document-dir.handler.d.ts +13 -13
- package/lib/handlers/error.handler.d.ts +82 -82
- package/lib/handlers/index.d.ts +2 -2
- package/lib/models/common.d.ts +19 -19
- package/lib/models/confirmation.d.ts +25 -25
- package/lib/models/index.d.ts +5 -5
- package/lib/models/nav-item.d.ts +11 -11
- package/lib/models/statistics.d.ts +12 -12
- package/lib/models/toaster.d.ts +30 -30
- package/lib/providers/index.d.ts +2 -2
- package/lib/providers/ng-bootstrap-config.provider.d.ts +8 -8
- package/lib/providers/route.provider.d.ts +8 -8
- package/lib/services/confirmation.service.d.ts +21 -21
- package/lib/services/index.d.ts +4 -4
- package/lib/services/nav-items.service.d.ts +13 -13
- package/lib/services/page-alert.service.d.ts +18 -18
- package/lib/services/toaster.service.d.ts +60 -60
- package/lib/theme-shared.module.d.ts +33 -33
- package/lib/tokens/append-content.token.d.ts +2 -2
- package/lib/tokens/http-error.token.d.ts +5 -5
- package/lib/tokens/index.d.ts +4 -4
- package/lib/tokens/ngx-datatable-messages.token.d.ts +12 -12
- package/lib/tokens/suppress-unsaved-changes-warning.token.d.ts +2 -2
- package/lib/utils/date-parser-formatter.d.ts +12 -12
- package/lib/utils/index.d.ts +2 -2
- package/lib/utils/validation-utils.d.ts +3 -3
- package/package.json +2 -2
- package/public-api.d.ts +12 -12
- package/testing/abp-ng.theme.shared-testing.d.ts +5 -5
- package/testing/lib/models/config.d.ts +4 -4
- package/testing/lib/models/index.d.ts +1 -1
- package/testing/lib/theme-shared-testing.module.d.ts +14 -14
- package/testing/public-api.d.ts +3 -3
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
import { pipe, zip } from 'rxjs';
|
|
2
|
-
import { filter, map, switchMap, take } from 'rxjs/operators';
|
|
3
|
-
import { EntityProp } from '../models/entity-props';
|
|
4
|
-
import { FormProp } from '../models/form-props';
|
|
5
|
-
import { createEnum, createEnumOptions, createEnumValueResolver } from './enum.util';
|
|
6
|
-
import { createDisplayNameLocalizationPipeKeyGenerator } from './localization.util';
|
|
7
|
-
import { createExtraPropertyValueResolver } from './props.util';
|
|
8
|
-
import { createTypeaheadDisplayNameGenerator, createTypeaheadOptions, getTypeaheadType, hasTypeaheadTextSuffix, } from './typeahead.util';
|
|
9
|
-
import { getValidatorsFromProperty } from './validation.util';
|
|
10
|
-
function selectObjectExtensions(configState) {
|
|
11
|
-
return configState.getOne$('objectExtensions');
|
|
12
|
-
}
|
|
13
|
-
function selectLocalization(configState) {
|
|
14
|
-
return configState.getOne$('localization');
|
|
15
|
-
}
|
|
16
|
-
function selectEnums(configState) {
|
|
17
|
-
return selectObjectExtensions(configState).pipe(map((extensions) => Object.keys(extensions.enums).reduce((acc, key) => {
|
|
18
|
-
const { fields, localizationResource } = extensions.enums[key];
|
|
19
|
-
acc[key] = {
|
|
20
|
-
fields,
|
|
21
|
-
localizationResource,
|
|
22
|
-
transformed: createEnum(fields),
|
|
23
|
-
};
|
|
24
|
-
return acc;
|
|
25
|
-
}, {})));
|
|
26
|
-
}
|
|
27
|
-
export function getObjectExtensionEntitiesFromStore(configState, moduleKey) {
|
|
28
|
-
return selectObjectExtensions(configState).pipe(map(extensions => {
|
|
29
|
-
if (!extensions)
|
|
30
|
-
return null;
|
|
31
|
-
return (extensions.modules[moduleKey] || {})
|
|
32
|
-
.entities;
|
|
33
|
-
}), map(entities => (isUndefined(entities) ? {} : entities)), filter(Boolean), take(1));
|
|
34
|
-
}
|
|
35
|
-
export function mapEntitiesToContributors(configState, resource) {
|
|
36
|
-
return pipe(switchMap((entities) => zip(selectLocalization(configState), selectEnums(configState)).pipe(map(([localization, enums]) => {
|
|
37
|
-
const generateDisplayName = createDisplayNameLocalizationPipeKeyGenerator(localization);
|
|
38
|
-
return Object.keys(entities).reduce((acc, key) => {
|
|
39
|
-
acc.prop[key] = [];
|
|
40
|
-
acc.createForm[key] = [];
|
|
41
|
-
acc.editForm[key] = [];
|
|
42
|
-
const entity = entities[key];
|
|
43
|
-
if (!entity)
|
|
44
|
-
return acc;
|
|
45
|
-
const properties = entity.properties;
|
|
46
|
-
if (!properties)
|
|
47
|
-
return acc;
|
|
48
|
-
const mapPropertiesToContributors = createPropertiesToContributorsMapper(generateDisplayName, resource, enums);
|
|
49
|
-
return mapPropertiesToContributors(properties, acc, key);
|
|
50
|
-
}, {
|
|
51
|
-
prop: {},
|
|
52
|
-
createForm: {},
|
|
53
|
-
editForm: {},
|
|
54
|
-
});
|
|
55
|
-
}))), take(1));
|
|
56
|
-
}
|
|
57
|
-
function createPropertiesToContributorsMapper(generateDisplayName, resource, enums) {
|
|
58
|
-
return (properties, contributors, key) => {
|
|
59
|
-
const isExtra = true;
|
|
60
|
-
const generateTypeaheadDisplayName = createTypeaheadDisplayNameGenerator(generateDisplayName, properties);
|
|
61
|
-
Object.keys(properties).forEach((name) => {
|
|
62
|
-
const property = properties[name];
|
|
63
|
-
const propName = name;
|
|
64
|
-
const lookup = property.ui.lookup || {};
|
|
65
|
-
const type = getTypeaheadType(lookup, name) || getTypeFromProperty(property);
|
|
66
|
-
const generateDN = hasTypeaheadTextSuffix(name)
|
|
67
|
-
? generateTypeaheadDisplayName
|
|
68
|
-
: generateDisplayName;
|
|
69
|
-
const displayName = generateDN(property.displayName, { name, resource });
|
|
70
|
-
if (property.ui.onTable.isVisible) {
|
|
71
|
-
const sortable = Boolean(property.ui.onTable.isSortable);
|
|
72
|
-
const columnWidth = type === "boolean" /* Boolean */ ? 150 : 250;
|
|
73
|
-
const valueResolver = type === "enum" /* Enum */
|
|
74
|
-
? createEnumValueResolver(property.type, enums[property.type], propName)
|
|
75
|
-
: createExtraPropertyValueResolver(propName);
|
|
76
|
-
const entityProp = new EntityProp({
|
|
77
|
-
type,
|
|
78
|
-
name: propName,
|
|
79
|
-
displayName,
|
|
80
|
-
sortable,
|
|
81
|
-
columnWidth,
|
|
82
|
-
valueResolver,
|
|
83
|
-
isExtra,
|
|
84
|
-
});
|
|
85
|
-
const contributor = (propList) => propList.addTail(entityProp);
|
|
86
|
-
contributors.prop[key].push(contributor);
|
|
87
|
-
}
|
|
88
|
-
const isOnCreateForm = property.ui.onCreateForm.isVisible;
|
|
89
|
-
const isOnEditForm = property.ui.onEditForm.isVisible;
|
|
90
|
-
if (isOnCreateForm || isOnEditForm) {
|
|
91
|
-
const defaultValue = property.defaultValue;
|
|
92
|
-
const validators = () => getValidatorsFromProperty(property);
|
|
93
|
-
let options;
|
|
94
|
-
if (type === "enum" /* Enum */)
|
|
95
|
-
options = createEnumOptions(propName, enums[property.type || '']);
|
|
96
|
-
else if (type === "typeahead" /* Typeahead */)
|
|
97
|
-
options = createTypeaheadOptions(lookup);
|
|
98
|
-
const formProp = new FormProp({
|
|
99
|
-
type,
|
|
100
|
-
name: propName,
|
|
101
|
-
displayName,
|
|
102
|
-
options,
|
|
103
|
-
defaultValue,
|
|
104
|
-
validators,
|
|
105
|
-
isExtra,
|
|
106
|
-
});
|
|
107
|
-
const formContributor = (propList) => propList.addTail(formProp);
|
|
108
|
-
if (isOnCreateForm)
|
|
109
|
-
contributors.createForm[key].push(formContributor);
|
|
110
|
-
if (isOnEditForm)
|
|
111
|
-
contributors.editForm[key].push(formContributor);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
return contributors;
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
function getTypeFromProperty(property) {
|
|
118
|
-
var _a;
|
|
119
|
-
return (_a = property === null || property === void 0 ? void 0 : property.typeSimple) === null || _a === void 0 ? void 0 : _a.replace(/\?$/, '');
|
|
120
|
-
}
|
|
121
|
-
function isUndefined(obj) {
|
|
122
|
-
return typeof obj === 'undefined';
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9leHRlbnNpb25zL3NyYy9saWIvdXRpbHMvc3RhdGUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBRzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckYsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sRUFDTCxtQ0FBbUMsRUFDbkMsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixzQkFBc0IsR0FDdkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5RCxTQUFTLHNCQUFzQixDQUM3QixXQUErQjtJQUUvQixPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FDekIsV0FBK0I7SUFFL0IsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsV0FBK0I7SUFFL0IsT0FBTyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMs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LHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVoRixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQztvQkFDNUIsSUFBSTtvQkFDSixJQUFJLEVBQUUsUUFBUTtvQkFDZCxXQUFXO29CQUNYLE9BQU87b0JBQ1AsWUFBWTtvQkFDWixVQUFVO29CQUNWLE9BQU87aUJBQ1IsQ0FBQyxDQUFDO2dCQUVILE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBeUIsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbEYsSUFBSSxjQUFjO29CQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLFlBQVk7b0JBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFFBQStDOztJQUMxRSxPQUFPLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFVBQVUsMENBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQXdCLENBQUM7QUFDekUsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVE7SUFDM0IsT0FBTyxPQUFPLEdBQUcsS0FBSyxXQUFXLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQUJQLFxyXG4gIEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbkR0byxcclxuICBDb25maWdTdGF0ZVNlcnZpY2UsXHJcbiAgRXh0ZW5zaW9uUHJvcGVydHlVaUxvb2t1cER0byxcclxufSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBwaXBlLCB6aXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgZVByb3BUeXBlIH0gZnJvbSAnLi4vZW51bXMvcHJvcHMuZW51bSc7XHJcbmltcG9ydCB7IEVudGl0eVByb3AsIEVudGl0eVByb3BMaXN0IH0gZnJvbSAnLi4vbW9kZWxzL2VudGl0eS1wcm9wcyc7XHJcbmltcG9ydCB7IEZvcm1Qcm9wLCBGb3JtUHJvcExpc3QgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1wcm9wcyc7XHJcbmltcG9ydCB7IE9iamVjdEV4dGVuc2lvbnMgfSBmcm9tICcuLi9tb2RlbHMvb2JqZWN0LWV4dGVuc2lvbnMnO1xyXG5pbXBvcnQgeyBQcm9wQ2FsbGJhY2sgfSBmcm9tICcuLi9tb2RlbHMvcHJvcHMnO1xyXG5pbXBvcnQgeyBjcmVhdGVFbnVtLCBjcmVhdGVFbnVtT3B0aW9ucywgY3JlYXRlRW51bVZhbHVlUmVzb2x2ZXIgfSBmcm9tICcuL2VudW0udXRpbCc7XHJcbmltcG9ydCB7IGNyZWF0ZURpc3BsYXlOYW1lTG9jYWxpemF0aW9uUGlwZUtleUdlbmVyYXRvciB9IGZyb20gJy4vbG9jYWxpemF0aW9uLnV0aWwnO1xyXG5pbXBvcnQgeyBjcmVhdGVFeHRyYVByb3BlcnR5VmFsdWVSZXNvbHZlciB9IGZyb20gJy4vcHJvcHMudXRpbCc7XHJcbmltcG9ydCB7XHJcbiAgY3JlYXRlVHlwZWFoZWFkRGlzcGxheU5hbWVHZW5lcmF0b3IsXHJcbiAgY3JlYXRlVHlwZWFoZWFkT3B0aW9ucyxcclxuICBnZXRUeXBlYWhlYWRUeXBlLFxyXG4gIGhhc1R5cGVhaGVhZFRleHRTdWZmaXgsXHJcbn0gZnJvbSAnLi90eXBlYWhlYWQudXRpbCc7XHJcbmltcG9ydCB7IGdldFZhbGlkYXRvcnNGcm9tUHJvcGVydHkgfSBmcm9tICcuL3ZhbGlkYXRpb24udXRpbCc7XHJcblxyXG5mdW5jdGlvbiBzZWxlY3RPYmplY3RFeHRlbnNpb25zKFxyXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UsXHJcbik6IE9ic2VydmFibGU8T2JqZWN0RXh0ZW5zaW9ucy5PYmplY3RFeHRlbnNpb25zRHRvPiB7XHJcbiAgcmV0dXJuIGNvbmZpZ1N0YXRlLmdldE9uZSQoJ29iamVjdEV4dGVuc2lvbnMnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VsZWN0TG9jYWxpemF0aW9uKFxyXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UsXHJcbik6IE9ic2VydmFibGU8QXBwbGljYXRpb25Mb2NhbGl6YXRpb25Db25maWd1cmF0aW9uRHRvPiB7XHJcbiAgcmV0dXJuIGNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZWxlY3RFbnVtcyhcclxuICBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxyXG4pOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIE9iamVjdEV4dGVuc2lvbnMuRXh0ZW5zaW9uRW51bUR0bz4+IHtcclxuICByZXR1cm4gc2VsZWN0T2JqZWN0RXh0ZW5zaW9ucyhjb25maWdTdGF0ZSkucGlwZShcclxuICAgIG1hcCgoZXh0ZW5zaW9uczogT2JqZWN0RXh0ZW5zaW9ucy5PYmplY3RFeHRlbnNpb25zRHRvKSA9PlxyXG4gICAgICBPYmplY3Qua2V5cyhleHRlbnNpb25zLmVudW1zKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBmaWVsZHMsIGxvY2FsaXphdGlvblJlc291cmNlIH0gPSBleHRlbnNpb25zLmVudW1zW2tleV07XHJcbiAgICAgICAgYWNjW2tleV0gPSB7XHJcbiAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICBsb2NhbGl6YXRpb25SZXNvdXJjZSxcclxuICAgICAgICAgIHRyYW5zZm9ybWVkOiBjcmVhdGVFbnVtKGZpZWxkcyksXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBPYmplY3RFeHRlbnNpb25zLkV4dGVuc2lvbkVudW1EdG8+KSxcclxuICAgICksXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdEV4dGVuc2lvbkVudGl0aWVzRnJvbVN0b3JlKFxyXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UsXHJcbiAgbW9kdWxlS2V5OiBzdHJpbmcsXHJcbikge1xyXG4gIHJldHVybiBzZWxlY3RPYmplY3RFeHRlbnNpb25zKGNvbmZpZ1N0YXRlKS5waXBlKFxyXG4gICAgbWFwKGV4dGVuc2lvbnMgPT4ge1xyXG4gICAgICBpZiAoIWV4dGVuc2lvbnMpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgcmV0dXJuIChleHRlbnNpb25zLm1vZHVsZXNbbW9kdWxlS2V5XSB8fCAoe30gYXMgT2JqZWN0RXh0ZW5zaW9ucy5Nb2R1bGVFeHRlbnNpb25EdG8pKVxyXG4gICAgICAgIC5lbnRpdGllcztcclxuICAgIH0pLFxyXG4gICAgbWFwKGVudGl0aWVzID0+IChpc1VuZGVmaW5lZChlbnRpdGllcykgPyB7fSA6IGVudGl0aWVzKSksXHJcbiAgICBmaWx0ZXI8T2JqZWN0RXh0ZW5zaW9ucy5FbnRpdHlFeHRlbnNpb25zPihCb29sZWFuKSxcclxuICAgIHRha2UoMSksXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEVudGl0aWVzVG9Db250cmlidXRvcnM8VCA9IGFueT4oXHJcbiAgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcclxuICByZXNvdXJjZTogc3RyaW5nLFxyXG4pIHtcclxuICByZXR1cm4gcGlwZShcclxuICAgIHN3aXRjaE1hcCgoZW50aXRpZXM6IGFueSkgPT5cclxuICAgICAgemlwKHNlbGVjdExvY2FsaXphdGlvbihjb25maWdTdGF0ZSksIHNlbGVjdEVudW1zKGNvbmZpZ1N0YXRlKSkucGlwZShcclxuICAgICAgICBtYXAoKFtsb2NhbGl6YXRpb24sIGVudW1zXSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZ2VuZXJhdGVEaXNwbGF5TmFtZSA9IGNyZWF0ZURpc3BsYXlOYW1lTG9jYWxpemF0aW9uUGlwZUtleUdlbmVyYXRvcihsb2NhbGl6YXRpb24pO1xyXG5cclxuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRpdGllcykucmVkdWNlKFxyXG4gICAgICAgICAgICAoYWNjLCBrZXk6IGtleW9mIE9iamVjdEV4dGVuc2lvbnMuRW50aXR5RXh0ZW5zaW9ucykgPT4ge1xyXG4gICAgICAgICAgICAgIGFjYy5wcm9wW2tleV0gPSBbXTtcclxuICAgICAgICAgICAgICBhY2MuY3JlYXRlRm9ybVtrZXldID0gW107XHJcbiAgICAgICAgICAgICAgYWNjLmVkaXRGb3JtW2tleV0gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZW50aXR5OiBPYmplY3RFeHRlbnNpb25zLkVudGl0eUV4dGVuc2lvbkR0byA9IGVudGl0aWVzW2tleV07XHJcbiAgICAgICAgICAgICAgaWYgKCFlbnRpdHkpIHJldHVybiBhY2M7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHkucHJvcGVydGllcztcclxuICAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHJldHVybiBhY2M7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG1hcFByb3BlcnRpZXNUb0NvbnRyaWJ1dG9ycyA9IGNyZWF0ZVByb3BlcnRpZXNUb0NvbnRyaWJ1dG9yc01hcHBlcjxUPihcclxuICAgICAgICAgICAgICAgIGdlbmVyYXRlRGlzcGxheU5hbWUsXHJcbiAgICAgICAgICAgICAgICByZXNvdXJjZSxcclxuICAgICAgICAgICAgICAgIGVudW1zLFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiBtYXBQcm9wZXJ0aWVzVG9Db250cmlidXRvcnMocHJvcGVydGllcywgYWNjLCBrZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcHJvcDoge30sXHJcbiAgICAgICAgICAgICAgY3JlYXRlRm9ybToge30sXHJcbiAgICAgICAgICAgICAgZWRpdEZvcm06IHt9LFxyXG4gICAgICAgICAgICB9IGFzIE9iamVjdEV4dGVuc2lvbnMuUHJvcENvbnRyaWJ1dG9ycyxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICksXHJcbiAgICApLFxyXG4gICAgdGFrZSgxKSxcclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0aWVzVG9Db250cmlidXRvcnNNYXBwZXI8VCA9IGFueT4oXHJcbiAgZ2VuZXJhdGVEaXNwbGF5TmFtZTogT2JqZWN0RXh0ZW5zaW9ucy5EaXNwbGF5TmFtZUdlbmVyYXRvckZuLFxyXG4gIHJlc291cmNlOiBzdHJpbmcsXHJcbiAgZW51bXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdEV4dGVuc2lvbnMuRXh0ZW5zaW9uRW51bUR0bz4sXHJcbikge1xyXG4gIHJldHVybiAoXHJcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3RFeHRlbnNpb25zLkVudGl0eUV4dGVuc2lvblByb3BlcnRpZXMsXHJcbiAgICBjb250cmlidXRvcnM6IE9iamVjdEV4dGVuc2lvbnMuUHJvcENvbnRyaWJ1dG9yczxUPixcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgaXNFeHRyYSA9IHRydWU7XHJcbiAgICBjb25zdCBnZW5lcmF0ZVR5cGVhaGVhZERpc3BsYXlOYW1lID0gY3JlYXRlVHlwZWFoZWFkRGlzcGxheU5hbWVHZW5lcmF0b3IoXHJcbiAgICAgIGdlbmVyYXRlRGlzcGxheU5hbWUsXHJcbiAgICAgIHByb3BlcnRpZXMsXHJcbiAgICApO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbbmFtZV07XHJcbiAgICAgIGNvbnN0IHByb3BOYW1lID0gbmFtZTtcclxuICAgICAgY29uc3QgbG9va3VwID0gcHJvcGVydHkudWkubG9va3VwIHx8ICh7fSBhcyBFeHRlbnNpb25Qcm9wZXJ0eVVpTG9va3VwRHRvKTtcclxuICAgICAgY29uc3QgdHlwZSA9IGdldFR5cGVhaGVhZFR5cGUobG9va3VwLCBuYW1lKSB8fCBnZXRUeXBlRnJvbVByb3BlcnR5KHByb3BlcnR5KTtcclxuICAgICAgY29uc3QgZ2VuZXJhdGVETiA9IGhhc1R5cGVhaGVhZFRleHRTdWZmaXgobmFtZSlcclxuICAgICAgICA/IGdlbmVyYXRlVHlwZWFoZWFkRGlzcGxheU5hbWVcclxuICAgICAgICA6IGdlbmVyYXRlRGlzcGxheU5hbWU7XHJcbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gZ2VuZXJhdGVETihwcm9wZXJ0eS5kaXNwbGF5TmFtZSwgeyBuYW1lLCByZXNvdXJjZSB9KTtcclxuXHJcbiAgICAgIGlmIChwcm9wZXJ0eS51aS5vblRhYmxlLmlzVmlzaWJsZSkge1xyXG4gICAgICAgIGNvbnN0IHNvcnRhYmxlID0gQm9vbGVhbihwcm9wZXJ0eS51aS5vblRhYmxlLmlzU29ydGFibGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gdHlwZSA9PT0gZVByb3BUeXBlLkJvb2xlYW4gPyAxNTAgOiAyNTA7XHJcbiAgICAgICAgY29uc3QgdmFsdWVSZXNvbHZlciA9XHJcbiAgICAgICAgICB0eXBlID09PSBlUHJvcFR5cGUuRW51bVxyXG4gICAgICAgICAgICA/IGNyZWF0ZUVudW1WYWx1ZVJlc29sdmVyKHByb3BlcnR5LnR5cGUsIGVudW1zW3Byb3BlcnR5LnR5cGVdLCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgOiBjcmVhdGVFeHRyYVByb3BlcnR5VmFsdWVSZXNvbHZlcjxUPihwcm9wTmFtZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVudGl0eVByb3AgPSBuZXcgRW50aXR5UHJvcDxUPih7XHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgbmFtZTogcHJvcE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZSxcclxuICAgICAgICAgIHNvcnRhYmxlLFxyXG4gICAgICAgICAgY29sdW1uV2lkdGgsXHJcbiAgICAgICAgICB2YWx1ZVJlc29sdmVyLFxyXG4gICAgICAgICAgaXNFeHRyYSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udHJpYnV0b3IgPSAocHJvcExpc3Q6IEVudGl0eVByb3BMaXN0PFQ+KSA9PiBwcm9wTGlzdC5hZGRUYWlsKGVudGl0eVByb3ApO1xyXG4gICAgICAgIGNvbnRyaWJ1dG9ycy5wcm9wW2tleV0ucHVzaChjb250cmlidXRvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGlzT25DcmVhdGVGb3JtID0gcHJvcGVydHkudWkub25DcmVhdGVGb3JtLmlzVmlzaWJsZTtcclxuICAgICAgY29uc3QgaXNPbkVkaXRGb3JtID0gcHJvcGVydHkudWkub25FZGl0Rm9ybS5pc1Zpc2libGU7XHJcblxyXG4gICAgICBpZiAoaXNPbkNyZWF0ZUZvcm0gfHwgaXNPbkVkaXRGb3JtKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcHJvcGVydHkuZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSAoKSA9PiBnZXRWYWxpZGF0b3JzRnJvbVByb3BlcnR5KHByb3BlcnR5KTtcclxuICAgICAgICBsZXQgb3B0aW9uczogUHJvcENhbGxiYWNrPGFueSwgT2JzZXJ2YWJsZTxBQlAuT3B0aW9uPGFueT5bXT4+IHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBlUHJvcFR5cGUuRW51bSlcclxuICAgICAgICAgIG9wdGlvbnMgPSBjcmVhdGVFbnVtT3B0aW9ucyhwcm9wTmFtZSwgZW51bXNbcHJvcGVydHkudHlwZSB8fCAnJ10pO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IGVQcm9wVHlwZS5UeXBlYWhlYWQpIG9wdGlvbnMgPSBjcmVhdGVUeXBlYWhlYWRPcHRpb25zKGxvb2t1cCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1Qcm9wID0gbmV3IEZvcm1Qcm9wKHtcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBuYW1lOiBwcm9wTmFtZSxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcclxuICAgICAgICAgIHZhbGlkYXRvcnMsXHJcbiAgICAgICAgICBpc0V4dHJhLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtQ29udHJpYnV0b3IgPSAocHJvcExpc3Q6IEZvcm1Qcm9wTGlzdDxUPikgPT4gcHJvcExpc3QuYWRkVGFpbChmb3JtUHJvcCk7XHJcblxyXG4gICAgICAgIGlmIChpc09uQ3JlYXRlRm9ybSkgY29udHJpYnV0b3JzLmNyZWF0ZUZvcm1ba2V5XS5wdXNoKGZvcm1Db250cmlidXRvcik7XHJcbiAgICAgICAgaWYgKGlzT25FZGl0Rm9ybSkgY29udHJpYnV0b3JzLmVkaXRGb3JtW2tleV0ucHVzaChmb3JtQ29udHJpYnV0b3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29udHJpYnV0b3JzO1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFR5cGVGcm9tUHJvcGVydHkocHJvcGVydHk6IE9iamVjdEV4dGVuc2lvbnMuRXh0ZW5zaW9uUHJvcGVydHlEdG8pOiBlUHJvcFR5cGUge1xyXG4gIHJldHVybiBwcm9wZXJ0eT8udHlwZVNpbXBsZT8ucmVwbGFjZSgvXFw/JC8sICcnKSBhcyBzdHJpbmcgYXMgZVByb3BUeXBlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChvYmo6IGFueSk6IG9iaiBpcyB1bmRlZmluZWQge1xyXG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJztcclxufVxyXG4iXX0=
|
|
1
|
+
import { pipe, zip } from 'rxjs';
|
|
2
|
+
import { filter, map, switchMap, take } from 'rxjs/operators';
|
|
3
|
+
import { EntityProp } from '../models/entity-props';
|
|
4
|
+
import { FormProp } from '../models/form-props';
|
|
5
|
+
import { createEnum, createEnumOptions, createEnumValueResolver } from './enum.util';
|
|
6
|
+
import { createDisplayNameLocalizationPipeKeyGenerator } from './localization.util';
|
|
7
|
+
import { createExtraPropertyValueResolver } from './props.util';
|
|
8
|
+
import { createTypeaheadDisplayNameGenerator, createTypeaheadOptions, getTypeaheadType, hasTypeaheadTextSuffix, } from './typeahead.util';
|
|
9
|
+
import { getValidatorsFromProperty } from './validation.util';
|
|
10
|
+
function selectObjectExtensions(configState) {
|
|
11
|
+
return configState.getOne$('objectExtensions');
|
|
12
|
+
}
|
|
13
|
+
function selectLocalization(configState) {
|
|
14
|
+
return configState.getOne$('localization');
|
|
15
|
+
}
|
|
16
|
+
function selectEnums(configState) {
|
|
17
|
+
return selectObjectExtensions(configState).pipe(map((extensions) => Object.keys(extensions.enums).reduce((acc, key) => {
|
|
18
|
+
const { fields, localizationResource } = extensions.enums[key];
|
|
19
|
+
acc[key] = {
|
|
20
|
+
fields,
|
|
21
|
+
localizationResource,
|
|
22
|
+
transformed: createEnum(fields),
|
|
23
|
+
};
|
|
24
|
+
return acc;
|
|
25
|
+
}, {})));
|
|
26
|
+
}
|
|
27
|
+
export function getObjectExtensionEntitiesFromStore(configState, moduleKey) {
|
|
28
|
+
return selectObjectExtensions(configState).pipe(map(extensions => {
|
|
29
|
+
if (!extensions)
|
|
30
|
+
return null;
|
|
31
|
+
return (extensions.modules[moduleKey] || {})
|
|
32
|
+
.entities;
|
|
33
|
+
}), map(entities => (isUndefined(entities) ? {} : entities)), filter(Boolean), take(1));
|
|
34
|
+
}
|
|
35
|
+
export function mapEntitiesToContributors(configState, resource) {
|
|
36
|
+
return pipe(switchMap((entities) => zip(selectLocalization(configState), selectEnums(configState)).pipe(map(([localization, enums]) => {
|
|
37
|
+
const generateDisplayName = createDisplayNameLocalizationPipeKeyGenerator(localization);
|
|
38
|
+
return Object.keys(entities).reduce((acc, key) => {
|
|
39
|
+
acc.prop[key] = [];
|
|
40
|
+
acc.createForm[key] = [];
|
|
41
|
+
acc.editForm[key] = [];
|
|
42
|
+
const entity = entities[key];
|
|
43
|
+
if (!entity)
|
|
44
|
+
return acc;
|
|
45
|
+
const properties = entity.properties;
|
|
46
|
+
if (!properties)
|
|
47
|
+
return acc;
|
|
48
|
+
const mapPropertiesToContributors = createPropertiesToContributorsMapper(generateDisplayName, resource, enums);
|
|
49
|
+
return mapPropertiesToContributors(properties, acc, key);
|
|
50
|
+
}, {
|
|
51
|
+
prop: {},
|
|
52
|
+
createForm: {},
|
|
53
|
+
editForm: {},
|
|
54
|
+
});
|
|
55
|
+
}))), take(1));
|
|
56
|
+
}
|
|
57
|
+
function createPropertiesToContributorsMapper(generateDisplayName, resource, enums) {
|
|
58
|
+
return (properties, contributors, key) => {
|
|
59
|
+
const isExtra = true;
|
|
60
|
+
const generateTypeaheadDisplayName = createTypeaheadDisplayNameGenerator(generateDisplayName, properties);
|
|
61
|
+
Object.keys(properties).forEach((name) => {
|
|
62
|
+
const property = properties[name];
|
|
63
|
+
const propName = name;
|
|
64
|
+
const lookup = property.ui.lookup || {};
|
|
65
|
+
const type = getTypeaheadType(lookup, name) || getTypeFromProperty(property);
|
|
66
|
+
const generateDN = hasTypeaheadTextSuffix(name)
|
|
67
|
+
? generateTypeaheadDisplayName
|
|
68
|
+
: generateDisplayName;
|
|
69
|
+
const displayName = generateDN(property.displayName, { name, resource });
|
|
70
|
+
if (property.ui.onTable.isVisible) {
|
|
71
|
+
const sortable = Boolean(property.ui.onTable.isSortable);
|
|
72
|
+
const columnWidth = type === "boolean" /* Boolean */ ? 150 : 250;
|
|
73
|
+
const valueResolver = type === "enum" /* Enum */
|
|
74
|
+
? createEnumValueResolver(property.type, enums[property.type], propName)
|
|
75
|
+
: createExtraPropertyValueResolver(propName);
|
|
76
|
+
const entityProp = new EntityProp({
|
|
77
|
+
type,
|
|
78
|
+
name: propName,
|
|
79
|
+
displayName,
|
|
80
|
+
sortable,
|
|
81
|
+
columnWidth,
|
|
82
|
+
valueResolver,
|
|
83
|
+
isExtra,
|
|
84
|
+
});
|
|
85
|
+
const contributor = (propList) => propList.addTail(entityProp);
|
|
86
|
+
contributors.prop[key].push(contributor);
|
|
87
|
+
}
|
|
88
|
+
const isOnCreateForm = property.ui.onCreateForm.isVisible;
|
|
89
|
+
const isOnEditForm = property.ui.onEditForm.isVisible;
|
|
90
|
+
if (isOnCreateForm || isOnEditForm) {
|
|
91
|
+
const defaultValue = property.defaultValue;
|
|
92
|
+
const validators = () => getValidatorsFromProperty(property);
|
|
93
|
+
let options;
|
|
94
|
+
if (type === "enum" /* Enum */)
|
|
95
|
+
options = createEnumOptions(propName, enums[property.type || '']);
|
|
96
|
+
else if (type === "typeahead" /* Typeahead */)
|
|
97
|
+
options = createTypeaheadOptions(lookup);
|
|
98
|
+
const formProp = new FormProp({
|
|
99
|
+
type,
|
|
100
|
+
name: propName,
|
|
101
|
+
displayName,
|
|
102
|
+
options,
|
|
103
|
+
defaultValue,
|
|
104
|
+
validators,
|
|
105
|
+
isExtra,
|
|
106
|
+
});
|
|
107
|
+
const formContributor = (propList) => propList.addTail(formProp);
|
|
108
|
+
if (isOnCreateForm)
|
|
109
|
+
contributors.createForm[key].push(formContributor);
|
|
110
|
+
if (isOnEditForm)
|
|
111
|
+
contributors.editForm[key].push(formContributor);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return contributors;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function getTypeFromProperty(property) {
|
|
118
|
+
var _a;
|
|
119
|
+
return (_a = property === null || property === void 0 ? void 0 : property.typeSimple) === null || _a === void 0 ? void 0 : _a.replace(/\?$/, '');
|
|
120
|
+
}
|
|
121
|
+
function isUndefined(obj) {
|
|
122
|
+
return typeof obj === 'undefined';
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9leHRlbnNpb25zL3NyYy9saWIvdXRpbHMvc3RhdGUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBRzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckYsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sRUFDTCxtQ0FBbUMsRUFDbkMsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixzQkFBc0IsR0FDdkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5RCxTQUFTLHNCQUFzQixDQUM3QixXQUErQjtJQUUvQixPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FDekIsV0FBK0I7SUFFL0IsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsV0FBK0I7SUFFL0IsT0FBTyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxDQUFDLFVBQWdELEVBQUUsRUFBRSxDQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHO1lBQ1QsTUFBTTtZQUNOLG9CQUFvQjtZQUNwQixXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztTQUNoQyxDQUFDO1FBQ0YsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBdUQsQ0FBQyxDQUM1RCxDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG1DQUFtQyxDQUNqRCxXQUErQixFQUMvQixTQUFpQjtJQUVqQixPQUFPLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU3QixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSyxFQUEwQyxDQUFDO2FBQ2xGLFFBQVEsQ0FBQztJQUNkLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ3hELE1BQU0sQ0FBb0MsT0FBTyxDQUFDLEVBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsV0FBK0IsRUFDL0IsUUFBZ0I7SUFFaEIsT0FBTyxJQUFJLENBQ1QsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FDMUIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakUsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUM1QixNQUFNLG1CQUFtQixHQUFHLDZDQUE2QyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQ2pDLENBQUMsR0FBRyxFQUFFLEdBQTRDLEVBQUUsRUFBRTtZQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUV2QixNQUFNLE1BQU0sR0FBd0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBRXhCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFFNUIsTUFBTSwyQkFBMkIsR0FBRyxvQ0FBb0MsQ0FDdEUsbUJBQW1CLEVBQ25CLFFBQVEsRUFDUixLQUFLLENBQ04sQ0FBQztZQUVGLE9BQU8sMkJBQTJCLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxDQUFDLEVBQ0Q7WUFDRSxJQUFJLEVBQUUsRUFBRTtZQUNSLFVBQVUsRUFBRSxFQUFFO1lBQ2QsUUFBUSxFQUFFLEVBQUU7U0FDd0IsQ0FDdkMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNILENBQ0YsRUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG9DQUFvQyxDQUMzQyxtQkFBNEQsRUFDNUQsUUFBZ0IsRUFDaEIsS0FBd0Q7SUFFeEQsT0FBTyxDQUNMLFVBQXNELEVBQ3RELFlBQWtELEVBQ2xELEdBQVcsRUFDWCxFQUFFO1FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLE1BQU0sNEJBQTRCLEdBQUcsbUNBQW1DLENBQ3RFLG1CQUFtQixFQUNuQixVQUFVLENBQ1gsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDL0MsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSyxFQUFtQyxDQUFDO1lBQzFFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RSxNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyw0QkFBNEI7Z0JBQzlCLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztZQUN4QixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRXpFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO2dCQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sV0FBVyxHQUFHLElBQUksNEJBQXNCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUMzRCxNQUFNLGFBQWEsR0FDakIsSUFBSSxzQkFBbUI7b0JBQ3JCLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDO29CQUN4RSxDQUFDLENBQUMsZ0NBQWdDLENBQUksUUFBUSxDQUFDLENBQUM7Z0JBRXBELE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFJO29CQUNuQyxJQUFJO29CQUNKLElBQUksRUFBRSxRQUFRO29CQUNkLFdBQVc7b0JBQ1gsUUFBUTtvQkFDUixXQUFXO29CQUNYLGFBQWE7b0JBQ2IsT0FBTztpQkFDUixDQUFDLENBQUM7Z0JBRUgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUEyQixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMxQztZQUVELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUMxRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFFdEQsSUFBSSxjQUFjLElBQUksWUFBWSxFQUFFO2dCQUNsQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxPQUFxRSxDQUFDO2dCQUMxRSxJQUFJLElBQUksc0JBQW1CO29CQUN6QixPQUFPLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQy9ELElBQUksSUFBSSxnQ0FBd0I7b0JBQUUsT0FBTyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVoRixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQztvQkFDNUIsSUFBSTtvQkFDSixJQUFJLEVBQUUsUUFBUTtvQkFDZCxXQUFXO29CQUNYLE9BQU87b0JBQ1AsWUFBWTtvQkFDWixVQUFVO29CQUNWLE9BQU87aUJBQ1IsQ0FBQyxDQUFDO2dCQUVILE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBeUIsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbEYsSUFBSSxjQUFjO29CQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLFlBQVk7b0JBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFFBQStDOztJQUMxRSxPQUFPLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFVBQVUsMENBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQXdCLENBQUM7QUFDekUsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVE7SUFDM0IsT0FBTyxPQUFPLEdBQUcsS0FBSyxXQUFXLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFCUCxcbiAgQXBwbGljYXRpb25Mb2NhbGl6YXRpb25Db25maWd1cmF0aW9uRHRvLFxuICBDb25maWdTdGF0ZVNlcnZpY2UsXG4gIEV4dGVuc2lvblByb3BlcnR5VWlMb29rdXBEdG8sXG59IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBwaXBlLCB6aXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBlUHJvcFR5cGUgfSBmcm9tICcuLi9lbnVtcy9wcm9wcy5lbnVtJztcbmltcG9ydCB7IEVudGl0eVByb3AsIEVudGl0eVByb3BMaXN0IH0gZnJvbSAnLi4vbW9kZWxzL2VudGl0eS1wcm9wcyc7XG5pbXBvcnQgeyBGb3JtUHJvcCwgRm9ybVByb3BMaXN0IH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tcHJvcHMnO1xuaW1wb3J0IHsgT2JqZWN0RXh0ZW5zaW9ucyB9IGZyb20gJy4uL21vZGVscy9vYmplY3QtZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBQcm9wQ2FsbGJhY2sgfSBmcm9tICcuLi9tb2RlbHMvcHJvcHMnO1xuaW1wb3J0IHsgY3JlYXRlRW51bSwgY3JlYXRlRW51bU9wdGlvbnMsIGNyZWF0ZUVudW1WYWx1ZVJlc29sdmVyIH0gZnJvbSAnLi9lbnVtLnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlRGlzcGxheU5hbWVMb2NhbGl6YXRpb25QaXBlS2V5R2VuZXJhdG9yIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVFeHRyYVByb3BlcnR5VmFsdWVSZXNvbHZlciB9IGZyb20gJy4vcHJvcHMudXRpbCc7XG5pbXBvcnQge1xuICBjcmVhdGVUeXBlYWhlYWREaXNwbGF5TmFtZUdlbmVyYXRvcixcbiAgY3JlYXRlVHlwZWFoZWFkT3B0aW9ucyxcbiAgZ2V0VHlwZWFoZWFkVHlwZSxcbiAgaGFzVHlwZWFoZWFkVGV4dFN1ZmZpeCxcbn0gZnJvbSAnLi90eXBlYWhlYWQudXRpbCc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0b3JzRnJvbVByb3BlcnR5IH0gZnJvbSAnLi92YWxpZGF0aW9uLnV0aWwnO1xuXG5mdW5jdGlvbiBzZWxlY3RPYmplY3RFeHRlbnNpb25zKFxuICBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxuKTogT2JzZXJ2YWJsZTxPYmplY3RFeHRlbnNpb25zLk9iamVjdEV4dGVuc2lvbnNEdG8+IHtcbiAgcmV0dXJuIGNvbmZpZ1N0YXRlLmdldE9uZSQoJ29iamVjdEV4dGVuc2lvbnMnKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0TG9jYWxpemF0aW9uKFxuICBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxuKTogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb25EdG8+IHtcbiAgcmV0dXJuIGNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RFbnVtcyhcbiAgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcbik6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgT2JqZWN0RXh0ZW5zaW9ucy5FeHRlbnNpb25FbnVtRHRvPj4ge1xuICByZXR1cm4gc2VsZWN0T2JqZWN0RXh0ZW5zaW9ucyhjb25maWdTdGF0ZSkucGlwZShcbiAgICBtYXAoKGV4dGVuc2lvbnM6IE9iamVjdEV4dGVuc2lvbnMuT2JqZWN0RXh0ZW5zaW9uc0R0bykgPT5cbiAgICAgIE9iamVjdC5rZXlzKGV4dGVuc2lvbnMuZW51bXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWVsZHMsIGxvY2FsaXphdGlvblJlc291cmNlIH0gPSBleHRlbnNpb25zLmVudW1zW2tleV07XG4gICAgICAgIGFjY1trZXldID0ge1xuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBsb2NhbGl6YXRpb25SZXNvdXJjZSxcbiAgICAgICAgICB0cmFuc2Zvcm1lZDogY3JlYXRlRW51bShmaWVsZHMpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgT2JqZWN0RXh0ZW5zaW9ucy5FeHRlbnNpb25FbnVtRHRvPiksXG4gICAgKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdEV4dGVuc2lvbkVudGl0aWVzRnJvbVN0b3JlKFxuICBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxuICBtb2R1bGVLZXk6IHN0cmluZyxcbikge1xuICByZXR1cm4gc2VsZWN0T2JqZWN0RXh0ZW5zaW9ucyhjb25maWdTdGF0ZSkucGlwZShcbiAgICBtYXAoZXh0ZW5zaW9ucyA9PiB7XG4gICAgICBpZiAoIWV4dGVuc2lvbnMpIHJldHVybiBudWxsO1xuXG4gICAgICByZXR1cm4gKGV4dGVuc2lvbnMubW9kdWxlc1ttb2R1bGVLZXldIHx8ICh7fSBhcyBPYmplY3RFeHRlbnNpb25zLk1vZHVsZUV4dGVuc2lvbkR0bykpXG4gICAgICAgIC5lbnRpdGllcztcbiAgICB9KSxcbiAgICBtYXAoZW50aXRpZXMgPT4gKGlzVW5kZWZpbmVkKGVudGl0aWVzKSA/IHt9IDogZW50aXRpZXMpKSxcbiAgICBmaWx0ZXI8T2JqZWN0RXh0ZW5zaW9ucy5FbnRpdHlFeHRlbnNpb25zPihCb29sZWFuKSxcbiAgICB0YWtlKDEpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwRW50aXRpZXNUb0NvbnRyaWJ1dG9yczxUID0gYW55PihcbiAgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcbiAgcmVzb3VyY2U6IHN0cmluZyxcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBzd2l0Y2hNYXAoKGVudGl0aWVzOiBhbnkpID0+XG4gICAgICB6aXAoc2VsZWN0TG9jYWxpemF0aW9uKGNvbmZpZ1N0YXRlKSwgc2VsZWN0RW51bXMoY29uZmlnU3RhdGUpKS5waXBlKFxuICAgICAgICBtYXAoKFtsb2NhbGl6YXRpb24sIGVudW1zXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdlbmVyYXRlRGlzcGxheU5hbWUgPSBjcmVhdGVEaXNwbGF5TmFtZUxvY2FsaXphdGlvblBpcGVLZXlHZW5lcmF0b3IobG9jYWxpemF0aW9uKTtcblxuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRpdGllcykucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywga2V5OiBrZXlvZiBPYmplY3RFeHRlbnNpb25zLkVudGl0eUV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgICAgICAgYWNjLnByb3Bba2V5XSA9IFtdO1xuICAgICAgICAgICAgICBhY2MuY3JlYXRlRm9ybVtrZXldID0gW107XG4gICAgICAgICAgICAgIGFjYy5lZGl0Rm9ybVtrZXldID0gW107XG5cbiAgICAgICAgICAgICAgY29uc3QgZW50aXR5OiBPYmplY3RFeHRlbnNpb25zLkVudGl0eUV4dGVuc2lvbkR0byA9IGVudGl0aWVzW2tleV07XG4gICAgICAgICAgICAgIGlmICghZW50aXR5KSByZXR1cm4gYWNjO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHkucHJvcGVydGllcztcbiAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm4gYWNjO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1hcFByb3BlcnRpZXNUb0NvbnRyaWJ1dG9ycyA9IGNyZWF0ZVByb3BlcnRpZXNUb0NvbnRyaWJ1dG9yc01hcHBlcjxUPihcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZURpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICAgICAgIGVudW1zLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtYXBQcm9wZXJ0aWVzVG9Db250cmlidXRvcnMocHJvcGVydGllcywgYWNjLCBrZXkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJvcDoge30sXG4gICAgICAgICAgICAgIGNyZWF0ZUZvcm06IHt9LFxuICAgICAgICAgICAgICBlZGl0Rm9ybToge30sXG4gICAgICAgICAgICB9IGFzIE9iamVjdEV4dGVuc2lvbnMuUHJvcENvbnRyaWJ1dG9ycyxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKSxcbiAgICB0YWtlKDEpLFxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0aWVzVG9Db250cmlidXRvcnNNYXBwZXI8VCA9IGFueT4oXG4gIGdlbmVyYXRlRGlzcGxheU5hbWU6IE9iamVjdEV4dGVuc2lvbnMuRGlzcGxheU5hbWVHZW5lcmF0b3JGbixcbiAgcmVzb3VyY2U6IHN0cmluZyxcbiAgZW51bXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdEV4dGVuc2lvbnMuRXh0ZW5zaW9uRW51bUR0bz4sXG4pIHtcbiAgcmV0dXJuIChcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3RFeHRlbnNpb25zLkVudGl0eUV4dGVuc2lvblByb3BlcnRpZXMsXG4gICAgY29udHJpYnV0b3JzOiBPYmplY3RFeHRlbnNpb25zLlByb3BDb250cmlidXRvcnM8VD4sXG4gICAga2V5OiBzdHJpbmcsXG4gICkgPT4ge1xuICAgIGNvbnN0IGlzRXh0cmEgPSB0cnVlO1xuICAgIGNvbnN0IGdlbmVyYXRlVHlwZWFoZWFkRGlzcGxheU5hbWUgPSBjcmVhdGVUeXBlYWhlYWREaXNwbGF5TmFtZUdlbmVyYXRvcihcbiAgICAgIGdlbmVyYXRlRGlzcGxheU5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICk7XG5cbiAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1tuYW1lXTtcbiAgICAgIGNvbnN0IHByb3BOYW1lID0gbmFtZTtcbiAgICAgIGNvbnN0IGxvb2t1cCA9IHByb3BlcnR5LnVpLmxvb2t1cCB8fCAoe30gYXMgRXh0ZW5zaW9uUHJvcGVydHlVaUxvb2t1cER0byk7XG4gICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZWFoZWFkVHlwZShsb29rdXAsIG5hbWUpIHx8IGdldFR5cGVGcm9tUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgY29uc3QgZ2VuZXJhdGVETiA9IGhhc1R5cGVhaGVhZFRleHRTdWZmaXgobmFtZSlcbiAgICAgICAgPyBnZW5lcmF0ZVR5cGVhaGVhZERpc3BsYXlOYW1lXG4gICAgICAgIDogZ2VuZXJhdGVEaXNwbGF5TmFtZTtcbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gZ2VuZXJhdGVETihwcm9wZXJ0eS5kaXNwbGF5TmFtZSwgeyBuYW1lLCByZXNvdXJjZSB9KTtcblxuICAgICAgaWYgKHByb3BlcnR5LnVpLm9uVGFibGUuaXNWaXNpYmxlKSB7XG4gICAgICAgIGNvbnN0IHNvcnRhYmxlID0gQm9vbGVhbihwcm9wZXJ0eS51aS5vblRhYmxlLmlzU29ydGFibGUpO1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHR5cGUgPT09IGVQcm9wVHlwZS5Cb29sZWFuID8gMTUwIDogMjUwO1xuICAgICAgICBjb25zdCB2YWx1ZVJlc29sdmVyID1cbiAgICAgICAgICB0eXBlID09PSBlUHJvcFR5cGUuRW51bVxuICAgICAgICAgICAgPyBjcmVhdGVFbnVtVmFsdWVSZXNvbHZlcihwcm9wZXJ0eS50eXBlLCBlbnVtc1twcm9wZXJ0eS50eXBlXSwgcHJvcE5hbWUpXG4gICAgICAgICAgICA6IGNyZWF0ZUV4dHJhUHJvcGVydHlWYWx1ZVJlc29sdmVyPFQ+KHByb3BOYW1lKTtcblxuICAgICAgICBjb25zdCBlbnRpdHlQcm9wID0gbmV3IEVudGl0eVByb3A8VD4oe1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgbmFtZTogcHJvcE5hbWUsXG4gICAgICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgY29sdW1uV2lkdGgsXG4gICAgICAgICAgdmFsdWVSZXNvbHZlcixcbiAgICAgICAgICBpc0V4dHJhLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjb250cmlidXRvciA9IChwcm9wTGlzdDogRW50aXR5UHJvcExpc3Q8VD4pID0+IHByb3BMaXN0LmFkZFRhaWwoZW50aXR5UHJvcCk7XG4gICAgICAgIGNvbnRyaWJ1dG9ycy5wcm9wW2tleV0ucHVzaChjb250cmlidXRvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzT25DcmVhdGVGb3JtID0gcHJvcGVydHkudWkub25DcmVhdGVGb3JtLmlzVmlzaWJsZTtcbiAgICAgIGNvbnN0IGlzT25FZGl0Rm9ybSA9IHByb3BlcnR5LnVpLm9uRWRpdEZvcm0uaXNWaXNpYmxlO1xuXG4gICAgICBpZiAoaXNPbkNyZWF0ZUZvcm0gfHwgaXNPbkVkaXRGb3JtKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHByb3BlcnR5LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9ICgpID0+IGdldFZhbGlkYXRvcnNGcm9tUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICBsZXQgb3B0aW9uczogUHJvcENhbGxiYWNrPGFueSwgT2JzZXJ2YWJsZTxBQlAuT3B0aW9uPGFueT5bXT4+IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodHlwZSA9PT0gZVByb3BUeXBlLkVudW0pXG4gICAgICAgICAgb3B0aW9ucyA9IGNyZWF0ZUVudW1PcHRpb25zKHByb3BOYW1lLCBlbnVtc1twcm9wZXJ0eS50eXBlIHx8ICcnXSk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IGVQcm9wVHlwZS5UeXBlYWhlYWQpIG9wdGlvbnMgPSBjcmVhdGVUeXBlYWhlYWRPcHRpb25zKGxvb2t1cCk7XG5cbiAgICAgICAgY29uc3QgZm9ybVByb3AgPSBuZXcgRm9ybVByb3Aoe1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgbmFtZTogcHJvcE5hbWUsXG4gICAgICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgICBpc0V4dHJhLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmb3JtQ29udHJpYnV0b3IgPSAocHJvcExpc3Q6IEZvcm1Qcm9wTGlzdDxUPikgPT4gcHJvcExpc3QuYWRkVGFpbChmb3JtUHJvcCk7XG5cbiAgICAgICAgaWYgKGlzT25DcmVhdGVGb3JtKSBjb250cmlidXRvcnMuY3JlYXRlRm9ybVtrZXldLnB1c2goZm9ybUNvbnRyaWJ1dG9yKTtcbiAgICAgICAgaWYgKGlzT25FZGl0Rm9ybSkgY29udHJpYnV0b3JzLmVkaXRGb3JtW2tleV0ucHVzaChmb3JtQ29udHJpYnV0b3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnRyaWJ1dG9ycztcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUZyb21Qcm9wZXJ0eShwcm9wZXJ0eTogT2JqZWN0RXh0ZW5zaW9ucy5FeHRlbnNpb25Qcm9wZXJ0eUR0byk6IGVQcm9wVHlwZSB7XG4gIHJldHVybiBwcm9wZXJ0eT8udHlwZVNpbXBsZT8ucmVwbGFjZSgvXFw/JC8sICcnKSBhcyBzdHJpbmcgYXMgZVByb3BUeXBlO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChvYmo6IGFueSk6IG9iaiBpcyB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCc7XG59XG4iXX0=
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import { RestService } from '@abp/ng.core';
|
|
2
|
-
import { of } from 'rxjs';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
const TYPEAHEAD_TEXT_SUFFIX = '_Text';
|
|
5
|
-
const TYPEAHEAD_TEXT_SUFFIX_REGEX = /_Text$/;
|
|
6
|
-
export function createTypeaheadOptions(lookup) {
|
|
7
|
-
return (data, searchText) => searchText && data
|
|
8
|
-
? data
|
|
9
|
-
.getInjected(RestService)
|
|
10
|
-
.request({
|
|
11
|
-
method: 'GET',
|
|
12
|
-
url: lookup.url || '',
|
|
13
|
-
params: {
|
|
14
|
-
[lookup.filterParamName || '']: searchText,
|
|
15
|
-
},
|
|
16
|
-
}, { apiName: 'Default' })
|
|
17
|
-
.pipe(map((response) => {
|
|
18
|
-
const list = response[lookup.resultListPropertyName || ''];
|
|
19
|
-
const mapToOption = (item) => ({
|
|
20
|
-
key: item[lookup.displayPropertyName || ''],
|
|
21
|
-
value: item[lookup.valuePropertyName || ''],
|
|
22
|
-
});
|
|
23
|
-
return list.map(mapToOption);
|
|
24
|
-
}))
|
|
25
|
-
: of([]);
|
|
26
|
-
}
|
|
27
|
-
export function getTypeaheadType(lookup, name) {
|
|
28
|
-
return Boolean(lookup.url)
|
|
29
|
-
? "typeahead" /* Typeahead */
|
|
30
|
-
: name.endsWith(TYPEAHEAD_TEXT_SUFFIX)
|
|
31
|
-
? "hidden" /* Hidden */
|
|
32
|
-
: undefined;
|
|
33
|
-
}
|
|
34
|
-
export function createTypeaheadDisplayNameGenerator(displayNameGeneratorFn, properties) {
|
|
35
|
-
return (displayName, fallback) => {
|
|
36
|
-
const name = removeTypeaheadTextSuffix(fallback.name || '');
|
|
37
|
-
return displayNameGeneratorFn(displayName || properties[name].displayName, {
|
|
38
|
-
name,
|
|
39
|
-
resource: fallback.resource,
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
export function addTypeaheadTextSuffix(name) {
|
|
44
|
-
return name + TYPEAHEAD_TEXT_SUFFIX;
|
|
45
|
-
}
|
|
46
|
-
export function hasTypeaheadTextSuffix(name) {
|
|
47
|
-
return TYPEAHEAD_TEXT_SUFFIX_REGEX.test(name);
|
|
48
|
-
}
|
|
49
|
-
export function removeTypeaheadTextSuffix(name) {
|
|
50
|
-
return name.replace(TYPEAHEAD_TEXT_SUFFIX_REGEX, '');
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { RestService } from '@abp/ng.core';
|
|
2
|
+
import { of } from 'rxjs';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
const TYPEAHEAD_TEXT_SUFFIX = '_Text';
|
|
5
|
+
const TYPEAHEAD_TEXT_SUFFIX_REGEX = /_Text$/;
|
|
6
|
+
export function createTypeaheadOptions(lookup) {
|
|
7
|
+
return (data, searchText) => searchText && data
|
|
8
|
+
? data
|
|
9
|
+
.getInjected(RestService)
|
|
10
|
+
.request({
|
|
11
|
+
method: 'GET',
|
|
12
|
+
url: lookup.url || '',
|
|
13
|
+
params: {
|
|
14
|
+
[lookup.filterParamName || '']: searchText,
|
|
15
|
+
},
|
|
16
|
+
}, { apiName: 'Default' })
|
|
17
|
+
.pipe(map((response) => {
|
|
18
|
+
const list = response[lookup.resultListPropertyName || ''];
|
|
19
|
+
const mapToOption = (item) => ({
|
|
20
|
+
key: item[lookup.displayPropertyName || ''],
|
|
21
|
+
value: item[lookup.valuePropertyName || ''],
|
|
22
|
+
});
|
|
23
|
+
return list.map(mapToOption);
|
|
24
|
+
}))
|
|
25
|
+
: of([]);
|
|
26
|
+
}
|
|
27
|
+
export function getTypeaheadType(lookup, name) {
|
|
28
|
+
return Boolean(lookup.url)
|
|
29
|
+
? "typeahead" /* Typeahead */
|
|
30
|
+
: name.endsWith(TYPEAHEAD_TEXT_SUFFIX)
|
|
31
|
+
? "hidden" /* Hidden */
|
|
32
|
+
: undefined;
|
|
33
|
+
}
|
|
34
|
+
export function createTypeaheadDisplayNameGenerator(displayNameGeneratorFn, properties) {
|
|
35
|
+
return (displayName, fallback) => {
|
|
36
|
+
const name = removeTypeaheadTextSuffix(fallback.name || '');
|
|
37
|
+
return displayNameGeneratorFn(displayName || properties[name].displayName, {
|
|
38
|
+
name,
|
|
39
|
+
resource: fallback.resource,
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function addTypeaheadTextSuffix(name) {
|
|
44
|
+
return name + TYPEAHEAD_TEXT_SUFFIX;
|
|
45
|
+
}
|
|
46
|
+
export function hasTypeaheadTextSuffix(name) {
|
|
47
|
+
return TYPEAHEAD_TEXT_SUFFIX_REGEX.test(name);
|
|
48
|
+
}
|
|
49
|
+
export function removeTypeaheadTextSuffix(name) {
|
|
50
|
+
return name.replace(TYPEAHEAD_TEXT_SUFFIX_REGEX, '');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvZXh0ZW5zaW9ucy9zcmMvbGliL3V0aWxzL3R5cGVhaGVhZC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUMsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlFLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3JDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDO0FBQ3RDLE1BQU0sMkJBQTJCLEdBQUcsUUFBUSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsTUFBb0M7SUFFcEMsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUMxQixVQUFVLElBQUksSUFBSTtRQUNoQixDQUFDLENBQUMsSUFBSTthQUNELFdBQVcsQ0FBQyxXQUFXLENBQUM7YUFDeEIsT0FBTyxDQUNOO1lBQ0UsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTixDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVTthQUMzQztTQUNGLEVBQ0QsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQ3ZCO2FBQ0EsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztnQkFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO2FBQzVDLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSDtRQUNMLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQW9DLEVBQUUsSUFBWTtJQUNqRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLG1DQUFtQyxDQUNqRCxzQkFBK0QsRUFDL0QsVUFBc0Q7SUFFdEQsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUMvQixNQUFNLElBQUksR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sc0JBQXNCLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDekUsSUFBSTtZQUNKLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQVk7SUFDakQsT0FBTyxJQUFJLEdBQUcscUJBQXFCLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFZO0lBQ2pELE9BQU8sMkJBQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBWTtJQUNwRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFCUCwgRXh0ZW5zaW9uUHJvcGVydHlVaUxvb2t1cER0bywgUmVzdFNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGVQcm9wVHlwZSB9IGZyb20gJy4uL2VudW1zL3Byb3BzLmVudW0nO1xuaW1wb3J0IHsgT2JqZWN0RXh0ZW5zaW9ucyB9IGZyb20gJy4uL21vZGVscy9vYmplY3QtZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBQcm9wQ2FsbGJhY2sgfSBmcm9tICcuLi9tb2RlbHMvcHJvcHMnO1xuXG5jb25zdCBUWVBFQUhFQURfVEVYVF9TVUZGSVggPSAnX1RleHQnO1xuY29uc3QgVFlQRUFIRUFEX1RFWFRfU1VGRklYX1JFR0VYID0gL19UZXh0JC87XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlYWhlYWRPcHRpb25zKFxuICBsb29rdXA6IEV4dGVuc2lvblByb3BlcnR5VWlMb29rdXBEdG8sXG4pOiBQcm9wQ2FsbGJhY2s8YW55LCBPYnNlcnZhYmxlPEFCUC5PcHRpb248YW55PltdPj4ge1xuICByZXR1cm4gKGRhdGEsIHNlYXJjaFRleHQpID0+XG4gICAgc2VhcmNoVGV4dCAmJiBkYXRhXG4gICAgICA/IGRhdGFcbiAgICAgICAgICAuZ2V0SW5qZWN0ZWQoUmVzdFNlcnZpY2UpXG4gICAgICAgICAgLnJlcXVlc3QoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgIHVybDogbG9va3VwLnVybCB8fCAnJyxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgW2xvb2t1cC5maWx0ZXJQYXJhbU5hbWUgfHwgJyddOiBzZWFyY2hUZXh0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYXBpTmFtZTogJ0RlZmF1bHQnIH0sXG4gICAgICAgICAgKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpc3QgPSByZXNwb25zZVtsb29rdXAucmVzdWx0TGlzdFByb3BlcnR5TmFtZSB8fCAnJ107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcFRvT3B0aW9uID0gKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBrZXk6IGl0ZW1bbG9va3VwLmRpc3BsYXlQcm9wZXJ0eU5hbWUgfHwgJyddLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW2xvb2t1cC52YWx1ZVByb3BlcnR5TmFtZSB8fCAnJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gbGlzdC5tYXAobWFwVG9PcHRpb24pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgOiBvZihbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlYWhlYWRUeXBlKGxvb2t1cDogRXh0ZW5zaW9uUHJvcGVydHlVaUxvb2t1cER0bywgbmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBCb29sZWFuKGxvb2t1cC51cmwpXG4gICAgPyBlUHJvcFR5cGUuVHlwZWFoZWFkXG4gICAgOiBuYW1lLmVuZHNXaXRoKFRZUEVBSEVBRF9URVhUX1NVRkZJWClcbiAgICA/IGVQcm9wVHlwZS5IaWRkZW5cbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGVhaGVhZERpc3BsYXlOYW1lR2VuZXJhdG9yKFxuICBkaXNwbGF5TmFtZUdlbmVyYXRvckZuOiBPYmplY3RFeHRlbnNpb25zLkRpc3BsYXlOYW1lR2VuZXJhdG9yRm4sXG4gIHByb3BlcnRpZXM6IE9iamVjdEV4dGVuc2lvbnMuRW50aXR5RXh0ZW5zaW9uUHJvcGVydGllcyxcbik6IE9iamVjdEV4dGVuc2lvbnMuRGlzcGxheU5hbWVHZW5lcmF0b3JGbiB7XG4gIHJldHVybiAoZGlzcGxheU5hbWUsIGZhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHJlbW92ZVR5cGVhaGVhZFRleHRTdWZmaXgoZmFsbGJhY2submFtZSB8fCAnJyk7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lR2VuZXJhdG9yRm4oZGlzcGxheU5hbWUgfHwgcHJvcGVydGllc1tuYW1lXS5kaXNwbGF5TmFtZSwge1xuICAgICAgbmFtZSxcbiAgICAgIHJlc291cmNlOiBmYWxsYmFjay5yZXNvdXJjZSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFR5cGVhaGVhZFRleHRTdWZmaXgobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBuYW1lICsgVFlQRUFIRUFEX1RFWFRfU1VGRklYO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVHlwZWFoZWFkVGV4dFN1ZmZpeChuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIFRZUEVBSEVBRF9URVhUX1NVRkZJWF9SRUdFWC50ZXN0KG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVHlwZWFoZWFkVGV4dFN1ZmZpeChuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZShUWVBFQUhFQURfVEVYVF9TVUZGSVhfUkVHRVgsICcnKTtcbn1cbiJdfQ==
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { AbpValidators } from '@abp/ng.core';
|
|
2
|
-
export function getValidatorsFromProperty(property) {
|
|
3
|
-
const validators = [];
|
|
4
|
-
property.attributes.forEach(attr => {
|
|
5
|
-
if (attr.typeSimple && attr.typeSimple in AbpValidators) {
|
|
6
|
-
validators.push(AbpValidators[attr.typeSimple](attr.config));
|
|
7
|
-
}
|
|
8
|
-
});
|
|
9
|
-
return validators;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { AbpValidators } from '@abp/ng.core';
|
|
2
|
+
export function getValidatorsFromProperty(property) {
|
|
3
|
+
const validators = [];
|
|
4
|
+
property.attributes.forEach(attr => {
|
|
5
|
+
if (attr.typeSimple && attr.typeSimple in AbpValidators) {
|
|
6
|
+
validators.push(AbpValidators[attr.typeSimple](attr.config));
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
return validators;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL2V4dGVuc2lvbnMvc3JjL2xpYi91dGlscy92YWxpZGF0aW9uLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUk3QyxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLFFBQStDO0lBRS9DLE1BQU0sVUFBVSxHQUFrQixFQUFFLENBQUM7SUFFckMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksYUFBYSxFQUFFO1lBQ3ZELFVBQVUsQ0FBQyxJQUFJLENBQUUsYUFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnBWYWxpZGF0b3JzIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JqZWN0RXh0ZW5zaW9ucyB9IGZyb20gJy4uL21vZGVscy9vYmplY3QtZXh0ZW5zaW9ucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzRnJvbVByb3BlcnR5KFxuICBwcm9wZXJ0eTogT2JqZWN0RXh0ZW5zaW9ucy5FeHRlbnNpb25Qcm9wZXJ0eUR0byxcbik6IFZhbGlkYXRvckZuW10ge1xuICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgcHJvcGVydHkuYXR0cmlidXRlcy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgIGlmIChhdHRyLnR5cGVTaW1wbGUgJiYgYXR0ci50eXBlU2ltcGxlIGluIEFicFZhbGlkYXRvcnMpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCgoQWJwVmFsaWRhdG9ycyBhcyBhbnkpW2F0dHIudHlwZVNpbXBsZV0oYXR0ci5jb25maWcpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB2YWxpZGF0b3JzO1xufVxuIl19
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
export * from './lib/adapters/date-time.adapter';
|
|
2
|
-
export * from './lib/adapters/date.adapter';
|
|
3
|
-
export * from './lib/adapters/time.adapter';
|
|
4
|
-
export * from './lib/components/date-time-picker/date-time-picker.component';
|
|
5
|
-
export * from './lib/components/extensible-form/extensible-form-prop.component';
|
|
6
|
-
export * from './lib/components/extensible-form/extensible-form.component';
|
|
7
|
-
export * from './lib/components/extensible-table/extensible-table.component';
|
|
8
|
-
export * from './lib/components/grid-actions/grid-actions.component';
|
|
9
|
-
export * from './lib/components/page-toolbar/page-toolbar.component';
|
|
10
|
-
export * from './lib/constants/extra-properties';
|
|
11
|
-
export * from './lib/directives/disabled.directive';
|
|
12
|
-
export * from './lib/directives/prop-data.directive';
|
|
13
|
-
export * from './lib/enums/props.enum';
|
|
14
|
-
export { ActionList, } from './lib/models/actions';
|
|
15
|
-
export { EntityAction, EntityActionList, EntityActions, EntityActionsFactory, } from './lib/models/entity-actions';
|
|
16
|
-
export { EntityProp, EntityPropList, EntityProps, EntityPropsFactory, } from './lib/models/entity-props';
|
|
17
|
-
export { CreateFormPropsFactory, EditFormPropsFactory, FormProp, FormPropData, FormPropList, FormProps, } from './lib/models/form-props';
|
|
18
|
-
export * from './lib/models/object-extensions';
|
|
19
|
-
export { PropList, } from './lib/models/props';
|
|
20
|
-
export { ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory, ToolbarComponent, } from './lib/models/toolbar-actions';
|
|
21
|
-
export * from './lib/services/extensions.service';
|
|
22
|
-
export * from './lib/tokens/extensions.token';
|
|
23
|
-
export * from './lib/ui-extensions.module';
|
|
24
|
-
export * from './lib/utils/actions.util';
|
|
25
|
-
export * from './lib/utils/form-props.util';
|
|
26
|
-
export * from './lib/utils/props.util';
|
|
27
|
-
export * from './lib/utils/state.util';
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './lib/adapters/date-time.adapter';
|
|
2
|
+
export * from './lib/adapters/date.adapter';
|
|
3
|
+
export * from './lib/adapters/time.adapter';
|
|
4
|
+
export * from './lib/components/date-time-picker/date-time-picker.component';
|
|
5
|
+
export * from './lib/components/extensible-form/extensible-form-prop.component';
|
|
6
|
+
export * from './lib/components/extensible-form/extensible-form.component';
|
|
7
|
+
export * from './lib/components/extensible-table/extensible-table.component';
|
|
8
|
+
export * from './lib/components/grid-actions/grid-actions.component';
|
|
9
|
+
export * from './lib/components/page-toolbar/page-toolbar.component';
|
|
10
|
+
export * from './lib/constants/extra-properties';
|
|
11
|
+
export * from './lib/directives/disabled.directive';
|
|
12
|
+
export * from './lib/directives/prop-data.directive';
|
|
13
|
+
export * from './lib/enums/props.enum';
|
|
14
|
+
export { ActionList, } from './lib/models/actions';
|
|
15
|
+
export { EntityAction, EntityActionList, EntityActions, EntityActionsFactory, } from './lib/models/entity-actions';
|
|
16
|
+
export { EntityProp, EntityPropList, EntityProps, EntityPropsFactory, } from './lib/models/entity-props';
|
|
17
|
+
export { CreateFormPropsFactory, EditFormPropsFactory, FormProp, FormPropData, FormPropList, FormProps, } from './lib/models/form-props';
|
|
18
|
+
export * from './lib/models/object-extensions';
|
|
19
|
+
export { PropList, } from './lib/models/props';
|
|
20
|
+
export { ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory, ToolbarComponent, } from './lib/models/toolbar-actions';
|
|
21
|
+
export * from './lib/services/extensions.service';
|
|
22
|
+
export * from './lib/tokens/extensions.token';
|
|
23
|
+
export * from './lib/ui-extensions.module';
|
|
24
|
+
export * from './lib/utils/actions.util';
|
|
25
|
+
export * from './lib/utils/form-props.util';
|
|
26
|
+
export * from './lib/utils/props.util';
|
|
27
|
+
export * from './lib/utils/state.util';
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9leHRlbnNpb25zL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBRVosZ0JBQWdCLEVBRWhCLGFBQWEsRUFDYixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsVUFBVSxFQUVWLGNBQWMsRUFFZCxXQUFXLEVBQ1gsa0JBQWtCLEdBQ25CLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLFlBQVksRUFDWixZQUFZLEVBRVosU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFDakMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBRUwsUUFBUSxHQUdULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGFBQWEsRUFFYixpQkFBaUIsRUFFakIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixnQkFBZ0IsR0FFakIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYWRhcHRlcnMvZGF0ZS10aW1lLmFkYXB0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWRhcHRlcnMvZGF0ZS5hZGFwdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FkYXB0ZXJzL3RpbWUuYWRhcHRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHRlbnNpYmxlLWZvcm0vZXh0ZW5zaWJsZS1mb3JtLXByb3AuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXh0ZW5zaWJsZS1mb3JtL2V4dGVuc2libGUtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHRlbnNpYmxlLXRhYmxlL2V4dGVuc2libGUtdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZ3JpZC1hY3Rpb25zL2dyaWQtYWN0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wYWdlLXRvb2xiYXIvcGFnZS10b29sYmFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25zdGFudHMvZXh0cmEtcHJvcGVydGllcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2Rpc2FibGVkLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3Byb3AtZGF0YS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW51bXMvcHJvcHMuZW51bSc7XG5leHBvcnQge1xuICBBY3Rpb25DYWxsYmFjayxcbiAgQWN0aW9uTGlzdCxcbiAgQWN0aW9uUHJlZGljYXRlLFxuICBSZWFkb25seUFjdGlvbkRhdGEgYXMgQWN0aW9uRGF0YSxcbn0gZnJvbSAnLi9saWIvbW9kZWxzL2FjdGlvbnMnO1xuZXhwb3J0IHtcbiAgRW50aXR5QWN0aW9uLFxuICBFbnRpdHlBY3Rpb25Db250cmlidXRvckNhbGxiYWNrLFxuICBFbnRpdHlBY3Rpb25MaXN0LFxuICBFbnRpdHlBY3Rpb25PcHRpb25zLFxuICBFbnRpdHlBY3Rpb25zLFxuICBFbnRpdHlBY3Rpb25zRmFjdG9yeSxcbn0gZnJvbSAnLi9saWIvbW9kZWxzL2VudGl0eS1hY3Rpb25zJztcbmV4cG9ydCB7XG4gIEVudGl0eVByb3AsXG4gIEVudGl0eVByb3BDb250cmlidXRvckNhbGxiYWNrLFxuICBFbnRpdHlQcm9wTGlzdCxcbiAgRW50aXR5UHJvcE9wdGlvbnMsXG4gIEVudGl0eVByb3BzLFxuICBFbnRpdHlQcm9wc0ZhY3RvcnksXG59IGZyb20gJy4vbGliL21vZGVscy9lbnRpdHktcHJvcHMnO1xuZXhwb3J0IHtcbiAgQ3JlYXRlRm9ybVByb3BDb250cmlidXRvckNhbGxiYWNrLFxuICBDcmVhdGVGb3JtUHJvcHNGYWN0b3J5LFxuICBFZGl0Rm9ybVByb3BDb250cmlidXRvckNhbGxiYWNrLFxuICBFZGl0Rm9ybVByb3BzRmFjdG9yeSxcbiAgRm9ybVByb3AsXG4gIEZvcm1Qcm9wRGF0YSxcbiAgRm9ybVByb3BMaXN0LFxuICBGb3JtUHJvcE9wdGlvbnMsXG4gIEZvcm1Qcm9wcyxcbn0gZnJvbSAnLi9saWIvbW9kZWxzL2Zvcm0tcHJvcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL29iamVjdC1leHRlbnNpb25zJztcbmV4cG9ydCB7XG4gIFByb3BDYWxsYmFjayxcbiAgUHJvcExpc3QsXG4gIFByb3BQcmVkaWNhdGUsXG4gIFJlYWRvbmx5UHJvcERhdGEgYXMgUHJvcERhdGEsXG59IGZyb20gJy4vbGliL21vZGVscy9wcm9wcyc7XG5leHBvcnQge1xuICBUb29sYmFyQWN0aW9uLFxuICBUb29sYmFyQWN0aW9uQ29udHJpYnV0b3JDYWxsYmFjayxcbiAgVG9vbGJhckFjdGlvbkxpc3QsXG4gIFRvb2xiYXJBY3Rpb25PcHRpb25zLFxuICBUb29sYmFyQWN0aW9ucyxcbiAgVG9vbGJhckFjdGlvbnNGYWN0b3J5LFxuICBUb29sYmFyQ29tcG9uZW50LFxuICBUb29sYmFyQ29tcG9uZW50T3B0aW9ucyxcbn0gZnJvbSAnLi9saWIvbW9kZWxzL3Rvb2xiYXItYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9leHRlbnNpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zL2V4dGVuc2lvbnMudG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdWktZXh0ZW5zaW9ucy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYWN0aW9ucy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2Zvcm0tcHJvcHMudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9wcm9wcy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3N0YXRlLnV0aWwnO1xuIl19
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { animate, animation, keyframes, style } from '@angular/animations';
|
|
2
|
-
export const bounceIn = animation([
|
|
3
|
-
style({ opacity: '0', display: '{{ display }}' }),
|
|
4
|
-
animate('{{ time}} {{ easing }}', keyframes([
|
|
5
|
-
style({ opacity: '0', transform: '{{ transform }} scale(0.0)', offset: 0 }),
|
|
6
|
-
style({ opacity: '0', transform: '{{ transform }} scale(0.8)', offset: 0.5 }),
|
|
7
|
-
style({ opacity: '1', transform: '{{ transform }} scale(1.0)', offset: 1 }),
|
|
8
|
-
])),
|
|
9
|
-
], {
|
|
10
|
-
params: {
|
|
11
|
-
time: '350ms',
|
|
12
|
-
easing: 'cubic-bezier(.7,.31,.72,1.47)',
|
|
13
|
-
display: 'block',
|
|
14
|
-
transform: 'translate(-50%, -50%)',
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { animate, animation, keyframes, style } from '@angular/animations';
|
|
2
|
+
export const bounceIn = animation([
|
|
3
|
+
style({ opacity: '0', display: '{{ display }}' }),
|
|
4
|
+
animate('{{ time}} {{ easing }}', keyframes([
|
|
5
|
+
style({ opacity: '0', transform: '{{ transform }} scale(0.0)', offset: 0 }),
|
|
6
|
+
style({ opacity: '0', transform: '{{ transform }} scale(0.8)', offset: 0.5 }),
|
|
7
|
+
style({ opacity: '1', transform: '{{ transform }} scale(1.0)', offset: 1 }),
|
|
8
|
+
])),
|
|
9
|
+
], {
|
|
10
|
+
params: {
|
|
11
|
+
time: '350ms',
|
|
12
|
+
easing: 'cubic-bezier(.7,.31,.72,1.47)',
|
|
13
|
+
display: 'block',
|
|
14
|
+
transform: 'translate(-50%, -50%)',
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmNlLmFuaW1hdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9hbmltYXRpb25zL2JvdW5jZS5hbmltYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUMvQjtJQUNFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQ2pELE9BQU8sQ0FDTCx3QkFBd0IsRUFDeEIsU0FBUyxDQUFDO1FBQ1IsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzNFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3RSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDNUUsQ0FBQyxDQUNIO0NBQ0YsRUFDRDtJQUNFLE1BQU0sRUFBRTtRQUNOLElBQUksRUFBRSxPQUFPO1FBQ2IsTUFBTSxFQUFFLCtCQUErQjtRQUN2QyxPQUFPLEVBQUUsT0FBTztRQUNoQixTQUFTLEVBQUUsdUJBQXVCO0tBQ25DO0NBQ0YsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgYW5pbWF0aW9uLCBrZXlmcmFtZXMsIHN0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBib3VuY2VJbiA9IGFuaW1hdGlvbihcbiAgW1xuICAgIHN0eWxlKHsgb3BhY2l0eTogJzAnLCBkaXNwbGF5OiAne3sgZGlzcGxheSB9fScgfSksXG4gICAgYW5pbWF0ZShcbiAgICAgICd7eyB0aW1lfX0ge3sgZWFzaW5nIH19JyxcbiAgICAgIGtleWZyYW1lcyhbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzAnLCB0cmFuc2Zvcm06ICd7eyB0cmFuc2Zvcm0gfX0gc2NhbGUoMC4wKScsIG9mZnNldDogMCB9KSxcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAnMCcsIHRyYW5zZm9ybTogJ3t7IHRyYW5zZm9ybSB9fSBzY2FsZSgwLjgpJywgb2Zmc2V0OiAwLjUgfSksXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzEnLCB0cmFuc2Zvcm06ICd7eyB0cmFuc2Zvcm0gfX0gc2NhbGUoMS4wKScsIG9mZnNldDogMSB9KSxcbiAgICAgIF0pLFxuICAgICksXG4gIF0sXG4gIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIHRpbWU6ICczNTBtcycsXG4gICAgICBlYXNpbmc6ICdjdWJpYy1iZXppZXIoLjcsLjMxLC43MiwxLjQ3KScsXG4gICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKC01MCUsIC01MCUpJyxcbiAgICB9LFxuICB9LFxuKTtcbiJdfQ==
|