@theseam/ui-common 0.2.6 → 0.2.10
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/breadcrumbs/breadcrumb.d.ts +3 -1
- package/breadcrumbs/breadcrumbs/breadcrumbs.component.d.ts +2 -2
- package/breadcrumbs/breadcrumbs-resolver.d.ts +3 -1
- package/breadcrumbs/breadcrumbs.service.d.ts +15 -6
- package/breadcrumbs/theseam-ui-common-breadcrumbs.metadata.json +1 -1
- package/bundles/theseam-ui-common-breadcrumbs.umd.js +487 -16
- package/bundles/theseam-ui-common-breadcrumbs.umd.js.map +1 -1
- package/bundles/theseam-ui-common-data-exporter.umd.js.map +1 -1
- package/bundles/theseam-ui-common-datatable.umd.js +54 -4
- package/bundles/theseam-ui-common-datatable.umd.js.map +1 -1
- package/bundles/theseam-ui-common-framework.umd.js +2 -2
- package/bundles/theseam-ui-common-framework.umd.js.map +1 -1
- package/bundles/theseam-ui-common-shared.umd.js +20 -6
- package/bundles/theseam-ui-common-shared.umd.js.map +1 -1
- package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js +1 -0
- package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js.map +1 -1
- package/bundles/theseam-ui-common-utils.umd.js +82 -1
- package/bundles/theseam-ui-common-utils.umd.js.map +1 -1
- package/bundles/theseam-ui-common-validators.umd.js +54 -4
- package/bundles/theseam-ui-common-validators.umd.js.map +1 -1
- package/data-exporter/data-exporter.d.ts +4 -0
- package/data-exporter/theseam-ui-common-data-exporter.metadata.json +1 -1
- package/datatable/datatable/datatable.component.d.ts +2 -0
- package/datatable/datatable-footer/datatable-footer-tpl.directive.d.ts +5 -0
- package/datatable/datatable-footer/datatable-footer.directive.d.ts +6 -0
- package/datatable/public-api.d.ts +2 -0
- package/datatable/theseam-ui-common-datatable.metadata.json +1 -1
- package/esm2015/breadcrumbs/breadcrumb.js +1 -1
- package/esm2015/breadcrumbs/breadcrumbs/breadcrumbs.component.js +1 -1
- package/esm2015/breadcrumbs/breadcrumbs-resolver.js +1 -1
- package/esm2015/breadcrumbs/breadcrumbs.service.js +133 -15
- package/esm2015/data-exporter/data-exporter.js +1 -1
- package/esm2015/datatable/datatable/datatable.component.js +5 -3
- package/esm2015/datatable/datatable-export-button/datatable-export-button.component.js +8 -3
- package/esm2015/datatable/datatable-footer/datatable-footer-tpl.directive.js +15 -0
- package/esm2015/datatable/datatable-footer/datatable-footer.directive.js +18 -0
- package/esm2015/datatable/datatable.module.js +7 -1
- package/esm2015/datatable/public-api.js +3 -1
- package/esm2015/framework/side-nav/side-nav-item/side-nav-item.component.js +3 -3
- package/esm2015/shared/directives/ng-select-extra.directive.js +16 -3
- package/esm2015/shared/pipes/mask-chars.pipe.js +2 -2
- package/esm2015/unsaved-changes-dialog/unsaved-changes-can-deactivate.js +3 -2
- package/esm2015/utils/create-padding.js +17 -0
- package/esm2015/utils/form/is-empty-input-value.js +6 -0
- package/esm2015/utils/fractional-digits-count.js +19 -0
- package/esm2015/utils/is-numeric.js +4 -0
- package/esm2015/utils/pad-end.js +9 -0
- package/esm2015/utils/pad-start.js +9 -0
- package/esm2015/utils/public-api.js +7 -1
- package/esm2015/utils/router/index.js +3 -1
- package/esm2015/utils/router/is-empty-url-route.js +4 -0
- package/esm2015/utils/router/leaf-child-route.js +1 -1
- package/esm2015/utils/router/operators/activated-routes-with-data-property.js +3 -8
- package/esm2015/utils/router/will-have-data-prop.js +10 -0
- package/esm2015/validators/decimal.validator.js +25 -0
- package/esm2015/validators/integer.validator.js +25 -0
- package/esm2015/validators/public-api.js +3 -1
- package/fesm2015/theseam-ui-common-breadcrumbs.js +132 -14
- package/fesm2015/theseam-ui-common-breadcrumbs.js.map +1 -1
- package/fesm2015/theseam-ui-common-data-exporter.js.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.js +45 -5
- package/fesm2015/theseam-ui-common-datatable.js.map +1 -1
- package/fesm2015/theseam-ui-common-framework.js +2 -2
- package/fesm2015/theseam-ui-common-framework.js.map +1 -1
- package/fesm2015/theseam-ui-common-shared.js +15 -2
- package/fesm2015/theseam-ui-common-shared.js.map +1 -1
- package/fesm2015/theseam-ui-common-unsaved-changes-dialog.js +1 -0
- package/fesm2015/theseam-ui-common-unsaved-changes-dialog.js.map +1 -1
- package/fesm2015/theseam-ui-common-utils.js +71 -2
- package/fesm2015/theseam-ui-common-utils.js.map +1 -1
- package/fesm2015/theseam-ui-common-validators.js +49 -1
- package/fesm2015/theseam-ui-common-validators.js.map +1 -1
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +36 -9
- package/framework/theseam-ui-common-framework.metadata.json +1 -1
- package/package.json +1 -1
- package/shared/directives/ng-select-extra.directive.d.ts +1 -0
- package/shared/theseam-ui-common-shared.metadata.json +1 -1
- package/styles/common/_table.scss +0 -5
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +475 -87
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +173 -0
- package/styles/vendor/ngx-datatable/_themes/dark/_variables.scss +166 -0
- package/styles/vendor/ngx-datatable/_themes/material/_variables.scss +165 -0
- package/styles/vendor/ngx-datatable/_variables.scss +3 -0
- package/unsaved-changes-dialog/theseam-ui-common-unsaved-changes-dialog.metadata.json +1 -1
- package/utils/create-padding.d.ts +1 -0
- package/utils/form/is-empty-input-value.d.ts +1 -0
- package/utils/fractional-digits-count.d.ts +8 -0
- package/utils/is-numeric.d.ts +1 -0
- package/utils/pad-end.d.ts +1 -0
- package/utils/pad-start.d.ts +1 -0
- package/utils/public-api.d.ts +6 -0
- package/utils/router/index.d.ts +2 -0
- package/utils/router/is-empty-url-route.d.ts +2 -0
- package/utils/router/will-have-data-prop.d.ts +2 -0
- package/utils/theseam-ui-common-utils.metadata.json +1 -1
- package/validators/decimal.validator.d.ts +9 -0
- package/validators/integer.validator.d.ts +9 -0
- package/validators/public-api.d.ts +2 -0
- package/validators/theseam-ui-common-validators.metadata.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createPadding } from './create-padding';
|
|
2
|
+
export function padEnd(stringToPad, paddingLength = 0, paddingChars = ' ') {
|
|
3
|
+
const strLength = paddingLength ? stringToPad.length : 0;
|
|
4
|
+
if (!paddingLength || strLength >= paddingLength) {
|
|
5
|
+
return stringToPad;
|
|
6
|
+
}
|
|
7
|
+
return stringToPad + createPadding(paddingLength - strLength, paddingChars);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkLWVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi91dGlscy9wYWQtZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVoRCxNQUFNLFVBQVUsTUFBTSxDQUNwQixXQUFtQixFQUNuQixnQkFBb0MsQ0FBQyxFQUNyQyxlQUFtQyxHQUFHO0lBRXRDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXhELElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRTtRQUNoRCxPQUFPLFdBQVcsQ0FBQTtLQUNuQjtJQUVELE9BQU8sV0FBVyxHQUFHLGFBQWEsQ0FBQyxhQUFhLEdBQUcsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFBO0FBQzdFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVQYWRkaW5nIH0gZnJvbSAnLi9jcmVhdGUtcGFkZGluZydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZEVuZChcbiAgc3RyaW5nVG9QYWQ6IHN0cmluZyxcbiAgcGFkZGluZ0xlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMCxcbiAgcGFkZGluZ0NoYXJzOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnICdcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0ckxlbmd0aCA9IHBhZGRpbmdMZW5ndGggPyBzdHJpbmdUb1BhZC5sZW5ndGggOiAwXG5cbiAgaWYgKCFwYWRkaW5nTGVuZ3RoIHx8IHN0ckxlbmd0aCA+PSBwYWRkaW5nTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RvUGFkXG4gIH1cblxuICByZXR1cm4gc3RyaW5nVG9QYWQgKyBjcmVhdGVQYWRkaW5nKHBhZGRpbmdMZW5ndGggLSBzdHJMZW5ndGgsIHBhZGRpbmdDaGFycylcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createPadding } from './create-padding';
|
|
2
|
+
export function padStart(stringToPad, paddingLength = 0, paddingChars = ' ') {
|
|
3
|
+
const strLength = paddingLength ? stringToPad.length : 0;
|
|
4
|
+
if (!paddingLength || strLength >= paddingLength) {
|
|
5
|
+
return stringToPad;
|
|
6
|
+
}
|
|
7
|
+
return createPadding(paddingLength - strLength, paddingChars) + stringToPad;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkLXN0YXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL3V0aWxzL3BhZC1zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFaEQsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsV0FBbUIsRUFDbkIsZ0JBQW9DLENBQUMsRUFDckMsZUFBbUMsR0FBRztJQUV0QyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUV4RCxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsSUFBSSxhQUFhLEVBQUU7UUFDaEQsT0FBTyxXQUFXLENBQUE7S0FDbkI7SUFFRCxPQUFPLGFBQWEsQ0FBQyxhQUFhLEdBQUcsU0FBUyxFQUFFLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQTtBQUM3RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUGFkZGluZyB9IGZyb20gJy4vY3JlYXRlLXBhZGRpbmcnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRTdGFydChcbiAgc3RyaW5nVG9QYWQ6IHN0cmluZyxcbiAgcGFkZGluZ0xlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMCxcbiAgcGFkZGluZ0NoYXJzOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnICdcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0ckxlbmd0aCA9IHBhZGRpbmdMZW5ndGggPyBzdHJpbmdUb1BhZC5sZW5ndGggOiAwXG5cbiAgaWYgKCFwYWRkaW5nTGVuZ3RoIHx8IHN0ckxlbmd0aCA+PSBwYWRkaW5nTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RvUGFkXG4gIH1cblxuICByZXR1cm4gY3JlYXRlUGFkZGluZyhwYWRkaW5nTGVuZ3RoIC0gc3RyTGVuZ3RoLCBwYWRkaW5nQ2hhcnMpICsgc3RyaW5nVG9QYWRcbn1cbiJdfQ==
|
|
@@ -8,6 +8,7 @@ export * from './form/observe-control-value-change';
|
|
|
8
8
|
export * from './form/observe-control-value';
|
|
9
9
|
export * from './form/wait-on-non-pending-status';
|
|
10
10
|
export * from './form/has-required-control';
|
|
11
|
+
export * from './form/is-empty-input-value';
|
|
11
12
|
export * from './operators/index';
|
|
12
13
|
export * from './router/index';
|
|
13
14
|
export * from './calc-percentage';
|
|
@@ -29,4 +30,9 @@ export * from './subscriber-count';
|
|
|
29
30
|
export * from './has-property';
|
|
30
31
|
export * from './has-attribute';
|
|
31
32
|
export * from './observe-query-list';
|
|
32
|
-
|
|
33
|
+
export * from './pad-end';
|
|
34
|
+
export * from './pad-start';
|
|
35
|
+
export * from './create-padding';
|
|
36
|
+
export * from './is-numeric';
|
|
37
|
+
export * from './fractional-digits-count';
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi91dGlscy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUNBQW1DLENBQUE7QUFFakQsY0FBYyx5QkFBeUIsQ0FBQTtBQUN2QyxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYywrQkFBK0IsQ0FBQTtBQUM3QyxjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLG1DQUFtQyxDQUFBO0FBQ2pELGNBQWMsNkJBQTZCLENBQUE7QUFDM0MsY0FBYyw2QkFBNkIsQ0FBQTtBQUUzQyxjQUFjLG1CQUFtQixDQUFBO0FBRWpDLGNBQWMsZ0JBQWdCLENBQUE7QUFFOUIsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYyx3QkFBd0IsQ0FBQTtBQUN0QyxjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMseUJBQXlCLENBQUE7QUFDdkMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGtCQUFrQixDQUFBO0FBQ2hDLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsd0JBQXdCLENBQUE7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHNCQUFzQixDQUFBO0FBQ3BDLGNBQWMsV0FBVyxDQUFBO0FBQ3pCLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMsa0JBQWtCLENBQUE7QUFDaEMsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYywyQkFBMkIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2RrL2dldC1jbG9zZXN0LXdpZGdldC1jZGstZHJhZydcblxuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2dldC1jb250cm9sLW5hbWUnXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vZ2V0LWNvbnRyb2wtcGF0aCdcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS9vYnNlcnZlLWNvbnRyb2wtaXMtZGlmZmVyZW50J1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL29ic2VydmUtY29udHJvbC1zdGF0dXMnXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vb2JzZXJ2ZS1jb250cm9sLXZhbGlkJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL29ic2VydmUtY29udHJvbC12YWx1ZS1jaGFuZ2UnXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vb2JzZXJ2ZS1jb250cm9sLXZhbHVlJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL3dhaXQtb24tbm9uLXBlbmRpbmctc3RhdHVzJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2hhcy1yZXF1aXJlZC1jb250cm9sJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2lzLWVtcHR5LWlucHV0LXZhbHVlJ1xuXG5leHBvcnQgKiBmcm9tICcuL29wZXJhdG9ycy9pbmRleCdcblxuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXIvaW5kZXgnXG5cbmV4cG9ydCAqIGZyb20gJy4vY2FsYy1wZXJjZW50YWdlJ1xuZXhwb3J0ICogZnJvbSAnLi90b2dnbGUtYXR0cmlidXRlJ1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtYXR0cmlidXRlJ1xuZXhwb3J0ICogZnJvbSAnLi9pbnB1dC1tYXNrcydcbmV4cG9ydCAqIGZyb20gJy4vaXMtbnVsbC1vci11bmRlZmluZWQnXG5leHBvcnQgKiBmcm9tICcuL2xvYWQtc3R5bGUnXG5leHBvcnQgKiBmcm9tICcuL2xvYWQtc3R5bGUtc2hlZXQnXG5leHBvcnQgKiBmcm9tICcuL29iai11dGlscydcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS11dGlscydcbmV4cG9ydCAqIGZyb20gJy4vbm90LW51bGwtb3ItdW5kZWZpbmVkJ1xuZXhwb3J0ICogZnJvbSAnLi93YWl0LW9uLWNvbmRpdGlvbi1hc3luYydcbmV4cG9ydCAqIGZyb20gJy4vcG9sbGluZy10aWNrZXInXG5leHBvcnQgKiBmcm9tICcuL3JlZnJlc2hhYmxlJ1xuZXhwb3J0ICogZnJvbSAnLi93cmFwLWludG8tb2JzZXJ2YWJsZSdcbmV4cG9ydCAqIGZyb20gJy4vaXMtYWJzb2x1dGUtdXJsJ1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpYmVyLWNvdW50J1xuZXhwb3J0ICogZnJvbSAnLi9oYXMtcHJvcGVydHknXG5leHBvcnQgKiBmcm9tICcuL2hhcy1hdHRyaWJ1dGUnXG5leHBvcnQgKiBmcm9tICcuL29ic2VydmUtcXVlcnktbGlzdCdcbmV4cG9ydCAqIGZyb20gJy4vcGFkLWVuZCdcbmV4cG9ydCAqIGZyb20gJy4vcGFkLXN0YXJ0J1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtcGFkZGluZydcbmV4cG9ydCAqIGZyb20gJy4vaXMtbnVtZXJpYydcbmV4cG9ydCAqIGZyb20gJy4vZnJhY3Rpb25hbC1kaWdpdHMtY291bnQnXG4iXX0=
|
|
@@ -2,4 +2,6 @@ export * from './operators/activated-routes-with-data-property';
|
|
|
2
2
|
export * from './leaf-child-route';
|
|
3
3
|
export * from './route-snapshot-path-relative';
|
|
4
4
|
export * from './route-snapshot-path-full';
|
|
5
|
-
|
|
5
|
+
export * from './will-have-data-prop';
|
|
6
|
+
export * from './is-empty-url-route';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vdXRpbHMvcm91dGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaURBQWlELENBQUE7QUFFL0QsY0FBYyxvQkFBb0IsQ0FBQTtBQUNsQyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLHNCQUFzQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRvcnMvYWN0aXZhdGVkLXJvdXRlcy13aXRoLWRhdGEtcHJvcGVydHknXG5cbmV4cG9ydCAqIGZyb20gJy4vbGVhZi1jaGlsZC1yb3V0ZSdcbmV4cG9ydCAqIGZyb20gJy4vcm91dGUtc25hcHNob3QtcGF0aC1yZWxhdGl2ZSdcbmV4cG9ydCAqIGZyb20gJy4vcm91dGUtc25hcHNob3QtcGF0aC1mdWxsJ1xuZXhwb3J0ICogZnJvbSAnLi93aWxsLWhhdmUtZGF0YS1wcm9wJ1xuZXhwb3J0ICogZnJvbSAnLi9pcy1lbXB0eS11cmwtcm91dGUnXG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function isEmptyUrlRoute(activatedRoute) {
|
|
2
|
+
return activatedRoute.snapshot.url.length === 0;
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZW1wdHktdXJsLXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL3V0aWxzL3JvdXRlci9pcy1lbXB0eS11cmwtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGVBQWUsQ0FBQyxjQUE4QjtJQUM1RCxPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUE7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eVVybFJvdXRlKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYWN0aXZhdGVkUm91dGUuc25hcHNob3QudXJsLmxlbmd0aCA9PT0gMFxufVxuIl19
|
|
@@ -5,4 +5,4 @@ export function leafChildRoute(activatedRoute) {
|
|
|
5
5
|
}
|
|
6
6
|
return route;
|
|
7
7
|
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZi1jaGlsZC1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi91dGlscy9yb3V0ZXIvbGVhZi1jaGlsZC1yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsY0FBYyxDQUFDLGNBQThCO0lBQzNELElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQTtJQUMxQixPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUU7UUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQTtLQUFFO0lBQ3JELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gbGVhZkNoaWxkUm91dGUoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogQWN0aXZhdGVkUm91dGUge1xuICBsZXQgcm91dGUgPSBhY3RpdmF0ZWRSb3V0ZVxuICB3aGlsZSAocm91dGUuZmlyc3RDaGlsZCkgeyByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQgfVxuICByZXR1cm4gcm91dGVcbn1cbiJdfQ==
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import { combineLatest } from 'rxjs';
|
|
2
2
|
import { map, switchMap } from 'rxjs/operators';
|
|
3
3
|
import { leafChildRoute } from '../leaf-child-route';
|
|
4
|
-
|
|
5
|
-
return !!(route && route.routeConfig && route.routeConfig.data && route.routeConfig.data.hasOwnProperty(prop));
|
|
6
|
-
}
|
|
7
|
-
function hasRouteConfigResolveProp(route, prop) {
|
|
8
|
-
return !!(route && route.routeConfig && route.routeConfig.resolve && route.routeConfig.resolve.hasOwnProperty(prop));
|
|
9
|
-
}
|
|
4
|
+
import { willHaveDataProp } from '../will-have-data-prop';
|
|
10
5
|
export function activatedRoutesWithDataProperty(prop, mustHaveDefined = false) {
|
|
11
6
|
const _data = (r) => r.data.pipe(map(_d => ({ route: r, data: _d })));
|
|
12
7
|
return (source$) => source$.pipe(map(route => leafChildRoute(route)), map(route => route.pathFromRoot), switchMap(routes => combineLatest(routes.map(r => _data(r)))), map(v => v.filter(_v => _v.data.hasOwnProperty(prop))), map(v => mustHaveDefined
|
|
13
|
-
? v.filter(_v =>
|
|
8
|
+
? v.filter(_v => willHaveDataProp(_v.route, prop))
|
|
14
9
|
: v));
|
|
15
10
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZhdGVkLXJvdXRlcy13aXRoLWRhdGEtcHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vdXRpbHMvcm91dGVyL29wZXJhdG9ycy9hY3RpdmF0ZWQtcm91dGVzLXdpdGgtZGF0YS1wcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBT3pELE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxJQUFZLEVBQUUsa0JBQTJCLEtBQUs7SUFDNUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckYsT0FBTyxDQUFDLE9BQW1DLEVBQXlDLEVBQUUsQ0FDcEYsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDbkMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUNoQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDN0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZTtRQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUMsQ0FDSixDQUNGLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIERhdGEgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IGxlYWZDaGlsZFJvdXRlIH0gZnJvbSAnLi4vbGVhZi1jaGlsZC1yb3V0ZSdcbmltcG9ydCB7IHdpbGxIYXZlRGF0YVByb3AgfSBmcm9tICcuLi93aWxsLWhhdmUtZGF0YS1wcm9wJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElBY3RpdmF0ZWRSb3V0ZVdpdGhEYXRhIHtcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gIGRhdGE6IERhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2YXRlZFJvdXRlc1dpdGhEYXRhUHJvcGVydHkocHJvcDogc3RyaW5nLCBtdXN0SGF2ZURlZmluZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICBjb25zdCBfZGF0YSA9IChyOiBBY3RpdmF0ZWRSb3V0ZSkgPT4gci5kYXRhLnBpcGUobWFwKF9kID0+ICh7IHJvdXRlOiByLCBkYXRhOiBfZCB9KSkpXG4gIHJldHVybiAoc291cmNlJDogT2JzZXJ2YWJsZTxBY3RpdmF0ZWRSb3V0ZT4pOiBPYnNlcnZhYmxlPElBY3RpdmF0ZWRSb3V0ZVdpdGhEYXRhW10+ID0+XG4gICAgc291cmNlJC5waXBlKFxuICAgICAgbWFwKHJvdXRlID0+IGxlYWZDaGlsZFJvdXRlKHJvdXRlKSksXG4gICAgICBtYXAocm91dGUgPT4gcm91dGUucGF0aEZyb21Sb290KSxcbiAgICAgIHN3aXRjaE1hcChyb3V0ZXMgPT4gY29tYmluZUxhdGVzdChyb3V0ZXMubWFwKHIgPT4gX2RhdGEocikpKSksXG4gICAgICBtYXAodiA9PiB2LmZpbHRlcihfdiA9PiBfdi5kYXRhLmhhc093blByb3BlcnR5KHByb3ApKSksXG4gICAgICBtYXAodiA9PiBtdXN0SGF2ZURlZmluZWRcbiAgICAgICAgPyB2LmZpbHRlcihfdiA9PiB3aWxsSGF2ZURhdGFQcm9wKF92LnJvdXRlLCBwcm9wKSlcbiAgICAgICAgOiB2XG4gICAgICApXG4gICAgKVxufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function hasRouteConfigDataProp(route, prop) {
|
|
2
|
+
return !!(route && route.routeConfig && route.routeConfig.data && route.routeConfig.data.hasOwnProperty(prop));
|
|
3
|
+
}
|
|
4
|
+
function hasRouteConfigResolveProp(route, prop) {
|
|
5
|
+
return !!(route && route.routeConfig && route.routeConfig.resolve && route.routeConfig.resolve.hasOwnProperty(prop));
|
|
6
|
+
}
|
|
7
|
+
export function willHaveDataProp(route, prop) {
|
|
8
|
+
return hasRouteConfigDataProp(route, prop) || hasRouteConfigResolveProp(route, prop);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lsbC1oYXZlLWRhdGEtcHJvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi91dGlscy9yb3V0ZXIvd2lsbC1oYXZlLWRhdGEtcHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxTQUFTLHNCQUFzQixDQUFDLEtBQXFCLEVBQUUsSUFBWTtJQUNqRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ2hILENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLEtBQXFCLEVBQUUsSUFBWTtJQUNwRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ3RILENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBcUIsRUFBRSxJQUFZO0lBQ2xFLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLHlCQUF5QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5cbmZ1bmN0aW9uIGhhc1JvdXRlQ29uZmlnRGF0YVByb3Aocm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcm9wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhKHJvdXRlICYmIHJvdXRlLnJvdXRlQ29uZmlnICYmIHJvdXRlLnJvdXRlQ29uZmlnLmRhdGEgJiYgcm91dGUucm91dGVDb25maWcuZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wKSlcbn1cblxuZnVuY3Rpb24gaGFzUm91dGVDb25maWdSZXNvbHZlUHJvcChyb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByb3A6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEocm91dGUgJiYgcm91dGUucm91dGVDb25maWcgJiYgcm91dGUucm91dGVDb25maWcucmVzb2x2ZSAmJiByb3V0ZS5yb3V0ZUNvbmZpZy5yZXNvbHZlLmhhc093blByb3BlcnR5KHByb3ApKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2lsbEhhdmVEYXRhUHJvcChyb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByb3A6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaGFzUm91dGVDb25maWdEYXRhUHJvcChyb3V0ZSwgcHJvcCkgfHwgaGFzUm91dGVDb25maWdSZXNvbHZlUHJvcChyb3V0ZSwgcHJvcClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Validators } from '@angular/forms';
|
|
2
|
+
import { isEmptyInputValue, isNumeric } from '@theseam/ui-common/utils';
|
|
3
|
+
export const DECIMAL_REGEX = /^([-+]{1})?\d*(\.\d*)?$/;
|
|
4
|
+
function _decimalValidator() {
|
|
5
|
+
return (control) => {
|
|
6
|
+
if (isEmptyInputValue(control.value)) {
|
|
7
|
+
return null; // don't validate empty values to allow optional controls
|
|
8
|
+
}
|
|
9
|
+
const isDecimal = !Array.isArray(control.value) &&
|
|
10
|
+
isNumeric(control.value) &&
|
|
11
|
+
(Validators.pattern(DECIMAL_REGEX)(control) === null);
|
|
12
|
+
if (!isDecimal) {
|
|
13
|
+
return { 'decimal': { 'reason': 'Must be valid decimal number.' } };
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validates control value is a valid decimal number.
|
|
20
|
+
*
|
|
21
|
+
* NOTE: This does not allow any js valid decimal number. It only accepts them
|
|
22
|
+
* in a format expected by our backend.
|
|
23
|
+
*/
|
|
24
|
+
export const decimalValidator = _decimalValidator();
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaW1hbC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vdmFsaWRhdG9ycy9kZWNpbWFsLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUV2RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcseUJBQXlCLENBQUE7QUFFdEQsU0FBUyxpQkFBaUI7SUFDeEIsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtRQUNsQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQSxDQUFDLHlEQUF5RDtTQUN0RTtRQUVELE1BQU0sU0FBUyxHQUNiLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQTtRQUV2RCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSxFQUFFLENBQUE7U0FDcEU7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFnQixpQkFBaUIsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuXG5pbXBvcnQgeyBpc0VtcHR5SW5wdXRWYWx1ZSwgaXNOdW1lcmljIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgREVDSU1BTF9SRUdFWCA9IC9eKFstK117MX0pP1xcZCooXFwuXFxkKik/JC9cblxuZnVuY3Rpb24gX2RlY2ltYWxWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgIGlmIChpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGwgLy8gZG9uJ3QgdmFsaWRhdGUgZW1wdHkgdmFsdWVzIHRvIGFsbG93IG9wdGlvbmFsIGNvbnRyb2xzXG4gICAgfVxuXG4gICAgY29uc3QgaXNEZWNpbWFsID1cbiAgICAgICFBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpICYmXG4gICAgICBpc051bWVyaWMoY29udHJvbC52YWx1ZSkgJiZcbiAgICAgIChWYWxpZGF0b3JzLnBhdHRlcm4oREVDSU1BTF9SRUdFWCkoY29udHJvbCkgPT09IG51bGwpXG5cbiAgICBpZiAoIWlzRGVjaW1hbCkge1xuICAgICAgcmV0dXJuIHsgJ2RlY2ltYWwnOiB7ICdyZWFzb24nOiAnTXVzdCBiZSB2YWxpZCBkZWNpbWFsIG51bWJlci4nIH0gfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgY29udHJvbCB2YWx1ZSBpcyBhIHZhbGlkIGRlY2ltYWwgbnVtYmVyLlxuICpcbiAqIE5PVEU6IFRoaXMgZG9lcyBub3QgYWxsb3cgYW55IGpzIHZhbGlkIGRlY2ltYWwgbnVtYmVyLiBJdCBvbmx5IGFjY2VwdHMgdGhlbVxuICogaW4gYSBmb3JtYXQgZXhwZWN0ZWQgYnkgb3VyIGJhY2tlbmQuXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNpbWFsVmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IF9kZWNpbWFsVmFsaWRhdG9yKClcbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Validators } from '@angular/forms';
|
|
2
|
+
import { isEmptyInputValue, isNumeric } from '@theseam/ui-common/utils';
|
|
3
|
+
export const INTEGER_REGEX = /^([-+]{1})?[0-9]*$/;
|
|
4
|
+
function _integerValidator() {
|
|
5
|
+
return (control) => {
|
|
6
|
+
if (isEmptyInputValue(control.value)) {
|
|
7
|
+
return null; // don't validate empty values to allow optional controls
|
|
8
|
+
}
|
|
9
|
+
const isInteger = !Array.isArray(control.value) &&
|
|
10
|
+
isNumeric(control.value) &&
|
|
11
|
+
(Validators.pattern(INTEGER_REGEX)(control) === null);
|
|
12
|
+
if (!isInteger) {
|
|
13
|
+
return { 'integer': { 'reason': 'Must be valid integer.' } };
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validates control value is a valid integer number.
|
|
20
|
+
*
|
|
21
|
+
* NOTE: This does not allow any js valid integer number. It only accepts them
|
|
22
|
+
* in a format expected by our backend.
|
|
23
|
+
*/
|
|
24
|
+
export const integerValidator = _integerValidator();
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdlci52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vdmFsaWRhdG9ycy9pbnRlZ2VyLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUV2RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUE7QUFFakQsU0FBUyxpQkFBaUI7SUFDeEIsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtRQUNsQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQSxDQUFDLHlEQUF5RDtTQUN0RTtRQUVELE1BQU0sU0FBUyxHQUNiLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQTtRQUV2RCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLENBQUE7U0FDN0Q7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFnQixpQkFBaUIsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuXG5pbXBvcnQgeyBpc0VtcHR5SW5wdXRWYWx1ZSwgaXNOdW1lcmljIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgSU5URUdFUl9SRUdFWCA9IC9eKFstK117MX0pP1swLTldKiQvXG5cbmZ1bmN0aW9uIF9pbnRlZ2VyVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBpZiAoaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsIC8vIGRvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgIH1cblxuICAgIGNvbnN0IGlzSW50ZWdlciA9XG4gICAgICAhQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSAmJlxuICAgICAgaXNOdW1lcmljKGNvbnRyb2wudmFsdWUpICYmXG4gICAgICAoVmFsaWRhdG9ycy5wYXR0ZXJuKElOVEVHRVJfUkVHRVgpKGNvbnRyb2wpID09PSBudWxsKVxuXG4gICAgaWYgKCFpc0ludGVnZXIpIHtcbiAgICAgIHJldHVybiB7ICdpbnRlZ2VyJzogeyAncmVhc29uJzogJ011c3QgYmUgdmFsaWQgaW50ZWdlci4nIH0gfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGNvbnRyb2wgdmFsdWUgaXMgYSB2YWxpZCBpbnRlZ2VyIG51bWJlci5cbiAqXG4gKiBOT1RFOiBUaGlzIGRvZXMgbm90IGFsbG93IGFueSBqcyB2YWxpZCBpbnRlZ2VyIG51bWJlci4gSXQgb25seSBhY2NlcHRzIHRoZW1cbiAqIGluIGEgZm9ybWF0IGV4cGVjdGVkIGJ5IG91ciBiYWNrZW5kLlxuICovXG5leHBvcnQgY29uc3QgaW50ZWdlclZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSBfaW50ZWdlclZhbGlkYXRvcigpXG4iXX0=
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './tax-id.validator';
|
|
2
2
|
export * from './email-exists.validator';
|
|
3
3
|
export * from './phone-length.validator';
|
|
4
|
-
|
|
4
|
+
export * from './decimal.validator';
|
|
5
|
+
export * from './integer.validator';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi92YWxpZGF0b3JzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQTtBQUNsQyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUE7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLHFCQUFxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YXgtaWQudmFsaWRhdG9yJ1xuZXhwb3J0ICogZnJvbSAnLi9lbWFpbC1leGlzdHMudmFsaWRhdG9yJ1xuZXhwb3J0ICogZnJvbSAnLi9waG9uZS1sZW5ndGgudmFsaWRhdG9yJ1xuZXhwb3J0ICogZnJvbSAnLi9kZWNpbWFsLnZhbGlkYXRvcidcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWdlci52YWxpZGF0b3InXG4iXX0=
|
|
@@ -4,29 +4,147 @@ import * as i1 from '@angular/router';
|
|
|
4
4
|
import { NavigationEnd, Router, ActivatedRoute, RouterModule } from '@angular/router';
|
|
5
5
|
import { combineLatest, of } from 'rxjs';
|
|
6
6
|
import { filter, map, startWith, switchMap } from 'rxjs/operators';
|
|
7
|
-
import {
|
|
7
|
+
import { leafChildRoute, notNullOrUndefined, willHaveDataProp, hasProperty, routeSnapshotPathFull } from '@theseam/ui-common/utils';
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
9
|
|
|
10
10
|
class TheSeamBreadcrumbsService {
|
|
11
11
|
constructor(_router, _activatedRoute) {
|
|
12
|
+
// this.crumbs$ = this._router.events.pipe(
|
|
13
|
+
// filter(event => event instanceof NavigationEnd),
|
|
14
|
+
// map(_ => this._activatedRoute),
|
|
15
|
+
// startWith(this._activatedRoute),
|
|
16
|
+
// activatedRoutesWithDataProperty(this.breadcrumbDataKey, true),
|
|
17
|
+
// switchMap(rwdArr => combineLatest(rwdArr.map(rwd => this._parseBreadcrumbData(rwd))))
|
|
18
|
+
// )
|
|
12
19
|
this._router = _router;
|
|
13
20
|
this._activatedRoute = _activatedRoute;
|
|
14
|
-
|
|
15
|
-
this.
|
|
21
|
+
// public readonly breadcrumbDataKey = 'breadcrumb'
|
|
22
|
+
this.dataProps = [
|
|
23
|
+
'breadcrumb',
|
|
24
|
+
'breadcrumbExtras',
|
|
25
|
+
];
|
|
26
|
+
this.crumbs$ = this._crumbsFromRoute();
|
|
16
27
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
_crumbsFromRoute() {
|
|
29
|
+
return this._router.events.pipe(filter((event) => event instanceof NavigationEnd), map(() => this._activatedRoute), startWith(this._activatedRoute), switchMap(activatedRoute => this._crumbsFromActivatedRoute(activatedRoute)));
|
|
30
|
+
}
|
|
31
|
+
_crumbsFromActivatedRoute(activatedRoute) {
|
|
32
|
+
return this._breadcrumbDatasFromRoot(activatedRoute).pipe(map(bcDatas => this._breadcrumbsFromData(bcDatas)));
|
|
33
|
+
}
|
|
34
|
+
_breadcrumbDatasFromRoot(activatedRoute) {
|
|
35
|
+
const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map(r => this._breadcrumbData(r));
|
|
36
|
+
return combineLatest(bcDataObs).pipe(map(v => v.filter(notNullOrUndefined)), switchMap(v => this._applyBreadcrumbExtras(v)));
|
|
37
|
+
}
|
|
38
|
+
_breadcrumbData(activatedRoute) {
|
|
39
|
+
return activatedRoute.data.pipe(map(data => {
|
|
40
|
+
const bcData = {
|
|
41
|
+
activatedRoute: activatedRoute,
|
|
42
|
+
extrasPropRefs: []
|
|
43
|
+
};
|
|
44
|
+
let found = false;
|
|
45
|
+
for (const prop of this.dataProps) {
|
|
46
|
+
if (prop === 'breadcrumb' && !willHaveDataProp(activatedRoute, prop)) {
|
|
47
|
+
// Need to skip if the 'breadcrumb' data prop is not in the config,
|
|
48
|
+
// because we will get duplicates if the data 'breadcrumb' prop is
|
|
49
|
+
// inheritted from a parent route.
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (hasProperty(data, prop)) {
|
|
53
|
+
bcData[prop] = data[prop];
|
|
54
|
+
found = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!found) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
bcData.extrasPropRefs = this._getBreadcrumbExtrasDataProps(bcData);
|
|
61
|
+
return bcData;
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
_applyBreadcrumbExtras(datas) {
|
|
65
|
+
const newDatas = [];
|
|
66
|
+
let pending = [];
|
|
67
|
+
for (const data of datas) {
|
|
68
|
+
if (!hasProperty(data, 'breadcrumb')) {
|
|
69
|
+
pending.push(data);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
newDatas.push(data);
|
|
73
|
+
pending = [];
|
|
24
74
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
75
|
+
if (newDatas.length === 0) {
|
|
76
|
+
return of([]);
|
|
77
|
+
}
|
|
78
|
+
if (pending.length > 0) {
|
|
79
|
+
// add extras
|
|
80
|
+
newDatas[newDatas.length - 1].extrasPropRefs = this._filterExtrasPropRefs([
|
|
81
|
+
...newDatas[newDatas.length - 1].extrasPropRefs,
|
|
82
|
+
...pending.map(p => p.extrasPropRefs).reduce((prev, curr) => [...prev, ...curr], [])
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
85
|
+
return combineLatest(newDatas.map(data => {
|
|
86
|
+
if (data.extrasPropRefs.length === 0) {
|
|
87
|
+
return of(data);
|
|
88
|
+
}
|
|
89
|
+
return this._observeExtrasPropRefs(data.extrasPropRefs).pipe(map(extrasStr => {
|
|
90
|
+
data.breadcrumb = data.breadcrumb + ' ' + extrasStr;
|
|
91
|
+
return data;
|
|
92
|
+
}));
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
_observeExtrasPropRefs(propRefs) {
|
|
96
|
+
return combineLatest(propRefs.map(pf => pf.value)).pipe(map(values => values.map(v => `(${v})`).join(' ')));
|
|
97
|
+
}
|
|
98
|
+
_getBreadcrumbExtrasDataProps(data) {
|
|
99
|
+
if (!hasProperty(data, 'breadcrumbExtras')) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
if (!hasProperty(data.breadcrumbExtras, 'dataProps')) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
const propRefs = data.breadcrumbExtras.dataProps.map(prop => {
|
|
106
|
+
return { prop: prop, value: this._getDataProp(data.activatedRoute, prop) };
|
|
107
|
+
});
|
|
108
|
+
return this._filterExtrasPropRefs(propRefs);
|
|
109
|
+
}
|
|
110
|
+
_filterExtrasPropRefs(propRefs) {
|
|
111
|
+
const seen = {};
|
|
112
|
+
return propRefs.filter(propRef => {
|
|
113
|
+
if (seen[propRef.prop]) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
seen[propRef.prop] = true;
|
|
117
|
+
return true;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
_getDataProp(activatedRoute, prop) {
|
|
121
|
+
if (activatedRoute.routeConfig !== null) {
|
|
122
|
+
if (willHaveDataProp(activatedRoute, prop)) {
|
|
123
|
+
return activatedRoute.data.pipe(map(d => d[prop]));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
let r = activatedRoute.parent;
|
|
127
|
+
while (r !== null) {
|
|
128
|
+
if (willHaveDataProp(r, prop)) {
|
|
129
|
+
return r.data.pipe(map(d => d[prop]));
|
|
130
|
+
}
|
|
131
|
+
r = r.parent;
|
|
132
|
+
}
|
|
133
|
+
throw Error(`DataProp '${prop}' not found.`);
|
|
134
|
+
}
|
|
135
|
+
_breadcrumbsFromData(datas) {
|
|
136
|
+
const breadcrumbs = [];
|
|
137
|
+
for (const data of datas) {
|
|
138
|
+
if (hasProperty(data, 'breadcrumb')) {
|
|
139
|
+
const breadcrumb = {
|
|
140
|
+
value: data.breadcrumb,
|
|
141
|
+
path: routeSnapshotPathFull(data.activatedRoute.snapshot),
|
|
142
|
+
route: data.activatedRoute
|
|
143
|
+
};
|
|
144
|
+
breadcrumbs.push(breadcrumb);
|
|
145
|
+
}
|
|
28
146
|
}
|
|
29
|
-
return
|
|
147
|
+
return breadcrumbs;
|
|
30
148
|
}
|
|
31
149
|
}
|
|
32
150
|
TheSeamBreadcrumbsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TheSeamBreadcrumbsService_Factory() { return new TheSeamBreadcrumbsService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.ActivatedRoute)); }, token: TheSeamBreadcrumbsService, providedIn: "root" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-breadcrumbs.js","sources":["../../../projects/ui-common/breadcrumbs/breadcrumbs.service.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs/breadcrumbs.component.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs.module.ts","../../../projects/ui-common/breadcrumbs/theseam-ui-common-breadcrumbs.ts"],"sourcesContent":["import { Injectable } from '@angular/core'\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { filter, map, startWith, switchMap } from 'rxjs/operators'\n\nimport { activatedRoutesWithDataProperty, IActivatedRouteWithData, routeSnapshotPathFull } from '@theseam/ui-common/utils'\n\nimport { ITheSeamBreadcrumb } from './breadcrumb'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TheSeamBreadcrumbsService {\n\n public readonly breadcrumbDataKey = 'breadcrumb'\n\n public crumbs$: Observable<ITheSeamBreadcrumb[]>\n\n constructor(\n private _router: Router,\n private _activatedRoute: ActivatedRoute\n ) {\n this.crumbs$ = this._router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n map(_ => this._activatedRoute),\n startWith(this._activatedRoute),\n activatedRoutesWithDataProperty(this.breadcrumbDataKey, true),\n switchMap(rwdArr => combineLatest(rwdArr.map(rwd => this._parseBreadcrumbData(rwd))))\n )\n }\n\n private _parseBreadcrumbData(routeWithData: IActivatedRouteWithData): Observable<ITheSeamBreadcrumb> {\n const crumbValue = routeWithData.data[this.breadcrumbDataKey]\n const route = routeWithData.route\n const path = routeSnapshotPathFull(route.snapshot)\n let value = ''\n\n if (typeof crumbValue === 'string') {\n value = crumbValue\n } else {\n console.warn(\n '[TheSeamBreadcrumbsService] Only string breadcrumbs are supported currently. '\n + 'Use a resolver if the value needs to be dynamically calculated.'\n )\n }\n\n return of({ value, path, route })\n }\n\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'\nimport { Observable } from 'rxjs'\n\nimport { ITheSeamBreadcrumb } from '../breadcrumb'\nimport { TheSeamBreadcrumbsService } from '../breadcrumbs.service'\n\n@Component({\n selector: 'seam-breadcrumbs',\n templateUrl: './breadcrumbs.component.html',\n styleUrls: ['./breadcrumbs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BreadcrumbsComponent implements OnInit {\n\n public crumbs$: Observable<ITheSeamBreadcrumb[]>\n\n constructor(\n private _breadcrumbs: TheSeamBreadcrumbsService\n ) {\n this.crumbs$ = this._breadcrumbs.crumbs$\n }\n\n ngOnInit() { }\n\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { BreadcrumbsComponent } from './breadcrumbs/breadcrumbs.component'\n\n\n@NgModule({\n declarations: [\n BreadcrumbsComponent\n ],\n imports: [\n CommonModule,\n RouterModule\n ],\n exports: [\n BreadcrumbsComponent\n ]\n})\nexport class TheSeamBreadcrumbsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAYa,yBAAyB;IAMpC,YACU,OAAe,EACf,eAA+B;QAD/B,YAAO,GAAP,OAAO,CAAQ;QACf,oBAAe,GAAf,eAAe,CAAgB;QANzB,sBAAiB,GAAG,YAAY,CAAA;QAQ9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACrC,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,aAAa,CAAC,EAC/C,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,EAC9B,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAC/B,+BAA+B,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAC7D,SAAS,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACtF,CAAA;KACF;IAEO,oBAAoB,CAAC,aAAsC;QACjE,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC7D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAA;QACjC,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,IAAI,KAAK,GAAG,EAAE,CAAA;QAEd,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,KAAK,GAAG,UAAU,CAAA;SACnB;aAAM;YACL,OAAO,CAAC,IAAI,CACV,+EAA+E;kBAC7E,iEAAiE,CACpE,CAAA;SACF;QAED,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;KAClC;;;;YAtCF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;YAVuC,MAAM;YAArC,cAAc;;;MCWV,oBAAoB;IAI/B,YACU,YAAuC;QAAvC,iBAAY,GAAZ,YAAY,CAA2B;QAE/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAA;KACzC;IAED,QAAQ,MAAM;;;YAhBf,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,4cAA2C;gBAE3C,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;YAPQ,yBAAyB;;;MCerB,wBAAwB;;;YAZpC,QAAQ,SAAC;gBACR,YAAY,EAAE;oBACZ,oBAAoB;iBACrB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,YAAY;iBACb;gBACD,OAAO,EAAE;oBACP,oBAAoB;iBACrB;aACF;;;AClBD;;;;;;"}
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-breadcrumbs.js","sources":["../../../projects/ui-common/breadcrumbs/breadcrumbs.service.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs/breadcrumbs.component.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs.module.ts","../../../projects/ui-common/breadcrumbs/theseam-ui-common-breadcrumbs.ts"],"sourcesContent":["import { Injectable, isDevMode } from '@angular/core'\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { filter, map, startWith, switchMap } from 'rxjs/operators'\n\nimport {\n activatedRoutesWithDataProperty,\n hasProperty,\n IActivatedRouteWithData,\n isEmptyUrlRoute,\n leafChildRoute,\n notNullOrUndefined,\n routeSnapshotPathFull,\n willHaveDataProp\n} from '@theseam/ui-common/utils'\n\nimport { TheSeamBreadcrumb } from './breadcrumb'\n\ninterface BreadcrumbDataExtras {\n dataProps?: string[]\n}\n\ninterface ExtrasPropRef {\n prop: string\n value: Observable<string>\n}\n\ninterface BreadcrumbData {\n breadcrumb?: string\n breadcrumbExtras?: BreadcrumbDataExtras\n\n activatedRoute: ActivatedRoute\n extrasPropRefs: ExtrasPropRef[]\n}\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TheSeamBreadcrumbsService {\n\n // public readonly breadcrumbDataKey = 'breadcrumb'\n\n private readonly dataProps: (keyof Omit<BreadcrumbData, 'activatedRoute'>)[] = [\n 'breadcrumb',\n 'breadcrumbExtras',\n ]\n\n public readonly crumbs$: Observable<TheSeamBreadcrumb[]>\n\n constructor(\n private readonly _router: Router,\n private readonly _activatedRoute: ActivatedRoute\n ) {\n // this.crumbs$ = this._router.events.pipe(\n // filter(event => event instanceof NavigationEnd),\n // map(_ => this._activatedRoute),\n // startWith(this._activatedRoute),\n // activatedRoutesWithDataProperty(this.breadcrumbDataKey, true),\n // switchMap(rwdArr => combineLatest(rwdArr.map(rwd => this._parseBreadcrumbData(rwd))))\n // )\n\n this.crumbs$ = this._crumbsFromRoute()\n }\n\n private _crumbsFromRoute(): Observable<TheSeamBreadcrumb[]> {\n return this._router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n map(() => this._activatedRoute),\n startWith(this._activatedRoute),\n switchMap(activatedRoute => this._crumbsFromActivatedRoute(activatedRoute))\n )\n }\n\n private _crumbsFromActivatedRoute(activatedRoute: ActivatedRoute): Observable<TheSeamBreadcrumb[]> {\n return this._breadcrumbDatasFromRoot(activatedRoute).pipe(\n map(bcDatas => this._breadcrumbsFromData(bcDatas))\n )\n }\n\n private _breadcrumbDatasFromRoot(activatedRoute: ActivatedRoute): Observable<BreadcrumbData[]> {\n const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map(r => this._breadcrumbData(r))\n return combineLatest(bcDataObs).pipe(\n map(v => v.filter(notNullOrUndefined)),\n switchMap(v => this._applyBreadcrumbExtras(v)),\n )\n }\n\n private _breadcrumbData(activatedRoute: ActivatedRoute): Observable<BreadcrumbData | null> {\n return activatedRoute.data.pipe(\n map(data => {\n const bcData: BreadcrumbData = {\n activatedRoute: activatedRoute,\n extrasPropRefs: []\n }\n\n let found = false\n for (const prop of this.dataProps) {\n if (prop === 'breadcrumb' && !willHaveDataProp(activatedRoute, prop)) {\n // Need to skip if the 'breadcrumb' data prop is not in the config,\n // because we will get duplicates if the data 'breadcrumb' prop is\n // inheritted from a parent route.\n continue\n }\n\n if (hasProperty(data, prop)) {\n bcData[prop] = data[prop]\n found = true\n }\n }\n\n if (!found) {\n return null\n }\n\n bcData.extrasPropRefs = this._getBreadcrumbExtrasDataProps(bcData)\n\n return bcData\n })\n )\n }\n\n private _applyBreadcrumbExtras(datas: BreadcrumbData[]): Observable<BreadcrumbData[]> {\n const newDatas: BreadcrumbData[] = []\n\n let pending: BreadcrumbData[] = []\n for (const data of datas) {\n if (!hasProperty(data, 'breadcrumb')) {\n pending.push(data)\n continue\n }\n\n newDatas.push(data)\n\n pending = []\n }\n\n if (newDatas.length === 0) {\n return of([])\n }\n\n if (pending.length > 0) {\n // add extras\n newDatas[newDatas.length - 1].extrasPropRefs = this._filterExtrasPropRefs([\n ...newDatas[newDatas.length - 1].extrasPropRefs,\n ...pending.map(p => p.extrasPropRefs).reduce((prev, curr) => [ ...prev, ...curr ], [])\n ])\n }\n\n return combineLatest(newDatas.map(data => {\n if (data.extrasPropRefs.length === 0) {\n return of(data)\n }\n\n return this._observeExtrasPropRefs(data.extrasPropRefs).pipe(\n map(extrasStr => {\n data.breadcrumb = data.breadcrumb + ' ' + extrasStr\n return data\n })\n )\n }))\n }\n\n private _observeExtrasPropRefs(propRefs: ExtrasPropRef[]): Observable<string> {\n return combineLatest(propRefs.map(pf => pf.value)).pipe(\n map(values => values.map(v => `(${v})`).join(' '))\n )\n }\n\n private _getBreadcrumbExtrasDataProps(data: BreadcrumbData): ExtrasPropRef[] {\n if (!hasProperty(data, 'breadcrumbExtras')) {\n return []\n }\n\n if (!hasProperty(data.breadcrumbExtras, 'dataProps')) {\n return []\n }\n\n const propRefs = data.breadcrumbExtras.dataProps.map(prop => {\n return { prop: prop, value: this._getDataProp(data.activatedRoute, prop) }\n })\n\n return this._filterExtrasPropRefs(propRefs)\n }\n\n private _filterExtrasPropRefs(propRefs: ExtrasPropRef[]): ExtrasPropRef[] {\n const seen: { [key: string]: boolean } = { }\n return propRefs.filter(propRef => {\n if (seen[propRef.prop]) {\n return false\n }\n seen[propRef.prop] = true\n return true\n })\n }\n\n private _getDataProp(activatedRoute: ActivatedRoute, prop: string): Observable<string> {\n if (activatedRoute.routeConfig !== null) {\n if (willHaveDataProp(activatedRoute, prop)) {\n return activatedRoute.data.pipe(map(d => d[prop]))\n }\n }\n\n let r = activatedRoute.parent\n while (r !== null) {\n if (willHaveDataProp(r, prop)) {\n return r.data.pipe(map(d => d[prop]))\n }\n\n r = r.parent\n }\n\n throw Error(`DataProp '${prop}' not found.`)\n }\n\n private _breadcrumbsFromData(datas: BreadcrumbData[]): TheSeamBreadcrumb[] {\n const breadcrumbs: TheSeamBreadcrumb[] = []\n\n for (const data of datas) {\n if (hasProperty(data, 'breadcrumb')) {\n const breadcrumb: TheSeamBreadcrumb = {\n value: data.breadcrumb,\n path: routeSnapshotPathFull(data.activatedRoute.snapshot),\n route: data.activatedRoute\n }\n breadcrumbs.push(breadcrumb)\n }\n }\n\n return breadcrumbs\n }\n\n // private _parseBreadcrumbData(routeWithData: IActivatedRouteWithData): Observable<TheSeamBreadcrumb> {\n // const crumbValue = routeWithData.data[this.breadcrumbDataKey]\n // const route = routeWithData.route\n // const path = routeSnapshotPathFull(route.snapshot)\n // let value = ''\n\n // if (typeof crumbValue === 'string') {\n // value = crumbValue\n // } else {\n // if (isDevMode()) {\n // console.warn(\n // '[TheSeamBreadcrumbsService] Only string breadcrumbs are supported currently. '\n // + 'Use a resolver if the value needs to be dynamically calculated.'\n // )\n // }\n // }\n\n // return of({ value, path, route })\n // }\n\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'\nimport { Observable } from 'rxjs'\n\nimport { TheSeamBreadcrumb } from '../breadcrumb'\nimport { TheSeamBreadcrumbsService } from '../breadcrumbs.service'\n\n@Component({\n selector: 'seam-breadcrumbs',\n templateUrl: './breadcrumbs.component.html',\n styleUrls: ['./breadcrumbs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BreadcrumbsComponent implements OnInit {\n\n public crumbs$: Observable<TheSeamBreadcrumb[]>\n\n constructor(\n private _breadcrumbs: TheSeamBreadcrumbsService\n ) {\n this.crumbs$ = this._breadcrumbs.crumbs$\n }\n\n ngOnInit() { }\n\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { BreadcrumbsComponent } from './breadcrumbs/breadcrumbs.component'\n\n\n@NgModule({\n declarations: [\n BreadcrumbsComponent\n ],\n imports: [\n CommonModule,\n RouterModule\n ],\n exports: [\n BreadcrumbsComponent\n ]\n})\nexport class TheSeamBreadcrumbsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-data-exporter.js","sources":["../../../projects/ui-common/data-exporter/data-exporter.ts","../../../projects/ui-common/data-exporter/exporters/csv-exporter.ts","../../../projects/ui-common/data-exporter/exporters/xlsx-exporter.ts","../../../projects/ui-common/data-exporter/data-exporter.module.ts","../../../projects/ui-common/data-exporter/theseam-ui-common-data-exporter.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { IconProp } from '@fortawesome/fontawesome-svg-core'\n\nexport type IDataExporterFunction = <T>(data: T[]) => Observable<T[]>\n\nexport interface IDataExporter {\n /**\n * Name to identify the exporter.\n */\n readonly name: string\n\n /**\n * Label to use for exporter in user visible text.\n *\n * default: `name`\n */\n label?: string\n\n /**\n * Icon to represent exporter.\n */\n icon?: string | IconProp\n\n /**\n * Export the data based on the data to some format.\n */\n export<T>(data: T[]): Observable<boolean>\n}\n\nexport const THESEAM_DATA_EXPORTER = new InjectionToken<IDataExporter>('TheSeamDataExporter')\n\nexport function exportOperator<T>(exportFn: IDataExporterFunction) {\n return (source$: Observable<T[]>) =>\n source$.pipe(switchMap(exportFn))\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileCsv } from '@fortawesome/free-solid-svg-icons'\nimport FileSaver from 'file-saver'\n\nimport { fileDataFromBuffer, wrapIntoObservable } from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\n\n@Injectable()\nexport class CSVDataExporter implements IDataExporter {\n\n public readonly name = 'exporter:csv'\n\n public label = 'CSV'\n\n public icon = faFileCsv\n\n public export<T>(data: T[]): Observable<boolean> {\n // TODO: Fix typing for the dynamic imports\n return wrapIntoObservable(import('xlsx')).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n\n const out = XLSX.utils.sheet_to_csv(ws)\n\n // NOTE: `out` should not be passed as a string, but the fileDataFromBuffer\n // function happens to works with a string. When the build issue about the\n // function argument is figured out then this should be fixed.\n return from(fileDataFromBuffer(out as any))\n // return from(fileDataFromBuffer(Buffer.from(out)))\n .pipe(\n tap(fileData => {\n FileSaver.saveAs(fileData.blob, `Export.csv`)\n }),\n mapTo(true)\n )\n })\n )\n }\n\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileExcel } from '@fortawesome/free-solid-svg-icons'\nimport { Buffer } from 'buffer/'\nimport FileSaver from 'file-saver'\n\nimport { fileDataFromBuffer, wrapIntoObservable } from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\n\n@Injectable()\nexport class XLSXDataExporter implements IDataExporter {\n\n public readonly name = 'exporter:xlsx'\n\n public label = 'XLSX'\n\n public icon = faFileExcel\n\n public export<T>(data: T[]): Observable<boolean> {\n // TODO: Fix typing for the dynamic imports\n return wrapIntoObservable(import('xlsx')).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n const wb = { Sheets: { 'data': ws }, SheetNames: ['data'] }\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n\n return from(fileDataFromBuffer(Buffer.from(excelBuffer)))\n .pipe(\n tap(fileData => {\n FileSaver.saveAs(fileData.blob, `Export.xlsx`)\n }),\n mapTo(true)\n )\n })\n )\n }\n\n}\n","import { NgModule } from '@angular/core'\n\nimport { CSVDataExporter } from './exporters/csv-exporter'\nimport { XLSXDataExporter } from './exporters/xlsx-exporter'\n\nimport { THESEAM_DATA_EXPORTER } from './data-exporter'\n\n@NgModule({\n declarations: [],\n imports: [],\n providers: [\n { provide: THESEAM_DATA_EXPORTER, useClass: CSVDataExporter, multi: true },\n { provide: THESEAM_DATA_EXPORTER, useClass: XLSXDataExporter, multi: true }\n ]\n})\nexport class TheSeamDataExporterModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-data-exporter.js","sources":["../../../projects/ui-common/data-exporter/data-exporter.ts","../../../projects/ui-common/data-exporter/exporters/csv-exporter.ts","../../../projects/ui-common/data-exporter/exporters/xlsx-exporter.ts","../../../projects/ui-common/data-exporter/data-exporter.module.ts","../../../projects/ui-common/data-exporter/theseam-ui-common-data-exporter.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { IconProp } from '@fortawesome/fontawesome-svg-core'\n\nexport type IDataExporterFunction = <T>(data: T[]) => Observable<T[]>\n\nexport interface IDataExporter {\n /**\n * Name to identify the exporter.\n */\n readonly name: string\n\n /**\n * Label to use for exporter in user visible text.\n *\n * default: `name`\n */\n label?: string\n\n /**\n * Icon to represent exporter.\n */\n icon?: string | IconProp\n\n /**\n * Pass the rows directly to the export function without any mapping.\n */\n skipDataMapping?: boolean\n\n /**\n * Export the data based on the data to some format.\n */\n export<T>(data: T[]): Observable<boolean>\n}\n\nexport const THESEAM_DATA_EXPORTER = new InjectionToken<IDataExporter>('TheSeamDataExporter')\n\nexport function exportOperator<T>(exportFn: IDataExporterFunction) {\n return (source$: Observable<T[]>) =>\n source$.pipe(switchMap(exportFn))\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileCsv } from '@fortawesome/free-solid-svg-icons'\nimport FileSaver from 'file-saver'\n\nimport { fileDataFromBuffer, wrapIntoObservable } from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\n\n@Injectable()\nexport class CSVDataExporter implements IDataExporter {\n\n public readonly name = 'exporter:csv'\n\n public label = 'CSV'\n\n public icon = faFileCsv\n\n public export<T>(data: T[]): Observable<boolean> {\n // TODO: Fix typing for the dynamic imports\n return wrapIntoObservable(import('xlsx')).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n\n const out = XLSX.utils.sheet_to_csv(ws)\n\n // NOTE: `out` should not be passed as a string, but the fileDataFromBuffer\n // function happens to works with a string. When the build issue about the\n // function argument is figured out then this should be fixed.\n return from(fileDataFromBuffer(out as any))\n // return from(fileDataFromBuffer(Buffer.from(out)))\n .pipe(\n tap(fileData => {\n FileSaver.saveAs(fileData.blob, `Export.csv`)\n }),\n mapTo(true)\n )\n })\n )\n }\n\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileExcel } from '@fortawesome/free-solid-svg-icons'\nimport { Buffer } from 'buffer/'\nimport FileSaver from 'file-saver'\n\nimport { fileDataFromBuffer, wrapIntoObservable } from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\n\n@Injectable()\nexport class XLSXDataExporter implements IDataExporter {\n\n public readonly name = 'exporter:xlsx'\n\n public label = 'XLSX'\n\n public icon = faFileExcel\n\n public export<T>(data: T[]): Observable<boolean> {\n // TODO: Fix typing for the dynamic imports\n return wrapIntoObservable(import('xlsx')).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n const wb = { Sheets: { 'data': ws }, SheetNames: ['data'] }\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n\n return from(fileDataFromBuffer(Buffer.from(excelBuffer)))\n .pipe(\n tap(fileData => {\n FileSaver.saveAs(fileData.blob, `Export.xlsx`)\n }),\n mapTo(true)\n )\n })\n )\n }\n\n}\n","import { NgModule } from '@angular/core'\n\nimport { CSVDataExporter } from './exporters/csv-exporter'\nimport { XLSXDataExporter } from './exporters/xlsx-exporter'\n\nimport { THESEAM_DATA_EXPORTER } from './data-exporter'\n\n@NgModule({\n declarations: [],\n imports: [],\n providers: [\n { provide: THESEAM_DATA_EXPORTER, useClass: CSVDataExporter, multi: true },\n { provide: THESEAM_DATA_EXPORTER, useClass: XLSXDataExporter, multi: true }\n ]\n})\nexport class TheSeamDataExporterModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAqCa,qBAAqB,GAAG,IAAI,cAAc,CAAgB,qBAAqB,EAAC;SAE7E,cAAc,CAAI,QAA+B;IAC/D,OAAO,CAAC,OAAwB,KAC9B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AACrC;;MC9Ba,eAAe;IAD5B;QAGkB,SAAI,GAAG,cAAc,CAAA;QAE9B,UAAK,GAAG,KAAK,CAAA;QAEb,SAAI,GAAG,SAAS,CAAA;KAyBxB;IAvBQ,MAAM,CAAI,IAAS;;QAExB,OAAO,kBAAkB,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAC5C,SAAS,CAAC,CAAC,IAAS;YAClB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAEzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;;;;YAKvC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAU,CAAC,CAAC;;iBAExC,IAAI,CACH,GAAG,CAAC,QAAQ;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;aAC9C,CAAC,EACF,KAAK,CAAC,IAAI,CAAC,CACZ,CAAA;SACJ,CAAC,CACH,CAAA;KACF;;;YA9BF,UAAU;;;MCEE,gBAAgB;IAD7B;QAGkB,SAAI,GAAG,eAAe,CAAA;QAE/B,UAAK,GAAG,MAAM,CAAA;QAEd,SAAI,GAAG,WAAW,CAAA;KAqB1B;IAnBQ,MAAM,CAAI,IAAS;;QAExB,OAAO,kBAAkB,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAC5C,SAAS,CAAC,CAAC,IAAS;YAClB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YACzC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAA;YAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;YAEvE,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;iBACtD,IAAI,CACH,GAAG,CAAC,QAAQ;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;aAC/C,CAAC,EACF,KAAK,CAAC,IAAI,CAAC,CACZ,CAAA;SACJ,CAAC,CACH,CAAA;KACF;;;YA1BF,UAAU;;;MCGE,yBAAyB;;;YARrC,QAAQ,SAAC;gBACR,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE;oBACT,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE;oBAC1E,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE;iBAC5E;aACF;;;ACdD;;;;;;"}
|
|
@@ -309,6 +309,36 @@ DatatableColumnComponent.propDecorators = {
|
|
|
309
309
|
_cellTemplateQuery: [{ type: ContentChild, args: [DatatableCellTplDirective, { read: TemplateRef, static: true },] }]
|
|
310
310
|
};
|
|
311
311
|
|
|
312
|
+
class DatatableFooterTplDirective {
|
|
313
|
+
constructor(template) {
|
|
314
|
+
this.template = template;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
DatatableFooterTplDirective.decorators = [
|
|
318
|
+
{ type: Directive, args: [{
|
|
319
|
+
selector: '[seamDatatableFooterTpl]'
|
|
320
|
+
},] }
|
|
321
|
+
];
|
|
322
|
+
DatatableFooterTplDirective.ctorParameters = () => [
|
|
323
|
+
{ type: TemplateRef }
|
|
324
|
+
];
|
|
325
|
+
|
|
326
|
+
class TheSeamDatatableFooterDirective {
|
|
327
|
+
get template() {
|
|
328
|
+
return this._templateInput || this._templateQuery;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
TheSeamDatatableFooterDirective.decorators = [
|
|
332
|
+
{ type: Directive, args: [{
|
|
333
|
+
// tslint:disable-next-line: directive-selector
|
|
334
|
+
selector: 'seam-datatable-footer'
|
|
335
|
+
},] }
|
|
336
|
+
];
|
|
337
|
+
TheSeamDatatableFooterDirective.propDecorators = {
|
|
338
|
+
_templateInput: [{ type: Input, args: ['template',] }],
|
|
339
|
+
_templateQuery: [{ type: ContentChild, args: [DatatableFooterTplDirective, { read: TemplateRef, static: true },] }]
|
|
340
|
+
};
|
|
341
|
+
|
|
312
342
|
class DatatableFilterDirective {
|
|
313
343
|
constructor(dataFilters) {
|
|
314
344
|
if (dataFilters && dataFilters.length > 0) {
|
|
@@ -1016,7 +1046,7 @@ class DatatableComponent {
|
|
|
1016
1046
|
DatatableComponent.decorators = [
|
|
1017
1047
|
{ type: Component, args: [{
|
|
1018
1048
|
selector: 'seam-datatable',
|
|
1019
|
-
template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n
|
|
1049
|
+
template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"sort.emit($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"reorder.emit($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n",
|
|
1020
1050
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1021
1051
|
animations: [
|
|
1022
1052
|
trigger('slideDown', [
|
|
@@ -1031,7 +1061,7 @@ DatatableComponent.decorators = [
|
|
|
1031
1061
|
])
|
|
1032
1062
|
],
|
|
1033
1063
|
providers: [_THESEAM_DATATABLE, DatatableColumnChangesService, _THESEAM_DATATABLE_ACCESSOR],
|
|
1034
|
-
styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute;top:0;left:0;right:0;bottom:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute
|
|
1064
|
+
styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute;top:0;left:0;right:0;bottom:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}"]
|
|
1035
1065
|
},] }
|
|
1036
1066
|
];
|
|
1037
1067
|
DatatableComponent.ctorParameters = () => [
|
|
@@ -1096,6 +1126,7 @@ DatatableComponent.propDecorators = {
|
|
|
1096
1126
|
actionMenu: [{ type: ContentChild, args: [DatatableActionMenuComponent, { static: true },] }],
|
|
1097
1127
|
rowActionItem: [{ type: ContentChild, args: [DatatableRowActionItemDirective, { static: true },] }],
|
|
1098
1128
|
rowDetail: [{ type: ContentChild, args: [TheSeamDatatableRowDetailDirective, { static: true },] }],
|
|
1129
|
+
footer: [{ type: ContentChild, args: [TheSeamDatatableFooterDirective, { static: true },] }],
|
|
1099
1130
|
menuBarComponent: [{ type: ContentChild, args: [DatatableMenuBarComponent,] }],
|
|
1100
1131
|
ngxDatatable: [{ type: ViewChild, args: [DatatableComponent$1,] }],
|
|
1101
1132
|
ngxDatatableElement: [{ type: ViewChild, args: [DatatableComponent$1, { read: ElementRef },] }],
|
|
@@ -1244,7 +1275,12 @@ class DatatableExportButtonComponent {
|
|
|
1244
1275
|
this._toastr.error(msg, 'Data Export');
|
|
1245
1276
|
}
|
|
1246
1277
|
const export$ = this._datatable.rows$
|
|
1247
|
-
.pipe(take(1), map(rows =>
|
|
1278
|
+
.pipe(take(1), map(rows => {
|
|
1279
|
+
if (exporter.skipDataMapping) {
|
|
1280
|
+
return rows;
|
|
1281
|
+
}
|
|
1282
|
+
return this._mapExportData(this._datatable.columns || [], rows);
|
|
1283
|
+
}), concatMap(data => exporter.export(data)), catchError(err => {
|
|
1248
1284
|
console.error(err);
|
|
1249
1285
|
return of(false);
|
|
1250
1286
|
}), tap(success => {
|
|
@@ -1252,7 +1288,7 @@ class DatatableExportButtonComponent {
|
|
|
1252
1288
|
this._toastr.success(`${exporter.label} export complete.`, 'Data Export');
|
|
1253
1289
|
}
|
|
1254
1290
|
else {
|
|
1255
|
-
this._toastr.
|
|
1291
|
+
this._toastr.error(`${exporter.label} export failed.`, 'Data Export');
|
|
1256
1292
|
}
|
|
1257
1293
|
}));
|
|
1258
1294
|
this._loading.while(export$).subscribe();
|
|
@@ -1639,6 +1675,8 @@ TheSeamDatatableModule.decorators = [
|
|
|
1639
1675
|
DatatableExportButtonComponent,
|
|
1640
1676
|
TheSeamDatatableRowDetailDirective,
|
|
1641
1677
|
DatatableRowDetailTplDirective,
|
|
1678
|
+
TheSeamDatatableFooterDirective,
|
|
1679
|
+
DatatableFooterTplDirective,
|
|
1642
1680
|
DatatableColumnPreferencesComponent,
|
|
1643
1681
|
DatatableColumnPreferencesButtonComponent,
|
|
1644
1682
|
DatatableActionMenuItemDirective,
|
|
@@ -1681,6 +1719,8 @@ TheSeamDatatableModule.decorators = [
|
|
|
1681
1719
|
DatatableExportButtonComponent,
|
|
1682
1720
|
TheSeamDatatableRowDetailDirective,
|
|
1683
1721
|
DatatableRowDetailTplDirective,
|
|
1722
|
+
TheSeamDatatableFooterDirective,
|
|
1723
|
+
DatatableFooterTplDirective,
|
|
1684
1724
|
DatatableColumnPreferencesComponent,
|
|
1685
1725
|
DatatableColumnPreferencesButtonComponent,
|
|
1686
1726
|
DatatableActionMenuItemDirective,
|
|
@@ -1705,5 +1745,5 @@ TheSeamDatatableModule.decorators = [
|
|
|
1705
1745
|
* Generated bundle index. Do not edit.
|
|
1706
1746
|
*/
|
|
1707
1747
|
|
|
1708
|
-
export { DatatableActionMenuComponent, DatatableActionMenuItemComponent, DatatableActionMenuItemDirective, DatatableActionMenuToggleDirective, DatatableCellTplDirective, DatatableColumnChangesService, DatatableColumnComponent, DatatableColumnPreferencesButtonComponent, DatatableColumnPreferencesComponent, DatatableComponent, DatatableDataSource, DatatableExportButtonComponent, DatatableFilterDirective, DatatableGqlDataSource, DatatableMenuBarColumnCenterComponent, DatatableMenuBarColumnLeftComponent, DatatableMenuBarColumnRightComponent, DatatableMenuBarComponent, DatatableMenuBarRowComponent, DatatableMenuBarTextComponent, DatatablePreferencesService, DatatableRowActionItemDirective, DatatableRowDetailTplDirective, THESEAM_DATATABLE, THESEAM_DATATABLE_PREFERENCES_ACCESSOR, THESEAM_MENUBAR_ITEM_DATA, TheSeamDatatableModule, TheSeamDatatableRowDetailDirective, TheSeamDatatableScrollbarHelperService, _THESEAM_DATATABLE, _THESEAM_DATATABLE_ACCESSOR, _THESEAM_DATA_FILTER_CONTAINER, _setColumnDefaults, withStoredColumnInfo, THESEAM_DATATABLE_ACCESSOR as ɵa };
|
|
1748
|
+
export { DatatableActionMenuComponent, DatatableActionMenuItemComponent, DatatableActionMenuItemDirective, DatatableActionMenuToggleDirective, DatatableCellTplDirective, DatatableColumnChangesService, DatatableColumnComponent, DatatableColumnPreferencesButtonComponent, DatatableColumnPreferencesComponent, DatatableComponent, DatatableDataSource, DatatableExportButtonComponent, DatatableFilterDirective, DatatableFooterTplDirective, DatatableGqlDataSource, DatatableMenuBarColumnCenterComponent, DatatableMenuBarColumnLeftComponent, DatatableMenuBarColumnRightComponent, DatatableMenuBarComponent, DatatableMenuBarRowComponent, DatatableMenuBarTextComponent, DatatablePreferencesService, DatatableRowActionItemDirective, DatatableRowDetailTplDirective, THESEAM_DATATABLE, THESEAM_DATATABLE_PREFERENCES_ACCESSOR, THESEAM_MENUBAR_ITEM_DATA, TheSeamDatatableFooterDirective, TheSeamDatatableModule, TheSeamDatatableRowDetailDirective, TheSeamDatatableScrollbarHelperService, _THESEAM_DATATABLE, _THESEAM_DATATABLE_ACCESSOR, _THESEAM_DATA_FILTER_CONTAINER, _setColumnDefaults, withStoredColumnInfo, THESEAM_DATATABLE_ACCESSOR as ɵa };
|
|
1709
1749
|
//# sourceMappingURL=theseam-ui-common-datatable.js.map
|