@ecodev/natural 41.3.0 → 42.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ecodev-natural.d.ts +1 -9
- package/esm2020/ecodev-natural.mjs +5 -0
- package/esm2020/lib/classes/abstract-controller.mjs +30 -0
- package/esm2020/lib/classes/abstract-detail.mjs +152 -0
- package/esm2020/lib/classes/abstract-editable-list.mjs +96 -0
- package/esm2020/lib/classes/abstract-list.mjs +406 -0
- package/esm2020/lib/classes/abstract-navigable-list.mjs +126 -0
- package/{esm2015/lib/classes/apollo-utils.js → esm2020/lib/classes/apollo-utils.mjs} +0 -0
- package/esm2020/lib/classes/data-source.mjs +76 -0
- package/{esm2015/lib/classes/query-variable-manager-utils.js → esm2020/lib/classes/query-variable-manager-utils.mjs} +0 -0
- package/esm2020/lib/classes/query-variable-manager.mjs +161 -0
- package/{esm2015/lib/classes/rxjs.js → esm2020/lib/classes/rxjs.mjs} +0 -0
- package/{esm2015/lib/classes/tld.js → esm2020/lib/classes/tld.mjs} +0 -0
- package/{esm2015/lib/classes/utility.js → esm2020/lib/classes/utility.mjs} +0 -0
- package/esm2020/lib/classes/validators.mjs +179 -0
- package/esm2020/lib/directives/http-prefix.directive.mjs +50 -0
- package/esm2020/lib/modules/alert/alert.module.mjs +20 -0
- package/esm2020/lib/modules/alert/alert.service.mjs +55 -0
- package/esm2020/lib/modules/alert/confirm.component.mjs +20 -0
- package/{esm2015/lib/modules/alert/public-api.js → esm2020/lib/modules/alert/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/avatar.module.mjs +19 -0
- package/esm2020/lib/modules/avatar/component/avatar.component.mjs +187 -0
- package/{esm2015/lib/modules/avatar/public-api.js → esm2020/lib/modules/avatar/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/service/avatar.service.mjs +66 -0
- package/esm2020/lib/modules/avatar/sources/gravatar.mjs +29 -0
- package/{esm2015/lib/modules/avatar/sources/image.js → esm2020/lib/modules/avatar/sources/image.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/initials.js → esm2020/lib/modules/avatar/sources/initials.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/source.js → esm2020/lib/modules/avatar/sources/source.mjs} +1 -1
- package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +43 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.component.mjs +84 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.module.mjs +47 -0
- package/{esm2015/lib/modules/columns-picker/public-api.js → esm2020/lib/modules/columns-picker/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/common-module.mjs +54 -0
- package/esm2020/lib/modules/common/directives/linkable-tab.directive.mjs +79 -0
- package/esm2020/lib/modules/common/directives/reactive-asterisk.directive.mjs +33 -0
- package/esm2020/lib/modules/common/directives/src-density.directive.mjs +62 -0
- package/esm2020/lib/modules/common/pipes/capitalize.pipe.mjs +18 -0
- package/esm2020/lib/modules/common/pipes/ellipsis.pipe.mjs +14 -0
- package/esm2020/lib/modules/common/pipes/enum.pipe.mjs +25 -0
- package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +20 -0
- package/{esm2015/lib/modules/common/public-api.js → esm2020/lib/modules/common/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/services/memory-storage.mjs +112 -0
- package/esm2020/lib/modules/common/services/seo.service.mjs +114 -0
- package/esm2020/lib/modules/detail-header/detail-header.component.mjs +76 -0
- package/esm2020/lib/modules/detail-header/detail-header.module.mjs +21 -0
- package/{esm2015/lib/modules/detail-header/public-api.js → esm2020/lib/modules/detail-header/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.component.mjs +69 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.module.mjs +19 -0
- package/{esm2015/lib/modules/dialog-trigger/public-api.js → esm2020/lib/modules/dialog-trigger/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +98 -0
- package/esm2020/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +92 -0
- package/{esm2015/lib/modules/dropdown-components/public-api.js → esm2020/lib/modules/dropdown-components/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +133 -0
- package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +137 -0
- package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +69 -0
- package/esm2020/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +38 -0
- package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +104 -0
- package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +169 -0
- package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +57 -0
- package/{esm2015/lib/modules/dropdown-components/types.js → esm2020/lib/modules/dropdown-components/types.mjs} +0 -0
- package/{esm2015/lib/modules/dropdown-components/utils.js → esm2020/lib/modules/dropdown-components/utils.mjs} +0 -0
- package/esm2020/lib/modules/file/abstract-file.mjs +231 -0
- package/esm2020/lib/modules/file/component/file.component.mjs +143 -0
- package/esm2020/lib/modules/file/file-drop.directive.mjs +110 -0
- package/esm2020/lib/modules/file/file-select.directive.mjs +28 -0
- package/esm2020/lib/modules/file/file.module.mjs +24 -0
- package/esm2020/lib/modules/file/file.service.mjs +48 -0
- package/{esm2015/lib/modules/file/public-api.js → esm2020/lib/modules/file/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/file/types.js → esm2020/lib/modules/file/types.mjs} +0 -0
- package/{esm2015/lib/modules/file/utils.js → esm2020/lib/modules/file/utils.mjs} +3 -4
- package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +27 -0
- package/esm2020/lib/modules/fixed-button/fixed-button.module.mjs +21 -0
- package/{esm2015/lib/modules/fixed-button/public-api.js → esm2020/lib/modules/fixed-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +36 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +20 -0
- package/{esm2015/lib/modules/fixed-button-detail/public-api.js → esm2020/lib/modules/fixed-button-detail/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/flat-node.js → esm2020/lib/modules/hierarchic-selector/classes/flat-node.mjs} +1 -1
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/model-node.js → esm2020/lib/modules/hierarchic-selector/classes/model-node.mjs} +1 -1
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +364 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +258 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +31 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +23 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +81 -0
- package/{esm2015/lib/modules/hierarchic-selector/public-api.js → esm2020/lib/modules/hierarchic-selector/public-api.mjs} +0 -0
- package/esm2020/lib/modules/icon/icon.component.mjs +92 -0
- package/esm2020/lib/modules/icon/icon.module.mjs +30 -0
- package/{esm2015/lib/modules/icon/public-api.js → esm2020/lib/modules/icon/public-api.mjs} +0 -0
- package/esm2020/lib/modules/matomo/matomo-module.module.mjs +12 -0
- package/esm2020/lib/modules/matomo/matomo.service.mjs +105 -0
- package/{esm2015/lib/modules/matomo/public-api.js → esm2020/lib/modules/matomo/public-api.mjs} +0 -0
- package/esm2020/lib/modules/panels/abstract-panel.mjs +56 -0
- package/{esm2015/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.js → esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs} +0 -0
- package/esm2020/lib/modules/panels/panels.component.mjs +26 -0
- package/esm2020/lib/modules/panels/panels.module.mjs +33 -0
- package/esm2020/lib/modules/panels/panels.service.mjs +325 -0
- package/{esm2015/lib/modules/panels/panels.urlmatcher.js → esm2020/lib/modules/panels/panels.urlmatcher.mjs} +0 -0
- package/{esm2015/lib/modules/panels/public-api.js → esm2020/lib/modules/panels/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/panels/types.js → esm2020/lib/modules/panels/types.mjs} +0 -0
- package/{esm2015/lib/modules/relations/public-api.js → esm2020/lib/modules/relations/public-api.mjs} +0 -0
- package/esm2020/lib/modules/relations/relations.component.mjs +198 -0
- package/esm2020/lib/modules/relations/relations.module.mjs +58 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.js → esm2020/lib/modules/search/classes/graphql-doctrine.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.types.js → esm2020/lib/modules/search/classes/graphql-doctrine.types.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/transformers.js → esm2020/lib/modules/search/classes/transformers.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/url.js → esm2020/lib/modules/search/classes/url.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/utils.js → esm2020/lib/modules/search/classes/utils.mjs} +0 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-container-animations.js → esm2020/lib/modules/search/dropdown-container/dropdown-container-animations.mjs} +0 -0
- package/esm2020/lib/modules/search/dropdown-container/dropdown-container.component.mjs +88 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-ref.js → esm2020/lib/modules/search/dropdown-container/dropdown-ref.mjs} +1 -1
- package/esm2020/lib/modules/search/dropdown-container/dropdown.service.mjs +93 -0
- package/esm2020/lib/modules/search/facet-selector/facet-selector.component.mjs +50 -0
- package/esm2020/lib/modules/search/group/group.component.mjs +45 -0
- package/esm2020/lib/modules/search/input/input.component.mjs +328 -0
- package/{esm2015/lib/modules/search/public-api.js → esm2020/lib/modules/search/public-api.mjs} +0 -0
- package/esm2020/lib/modules/search/search/search.component.mjs +78 -0
- package/esm2020/lib/modules/search/search.module.mjs +84 -0
- package/{esm2015/lib/modules/search/types/dropdown-component.js → esm2020/lib/modules/search/types/dropdown-component.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs} +0 -0
- package/esm2020/lib/modules/select/abstract-select.component.mjs +186 -0
- package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs} +0 -0
- package/esm2020/lib/modules/select/select/select.component.mjs +208 -0
- package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +42 -0
- package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +128 -0
- package/esm2020/lib/modules/select/select.module.mjs +68 -0
- package/{esm2015/lib/modules/sidenav/public-api.js → esm2020/lib/modules/sidenav/public-api.mjs} +0 -0
- package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +15 -0
- package/esm2020/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +87 -0
- package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +12 -0
- package/esm2020/lib/modules/sidenav/sidenav-stack.service.mjs +52 -0
- package/esm2020/lib/modules/sidenav/sidenav.module.mjs +25 -0
- package/esm2020/lib/modules/sidenav/sidenav.service.mjs +195 -0
- package/{esm2015/lib/modules/stamp/public-api.js → esm2020/lib/modules/stamp/public-api.mjs} +0 -0
- package/esm2020/lib/modules/stamp/stamp-module.module.mjs +18 -0
- package/esm2020/lib/modules/stamp/stamp.component.mjs +14 -0
- package/{esm2015/lib/modules/table-button/public-api.js → esm2020/lib/modules/table-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/table-button/table-button.component.mjs +48 -0
- package/esm2020/lib/modules/table-button/table-button.module.mjs +21 -0
- package/esm2020/lib/services/abstract-model.service.mjs +509 -0
- package/esm2020/lib/services/enum.service.mjs +67 -0
- package/esm2020/lib/services/link-mutation.service.mjs +153 -0
- package/esm2020/lib/services/persistence.service.mjs +113 -0
- package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +55 -0
- package/{esm2015/lib/types/types.js → esm2020/lib/types/types.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{ecodev-natural.js → ecodev-natural.mjs} +2791 -2361
- package/fesm2015/ecodev-natural.mjs.map +1 -0
- package/fesm2020/ecodev-natural.mjs +10506 -0
- package/fesm2020/ecodev-natural.mjs.map +1 -0
- package/lib/classes/abstract-controller.d.ts +3 -0
- package/lib/classes/abstract-detail.d.ts +3 -0
- package/lib/classes/abstract-editable-list.d.ts +3 -0
- package/lib/classes/abstract-list.d.ts +3 -0
- package/lib/classes/abstract-navigable-list.d.ts +3 -0
- package/lib/directives/http-prefix.directive.d.ts +3 -0
- package/lib/modules/alert/alert.module.d.ts +9 -0
- package/lib/modules/alert/alert.service.d.ts +3 -0
- package/lib/modules/alert/confirm.component.d.ts +3 -0
- package/lib/modules/avatar/avatar.module.d.ts +6 -0
- package/lib/modules/avatar/component/avatar.component.d.ts +3 -0
- package/lib/modules/avatar/service/avatar.service.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker-column.directive.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.component.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.module.d.ts +13 -0
- package/lib/modules/common/common-module.d.ts +16 -0
- package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -0
- package/lib/modules/common/directives/reactive-asterisk.directive.d.ts +3 -0
- package/lib/modules/common/directives/src-density.directive.d.ts +3 -0
- package/lib/modules/common/pipes/capitalize.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/ellipsis.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/enum.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/swiss-date.pipe.d.ts +3 -0
- package/lib/modules/common/services/memory-storage.d.ts +3 -0
- package/lib/modules/common/services/seo.service.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.component.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.module.d.ts +9 -0
- package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +3 -0
- package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +7 -0
- package/lib/modules/dropdown-components/abstract-association-select-component.directive.d.ts +3 -0
- package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +22 -0
- package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +3 -0
- package/lib/modules/file/abstract-file.d.ts +3 -0
- package/lib/modules/file/component/file.component.d.ts +3 -0
- package/lib/modules/file/file-drop.directive.d.ts +3 -0
- package/lib/modules/file/file-select.directive.d.ts +3 -0
- package/lib/modules/file/file.module.d.ts +11 -0
- package/lib/modules/file/file.service.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.component.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.module.d.ts +9 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +3 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +8 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +21 -0
- package/lib/modules/icon/icon.component.d.ts +3 -0
- package/lib/modules/icon/icon.module.d.ts +7 -0
- package/lib/modules/matomo/matomo-module.module.d.ts +4 -0
- package/lib/modules/matomo/matomo.service.d.ts +3 -0
- package/lib/modules/panels/abstract-panel.d.ts +3 -0
- package/lib/modules/panels/panels.component.d.ts +3 -0
- package/lib/modules/panels/panels.module.d.ts +8 -0
- package/lib/modules/panels/panels.service.d.ts +3 -0
- package/lib/modules/relations/relations.component.d.ts +3 -0
- package/lib/modules/relations/relations.module.d.ts +15 -0
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +3 -0
- package/lib/modules/search/dropdown-container/dropdown-ref.d.ts +1 -1
- package/lib/modules/search/dropdown-container/dropdown.service.d.ts +3 -0
- package/lib/modules/search/facet-selector/facet-selector.component.d.ts +3 -0
- package/lib/modules/search/group/group.component.d.ts +3 -0
- package/lib/modules/search/input/input.component.d.ts +3 -0
- package/lib/modules/search/search/search.component.d.ts +3 -0
- package/lib/modules/search/search.module.d.ts +19 -0
- package/lib/modules/select/abstract-select.component.d.ts +4 -1
- package/lib/modules/select/select/select.component.d.ts +3 -0
- package/lib/modules/select/select-enum/select-enum.component.d.ts +3 -0
- package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +3 -0
- package/lib/modules/select/select.module.d.ts +19 -0
- package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-stack.service.d.ts +4 -1
- package/lib/modules/sidenav/sidenav.module.d.ts +11 -0
- package/lib/modules/sidenav/sidenav.service.d.ts +3 -0
- package/lib/modules/stamp/stamp-module.module.d.ts +6 -0
- package/lib/modules/stamp/stamp.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.module.d.ts +9 -0
- package/lib/services/enum.service.d.ts +3 -0
- package/lib/services/link-mutation.service.d.ts +3 -0
- package/lib/services/persistence.service.d.ts +3 -0
- package/lib/services/swiss-parsing-date-adapter.service.d.ts +4 -1
- package/package.json +25 -12
- package/src/lib/modules/alert/_alert.theme.scss +1 -1
- package/src/lib/modules/file/component/_file.theme.scss +1 -1
- package/src/lib/modules/icon/_icon.theme.scss +1 -1
- package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +1 -1
- package/src/lib/modules/table-button/_table-button.theme.scss +1 -1
- package/src/lib/styles/_table.scss +1 -1
- package/theming/_natural.theme.scss +1 -1
- package/bundles/ecodev-natural.umd.js +0 -11318
- package/bundles/ecodev-natural.umd.js.map +0 -1
- package/ecodev-natural.metadata.json +0 -1
- package/esm2015/ecodev-natural.js +0 -14
- package/esm2015/lib/classes/abstract-controller.js +0 -29
- package/esm2015/lib/classes/abstract-detail.js +0 -157
- package/esm2015/lib/classes/abstract-editable-list.js +0 -97
- package/esm2015/lib/classes/abstract-list.js +0 -409
- package/esm2015/lib/classes/abstract-navigable-list.js +0 -126
- package/esm2015/lib/classes/data-source.js +0 -76
- package/esm2015/lib/classes/query-variable-manager.js +0 -161
- package/esm2015/lib/classes/validators.js +0 -176
- package/esm2015/lib/directives/http-prefix.directive.js +0 -46
- package/esm2015/lib/modules/alert/alert.module.js +0 -15
- package/esm2015/lib/modules/alert/alert.service.js +0 -59
- package/esm2015/lib/modules/alert/confirm.component.js +0 -17
- package/esm2015/lib/modules/avatar/avatar.module.js +0 -14
- package/esm2015/lib/modules/avatar/component/avatar.component.js +0 -158
- package/esm2015/lib/modules/avatar/service/avatar.service.js +0 -65
- package/esm2015/lib/modules/avatar/sources/gravatar.js +0 -29
- package/esm2015/lib/modules/columns-picker/columns-picker-column.directive.js +0 -41
- package/esm2015/lib/modules/columns-picker/columns-picker.component.js +0 -82
- package/esm2015/lib/modules/columns-picker/columns-picker.module.js +0 -28
- package/esm2015/lib/modules/common/common-module.js +0 -35
- package/esm2015/lib/modules/common/directives/linkable-tab.directive.js +0 -82
- package/esm2015/lib/modules/common/directives/reactive-asterisk.directive.js +0 -31
- package/esm2015/lib/modules/common/directives/src-density.directive.js +0 -63
- package/esm2015/lib/modules/common/pipes/capitalize.pipe.js +0 -14
- package/esm2015/lib/modules/common/pipes/ellipsis.pipe.js +0 -10
- package/esm2015/lib/modules/common/pipes/enum.pipe.js +0 -24
- package/esm2015/lib/modules/common/pipes/swiss-date.pipe.js +0 -16
- package/esm2015/lib/modules/common/services/memory-storage.js +0 -110
- package/esm2015/lib/modules/common/services/seo.service.js +0 -120
- package/esm2015/lib/modules/detail-header/detail-header.component.js +0 -63
- package/esm2015/lib/modules/detail-header/detail-header.module.js +0 -16
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.component.js +0 -68
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.module.js +0 -14
- package/esm2015/lib/modules/dropdown-components/abstract-association-select-component.directive.js +0 -96
- package/esm2015/lib/modules/dropdown-components/natural-dropdown-components.module.js +0 -51
- package/esm2015/lib/modules/dropdown-components/type-date/type-date.component.js +0 -123
- package/esm2015/lib/modules/dropdown-components/type-date-range/type-date-range.component.js +0 -128
- package/esm2015/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.js +0 -63
- package/esm2015/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.js +0 -31
- package/esm2015/lib/modules/dropdown-components/type-number/type-number.component.js +0 -99
- package/esm2015/lib/modules/dropdown-components/type-select/type-select.component.js +0 -161
- package/esm2015/lib/modules/dropdown-components/type-text/type-text.component.js +0 -53
- package/esm2015/lib/modules/file/abstract-file.js +0 -223
- package/esm2015/lib/modules/file/component/file.component.js +0 -133
- package/esm2015/lib/modules/file/file-drop.directive.js +0 -99
- package/esm2015/lib/modules/file/file-select.directive.js +0 -25
- package/esm2015/lib/modules/file/file.module.js +0 -19
- package/esm2015/lib/modules/file/file.service.js +0 -47
- package/esm2015/lib/modules/fixed-button/fixed-button.component.js +0 -23
- package/esm2015/lib/modules/fixed-button/fixed-button.module.js +0 -16
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.component.js +0 -31
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.module.js +0 -15
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.js +0 -351
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.js +0 -258
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.js +0 -28
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.js +0 -23
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector.module.js +0 -46
- package/esm2015/lib/modules/icon/icon.component.js +0 -78
- package/esm2015/lib/modules/icon/icon.module.js +0 -25
- package/esm2015/lib/modules/matomo/matomo-module.module.js +0 -7
- package/esm2015/lib/modules/matomo/matomo.service.js +0 -106
- package/esm2015/lib/modules/panels/abstract-panel.js +0 -50
- package/esm2015/lib/modules/panels/panels.component.js +0 -26
- package/esm2015/lib/modules/panels/panels.module.js +0 -28
- package/esm2015/lib/modules/panels/panels.service.js +0 -331
- package/esm2015/lib/modules/relations/relations.component.js +0 -181
- package/esm2015/lib/modules/relations/relations.module.js +0 -33
- package/esm2015/lib/modules/search/dropdown-container/dropdown-container.component.js +0 -87
- package/esm2015/lib/modules/search/dropdown-container/dropdown.service.js +0 -95
- package/esm2015/lib/modules/search/facet-selector/facet-selector.component.js +0 -47
- package/esm2015/lib/modules/search/group/group.component.js +0 -39
- package/esm2015/lib/modules/search/input/input.component.js +0 -316
- package/esm2015/lib/modules/search/search/search.component.js +0 -71
- package/esm2015/lib/modules/search/search.module.js +0 -52
- package/esm2015/lib/modules/select/abstract-select.component.js +0 -176
- package/esm2015/lib/modules/select/select/select.component.js +0 -190
- package/esm2015/lib/modules/select/select-enum/select-enum.component.js +0 -34
- package/esm2015/lib/modules/select/select-hierarchic/select-hierarchic.component.js +0 -120
- package/esm2015/lib/modules/select/select.module.js +0 -39
- package/esm2015/lib/modules/sidenav/sidenav/sidenav.component.js +0 -12
- package/esm2015/lib/modules/sidenav/sidenav-container/sidenav-container.component.js +0 -79
- package/esm2015/lib/modules/sidenav/sidenav-content/sidenav-content.component.js +0 -13
- package/esm2015/lib/modules/sidenav/sidenav-stack.service.js +0 -50
- package/esm2015/lib/modules/sidenav/sidenav.module.js +0 -20
- package/esm2015/lib/modules/sidenav/sidenav.service.js +0 -199
- package/esm2015/lib/modules/stamp/stamp-module.module.js +0 -13
- package/esm2015/lib/modules/stamp/stamp.component.js +0 -13
- package/esm2015/lib/modules/table-button/table-button.component.js +0 -38
- package/esm2015/lib/modules/table-button/table-button.module.js +0 -16
- package/esm2015/lib/services/abstract-model.service.js +0 -509
- package/esm2015/lib/services/enum.service.js +0 -68
- package/esm2015/lib/services/link-mutation.service.js +0 -155
- package/esm2015/lib/services/persistence.service.js +0 -114
- package/esm2015/lib/services/swiss-parsing-date-adapter.service.js +0 -55
- package/fesm2015/ecodev-natural.js.map +0 -1
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
// tslint:disable:directive-class-suffix
|
|
2
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
3
|
-
import { Directive, Injector, Input } from '@angular/core';
|
|
4
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
5
|
-
import { defaults, isEmpty, isEqual, pick } from 'lodash-es';
|
|
6
|
-
import { Subject } from 'rxjs';
|
|
7
|
-
import { NaturalAlertService } from '../modules/alert/alert.service';
|
|
8
|
-
import { NaturalAbstractPanel } from '../modules/panels/abstract-panel';
|
|
9
|
-
import { toGraphQLDoctrineFilter } from '../modules/search/classes/graphql-doctrine';
|
|
10
|
-
import { fromUrl, toUrl } from '../modules/search/classes/url';
|
|
11
|
-
import { NaturalPersistenceService } from '../services/persistence.service';
|
|
12
|
-
import { NaturalDataSource } from './data-source';
|
|
13
|
-
import { NaturalQueryVariablesManager, SortingOrder, } from './query-variable-manager';
|
|
14
|
-
import { takeUntil } from 'rxjs/operators';
|
|
15
|
-
function unwrapNavigable(item) {
|
|
16
|
-
if ('item' in item && 'hasNavigation' in item) {
|
|
17
|
-
return item.item;
|
|
18
|
-
}
|
|
19
|
-
return item;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* This class helps managing a list of paginated items that can be filtered,
|
|
23
|
-
* selected, and then bulk actions can be performed on selection.
|
|
24
|
-
*
|
|
25
|
-
* Components inheriting from this class can be used as standalone with input attributes.
|
|
26
|
-
*
|
|
27
|
-
* Usage :
|
|
28
|
-
* <natural-my-listing [forcedVariables]="{filter:...}" [selectedColumns]="['col1']" [persistSearch]="false">
|
|
29
|
-
*/
|
|
30
|
-
// @dynamic
|
|
31
|
-
export class NaturalAbstractList extends NaturalAbstractPanel {
|
|
32
|
-
constructor(service, injector) {
|
|
33
|
-
super();
|
|
34
|
-
this.service = service;
|
|
35
|
-
this.injector = injector;
|
|
36
|
-
/**
|
|
37
|
-
* Wherever search should be loaded from url/storage and persisted in it too.
|
|
38
|
-
*/
|
|
39
|
-
this.persistSearch = true;
|
|
40
|
-
/**
|
|
41
|
-
* Columns list after interaction with <natural-columns-picker>
|
|
42
|
-
*/
|
|
43
|
-
this.columnsForTable = [];
|
|
44
|
-
/**
|
|
45
|
-
* The default column selection that automatically happened after <natural-columns-picker> initialization
|
|
46
|
-
*/
|
|
47
|
-
this.defaultSelectedColumns = null;
|
|
48
|
-
/**
|
|
49
|
-
* Selection for bulk actions
|
|
50
|
-
*/
|
|
51
|
-
this.selection = new SelectionModel(true, []);
|
|
52
|
-
/**
|
|
53
|
-
* Next executed action from bulk menu
|
|
54
|
-
*/
|
|
55
|
-
this.bulkActionSelected = null;
|
|
56
|
-
/**
|
|
57
|
-
* Centralisation of query variables
|
|
58
|
-
*/
|
|
59
|
-
this.variablesManager = new NaturalQueryVariablesManager();
|
|
60
|
-
/**
|
|
61
|
-
* Configuration for natural-search facets
|
|
62
|
-
*/
|
|
63
|
-
this.naturalSearchFacets = [];
|
|
64
|
-
/**
|
|
65
|
-
* Result of a search (can be provided as input for initialisation)
|
|
66
|
-
*/
|
|
67
|
-
this.naturalSearchSelections = [[]];
|
|
68
|
-
/**
|
|
69
|
-
* List of page sizes
|
|
70
|
-
*/
|
|
71
|
-
this.pageSizeOptions = [5, 10, 25, 50, 100, 200];
|
|
72
|
-
/**
|
|
73
|
-
* Initial pagination setup
|
|
74
|
-
*/
|
|
75
|
-
this.defaultPagination = {
|
|
76
|
-
offset: null,
|
|
77
|
-
pageIndex: 0,
|
|
78
|
-
pageSize: 25,
|
|
79
|
-
};
|
|
80
|
-
this.router = injector.get(Router);
|
|
81
|
-
this.route = injector.get(ActivatedRoute);
|
|
82
|
-
this.alertService = injector.get(NaturalAlertService);
|
|
83
|
-
this.persistenceService = injector.get(NaturalPersistenceService);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Variables that are always forced on a list, in addition to whatever the end-user might select
|
|
87
|
-
*/
|
|
88
|
-
set forcedVariables(variables) {
|
|
89
|
-
if (variables) {
|
|
90
|
-
this.applyForcedVariables(variables);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* If change, check DocumentsComponent that overrides this function without calling super.ngOnInit().
|
|
95
|
-
*/
|
|
96
|
-
ngOnInit() {
|
|
97
|
-
this.routeData = this.route.snapshot.data;
|
|
98
|
-
this.initFromRoute();
|
|
99
|
-
this.initFromPersisted();
|
|
100
|
-
this.variablesManager.defaults('pagination', { pagination: this.defaultPagination });
|
|
101
|
-
this.variablesManager.defaults('sorting', { sorting: this.defaultSorting });
|
|
102
|
-
this.dataSource = new NaturalDataSource(this.getDataObservable());
|
|
103
|
-
this.selection.clear();
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Persist search and then launch whatever is required to refresh the list
|
|
107
|
-
*/
|
|
108
|
-
search(naturalSearchSelections, navigationExtras, resetPagination = true) {
|
|
109
|
-
// Reset page index to restart the pagination (preserve pageSize)
|
|
110
|
-
if (resetPagination) {
|
|
111
|
-
this.variablesManager.merge('pagination', {
|
|
112
|
-
pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
// Persist if activated
|
|
116
|
-
// Two parallel navigations conflict. We first persist the search, then the pagination
|
|
117
|
-
if (this.persistSearch && !this.isPanel) {
|
|
118
|
-
const promise = this.persistenceService.persist('ns', toUrl(naturalSearchSelections), this.route, this.getStorageKey());
|
|
119
|
-
const pagination = this.getPagination();
|
|
120
|
-
this.pagination(pagination, promise, navigationExtras);
|
|
121
|
-
}
|
|
122
|
-
this.translateSearchAndRefreshList(naturalSearchSelections);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Change sorting variables for query and persist the new value in url and local storage
|
|
126
|
-
* The default value is not persisted
|
|
127
|
-
* @param sortingEvents List of material sorting events
|
|
128
|
-
*/
|
|
129
|
-
sorting(sortingEvents) {
|
|
130
|
-
// Reset page index to restart the pagination (preserve pageSize)
|
|
131
|
-
this.variablesManager.merge('pagination', {
|
|
132
|
-
pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),
|
|
133
|
-
});
|
|
134
|
-
// Preserve only sorting events with direction and convert into natural/graphql Sorting type
|
|
135
|
-
let sorting = sortingEvents
|
|
136
|
-
.filter(e => !!e.direction)
|
|
137
|
-
.map(sortingEvent => {
|
|
138
|
-
const s = {
|
|
139
|
-
field: sortingEvent.active,
|
|
140
|
-
};
|
|
141
|
-
if (sortingEvent.direction === 'asc') {
|
|
142
|
-
s.order = SortingOrder.ASC;
|
|
143
|
-
}
|
|
144
|
-
else if (sortingEvent.direction === 'desc') {
|
|
145
|
-
s.order = SortingOrder.DESC;
|
|
146
|
-
}
|
|
147
|
-
if ('nullAsHighest' in sortingEvent) {
|
|
148
|
-
s.nullAsHighest = sortingEvent.nullAsHighest;
|
|
149
|
-
}
|
|
150
|
-
return s;
|
|
151
|
-
});
|
|
152
|
-
// Empty sorting fallbacks on default
|
|
153
|
-
if (sorting.length === 0 && this.defaultSorting) {
|
|
154
|
-
sorting = this.defaultSorting;
|
|
155
|
-
}
|
|
156
|
-
// Set sorting as search variable
|
|
157
|
-
this.variablesManager.set('sorting', { sorting: sorting });
|
|
158
|
-
if (this.persistSearch && !this.isPanel) {
|
|
159
|
-
// If sorting is equal to default sorting, nullify it to remove from persistence (url and session storage)
|
|
160
|
-
const promise = this.persistenceService.persist('so', isEqual(sorting, this.defaultSorting) ? null : sorting, this.route, this.getStorageKey());
|
|
161
|
-
const pagination = this.getPagination();
|
|
162
|
-
this.pagination(pagination, promise);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Return current pagination, either the user defined one, or the default one
|
|
167
|
-
*/
|
|
168
|
-
getPagination() {
|
|
169
|
-
const paginationChannel = this.variablesManager.get('pagination');
|
|
170
|
-
if (paginationChannel && paginationChannel.pagination) {
|
|
171
|
-
// The cast should not be necessary because Typescript correctly narrow down the type to `PaginationInput`
|
|
172
|
-
// but somehow still get confused when returning it
|
|
173
|
-
return paginationChannel.pagination;
|
|
174
|
-
}
|
|
175
|
-
return this.defaultPagination;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Change pagination variables for query and persist in url and local storage the new value
|
|
179
|
-
* The default value not persisted
|
|
180
|
-
*
|
|
181
|
-
* @param event Natural or Paginator PageEvent
|
|
182
|
-
* @param defer Promise (usually a route promise) that defers the redirection from this call to prevent route navigation collision
|
|
183
|
-
* @param navigationExtras Angular router navigation options. Is relevant only if persistSearch is true
|
|
184
|
-
*/
|
|
185
|
-
pagination(event, defer, navigationExtras) {
|
|
186
|
-
let pagination = this.defaultPagination;
|
|
187
|
-
let forPersistence = null;
|
|
188
|
-
// Convert to natural/graphql format, adding missing attributes
|
|
189
|
-
let naturalEvent = pick(event, Object.keys(this.defaultPagination)); // object with only PaginationInput attributes
|
|
190
|
-
naturalEvent = defaults(naturalEvent, this.defaultPagination); // Default with controller values
|
|
191
|
-
if (!isEqual(naturalEvent, this.defaultPagination)) {
|
|
192
|
-
pagination = forPersistence = naturalEvent;
|
|
193
|
-
}
|
|
194
|
-
this.variablesManager.set('pagination', { pagination });
|
|
195
|
-
this.persistPagination(forPersistence, defer, navigationExtras);
|
|
196
|
-
}
|
|
197
|
-
persistPagination(pagination, defer, navigationExtras) {
|
|
198
|
-
if (this.persistSearch && !this.isPanel) {
|
|
199
|
-
// Declare persist function
|
|
200
|
-
const persist = (value) => this.persistenceService.persist('pa', value, this.route, this.getStorageKey(), navigationExtras);
|
|
201
|
-
// Call function directly or when promise is resolved
|
|
202
|
-
if (defer) {
|
|
203
|
-
defer.then(() => persist(pagination));
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
persist(pagination);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Selects all rows if they are not all selected; otherwise clear selection
|
|
212
|
-
*/
|
|
213
|
-
masterToggle() {
|
|
214
|
-
var _a, _b;
|
|
215
|
-
if (this.isAllSelected()) {
|
|
216
|
-
this.selection.clear();
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
(_b = (_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.items.forEach(row => {
|
|
220
|
-
const unwrapped = unwrapNavigable(row);
|
|
221
|
-
if (unwrapped.id) {
|
|
222
|
-
this.selection.select(unwrapped);
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Whether the number of selected elements matches the total number of rows
|
|
229
|
-
*/
|
|
230
|
-
isAllSelected() {
|
|
231
|
-
var _a, _b;
|
|
232
|
-
const numSelected = this.selection.selected.length;
|
|
233
|
-
let numRows = 0;
|
|
234
|
-
(_b = (_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.items.forEach(row => {
|
|
235
|
-
const unwrapped = unwrapNavigable(row);
|
|
236
|
-
if (unwrapped.id) {
|
|
237
|
-
numRows++;
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
return numSelected === numRows;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Called when a bulk action is selected
|
|
244
|
-
*/
|
|
245
|
-
bulkAction() {
|
|
246
|
-
if (!this.bulkActionSelected) {
|
|
247
|
-
throw new Error('Trying to execute a bulk action without selecting one');
|
|
248
|
-
}
|
|
249
|
-
if (!(this.bulkActionSelected in this)) {
|
|
250
|
-
throw new Error('Trying to execute a bulk action that does not exist: ' + this.bulkActionSelected);
|
|
251
|
-
}
|
|
252
|
-
this[this.bulkActionSelected]();
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Header is always visible in non-panel context
|
|
256
|
-
* Is hidden when no results in panels
|
|
257
|
-
*/
|
|
258
|
-
showHeader() {
|
|
259
|
-
return !this.isPanel || (this.isPanel && this.showTable());
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Search is visible in most cases, but hidden on a panel
|
|
263
|
-
*/
|
|
264
|
-
showSearch() {
|
|
265
|
-
return !this.isPanel;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Table should be shown only when there is data
|
|
269
|
-
*/
|
|
270
|
-
showTable() {
|
|
271
|
-
return !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length > 0;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* No results is shown when there is no items, but only in non-panel context only.
|
|
275
|
-
* In panels we want discrete mode, there is no search and no "no-results"
|
|
276
|
-
*/
|
|
277
|
-
showNoResults() {
|
|
278
|
-
return !this.isPanel && !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length === 0;
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Initialize from route.
|
|
282
|
-
*
|
|
283
|
-
* Uses data provided by router such as:
|
|
284
|
-
*
|
|
285
|
-
* - `route.data.forcedVariables`
|
|
286
|
-
* - `route.data.selectedColumns`
|
|
287
|
-
*/
|
|
288
|
-
initFromRoute() {
|
|
289
|
-
// Variables
|
|
290
|
-
if (this.route.snapshot.data.forcedVariables) {
|
|
291
|
-
this.applyForcedVariables(this.route.snapshot.data.forcedVariables);
|
|
292
|
-
}
|
|
293
|
-
// Columns
|
|
294
|
-
if (this.route.snapshot.data.selectedColumns) {
|
|
295
|
-
this.selectedColumns = this.route.snapshot.data.selectedColumns;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
getDataObservable() {
|
|
299
|
-
// Here the casting is a bit unfortunate but required because NaturalAbstractNavigableList
|
|
300
|
-
// breaks the data structure convention (by wrapping items in a structure). Ideally we should remove
|
|
301
|
-
// the casting and resolve things in a better way, but that's too much work for now
|
|
302
|
-
return this.service
|
|
303
|
-
.watchAll(this.variablesManager)
|
|
304
|
-
.pipe(takeUntil(this.ngUnsubscribe));
|
|
305
|
-
}
|
|
306
|
-
initFromPersisted() {
|
|
307
|
-
if (!this.persistSearch || this.isPanel) {
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
const storageKey = this.getStorageKey();
|
|
311
|
-
// Pagination : pa
|
|
312
|
-
const pagination = this.persistenceService.get('pa', this.route, storageKey);
|
|
313
|
-
if (pagination) {
|
|
314
|
-
this.variablesManager.set('pagination', { pagination });
|
|
315
|
-
}
|
|
316
|
-
// Sorting : so
|
|
317
|
-
const sorting = this.persistenceService.get('so', this.route, storageKey);
|
|
318
|
-
if (sorting) {
|
|
319
|
-
this.variablesManager.set('sorting', { sorting });
|
|
320
|
-
}
|
|
321
|
-
// Columns
|
|
322
|
-
const persistedColumns = this.persistenceService.get('col', this.route, storageKey);
|
|
323
|
-
if (typeof persistedColumns === 'string') {
|
|
324
|
-
this.selectedColumns = persistedColumns.split(',');
|
|
325
|
-
}
|
|
326
|
-
// Natural search : ns
|
|
327
|
-
this.naturalSearchSelections = fromUrl(this.persistenceService.get('ns', this.route, storageKey));
|
|
328
|
-
this.translateSearchAndRefreshList(this.naturalSearchSelections, true);
|
|
329
|
-
}
|
|
330
|
-
translateSearchAndRefreshList(naturalSearchSelections, ignoreEmptyFilter = false) {
|
|
331
|
-
const filter = toGraphQLDoctrineFilter(this.naturalSearchFacets, naturalSearchSelections);
|
|
332
|
-
if (ignoreEmptyFilter && isEmpty(filter)) {
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
this.variablesManager.set('natural-search', { filter });
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Return current url excluding last route parameters;
|
|
339
|
-
*/
|
|
340
|
-
getStorageKey() {
|
|
341
|
-
const urlTree = this.router.parseUrl(this.router.url);
|
|
342
|
-
urlTree.root.children.primary.segments[urlTree.root.children.primary.segments.length - 1].parameters = {};
|
|
343
|
-
return urlTree.toString();
|
|
344
|
-
}
|
|
345
|
-
bulkdDeleteConfirmation() {
|
|
346
|
-
return this.alertService.confirm($localize `Suppression`, $localize `Voulez-vous supprimer définitivement les éléments sélectionnés ?`, $localize `Supprimer définitivement`);
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Delete multiple items at once
|
|
350
|
-
*/
|
|
351
|
-
bulkDelete() {
|
|
352
|
-
const subject = new Subject();
|
|
353
|
-
this.bulkdDeleteConfirmation().subscribe(confirmed => {
|
|
354
|
-
this.bulkActionSelected = null;
|
|
355
|
-
if (confirmed) {
|
|
356
|
-
// Assume that our objects have ID. This is true in almost all cases. But if
|
|
357
|
-
// it is not, like AttributeReportComponent, then the inheriting class must
|
|
358
|
-
// never call this method.
|
|
359
|
-
const selection = this.selection.selected;
|
|
360
|
-
this.service.delete(selection).subscribe(() => {
|
|
361
|
-
this.selection.clear();
|
|
362
|
-
this.alertService.info($localize `Supprimé`);
|
|
363
|
-
subject.next();
|
|
364
|
-
subject.complete();
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
});
|
|
368
|
-
return subject;
|
|
369
|
-
}
|
|
370
|
-
applyForcedVariables(variables) {
|
|
371
|
-
if (variables.filter) {
|
|
372
|
-
this.variablesManager.set('forced-filter', { filter: variables.filter });
|
|
373
|
-
}
|
|
374
|
-
if (variables.pagination) {
|
|
375
|
-
this.variablesManager.set('pagination', { pagination: variables.pagination });
|
|
376
|
-
}
|
|
377
|
-
if (variables.sorting) {
|
|
378
|
-
this.variablesManager.set('sorting', { sorting: variables.sorting });
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
selectColumns(columns) {
|
|
382
|
-
this.columnsForTable = columns;
|
|
383
|
-
if (!this.persistSearch || this.isPanel) {
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
386
|
-
// The first selection we receive is the default one made by <natural-columns-picker>
|
|
387
|
-
if (!this.defaultSelectedColumns) {
|
|
388
|
-
this.defaultSelectedColumns = columns;
|
|
389
|
-
}
|
|
390
|
-
else {
|
|
391
|
-
// Persist only if wanted columns are different from default selection
|
|
392
|
-
const value = isEqual(this.defaultSelectedColumns, columns) ? null : columns.join(',');
|
|
393
|
-
this.persistenceService.persist('col', value, this.route, this.getStorageKey());
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
NaturalAbstractList.decorators = [
|
|
398
|
-
{ type: Directive }
|
|
399
|
-
];
|
|
400
|
-
NaturalAbstractList.ctorParameters = () => [
|
|
401
|
-
{ type: undefined },
|
|
402
|
-
{ type: Injector }
|
|
403
|
-
];
|
|
404
|
-
NaturalAbstractList.propDecorators = {
|
|
405
|
-
persistSearch: [{ type: Input }],
|
|
406
|
-
selectedColumns: [{ type: Input }],
|
|
407
|
-
forcedVariables: [{ type: Input }]
|
|
408
|
-
};
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRzVFLE9BQU8sRUFBQyxjQUFjLEVBQTBCLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSTdELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxpQkFBaUIsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNILDRCQUE0QixFQUk1QixZQUFZLEdBQ2YsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJekMsU0FBUyxlQUFlLENBQUMsSUFBb0I7SUFDekMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7UUFDM0Ms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LENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDbkY7SUFDTCxDQUFDOzs7WUEzZkosU0FBUzs7OztZQS9DUyxRQUFROzs7NEJBd0V0QixLQUFLOzhCQWVMLEtBQUs7OEJBMkVMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYWdlRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQge1NvcnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtkZWZhdWx0cywgaXNFbXB0eSwgaXNFcXVhbCwgcGlja30gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL21vZHVsZXMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuLi9tb2R1bGVzL3BhbmVscy9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge3RvR3JhcGhRTERvY3RyaW5lRmlsdGVyfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC9jbGFzc2VzL2dyYXBocWwtZG9jdHJpbmUnO1xuaW1wb3J0IHtmcm9tVXJsLCB0b1VybH0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy91cmwnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoRmFjZXRzfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbERhdGFTb3VyY2UsIFBhZ2luYXRlZERhdGF9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLFxuICAgIFBhZ2luYXRpb25JbnB1dCxcbiAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICBTb3J0aW5nLFxuICAgIFNvcnRpbmdPcmRlcixcbn0gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7RXh0cmFjdFRhbGwsIEV4dHJhY3RWYWxsLCBMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge05hdmlnYWJsZUl0ZW19IGZyb20gJy4vYWJzdHJhY3QtbmF2aWdhYmxlLWxpc3QnO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxudHlwZSBNYXliZU5hdmlnYWJsZSA9IExpdGVyYWwgfCBOYXZpZ2FibGVJdGVtPExpdGVyYWw+O1xuXG5mdW5jdGlvbiB1bndyYXBOYXZpZ2FibGUoaXRlbTogTWF5YmVOYXZpZ2FibGUpOiBMaXRlcmFsIHtcbiAgICBpZiAoJ2l0ZW0nIGluIGl0ZW0gJiYgJ2hhc05hdmlnYXRpb24nIGluIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhlbHBzIG1hbmFnaW5nIGEgbGlzdCBvZiBwYWdpbmF0ZWQgaXRlbXMgdGhhdCBjYW4gYmUgZmlsdGVyZWQsXG4gKiBzZWxlY3RlZCwgYW5kIHRoZW4gYnVsayBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gc2VsZWN0aW9uLlxuICpcbiAqIENvbXBvbmVudHMgaW5oZXJpdGluZyBmcm9tIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgYXMgc3RhbmRhbG9uZSB3aXRoIGlucHV0IGF0dHJpYnV0ZXMuXG4gKlxuICogVXNhZ2UgOlxuICogPG5hdHVyYWwtbXktbGlzdGluZyBbZm9yY2VkVmFyaWFibGVzXT1cIntmaWx0ZXI6Li4ufVwiIFtzZWxlY3RlZENvbHVtbnNdPVwiWydjb2wxJ11cIiBbcGVyc2lzdFNlYXJjaF09XCJmYWxzZVwiPlxuICovXG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQWJzdHJhY3RMaXN0PFxuICAgICAgICBUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgICAgICAvLyBJbiBtb3N0IGNhc2UgdGhpcyBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBieSBpbmhlcml0aW5nIGNsYXNzZXMuXG4gICAgICAgIC8vIEl0IHNob3VsZCBvbmx5IGJlIHNwZWNpZmllZCB0byBvdmVycmlkZSBkZWZhdWx0IGlmIHRoZSBzZXJ2aWNlIGl0ZW1zIGFyZVxuICAgICAgICAvLyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgc3RydWN0dXJlIGxpa2UgaW4gTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICBUYWxsIGV4dGVuZHMgUGFnaW5hdGVkRGF0YTxNYXliZU5hdmlnYWJsZT4gPSBFeHRyYWN0VGFsbDxUU2VydmljZT4sXG4gICAgPlxuICAgIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0UGFuZWxcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgLyoqXG4gICAgICogV2hlcmV2ZXIgc2VhcmNoIHNob3VsZCBiZSBsb2FkZWQgZnJvbSB1cmwvc3RvcmFnZSBhbmQgcGVyc2lzdGVkIGluIGl0IHRvby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcGVyc2lzdFNlYXJjaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb2x1bW5zIGxpc3QgYWZ0ZXIgaW50ZXJhY3Rpb24gd2l0aCA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uc0ZvclRhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY29sdW1uIHNlbGVjdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgaGFwcGVuZWQgYWZ0ZXIgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+IGluaXRpYWxpemF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVmlzaWJsZSAoY2hlY2tlZCkgY29sdW1uc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZENvbHVtbnM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFNvdXJjZSBvZiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRhU291cmNlPzogTmF0dXJhbERhdGFTb3VyY2U8VGFsbD47XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb24gZm9yIGJ1bGsgYWN0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8RXh0cmFjdFRhbGw8VFNlcnZpY2U+WydpdGVtcyddWzBdPih0cnVlLCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IGV4ZWN1dGVkIGFjdGlvbiBmcm9tIGJ1bGsgbWVudVxuICAgICAqL1xuICAgIHB1YmxpYyBidWxrQWN0aW9uU2VsZWN0ZWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2VudHJhbGlzYXRpb24gb2YgcXVlcnkgdmFyaWFibGVzXG4gICAgICovXG4gICAgcHVibGljIHZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8RXh0cmFjdFZhbGw8VFNlcnZpY2U+PiA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFxuICAgICAgICBFeHRyYWN0VmFsbDxUU2VydmljZT5cbiAgICA+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBuYXR1cmFsLXNlYXJjaCBmYWNldHNcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF0dXJhbFNlYXJjaEZhY2V0czogTmF0dXJhbFNlYXJjaEZhY2V0cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUmVzdWx0IG9mIGEgc2VhcmNoIChjYW4gYmUgcHJvdmlkZWQgYXMgaW5wdXQgZm9yIGluaXRpYWxpc2F0aW9uKVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMgPSBbW11dO1xuXG4gICAgLyoqXG4gICAgICogRGF0YSBhdHRyaWJ1dGUgcHJvdmlkZWQgYnkgYWN0aXZhdGVkIHJvdXRlIHNuYXBzaG90XG4gICAgICovXG4gICAgcHVibGljIHJvdXRlRGF0YT86IERhdGE7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHBhZ2Ugc2l6ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zID0gWzUsIDEwLCAyNSwgNTAsIDEwMCwgMjAwXTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgcGFnaW5hdGlvbiBzZXR1cFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0UGFnaW5hdGlvbjogUmVxdWlyZWQ8UGFnaW5hdGlvbklucHV0PiA9IHtcbiAgICAgICAgb2Zmc2V0OiBudWxsLFxuICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCBzb3J0aW5nXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRTb3J0aW5nPzogQXJyYXk8U29ydGluZz47XG5cbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXI7XG4gICAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwcm90ZWN0ZWQgYWxlcnRTZXJ2aWNlOiBOYXR1cmFsQWxlcnRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBwZXJzaXN0ZW5jZVNlcnZpY2U6IE5hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5hdHVyYWxBbGVydFNlcnZpY2UpO1xuICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZSA9IGluamVjdG9yLmdldChOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYXJpYWJsZXMgdGhhdCBhcmUgYWx3YXlzIGZvcmNlZCBvbiBhIGxpc3QsIGluIGFkZGl0aW9uIHRvIHdoYXRldmVyIHRoZSBlbmQtdXNlciBtaWdodCBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgZm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGNoYW5nZSwgY2hlY2sgRG9jdW1lbnRzQ29tcG9uZW50IHRoYXQgb3ZlcnJpZGVzIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBjYWxsaW5nIHN1cGVyLm5nT25Jbml0KCkuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgICAgICB0aGlzLmluaXRGcm9tUm91dGUoKTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVBlcnNpc3RlZCgpO1xuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5kZWZhdWx0cygncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB0aGlzLmRlZmF1bHRQYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZGVmYXVsdHMoJ3NvcnRpbmcnLCB7c29ydGluZzogdGhpcy5kZWZhdWx0U29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2U8VGFsbD4odGhpcy5nZXREYXRhT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJzaXN0IHNlYXJjaCBhbmQgdGhlbiBsYXVuY2ggd2hhdGV2ZXIgaXMgcmVxdWlyZWQgdG8gcmVmcmVzaCB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2goXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgICAgIHJlc2V0UGFnaW5hdGlvbiA9IHRydWUsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG5cbiAgICAgICAgaWYgKHJlc2V0UGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICAgICAgfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyc2lzdCBpZiBhY3RpdmF0ZWRcbiAgICAgICAgLy8gVHdvIHBhcmFsbGVsIG5hdmlnYXRpb25zIGNvbmZsaWN0LiBXZSBmaXJzdCBwZXJzaXN0IHRoZSBzZWFyY2gsIHRoZW4gdGhlIHBhZ2luYXRpb25cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnbnMnLFxuICAgICAgICAgICAgICAgIHRvVXJsKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHNvcnRpbmcgdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCB0aGUgbmV3IHZhbHVlIGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vdCBwZXJzaXN0ZWRcbiAgICAgKiBAcGFyYW0gc29ydGluZ0V2ZW50cyBMaXN0IG9mIG1hdGVyaWFsIHNvcnRpbmcgZXZlbnRzXG4gICAgICovXG4gICAgcHVibGljIHNvcnRpbmcoc29ydGluZ0V2ZW50czogKFNvcnQgJiBQYXJ0aWFsPFBpY2s8U29ydGluZywgJ251bGxBc0hpZ2hlc3QnPj4pW10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmVzZXQgcGFnZSBpbmRleCB0byByZXN0YXJ0IHRoZSBwYWdpbmF0aW9uIChwcmVzZXJ2ZSBwYWdlU2l6ZSlcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogcGljayh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uLCBbJ29mZnNldCcsICdwYWdlSW5kZXgnXSksXG4gICAgICAgIH0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICAvLyBQcmVzZXJ2ZSBvbmx5IHNvcnRpbmcgZXZlbnRzIHdpdGggZGlyZWN0aW9uIGFuZCBjb252ZXJ0IGludG8gbmF0dXJhbC9ncmFwaHFsIFNvcnRpbmcgdHlwZVxuICAgICAgICBsZXQgc29ydGluZzogU29ydGluZ1tdID0gc29ydGluZ0V2ZW50c1xuICAgICAgICAgICAgLmZpbHRlcihlID0+ICEhZS5kaXJlY3Rpb24pXG4gICAgICAgICAgICAubWFwKHNvcnRpbmdFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgczogU29ydGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHNvcnRpbmdFdmVudC5hY3RpdmUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkFTQztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnRpbmdFdmVudC5kaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkRFU0M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCdudWxsQXNIaWdoZXN0JyBpbiBzb3J0aW5nRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5udWxsQXNIaWdoZXN0ID0gc29ydGluZ0V2ZW50Lm51bGxBc0hpZ2hlc3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBFbXB0eSBzb3J0aW5nIGZhbGxiYWNrcyBvbiBkZWZhdWx0XG4gICAgICAgIGlmIChzb3J0aW5nLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmRlZmF1bHRTb3J0aW5nKSB7XG4gICAgICAgICAgICBzb3J0aW5nID0gdGhpcy5kZWZhdWx0U29ydGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBzb3J0aW5nIGFzIHNlYXJjaCB2YXJpYWJsZVxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdzb3J0aW5nJywge3NvcnRpbmc6IHNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAvLyBJZiBzb3J0aW5nIGlzIGVxdWFsIHRvIGRlZmF1bHQgc29ydGluZywgbnVsbGlmeSBpdCB0byByZW1vdmUgZnJvbSBwZXJzaXN0ZW5jZSAodXJsIGFuZCBzZXNzaW9uIHN0b3JhZ2UpXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnc28nLFxuICAgICAgICAgICAgICAgIGlzRXF1YWwoc29ydGluZywgdGhpcy5kZWZhdWx0U29ydGluZykgPyBudWxsIDogc29ydGluZyxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgcGFnaW5hdGlvbiwgZWl0aGVyIHRoZSB1c2VyIGRlZmluZWQgb25lLCBvciB0aGUgZGVmYXVsdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbklucHV0IHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkNoYW5uZWw6IFBhcnRpYWw8RXh0cmFjdFZhbGw8VFNlcnZpY2U+PiB8IHVuZGVmaW5lZCA9IHRoaXMudmFyaWFibGVzTWFuYWdlci5nZXQoJ3BhZ2luYXRpb24nKTtcblxuICAgICAgICBpZiAocGFnaW5hdGlvbkNoYW5uZWwgJiYgcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgLy8gVGhlIGNhc3Qgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBUeXBlc2NyaXB0IGNvcnJlY3RseSBuYXJyb3cgZG93biB0aGUgdHlwZSB0byBgUGFnaW5hdGlvbklucHV0YFxuICAgICAgICAgICAgLy8gYnV0IHNvbWVob3cgc3RpbGwgZ2V0IGNvbmZ1c2VkIHdoZW4gcmV0dXJuaW5nIGl0XG4gICAgICAgICAgICByZXR1cm4gcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbiBhcyBQYWdpbmF0aW9uSW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgcGFnaW5hdGlvbiB2YXJpYWJsZXMgZm9yIHF1ZXJ5IGFuZCBwZXJzaXN0IGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZSB0aGUgbmV3IHZhbHVlXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgbm90IHBlcnNpc3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IE5hdHVyYWwgb3IgUGFnaW5hdG9yIFBhZ2VFdmVudFxuICAgICAqIEBwYXJhbSBkZWZlciBQcm9taXNlICh1c3VhbGx5IGEgcm91dGUgcHJvbWlzZSkgdGhhdCBkZWZlcnMgdGhlIHJlZGlyZWN0aW9uIGZyb20gdGhpcyBjYWxsIHRvIHByZXZlbnQgcm91dGUgbmF2aWdhdGlvbiBjb2xsaXNpb25cbiAgICAgKiBAcGFyYW0gbmF2aWdhdGlvbkV4dHJhcyBBbmd1bGFyIHJvdXRlciBuYXZpZ2F0aW9uIG9wdGlvbnMuIElzIHJlbGV2YW50IG9ubHkgaWYgcGVyc2lzdFNlYXJjaCBpcyB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRpb24oXG4gICAgICAgIGV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgfCBQYWdlRXZlbnQsXG4gICAgICAgIGRlZmVyPzogUHJvbWlzZTx1bmtub3duPixcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgPSB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uO1xuICAgICAgICBsZXQgZm9yUGVyc2lzdGVuY2U6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbmF0dXJhbC9ncmFwaHFsIGZvcm1hdCwgYWRkaW5nIG1pc3NpbmcgYXR0cmlidXRlc1xuICAgICAgICBsZXQgbmF0dXJhbEV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgPSBwaWNrKGV2ZW50LCBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKSk7IC8vIG9iamVjdCB3aXRoIG9ubHkgUGFnaW5hdGlvbklucHV0IGF0dHJpYnV0ZXNcbiAgICAgICAgbmF0dXJhbEV2ZW50ID0gZGVmYXVsdHMobmF0dXJhbEV2ZW50LCB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKTsgLy8gRGVmYXVsdCB3aXRoIGNvbnRyb2xsZXIgdmFsdWVzXG5cbiAgICAgICAgaWYgKCFpc0VxdWFsKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24gPSBmb3JQZXJzaXN0ZW5jZSA9IG5hdHVyYWxFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLnBlcnNpc3RQYWdpbmF0aW9uKGZvclBlcnNpc3RlbmNlLCBkZWZlciwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcnNpc3RQYWdpbmF0aW9uKFxuICAgICAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsLFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZXJzaXN0U2VhcmNoICYmICF0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIC8vIERlY2xhcmUgcGVyc2lzdCBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgcGVyc2lzdCA9ICh2YWx1ZTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdwYScsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSwgbmF2aWdhdGlvbkV4dHJhcyk7XG5cbiAgICAgICAgICAgIC8vIENhbGwgZnVuY3Rpb24gZGlyZWN0bHkgb3Igd2hlbiBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICAgICAgICBpZiAoZGVmZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZlci50aGVuKCgpID0+IHBlcnNpc3QocGFnaW5hdGlvbikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0KHBhZ2luYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIG1hc3RlclRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW53cmFwcGVkID0gdW53cmFwTmF2aWdhYmxlKHJvdyk7XG4gICAgICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodW53cmFwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgbGV0IG51bVJvd3MgPSAwO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lml0ZW1zLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgIG51bVJvd3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgYnVsayBhY3Rpb24gaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVsa0FjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gZXhlY3V0ZSBhIGJ1bGsgYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW5nIG9uZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0OiAnICsgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMgYXMgYW55KVt0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZF0oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWFkZXIgaXMgYWx3YXlzIHZpc2libGUgaW4gbm9uLXBhbmVsIGNvbnRleHRcbiAgICAgKiBJcyBoaWRkZW4gd2hlbiBubyByZXN1bHRzIGluIHBhbmVsc1xuICAgICAqL1xuICAgIHB1YmxpYyBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCB8fCAodGhpcy5pc1BhbmVsICYmIHRoaXMuc2hvd1RhYmxlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpcyB2aXNpYmxlIGluIG1vc3QgY2FzZXMsIGJ1dCBoaWRkZW4gb24gYSBwYW5lbFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBzaG91bGQgYmUgc2hvd24gb25seSB3aGVuIHRoZXJlIGlzIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGFTb3VyY2UgJiYgISF0aGlzLmRhdGFTb3VyY2UuZGF0YSAmJiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vIHJlc3VsdHMgaXMgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBpdGVtcywgYnV0IG9ubHkgaW4gbm9uLXBhbmVsIGNvbnRleHQgb25seS5cbiAgICAgKiBJbiBwYW5lbHMgd2Ugd2FudCBkaXNjcmV0ZSBtb2RlLCB0aGVyZSBpcyBubyBzZWFyY2ggYW5kIG5vIFwibm8tcmVzdWx0c1wiXG4gICAgICovXG4gICAgcHVibGljIHNob3dOb1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1BhbmVsICYmICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgZnJvbSByb3V0ZS5cbiAgICAgKlxuICAgICAqIFVzZXMgZGF0YSBwcm92aWRlZCBieSByb3V0ZXIgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gYHJvdXRlLmRhdGEuZm9yY2VkVmFyaWFibGVzYFxuICAgICAqIC0gYHJvdXRlLmRhdGEuc2VsZWN0ZWRDb2x1bW5zYFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0RnJvbVJvdXRlKCk6IHZvaWQge1xuICAgICAgICAvLyBWYXJpYWJsZXNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5mb3JjZWRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmZvcmNlZFZhcmlhYmxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5zZWxlY3RlZENvbHVtbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0YU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIC8vIEhlcmUgdGhlIGNhc3RpbmcgaXMgYSBiaXQgdW5mb3J0dW5hdGUgYnV0IHJlcXVpcmVkIGJlY2F1c2UgTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICAvLyBicmVha3MgdGhlIGRhdGEgc3RydWN0dXJlIGNvbnZlbnRpb24gKGJ5IHdyYXBwaW5nIGl0ZW1zIGluIGEgc3RydWN0dXJlKS4gSWRlYWxseSB3ZSBzaG91bGQgcmVtb3ZlXG4gICAgICAgIC8vIHRoZSBjYXN0aW5nIGFuZCByZXNvbHZlIHRoaW5ncyBpbiBhIGJldHRlciB3YXksIGJ1dCB0aGF0J3MgdG9vIG11Y2ggd29yayBmb3Igbm93XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC53YXRjaEFsbCh0aGlzLnZhcmlhYmxlc01hbmFnZXIgYXMgdW5rbm93biBhcyBhbnkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPFRhbGw+O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0RnJvbVBlcnNpc3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG5cbiAgICAgICAgLy8gUGFnaW5hdGlvbiA6IHBhXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ3BhJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0aW5nIDogc29cbiAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnc28nLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1ucyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnY29sJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVkQ29sdW1ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcGVyc2lzdGVkQ29sdW1ucy5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmF0dXJhbCBzZWFyY2ggOiBuc1xuICAgICAgICB0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gZnJvbVVybCh0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ25zJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSkpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KHRoaXMubmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChcbiAgICAgICAgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLFxuICAgICAgICBpZ25vcmVFbXB0eUZpbHRlciA9IGZhbHNlLFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLm5hdHVyYWxTZWFyY2hGYWNldHMsIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTtcblxuICAgICAgICBpZiAoaWdub3JlRW1wdHlGaWx0ZXIgJiYgaXNFbXB0eShmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXR1cmFsLXNlYXJjaCcsIHtmaWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgdXJsIGV4Y2x1ZGluZyBsYXN0IHJvdXRlIHBhcmFtZXRlcnM7XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFN0b3JhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgIHVybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzW3VybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzLmxlbmd0aCAtIDFdLnBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHVybFRyZWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYnVsa2REZWxldGVDb25maXJtYXRpb24oKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByZXNzaW9uYCxcbiAgICAgICAgICAgICRsb2NhbGl6ZWBWb3VsZXotdm91cyBzdXBwcmltZXIgZMOpZmluaXRpdmVtZW50IGxlcyDDqWzDqW1lbnRzIHPDqWxlY3Rpb25uw6lzID9gLFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnRgLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBtdWx0aXBsZSBpdGVtcyBhdCBvbmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGJ1bGtEZWxldGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICB0aGlzLmJ1bGtkRGVsZXRlQ29uZmlybWF0aW9uKCkuc3Vic2NyaWJlKGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgb3VyIG9iamVjdHMgaGF2ZSBJRC4gVGhpcyBpcyB0cnVlIGluIGFsbW9zdCBhbGwgY2FzZXMuIEJ1dCBpZlxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIG5vdCwgbGlrZSBBdHRyaWJ1dGVSZXBvcnRDb21wb25lbnQsIHRoZW4gdGhlIGluaGVyaXRpbmcgY2xhc3MgbXVzdFxuICAgICAgICAgICAgICAgIC8vIG5ldmVyIGNhbGwgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQgYXMge2lkOiBzdHJpbmd9W107XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKHNlbGVjdGlvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICBpZiAodmFyaWFibGVzLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnZm9yY2VkLWZpbHRlcicsIHtmaWx0ZXI6IHZhcmlhYmxlcy5maWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbjogdmFyaWFibGVzLnBhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZzogdmFyaWFibGVzLnNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnNGb3JUYWJsZSA9IGNvbHVtbnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0aW9uIHdlIHJlY2VpdmUgaXMgdGhlIGRlZmF1bHQgb25lIG1hZGUgYnkgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUGVyc2lzdCBvbmx5IGlmIHdhbnRlZCBjb2x1bW5zIGFyZSBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0IHNlbGVjdGlvblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpc0VxdWFsKHRoaXMuZGVmYXVsdFNlbGVjdGVkQ29sdW1ucywgY29sdW1ucykgPyBudWxsIDogY29sdW1ucy5qb2luKCcsJyk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdjb2wnLCB2YWx1ZSwgdGhpcy5yb3V0ZSwgdGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
// tslint:disable:directive-class-suffix
|
|
2
|
-
import { Directive, Injector, Input } from '@angular/core';
|
|
3
|
-
import { map, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { NaturalAbstractList } from './abstract-list';
|
|
5
|
-
import { NaturalQueryVariablesManager } from './query-variable-manager';
|
|
6
|
-
/**
|
|
7
|
-
* This class helps managing a list of paginated items that can be filtered,
|
|
8
|
-
* selected, and then bulk actions can be performed on selection.
|
|
9
|
-
*
|
|
10
|
-
* @dynamic
|
|
11
|
-
*/
|
|
12
|
-
export class NaturalAbstractNavigableList extends NaturalAbstractList {
|
|
13
|
-
constructor(service, injector) {
|
|
14
|
-
super(service, injector);
|
|
15
|
-
/**
|
|
16
|
-
* Name of filter for child items to access ancestor item
|
|
17
|
-
*/
|
|
18
|
-
this.ancestorRelationName = 'parent';
|
|
19
|
-
this.oldAncertorId = null;
|
|
20
|
-
this.breadcrumbs = [];
|
|
21
|
-
}
|
|
22
|
-
ngOnInit() {
|
|
23
|
-
// In fact, "na" and "ns" key may exist at the same time in url (but shouldn't).
|
|
24
|
-
// When this happens, on page reload, search is priority.
|
|
25
|
-
// "na" is a trailing param, and should be considered only when there is no search
|
|
26
|
-
this.route.params.subscribe(params => {
|
|
27
|
-
// "ns" stands for natural-search to be shorter in url
|
|
28
|
-
if (params['ns']) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
let navigationConditionValue = null;
|
|
32
|
-
// "na" stands for "navigation" (relation) in url
|
|
33
|
-
if (params['na']) {
|
|
34
|
-
navigationConditionValue = { have: { values: [params['na']] } };
|
|
35
|
-
this.service.getOne(params['na']).subscribe(
|
|
36
|
-
// TODO casting should disappear and instead this class should enforce
|
|
37
|
-
// the service to support Tone with a new generic
|
|
38
|
-
(ancestor) => (this.breadcrumbs = this.getBreadcrumb(ancestor)));
|
|
39
|
-
const hasAncestorChanged = params['na'] !== this.oldAncertorId;
|
|
40
|
-
this.oldAncertorId = params['na'];
|
|
41
|
-
this.clearSearch(hasAncestorChanged);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
navigationConditionValue = { empty: {} };
|
|
45
|
-
this.breadcrumbs = [];
|
|
46
|
-
}
|
|
47
|
-
const condition = {};
|
|
48
|
-
condition[this.ancestorRelationName] = navigationConditionValue;
|
|
49
|
-
const variables = { filter: { groups: [{ conditions: [condition] }] } };
|
|
50
|
-
// todo : check why without "as Vall" it errors. Vall is supposed to be QueryVariables, and filter too.
|
|
51
|
-
this.variablesManager.set('navigation', variables);
|
|
52
|
-
});
|
|
53
|
-
super.ngOnInit();
|
|
54
|
-
}
|
|
55
|
-
getDataObservable() {
|
|
56
|
-
return this.service.watchAll(this.variablesManager).pipe(takeUntil(this.ngUnsubscribe), map(result => {
|
|
57
|
-
// On each data arriving, we query children count to show/hide chevron
|
|
58
|
-
const navigableItems = result.items.map(item => {
|
|
59
|
-
const navigableItem = {
|
|
60
|
-
item: item,
|
|
61
|
-
hasNavigation: false,
|
|
62
|
-
};
|
|
63
|
-
const condition = {};
|
|
64
|
-
condition[this.ancestorRelationName] = { have: { values: [item.id] } };
|
|
65
|
-
const variables = { filter: { groups: [{ conditions: [condition] }] } };
|
|
66
|
-
const qvm = new NaturalQueryVariablesManager();
|
|
67
|
-
qvm.set('variables', variables);
|
|
68
|
-
this.service.count(qvm).subscribe(count => (navigableItem.hasNavigation = count > 0));
|
|
69
|
-
return navigableItem;
|
|
70
|
-
});
|
|
71
|
-
const navigableResult = Object.assign(Object.assign({}, result), { items: navigableItems });
|
|
72
|
-
return navigableResult;
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
translateSearchAndRefreshList(naturalSearchSelections) {
|
|
76
|
-
// Clear navigation filter if there is a search
|
|
77
|
-
if (naturalSearchSelections.some(s => s.length)) {
|
|
78
|
-
this.variablesManager.set('navigation', null);
|
|
79
|
-
this.breadcrumbs = [];
|
|
80
|
-
}
|
|
81
|
-
super.translateSearchAndRefreshList(naturalSearchSelections);
|
|
82
|
-
}
|
|
83
|
-
clearSearch(resetPagination = true) {
|
|
84
|
-
this.naturalSearchSelections = [[]];
|
|
85
|
-
super.search([[]], undefined, resetPagination);
|
|
86
|
-
this.persistenceService.persistInStorage('ns', null, this.getStorageKey());
|
|
87
|
-
}
|
|
88
|
-
search(naturalSearchSelections, navigationExtras, resetPagination = true) {
|
|
89
|
-
this.persistenceService.persistInUrl('na', null, this.route).then(() => {
|
|
90
|
-
super.search(naturalSearchSelections, navigationExtras, resetPagination);
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Return an array for router link usage
|
|
95
|
-
*/
|
|
96
|
-
getChildLink(ancestor) {
|
|
97
|
-
if (ancestor && ancestor.id) {
|
|
98
|
-
return ['.', { na: ancestor.id }];
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return ['.', {}];
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Depth is limited by queries
|
|
106
|
-
* @param item with an ancestor relation (must match ancestorRelationName attribute)
|
|
107
|
-
*/
|
|
108
|
-
getBreadcrumb(item) {
|
|
109
|
-
const ancestor = item[this.ancestorRelationName];
|
|
110
|
-
if (ancestor) {
|
|
111
|
-
return this.getBreadcrumb(ancestor).concat([item]);
|
|
112
|
-
}
|
|
113
|
-
return [item];
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
NaturalAbstractNavigableList.decorators = [
|
|
117
|
-
{ type: Directive }
|
|
118
|
-
];
|
|
119
|
-
NaturalAbstractNavigableList.ctorParameters = () => [
|
|
120
|
-
{ type: undefined },
|
|
121
|
-
{ type: Injector }
|
|
122
|
-
];
|
|
123
|
-
NaturalAbstractNavigableList.propDecorators = {
|
|
124
|
-
ancestorRelationName: [{ type: Input }]
|
|
125
|
-
};
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhYmxlLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvY2xhc3Nlcy9hYnN0cmFjdC1uYXZpZ2FibGUtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzlDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQWN0Rjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyw0QkFjVCxTQUFRLG1CQUE4RjtJQVl0RyxZQUFZLE9BQWlCLEVBQUUsUUFBa0I7UUFDN0MsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQVY3Qjs7V0FFRztRQUNhLHlCQUFvQixHQUFHLFFBQVEsQ0FBQztRQUV4QyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFFckMsZ0JBQVcsR0FBcUIsRUFBRSxDQUFDO0lBSTFDLENBQUM7SUFFTSxRQUFRO1FBQ1gsZ0ZBQWdGO1FBQ2hGLHlEQUF5RDtRQUN6RCxrRkFBa0Y7UUFDbEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLHNEQUFzRDtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLHdCQUF3QixHQUFlLElBQUksQ0FBQztZQUVoRCxpREFBaUQ7WUFDakQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2Qsd0JBQXdCLEdBQUcsRUFBQyxJQUFJ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R0FBRyxFQUFFLEVBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDSCxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGFBQWEsQ0FBQyxJQUFvQjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDakQsSUFBSSxRQUFRLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN0RDtRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDOzs7WUF2SkosU0FBUzs7OztZQTNCUyxRQUFROzs7bUNBZ0R0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXJMaW5rfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoU2VsZWN0aW9uc30gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvdHlwZXMvdmFsdWVzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TGlzdH0gZnJvbSAnLi9hYnN0cmFjdC1saXN0JztcbmltcG9ydCB7UGFnaW5hdGVkRGF0YX0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge05hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsIFF1ZXJ5VmFyaWFibGVzfSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtFeHRyYWN0VGFsbCwgRXh0cmFjdFRhbGxPbmUsIEV4dHJhY3RWYWxsLCBMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG50eXBlIEJyZWFkY3J1bWJJdGVtID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xufSAmIExpdGVyYWw7XG5cbmV4cG9ydCB0eXBlIE5hdmlnYWJsZUl0ZW08VD4gPSB7XG4gICAgaXRlbTogVDtcbiAgICBoYXNOYXZpZ2F0aW9uOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhlbHBzIG1hbmFnaW5nIGEgbGlzdCBvZiBwYWdpbmF0ZWQgaXRlbXMgdGhhdCBjYW4gYmUgZmlsdGVyZWQsXG4gKiBzZWxlY3RlZCwgYW5kIHRoZW4gYnVsayBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gc2VsZWN0aW9uLlxuICpcbiAqIEBkeW5hbWljXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdE5hdmlnYWJsZUxpc3Q8XG4gICAgICAgIFRTZXJ2aWNlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgUGFnaW5hdGVkRGF0YTx7aWQ6IHN0cmluZ30+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RMaXN0PFRTZXJ2aWNlLCBQYWdpbmF0ZWREYXRhPE5hdmlnYWJsZUl0ZW08RXh0cmFjdFRhbGw8VFNlcnZpY2U+WydpdGVtcyddWzBdPj4+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgZmlsdGVyIGZvciBjaGlsZCBpdGVtcyB0byBhY2Nlc3MgYW5jZXN0b3IgaXRlbVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbmNlc3RvclJlbGF0aW9uTmFtZSA9ICdwYXJlbnQnO1xuXG4gICAgcHJpdmF0ZSBvbGRBbmNlcnRvcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBicmVhZGNydW1iczogQnJlYWRjcnVtYkl0ZW1bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3Ioc2VydmljZTogVFNlcnZpY2UsIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBzdXBlcihzZXJ2aWNlLCBpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBJbiBmYWN0LCBcIm5hXCIgYW5kIFwibnNcIiBrZXkgbWF5IGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUgaW4gdXJsIChidXQgc2hvdWxkbid0KS5cbiAgICAgICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIG9uIHBhZ2UgcmVsb2FkLCBzZWFyY2ggaXMgcHJpb3JpdHkuXG4gICAgICAgIC8vIFwibmFcIiBpcyBhIHRyYWlsaW5nIHBhcmFtLCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgb25seSB3aGVuIHRoZXJlIGlzIG5vIHNlYXJjaFxuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgICAgIC8vIFwibnNcIiBzdGFuZHMgZm9yIG5hdHVyYWwtc2VhcmNoIHRvIGJlIHNob3J0ZXIgaW4gdXJsXG4gICAgICAgICAgICBpZiAocGFyYW1zWyducyddKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbmF2aWdhdGlvbkNvbmRpdGlvblZhbHVlOiBhbnkgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gXCJuYVwiIHN0YW5kcyBmb3IgXCJuYXZpZ2F0aW9uXCIgKHJlbGF0aW9uKSBpbiB1cmxcbiAgICAgICAgICAgIGlmIChwYXJhbXNbJ25hJ10pIHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uQ29uZGl0aW9uVmFsdWUgPSB7aGF2ZToge3ZhbHVlczogW3BhcmFtc1snbmEnXV19fTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0T25lKHBhcmFtc1snbmEnXSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIGNhc3Rpbmcgc2hvdWxkIGRpc2FwcGVhciBhbmQgaW5zdGVhZCB0aGlzIGNsYXNzIHNob3VsZCBlbmZvcmNlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzZXJ2aWNlIHRvIHN1cHBvcnQgVG9uZSB3aXRoIGEgbmV3IGdlbmVyaWNcbiAgICAgICAgICAgICAgICAgICAgKGFuY2VzdG9yOiBCcmVhZGNydW1iSXRlbSkgPT4gKHRoaXMuYnJlYWRjcnVtYnMgPSB0aGlzLmdldEJyZWFkY3J1bWIoYW5jZXN0b3IpKSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzQW5jZXN0b3JDaGFuZ2VkID0gcGFyYW1zWyduYSddICE9PSB0aGlzLm9sZEFuY2VydG9ySWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vbGRBbmNlcnRvcklkID0gcGFyYW1zWyduYSddO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2goaGFzQW5jZXN0b3JDaGFuZ2VkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkNvbmRpdGlvblZhbHVlID0ge2VtcHR5OiB7fX07XG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb246IExpdGVyYWwgPSB7fTtcbiAgICAgICAgICAgIGNvbmRpdGlvblt0aGlzLmFuY2VzdG9yUmVsYXRpb25OYW1lXSA9IG5hdmlnYXRpb25Db25kaXRpb25WYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgPSB7ZmlsdGVyOiB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtjb25kaXRpb25dfV19fTtcblxuICAgICAgICAgICAgLy8gdG9kbyA6IGNoZWNrIHdoeSB3aXRob3V0IFwiYXMgVmFsbFwiIGl0IGVycm9ycy4gVmFsbCBpcyBzdXBwb3NlZCB0byBiZSBRdWVyeVZhcmlhYmxlcywgYW5kIGZpbHRlciB0b28uXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXZpZ2F0aW9uJywgdmFyaWFibGVzIGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldERhdGFPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8UGFnaW5hdGVkRGF0YTxOYXZpZ2FibGVJdGVtPEV4dHJhY3RUYWxsT25lPFRTZXJ2aWNlPj4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2Uud2F0Y2hBbGwodGhpcy52YXJpYWJsZXNNYW5hZ2VyIGFzIHVua25vd24gYXMgYW55KS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPbiBlYWNoIGRhdGEgYXJyaXZpbmcsIHdlIHF1ZXJ5IGNoaWxkcmVuIGNvdW50IHRvIHNob3cvaGlkZSBjaGV2cm9uXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhYmxlSXRlbXM6IE5hdmlnYWJsZUl0ZW08RXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+PltdID0gcmVzdWx0Lml0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhYmxlSXRlbTogTmF2aWdhYmxlSXRlbTxFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4+ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSBhcyBFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb246IExpdGVyYWwgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uW3RoaXMuYW5jZXN0b3JSZWxhdGlvbk5hbWVdID0ge2hhdmU6IHt2YWx1ZXM6IFtpdGVtLmlkXX19O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzID0ge2ZpbHRlcjoge2dyb3VwczogW3tjb25kaXRpb25zOiBbY29uZGl0aW9uXX1dfX07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXZtID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcXZtLnNldCgndmFyaWFibGVzJywgdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmNvdW50KHF2bSkuc3Vic2NyaWJlKGNvdW50ID0+IChuYXZpZ2FibGVJdGVtLmhhc05hdmlnYXRpb24gPSBjb3VudCA+IDApKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmF2aWdhYmxlSXRlbTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYWJsZVJlc3VsdDogUGFnaW5hdGVkRGF0YTxOYXZpZ2FibGVJdGVtPEV4dHJhY3RUYWxsT25lPFRTZXJ2aWNlPj4+ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBuYXZpZ2FibGVJdGVtcyxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hdmlnYWJsZVJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2xlYXIgbmF2aWdhdGlvbiBmaWx0ZXIgaWYgdGhlcmUgaXMgYSBzZWFyY2hcbiAgICAgICAgaWYgKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ25hdmlnYXRpb24nLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJTZWFyY2gocmVzZXRQYWdpbmF0aW9uID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gW1tdXTtcbiAgICAgICAgc3VwZXIuc2VhcmNoKFtbXV0sIHVuZGVmaW5lZCwgcmVzZXRQYWdpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdEluU3RvcmFnZSgnbnMnLCBudWxsLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChcbiAgICAgICAgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLFxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyxcbiAgICAgICAgcmVzZXRQYWdpbmF0aW9uID0gdHJ1ZSxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdEluVXJsKCduYScsIG51bGwsIHRoaXMucm91dGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIuc2VhcmNoKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLCBuYXZpZ2F0aW9uRXh0cmFzLCByZXNldFBhZ2luYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgZm9yIHJvdXRlciBsaW5rIHVzYWdlXG4gICAgICovXG4gICAgcHVibGljIGdldENoaWxkTGluayhhbmNlc3Rvcjoge2lkOiBzdHJpbmd9IHwgbnVsbCk6IFJvdXRlckxpbmtbJ3JvdXRlckxpbmsnXSB7XG4gICAgICAgIGlmIChhbmNlc3RvciAmJiBhbmNlc3Rvci5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIFsnLicsIHtuYTogYW5jZXN0b3IuaWR9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbJy4nLCB7fV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXB0aCBpcyBsaW1pdGVkIGJ5IHF1ZXJpZXNcbiAgICAgKiBAcGFyYW0gaXRlbSB3aXRoIGFuIGFuY2VzdG9yIHJlbGF0aW9uIChtdXN0IG1hdGNoIGFuY2VzdG9yUmVsYXRpb25OYW1lIGF0dHJpYnV0ZSlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0QnJlYWRjcnVtYihpdGVtOiBCcmVhZGNydW1iSXRlbSk6IEJyZWFkY3J1bWJJdGVtW10ge1xuICAgICAgICBjb25zdCBhbmNlc3RvciA9IGl0ZW1bdGhpcy5hbmNlc3RvclJlbGF0aW9uTmFtZV07XG4gICAgICAgIGlmIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnJlYWRjcnVtYihhbmNlc3RvcikuY29uY2F0KFtpdGVtXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2l0ZW1dO1xuICAgIH1cbn1cbiJdfQ==
|