nuxeo-development-framework 0.0.2 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/bundles/nuxeo-development-framework.umd.js +18534 -50
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/Core/adapters/adapter.service.js +50 -0
- package/esm2015/lib/Core/core.module.js +104 -0
- package/esm2015/lib/Core/enums/language.enum.js +6 -0
- package/esm2015/lib/Core/models/component.model.js +8 -0
- package/esm2015/lib/Core/services/callApi/call-api.service.js +33 -0
- package/esm2015/lib/Core/services/initialization/initialization.service.js +57 -0
- package/esm2015/lib/Core/services/localStorag/local-storag.service.js +123 -0
- package/esm2015/lib/Core/services/nuxeo/nuxeo-override.js +82 -0
- package/esm2015/lib/Core/services/nuxeo/nuxeo.service.js +120 -0
- package/esm2015/lib/Core/services/roles/roles.service.js +103 -0
- package/esm2015/lib/Core/services/translation/translate-loader.service.js +150 -0
- package/esm2015/lib/Core/services/translation/translation.service.js +171 -0
- package/esm2015/lib/Core/services/user/user-preferences.service.js +153 -0
- package/esm2015/lib/Core/utilities/moment-date-adapter.js +178 -0
- package/esm2015/lib/Core/utilities/utility.service.js +81 -0
- package/esm2015/lib/components/activity/activity/activity.component.js +28 -0
- package/esm2015/lib/components/activity/activity.module.js +37 -0
- package/esm2015/lib/components/avatar/avatar/avatar.component.js +55 -0
- package/esm2015/lib/components/avatar/avatar.module.js +32 -0
- package/esm2015/lib/components/card/card.component.js +48 -0
- package/esm2015/lib/components/card/card.module.js +23 -0
- package/esm2015/lib/components/comments/comments.module.js +76 -0
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +33 -0
- package/esm2015/lib/components/comments/components/comments-dashlet/comments-dashlet.component.js +78 -0
- package/esm2015/lib/components/comments/components/comments-list/comments-list.component.js +68 -0
- package/esm2015/lib/components/comments/constants/comment.js +25 -0
- package/esm2015/lib/components/comments/services/comment-api.service.js +49 -0
- package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +73 -0
- package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +27 -0
- package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +29 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +134 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +133 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +110 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.js +49 -0
- package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +61 -0
- package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +111 -0
- package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +115 -0
- package/esm2015/lib/components/correspondence-relation/services/viewer-files.service.js +50 -0
- package/esm2015/lib/components/create-entity/create-entity/create-entity.component.js +62 -0
- package/esm2015/lib/components/create-entity/create-entity.module.js +36 -0
- package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +73 -0
- package/esm2015/lib/components/cts-tags/cts-tags.module.js +65 -0
- package/esm2015/lib/components/cts-tags/services/tags-api.service.js +61 -0
- package/esm2015/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.js +82 -0
- package/esm2015/lib/components/custom-toastr/custom-toastr.module.js +36 -0
- package/esm2015/lib/components/custom-toastr/interfaces/toast-type.interface.js +2 -0
- package/esm2015/lib/components/custom-toastr/services/custom-toastr.service.js +41 -0
- package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +156 -0
- package/esm2015/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.js +72 -0
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +255 -0
- package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js +929 -0
- package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +159 -0
- package/esm2015/lib/components/documents/components/documents/documents.component.js +61 -0
- package/esm2015/lib/components/documents/constants/document-templates.js +32 -0
- package/esm2015/lib/components/documents/constants/documents.js +86 -0
- package/esm2015/lib/components/documents/documents.module.js +123 -0
- package/esm2015/lib/components/documents/services/document-templates.service.js +115 -0
- package/esm2015/lib/components/documents/services/documents.service.js +217 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +342 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +34 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +164 -0
- package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +542 -0
- package/esm2015/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.js +106 -0
- package/esm2015/lib/components/dynamic-filter/dynamic-filter.module.js +26 -0
- package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +124 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.js +94 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/fields.adapter.js +127 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/form-builder.service.js +102 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.js +35 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.js +165 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.js +71 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.js +202 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.js +78 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/constants/department.js +13 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +185 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.js +207 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +94 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.js +85 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.js +128 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.js +81 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.js +36 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.js +106 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.js +93 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.js +207 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.js +302 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.js +44 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.js +176 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.js +76 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +180 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.js +250 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.js +63 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +269 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.js +47 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.js +172 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.js +768 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.js +35 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.js +17 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.js +34 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.js +17 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.js +38 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.js +30 -0
- package/esm2015/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.js +17 -0
- package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +289 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.js +10 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-baseitem.model.js +63 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-boolitem.model.js +20 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-dateitem.model.js +24 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.js +12 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-mapitem.model.js +16 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-selectitem.model.js +17 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-textitem.model.js +32 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form.models.js +8 -0
- package/esm2015/lib/components/dynamic-form/services/card-item-types.service.js +46 -0
- package/esm2015/lib/components/dynamic-form/services/dynamic-component-mapper.service.js +60 -0
- package/esm2015/lib/components/dynamic-form/services/dynamic-form-update.service.js +74 -0
- package/esm2015/lib/components/dynamic-form/validators/length-validator.js +15 -0
- package/esm2015/lib/components/dynamic-form/validators/regex-validator.js +15 -0
- package/esm2015/lib/components/dynamic-form/validators/required-validator.js +9 -0
- package/esm2015/lib/components/dynamic-form/validators/value-validator.js +15 -0
- package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +148 -0
- package/esm2015/lib/components/dynamic-search/dynamic-search.module.js +57 -0
- package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +204 -0
- package/esm2015/lib/components/dynamic-table/dynamic-table.module.js +44 -0
- package/esm2015/lib/components/dynamic-table/services/dynamic-table.service.js +16 -0
- package/esm2015/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.js +36 -0
- package/esm2015/lib/components/dynamic-view/data-viewer/data-viewer.component.js +32 -0
- package/esm2015/lib/components/dynamic-view/date-viewer/date-viewer.component.js +49 -0
- package/esm2015/lib/components/dynamic-view/department-viewer/department-viewer.component.js +71 -0
- package/esm2015/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.js +60 -0
- package/esm2015/lib/components/dynamic-view/dynamic-view.module.js +54 -0
- package/esm2015/lib/components/dynamic-view/list-viewer/list-viewer.component.js +40 -0
- package/esm2015/lib/components/filter/filter/filter.component.js +94 -0
- package/esm2015/lib/components/filter/filter.module.js +45 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.js +114 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.js +111 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.js +165 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.js +32 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.js +54 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.js +71 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-helper.service.js +25 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.js +43 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.js +26 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/consts.js +5 -0
- package/esm2015/lib/components/latest-activity/components/activity-line/activity-line.component.js +75 -0
- package/esm2015/lib/components/latest-activity/components/latest-activity/latest-activity.component.js +70 -0
- package/esm2015/lib/components/latest-activity/components/single-activity/single-activity.component.js +27 -0
- package/esm2015/lib/components/latest-activity/constants/activitylog.js +80 -0
- package/esm2015/lib/components/latest-activity/latest-activity.module.js +53 -0
- package/esm2015/lib/components/latest-activity/services/activity-log.service.js +33 -0
- package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +69 -0
- package/esm2015/lib/components/notifications/components/notification-options/notification-options.component.js +22 -0
- package/esm2015/lib/components/notifications/components/notification-toast/notification-toast.component.js +57 -0
- package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +129 -0
- package/esm2015/lib/components/notifications/components/notifications-list/notifications-list.component.js +149 -0
- package/esm2015/lib/components/notifications/notifications.module.js +109 -0
- package/esm2015/lib/components/notifications/notifications.service.js +277 -0
- package/esm2015/lib/components/pagination/pagination/pagination.component.js +123 -0
- package/esm2015/lib/components/pagination/pagination.module.js +32 -0
- package/esm2015/lib/components/pdf-tron/pdf-tron.module.js +24 -0
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +228 -0
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.service.js +181 -0
- package/esm2015/lib/components/select/select/select.component.js +130 -0
- package/esm2015/lib/components/select/select.module.js +37 -0
- package/esm2015/lib/components/table/table/table.component.js +174 -0
- package/esm2015/lib/components/table/table.module.js +57 -0
- package/esm2015/lib/components/users-card/users-card.component.js +43 -0
- package/esm2015/lib/components/users-card/users-card.module.js +28 -0
- package/esm2015/lib/components/viewer-log/components/viewer-log/viewer-log.component.js +33 -0
- package/esm2015/lib/components/viewer-log/viewer-log.module.js +20 -0
- package/esm2015/lib/components/vocabulary/interfaces/op-type.interface.js +2 -0
- package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +49 -0
- package/esm2015/lib/components/vocabulary/vocabulary/vocabulary.component.js +106 -0
- package/esm2015/lib/components/vocabulary/vocabulary.module.js +34 -0
- package/esm2015/lib/configuration/app-config.service.js +26 -0
- package/esm2015/lib/configuration/helpers/app-initializer.js +4 -0
- package/esm2015/lib/directive/app-has-role/app-has-role.directive.js +61 -0
- package/esm2015/lib/directive/clickOutSide/click-outside.directive.js +29 -0
- package/esm2015/lib/directive/directive.module.js +48 -0
- package/esm2015/lib/directive/permissions/evaluators.service.js +118 -0
- package/esm2015/lib/directive/permissions/permissions.directive.js +106 -0
- package/esm2015/lib/directive/rtl/set-dir-rtl.directive.js +28 -0
- package/esm2015/lib/directive/rtl/set-rtl.directive.js +29 -0
- package/esm2015/lib/nuxeo-development-framework.component.js +26 -18
- package/esm2015/lib/nuxeo-development-framework.module.js +45 -16
- package/esm2015/lib/nuxeo-development-framework.service.js +14 -13
- package/esm2015/lib/pipes/file-size.pipe.js +57 -0
- package/esm2015/lib/pipes/hijri-date.pipe.js +46 -0
- package/esm2015/lib/pipes/localized-date.pipe.js +81 -0
- package/esm2015/lib/pipes/multi-value.pipe.js +42 -0
- package/esm2015/lib/pipes/pipes.module.js +29 -0
- package/esm2015/lib/pipes/secure-html.pipe.js +34 -0
- package/esm2015/lib/pipes/secure.pipe.js +40 -0
- package/esm2015/lib/pipes/time-ago.pipe.js +68 -0
- package/esm2015/lib/shared/components/button/button.component.js +87 -0
- package/esm2015/lib/shared/components/item-list/item-list.component.js +76 -0
- package/esm2015/lib/shared/components/no-data/no-data.component.js +37 -0
- package/esm2015/lib/shared/components/read-more/read-more.component.js +107 -0
- package/esm2015/lib/shared/components/search-autocomplete/search-autocomplete.component.js +144 -0
- package/esm2015/lib/shared/components/spinner/spinner.component.js +29 -0
- package/esm2015/lib/shared/components/user-card/user-card.component.js +49 -0
- package/esm2015/lib/shared/libraryShared.module.js +80 -0
- package/esm2015/nuxeo-development-framework.js +4 -4
- package/esm2015/public-api.js +156 -7
- package/fesm2015/nuxeo-development-framework.js +17027 -49
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/Core/adapters/adapter.service.d.ts +11 -0
- package/lib/Core/core.module.d.ts +14 -0
- package/lib/Core/enums/language.enum.d.ts +4 -0
- package/lib/Core/models/component.model.d.ts +6 -0
- package/lib/Core/services/callApi/call-api.service.d.ts +11 -0
- package/lib/Core/services/initialization/initialization.service.d.ts +14 -0
- package/lib/Core/services/localStorag/local-storag.service.d.ts +41 -0
- package/lib/Core/services/nuxeo/nuxeo-override.d.ts +8 -0
- package/lib/Core/services/nuxeo/nuxeo.service.d.ts +33 -0
- package/lib/Core/services/roles/roles.service.d.ts +11 -0
- package/lib/Core/services/translation/translate-loader.service.d.ts +26 -0
- package/lib/Core/services/translation/translation.service.d.ts +71 -0
- package/lib/Core/services/user/user-preferences.service.d.ts +80 -0
- package/lib/Core/utilities/moment-date-adapter.d.ts +37 -0
- package/lib/Core/utilities/utility.service.d.ts +11 -0
- package/lib/components/activity/activity/activity.component.d.ts +13 -0
- package/lib/components/activity/activity.module.d.ts +13 -0
- package/lib/components/avatar/avatar/avatar.component.d.ts +23 -0
- package/lib/components/avatar/avatar.module.d.ts +13 -0
- package/lib/components/card/card.component.d.ts +32 -0
- package/lib/components/card/card.module.d.ts +12 -0
- package/lib/components/comments/comments.module.d.ts +25 -0
- package/lib/components/comments/components/comment-item/comment-item.component.d.ts +13 -0
- package/lib/components/comments/components/comments-dashlet/comments-dashlet.component.d.ts +45 -0
- package/lib/components/comments/components/comments-list/comments-list.component.d.ts +26 -0
- package/lib/components/comments/constants/comment.d.ts +25 -0
- package/lib/components/comments/services/comment-api.service.d.ts +14 -0
- package/lib/components/confirm-caller/confirm-caller.dialog.d.ts +46 -0
- package/lib/components/confirm-caller/confirm-caller.module.d.ts +16 -0
- package/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.d.ts +12 -0
- package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +34 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +42 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +31 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.d.ts +18 -0
- package/lib/components/correspondence-relation/components/versions/versions.component.d.ts +31 -0
- package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +30 -0
- package/lib/components/correspondence-relation/services/correspondence-realation.service.d.ts +24 -0
- package/lib/components/correspondence-relation/services/viewer-files.service.d.ts +18 -0
- package/lib/components/create-entity/create-entity/create-entity.component.d.ts +17 -0
- package/lib/components/create-entity/create-entity.module.d.ts +11 -0
- package/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.d.ts +28 -0
- package/lib/components/cts-tags/cts-tags.module.d.ts +21 -0
- package/lib/components/cts-tags/services/tags-api.service.d.ts +15 -0
- package/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.d.ts +30 -0
- package/lib/components/custom-toastr/custom-toastr.module.d.ts +12 -0
- package/lib/components/custom-toastr/interfaces/toast-type.interface.d.ts +1 -0
- package/lib/components/custom-toastr/services/custom-toastr.service.d.ts +18 -0
- package/lib/components/documents/components/attachments-list/attachments-list.component.d.ts +54 -0
- package/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.d.ts +37 -0
- package/lib/components/documents/components/document-list/documents-list.component.d.ts +81 -0
- package/lib/components/documents/components/document-scan/document-scan.component.d.ts +103 -0
- package/lib/components/documents/components/document-upload/document-upload.component.d.ts +58 -0
- package/lib/components/documents/components/documents/documents.component.d.ts +27 -0
- package/lib/components/documents/constants/document-templates.d.ts +33 -0
- package/lib/components/documents/constants/documents.d.ts +95 -0
- package/lib/components/documents/documents.module.d.ts +33 -0
- package/lib/components/documents/services/document-templates.service.d.ts +24 -0
- package/lib/components/documents/services/documents.service.d.ts +36 -0
- package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +63 -0
- package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +16 -0
- package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +33 -0
- package/lib/components/dynamic-chart/services/chart-data.service.d.ts +37 -0
- package/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.d.ts +45 -0
- package/lib/components/dynamic-filter/dynamic-filter.module.d.ts +16 -0
- package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +28 -0
- package/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.d.ts +26 -0
- package/lib/components/dynamic-form/components/dynamic-form/fields.adapter.d.ts +6 -0
- package/lib/components/dynamic-form/components/dynamic-form/form-builder.service.d.ts +21 -0
- package/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.d.ts +17 -0
- package/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.d.ts +57 -0
- package/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.d.ts +35 -0
- package/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.d.ts +70 -0
- package/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.d.ts +52 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/constants/department.d.ts +12 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +65 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.d.ts +29 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +21 -0
- package/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.d.ts +30 -0
- package/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.d.ts +61 -0
- package/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.d.ts +25 -0
- package/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.d.ts +15 -0
- package/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.d.ts +45 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.d.ts +41 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.d.ts +65 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.d.ts +83 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.d.ts +13 -0
- package/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.d.ts +79 -0
- package/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.d.ts +37 -0
- package/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.d.ts +71 -0
- package/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.d.ts +86 -0
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.d.ts +19 -0
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +88 -0
- package/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.d.ts +16 -0
- package/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.d.ts +76 -0
- package/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.d.ts +599 -0
- package/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.d.ts +16 -0
- package/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.d.ts +9 -0
- package/lib/components/dynamic-form/dynamic-form.module.d.ts +64 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.d.ts +15 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.d.ts +4 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.d.ts +12 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.d.ts +8 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.d.ts +10 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.d.ts +8 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.d.ts +9 -0
- package/lib/components/dynamic-form/models/dynamic-form-baseitem.model.d.ts +21 -0
- package/lib/components/dynamic-form/models/dynamic-form-boolitem.model.d.ts +11 -0
- package/lib/components/dynamic-form/models/dynamic-form-dateitem.model.d.ts +13 -0
- package/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.d.ts +9 -0
- package/lib/components/dynamic-form/models/dynamic-form-mapitem.model.d.ts +8 -0
- package/lib/components/dynamic-form/models/dynamic-form-selectitem.model.d.ts +11 -0
- package/lib/components/dynamic-form/models/dynamic-form-textitem.model.d.ts +15 -0
- package/lib/components/dynamic-form/models/dynamic-form.models.d.ts +7 -0
- package/lib/components/dynamic-form/services/card-item-types.service.d.ts +13 -0
- package/lib/components/dynamic-form/services/dynamic-component-mapper.service.d.ts +36 -0
- package/lib/components/dynamic-form/services/dynamic-form-update.service.d.ts +30 -0
- package/lib/components/dynamic-form/validators/length-validator.d.ts +7 -0
- package/lib/components/dynamic-form/validators/regex-validator.d.ts +7 -0
- package/lib/components/dynamic-form/validators/required-validator.d.ts +5 -0
- package/lib/components/dynamic-form/validators/value-validator.d.ts +7 -0
- package/lib/components/dynamic-search/dynamic-search/dynamic-search.component.d.ts +71 -0
- package/lib/components/dynamic-search/dynamic-search.module.d.ts +19 -0
- package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +96 -0
- package/lib/components/dynamic-table/dynamic-table.module.d.ts +16 -0
- package/lib/components/dynamic-table/services/dynamic-table.service.d.ts +8 -0
- package/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.d.ts +13 -0
- package/lib/components/dynamic-view/data-viewer/data-viewer.component.d.ts +12 -0
- package/lib/components/dynamic-view/date-viewer/date-viewer.component.d.ts +17 -0
- package/lib/components/dynamic-view/department-viewer/department-viewer.component.d.ts +29 -0
- package/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.d.ts +37 -0
- package/lib/components/dynamic-view/dynamic-view.module.d.ts +20 -0
- package/lib/components/dynamic-view/list-viewer/list-viewer.component.d.ts +20 -0
- package/lib/components/filter/filter/filter.component.d.ts +31 -0
- package/lib/components/filter/filter.module.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.d.ts +34 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.d.ts +32 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.d.ts +39 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.d.ts +9 -0
- package/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.d.ts +14 -0
- package/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/services/date-helper.service.d.ts +8 -0
- package/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.d.ts +11 -0
- package/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.d.ts +10 -0
- package/lib/components/hijri-gregorian-datepicker/utils/consts.d.ts +4 -0
- package/lib/components/latest-activity/components/activity-line/activity-line.component.d.ts +19 -0
- package/lib/components/latest-activity/components/latest-activity/latest-activity.component.d.ts +22 -0
- package/lib/components/latest-activity/components/single-activity/single-activity.component.d.ts +10 -0
- package/lib/components/latest-activity/constants/activitylog.d.ts +82 -0
- package/lib/components/latest-activity/latest-activity.module.d.ts +19 -0
- package/lib/components/latest-activity/services/activity-log.service.d.ts +12 -0
- package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +15 -0
- package/lib/components/notifications/components/notification-options/notification-options.component.d.ts +10 -0
- package/lib/components/notifications/components/notification-toast/notification-toast.component.d.ts +19 -0
- package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +25 -0
- package/lib/components/notifications/components/notifications-list/notifications-list.component.d.ts +45 -0
- package/lib/components/notifications/notifications.module.d.ts +24 -0
- package/lib/components/notifications/notifications.service.d.ts +61 -0
- package/lib/components/pagination/pagination/pagination.component.d.ts +46 -0
- package/lib/components/pagination/pagination.module.d.ts +13 -0
- package/lib/components/pdf-tron/pdf-tron.module.d.ts +8 -0
- package/lib/components/pdf-tron/pdftron/pdftron.component.d.ts +54 -0
- package/lib/components/pdf-tron/pdftron/pdftron.service.d.ts +30 -0
- package/lib/components/select/select/select.component.d.ts +43 -0
- package/lib/components/select/select.module.d.ts +12 -0
- package/lib/components/table/table/table.component.d.ts +89 -0
- package/lib/components/table/table.module.d.ts +18 -0
- package/lib/components/users-card/users-card.component.d.ts +22 -0
- package/lib/components/users-card/users-card.module.d.ts +17 -0
- package/lib/components/viewer-log/components/viewer-log/viewer-log.component.d.ts +12 -0
- package/lib/components/viewer-log/viewer-log.module.d.ts +10 -0
- package/lib/components/vocabulary/interfaces/op-type.interface.d.ts +1 -0
- package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +16 -0
- package/lib/components/vocabulary/vocabulary/vocabulary.component.d.ts +37 -0
- package/lib/components/vocabulary/vocabulary.module.d.ts +11 -0
- package/lib/configuration/app-config.service.d.ts +11 -0
- package/lib/configuration/helpers/app-initializer.d.ts +2 -0
- package/lib/directive/app-has-role/app-has-role.directive.d.ts +18 -0
- package/lib/directive/clickOutSide/click-outside.directive.d.ts +11 -0
- package/lib/directive/directive.module.d.ts +16 -0
- package/lib/directive/permissions/evaluators.service.d.ts +26 -0
- package/lib/directive/permissions/permissions.directive.d.ts +46 -0
- package/lib/directive/rtl/set-dir-rtl.directive.d.ts +13 -0
- package/lib/directive/rtl/set-rtl.directive.d.ts +13 -0
- package/lib/nuxeo-development-framework.component.d.ts +8 -5
- package/lib/nuxeo-development-framework.module.d.ts +12 -2
- package/lib/nuxeo-development-framework.service.d.ts +6 -3
- package/lib/pipes/file-size.pipe.d.ts +34 -0
- package/lib/pipes/hijri-date.pipe.d.ts +32 -0
- package/lib/pipes/localized-date.pipe.d.ts +44 -0
- package/lib/pipes/multi-value.pipe.d.ts +32 -0
- package/lib/pipes/pipes.module.d.ts +18 -0
- package/lib/pipes/secure-html.pipe.d.ts +26 -0
- package/lib/pipes/secure.pipe.d.ts +29 -0
- package/lib/pipes/time-ago.pipe.d.ts +34 -0
- package/lib/shared/components/button/button.component.d.ts +38 -0
- package/lib/shared/components/item-list/item-list.component.d.ts +45 -0
- package/lib/shared/components/no-data/no-data.component.d.ts +21 -0
- package/lib/shared/components/read-more/read-more.component.d.ts +37 -0
- package/lib/shared/components/search-autocomplete/search-autocomplete.component.d.ts +49 -0
- package/lib/shared/components/spinner/spinner.component.d.ts +18 -0
- package/lib/shared/components/user-card/user-card.component.d.ts +30 -0
- package/lib/shared/libraryShared.module.d.ts +25 -0
- package/nuxeo-development-framework.d.ts +5 -4
- package/package.json +57 -16
- package/public-api.d.ts +145 -3
- package/bundles/nuxeo-development-framework.umd.min.js +0 -2
- package/bundles/nuxeo-development-framework.umd.min.js.map +0 -1
- package/nuxeo-development-framework.metadata.json +0 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Inject, Injectable } from '@angular/core';
|
|
3
|
+
import { from, Observable } from 'rxjs';
|
|
4
|
+
import { catchError } from 'rxjs/operators';
|
|
5
|
+
import { NuxeoOverride as Nuxeo } from './nuxeo-override';
|
|
6
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common/http";
|
|
9
|
+
import * as i2 from "keycloak-angular";
|
|
10
|
+
import * as i3 from "../roles/roles.service";
|
|
11
|
+
export class NuxeoService {
|
|
12
|
+
constructor(http, keycloak, baseHref, environment, rolesService) {
|
|
13
|
+
this.http = http;
|
|
14
|
+
this.keycloak = keycloak;
|
|
15
|
+
this.baseHref = baseHref;
|
|
16
|
+
this.environment = environment;
|
|
17
|
+
this.rolesService = rolesService;
|
|
18
|
+
this.excludedUrls = [];
|
|
19
|
+
this.enableBearerInterceptor = true;
|
|
20
|
+
this.authenticated = false;
|
|
21
|
+
this.ctsUser = false;
|
|
22
|
+
this.ctsManger = false;
|
|
23
|
+
}
|
|
24
|
+
init() {
|
|
25
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
try {
|
|
27
|
+
this.keycloak.getToken().then(token => {
|
|
28
|
+
this.createTokenClient(token);
|
|
29
|
+
this.nuxeoClient.connect()
|
|
30
|
+
.then((client) => {
|
|
31
|
+
this.authenticated = true;
|
|
32
|
+
resolve(client);
|
|
33
|
+
this.checkForRoles();
|
|
34
|
+
})
|
|
35
|
+
.catch((error) => {
|
|
36
|
+
reject(error);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
reject(error);
|
|
42
|
+
}
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
createTokenClient(token) {
|
|
46
|
+
this.nuxeoClient = new Nuxeo({
|
|
47
|
+
baseURL: this.environment.nuxeo,
|
|
48
|
+
auth: {
|
|
49
|
+
method: 'bearerToken',
|
|
50
|
+
token
|
|
51
|
+
}
|
|
52
|
+
}, this.keycloak);
|
|
53
|
+
}
|
|
54
|
+
getToken() {
|
|
55
|
+
return this.keycloak.getToken();
|
|
56
|
+
}
|
|
57
|
+
doLogout() {
|
|
58
|
+
this.keycloak.logout(window.location.origin + this.baseHref);
|
|
59
|
+
}
|
|
60
|
+
isUserInRole(role, committeeCode = null) {
|
|
61
|
+
const simpleObservable = new Observable(observer => {
|
|
62
|
+
this.keycloak.isLoggedIn().then(logged => {
|
|
63
|
+
if (!logged) {
|
|
64
|
+
observer.next(false);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const hasRole = this.rolesService.isUserInRole(this.nuxeoClient.user, role, committeeCode);
|
|
68
|
+
observer.next(hasRole);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
return simpleObservable;
|
|
73
|
+
}
|
|
74
|
+
createBlob(file) {
|
|
75
|
+
return new Nuxeo.Blob({
|
|
76
|
+
content: file
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
getDuplicates(params = {}, body = {}) {
|
|
80
|
+
return from(this.nuxeoClient
|
|
81
|
+
.operation('AC_Get_Duplicates', {
|
|
82
|
+
url: `${this.environment.nuxeo}${this.environment.customAutomation}`,
|
|
83
|
+
})
|
|
84
|
+
.params(params)
|
|
85
|
+
.context(body)
|
|
86
|
+
.execute()).pipe(catchError((err) => {
|
|
87
|
+
console.log(err);
|
|
88
|
+
throw err;
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
checkForRoles() {
|
|
92
|
+
this.isCtsUser();
|
|
93
|
+
this.isCtsManger();
|
|
94
|
+
}
|
|
95
|
+
isCtsUser() {
|
|
96
|
+
this.isUserInRole('ctsSecretary', '').subscribe(data => {
|
|
97
|
+
this.ctsUser = data;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
isCtsManger() {
|
|
101
|
+
this.isUserInRole('ctsManger', '').subscribe(data => {
|
|
102
|
+
this.ctsManger = data;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
NuxeoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: NuxeoService, deps: [{ token: i1.HttpClient }, { token: i2.KeycloakService }, { token: APP_BASE_HREF }, { token: 'environment' }, { token: i3.RolesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
107
|
+
NuxeoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: NuxeoService, providedIn: 'root' });
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: NuxeoService, decorators: [{
|
|
109
|
+
type: Injectable,
|
|
110
|
+
args: [{
|
|
111
|
+
providedIn: 'root'
|
|
112
|
+
}]
|
|
113
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.KeycloakService }, { type: undefined, decorators: [{
|
|
114
|
+
type: Inject,
|
|
115
|
+
args: [APP_BASE_HREF]
|
|
116
|
+
}] }, { type: undefined, decorators: [{
|
|
117
|
+
type: Inject,
|
|
118
|
+
args: ['environment']
|
|
119
|
+
}] }, { type: i3.RolesService }]; } });
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnV4ZW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL0NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFNOUMsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFBb0IsSUFBZ0IsRUFBVSxRQUF5QixFQUN0QyxRQUFnQixFQUNoQixXQUFXLEVBQ2xDLFlBQTJCO1FBSGpCLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBUnJDLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUMvQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQThGdEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQU1oQixjQUFTLEdBQUUsS0FBSyxDQUFDO0lBNUZqQixDQUFDO0lBQ0QsSUFBSTtRQUNGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBTyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSTtnQkFDRixJQUFJLENBQUMsUUFB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O1lBQ2pCLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBR0QsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7eUdBN0dVLFlBQVksMkVBUWIsYUFBYSxhQUNiLGFBQWE7NkdBVFosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVNJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2hhcmUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTnV4ZW9PdmVycmlkZSBhcyBOdXhlbyB9IGZyb20gJy4vbnV4ZW8tb3ZlcnJpZGUnO1xyXG5pbXBvcnQge0FQUF9CQVNFX0hSRUZ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvbGVzU2VydmljZSB9IGZyb20gJy4uL3JvbGVzL3JvbGVzLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTnV4ZW9TZXJ2aWNlIHtcclxuICBudXhlb0NsaWVudDtcclxuICBleGNsdWRlZFVybHMgPSBbXTtcclxuICBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9IHRydWU7XHJcbiAgYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG4gIHRva2VuO1xyXG4gIHRva2VuT2JzZXJ2YWJsZTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSwgXHJcbiAgICBASW5qZWN0KEFQUF9CQVNFX0hSRUYpIHByaXZhdGUgYmFzZUhyZWY6IHN0cmluZywgXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIHJvbGVzU2VydmljZSA6IFJvbGVzU2VydmljZSkge1xyXG5cclxuICB9XHJcbiAgaW5pdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmtleWNsb2FrLmdldFRva2VuKCkudGhlbih0b2tlbiA9PiB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVUb2tlbkNsaWVudCh0b2tlbik7XHJcbiAgICAgICAgICB0aGlzLm51eGVvQ2xpZW50LmNvbm5lY3QoKVxyXG4gICAgICAgICAgICAudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXNvbHZlKGNsaWVudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0ZvclJvbGVzKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIGNyZWF0ZVRva2VuQ2xpZW50KHRva2VuKSB7XHJcbiAgICB0aGlzLm51eGVvQ2xpZW50ID0gbmV3IE51eGVvKHtcclxuICAgICAgYmFzZVVSTDogdGhpcy5lbnZpcm9ubWVudC5udXhlbyxcclxuICAgICAgYXV0aDoge1xyXG4gICAgICAgIG1ldGhvZDogJ2JlYXJlclRva2VuJyxcclxuICAgICAgICB0b2tlblxyXG4gICAgICB9XHJcbiAgICB9LCB0aGlzLmtleWNsb2FrKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMua2V5Y2xvYWsuZ2V0VG9rZW4oKTtcclxuICB9XHJcblxyXG4gIGRvTG9nb3V0KCkge1xyXG4gICAgdGhpcy5rZXljbG9hay5sb2dvdXQod2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHRoaXMuYmFzZUhyZWYpO1xyXG4gIH1cclxuXHJcblxyXG4gIGlzVXNlckluUm9sZShyb2xlOiBhbnksIGNvbW1pdHRlZUNvZGUgPSBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHNpbXBsZU9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgIHRoaXMua2V5Y2xvYWsuaXNMb2dnZWRJbigpLnRoZW4obG9nZ2VkID0+IHtcclxuICAgICAgICBpZiAoIWxvZ2dlZCkge1xyXG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGhhc1JvbGUgPSB0aGlzLnJvbGVzU2VydmljZS5pc1VzZXJJblJvbGUodGhpcy5udXhlb0NsaWVudC51c2VyLCByb2xlLCBjb21taXR0ZWVDb2RlKTtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQoaGFzUm9sZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc2ltcGxlT2JzZXJ2YWJsZTtcclxuICB9XHJcbiAgY3JlYXRlQmxvYihmaWxlKTogYW55IHtcclxuICAgIHJldHVybiBuZXcgTnV4ZW8uQmxvYih7XHJcbiAgICAgIGNvbnRlbnQ6IGZpbGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RHVwbGljYXRlcyhwYXJhbXMgPSB7fSwgYm9keSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLm9wZXJhdGlvbignQUNfR2V0X0R1cGxpY2F0ZXMnLCB7XHJcbiAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLmVudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YCxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5wYXJhbXMocGFyYW1zKVxyXG4gICAgICAgIC5jb250ZXh0KGJvZHkpXHJcbiAgICAgICAgLmV4ZWN1dGUoKVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjaGVja0ZvclJvbGVzKCl7XHJcbiAgICB0aGlzLmlzQ3RzVXNlcigpO1xyXG4gICAgdGhpcy5pc0N0c01hbmdlcigpO1xyXG4gIH1cclxuXHJcbiAgY3RzVXNlciA9IGZhbHNlO1xyXG4gIGlzQ3RzVXNlcigpe1xyXG4gICAgdGhpcy5pc1VzZXJJblJvbGUoJ2N0c1NlY3JldGFyeScsICcnKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuY3RzVXNlciA9IGRhdGE7XHJcbiAgICB9KVxyXG4gIH1cclxuICBjdHNNYW5nZXI9IGZhbHNlO1xyXG4gIGlzQ3RzTWFuZ2VyKCl7XHJcbiAgICB0aGlzLmlzVXNlckluUm9sZSgnY3RzTWFuZ2VyJywgJycpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5jdHNNYW5nZXIgPSBkYXRhO1xyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class RolesService {
|
|
4
|
+
constructor(environment) {
|
|
5
|
+
this.environment = environment;
|
|
6
|
+
}
|
|
7
|
+
getRoleName(role, code = null) {
|
|
8
|
+
if (this.environment.RolesConstants[role]) {
|
|
9
|
+
return code
|
|
10
|
+
? this.environment.RolesConstants[role].replace('{departmentTitle}', code)
|
|
11
|
+
: `^${this.environment.RolesConstants[role].replace('{departmentTitle}', '.*.')}$`;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
console.warn(`role: ${role} does not exist in roles config`);
|
|
15
|
+
return role;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
isUserInRole(user, role, code = null) {
|
|
19
|
+
let hasRole = false;
|
|
20
|
+
const groups = user ? user.extendedGroups || user.groups : [];
|
|
21
|
+
if (groups && groups.length > 0) {
|
|
22
|
+
if (Array.isArray(role)) {
|
|
23
|
+
role.forEach((r) => {
|
|
24
|
+
if (groups.filter((item) => {
|
|
25
|
+
if (code) {
|
|
26
|
+
return ((item.name || item) === this.getRoleName(r, code));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const regex = new RegExp(this.getRoleName(r));
|
|
30
|
+
return regex.test(item.name || item);
|
|
31
|
+
}
|
|
32
|
+
}).length > 0) {
|
|
33
|
+
hasRole = true;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
hasRole =
|
|
40
|
+
groups.filter((item) => {
|
|
41
|
+
if (code) {
|
|
42
|
+
return ((item.name || item) === this.getRoleName(role, code));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const regex = new RegExp(this.getRoleName(role));
|
|
46
|
+
return regex.test(item.name || item);
|
|
47
|
+
}
|
|
48
|
+
}).length > 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return hasRole;
|
|
52
|
+
}
|
|
53
|
+
getUserRoleName(user, code) {
|
|
54
|
+
let found = null;
|
|
55
|
+
const groups = user ? user.extendedGroups || user.groups : [];
|
|
56
|
+
if (groups && groups.length) {
|
|
57
|
+
Object.keys(this.environment.RolesConstants).forEach((key) => {
|
|
58
|
+
const roleWCode = this.environment.RolesConstants[key].replace('{departmentTitle}', code);
|
|
59
|
+
groups.forEach((group) => {
|
|
60
|
+
if (group.name || group === roleWCode) {
|
|
61
|
+
found = key;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return found;
|
|
67
|
+
}
|
|
68
|
+
isUserManagerInDepartment(user, code) {
|
|
69
|
+
let filteredRoles = Object.values(this.environment.RolesConstants).filter((role) => role.includes('{departmentTitle}'));
|
|
70
|
+
let departmentRoles = [];
|
|
71
|
+
let isUserInDepartment = false;
|
|
72
|
+
const groups = user ? user.extendedGroups || user.groups : [];
|
|
73
|
+
if (groups && groups.length) {
|
|
74
|
+
filteredRoles.forEach((key) => {
|
|
75
|
+
const roleWCode = key.replace('{departmentTitle}', code);
|
|
76
|
+
departmentRoles.push(roleWCode);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
departmentRoles = departmentRoles.filter((role) => {
|
|
80
|
+
return role.includes("Manager");
|
|
81
|
+
});
|
|
82
|
+
groups.forEach((group) => {
|
|
83
|
+
const groupName = group.name || group;
|
|
84
|
+
const departmentIsIncluded = departmentRoles.includes(groupName);
|
|
85
|
+
if (departmentIsIncluded) {
|
|
86
|
+
isUserInDepartment = true;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
return isUserInDepartment;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
RolesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: RolesService, deps: [{ token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
93
|
+
RolesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: RolesService, providedIn: 'root' });
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: RolesService, decorators: [{
|
|
95
|
+
type: Injectable,
|
|
96
|
+
args: [{
|
|
97
|
+
providedIn: 'root'
|
|
98
|
+
}]
|
|
99
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
100
|
+
type: Inject,
|
|
101
|
+
args: ['environment']
|
|
102
|
+
}] }]; } });
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL0NvcmUvc2VydmljZXMvcm9sZXMvcm9sZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLFlBQVk7SUFFdkIsWUFBMkMsV0FBVztRQUFYLGdCQUFXLEdBQVgsV0FBVyxDQUFBO0lBQUksQ0FBQztJQUUzRCxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJO1FBQzNCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsT0FBTyxJQUFJO2dCQUNULENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDO2dCQUMxRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUN0RjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksaUNBQWlDLENBQUMsQ0FBQztZQUM3RCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJO1FBQ2xDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFD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VUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHYyxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvbGVzU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudCkgeyB9XHJcblxyXG4gIGdldFJvbGVOYW1lKHJvbGUsIGNvZGUgPSBudWxsKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50LlJvbGVzQ29uc3RhbnRzW3JvbGVdKSB7XHJcbiAgICAgIHJldHVybiBjb2RlXHJcbiAgICAgICAgPyB0aGlzLmVudmlyb25tZW50LlJvbGVzQ29uc3RhbnRzW3JvbGVdLnJlcGxhY2UoJ3tkZXBhcnRtZW50VGl0bGV9JywgY29kZSlcclxuICAgICAgICA6IGBeJHt0aGlzLmVudmlyb25tZW50LlJvbGVzQ29uc3RhbnRzW3JvbGVdLnJlcGxhY2UoJ3tkZXBhcnRtZW50VGl0bGV9JywgJy4qLicpfSRgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGByb2xlOiAke3JvbGV9IGRvZXMgbm90IGV4aXN0IGluIHJvbGVzIGNvbmZpZ2ApO1xyXG4gICAgICByZXR1cm4gcm9sZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVXNlckluUm9sZSh1c2VyLCByb2xlLCBjb2RlID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGhhc1JvbGUgPSBmYWxzZTtcclxuICAgIGNvbnN0IGdyb3VwcyA9IHVzZXIgPyB1c2VyLmV4dGVuZGVkR3JvdXBzIHx8IHVzZXIuZ3JvdXBzIDogW107XHJcbiAgICBpZiAoZ3JvdXBzICYmIGdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvbGUpKSB7XHJcbiAgICAgICAgcm9sZS5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGdyb3Vwcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY29kZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0ubmFtZSB8fCBpdGVtKSA9PT0gdGhpcy5nZXRSb2xlTmFtZShyLCBjb2RlKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMuZ2V0Um9sZU5hbWUocikpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QoaXRlbS5uYW1lIHx8IGl0ZW0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkubGVuZ3RoID4gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGhhc1JvbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaGFzUm9sZSA9XHJcbiAgICAgICAgICBncm91cHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIChpdGVtLm5hbWUgfHwgaXRlbSkgPT09IHRoaXMuZ2V0Um9sZU5hbWUocm9sZSwgY29kZSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLmdldFJvbGVOYW1lKHJvbGUpKTtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChpdGVtLm5hbWUgfHwgaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLmxlbmd0aCA+IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoYXNSb2xlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclJvbGVOYW1lKHVzZXIsIGNvZGUpIHtcclxuICAgIGxldCBmb3VuZCA9IG51bGw7XHJcbiAgICBjb25zdCBncm91cHMgPSB1c2VyID8gdXNlci5leHRlbmRlZEdyb3VwcyB8fCB1c2VyLmdyb3VwcyA6IFtdO1xyXG5cclxuICAgIGlmIChncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmVudmlyb25tZW50LlJvbGVzQ29uc3RhbnRzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICBjb25zdCByb2xlV0NvZGUgPSB0aGlzLmVudmlyb25tZW50LlJvbGVzQ29uc3RhbnRzW2tleV0ucmVwbGFjZShcclxuICAgICAgICAgICd7ZGVwYXJ0bWVudFRpdGxlfScsXHJcbiAgICAgICAgICBjb2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgICAgIGlmIChncm91cC5uYW1lIHx8IGdyb3VwID09PSByb2xlV0NvZGUpIHtcclxuICAgICAgICAgICAgZm91bmQgPSBrZXk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvdW5kO1xyXG4gIH1cclxuXHJcbiAgaXNVc2VyTWFuYWdlckluRGVwYXJ0bWVudCh1c2VyLCBjb2RlKSB7XHJcbiAgICBsZXQgZmlsdGVyZWRSb2xlcyA9IE9iamVjdC52YWx1ZXModGhpcy5lbnZpcm9ubWVudC5Sb2xlc0NvbnN0YW50cykuZmlsdGVyKChyb2xlIDogYW55KSA9PlxyXG4gICAgICByb2xlLmluY2x1ZGVzKCd7ZGVwYXJ0bWVudFRpdGxlfScpXHJcbiAgICApO1xyXG4gICAgbGV0IGRlcGFydG1lbnRSb2xlcyA9IFtdO1xyXG4gICAgbGV0IGlzVXNlckluRGVwYXJ0bWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY29uc3QgZ3JvdXBzID0gdXNlciA/IHVzZXIuZXh0ZW5kZWRHcm91cHMgfHwgdXNlci5ncm91cHMgOiBbXTtcclxuICAgIGlmIChncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICBmaWx0ZXJlZFJvbGVzLmZvckVhY2goKGtleSA6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvbGVXQ29kZSA9IGtleS5yZXBsYWNlKCd7ZGVwYXJ0bWVudFRpdGxlfScsIGNvZGUpO1xyXG4gICAgICAgIGRlcGFydG1lbnRSb2xlcy5wdXNoKHJvbGVXQ29kZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZGVwYXJ0bWVudFJvbGVzID0gZGVwYXJ0bWVudFJvbGVzLmZpbHRlcigocm9sZTpzdHJpbmcpID0+IHtcclxuICAgICAgcmV0dXJuIHJvbGUuaW5jbHVkZXMoXCJNYW5hZ2VyXCIpXHJcbiAgICB9KVxyXG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIGNvbnN0IGdyb3VwTmFtZSA9IGdyb3VwLm5hbWUgfHwgZ3JvdXA7XHJcbiAgICAgIGNvbnN0IGRlcGFydG1lbnRJc0luY2x1ZGVkOiBib29sZWFuID0gZGVwYXJ0bWVudFJvbGVzLmluY2x1ZGVzKGdyb3VwTmFtZSk7XHJcbiAgICAgIGlmIChkZXBhcnRtZW50SXNJbmNsdWRlZCkge1xyXG4gICAgICAgIGlzVXNlckluRGVwYXJ0bWVudCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGlzVXNlckluRGVwYXJ0bWVudDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Observable, forkJoin, throwError, of } from 'rxjs';
|
|
3
|
+
import { ComponentTranslationModel } from '../../models/component.model';
|
|
4
|
+
import { map, catchError, retry } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
export class TranslateLoaderService {
|
|
8
|
+
constructor(http) {
|
|
9
|
+
this.http = http;
|
|
10
|
+
this.prefix = 'i18n';
|
|
11
|
+
this.suffix = '.json';
|
|
12
|
+
this.providers = [];
|
|
13
|
+
this.queue = [];
|
|
14
|
+
this.defaultLang = 'en';
|
|
15
|
+
}
|
|
16
|
+
setDefaultLang(value) {
|
|
17
|
+
this.defaultLang = value || 'en';
|
|
18
|
+
}
|
|
19
|
+
registerProvider(name, path) {
|
|
20
|
+
const registered = this.providers.find((provider) => provider.name === name);
|
|
21
|
+
if (registered) {
|
|
22
|
+
registered.path = path;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.providers.push(new ComponentTranslationModel({ name: name, path: path }));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
providerRegistered(name) {
|
|
29
|
+
return this.providers.find((x) => x.name === name) ? true : false;
|
|
30
|
+
}
|
|
31
|
+
fetchLanguageFile(lang, component, fallbackUrl) {
|
|
32
|
+
const translationUrl = fallbackUrl || `${component.path}/${this.prefix}/${lang}${this.suffix}?v=${Date.now()}`;
|
|
33
|
+
return this.http.get(translationUrl).pipe(map((res) => {
|
|
34
|
+
component.json[lang] = res;
|
|
35
|
+
}), retry(3), catchError(() => {
|
|
36
|
+
if (!fallbackUrl && lang.includes('-')) {
|
|
37
|
+
const [langId] = lang.split('-');
|
|
38
|
+
if (langId && langId !== this.defaultLang) {
|
|
39
|
+
const url = `${component.path}/${this.prefix}/${langId}${this.suffix}?v=${Date.now()}`;
|
|
40
|
+
return this.fetchLanguageFile(lang, component, url);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return throwError(`Failed to load ${translationUrl}`);
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
getComponentToFetch(lang) {
|
|
47
|
+
const observableBatch = [];
|
|
48
|
+
if (!this.queue[lang]) {
|
|
49
|
+
this.queue[lang] = [];
|
|
50
|
+
}
|
|
51
|
+
this.providers.forEach((component) => {
|
|
52
|
+
if (!this.isComponentInQueue(lang, component.name)) {
|
|
53
|
+
this.queue[lang].push(component.name);
|
|
54
|
+
observableBatch.push(this.fetchLanguageFile(lang, component));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return observableBatch;
|
|
58
|
+
}
|
|
59
|
+
init(lang) {
|
|
60
|
+
if (this.queue[lang] === undefined) {
|
|
61
|
+
this.queue[lang] = [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
isComponentInQueue(lang, name) {
|
|
65
|
+
return (this.queue[lang] || []).find((x) => x === name) ? true : false;
|
|
66
|
+
}
|
|
67
|
+
getFullTranslationJSON(lang) {
|
|
68
|
+
let result = {};
|
|
69
|
+
this.providers
|
|
70
|
+
.slice(0)
|
|
71
|
+
.sort((a, b) => {
|
|
72
|
+
if (a.name === 'app') {
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
if (b.name === 'app') {
|
|
76
|
+
return -1;
|
|
77
|
+
}
|
|
78
|
+
return a.name.localeCompare(b.name);
|
|
79
|
+
})
|
|
80
|
+
.forEach((model) => {
|
|
81
|
+
if (model.json && model.json[lang]) {
|
|
82
|
+
result = this.merge(result, model.json[lang]);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
getTranslation(lang) {
|
|
88
|
+
let hasFailures = false;
|
|
89
|
+
const batch = [
|
|
90
|
+
...this.getComponentToFetch(lang).map((observable) => {
|
|
91
|
+
return observable.pipe(catchError((error) => {
|
|
92
|
+
console.warn(error);
|
|
93
|
+
hasFailures = true;
|
|
94
|
+
return of(error);
|
|
95
|
+
}));
|
|
96
|
+
})
|
|
97
|
+
];
|
|
98
|
+
return new Observable((observer) => {
|
|
99
|
+
if (batch.length > 0) {
|
|
100
|
+
forkJoin(batch).subscribe(() => {
|
|
101
|
+
const fullTranslation = this.getFullTranslationJSON(lang);
|
|
102
|
+
if (fullTranslation) {
|
|
103
|
+
observer.next(fullTranslation);
|
|
104
|
+
}
|
|
105
|
+
if (hasFailures) {
|
|
106
|
+
observer.error('Failed to load some resources');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
observer.complete();
|
|
110
|
+
}
|
|
111
|
+
}, () => {
|
|
112
|
+
observer.error('Failed to load some resources');
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const fullTranslation = this.getFullTranslationJSON(lang);
|
|
117
|
+
if (fullTranslation) {
|
|
118
|
+
observer.next(fullTranslation);
|
|
119
|
+
observer.complete();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
merge(...objects) {
|
|
125
|
+
const result = {};
|
|
126
|
+
objects.forEach((source) => {
|
|
127
|
+
Object.keys(source).forEach((prop) => {
|
|
128
|
+
if (prop in result && Array.isArray(result[prop])) {
|
|
129
|
+
result[prop] = result[prop].concat(source[prop]);
|
|
130
|
+
}
|
|
131
|
+
else if (prop in result && typeof result[prop] === 'object') {
|
|
132
|
+
result[prop] = this.merge(result[prop], source[prop]);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
result[prop] = source[prop];
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
TranslateLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TranslateLoaderService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
143
|
+
TranslateLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TranslateLoaderService, providedIn: 'root' });
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TranslateLoaderService, decorators: [{
|
|
145
|
+
type: Injectable,
|
|
146
|
+
args: [{
|
|
147
|
+
providedIn: 'root'
|
|
148
|
+
}]
|
|
149
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvQ29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGUtbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLeEQsTUFBTSxPQUFPLHNCQUFzQjtJQVFqQyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBTjVCLFdBQU0sR0FBVyxNQUFNLENBQUM7UUFDeEIsV0FBTSxHQUFXLE9BQU8sQ0FBQztRQUN6QixjQUFTLEdBQWdDLEVBQUUsQ0FBQztRQUM1QyxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQVcsSUFBSSxDQUFDO0lBR25DLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVksRUFBRSxJQUFZO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQzdFLElBQUksVUFBVSxFQUFFO1lBQ2Qs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QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTG9hZGVyIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZvcmtKb2luLCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUcmFuc2xhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVMb2FkZXJTZXJ2aWNlIGltcGxlbWVudHMgVHJhbnNsYXRlTG9hZGVyIHtcclxuXHJcbiAgcHJpdmF0ZSBwcmVmaXg6IHN0cmluZyA9ICdpMThuJztcclxuICBwcml2YXRlIHN1ZmZpeDogc3RyaW5nID0gJy5qc29uJztcclxuICBwcml2YXRlIHByb3ZpZGVyczogQ29tcG9uZW50VHJhbnNsYXRpb25Nb2RlbFtdID0gW107XHJcbiAgcHJpdmF0ZSBxdWV1ZTogc3RyaW5nW11bXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVmYXVsdExhbmc6IHN0cmluZyA9ICdlbic7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdExhbmcodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWZhdWx0TGFuZyA9IHZhbHVlIHx8ICdlbic7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclByb3ZpZGVyKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZWdpc3RlcmVkID0gdGhpcy5wcm92aWRlcnMuZmluZCgocHJvdmlkZXIpID0+IHByb3ZpZGVyLm5hbWUgPT09IG5hbWUpO1xyXG4gICAgaWYgKHJlZ2lzdGVyZWQpIHtcclxuICAgICAgcmVnaXN0ZXJlZC5wYXRoID0gcGF0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvdmlkZXJzLnB1c2gobmV3IENvbXBvbmVudFRyYW5zbGF0aW9uTW9kZWwoeyBuYW1lOiBuYW1lLCBwYXRoOiBwYXRoIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3ZpZGVyUmVnaXN0ZXJlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnByb3ZpZGVycy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IG5hbWUpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hMYW5ndWFnZUZpbGUobGFuZzogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFRyYW5zbGF0aW9uTW9kZWwsIGZhbGxiYWNrVXJsPzogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0cmFuc2xhdGlvblVybCA9IGZhbGxiYWNrVXJsIHx8IGAke2NvbXBvbmVudC5wYXRofS8ke3RoaXMucHJlZml4fS8ke2xhbmd9JHt0aGlzLnN1ZmZpeH0/dj0ke0RhdGUubm93KCl9YDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0cmFuc2xhdGlvblVybCkucGlwZShcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbXBvbmVudC5qc29uW2xhbmddID0gcmVzO1xyXG4gICAgICB9KSxcclxuICAgICAgcmV0cnkoMyksXHJcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xyXG4gICAgICAgIGlmICghZmFsbGJhY2tVcmwgJiYgbGFuZy5pbmNsdWRlcygnLScpKSB7XHJcbiAgICAgICAgICBjb25zdCBbbGFuZ0lkXSA9IGxhbmcuc3BsaXQoJy0nKTtcclxuXHJcbiAgICAgICAgICBpZiAobGFuZ0lkICYmIGxhbmdJZCAhPT0gdGhpcy5kZWZhdWx0TGFuZykge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBgJHtjb21wb25lbnQucGF0aH0vJHt0aGlzLnByZWZpeH0vJHtsYW5nSWR9JHt0aGlzLnN1ZmZpeH0/dj0ke0RhdGUubm93KCl9YDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoTGFuZ3VhZ2VGaWxlKGxhbmcsIGNvbXBvbmVudCwgdXJsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoYEZhaWxlZCB0byBsb2FkICR7dHJhbnNsYXRpb25Vcmx9YCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50VG9GZXRjaChsYW5nOiBzdHJpbmcpOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+IHtcclxuICAgIGNvbnN0IG9ic2VydmFibGVCYXRjaCA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnF1ZXVlW2xhbmddKSB7XHJcbiAgICAgIHRoaXMucXVldWVbbGFuZ10gPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvdmlkZXJzLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmlzQ29tcG9uZW50SW5RdWV1ZShsYW5nLCBjb21wb25lbnQubmFtZSkpIHtcclxuICAgICAgICB0aGlzLnF1ZXVlW2xhbmddLnB1c2goY29tcG9uZW50Lm5hbWUpO1xyXG4gICAgICAgIG9ic2VydmFibGVCYXRjaC5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5mZXRjaExhbmd1YWdlRmlsZShsYW5nLCBjb21wb25lbnQpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG9ic2VydmFibGVCYXRjaDtcclxuICB9XHJcblxyXG4gIGluaXQobGFuZzogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5xdWV1ZVtsYW5nXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucXVldWVbbGFuZ10gPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQ29tcG9uZW50SW5RdWV1ZShsYW5nOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuICh0aGlzLnF1ZXVlW2xhbmddIHx8IFtdKS5maW5kKCh4KSA9PiB4ID09PSBuYW1lKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEZ1bGxUcmFuc2xhdGlvbkpTT04obGFuZzogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCByZXN1bHQgPSB7fTtcclxuXHJcbiAgICB0aGlzLnByb3ZpZGVyc1xyXG4gICAgICAuc2xpY2UoMClcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoYS5uYW1lID09PSAnYXBwJykge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChiLm5hbWUgPT09ICdhcHAnKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xyXG4gICAgICB9KVxyXG4gICAgICAuZm9yRWFjaCgobW9kZWwpID0+IHtcclxuICAgICAgICBpZiAobW9kZWwuanNvbiAmJiBtb2RlbC5qc29uW2xhbmddKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLm1lcmdlKHJlc3VsdCwgbW9kZWwuanNvbltsYW5nXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBoYXNGYWlsdXJlcyA9IGZhbHNlO1xyXG4gICAgY29uc3QgYmF0Y2ggPSBbXHJcbiAgICAgIC4uLnRoaXMuZ2V0Q29tcG9uZW50VG9GZXRjaChsYW5nKS5tYXAoKG9ic2VydmFibGUpID0+IHtcclxuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcclxuICAgICAgICAgICAgaGFzRmFpbHVyZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcblxyXG4gICAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvcmtKb2luKGJhdGNoKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxUcmFuc2xhdGlvbiA9IHRoaXMuZ2V0RnVsbFRyYW5zbGF0aW9uSlNPTihsYW5nKTtcclxuICAgICAgICAgICAgaWYgKGZ1bGxUcmFuc2xhdGlvbikge1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZnVsbFRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFzRmFpbHVyZXMpIHtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcignRmFpbGVkIHRvIGxvYWQgc29tZSByZXNvdXJjZXMnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcignRmFpbGVkIHRvIGxvYWQgc29tZSByZXNvdXJjZXMnKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxUcmFuc2xhdGlvbiA9IHRoaXMuZ2V0RnVsbFRyYW5zbGF0aW9uSlNPTihsYW5nKTtcclxuICAgICAgICBpZiAoZnVsbFRyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGZ1bGxUcmFuc2xhdGlvbik7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtZXJnZSguLi5vYmplY3RzKTogYW55IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuICAgIG9iamVjdHMuZm9yRWFjaCgoc291cmNlKSA9PiB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaCgocHJvcCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wIGluIHJlc3VsdCAmJiBBcnJheS5pc0FycmF5KHJlc3VsdFtwcm9wXSkpIHtcclxuICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IHJlc3VsdFtwcm9wXS5jb25jYXQoc291cmNlW3Byb3BdKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW4gcmVzdWx0ICYmIHR5cGVvZiByZXN1bHRbcHJvcF0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICByZXN1bHRbcHJvcF0gPSB0aGlzLm1lcmdlKHJlc3VsdFtwcm9wXSwgc291cmNlW3Byb3BdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0W3Byb3BdID0gc291cmNlW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { Inject, Injectable, InjectionToken, Optional, } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, forkJoin, from } from 'rxjs';
|
|
3
|
+
import { UserPreferenceValues, } from '../user/user-preferences.service';
|
|
4
|
+
import { Lang } from '../../enums/language.enum';
|
|
5
|
+
import { catchError, map } from 'rxjs/operators';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngx-translate/core";
|
|
8
|
+
import * as i2 from "../localStorag/local-storag.service";
|
|
9
|
+
import * as i3 from "../user/user-preferences.service";
|
|
10
|
+
import * as i4 from "../nuxeo/nuxeo.service";
|
|
11
|
+
export const TRANSLATION_PROVIDER = new InjectionToken('Injection token for translation providers.');
|
|
12
|
+
export class TranslationService {
|
|
13
|
+
constructor(translate, rendererFactory, localStorage, userPreferencesService, nuxeoService, environment, providers) {
|
|
14
|
+
this.translate = translate;
|
|
15
|
+
this.rendererFactory = rendererFactory;
|
|
16
|
+
this.localStorage = localStorage;
|
|
17
|
+
this.nuxeoService = nuxeoService;
|
|
18
|
+
this.environment = environment;
|
|
19
|
+
this.isArabic = new BehaviorSubject(false);
|
|
20
|
+
this.isArabic$ = this.isArabic.asObservable();
|
|
21
|
+
this.customLoader = this.translate.currentLoader;
|
|
22
|
+
this.renderer = rendererFactory.createRenderer(null, null);
|
|
23
|
+
this.defaultLang = 'en';
|
|
24
|
+
translate.setDefaultLang(this.defaultLang);
|
|
25
|
+
this.customLoader.setDefaultLang(this.defaultLang);
|
|
26
|
+
if (providers && providers.length > 0) {
|
|
27
|
+
for (const provider of providers) {
|
|
28
|
+
this.addTranslationFolder(provider.name, provider.source);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
userPreferencesService
|
|
32
|
+
.select(UserPreferenceValues.Locale)
|
|
33
|
+
.subscribe((locale) => {
|
|
34
|
+
if (locale) {
|
|
35
|
+
this.userLang = locale.split('-')[0];
|
|
36
|
+
}
|
|
37
|
+
if (this.userLang) {
|
|
38
|
+
this.loadTranslation(this.userLang, this.defaultLang);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.loadTranslation(this.defaultLang);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Adds a new folder of translation source files.
|
|
47
|
+
* @param name Name for the translation provider
|
|
48
|
+
* @param path Path to the folder
|
|
49
|
+
*/
|
|
50
|
+
addTranslationFolder(name = '', path = '') {
|
|
51
|
+
if (!this.customLoader.providerRegistered(name)) {
|
|
52
|
+
this.customLoader.registerProvider(name, path);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Loads a translation file.
|
|
57
|
+
* @param lang Language code for the language to load
|
|
58
|
+
* @param fallback Language code to fall back to if the first one was unavailable
|
|
59
|
+
*/
|
|
60
|
+
loadTranslation(lang, fallback) {
|
|
61
|
+
if (lang === Lang.Arabic) {
|
|
62
|
+
this.renderer.addClass(document.body, 'rtl');
|
|
63
|
+
this.isArabic.next(true);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.renderer.removeClass(document.body, 'rtl');
|
|
67
|
+
this.isArabic.next(false);
|
|
68
|
+
}
|
|
69
|
+
const arabicFile$ = this.getOrCreateTranslationFile('ar');
|
|
70
|
+
const englishFile$ = this.getOrCreateTranslationFile('en');
|
|
71
|
+
forkJoin([
|
|
72
|
+
arabicFile$,
|
|
73
|
+
englishFile$,
|
|
74
|
+
this.translate.getTranslation(lang),
|
|
75
|
+
]).subscribe((res) => {
|
|
76
|
+
this.arabicFile = res[0];
|
|
77
|
+
this.englishFile = res[1];
|
|
78
|
+
this.translate.use(lang);
|
|
79
|
+
let ArorEnFile = lang === 'en'
|
|
80
|
+
? JSON.parse(res[1].properties['note:note'])
|
|
81
|
+
: JSON.parse(res[0].properties['note:note']);
|
|
82
|
+
this.translate.setTranslation(this.translate.currentLang, Object.assign({}, ArorEnFile), true);
|
|
83
|
+
this.onTranslationChanged(lang);
|
|
84
|
+
}, () => {
|
|
85
|
+
if (fallback && fallback !== lang) {
|
|
86
|
+
this.loadTranslation(fallback);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Triggers a notification callback when the translation language changes.
|
|
92
|
+
* @param lang The new language code
|
|
93
|
+
*/
|
|
94
|
+
onTranslationChanged(lang) {
|
|
95
|
+
this.translate.onTranslationChange.next({
|
|
96
|
+
lang: lang,
|
|
97
|
+
translations: this.customLoader.getFullTranslationJSON(lang),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Sets the target language for translations.
|
|
102
|
+
* @param lang Code name for the language
|
|
103
|
+
* @returns Translations available for the language
|
|
104
|
+
*/
|
|
105
|
+
use(lang) {
|
|
106
|
+
this.customLoader.init(lang);
|
|
107
|
+
return this.translate.use(lang);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Gets the translation for the supplied key.
|
|
111
|
+
* @param key Key to translate
|
|
112
|
+
* @param interpolateParams String(s) to be interpolated into the main message
|
|
113
|
+
* @returns Translated text
|
|
114
|
+
*/
|
|
115
|
+
get(key, interpolateParams) {
|
|
116
|
+
return this.translate.get(key, interpolateParams);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Directly returns the translation for the supplied key.
|
|
120
|
+
* @param key Key to translate
|
|
121
|
+
* @param interpolateParams String(s) to be interpolated into the main message
|
|
122
|
+
* @returns Translated text
|
|
123
|
+
*/
|
|
124
|
+
instant(key, interpolateParams) {
|
|
125
|
+
return key ? this.translate.instant(key, interpolateParams) : '';
|
|
126
|
+
}
|
|
127
|
+
getOrCreateTranslationFile(lang) {
|
|
128
|
+
return from(this.nuxeoService.nuxeoClient
|
|
129
|
+
.operation('AC_UA_Translation_GetOrCreate', {
|
|
130
|
+
url: `${this.environment.nuxeo}${this.environment.customAutomation}`,
|
|
131
|
+
})
|
|
132
|
+
.params({ language: lang })
|
|
133
|
+
.execute({
|
|
134
|
+
headers: {
|
|
135
|
+
properties: '*',
|
|
136
|
+
},
|
|
137
|
+
})).pipe(catchError((err) => {
|
|
138
|
+
console.log(err);
|
|
139
|
+
throw err;
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
updateTranslationFile(doc, params = {}) {
|
|
143
|
+
return from(this.nuxeoService.nuxeoClient
|
|
144
|
+
.repository()
|
|
145
|
+
.headers({
|
|
146
|
+
properties: '*',
|
|
147
|
+
})
|
|
148
|
+
.update(doc, params)).pipe(map((data) => {
|
|
149
|
+
return data;
|
|
150
|
+
}), catchError((err) => {
|
|
151
|
+
throw err;
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
TranslationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TranslationService, deps: [{ token: i1.TranslateService }, { token: i0.RendererFactory2 }, { token: i2.LocalStoragService }, { token: i3.UserPreferencesService }, { token: i4.NuxeoService }, { token: 'environment' }, { token: TRANSLATION_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
156
|
+
TranslationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TranslationService, providedIn: 'root' });
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TranslationService, decorators: [{
|
|
158
|
+
type: Injectable,
|
|
159
|
+
args: [{
|
|
160
|
+
providedIn: 'root',
|
|
161
|
+
}]
|
|
162
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i0.RendererFactory2 }, { type: i2.LocalStoragService }, { type: i3.UserPreferencesService }, { type: i4.NuxeoService }, { type: undefined, decorators: [{
|
|
163
|
+
type: Inject,
|
|
164
|
+
args: ['environment']
|
|
165
|
+
}] }, { type: undefined, decorators: [{
|
|
166
|
+
type: Optional
|
|
167
|
+
}, {
|
|
168
|
+
type: Inject,
|
|
169
|
+
args: [TRANSLATION_PROVIDER]
|
|
170
|
+
}] }]; } });
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL0NvcmUvc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxHQUdULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUVuRSxPQUFPLEVBRUwsb0JBQW9CLEdBQ3JCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWpELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUVqRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FDcEQsNENBQTRDLENBQzdDLENBQUM7QUFVRixNQUFNLE9BQU8sa0JBQWtCO0lBVTdCLFlBQ1MsU0FBMkIsRUFDMUIsZUFBaUMsRUFDakMsWUFBZ0MsRUFDeEMsc0JBQThDLEVBQ3RDLFlBQTBCLEVBQ0gsV0FBVyxFQUNBLFNBQWdDO1FBTm5FLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNqQyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFFaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDSCxnQkFBVyxHQUFYLFdBQVcsQ0FBQTtRQVI1QyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDL0MsY0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7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Q0FBQztRQUNkLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OytHQXZMVSxrQkFBa0Isc0xBZ0JuQixhQUFhLGFBQ0Qsb0JBQW9CO21IQWpCL0Isa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBaUJJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBJbmplY3QsXHJcbiAgSW5qZWN0YWJsZSxcclxuICBJbmplY3Rpb25Ub2tlbixcclxuICBPcHRpb25hbCxcclxuICBSZW5kZXJlcjIsXHJcbiAgUmVuZGVyZXJGYWN0b3J5MixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxvYWRlclNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0ZS1sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgVXNlclByZWZlcmVuY2VzU2VydmljZSxcclxuICBVc2VyUHJlZmVyZW5jZVZhbHVlcyxcclxufSBmcm9tICcuLi91c2VyL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnU2VydmljZSB9IGZyb20gJy4uL2xvY2FsU3RvcmFnL2xvY2FsLXN0b3JhZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGFuZyB9IGZyb20gJy4uLy4uL2VudW1zL2xhbmd1YWdlLmVudW0nO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRSQU5TTEFUSU9OX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuKFxyXG4gICdJbmplY3Rpb24gdG9rZW4gZm9yIHRyYW5zbGF0aW9uIHByb3ZpZGVycy4nXHJcbik7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uUHJvdmlkZXIge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBzb3VyY2U6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uU2VydmljZSB7XHJcbiAgcHVibGljIGFyYWJpY0ZpbGU7XHJcbiAgcHVibGljIGVuZ2xpc2hGaWxlO1xyXG4gIGRlZmF1bHRMYW5nOiBzdHJpbmc7XHJcbiAgdXNlckxhbmc6IHN0cmluZztcclxuICBjdXN0b21Mb2FkZXI6IFRyYW5zbGF0ZUxvYWRlclNlcnZpY2U7XHJcbiAgbGFuZzogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMjtcclxuICBpc0FyYWJpYyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzQXJhYmljJCA9IHRoaXMuaXNBcmFiaWMuYXNPYnNlcnZhYmxlKCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIsXHJcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdTZXJ2aWNlLFxyXG4gICAgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcclxuICAgIHByaXZhdGUgbnV4ZW9TZXJ2aWNlOiBOdXhlb1NlcnZpY2UsIFxyXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChUUkFOU0xBVElPTl9QUk9WSURFUikgcHJvdmlkZXJzOiBUcmFuc2xhdGlvblByb3ZpZGVyW11cclxuICApIHtcclxuICAgIHRoaXMuY3VzdG9tTG9hZGVyID0gPFRyYW5zbGF0ZUxvYWRlclNlcnZpY2U+dGhpcy50cmFuc2xhdGUuY3VycmVudExvYWRlcjtcclxuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0TGFuZyA9ICdlbic7XHJcbiAgICB0cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5kZWZhdWx0TGFuZyk7XHJcbiAgICB0aGlzLmN1c3RvbUxvYWRlci5zZXREZWZhdWx0TGFuZyh0aGlzLmRlZmF1bHRMYW5nKTtcclxuXHJcbiAgICBpZiAocHJvdmlkZXJzICYmIHByb3ZpZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgcHJvdmlkZXJzKSB7XHJcbiAgICAgICAgdGhpcy5hZGRUcmFuc2xhdGlvbkZvbGRlcihwcm92aWRlci5uYW1lLCBwcm92aWRlci5zb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXHJcbiAgICAgIC5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuTG9jYWxlKVxyXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGUpID0+IHtcclxuICAgICAgICBpZiAobG9jYWxlKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJMYW5nID0gbG9jYWxlLnNwbGl0KCctJylbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnVzZXJMYW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRUcmFuc2xhdGlvbih0aGlzLnVzZXJMYW5nLCB0aGlzLmRlZmF1bHRMYW5nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkVHJhbnNsYXRpb24odGhpcy5kZWZhdWx0TGFuZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuZXcgZm9sZGVyIG9mIHRyYW5zbGF0aW9uIHNvdXJjZSBmaWxlcy5cclxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIGZvciB0aGUgdHJhbnNsYXRpb24gcHJvdmlkZXJcclxuICAgKiBAcGFyYW0gcGF0aCBQYXRoIHRvIHRoZSBmb2xkZXJcclxuICAgKi9cclxuICBhZGRUcmFuc2xhdGlvbkZvbGRlcihuYW1lOiBzdHJpbmcgPSAnJywgcGF0aDogc3RyaW5nID0gJycpIHtcclxuICAgIGlmICghdGhpcy5jdXN0b21Mb2FkZXIucHJvdmlkZXJSZWdpc3RlcmVkKG5hbWUpKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tTG9hZGVyLnJlZ2lzdGVyUHJvdmlkZXIobmFtZSwgcGF0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkcyBhIHRyYW5zbGF0aW9uIGZpbGUuXHJcbiAgICogQHBhcmFtIGxhbmcgTGFuZ3VhZ2UgY29kZSBmb3IgdGhlIGxhbmd1YWdlIHRvIGxvYWRcclxuICAgKiBAcGFyYW0gZmFsbGJhY2sgTGFuZ3VhZ2UgY29kZSB0byBmYWxsIGJhY2sgdG8gaWYgdGhlIGZpcnN0IG9uZSB3YXMgdW5hdmFpbGFibGVcclxuICAgKi9cclxuICBsb2FkVHJhbnNsYXRpb24obGFuZzogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZykge1xyXG4gICAgaWYgKGxhbmcgPT09IExhbmcuQXJhYmljKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ3J0bCcpO1xyXG4gICAgICB0aGlzLmlzQXJhYmljLm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksICdydGwnKTtcclxuICAgICAgdGhpcy5pc0FyYWJpYy5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFyYWJpY0ZpbGUkID0gdGhpcy5nZXRPckNyZWF0ZVRyYW5zbGF0aW9uRmlsZSgnYXInKTtcclxuICAgIGNvbnN0IGVuZ2xpc2hGaWxlJCA9IHRoaXMuZ2V0T3JDcmVhdGVUcmFuc2xhdGlvbkZpbGUoJ2VuJyk7XHJcblxyXG4gICAgZm9ya0pvaW4oW1xyXG4gICAgICBhcmFiaWNGaWxlJCxcclxuICAgICAgZW5nbGlzaEZpbGUkLFxyXG4gICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRUcmFuc2xhdGlvbihsYW5nKSxcclxuICAgIF0pLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcmFiaWNGaWxlID0gcmVzWzBdO1xyXG4gICAgICAgIHRoaXMuZW5nbGlzaEZpbGUgPSByZXNbMV07XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xyXG4gICAgICAgIGxldCBBcm9yRW5GaWxlID1cclxuICAgICAgICAgIGxhbmcgPT09ICdlbidcclxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHJlc1sxXS5wcm9wZXJ0aWVzWydub3RlOm5vdGUnXSlcclxuICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJlc1swXS5wcm9wZXJ0aWVzWydub3RlOm5vdGUnXSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0VHJhbnNsYXRpb24oXHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyxcclxuICAgICAgICAgIHsgLi4uQXJvckVuRmlsZSB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMub25UcmFuc2xhdGlvbkNoYW5nZWQobGFuZyk7XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICBpZiAoZmFsbGJhY2sgJiYgZmFsbGJhY2sgIT09IGxhbmcpIHtcclxuICAgICAgICAgIHRoaXMubG9hZFRyYW5zbGF0aW9uKGZhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VycyBhIG5vdGlmaWNhdGlvbiBjYWxsYmFjayB3aGVuIHRoZSB0cmFuc2xhdGlvbiBsYW5ndWFnZSBjaGFuZ2VzLlxyXG4gICAqIEBwYXJhbSBsYW5nIFRoZSBuZXcgbGFuZ3VhZ2UgY29kZVxyXG4gICAqL1xyXG4gIG9uVHJhbnNsYXRpb25DaGFuZ2VkKGxhbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGUub25UcmFuc2xhdGlvbkNoYW5nZS5uZXh0KHtcclxuICAgICAgbGFuZzogbGFuZyxcclxuICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmN1c3RvbUxvYWRlci5nZXRGdWxsVHJhbnNsYXRpb25KU09OKGxhbmcpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB0YXJnZXQgbGFuZ3VhZ2UgZm9yIHRyYW5zbGF0aW9ucy5cclxuICAgKiBAcGFyYW0gbGFuZyBDb2RlIG5hbWUgZm9yIHRoZSBsYW5ndWFnZVxyXG4gICAqIEByZXR1cm5zIFRyYW5zbGF0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBsYW5ndWFnZVxyXG4gICAqL1xyXG4gIHVzZShsYW5nOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5jdXN0b21Mb2FkZXIuaW5pdChsYW5nKTtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0cmFuc2xhdGlvbiBmb3IgdGhlIHN1cHBsaWVkIGtleS5cclxuICAgKiBAcGFyYW0ga2V5IEtleSB0byB0cmFuc2xhdGVcclxuICAgKiBAcGFyYW0gaW50ZXJwb2xhdGVQYXJhbXMgU3RyaW5nKHMpIHRvIGJlIGludGVycG9sYXRlZCBpbnRvIHRoZSBtYWluIG1lc3NhZ2VcclxuICAgKiBAcmV0dXJucyBUcmFuc2xhdGVkIHRleHRcclxuICAgKi9cclxuICBnZXQoXHJcbiAgICBrZXk6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sXHJcbiAgICBpbnRlcnBvbGF0ZVBhcmFtcz86IE9iamVjdFxyXG4gICk6IE9ic2VydmFibGU8c3RyaW5nIHwgYW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGtleSwgaW50ZXJwb2xhdGVQYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlyZWN0bHkgcmV0dXJucyB0aGUgdHJhbnNsYXRpb24gZm9yIHRoZSBzdXBwbGllZCBrZXkuXHJcbiAgICogQHBhcmFtIGtleSBLZXkgdG8gdHJhbnNsYXRlXHJcbiAgICogQHBhcmFtIGludGVycG9sYXRlUGFyYW1zIFN0cmluZyhzKSB0byBiZSBpbnRlcnBvbGF0ZWQgaW50byB0aGUgbWFpbiBtZXNzYWdlXHJcbiAgICogQHJldHVybnMgVHJhbnNsYXRlZCB0ZXh0XHJcbiAgICovXHJcbiAgaW5zdGFudChcclxuICAgIGtleTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcclxuICAgIGludGVycG9sYXRlUGFyYW1zPzogT2JqZWN0XHJcbiAgKTogc3RyaW5nIHwgYW55IHtcclxuICAgIHJldHVybiBrZXkgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGtleSwgaW50ZXJwb2xhdGVQYXJhbXMpIDogJyc7XHJcbiAgfVxyXG5cclxuICBnZXRPckNyZWF0ZVRyYW5zbGF0aW9uRmlsZShsYW5nKSB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKCdBQ19VQV9UcmFuc2xhdGlvbl9HZXRPckNyZWF0ZScsIHtcclxuICAgICAgICAgIHVybDogYCR7dGhpcy5lbnZpcm9ubWVudC5udXhlb30ke3RoaXMuZW52aXJvbm1lbnQuY3VzdG9tQXV0b21hdGlvbn1gLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBhcmFtcyh7IGxhbmd1YWdlOiBsYW5nIH0pXHJcbiAgICAgICAgLmV4ZWN1dGUoe1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiAnKicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgdXBkYXRlVHJhbnNsYXRpb25GaWxlKGRvYywgcGFyYW1zID0ge30pIHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5yZXBvc2l0b3J5KClcclxuICAgICAgICAuaGVhZGVycyh7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiAnKicsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAudXBkYXRlKGRvYywgcGFyYW1zKVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|