@alfresco/adf-content-services 8.1.0-16295248176 → 8.1.0-16320806191
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/bundles/assets/adf-content-services/i18n/de.json +1 -3
- package/bundles/assets/adf-content-services/i18n/en.json +1 -3
- package/bundles/assets/adf-content-services/i18n/es.json +1 -3
- package/bundles/assets/adf-content-services/i18n/fr.json +1 -3
- package/bundles/assets/adf-content-services/i18n/it.json +1 -3
- package/bundles/assets/adf-content-services/i18n/pl.json +1 -3
- package/bundles/assets/adf-content-services/i18n/pt.json +1 -3
- package/esm2022/adf-content-services.mjs +5 -0
- package/esm2022/lib/agent/index.mjs +18 -0
- package/esm2022/lib/agent/public-api.mjs +18 -0
- package/esm2022/lib/agent/services/agent.service.mjs +60 -0
- package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
- package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
- package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +77 -0
- package/esm2022/lib/api-factories/index.mjs +18 -0
- package/esm2022/lib/api-factories/public-api.mjs +19 -0
- package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
- package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +77 -0
- package/esm2022/lib/aspect-list/aspect-list.component.mjs +139 -0
- package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
- package/esm2022/lib/aspect-list/index.mjs +18 -0
- package/esm2022/lib/aspect-list/public-api.mjs +24 -0
- package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
- package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
- package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
- package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
- package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +166 -0
- package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
- package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +65 -0
- package/esm2022/lib/breadcrumb/index.mjs +18 -0
- package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
- package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
- package/esm2022/lib/category/categories-management/categories-management.component.mjs +308 -0
- package/esm2022/lib/category/category.module.mjs +33 -0
- package/esm2022/lib/category/index.mjs +18 -0
- package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
- package/esm2022/lib/category/public-api.mjs +23 -0
- package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
- package/esm2022/lib/category/services/category.service.mjs +159 -0
- package/esm2022/lib/common/events/file.event.mjs +46 -0
- package/esm2022/lib/common/index.mjs +18 -0
- package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
- package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
- package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
- package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
- package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
- package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
- package/esm2022/lib/common/models/file.model.mjs +53 -0
- package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
- package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
- package/esm2022/lib/common/public-api.mjs +37 -0
- package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
- package/esm2022/lib/common/services/content.service.mjs +180 -0
- package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
- package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
- package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
- package/esm2022/lib/common/services/people-content.service.mjs +138 -0
- package/esm2022/lib/common/services/rendition.service.mjs +270 -0
- package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
- package/esm2022/lib/common/services/sites.service.mjs +243 -0
- package/esm2022/lib/common/services/upload.service.mjs +391 -0
- package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +54 -0
- package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +490 -0
- package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +128 -0
- package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
- package/esm2022/lib/content-metadata/index.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
- package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
- package/esm2022/lib/content-metadata/public-api.mjs +31 -0
- package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
- package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
- package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
- package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
- package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
- package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
- package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
- package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
- package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
- package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
- package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
- package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +617 -0
- package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
- package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
- package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +205 -0
- package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
- package/esm2022/lib/content-node-selector/index.mjs +18 -0
- package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
- package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
- package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
- package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +287 -0
- package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
- package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
- package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
- package/esm2022/lib/content-node-share/index.mjs +18 -0
- package/esm2022/lib/content-node-share/public-api.mjs +22 -0
- package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
- package/esm2022/lib/content-type/content-type-dialog.component.mjs +57 -0
- package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
- package/esm2022/lib/content-type/content-type.service.mjs +52 -0
- package/esm2022/lib/content-type/index.mjs +20 -0
- package/esm2022/lib/content.module.mjs +277 -0
- package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +51 -0
- package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
- package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
- package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
- package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
- package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
- package/esm2022/lib/dialogs/folder/folder.dialog.mjs +146 -0
- package/esm2022/lib/dialogs/index.mjs +18 -0
- package/esm2022/lib/dialogs/library/library.dialog.mjs +224 -0
- package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +115 -0
- package/esm2022/lib/dialogs/public-api.mjs +25 -0
- package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
- package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
- package/esm2022/lib/directives/content-directive.module.mjs +75 -0
- package/esm2022/lib/directives/index.mjs +18 -0
- package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
- package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
- package/esm2022/lib/directives/node-counter.directive.mjs +59 -0
- package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
- package/esm2022/lib/directives/node-download.directive.mjs +138 -0
- package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
- package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
- package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
- package/esm2022/lib/directives/public-api.mjs +28 -0
- package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
- package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
- package/esm2022/lib/document-list/components/document-list.component.mjs +965 -0
- package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
- package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +42 -0
- package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
- package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +131 -0
- package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +91 -0
- package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +86 -0
- package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +118 -0
- package/esm2022/lib/document-list/components/node.event.mjs +30 -0
- package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
- package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
- package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
- package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
- package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
- package/esm2022/lib/document-list/document-list.module.mjs +75 -0
- package/esm2022/lib/document-list/index.mjs +18 -0
- package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
- package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
- package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
- package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
- package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
- package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
- package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
- package/esm2022/lib/document-list/public-api.mjs +47 -0
- package/esm2022/lib/document-list/services/custom-resources.service.mjs +378 -0
- package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
- package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
- package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
- package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
- package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
- package/esm2022/lib/group/index.mjs +18 -0
- package/esm2022/lib/group/public-api.mjs +18 -0
- package/esm2022/lib/group/services/group.service.mjs +84 -0
- package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
- package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
- package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
- package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
- package/esm2022/lib/interfaces/index.mjs +18 -0
- package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
- package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
- package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
- package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
- package/esm2022/lib/interfaces/public-api.mjs +23 -0
- package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
- package/esm2022/lib/legal-hold/index.mjs +18 -0
- package/esm2022/lib/legal-hold/public-api.mjs +18 -0
- package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
- package/esm2022/lib/material.module.mjs +183 -0
- package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
- package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
- package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
- package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
- package/esm2022/lib/mock/index.mjs +18 -0
- package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
- package/esm2022/lib/mock/public-api.mjs +27 -0
- package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
- package/esm2022/lib/mock/search-query.mock.mjs +40 -0
- package/esm2022/lib/mock/search.component.mock.mjs +165 -0
- package/esm2022/lib/mock/search.service.mock.mjs +61 -0
- package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
- package/esm2022/lib/new-version-uploader/index.mjs +18 -0
- package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
- package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
- package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +74 -0
- package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
- package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
- package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
- package/esm2022/lib/node-comments/index.mjs +18 -0
- package/esm2022/lib/node-comments/node-comments.component.mjs +50 -0
- package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
- package/esm2022/lib/node-comments/public-api.mjs +20 -0
- package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +123 -0
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +102 -0
- package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +69 -0
- package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
- package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
- package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
- package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +102 -0
- package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +87 -0
- package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
- package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
- package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
- package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
- package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +111 -0
- package/esm2022/lib/permission-manager/index.mjs +18 -0
- package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
- package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
- package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
- package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
- package/esm2022/lib/permission-manager/public-api.mjs +36 -0
- package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
- package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
- package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
- package/esm2022/lib/pipes/index.mjs +18 -0
- package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
- package/esm2022/lib/pipes/public-api.mjs +19 -0
- package/esm2022/lib/prediction/index.mjs +18 -0
- package/esm2022/lib/prediction/public-api.mjs +18 -0
- package/esm2022/lib/prediction/services/index.mjs +18 -0
- package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
- package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
- package/esm2022/lib/search/components/index.mjs +43 -0
- package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
- package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
- package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +158 -0
- package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
- package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +169 -0
- package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +46 -0
- package/esm2022/lib/search/components/search-control.component.mjs +180 -0
- package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +196 -0
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
- package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
- package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +223 -0
- package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
- package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +132 -0
- package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
- package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +45 -0
- package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +80 -0
- package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
- package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +154 -0
- package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +104 -0
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +109 -0
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
- package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +63 -0
- package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +43 -0
- package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +109 -0
- package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
- package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +122 -0
- package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
- package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
- package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +63 -0
- package/esm2022/lib/search/components/search-form/index.mjs +18 -0
- package/esm2022/lib/search/components/search-form/search-form.component.mjs +52 -0
- package/esm2022/lib/search/components/search-input/index.mjs +18 -0
- package/esm2022/lib/search/components/search-input/search-input.component.mjs +108 -0
- package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
- package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +163 -0
- package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
- package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +154 -0
- package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
- package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
- package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
- package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
- package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
- package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
- package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
- package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
- package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
- package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +145 -0
- package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
- package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +119 -0
- package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
- package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
- package/esm2022/lib/search/components/search-text/index.mjs +18 -0
- package/esm2022/lib/search/components/search-text/search-text.component.mjs +134 -0
- package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
- package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
- package/esm2022/lib/search/components/search.component.mjs +152 -0
- package/esm2022/lib/search/forms/index.mjs +19 -0
- package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
- package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
- package/esm2022/lib/search/index.mjs +18 -0
- package/esm2022/lib/search/mocks/index.mjs +18 -0
- package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
- package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
- package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
- package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
- package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
- package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
- package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
- package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
- package/esm2022/lib/search/models/index.mjs +34 -0
- package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
- package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
- package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
- package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
- package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
- package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
- package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
- package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
- package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
- package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
- package/esm2022/lib/search/public-api.mjs +24 -0
- package/esm2022/lib/search/search-configuration.token.mjs +19 -0
- package/esm2022/lib/search/search.module.mjs +192 -0
- package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
- package/esm2022/lib/search/services/index.mjs +24 -0
- package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
- package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
- package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
- package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
- package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
- package/esm2022/lib/search/services/search.service.mjs +89 -0
- package/esm2022/lib/search-ai/index.mjs +18 -0
- package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
- package/esm2022/lib/search-ai/public-api.mjs +19 -0
- package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
- package/esm2022/lib/security/index.mjs +18 -0
- package/esm2022/lib/security/public-api.mjs +18 -0
- package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
- package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
- package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
- package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +43 -0
- package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
- package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
- package/esm2022/lib/services/index.mjs +18 -0
- package/esm2022/lib/services/public-api.mjs +18 -0
- package/esm2022/lib/tag/index.mjs +18 -0
- package/esm2022/lib/tag/public-api.mjs +24 -0
- package/esm2022/lib/tag/services/tag.service.mjs +171 -0
- package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +114 -0
- package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
- package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
- package/esm2022/lib/tag/tag.module.mjs +37 -0
- package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
- package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +370 -0
- package/esm2022/lib/testing/content.testing.module.mjs +56 -0
- package/esm2022/lib/tree/components/tree.component.mjs +312 -0
- package/esm2022/lib/tree/index.mjs +18 -0
- package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
- package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
- package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
- package/esm2022/lib/tree/public-api.mjs +23 -0
- package/esm2022/lib/tree/services/tree.service.mjs +134 -0
- package/esm2022/lib/tree/tree.module.mjs +33 -0
- package/esm2022/lib/tree-view/components/tree-view.component.mjs +75 -0
- package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
- package/esm2022/lib/tree-view/index.mjs +18 -0
- package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
- package/esm2022/lib/tree-view/public-api.mjs +22 -0
- package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
- package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
- package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
- package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +190 -0
- package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +92 -0
- package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
- package/esm2022/lib/upload/components/upload-button.component.mjs +133 -0
- package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
- package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
- package/esm2022/lib/upload/components/upload-version-button.component.mjs +54 -0
- package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
- package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
- package/esm2022/lib/upload/index.mjs +18 -0
- package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
- package/esm2022/lib/upload/public-api.mjs +29 -0
- package/esm2022/lib/upload/upload.module.mjs +72 -0
- package/esm2022/lib/version-compatibility/index.mjs +18 -0
- package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
- package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
- package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
- package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
- package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
- package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
- package/esm2022/lib/version-manager/index.mjs +18 -0
- package/esm2022/lib/version-manager/public-api.mjs +23 -0
- package/esm2022/lib/version-manager/version-comparison.component.mjs +42 -0
- package/esm2022/lib/version-manager/version-list.component.mjs +215 -0
- package/esm2022/lib/version-manager/version-manager.component.mjs +145 -0
- package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
- package/esm2022/lib/version-manager/version-upload.component.mjs +154 -0
- package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
- package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +408 -0
- package/esm2022/lib/viewer/index.mjs +18 -0
- package/esm2022/lib/viewer/public-api.mjs +19 -0
- package/esm2022/public-api.mjs +56 -0
- package/fesm2022/adf-content-services.mjs +827 -870
- package/fesm2022/adf-content-services.mjs.map +1 -1
- package/lib/aspect-list/aspect-list.component.d.ts +0 -4
- package/lib/aspect-list/public-api.d.ts +0 -1
- package/lib/aspect-list/services/aspect-list.service.d.ts +4 -6
- package/lib/category/categories-management/categories-management.component.d.ts +0 -4
- package/lib/content.module.d.ts +2 -2
- package/lib/dialogs/dialog.module.d.ts +5 -6
- package/lib/dialogs/download-zip/download-zip.dialog.d.ts +1 -1
- package/lib/dialogs/download-zip/download-zip.dialog.module.d.ts +6 -2
- package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
- package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
- package/lib/version-manager/version-list.component.scss +2 -3
- package/package.json +5 -3
- package/lib/aspect-list/interfaces/custom-aspect-paging.interface.d.ts +0 -21
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { Injectable } from '@angular/core';
|
|
18
|
+
import { ContentApi, RenditionsApi, VersionsApi } from '@alfresco/js-api';
|
|
19
|
+
import { TranslationService, ViewUtilService } from '@alfresco/adf-core';
|
|
20
|
+
import { AlfrescoApiService } from '../../services/alfresco-api.service';
|
|
21
|
+
import * as i0 from "@angular/core";
|
|
22
|
+
import * as i1 from "../../services/alfresco-api.service";
|
|
23
|
+
import * as i2 from "@alfresco/adf-core";
|
|
24
|
+
export class RenditionService {
|
|
25
|
+
static { this.TARGET = '_new'; }
|
|
26
|
+
/**
|
|
27
|
+
* Content groups based on categorization of files that can be viewed in the web browser. This
|
|
28
|
+
* implementation or grouping is tied to the definition the ng component: ViewerRenderComponent
|
|
29
|
+
*/
|
|
30
|
+
static { this.ContentGroup = {
|
|
31
|
+
IMAGE: 'image',
|
|
32
|
+
MEDIA: 'media',
|
|
33
|
+
PDF: 'pdf',
|
|
34
|
+
TEXT: 'text'
|
|
35
|
+
}; }
|
|
36
|
+
/**
|
|
37
|
+
* The name of the rendition with the media subtitles in the supported format
|
|
38
|
+
*/
|
|
39
|
+
static { this.SUBTITLES_RENDITION_NAME = 'webvtt'; }
|
|
40
|
+
get renditionsApi() {
|
|
41
|
+
this._renditionsApi = this._renditionsApi ?? new RenditionsApi(this.apiService.getInstance());
|
|
42
|
+
return this._renditionsApi;
|
|
43
|
+
}
|
|
44
|
+
get contentApi() {
|
|
45
|
+
this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance());
|
|
46
|
+
return this._contentApi;
|
|
47
|
+
}
|
|
48
|
+
get versionsApi() {
|
|
49
|
+
this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());
|
|
50
|
+
return this._versionsApi;
|
|
51
|
+
}
|
|
52
|
+
constructor(apiService, translateService, viewUtilsService) {
|
|
53
|
+
this.apiService = apiService;
|
|
54
|
+
this.translateService = translateService;
|
|
55
|
+
this.viewUtilsService = viewUtilsService;
|
|
56
|
+
/**
|
|
57
|
+
* Based on ViewerRenderComponent Implementation, this value is used to determine how many times we try
|
|
58
|
+
* to get the rendition of a file for preview, or printing.
|
|
59
|
+
*/
|
|
60
|
+
this.maxRetries = 5;
|
|
61
|
+
/**
|
|
62
|
+
* Timeout used for setInterval.
|
|
63
|
+
*/
|
|
64
|
+
this.TRY_TIMEOUT = 10000;
|
|
65
|
+
this.DEFAULT_RENDITION = 'imgpreview';
|
|
66
|
+
}
|
|
67
|
+
getRenditionUrl(nodeId, type, renditionExists) {
|
|
68
|
+
return renditionExists && type !== RenditionService.ContentGroup.IMAGE
|
|
69
|
+
? this.contentApi.getRenditionUrl(nodeId, RenditionService.ContentGroup.PDF)
|
|
70
|
+
: this.contentApi.getContentUrl(nodeId, false);
|
|
71
|
+
}
|
|
72
|
+
async waitRendition(nodeId, renditionId, retries) {
|
|
73
|
+
if (this.maxRetries > retries) {
|
|
74
|
+
const rendition = await this.renditionsApi.getRendition(nodeId, renditionId);
|
|
75
|
+
const status = rendition.entry.status.toString();
|
|
76
|
+
if (status === 'CREATED') {
|
|
77
|
+
return rendition;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
retries += 1;
|
|
81
|
+
await this.wait(1000);
|
|
82
|
+
return this.waitRendition(nodeId, renditionId, retries);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return Promise.resolve(null);
|
|
86
|
+
}
|
|
87
|
+
wait(ms) {
|
|
88
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
89
|
+
}
|
|
90
|
+
async getRendition(nodeId, renditionId) {
|
|
91
|
+
const renditionPaging = await this.renditionsApi.listRenditions(nodeId);
|
|
92
|
+
let rendition = renditionPaging.list.entries.find((renditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId);
|
|
93
|
+
if (rendition) {
|
|
94
|
+
const status = rendition.entry.status.toString();
|
|
95
|
+
if (status === 'NOT_CREATED') {
|
|
96
|
+
try {
|
|
97
|
+
await this.renditionsApi.createRendition(nodeId, { id: renditionId });
|
|
98
|
+
rendition = await this.waitRendition(nodeId, renditionId, 0);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return new Promise((resolve) => resolve(rendition));
|
|
106
|
+
}
|
|
107
|
+
async getNodeRendition(nodeId, versionId) {
|
|
108
|
+
try {
|
|
109
|
+
return versionId ? await this.resolveNodeRendition(nodeId, 'pdf', versionId) : await this.resolveNodeRendition(nodeId, 'pdf');
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async resolveNodeRendition(nodeId, renditionId, versionId) {
|
|
116
|
+
renditionId = renditionId.toLowerCase();
|
|
117
|
+
const supportedRendition = versionId
|
|
118
|
+
? await this.versionsApi.listVersionRenditions(nodeId, versionId)
|
|
119
|
+
: await this.renditionsApi.listRenditions(nodeId);
|
|
120
|
+
let rendition = this.findRenditionById(supportedRendition, renditionId);
|
|
121
|
+
if (!rendition) {
|
|
122
|
+
renditionId = this.DEFAULT_RENDITION;
|
|
123
|
+
rendition = this.findRenditionById(supportedRendition, this.DEFAULT_RENDITION);
|
|
124
|
+
}
|
|
125
|
+
if (rendition) {
|
|
126
|
+
const status = rendition.entry.status.toString();
|
|
127
|
+
const mimeType = rendition.entry.content.mimeType;
|
|
128
|
+
if (status === 'NOT_CREATED') {
|
|
129
|
+
return { url: await this.requestCreateRendition(nodeId, renditionId, versionId), mimeType };
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return { url: await this.handleNodeRendition(nodeId, renditionId, versionId), mimeType };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
async requestCreateRendition(nodeId, renditionId, versionId) {
|
|
138
|
+
try {
|
|
139
|
+
if (versionId) {
|
|
140
|
+
await this.versionsApi.createVersionRendition(nodeId, versionId, { id: renditionId });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
await this.renditionsApi.createRendition(nodeId, { id: renditionId });
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
return versionId ? await this.waitNodeRendition(nodeId, renditionId, versionId) : await this.waitNodeRendition(nodeId, renditionId);
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
findRenditionById(supportedRendition, renditionId) {
|
|
157
|
+
return supportedRendition.list.entries.find((renditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId);
|
|
158
|
+
}
|
|
159
|
+
async waitNodeRendition(nodeId, renditionId, versionId) {
|
|
160
|
+
let currentRetry = 0;
|
|
161
|
+
return new Promise((resolve, reject) => {
|
|
162
|
+
const intervalId = setInterval(() => {
|
|
163
|
+
currentRetry++;
|
|
164
|
+
if (this.maxRetries >= currentRetry) {
|
|
165
|
+
if (versionId) {
|
|
166
|
+
this.versionsApi.getVersionRendition(nodeId, versionId, renditionId).then((rendition) => {
|
|
167
|
+
const status = rendition.entry.status.toString();
|
|
168
|
+
if (status === 'CREATED') {
|
|
169
|
+
clearInterval(intervalId);
|
|
170
|
+
return resolve(this.handleNodeRendition(nodeId, rendition.entry.content.mimeType, versionId));
|
|
171
|
+
}
|
|
172
|
+
}, () => reject(new Error('Error geting version rendition')));
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
this.renditionsApi.getRendition(nodeId, renditionId).then((rendition) => {
|
|
176
|
+
const status = rendition.entry.status.toString();
|
|
177
|
+
if (status === 'CREATED') {
|
|
178
|
+
clearInterval(intervalId);
|
|
179
|
+
return resolve(this.handleNodeRendition(nodeId, renditionId, versionId));
|
|
180
|
+
}
|
|
181
|
+
}, () => reject(new Error('Error getting rendition')));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
clearInterval(intervalId);
|
|
186
|
+
return reject(new Error('Error getting rendition'));
|
|
187
|
+
}
|
|
188
|
+
}, this.TRY_TIMEOUT);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
async handleNodeRendition(nodeId, renditionId, versionId) {
|
|
192
|
+
return versionId
|
|
193
|
+
? this.contentApi.getVersionRenditionUrl(nodeId, versionId, renditionId)
|
|
194
|
+
: this.contentApi.getRenditionUrl(nodeId, renditionId);
|
|
195
|
+
}
|
|
196
|
+
async generateMediaTracksRendition(nodeId) {
|
|
197
|
+
return this.isRenditionAvailable(nodeId, RenditionService.SUBTITLES_RENDITION_NAME)
|
|
198
|
+
.then((value) => {
|
|
199
|
+
const tracks = [];
|
|
200
|
+
if (value) {
|
|
201
|
+
tracks.push({
|
|
202
|
+
kind: 'subtitles',
|
|
203
|
+
src: this.contentApi.getRenditionUrl(nodeId, RenditionService.SUBTITLES_RENDITION_NAME),
|
|
204
|
+
label: this.translateService.instant('ADF_VIEWER.SUBTITLES')
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return tracks;
|
|
208
|
+
})
|
|
209
|
+
.catch(() => []);
|
|
210
|
+
}
|
|
211
|
+
async isRenditionAvailable(nodeId, renditionId) {
|
|
212
|
+
const renditionPaging = await this.renditionsApi.listRenditions(nodeId);
|
|
213
|
+
const rendition = renditionPaging.list.entries.find((renditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId);
|
|
214
|
+
return rendition?.entry?.status?.toString() === 'CREATED' || false;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* This method takes a url to trigger the print dialog against, and the type of artifact that it
|
|
218
|
+
* is.
|
|
219
|
+
* This URL should be one that can be rendered in the browser, for example PDF, Image, or Text
|
|
220
|
+
*
|
|
221
|
+
* @param url url to print
|
|
222
|
+
* @param type type of the rendition
|
|
223
|
+
*/
|
|
224
|
+
printFile(url, type) {
|
|
225
|
+
const pwa = window.open(url, RenditionService.TARGET);
|
|
226
|
+
if (pwa) {
|
|
227
|
+
pwa.onload = () => {
|
|
228
|
+
pwa.print();
|
|
229
|
+
if (type === RenditionService.ContentGroup.IMAGE) {
|
|
230
|
+
// Because of the way chrome focus and close image window vs. pdf preview window
|
|
231
|
+
setTimeout(() => {
|
|
232
|
+
pwa.close();
|
|
233
|
+
}, 500);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Launch the File Print dialog from anywhere other than the preview service, which resolves the
|
|
240
|
+
* rendition of the object that can be printed from a web browser.
|
|
241
|
+
* These are: images, PDF files, or PDF rendition of files.
|
|
242
|
+
* We also force PDF rendition for TEXT type objects, otherwise the default URL is to download.
|
|
243
|
+
* TODO there are different TEXT type objects, (HTML, plaintext, xml, etc. we should determine how these are handled)
|
|
244
|
+
*
|
|
245
|
+
* @param objectId object it
|
|
246
|
+
* @param mimeType mime type
|
|
247
|
+
*/
|
|
248
|
+
printFileGeneric(objectId, mimeType) {
|
|
249
|
+
const nodeId = objectId;
|
|
250
|
+
const type = this.viewUtilsService.getViewerTypeByMimeType(mimeType);
|
|
251
|
+
this.getRendition(nodeId, RenditionService.ContentGroup.PDF)
|
|
252
|
+
.then((value) => {
|
|
253
|
+
const url = this.getRenditionUrl(nodeId, type, !!value);
|
|
254
|
+
const printType = type === RenditionService.ContentGroup.PDF || type === RenditionService.ContentGroup.TEXT
|
|
255
|
+
? RenditionService.ContentGroup.PDF
|
|
256
|
+
: type;
|
|
257
|
+
this.printFile(url, printType);
|
|
258
|
+
})
|
|
259
|
+
.catch(() => { });
|
|
260
|
+
}
|
|
261
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RenditionService, deps: [{ token: i1.AlfrescoApiService }, { token: i2.TranslationService }, { token: i2.ViewUtilService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
262
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RenditionService, providedIn: 'root' }); }
|
|
263
|
+
}
|
|
264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RenditionService, decorators: [{
|
|
265
|
+
type: Injectable,
|
|
266
|
+
args: [{
|
|
267
|
+
providedIn: 'root'
|
|
268
|
+
}]
|
|
269
|
+
}], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.TranslationService }, { type: i2.ViewUtilService }] });
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGl0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2NvbW1vbi9zZXJ2aWNlcy9yZW5kaXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQW1DLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQVMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7QUFLekUsTUFBTSxPQUFPLGdCQUFnQjthQUNsQixXQUFNLEdBQUcsTUFBTSxBQUFULENBQVU7SUFFdkI7OztPQUdHO2FBQ0ksaUJBQVksR0FBRztRQUNsQixLQUFLLEVBQUUsT0FBTztRQUNkLEtBQUssRUFBRSxPQUFPO1FBQ2QsR0FBRyxFQUFFLEtBQUs7UUFDVixJQUFJLEVBQUUsTUFBTTtLQUNmLEFBTGtCLENBS2pCO0lBRUY7O09BRUc7YUFDSSw2QkFBd0IsR0FBRyxRQUFRLEFBQVgsQ0FBWTtJQWMzQyxJQUFJLGFBQWE7UUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBR0QsSUFBSSxVQUFVO1FBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFF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QUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQzthQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLE1BQU0sR0FBRyxHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsTUFBTSxTQUFTLEdBQ1gsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJO2dCQUNyRixDQUFDLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUc7Z0JBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQzsrR0FqUlEsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGYixNQUFNOzs0RkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250ZW50QXBpLCBSZW5kaXRpb25FbnRyeSwgUmVuZGl0aW9uUGFnaW5nLCBSZW5kaXRpb25zQXBpLCBWZXJzaW9uc0FwaSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgVHJhY2ssIFRyYW5zbGF0aW9uU2VydmljZSwgVmlld1V0aWxTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZW5kaXRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgVEFSR0VUID0gJ19uZXcnO1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCBncm91cHMgYmFzZWQgb24gY2F0ZWdvcml6YXRpb24gb2YgZmlsZXMgdGhhdCBjYW4gYmUgdmlld2VkIGluIHRoZSB3ZWIgYnJvd3Nlci4gVGhpc1xuICAgICAqIGltcGxlbWVudGF0aW9uIG9yIGdyb3VwaW5nIGlzIHRpZWQgdG8gdGhlIGRlZmluaXRpb24gdGhlIG5nIGNvbXBvbmVudDogVmlld2VyUmVuZGVyQ29tcG9uZW50XG4gICAgICovXG4gICAgc3RhdGljIENvbnRlbnRHcm91cCA9IHtcbiAgICAgICAgSU1BR0U6ICdpbWFnZScsXG4gICAgICAgIE1FRElBOiAnbWVkaWEnLFxuICAgICAgICBQREY6ICdwZGYnLFxuICAgICAgICBURVhUOiAndGV4dCdcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHJlbmRpdGlvbiB3aXRoIHRoZSBtZWRpYSBzdWJ0aXRsZXMgaW4gdGhlIHN1cHBvcnRlZCBmb3JtYXRcbiAgICAgKi9cbiAgICBzdGF0aWMgU1VCVElUTEVTX1JFTkRJVElPTl9OQU1FID0gJ3dlYnZ0dCc7XG5cbiAgICAvKipcbiAgICAgKiBCYXNlZCBvbiBWaWV3ZXJSZW5kZXJDb21wb25lbnQgSW1wbGVtZW50YXRpb24sIHRoaXMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IG1hbnkgdGltZXMgd2UgdHJ5XG4gICAgICogdG8gZ2V0IHRoZSByZW5kaXRpb24gb2YgYSBmaWxlIGZvciBwcmV2aWV3LCBvciBwcmludGluZy5cbiAgICAgKi9cbiAgICBtYXhSZXRyaWVzID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRpbWVvdXQgdXNlZCBmb3Igc2V0SW50ZXJ2YWwuXG4gICAgICovXG4gICAgcHJpdmF0ZSBUUllfVElNRU9VVDogbnVtYmVyID0gMTAwMDA7XG5cbiAgICBfcmVuZGl0aW9uc0FwaTogUmVuZGl0aW9uc0FwaTtcbiAgICBnZXQgcmVuZGl0aW9uc0FwaSgpOiBSZW5kaXRpb25zQXBpIHtcbiAgICAgICAgdGhpcy5fcmVuZGl0aW9uc0FwaSA9IHRoaXMuX3JlbmRpdGlvbnNBcGkgPz8gbmV3IFJlbmRpdGlvbnNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGl0aW9uc0FwaTtcbiAgICB9XG5cbiAgICBfY29udGVudEFwaTogQ29udGVudEFwaTtcbiAgICBnZXQgY29udGVudEFwaSgpOiBDb250ZW50QXBpIHtcbiAgICAgICAgdGhpcy5fY29udGVudEFwaSA9IHRoaXMuX2NvbnRlbnRBcGkgPz8gbmV3IENvbnRlbnRBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudEFwaTtcbiAgICB9XG5cbiAgICBfdmVyc2lvbnNBcGk6IFZlcnNpb25zQXBpO1xuICAgIHByaXZhdGUgREVGQVVMVF9SRU5ESVRJT046IHN0cmluZyA9ICdpbWdwcmV2aWV3JztcblxuICAgIGdldCB2ZXJzaW9uc0FwaSgpOiBWZXJzaW9uc0FwaSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb25zQXBpID0gdGhpcy5fdmVyc2lvbnNBcGkgPz8gbmV3IFZlcnNpb25zQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb25zQXBpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSwgcHJpdmF0ZSB2aWV3VXRpbHNTZXJ2aWNlOiBWaWV3VXRpbFNlcnZpY2UpIHt9XG5cbiAgICBnZXRSZW5kaXRpb25Vcmwobm9kZUlkOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgcmVuZGl0aW9uRXhpc3RzOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHJlbmRpdGlvbkV4aXN0cyAmJiB0eXBlICE9PSBSZW5kaXRpb25TZXJ2aWNlLkNvbnRlbnRHcm91cC5JTUFHRVxuICAgICAgICAgICAgPyB0aGlzLmNvbnRlbnRBcGkuZ2V0UmVuZGl0aW9uVXJsKG5vZGVJZCwgUmVuZGl0aW9uU2VydmljZS5Db250ZW50R3JvdXAuUERGKVxuICAgICAgICAgICAgOiB0aGlzLmNvbnRlbnRBcGkuZ2V0Q29udGVudFVybChub2RlSWQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHdhaXRSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcsIHJldHJpZXM6IG51bWJlcik6IFByb21pc2U8UmVuZGl0aW9uRW50cnk+IHtcbiAgICAgICAgaWYgKHRoaXMubWF4UmV0cmllcyA+IHJldHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRpdGlvbiA9IGF3YWl0IHRoaXMucmVuZGl0aW9uc0FwaS5nZXRSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCk7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZW5kaXRpb24uZW50cnkuc3RhdHVzLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdDUkVBVEVEJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kaXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHJpZXMgKz0gMTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLndhaXQoMTAwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdFJlbmRpdGlvbihub2RlSWQsIHJlbmRpdGlvbklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3YWl0KG1zOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlbmRpdGlvbkVudHJ5PiB7XG4gICAgICAgIGNvbnN0IHJlbmRpdGlvblBhZ2luZzogUmVuZGl0aW9uUGFnaW5nID0gYXdhaXQgdGhpcy5yZW5kaXRpb25zQXBpLmxpc3RSZW5kaXRpb25zKG5vZGVJZCk7XG4gICAgICAgIGxldCByZW5kaXRpb246IFJlbmRpdGlvbkVudHJ5ID0gcmVuZGl0aW9uUGFnaW5nLmxpc3QuZW50cmllcy5maW5kKFxuICAgICAgICAgICAgKHJlbmRpdGlvbkVudHJ5OiBSZW5kaXRpb25FbnRyeSkgPT4gcmVuZGl0aW9uRW50cnkuZW50cnkuaWQudG9Mb3dlckNhc2UoKSA9PT0gcmVuZGl0aW9uSWRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmVuZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZW5kaXRpb24uZW50cnkuc3RhdHVzLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdOT1RfQ1JFQVRFRCcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRpdGlvbnNBcGkuY3JlYXRlUmVuZGl0aW9uKG5vZGVJZCwgeyBpZDogcmVuZGl0aW9uSWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRpdGlvbiA9IGF3YWl0IHRoaXMud2FpdFJlbmRpdGlvbihub2RlSWQsIHJlbmRpdGlvbklkLCAwKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxSZW5kaXRpb25FbnRyeT4oKHJlc29sdmUpID0+IHJlc29sdmUocmVuZGl0aW9uKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Tm9kZVJlbmRpdGlvbihub2RlSWQ6IHN0cmluZywgdmVyc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTx7IHVybDogc3RyaW5nOyBtaW1lVHlwZTogc3RyaW5nIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uSWQgPyBhd2FpdCB0aGlzLnJlc29sdmVOb2RlUmVuZGl0aW9uKG5vZGVJZCwgJ3BkZicsIHZlcnNpb25JZCkgOiBhd2FpdCB0aGlzLnJlc29sdmVOb2RlUmVuZGl0aW9uKG5vZGVJZCwgJ3BkZicpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlTm9kZVJlbmRpdGlvbihub2RlSWQ6IHN0cmluZywgcmVuZGl0aW9uSWQ6IHN0cmluZywgdmVyc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTx7IHVybDogc3RyaW5nOyBtaW1lVHlwZTogc3RyaW5nIH0+IHtcbiAgICAgICAgcmVuZGl0aW9uSWQgPSByZW5kaXRpb25JZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZFJlbmRpdGlvbjogUmVuZGl0aW9uUGFnaW5nID0gdmVyc2lvbklkXG4gICAgICAgICAgICA/IGF3YWl0IHRoaXMudmVyc2lvbnNBcGkubGlzdFZlcnNpb25SZW5kaXRpb25zKG5vZGVJZCwgdmVyc2lvbklkKVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLnJlbmRpdGlvbnNBcGkubGlzdFJlbmRpdGlvbnMobm9kZUlkKTtcblxuICAgICAgICBsZXQgcmVuZGl0aW9uID0gdGhpcy5maW5kUmVuZGl0aW9uQnlJZChzdXBwb3J0ZWRSZW5kaXRpb24sIHJlbmRpdGlvbklkKTtcbiAgICAgICAgaWYgKCFyZW5kaXRpb24pIHtcbiAgICAgICAgICAgIHJlbmRpdGlvbklkID0gdGhpcy5ERUZBVUxUX1JFTkRJVElPTjtcbiAgICAgICAgICAgIHJlbmRpdGlvbiA9IHRoaXMuZmluZFJlbmRpdGlvbkJ5SWQoc3VwcG9ydGVkUmVuZGl0aW9uLCB0aGlzLkRFRkFVTFRfUkVORElUSU9OKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1czogc3RyaW5nID0gcmVuZGl0aW9uLmVudHJ5LnN0YXR1cy50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgbWltZVR5cGU6IHN0cmluZyA9IHJlbmRpdGlvbi5lbnRyeS5jb250ZW50Lm1pbWVUeXBlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnTk9UX0NSRUFURUQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiBhd2FpdCB0aGlzLnJlcXVlc3RDcmVhdGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSwgbWltZVR5cGUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiBhd2FpdCB0aGlzLmhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSwgbWltZVR5cGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVxdWVzdENyZWF0ZVJlbmRpdGlvbihub2RlSWQ6IHN0cmluZywgcmVuZGl0aW9uSWQ6IHN0cmluZywgdmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZlcnNpb25JZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyc2lvbnNBcGkuY3JlYXRlVmVyc2lvblJlbmRpdGlvbihub2RlSWQsIHZlcnNpb25JZCwgeyBpZDogcmVuZGl0aW9uSWQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGl0aW9uc0FwaS5jcmVhdGVSZW5kaXRpb24obm9kZUlkLCB7IGlkOiByZW5kaXRpb25JZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25JZCA/IGF3YWl0IHRoaXMud2FpdE5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSA6IGF3YWl0IHRoaXMud2FpdE5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRSZW5kaXRpb25CeUlkKHN1cHBvcnRlZFJlbmRpdGlvbjogUmVuZGl0aW9uUGFnaW5nLCByZW5kaXRpb25JZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRSZW5kaXRpb24ubGlzdC5lbnRyaWVzLmZpbmQoKHJlbmRpdGlvbkVudHJ5OiBSZW5kaXRpb25FbnRyeSkgPT4gcmVuZGl0aW9uRW50cnkuZW50cnkuaWQudG9Mb3dlckNhc2UoKSA9PT0gcmVuZGl0aW9uSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd2FpdE5vZGVSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcsIHZlcnNpb25JZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBjdXJyZW50UmV0cnk6IG51bWJlciA9IDA7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJldHJ5Kys7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4UmV0cmllcyA+PSBjdXJyZW50UmV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZXJzaW9uc0FwaS5nZXRWZXJzaW9uUmVuZGl0aW9uKG5vZGVJZCwgdmVyc2lvbklkLCByZW5kaXRpb25JZCkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVuZGl0aW9uOiBSZW5kaXRpb25FbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXM6IHN0cmluZyA9IHJlbmRpdGlvbi5lbnRyeS5zdGF0dXMudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnQ1JFQVRFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb24uZW50cnkuY29udGVudC5taW1lVHlwZSwgdmVyc2lvbklkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGdldGluZyB2ZXJzaW9uIHJlbmRpdGlvbicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGl0aW9uc0FwaS5nZXRSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVuZGl0aW9uOiBSZW5kaXRpb25FbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXM6IHN0cmluZyA9IHJlbmRpdGlvbi5lbnRyeS5zdGF0dXMudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnQ1JFQVRFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkLCByZW5kaXRpb25JZCwgdmVyc2lvbklkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGdldHRpbmcgcmVuZGl0aW9uJykpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGdldHRpbmcgcmVuZGl0aW9uJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMuVFJZX1RJTUVPVVQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZU5vZGVSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcsIHZlcnNpb25JZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uSWRcbiAgICAgICAgICAgID8gdGhpcy5jb250ZW50QXBpLmdldFZlcnNpb25SZW5kaXRpb25Vcmwobm9kZUlkLCB2ZXJzaW9uSWQsIHJlbmRpdGlvbklkKVxuICAgICAgICAgICAgOiB0aGlzLmNvbnRlbnRBcGkuZ2V0UmVuZGl0aW9uVXJsKG5vZGVJZCwgcmVuZGl0aW9uSWQpO1xuICAgIH1cblxuICAgIGFzeW5jIGdlbmVyYXRlTWVkaWFUcmFja3NSZW5kaXRpb24obm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYWNrW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZW5kaXRpb25BdmFpbGFibGUobm9kZUlkLCBSZW5kaXRpb25TZXJ2aWNlLlNVQlRJVExFU19SRU5ESVRJT05fTkFNRSlcbiAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cmFja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAnc3VidGl0bGVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5jb250ZW50QXBpLmdldFJlbmRpdGlvblVybChub2RlSWQsIFJlbmRpdGlvblNlcnZpY2UuU1VCVElUTEVTX1JFTkRJVElPTl9OQU1FKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQURGX1ZJRVdFUi5TVUJUSVRMRVMnKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNrcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaXNSZW5kaXRpb25BdmFpbGFibGUobm9kZUlkOiBzdHJpbmcsIHJlbmRpdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgcmVuZGl0aW9uUGFnaW5nOiBSZW5kaXRpb25QYWdpbmcgPSBhd2FpdCB0aGlzLnJlbmRpdGlvbnNBcGkubGlzdFJlbmRpdGlvbnMobm9kZUlkKTtcbiAgICAgICAgY29uc3QgcmVuZGl0aW9uOiBSZW5kaXRpb25FbnRyeSA9IHJlbmRpdGlvblBhZ2luZy5saXN0LmVudHJpZXMuZmluZChcbiAgICAgICAgICAgIChyZW5kaXRpb25FbnRyeTogUmVuZGl0aW9uRW50cnkpID0+IHJlbmRpdGlvbkVudHJ5LmVudHJ5LmlkLnRvTG93ZXJDYXNlKCkgPT09IHJlbmRpdGlvbklkXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlbmRpdGlvbj8uZW50cnk/LnN0YXR1cz8udG9TdHJpbmcoKSA9PT0gJ0NSRUFURUQnIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHRha2VzIGEgdXJsIHRvIHRyaWdnZXIgdGhlIHByaW50IGRpYWxvZyBhZ2FpbnN0LCBhbmQgdGhlIHR5cGUgb2YgYXJ0aWZhY3QgdGhhdCBpdFxuICAgICAqIGlzLlxuICAgICAqIFRoaXMgVVJMIHNob3VsZCBiZSBvbmUgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlIFBERiwgSW1hZ2UsIG9yIFRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgdXJsIHRvIHByaW50XG4gICAgICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgcmVuZGl0aW9uXG4gICAgICovXG4gICAgcHJpbnRGaWxlKHVybDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHdhID0gd2luZG93Lm9wZW4odXJsLCBSZW5kaXRpb25TZXJ2aWNlLlRBUkdFVCk7XG4gICAgICAgIGlmIChwd2EpIHtcbiAgICAgICAgICAgIHB3YS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHdhLnByaW50KCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFJlbmRpdGlvblNlcnZpY2UuQ29udGVudEdyb3VwLklNQUdFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHdheSBjaHJvbWUgZm9jdXMgYW5kIGNsb3NlIGltYWdlIHdpbmRvdyB2cy4gcGRmIHByZXZpZXcgd2luZG93XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHdhLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExhdW5jaCB0aGUgRmlsZSBQcmludCBkaWFsb2cgZnJvbSBhbnl3aGVyZSBvdGhlciB0aGFuIHRoZSBwcmV2aWV3IHNlcnZpY2UsIHdoaWNoIHJlc29sdmVzIHRoZVxuICAgICAqIHJlbmRpdGlvbiBvZiB0aGUgb2JqZWN0IHRoYXQgY2FuIGJlIHByaW50ZWQgZnJvbSBhIHdlYiBicm93c2VyLlxuICAgICAqIFRoZXNlIGFyZTogaW1hZ2VzLCBQREYgZmlsZXMsIG9yIFBERiByZW5kaXRpb24gb2YgZmlsZXMuXG4gICAgICogV2UgYWxzbyBmb3JjZSBQREYgcmVuZGl0aW9uIGZvciBURVhUIHR5cGUgb2JqZWN0cywgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IFVSTCBpcyB0byBkb3dubG9hZC5cbiAgICAgKiBUT0RPIHRoZXJlIGFyZSBkaWZmZXJlbnQgVEVYVCB0eXBlIG9iamVjdHMsIChIVE1MLCBwbGFpbnRleHQsIHhtbCwgZXRjLiB3ZSBzaG91bGQgZGV0ZXJtaW5lIGhvdyB0aGVzZSBhcmUgaGFuZGxlZClcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3RJZCBvYmplY3QgaXRcbiAgICAgKiBAcGFyYW0gbWltZVR5cGUgbWltZSB0eXBlXG4gICAgICovXG4gICAgcHJpbnRGaWxlR2VuZXJpYyhvYmplY3RJZDogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IG9iamVjdElkO1xuICAgICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSB0aGlzLnZpZXdVdGlsc1NlcnZpY2UuZ2V0Vmlld2VyVHlwZUJ5TWltZVR5cGUobWltZVR5cGUpO1xuXG4gICAgICAgIHRoaXMuZ2V0UmVuZGl0aW9uKG5vZGVJZCwgUmVuZGl0aW9uU2VydmljZS5Db250ZW50R3JvdXAuUERGKVxuICAgICAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsOiBzdHJpbmcgPSB0aGlzLmdldFJlbmRpdGlvblVybChub2RlSWQsIHR5cGUsICEhdmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW50VHlwZSA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFJlbmRpdGlvblNlcnZpY2UuQ29udGVudEdyb3VwLlBERiB8fCB0eXBlID09PSBSZW5kaXRpb25TZXJ2aWNlLkNvbnRlbnRHcm91cC5URVhUXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFJlbmRpdGlvblNlcnZpY2UuQ29udGVudEdyb3VwLlBERlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJpbnRGaWxlKHVybCwgcHJpbnRUeXBlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { NodesApi, PreferencesApi } from '@alfresco/js-api';
|
|
18
|
+
import { inject, Injectable, InjectionToken } from '@angular/core';
|
|
19
|
+
import { of, from, ReplaySubject, throwError } from 'rxjs';
|
|
20
|
+
import { catchError, concatMap, first, map, switchMap, take, tap } from 'rxjs/operators';
|
|
21
|
+
import { AlfrescoApiService } from '../../services/alfresco-api.service';
|
|
22
|
+
import { AuthenticationService } from '@alfresco/adf-core';
|
|
23
|
+
import * as i0 from "@angular/core";
|
|
24
|
+
import * as i1 from "../../services/alfresco-api.service";
|
|
25
|
+
import * as i2 from "@alfresco/adf-core";
|
|
26
|
+
export const SAVED_SEARCHES_SERVICE_PREFERENCES = new InjectionToken('SAVED_SEARCHES_SERVICE_PREFERENCES');
|
|
27
|
+
export class SavedSearchesService {
|
|
28
|
+
get nodesApi() {
|
|
29
|
+
this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());
|
|
30
|
+
return this._nodesApi;
|
|
31
|
+
}
|
|
32
|
+
get preferencesApi() {
|
|
33
|
+
if (this.preferencesService) {
|
|
34
|
+
this._preferencesApi = this.preferencesService;
|
|
35
|
+
return this._preferencesApi;
|
|
36
|
+
}
|
|
37
|
+
this._preferencesApi = this._preferencesApi ?? new PreferencesApi(this.apiService.getInstance());
|
|
38
|
+
return this._preferencesApi;
|
|
39
|
+
}
|
|
40
|
+
constructor(apiService, authService) {
|
|
41
|
+
this.apiService = apiService;
|
|
42
|
+
this.authService = authService;
|
|
43
|
+
this.preferencesService = inject(SAVED_SEARCHES_SERVICE_PREFERENCES, { optional: true });
|
|
44
|
+
this.savedSearches$ = new ReplaySubject(1);
|
|
45
|
+
}
|
|
46
|
+
init() {
|
|
47
|
+
this.fetchSavedSearches();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Gets a list of saved searches by user.
|
|
51
|
+
*
|
|
52
|
+
* @returns SavedSearch list containing user saved searches
|
|
53
|
+
*/
|
|
54
|
+
getSavedSearches() {
|
|
55
|
+
const savedSearchesMigrated = localStorage.getItem(this.getLocalStorageKey()) ?? '';
|
|
56
|
+
if (savedSearchesMigrated === 'true') {
|
|
57
|
+
return from(this.preferencesApi.getPreference('-me-', 'saved-searches')).pipe(map((preference) => JSON.parse(preference.entry.value)), catchError(() => of([])));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return this.getSavedSearchesNodeId().pipe(take(1), concatMap(() => {
|
|
61
|
+
if (this.savedSearchFileNodeId !== '') {
|
|
62
|
+
return this.migrateSavedSearches();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return from(this.preferencesApi.getPreference('-me-', 'saved-searches')).pipe(map((preference) => JSON.parse(preference.entry.value)), catchError(() => of([])));
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Saves a new search into state and updates state. If there are less than 5 searches,
|
|
72
|
+
* it will be pushed on first place, if more it will be pushed to 6th place.
|
|
73
|
+
*
|
|
74
|
+
* @param newSaveSearch object { name: string, description: string, encodedUrl: string }
|
|
75
|
+
* @returns NodeEntry
|
|
76
|
+
*/
|
|
77
|
+
saveSearch(newSaveSearch) {
|
|
78
|
+
return this.getSavedSearches().pipe(take(1), switchMap((savedSearches) => {
|
|
79
|
+
let updatedSavedSearches = [];
|
|
80
|
+
if (savedSearches.length < 5) {
|
|
81
|
+
updatedSavedSearches = [{ ...newSaveSearch, order: 0 }, ...savedSearches];
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const firstFiveSearches = savedSearches.slice(0, 5);
|
|
85
|
+
const restOfSearches = savedSearches.slice(5);
|
|
86
|
+
updatedSavedSearches = [...firstFiveSearches, { ...newSaveSearch, order: 5 }, ...restOfSearches];
|
|
87
|
+
}
|
|
88
|
+
updatedSavedSearches = updatedSavedSearches.map((search, index) => ({
|
|
89
|
+
...search,
|
|
90
|
+
order: index
|
|
91
|
+
}));
|
|
92
|
+
return from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSavedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)), tap(() => this.savedSearches$.next(updatedSavedSearches)));
|
|
93
|
+
}), catchError((error) => {
|
|
94
|
+
console.error('Error saving new search:', error);
|
|
95
|
+
return throwError(() => error);
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Replace Save Search with new one and also updates the state.
|
|
100
|
+
*
|
|
101
|
+
* @param updatedSavedSearch - updated Save Search
|
|
102
|
+
* @returns NodeEntry
|
|
103
|
+
*/
|
|
104
|
+
editSavedSearch(updatedSavedSearch) {
|
|
105
|
+
let previousSavedSearches;
|
|
106
|
+
return this.savedSearches$.pipe(take(1), map((savedSearches) => {
|
|
107
|
+
previousSavedSearches = [...savedSearches];
|
|
108
|
+
return savedSearches.map((search) => (search.order === updatedSavedSearch.order ? updatedSavedSearch : search));
|
|
109
|
+
}), tap((updatedSearches) => {
|
|
110
|
+
this.savedSearches$.next(updatedSearches);
|
|
111
|
+
}), switchMap((updatedSearches) => from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)))), catchError((error) => {
|
|
112
|
+
this.savedSearches$.next(previousSavedSearches);
|
|
113
|
+
return throwError(() => error);
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Deletes Save Search and update state.
|
|
118
|
+
*
|
|
119
|
+
* @param deletedSavedSearch - Save Search to delete
|
|
120
|
+
* @returns NodeEntry
|
|
121
|
+
*/
|
|
122
|
+
deleteSavedSearch(deletedSavedSearch) {
|
|
123
|
+
let previousSavedSearchesOrder;
|
|
124
|
+
return this.savedSearches$.pipe(take(1), map((savedSearches) => {
|
|
125
|
+
previousSavedSearchesOrder = [...savedSearches];
|
|
126
|
+
const updatedSearches = savedSearches.filter((search) => search.order !== deletedSavedSearch.order);
|
|
127
|
+
return updatedSearches.map((search, index) => ({
|
|
128
|
+
...search,
|
|
129
|
+
order: index
|
|
130
|
+
}));
|
|
131
|
+
}), tap((updatedSearches) => {
|
|
132
|
+
this.savedSearches$.next(updatedSearches);
|
|
133
|
+
}), switchMap((updatedSearches) => from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)))), catchError((error) => {
|
|
134
|
+
this.savedSearches$.next(previousSavedSearchesOrder);
|
|
135
|
+
return throwError(() => error);
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Reorders saved search place
|
|
140
|
+
*
|
|
141
|
+
* @param previousIndex - previous index of saved search
|
|
142
|
+
* @param currentIndex - new index of saved search
|
|
143
|
+
*/
|
|
144
|
+
changeOrder(previousIndex, currentIndex) {
|
|
145
|
+
let previousSavedSearchesOrder;
|
|
146
|
+
this.savedSearches$
|
|
147
|
+
.pipe(take(1), map((savedSearches) => {
|
|
148
|
+
previousSavedSearchesOrder = [...savedSearches];
|
|
149
|
+
const [movedSearch] = savedSearches.splice(previousIndex, 1);
|
|
150
|
+
savedSearches.splice(currentIndex, 0, movedSearch);
|
|
151
|
+
return savedSearches.map((search, index) => ({
|
|
152
|
+
...search,
|
|
153
|
+
order: index
|
|
154
|
+
}));
|
|
155
|
+
}), tap((savedSearches) => this.savedSearches$.next(savedSearches)), switchMap((updatedSearches) => from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(map((preference) => JSON.parse(preference.entry.value)))), catchError((error) => {
|
|
156
|
+
this.savedSearches$.next(previousSavedSearchesOrder);
|
|
157
|
+
return throwError(() => error);
|
|
158
|
+
}))
|
|
159
|
+
.subscribe();
|
|
160
|
+
}
|
|
161
|
+
getSavedSearchesNodeId() {
|
|
162
|
+
return from(this.nodesApi.getNode('-my-', { relativePath: 'config.json' })).pipe(first(), concatMap((configNode) => {
|
|
163
|
+
this.savedSearchFileNodeId = configNode.entry.id;
|
|
164
|
+
return configNode.entry.id;
|
|
165
|
+
}), catchError((error) => {
|
|
166
|
+
const errorStatusCode = JSON.parse(error.message).error.statusCode;
|
|
167
|
+
if (errorStatusCode === 404) {
|
|
168
|
+
localStorage.setItem(this.getLocalStorageKey(), 'true');
|
|
169
|
+
return '';
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return throwError(() => error);
|
|
173
|
+
}
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
async mapFileContentToSavedSearches(blob) {
|
|
177
|
+
return blob
|
|
178
|
+
.text()
|
|
179
|
+
.then((content) => (content ? JSON.parse(content) : []))
|
|
180
|
+
.catch(() => []);
|
|
181
|
+
}
|
|
182
|
+
getLocalStorageKey() {
|
|
183
|
+
return `saved-searches-${this.authService.getUsername()}-migrated`;
|
|
184
|
+
}
|
|
185
|
+
fetchSavedSearches() {
|
|
186
|
+
this.getSavedSearches()
|
|
187
|
+
.pipe(take(1))
|
|
188
|
+
.subscribe((searches) => this.savedSearches$.next(searches));
|
|
189
|
+
}
|
|
190
|
+
migrateSavedSearches() {
|
|
191
|
+
return from(this.nodesApi.getNodeContent(this.savedSearchFileNodeId).then((content) => this.mapFileContentToSavedSearches(content))).pipe(tap((savedSearches) => {
|
|
192
|
+
this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(savedSearches));
|
|
193
|
+
localStorage.setItem(this.getLocalStorageKey(), 'true');
|
|
194
|
+
this.nodesApi.deleteNode(this.savedSearchFileNodeId, { permanent: true });
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedSearchesService, deps: [{ token: i1.AlfrescoApiService }, { token: i2.AuthenticationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
198
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedSearchesService, providedIn: 'root' }); }
|
|
199
|
+
}
|
|
200
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedSearchesService, decorators: [{
|
|
201
|
+
type: Injectable,
|
|
202
|
+
args: [{
|
|
203
|
+
providedIn: 'root'
|
|
204
|
+
}]
|
|
205
|
+
}], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.AuthenticationService }] });
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtc2VhcmNoZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29tbW9uL3NlcnZpY2VzL3NhdmVkLXNlYXJjaGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBYSxjQUFjLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBTzNELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLElBQUksY0FBYyxDQUFxQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBSy9JLE1BQU0sT0FBTyxvQkFBb0I7SUFNN0IsSUFBSSxRQUFRO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFD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QUUsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOytHQTdPUSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZqQixNQUFNOzs0RkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBOb2Rlc0FwaSwgTm9kZUVudHJ5LCBQcmVmZXJlbmNlc0FwaSwgQ29udGVudEZpZWxkc1F1ZXJ5LCBQcmVmZXJlbmNlRW50cnkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBmcm9tLCBSZXBsYXlTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIGZpcnN0LCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxmcmVzY28tYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2F2ZWRTZWFyY2ggfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NhdmVkLXNlYXJjaC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBTYXZlZFNlYXJjaGVzUHJlZmVyZW5jZXNBcGlTZXJ2aWNlIHtcbiAgICBnZXRQcmVmZXJlbmNlOiAocGVyc29uSWQ6IHN0cmluZywgcHJlZmVyZW5jZU5hbWU6IHN0cmluZywgb3B0cz86IENvbnRlbnRGaWVsZHNRdWVyeSkgPT4gUHJvbWlzZTxQcmVmZXJlbmNlRW50cnk+IHwgT2JzZXJ2YWJsZTxQcmVmZXJlbmNlRW50cnk+O1xuICAgIHVwZGF0ZVByZWZlcmVuY2U6IChwZXJzb25JZDogc3RyaW5nLCBwcmVmZXJlbmNlTmFtZTogc3RyaW5nLCBwcmVmZXJlbmNlVmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTxQcmVmZXJlbmNlRW50cnk+IHwgT2JzZXJ2YWJsZTxQcmVmZXJlbmNlRW50cnk+O1xufVxuXG5leHBvcnQgY29uc3QgU0FWRURfU0VBUkNIRVNfU0VSVklDRV9QUkVGRVJFTkNFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTYXZlZFNlYXJjaGVzUHJlZmVyZW5jZXNBcGlTZXJ2aWNlPignU0FWRURfU0VBUkNIRVNfU0VSVklDRV9QUkVGRVJFTkNFUycpO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkU2VhcmNoZXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHNhdmVkU2VhcmNoRmlsZU5vZGVJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBwcml2YXRlIF9wcmVmZXJlbmNlc0FwaTogU2F2ZWRTZWFyY2hlc1ByZWZlcmVuY2VzQXBpU2VydmljZTtcbiAgICBwcml2YXRlIHByZWZlcmVuY2VzU2VydmljZSA9IGluamVjdChTQVZFRF9TRUFSQ0hFU19TRVJWSUNFX1BSRUZFUkVOQ0VTLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgZ2V0IG5vZGVzQXBpKCk6IE5vZGVzQXBpIHtcbiAgICAgICAgdGhpcy5fbm9kZXNBcGkgPSB0aGlzLl9ub2Rlc0FwaSA/PyBuZXcgTm9kZXNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNBcGk7XG4gICAgfVxuXG4gICAgZ2V0IHByZWZlcmVuY2VzQXBpKCk6IFNhdmVkU2VhcmNoZXNQcmVmZXJlbmNlc0FwaVNlcnZpY2Uge1xuICAgICAgICBpZiAodGhpcy5wcmVmZXJlbmNlc1NlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzQXBpID0gdGhpcy5wcmVmZXJlbmNlc1NlcnZpY2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNBcGk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlc0FwaSA9IHRoaXMuX3ByZWZlcmVuY2VzQXBpID8/IG5ldyBQcmVmZXJlbmNlc0FwaSh0aGlzLmFwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlc0FwaTtcbiAgICB9XG5cbiAgICByZWFkb25seSBzYXZlZFNlYXJjaGVzJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFNhdmVkU2VhcmNoW10+KDEpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcGlTZXJ2aWNlOiBBbGZyZXNjb0FwaVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSkge31cblxuICAgIGluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmV0Y2hTYXZlZFNlYXJjaGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGxpc3Qgb2Ygc2F2ZWQgc2VhcmNoZXMgYnkgdXNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFNhdmVkU2VhcmNoIGxpc3QgY29udGFpbmluZyB1c2VyIHNhdmVkIHNlYXJjaGVzXG4gICAgICovXG4gICAgZ2V0U2F2ZWRTZWFyY2hlcygpOiBPYnNlcnZhYmxlPFNhdmVkU2VhcmNoW10+IHtcbiAgICAgICAgY29uc3Qgc2F2ZWRTZWFyY2hlc01pZ3JhdGVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXkoKSkgPz8gJyc7XG4gICAgICAgIGlmIChzYXZlZFNlYXJjaGVzTWlncmF0ZWQgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5wcmVmZXJlbmNlc0FwaS5nZXRQcmVmZXJlbmNlKCctbWUtJywgJ3NhdmVkLXNlYXJjaGVzJykpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKFtdKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTYXZlZFNlYXJjaGVzTm9kZUlkKCkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNhdmVkU2VhcmNoRmlsZU5vZGVJZCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1pZ3JhdGVTYXZlZFNlYXJjaGVzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLmdldFByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHByZWZlcmVuY2UpID0+IEpTT04ucGFyc2UocHJlZmVyZW5jZS5lbnRyeS52YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgYSBuZXcgc2VhcmNoIGludG8gc3RhdGUgYW5kIHVwZGF0ZXMgc3RhdGUuIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gNSBzZWFyY2hlcyxcbiAgICAgKiBpdCB3aWxsIGJlIHB1c2hlZCBvbiBmaXJzdCBwbGFjZSwgaWYgbW9yZSBpdCB3aWxsIGJlIHB1c2hlZCB0byA2dGggcGxhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3U2F2ZVNlYXJjaCBvYmplY3QgeyBuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGVuY29kZWRVcmw6IHN0cmluZyB9XG4gICAgICogQHJldHVybnMgTm9kZUVudHJ5XG4gICAgICovXG4gICAgc2F2ZVNlYXJjaChuZXdTYXZlU2VhcmNoOiBQaWNrPFNhdmVkU2VhcmNoLCAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2VuY29kZWRVcmwnPik6IE9ic2VydmFibGU8Tm9kZUVudHJ5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNhdmVkU2VhcmNoZXMoKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoc2F2ZWRTZWFyY2hlczogU2F2ZWRTZWFyY2hbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB1cGRhdGVkU2F2ZWRTZWFyY2hlczogU2F2ZWRTZWFyY2hbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNhdmVkU2VhcmNoZXMubGVuZ3RoIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkU2F2ZWRTZWFyY2hlcyA9IFt7IC4uLm5ld1NhdmVTZWFyY2gsIG9yZGVyOiAwIH0sIC4uLnNhdmVkU2VhcmNoZXNdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Rml2ZVNlYXJjaGVzID0gc2F2ZWRTZWFyY2hlcy5zbGljZSgwLCA1KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdE9mU2VhcmNoZXMgPSBzYXZlZFNlYXJjaGVzLnNsaWNlKDUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRTYXZlZFNlYXJjaGVzID0gWy4uLmZpcnN0Rml2ZVNlYXJjaGVzLCB7IC4uLm5ld1NhdmVTZWFyY2gsIG9yZGVyOiA1IH0sIC4uLnJlc3RPZlNlYXJjaGVzXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVkU2F2ZWRTZWFyY2hlcyA9IHVwZGF0ZWRTYXZlZFNlYXJjaGVzLm1hcCgoc2VhcmNoLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogaW5kZXhcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLnVwZGF0ZVByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkU2F2ZWRTZWFyY2hlcykpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHByZWZlcmVuY2UpID0+IEpTT04ucGFyc2UocHJlZmVyZW5jZS5lbnRyeS52YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zYXZlZFNlYXJjaGVzJC5uZXh0KHVwZGF0ZWRTYXZlZFNlYXJjaGVzKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBuZXcgc2VhcmNoOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgU2F2ZSBTZWFyY2ggd2l0aCBuZXcgb25lIGFuZCBhbHNvIHVwZGF0ZXMgdGhlIHN0YXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVwZGF0ZWRTYXZlZFNlYXJjaCAtIHVwZGF0ZWQgU2F2ZSBTZWFyY2hcbiAgICAgKiBAcmV0dXJucyBOb2RlRW50cnlcbiAgICAgKi9cbiAgICBlZGl0U2F2ZWRTZWFyY2godXBkYXRlZFNhdmVkU2VhcmNoOiBTYXZlZFNlYXJjaCk6IE9ic2VydmFibGU8Tm9kZUVudHJ5PiB7XG4gICAgICAgIGxldCBwcmV2aW91c1NhdmVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW107XG4gICAgICAgIHJldHVybiB0aGlzLnNhdmVkU2VhcmNoZXMkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWFwKChzYXZlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTYXZlZFNlYXJjaGVzID0gWy4uLnNhdmVkU2VhcmNoZXNdO1xuICAgICAgICAgICAgICAgIHJldHVybiBzYXZlZFNlYXJjaGVzLm1hcCgoc2VhcmNoKSA9PiAoc2VhcmNoLm9yZGVyID09PSB1cGRhdGVkU2F2ZWRTZWFyY2gub3JkZXIgPyB1cGRhdGVkU2F2ZWRTZWFyY2ggOiBzZWFyY2gpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQodXBkYXRlZFNlYXJjaGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+XG4gICAgICAgICAgICAgICAgZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLnVwZGF0ZVByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkU2VhcmNoZXMpKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRTZWFyY2hlcyQubmV4dChwcmV2aW91c1NhdmVkU2VhcmNoZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBTYXZlIFNlYXJjaCBhbmQgdXBkYXRlIHN0YXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGV0ZWRTYXZlZFNlYXJjaCAtIFNhdmUgU2VhcmNoIHRvIGRlbGV0ZVxuICAgICAqIEByZXR1cm5zIE5vZGVFbnRyeVxuICAgICAqL1xuICAgIGRlbGV0ZVNhdmVkU2VhcmNoKGRlbGV0ZWRTYXZlZFNlYXJjaDogU2F2ZWRTZWFyY2gpOiBPYnNlcnZhYmxlPE5vZGVFbnRyeT4ge1xuICAgICAgICBsZXQgcHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXI6IFNhdmVkU2VhcmNoW107XG4gICAgICAgIHJldHVybiB0aGlzLnNhdmVkU2VhcmNoZXMkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWFwKChzYXZlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXIgPSBbLi4uc2F2ZWRTZWFyY2hlc107XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFNlYXJjaGVzID0gc2F2ZWRTZWFyY2hlcy5maWx0ZXIoKHNlYXJjaCkgPT4gc2VhcmNoLm9yZGVyICE9PSBkZWxldGVkU2F2ZWRTZWFyY2gub3JkZXIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkU2VhcmNoZXMubWFwKChzZWFyY2gsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQodXBkYXRlZFNlYXJjaGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh1cGRhdGVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+XG4gICAgICAgICAgICAgICAgZnJvbSh0aGlzLnByZWZlcmVuY2VzQXBpLnVwZGF0ZVByZWZlcmVuY2UoJy1tZS0nLCAnc2F2ZWQtc2VhcmNoZXMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkU2VhcmNoZXMpKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRTZWFyY2hlcyQubmV4dChwcmV2aW91c1NhdmVkU2VhcmNoZXNPcmRlcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW9yZGVycyBzYXZlZCBzZWFyY2ggcGxhY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0luZGV4IC0gcHJldmlvdXMgaW5kZXggb2Ygc2F2ZWQgc2VhcmNoXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCAtIG5ldyBpbmRleCBvZiBzYXZlZCBzZWFyY2hcbiAgICAgKi9cbiAgICBjaGFuZ2VPcmRlcihwcmV2aW91c0luZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBwcmV2aW91c1NhdmVkU2VhcmNoZXNPcmRlcjogU2F2ZWRTZWFyY2hbXTtcbiAgICAgICAgdGhpcy5zYXZlZFNlYXJjaGVzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKHNhdmVkU2VhcmNoZXM6IFNhdmVkU2VhcmNoW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXIgPSBbLi4uc2F2ZWRTZWFyY2hlc107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFttb3ZlZFNlYXJjaF0gPSBzYXZlZFNlYXJjaGVzLnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgc2F2ZWRTZWFyY2hlcy5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBtb3ZlZFNlYXJjaCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlZFNlYXJjaGVzLm1hcCgoc2VhcmNoLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKChzYXZlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PiB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQoc2F2ZWRTZWFyY2hlcykpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgodXBkYXRlZFNlYXJjaGVzOiBTYXZlZFNlYXJjaFtdKSA9PlxuICAgICAgICAgICAgICAgICAgICBmcm9tKHRoaXMucHJlZmVyZW5jZXNBcGkudXBkYXRlUHJlZmVyZW5jZSgnLW1lLScsICdzYXZlZC1zZWFyY2hlcycsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRTZWFyY2hlcykpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlKSA9PiBKU09OLnBhcnNlKHByZWZlcmVuY2UuZW50cnkudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMkLm5leHQocHJldmlvdXNTYXZlZFNlYXJjaGVzT3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhdmVkU2VhcmNoZXNOb2RlSWQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5ub2Rlc0FwaS5nZXROb2RlKCctbXktJywgeyByZWxhdGl2ZVBhdGg6ICdjb25maWcuanNvbicgfSkpLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgY29uY2F0TWFwKChjb25maWdOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlZFNlYXJjaEZpbGVOb2RlSWQgPSBjb25maWdOb2RlLmVudHJ5LmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdOb2RlLmVudHJ5LmlkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yU3RhdHVzQ29kZSA9IEpTT04ucGFyc2UoZXJyb3IubWVzc2FnZSkuZXJyb3Iuc3RhdHVzQ29kZTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JTdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXkoKSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFwRmlsZUNvbnRlbnRUb1NhdmVkU2VhcmNoZXMoYmxvYjogQmxvYik6IFByb21pc2U8QXJyYXk8U2F2ZWRTZWFyY2g+PiB7XG4gICAgICAgIHJldHVybiBibG9iXG4gICAgICAgICAgICAudGV4dCgpXG4gICAgICAgICAgICAudGhlbigoY29udGVudCkgPT4gKGNvbnRlbnQgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDogW10pKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHNhdmVkLXNlYXJjaGVzLSR7dGhpcy5hdXRoU2VydmljZS5nZXRVc2VybmFtZSgpfS1taWdyYXRlZGA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmZXRjaFNhdmVkU2VhcmNoZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U2F2ZWRTZWFyY2hlcygpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoZXMpID0+IHRoaXMuc2F2ZWRTZWFyY2hlcyQubmV4dChzZWFyY2hlcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWlncmF0ZVNhdmVkU2VhcmNoZXMoKTogT2JzZXJ2YWJsZTxTYXZlZFNlYXJjaFtdPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMubm9kZXNBcGkuZ2V0Tm9kZUNvbnRlbnQodGhpcy5zYXZlZFNlYXJjaEZpbGVOb2RlSWQpLnRoZW4oKGNvbnRlbnQpID0+IHRoaXMubWFwRmlsZUNvbnRlbnRUb1NhdmVkU2VhcmNoZXMoY29udGVudCkpKS5waXBlKFxuICAgICAgICAgICAgdGFwKChzYXZlZFNlYXJjaGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJlbmNlc0FwaS51cGRhdGVQcmVmZXJlbmNlKCctbWUtJywgJ3NhdmVkLXNlYXJjaGVzJywgSlNPTi5zdHJpbmdpZnkoc2F2ZWRTZWFyY2hlcykpO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0TG9jYWxTdG9yYWdlS2V5KCksICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc0FwaS5kZWxldGVOb2RlKHRoaXMuc2F2ZWRTZWFyY2hGaWxlTm9kZUlkLCB7IHBlcm1hbmVudDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|