{"version":3,"file":"js/app.js","mappings":"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","sources":["webpack://sbs.vison/./Scripts/ts/App/Areas/ async-weak ^\\.\\/.*\\/Dialogs\\/.*\\.vue$ namespace object","webpack://sbs.vison/./node_modules/@peculiar/certificates-viewer/dist/esm/ lazy ^\\.\\/.*\\.entry\\.js$ include: \\.entry\\.js$ exclude: \\.system\\.entry\\.js$ namespace object","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/PanoramaPreview.vue?ff91","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/PanoramaPreview.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/PanoramaPreview.vue.ts?a01e","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/PanoramaPreview.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPanoramaBreadcrumb.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPanoramaBreadcrumb.vue?f793","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPanoramaBreadcrumb.vue.ts?a649","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPanoramaBreadcrumb.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Public/Components/CookieConsent.vue?6f84","webpack://sbs.vison/./Scripts/ts/App/Areas/Public/Components/CookieConsent.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Public/Components/CookieConsent.vue.ts?7a87","webpack://sbs.vison/./Scripts/ts/App/Areas/Public/Components/CookieConsent.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoPasswordDialog.vue?8bba","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoPasswordDialog.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoPasswordDialog.vue.ts?476c","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoPasswordDialog.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoSignInDialog.vue?fd3c","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoSignInDialog.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoSignInDialog.vue.ts?5716","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoSignInDialog.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/ExploreMap.vue?2652","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/ExploreMap.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/ExploreMap.vue.ts?bd9e","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/ExploreMap.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoErrorsList.vue?e2c9","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoErrorsList.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoErrorsList.vue.ts?3c39","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoErrorsList.vue","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/CancelButton.vue?ce73","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/CancelButton.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/CancelButton.vue.ts?5389","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/CancelButton.vue","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/OkButton.vue?5257","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/OkButton.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/OkButton.vue.ts?615c","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/OkButton.vue","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/DefaultDialog.vue?1a83","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/NoButton.vue?4e9a","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/NoButton.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/NoButton.vue.ts?d1f4","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/NoButton.vue","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/YesButton.vue?7b27","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/YesButton.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/YesButton.vue.ts?2f77","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/YesButton.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/ModalDialog/DialogTemplateRenderless.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/DefaultDialog.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/DefaultDialog.vue.ts?a2ab","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/DefaultDialog.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/ItemPresenter.vue?f1ab","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/ItemPresenter.vue.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/ItemPresenter.vue.ts?a14e","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/ItemPresenter.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/Toggle.vue?3058","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/Toggle.vue.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/Toggle.vue.ts?ca4f","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/Toggle.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XGrid.vue.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XGrid.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XGrid.vue.ts?0a07","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XMediaPlayer.vue?f127","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XMediaPlayer.vue.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XMediaPlayer.vue.ts?f529","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XMediaPlayer.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/GridItem.vue.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/GridItem.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/GridItem.vue.ts?ed46","webpack://sbs.vison/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://sbs.vison/./Scripts/ts/Api/UserPermissions.ts","webpack://sbs.vison/./Scripts/ts/Api/User.ts","webpack://sbs.vison/./Scripts/ts/Api/AppContext.ts","webpack://sbs.vison/./Scripts/ts/Api/Contracts/Dtos/GeoRouting/IGeoRoutingResultDto.ts","webpack://sbs.vison/./Scripts/ts/Api/Contracts/Dtos/index.ts","webpack://sbs.vison/./Scripts/ts/Api/Dto/Drive.ts","webpack://sbs.vison/./Scripts/ts/Api/Dto/Exception.ts","webpack://sbs.vison/./Scripts/ts/Api/Dto/Project.ts","webpack://sbs.vison/./Scripts/ts/Api/Dto/QueryResult.ts","webpack://sbs.vison/./Scripts/ts/Api/Enums/FileSelectionType.ts","webpack://sbs.vison/./Scripts/ts/Api/Enums/MenuStateType.ts","webpack://sbs.vison/./Scripts/ts/Api/Enums/Permissions.ts","webpack://sbs.vison/./Scripts/ts/Api/Enums/SocialNetworks.ts","webpack://sbs.vison/./Scripts/ts/Api/Enums/ViewerStateType.ts","webpack://sbs.vison/./Scripts/ts/Api/ExploreService.ts","webpack://sbs.vison/./Scripts/ts/Api/FileUploader.ts","webpack://sbs.vison/./Scripts/ts/Api/HttpClient.ts","webpack://sbs.vison/./Scripts/ts/Api/LocalizerService.ts","webpack://sbs.vison/./Scripts/ts/Api/Routes.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/PlatformService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/UriService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/AccountService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/AuditService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/AuthenticationService.ts","webpack://sbs.vison/./Scripts/ts/Api/Dto/Drive/ViewModels/SearchFilesViewModel.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/DriveService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/IconService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/IdentityService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/JsonSchemaService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/PasswordValidationService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/PdfService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/ProjectService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/SettingService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/SmartObjectService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/TagService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/VideoService.ts","webpack://sbs.vison/./Scripts/ts/Api/Services/WorkerService.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/BasePage.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Standalone/FileStorageHelper.ts","webpack://sbs.vison/./Scripts/ts/App/Helpers/AssetHelper.ts","webpack://sbs.vison/./Scripts/ts/App/Helpers/CoordinatesHelper.ts","webpack://sbs.vison/./Scripts/ts/Api/Infrastructure/ApiExceptionFactory.ts","webpack://sbs.vison/./Scripts/ts/Api/Infrastructure/ResponseHandler.ts","webpack://sbs.vison/./Scripts/ts/App/Services/VisonHttpClient.ts","webpack://sbs.vison/./Scripts/ts/Framework/Extensions/Collections.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/DialogService.ts","webpack://sbs.vison/./Scripts/ts/App/Services/IconProvider.ts","webpack://sbs.vison/./Scripts/ts/App/Services/TokenValidator.ts","webpack://sbs.vison/./Scripts/ts/App/Services/UriServices/UriServiceReactive.ts","webpack://sbs.vison/./Scripts/ts/App/Services/UriServices/VisonUriService.ts","webpack://sbs.vison/./Scripts/ts/App/Inversify.config.ts","webpack://sbs.vison/./Scripts/ts/App/Mixins/ShowToastMixin.ts","webpack://sbs.vison/./Scripts/ts/App/Plugins/vuetify.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/BaseDialogBehavior.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/Buttons/BaseButton.ts","webpack://sbs.vison/./Scripts/ts/App/Services/DialogService/Components/_VoDialogBase.ts","webpack://sbs.vison/./Scripts/ts/App/Services/UriServices/AbsoluteUriBehaviors.ts","webpack://sbs.vison/./Scripts/ts/App/injectTypes.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Tagger.vue?a73d","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Tagger.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Tagger.vue.ts?7222","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Tagger.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Drive/DataTemplates/UploadFileEntry.vue?cd54","webpack://sbs.vison/./Scripts/ts/App/Areas/Drive/DataTemplates/UploadFileEntry.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Drive/DataTemplates/UploadFileEntry.vue.ts?3708","webpack://sbs.vison/./Scripts/ts/App/Areas/Drive/DataTemplates/UploadFileEntry.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Project/Components/Compass.vue?5cf2","webpack://sbs.vison/./Scripts/ts/App/Areas/Project/Components/Compass.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Project/Components/Compass.vue.ts?ddc8","webpack://sbs.vison/./Scripts/ts/App/Areas/Project/Components/Compass.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FilePreview.vue?b47b","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FilePreview.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/SbsDrawer.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FilePreview.vue.ts?d552","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FilePreview.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/SbsDrawer.vue?fbe6","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/SbsDrawer.vue.ts?9f51","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/SbsDrawer.vue","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/WrapPanel.vue?86f4","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/WrapPanel.vue.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/WrapPanel.vue.ts?e06b","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/WrapPanel.vue","webpack://sbs.vison/./Scripts/ts/App/Plugins/sbs.ts","webpack://sbs.vison/./Scripts/ts/Api/Dto/PointCloud.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Standalone/BinaryScanReader.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Standalone/FetchFileReader.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Standalone/StandaloneWrapper.ts","webpack://sbs.vison/./Scripts/ts/App/Plugins/dockspawn.ts","webpack://sbs.vison/./Scripts/ts/App/main.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XView/Core/Configurations.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XView/Core/Coordinates.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XView/Core/Icons.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Controls/XView/Core/TooltipStyle.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/ModalDialog/ModalDialog.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/Panel.Commons.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/mixins/GridItem.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/mixins/ObservableObject.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/UIElement.ts","webpack://sbs.vison/./Scripts/ts/Framework/Extensions/CoreJsExtensions.ts","webpack://sbs.vison/./Scripts/ts/Framework/Helpers/CookieHelper.ts","webpack://sbs.vison/./Scripts/ts/Framework/Helpers/EnumHelper.ts","webpack://sbs.vison/./Scripts/ts/Framework/Helpers/FileHelper.ts","webpack://sbs.vison/./Scripts/ts/Framework/Helpers/MathHelper.ts","webpack://sbs.vison/./Scripts/ts/Framework/Helpers/UrlHelper.ts"],"sourcesContent":["var map = {\n\t\"./AdministratorPortal/DomainNameSystem/Dialogs/AddDomainNameSystemDialog.vue\": 81542,\n\t\"./AdministratorPortal/DomainNameSystem/Dialogs/ConfirmDeleteModal.vue\": 37350,\n\t\"./AdministratorPortal/DomainNameSystem/Dialogs/EditDomainNameSystemDialog.vue\": 18153,\n\t\"./AdministratorPortal/GeneralSettings/Dialogs/ConfirmChangeExploreMapTypeDialog.vue\": 71910,\n\t\"./AdministratorPortal/Groups/Dialogs/AddGroupDialog.vue\": 42543,\n\t\"./AdministratorPortal/Groups/Dialogs/ConfirmDeleteDialog.vue\": 96895,\n\t\"./AdministratorPortal/Groups/Dialogs/ConfirmDeleteFileShareDialog.vue\": 28033,\n\t\"./AdministratorPortal/Groups/Dialogs/ConfirmDeleteUserDialog.vue\": 53843,\n\t\"./AdministratorPortal/Groups/Dialogs/EditGroupDialog.vue\": 18255,\n\t\"./AdministratorPortal/IdentityProviders/Dialogs/AddIdentityProviderDialog.vue\": 56009,\n\t\"./AdministratorPortal/IdentityProviders/Dialogs/ConfirmDeleteModal.vue\": 87628,\n\t\"./AdministratorPortal/IdentityProviders/Dialogs/EditIdentityProviderDialog.vue\": 86123,\n\t\"./AdministratorPortal/Platforms/Dialogs/ConfirmDeleteModal.vue\": 81392,\n\t\"./AdministratorPortal/Projects/Dialogs/CreateProjectTypeDialog.vue\": 54879,\n\t\"./AdministratorPortal/Projects/Dialogs/DeleteProjectTemplateDialog.vue\": 79037,\n\t\"./AdministratorPortal/Projects/Dialogs/DeleteProjectTypeDialog.vue\": 53282,\n\t\"./AdministratorPortal/Projects/Dialogs/EditProjectTemplateDialog.vue\": 38220,\n\t\"./AdministratorPortal/Projects/Dialogs/MoveProjectTemplateDialog.vue\": 25926,\n\t\"./AdministratorPortal/Roles/Dialogs/ConfirmDeleteModal.vue\": 27554,\n\t\"./AdministratorPortal/Subscription/Dialogs/ConfirmDeleteModal.vue\": 16892,\n\t\"./AdministratorPortal/Tags/Dialogs/ConfirmDeleteModal.vue\": 53251,\n\t\"./AdministratorPortal/Users/Dialogs/ConfirmDeleteFileShareDialog.vue\": 91716,\n\t\"./AdministratorPortal/Users/Dialogs/ConfirmDeleteGroupDialog.vue\": 76214,\n\t\"./AdministratorPortal/Users/Dialogs/ConfirmDeletePermissionDialog.vue\": 51629,\n\t\"./AdministratorPortal/Users/Dialogs/ConfirmDeleteUserModal.vue\": 77104,\n\t\"./AdministratorPortal/Workers/Dialogs/AddWorkerDialog.vue\": 53077,\n\t\"./AdministratorPortal/Workers/Dialogs/DeleteAgentDialog.vue\": 63633,\n\t\"./Drive/Dialogs/Components/ShareFileForm.vue\": 65017,\n\t\"./Drive/Dialogs/ConfirmDeleteDialog.vue\": 87122,\n\t\"./Drive/Dialogs/CreateFileShareDialog.vue\": 39387,\n\t\"./Drive/Dialogs/CreateFolderDialog.vue\": 53095,\n\t\"./Drive/Dialogs/FileSelectorDialog.vue\": 72116,\n\t\"./Drive/Dialogs/ManageShareFilesDialog.vue\": 58926,\n\t\"./Drive/Dialogs/RenameDialog.vue\": 87752,\n\t\"./Drive/Dialogs/SelectFileShareDialog.vue\": 13680,\n\t\"./Drive/Dialogs/UploadManagerDialog.vue\": 45344,\n\t\"./Explore/Dialogs/EplumeDialog.vue\": 10826,\n\t\"./Explore/Dialogs/FolderWithCommentDialog.vue\": 64389,\n\t\"./Explore/Dialogs/OranoCreateDPDialog.vue\": 43664,\n\t\"./Explore/Dialogs/OranoEquipmentDialog.vue\": 62332,\n\t\"./Explore/Dialogs/OranoPrsDialog.vue\": 28467,\n\t\"./Explore/Dialogs/VoSmartObjectDetailsDialog.vue\": 35128,\n\t\"./Profile/Dialogs/ConfirmDeleteAccountDialog.vue\": 60015,\n\t\"./Profile/Dialogs/ConfirmDeleteTokensDialog.vue\": 59278,\n\t\"./Profile/Dialogs/CreateTokenDialog.vue\": 30769,\n\t\"./Project/Dialogs/ChangeProjectOwnerDialog.vue\": 64771,\n\t\"./Project/Dialogs/ChooseCoordinatesTypeDialog.vue\": 21801,\n\t\"./Project/Dialogs/ConfirmDeleteDialog.vue\": 85933,\n\t\"./Project/Dialogs/CreateAssetPanoramaGroupDialog.vue\": 88587,\n\t\"./Project/Dialogs/CreateFolderModal.vue\": 29950,\n\t\"./Project/Dialogs/CreateMapModal.vue\": 23873,\n\t\"./Project/Dialogs/CreateNavigationModal.vue\": 77040,\n\t\"./Project/Dialogs/CreateProjectDialog.vue\": 46339,\n\t\"./Project/Dialogs/DeleteModal.vue\": 75417,\n\t\"./Project/Dialogs/DeleteVersionDialog.vue\": 67991,\n\t\"./Project/Dialogs/EditBindingDialog.vue\": 64263,\n\t\"./Project/Dialogs/EventModal.vue\": 70279,\n\t\"./Project/Dialogs/ExportAsTemplateDialog.vue\": 51819,\n\t\"./Project/Dialogs/ExportProjectDialog.vue\": 78087,\n\t\"./Project/Dialogs/InputLatLongCoordinatesDialog.vue\": 2488,\n\t\"./Project/Dialogs/InputXYZCoordinatesDialog.vue\": 98736,\n\t\"./Project/Dialogs/MarkAsDefaultVersionDialog.vue\": 65586,\n\t\"./Project/Dialogs/MoveHotspotToPanoramaVersionDialog.vue\": 12367,\n\t\"./Project/Dialogs/RenameVersionDialog.vue\": 52583,\n\t\"./Project/Dialogs/SelectLocationModal.vue\": 37603,\n\t\"./Project/Dialogs/VersionsManagerModal.vue\": 22629,\n\t\"./Shares/Dialogs/IconPickerDialog.vue\": 94775,\n\t\"./Shares/Dialogs/MarkdownEditorDialog.vue\": 53014,\n\t\"./Shares/Dialogs/VoAddOrEditSmartObjectDialog.vue\": 72508,\n\t\"./Shares/Dialogs/VoCertificateSelectionDialog.vue\": 77728,\n\t\"./Shares/Dialogs/VoConfirmDeleteDialog.vue\": 32976,\n\t\"./Shares/Dialogs/VoDiaporamaDialog.vue\": 89740,\n\t\"./Shares/Dialogs/VoIFrameDialog.vue\": 56420,\n\t\"./Shares/Dialogs/VoMessageDialog.vue\": 75367,\n\t\"./Shares/Dialogs/VoPasswordDialog.vue\": 17371,\n\t\"./Shares/Dialogs/VoSignInDialog.vue\": 67071,\n\t\"./Standalone/Dialogs/VoImportStandaloneProjectDialog.vue\": 67195,\n\t\"./Video/Dialogs/ConfirmDeleteDialog.vue\": 24916,\n\t\"./Video/Dialogs/CreateVideoDialog.vue\": 8971,\n\t\"./Video/Dialogs/EditThumbnailDialog.vue\": 16139,\n\t\"./Video/Dialogs/SocialShareDialog.vue\": 87219\n};\n\n\nfunction webpackAsyncContext(req) {\n\treturn webpackAsyncContextResolve(req).then(function(id) {\n\t\tif(!__webpack_require__.m[id]) {\n\t\t\tvar e = new Error(\"Module '\" + req + \"' ('\" + id + \"') is not available (weak dependency)\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\t\treturn __webpack_require__(id);\n\t});\n}\nfunction webpackAsyncContextResolve(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\t\treturn map[req];\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.resolve = webpackAsyncContextResolve;\nwebpackAsyncContext.id = 79867;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./peculiar-attribute-certificate-viewer_9.entry.js\": [\n\t\t89158,\n\t\t4609,\n\t\t8847,\n\t\t9158\n\t],\n\t\"./peculiar-certificate-summary_3.entry.js\": [\n\t\t1813,\n\t\t4609,\n\t\t1813\n\t],\n\t\"./peculiar-certificates-viewer.entry.js\": [\n\t\t67061,\n\t\t4609,\n\t\t8847,\n\t\t7061\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 76058;\nmodule.exports = webpackAsyncContext;","import { VImg } from 'vuetify/lib/components/VImg';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:['panoramaThumbnail', {'selected': _vm.isSelected}],attrs:{\"title\":_vm.name},on:{\"click\":function($event){return _vm.$emit('click')}}},[_c(VImg,{staticClass:\"text-right pa-1\",attrs:{\"src\":_vm.uriService.getAbsoluteUri(_vm.formatUrl),\"alt\":_vm.name,\"aspect-ratio\":\"1.778\",\"max-width\":\"206px\",\"lazy-src\":_vm.uriService.getAbsoluteUri(((_vm._appContext.codeCulture) + \"/asset/preview/00000000-0000-0000-0000-000000000000\"))}},[_vm._t(\"action\")],2),_c('span',{staticClass:\"text\"},[_vm._v(_vm._s(_vm.name))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AppContext } from 'Api/AppContext';\r\nimport { getPreviewUrl } from 'App/Helpers/AssetHelper';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { Component, Prop, UIElement } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'x-panorama-preview'\r\n})\r\nexport default class PanoramaPreview extends UIElement {\r\n public get formatUrl(): string {\r\n return getPreviewUrl(this._appContext.codeCulture, this.guid);\r\n }\r\n\r\n @Prop()\r\n public name: string;\r\n\r\n @Prop()\r\n public guid: string;\r\n\r\n @Prop()\r\n public isSelected: boolean;\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n public uriService: IVisonUriService;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./PanoramaPreview.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./PanoramaPreview.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PanoramaPreview.vue?vue&type=template&id=f407ac22&scoped=true&\"\nimport script from \"./PanoramaPreview.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./PanoramaPreview.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./PanoramaPreview.vue.scss?vue&type=style&index=0&id=f407ac22&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f407ac22\",\n null\n \n)\n\nexport default component.exports","import { ISphericalCoordinates } from 'Api/Dto/Project';\r\nimport { AssetPanoramaGroup, AssetPanoramaVersion, FileMap, Navigation } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { CoordinatesHelper } from 'App/Helpers/CoordinatesHelper';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { ICartesianCoordinates } from 'Framework/Components/Controls/XView/Core';\r\nimport { editorBrowsable, JsonProperty, PropSyncWithInternal } from 'Framework/Components/Panel.Commons';\r\nimport { Component, UIElement } from 'Framework/Components/UIElement';\r\nimport { MathHelper } from 'Framework/Helpers/MathHelper';\r\n\r\nenum BreadcrumbItemType {\r\n Home,\r\n Standard,\r\n VersionsList\r\n}\r\n\r\ninterface IBreadcrumbItem {\r\n type: BreadcrumbItemType;\r\n text?: string;\r\n}\r\n\r\n@Component({\r\n name: 'vo-panorama-breadcrumb'\r\n})\r\nexport default class VoPanoramaBreadcrumb extends UIElement {\r\n private _onSelectedPanoramaVersionChange(newValue: AssetPanoramaVersion) {\r\n const currentOrientation: ISphericalCoordinates = MathHelper.isSphericalCoordinates(this._dataContext.currentOrientation)\r\n ? this._dataContext.currentOrientation\r\n : MathHelper.toSphericalCoordinates(this._dataContext.currentOrientation as ICartesianCoordinates);\r\n\r\n const newOrientation = CoordinatesHelper.changeAzimuthBase(currentOrientation, this._currentPanorama.offset, newValue.offset);\r\n const fov = this._dataContext.currentFocale;\r\n\r\n this._dataContext.goToPanoramaVersion(newValue, newOrientation, fov);\r\n }\r\n\r\n public get breadcrumbItems(): Array {\r\n let items: Array = [{ type: BreadcrumbItemType.Home }];\r\n\r\n if (this._currentMap) {\r\n items.push({ type: BreadcrumbItemType.Standard, text: this._currentMap.name });\r\n }\r\n\r\n if (this.currentPanoramaGroup) {\r\n items.push(\r\n { type: BreadcrumbItemType.Standard, text: this.currentPanoramaGroup.name },\r\n { type: BreadcrumbItemType.VersionsList }\r\n );\r\n }\r\n else if (this._currentPanorama) {\r\n items.push({ type: BreadcrumbItemType.Standard, text: this._currentPanorama.name })\r\n }\r\n\r\n return items;\r\n }\r\n\r\n public get currentPanoramaGroup(): AssetPanoramaGroup {\r\n if (!this._currentPanorama || !this._panoramas) {\r\n return null;\r\n }\r\n\r\n return this._panoramas.find(g => g.assetItemId == this._currentPanorama.parentId);\r\n }\r\n\r\n public BreadcrumbItemType: any = BreadcrumbItemType;\r\n\r\n @JsonProperty({ className: 'vo-panorama-breadcrumb', name: 'itemscurrentPanoramaSource', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentPanorama', { type: Object, required: false, default: null })\r\n public _currentPanorama: AssetPanoramaVersion;\r\n\r\n @JsonProperty({ className: 'vo-panorama-breadcrumb', name: 'currentNavigation', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentNavigation', { type: Object, required: false, default: null })\r\n public _currentNavigation: Navigation;\r\n\r\n @JsonProperty({ className: 'vo-panorama-breadcrumb', name: 'currentMap', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentMap', { type: Object, required: false, default: null })\r\n public _currentMap: FileMap;\r\n\r\n @JsonProperty({ className: 'vo-panorama-breadcrumb', name: 'panoramas', type: Array })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('panoramas', { type: Array, required: false, default: () => [] })\r\n public _panoramas: Array;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n private readonly _uriService: IVisonUriService;\r\n}\r\n","import { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBreadcrumbsItem } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VBreadcrumbs,{staticClass:\"pa-2\",style:([{'background-color':'rgba(0,0,0,0.4)',position:'relative'},_vm.computedStyle]),attrs:{\"items\":_vm.breadcrumbItems},scopedSlots:_vm._u([{key:\"divider\",fn:function(){return [_c(VIcon,{attrs:{\"color\":\"white\"}},[_vm._v(\"fa-light fa-chevron-right\")])]},proxy:true},{key:\"item\",fn:function(ref){\nvar item = ref.item;\nreturn [(item.type == _vm.BreadcrumbItemType.Home)?_c(VBreadcrumbsItem,[_c(VIcon,{attrs:{\"color\":\"white\"}},[_vm._v(\"fa-solid fa-house\")])],1):(item.type == _vm.BreadcrumbItemType.Standard)?_c(VBreadcrumbsItem,{staticClass:\"white--text\"},[_vm._v(\" \"+_vm._s(item.text)+\" \")]):_c(VBreadcrumbsItem,[_c(VSelect,{attrs:{\"outlined\":\"\",\"dense\":\"\",\"dark\":\"\",\"hide-details\":\"\",\"return-object\":\"\",\"item-value\":\"assetItemId\",\"item-text\":\"name\",\"items\":_vm.currentPanoramaGroup.children,\"value\":_vm._currentPanorama},on:{\"change\":_vm._onSelectedPanoramaVersionChange},scopedSlots:_vm._u([{key:\"item\",fn:function(ref){\nvar item = ref.item;\nreturn [_c(VListItemAvatar,[_c('img',{attrs:{\"src\":_vm._uriService.getAbsoluteUri(item.file.links.preview)}})]),_c(VListItemContent,[_vm._v(_vm._s(item.name))])]}}],null,true)})],1)]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPanoramaBreadcrumb.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPanoramaBreadcrumb.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoPanoramaBreadcrumb.vue?vue&type=template&id=696f2ced&scoped=true&\"\nimport script from \"./VoPanoramaBreadcrumb.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoPanoramaBreadcrumb.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./VoPanoramaBreadcrumb.vue.scss?vue&type=style&index=0&id=696f2ced&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"696f2ced\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"cookie-consent-transition\"}},[(_vm.isVisible)?_c('div',{staticClass:\"cookie-consent\",style:(_vm.computedStyle),attrs:{\"role\":\"dialog\"}},[_vm._t(\"message\"),_vm._t(\"buttons\",null,{\"onAcceptAll\":_vm._onAcceptAll,\"onDenyAll\":_vm._onDenyAll}),_vm._t(\"link\")],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { Component, UIElement } from 'Framework/Components/UIElement';\r\nimport { CookieConsentType } from 'Framework/Helpers/CookieHelper';\r\n\r\n@Component({\r\n name: 'cookie-consent'\r\n})\r\nexport default class CookieConsent extends UIElement {\r\n private _onAcceptAll(): void {\r\n this._updateAllCookies(CookieConsentType.Allow);\r\n }\r\n\r\n private _onDenyAll(): void {\r\n this._updateAllCookies(CookieConsentType.Deny);\r\n }\r\n\r\n private _updateAllCookies(consentType: CookieConsentType): void {\r\n UIElement.Bus.$emit(CookieConsent.EventName, consentType);\r\n this.$emit(CookieConsent.EventName, consentType);\r\n }\r\n\r\n public static readonly EventName = 'cookies-accepted';\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./CookieConsent.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./CookieConsent.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CookieConsent.vue?vue&type=template&id=1f9cd050&scoped=true&\"\nimport script from \"./CookieConsent.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./CookieConsent.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./CookieConsent.vue.scss?vue&type=style&index=0&id=1f9cd050&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1f9cd050\",\n null\n \n)\n\nexport default component.exports","import { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('default-dialog',{attrs:{\"buttons\":_vm.buttons},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.localizer((_vm.baseTranslationPath + \".Title\")))+\" \")]},proxy:true},{key:\"default\",fn:function(ref){\nvar onOk = ref.onOk;\nreturn [_c(VContainer,{attrs:{\"fluid\":\"\"}},[_c(VRow,[_c(VCol,[_c('vo-errors-list',{attrs:{\"errors\":_vm.errors}}),_c('p',{staticClass:\"text-body-1\"},[_vm._v(\" \"+_vm._s(_vm.localizer((_vm.baseTranslationPath + \".PasswordNeeded\")))+\" \")]),_c(VTextField,{attrs:{\"label\":_vm.localizer((_vm.baseTranslationPath + \".Password\")),\"autofocus\":\"\",\"outlined\":\"\",\"type\":\"password\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return onOk.apply(null, arguments)}},model:{value:(_vm.dataContext.password),callback:function ($$v) {_vm.$set(_vm.dataContext, \"password\", $$v)},expression:\"dataContext.password\"}})],1)],1)],1)]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { ApiException, IError } from 'Api/Dto/QueryResult';\r\nimport { IPasswordDialogContext } from 'App/Areas/Shares/Dialogs/IPasswordDialogContext';\r\nimport VoErrorsList from 'App/Areas/Shares/VoErrorsList.vue';\r\nimport { BaseDialogBehavior } from 'App/Services/DialogService/BaseDialogBehavior';\r\nimport { DialogButton } from 'App/Services/DialogService/Components/DefaultDialog.vue';\r\nimport { Component } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'VoPasswordDialog',\r\n components: {\r\n VoErrorsList\r\n }\r\n})\r\nexport default class VoPasswordDialog extends BaseDialogBehavior {\r\n public async beforeOkAsync(): Promise {\r\n try {\r\n this.errors = [];\r\n\r\n this.dataContext.validatedToken = await this._dataContext.authenticateForShareAsync(\r\n this.dataContext.token,\r\n this.dataContext.password\r\n );\r\n\r\n return true;\r\n }\r\n catch (ex) {\r\n if (ex instanceof ApiException) {\r\n this.errors.push(ex.error);\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n public errors: Array = [];\r\n\r\n public readonly buttons: DialogButton = DialogButton.Ok;\r\n public readonly baseTranslationPath: string = 'Areas.Shared.VoPasswordDialog';\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPasswordDialog.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPasswordDialog.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoPasswordDialog.vue?vue&type=template&id=9eff7b26&\"\nimport script from \"./VoPasswordDialog.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoPasswordDialog.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('default-dialog',{attrs:{\"canMaximize\":true},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.localizer((_vm.baseTranslationPath + \".Title\")))+\" \")]},proxy:true},{key:\"default\",fn:function(ref){\nvar onOk = ref.onOk;\nvar isOkBusy = ref.isOkBusy;\nreturn [_c(VContainer,{attrs:{\"fluid\":\"\"}},[_c(VRow,[_c(VCol,{attrs:{\"cols\":\"12\",\"sm\":\"6\"}},[_c('h1',{staticClass:\"text-h6 pb-4\"},[_vm._v(_vm._s(_vm.localizer((_vm.baseTranslationPath + \".Title\"))))]),_c(VForm,{staticClass:\"mb-5\",on:{\"submit\":function($event){$event.preventDefault();}},model:{value:(_vm.isFormPropertyValid),callback:function ($$v) {_vm.isFormPropertyValid=$$v},expression:\"isFormPropertyValid\"}},[_c('vo-errors-list',{attrs:{\"errors\":_vm.errors}}),_c(VTextField,{attrs:{\"label\":_vm.localizer('LoginViewModel.PlatformName'),\"hint\":!_vm.isHttpApiUri ? _vm.apiUri : null,\"rules\":_vm.platformRules,\"outlined\":\"\",\"name\":\"Platform\"},on:{\"input\":function($event){return _vm.onTryAutoSignIn(_vm.apiUri)}},model:{value:(_vm.platformName),callback:function ($$v) {_vm.platformName=(typeof $$v === 'string'? $$v.trim(): $$v)},expression:\"platformName\"}}),(_vm.isAutoSignInFail)?[_c(VTextField,{attrs:{\"outlined\":\"\",\"name\":\"UserName\",\"label\":_vm.localizer('LoginViewModel.UserName')},model:{value:(_vm.userName),callback:function ($$v) {_vm.userName=$$v},expression:\"userName\"}}),_c(VTextField,{attrs:{\"type\":\"password\",\"outlined\":\"\",\"name\":\"Password\",\"label\":_vm.localizer('LoginViewModel.Password')},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}}),(_vm.dataContext.allowPasswordReset)?_c('a',{attrs:{\"href\":_vm._uriService.getAbsoluteUri((\"/\" + (_vm._appContext.codeCulture) + \"/account/forgotpassword/\"))}},[_vm._v(_vm._s(_vm.localizer((_vm.baseTranslationPath + \".ForgotPassword\"))))]):_vm._e(),_c(VCheckbox,{attrs:{\"value\":true,\"name\":\"RememberMe\",\"label\":_vm.localizer('LoginViewModel.RememberMe')}}),_c(VBtn,{attrs:{\"color\":\"primary\",\"type\":\"submit\",\"loading\":isOkBusy},on:{\"click\":onOk}},[_vm._v(_vm._s(_vm.localizer((_vm.baseTranslationPath + \".LogIn\"))))]),_c('br')]:_vm._e()],2),(_vm.dataContext.allowRegister)?_c('a',{attrs:{\"href\":_vm._uriService.getAbsoluteUri((\"/\" + (_vm._appContext.codeCulture) + \"/account/register/\"))}},[_vm._v(_vm._s(_vm.localizer((_vm.baseTranslationPath + \".RegisterNewUser\"))))]):_vm._e()],1),_c(VCol,{staticStyle:{\"text-align\":\"center\"},attrs:{\"cols\":\"1\",\"sm\":false}},[_c(VDivider,{attrs:{\"vertical\":\"\"}})],1),_c(VCol,{attrs:{\"cols\":\"11\",\"sm\":\"5\"}},[_c('h2',{staticClass:\"text-h6 pb-4\"},[_vm._v(_vm._s(_vm.localizer((_vm.baseTranslationPath + \".UseAnotherExternalAuthentication\"))))]),(!_vm.dataContext.loginProviders || _vm.dataContext.loginProviders.length == 0)?_c('p',[_vm._v(_vm._s(_vm.localizer((_vm.baseTranslationPath + \".NoAnotherExternalAuthentication\"))))]):_c(VForm,{attrs:{\"method\":\"post\",\"action\":_vm._uriService.getAbsoluteUri((\"/\" + (_vm._appContext.codeCulture) + \"/account/externallogin/\"))}},_vm._l((_vm.dataContext.loginProviders),function(provider,index){return _c(VBtn,{key:index,attrs:{\"type\":\"submit\",\"name\":\"provider\",\"value\":provider.Name,\"title\":_vm.localizer((_vm.baseTranslationPath + \".LoginWithProviderName\"),provider.DisplayName)}},[_vm._v(\" \"+_vm._s(provider.DisplayName)+\" \")])}),1)],1)],1)],1)]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AppContext, IAppLogin } from 'Api/AppContext';\r\nimport { ForbiddenException, IError, QueryException } from 'Api/Dto/QueryResult';\r\nimport { AuthenticationService } from 'Api/Services';\r\nimport VoErrorsList from 'App/Areas/Shares/VoErrorsList.vue';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject, lazyInjectStandaloneOnline } from 'App/Inversify.config';\r\nimport { BaseDialogBehavior } from 'App/Services/DialogService/BaseDialogBehavior';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { UrlHelper } from 'Framework/Helpers/UrlHelper';\r\nimport { Component } from 'vue-property-decorator';\r\n\r\nexport interface ISignInDialogContext {\r\n allowPasswordReset: boolean,\r\n allowRegister: boolean,\r\n loginProviders: Array\r\n}\r\n\r\n@Component({\r\n name: 'VoSignInDialog',\r\n components: {\r\n VoErrorsList\r\n }\r\n})\r\nexport default class VoSignInDialog extends BaseDialogBehavior {\r\n public async beforeOkAsync(): Promise {\r\n this.errors = [];\r\n\r\n this._appContext.apiUri = this.apiUri;\r\n\r\n try {\r\n const result = await this._authenticationService.signInAsync({\r\n userName: this.userName,\r\n password: this.password\r\n });\r\n\r\n const login = result as IAppLogin;\r\n login.apiUri = this._appContext.apiUri;\r\n\r\n this._appContext.login = login;\r\n\r\n return true;\r\n }\r\n catch (ex) {\r\n if (ex instanceof QueryException) {\r\n this.errors.push(ex.error);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public async tryAutoSignInAsync(uri: string): Promise {\r\n this.errors = [];\r\n\r\n try {\r\n this._appContext.apiUri = uri;\r\n\r\n const user = await this._authenticationService.singleSignOnAsync(() => {\r\n this.isAutoSignInFail = true;\r\n });\r\n\r\n if (user) {\r\n const login = user as IAppLogin;\r\n login.apiUri = this._appContext.apiUri;\r\n this._appContext.login = login;\r\n\r\n this.onClose();\r\n }\r\n }\r\n catch (ex) {\r\n if (ex instanceof ForbiddenException) {\r\n this.errors.push({\r\n message: this.localizer(`${this.baseTranslationPath}.InvalidCertificate`),\r\n code: null,\r\n innerError: null,\r\n target: null,\r\n details: null\r\n });\r\n }\r\n else {\r\n this.isAutoSignInFail = true;\r\n }\r\n }\r\n }\r\n\r\n public get platformRules(): Array<(input: string) => boolean | string> {\r\n return [\r\n (input: string) => this.isHttpApiUri\r\n ? UrlHelper.isValidUrl(this.apiUri)\r\n || this.localizer(`${this.baseTranslationPath}.ValidationRules.NotWellFormattedUrl`)\r\n : !!input\r\n || this.localizer(`${this.baseTranslationPath}.ValidationRules.EmptyUriOrPlatformName`)\r\n ];\r\n }\r\n\r\n public get isHttpApiUri(): boolean {\r\n return this.platformName?.startsWith('http') ?? false;\r\n }\r\n\r\n public get apiUri(): string {\r\n if (!this.platformName) {\r\n return null;\r\n }\r\n\r\n return this.isHttpApiUri\r\n ? this.platformName\r\n : `https://${this.platformName}.vis-on.fr`;\r\n }\r\n\r\n public onTryAutoSignIn: (uri: string) => Promise = this.$debounce((uri: string) =>\r\n this.isFormPropertyValid && this.tryAutoSignInAsync(uri),\r\n 500\r\n );\r\n public isAutoSignInFail: boolean = false;\r\n public isFormPropertyValid: boolean = true;\r\n public userName: string = null;\r\n public password: string = null;\r\n public platformName: string = null;\r\n public errors: Array = [];\r\n\r\n public readonly baseTranslationPath: string = 'Areas.Shared.VoSignInDialog';\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInjectStandaloneOnline(AuthenticationService)\r\n private readonly _authenticationService: AuthenticationService;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n private readonly _uriService: IVisonUriService;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSignInDialog.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSignInDialog.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoSignInDialog.vue?vue&type=template&id=44466cc8&\"\nimport script from \"./VoSignInDialog.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoSignInDialog.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.mapProvider)?_c(VCard,{staticClass:\"fill-height\",attrs:{\"tile\":\"\"}},[_c('x-grid',{attrs:{\"row-definitions\":\"* auto\"}},[_c('div',{attrs:{\"row\":1}},[_c('l-map',{ref:\"leafletMap\",style:({\n height: _vm.height,\n width: _vm.width,\n cursor: _vm.readonly ? 'grab' : 'crosshair',\n zIndex: 0\n }),attrs:{\"options\":{zoomSnap: 0.1},\"zoom\":_vm.mapProvider.zoom,\"center\":_vm.center,\"min-bounds\":_vm.mapProvider.maxBounds,\"max-zoom\":_vm.mapProvider.maxZoom,\"min-zoom\":_vm.mapProvider.minZoom,\"crs\":_vm.mapProvider.crs},on:{\"click\":function($event){!_vm.readonly && _vm._onLocationClick($event)},\"mousemove\":_vm._onMouseMove,\"ready\":_vm._mapReady}},[_c(_vm.mapProvider.contentTemplate,_vm._b({tag:\"component\",on:{\"load\":function($event){_vm.mapProvider.onLoaded && _vm.mapProvider.onLoaded($event)}}},'component',_vm.mapProvider.dataContext,false)),(!_vm.readonly && _vm.mapProvider.geoSearchOptions)?_c('l-geosearch',{attrs:{\"options\":Object.assign(_vm.mapProvider.geoSearchOptions, { showMarker: false })}}):_vm._e(),_vm._l((_vm.itemsSource.filter(function (p) { return p.location !== null; })),function(project){return _c('l-marker',{key:project.projectId,attrs:{\"lat-lng\":_vm._invertLngLat(project.location)},on:{\"click\":function($event){return _vm._onNavigateTo(project)}}},[_c('l-tooltip',{attrs:{\"options\":{direction: 'top'}}},[_c(VCard,{attrs:{\"flat\":\"\",\"hover\":\"\",\"tile\":\"\"}},[_c(VImg,{attrs:{\"aspect-ratio\":\"16/9\",\"height\":\"132px\",\"width\":\"234px\",\"lazy-src\":_vm.uriService.getAbsoluteUri((\"/\" + (_vm._appContext.codeCulture) + \"/asset/preview/00000000-0000-0000-0000-000000000000\")),\"src\":_vm.uriService.getAbsoluteUri((\"/\" + (_vm._appContext.codeCulture) + \"/asset/preview/\" + ((project.thumbnail && project.thumbnail.guid)? project.thumbnail.guid : project.thumbnail)))}}),_c(VCardTitle,[_vm._v(_vm._s(project.name || project.assetProject.name))])],1)],1)],1)})],2)],1),(_vm.displayCoordinates)?_c(VCardText,{staticClass:\"py-0 text-overline\",attrs:{\"row\":2}},[_vm._v(\" \"+_vm._s(_vm.mapProvider.formatCurrentCoordinates(_vm.currentCoordinates))+\" \")]):_vm._e()],1)],1):_c(VContainer,[_c(VRow,[_c(VCol,[_c(VAlert,{attrs:{\"type\":\"warning\",\"text\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.localizer((_vm.translationPath + \".NoProvider\")))+\" \")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AppContext } from 'Api/AppContext';\r\nimport { Project } from 'Api/Contracts/Dtos';\r\nimport { IMapProvider } from 'Api/MapService';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { Component, Prop, UIElement } from 'Framework/Components/UIElement';\r\nimport { Feature, GeoJSON, Point } from 'geojson';\r\nimport L from 'leaflet';\r\nimport 'leaflet-geosearch/assets/css/leaflet.css';\r\nimport 'leaflet.markercluster/dist/MarkerCluster.css';\r\nimport 'leaflet.markercluster/dist/MarkerCluster.Default.css';\r\nimport 'leaflet/dist/leaflet.css';\r\nimport { Ref } from 'vue-property-decorator';\r\nimport { LControl, LGeoJson, LImageOverlay, LMap, LMarker, LTileLayer, LTooltip } from 'vue2-leaflet';\r\nimport LGeosearch from 'vue2-leaflet-geosearch/Vue2LeafletGeosearch.vue';\r\n\r\n// import 'leaflet/dist/images/marker-shadow.png';\r\n// import 'leaflet/dist/images/marker-icon-2x.png';\r\ndelete L.Icon.Default.prototype._getIconUrl;\r\n\r\nL.Icon.Default.mergeOptions({\r\n iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),\r\n iconUrl: require('leaflet/dist/images/marker-icon.png'),\r\n shadowUrl: require('leaflet/dist/images/marker-shadow.png')\r\n});\r\n\r\n@Component({\r\n name: 'x-explore-map',\r\n components: {\r\n LMap,\r\n LImageOverlay,\r\n LMarker,\r\n LGeoJson,\r\n LTileLayer,\r\n LControl,\r\n LTooltip,\r\n LGeosearch,\r\n }\r\n})\r\nexport default class ExploreMap extends UIElement {\r\n private _onLocationClick(e: L.LeafletMouseEvent): void {\r\n this._emitLocationChanged(e.latlng.lat, e.latlng.lng);\r\n }\r\n\r\n private _emitLocationChanged(latitude: number, longitude: number): void {\r\n let location: Point = {\r\n type: 'Point',\r\n //Don't change the order see https://macwright.org/lonlat/\r\n coordinates: [\r\n longitude,\r\n latitude\r\n ]\r\n };\r\n\r\n let geoJsonPoint: GeoJSON = L.GeoJSON.asFeature(location);\r\n\r\n this.$emit('location-changed', geoJsonPoint);\r\n }\r\n\r\n private _onNavigateTo(project: Project): void {\r\n if (this.readonly) {\r\n //need to verif publishing status ?\r\n window.location.href = this.uriService.getAbsoluteUri(\r\n `${this._appContext.codeCulture}/explore/watch/?pId=${project.projectId || (project as any).id}`\r\n );\r\n }\r\n else {\r\n let point: L.LatLng = this._invertLngLat(project.location);\r\n\r\n this.leafletMap.mapObject.fitBounds(new L.LatLngBounds([[point.lat, point.lng]]));\r\n }\r\n }\r\n\r\n private _invertLngLat(location: GeoJSON): L.LatLng {\r\n let featurePoint = location as Feature;\r\n let geoJsonPoint = featurePoint.geometry.coordinates as [number, number];\r\n\r\n return L.GeoJSON.coordsToLatLng(geoJsonPoint);\r\n }\r\n\r\n private _onMouseMove(e: L.LeafletMouseEvent): void {\r\n this.currentCoordinates = e.latlng;\r\n }\r\n\r\n private _mapReady(): void {\r\n const ro = new ResizeObserver(_ => {\r\n this.leafletMap?.mapObject?.invalidateSize();\r\n });\r\n\r\n ro.observe(this.leafletMap.$el);\r\n\r\n this.leafletMap.mapObject.on(\r\n 'geosearch/showlocation',\r\n (e: any) => this._emitLocationChanged(e.location.y, e.location.x),\r\n this\r\n );\r\n }\r\n\r\n public get center(): L.LatLng {\r\n if (this.centerOnProject && this.itemsSource.filter(p => p.location !== null).length > 0) {\r\n const [project] = this.itemsSource;\r\n let point: L.LatLng = this._invertLngLat(project.location);\r\n\r\n return new L.LatLngBounds([[point.lat, point.lng]]).getCenter();\r\n }\r\n\r\n if (this.leafletMap) {\r\n const zoom = this.leafletMap.mapObject.getBoundsZoom(this.mapProvider.maxBounds, false);\r\n\r\n this.mapProvider.zoom = zoom;\r\n }\r\n\r\n return this.mapProvider.maxBounds.getCenter();\r\n }\r\n\r\n public currentCoordinates: L.LatLng = new L.LatLng(0, 0);\r\n\r\n public readonly translationPath: string = 'JS.MapExplorer';\r\n\r\n @Ref('leafletMap')\r\n public leafletMap: LMap;\r\n\r\n @Prop({ type: Array, default: () => [] })\r\n public itemsSource: Array;\r\n\r\n @Prop({ type: String, default: '100%' })\r\n public height: String;\r\n\r\n @Prop({ type: String, default: '100%' })\r\n public width: String;\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public displayCoordinates: boolean;\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public readonly: boolean;\r\n\r\n @Prop({ type: Object, default: null })\r\n public mapProvider: IMapProvider;\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public centerOnProject: boolean;\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n public uriService: IVisonUriService;\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./ExploreMap.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./ExploreMap.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ExploreMap.vue?vue&type=template&id=0d062b76&\"\nimport script from \"./ExploreMap.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./ExploreMap.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./ExploreMap.vue.scss?vue&type=style&index=0&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VAlert } from 'vuetify/lib/components/VAlert';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.errors.length > 0)?_c(VAlert,{attrs:{\"type\":\"error\"}},[_c('ul',_vm._l((_vm.displayedErrors),function(error,index){return _c('li',{key:index},[_vm._v(\" \"+_vm._s(error.message)+\" \")])}),0)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { IError } from 'Api/Dto/QueryResult';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'VoErrorsList'\r\n})\r\nexport default class VoErrorsList extends Vue {\r\n public get displayedErrors(): Array {\r\n const flattenExpression:(value: IError, index: number, array: IError[]) => IError | ReadonlyArray = \r\n e => e.details?.flatMap(flattenExpression) ?? e;\r\n\r\n return this.errors.flatMap(flattenExpression);\r\n }\r\n\r\n @Prop({type: Array, default: () => []})\r\n public errors: Array;\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoErrorsList.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoErrorsList.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoErrorsList.vue?vue&type=template&id=52f2c204&\"\nimport script from \"./VoErrorsList.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoErrorsList.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VBtn,{attrs:{\"color\":\"secondary\",\"large\":\"\",\"loading\":_vm.loading,\"disabled\":_vm.disabled},on:{\"click\":_vm._onClick}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\" fa-light fa-left-to-line \")]),_vm._v(\" \"+_vm._s(_vm.localizer('Cancel'))+\" \")],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import BaseButton from 'App/Services/DialogService/Components/Buttons/BaseButton';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component({\r\n name: 'cancel-button'\r\n})\r\nexport default class CancelButton extends BaseButton {\r\n\r\n}\r\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./CancelButton.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./CancelButton.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CancelButton.vue?vue&type=template&id=7a04c66b&\"\nimport script from \"./CancelButton.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./CancelButton.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VBtn,{attrs:{\"color\":\"primary\",\"large\":\"\",\"loading\":_vm.loading,\"disabled\":_vm.disabled},on:{\"click\":_vm._onClick}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\" fa-light fa-check \")]),_vm._v(\" \"+_vm._s(_vm.localizer('Confirm'))+\" \")],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import BaseButton from 'App/Services/DialogService/Components/Buttons/BaseButton';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component({\r\n name: 'ok-button'\r\n})\r\nexport default class OkButton extends BaseButton {\r\n\r\n}\r\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./OkButton.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./OkButton.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./OkButton.vue?vue&type=template&id=0bd55de1&\"\nimport script from \"./OkButton.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./OkButton.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSystemBar } from 'vuetify/lib/components/VSystemBar';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('dialog-template-renderless',{attrs:{\"behavior\":_vm.dialog},on:{\"on-close\":_vm.close},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [_c(VCard,{staticClass:\"dialog\"},[_c(VSystemBar,{attrs:{\"window\":\"\"}},[_c('span',{staticClass:\"text-truncate\"},[_vm._t(\"title\")],2),_c(VSpacer),(_vm.canMaximize && !_vm.dialogOptions.fullscreen)?_c(VIcon,{attrs:{\"small\":\"\"},on:{\"click\":_vm.maximize}},[_vm._v(\"fa-light fa-window-maximize\")]):_vm._e(),(_vm.canRestore && _vm.dialogOptions.fullscreen)?_c(VIcon,{attrs:{\"small\":\"\"},on:{\"click\":_vm.restore}},[_vm._v(\"fa-light fa-window-restore\")]):_vm._e(),_c(VIcon,{on:{\"click\":props.onClose}},[_vm._v(\"fa-light fa-xmark\")])],1),_c(VCardText,{class:['dialog-content', 'pb-0', {'pa-0': _vm.noPadding || _vm.$vuetify.breakpoint.mobile}]},[_vm._t(\"default\",null,null,props)],2),(_vm.isActionsSlotDisplayed())?[_c(VDivider,{attrs:{\"horizontal\":\"\"}}),_c(VCardActions,[_c(VSpacer),(_vm.buttons == _vm.DialogButton.Custom)?_vm._t(\"actions\",null,null,props):(_vm.buttons == _vm.DialogButton.Ok)?[_c('ok-button',{attrs:{\"loading\":props.isOkBusy,\"disabled\":!_vm.dialog.canConfirm()},on:{\"click\":props.onOk}})]:(_vm.buttons == _vm.DialogButton.OkCancel)?[_c('cancel-button',{attrs:{\"loading\":props.isCancelBusy},on:{\"click\":props.onCancel}}),_c('ok-button',{attrs:{\"loading\":props.isOkBusy,\"disabled\":!_vm.dialog.canConfirm()},on:{\"click\":props.onOk}})]:(_vm.buttons == _vm.DialogButton.YesNoCancel)?[_c('cancel-button',{attrs:{\"loading\":props.isCancelBusy},on:{\"click\":props.onCancel}}),_c('no-button',{attrs:{\"loading\":props.isNoBusy},on:{\"click\":props.onNo}}),_c('yes-button',{attrs:{\"loading\":props.isYesBusy},on:{\"click\":props.onYes}})]:(_vm.buttons == _vm.DialogButton.YesNo)?[_c('no-button',{attrs:{\"loading\":props.isNoBusy},on:{\"click\":props.onNo}}),_c('yes-button',{attrs:{\"loading\":props.isYesBusy},on:{\"click\":props.onYes}})]:_vm._e()],2)]:_vm._e()],2)]}}],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VBtn,{attrs:{\"color\":\"secondary\",\"large\":\"\",\"loading\":_vm.loading,\"disabled\":_vm.disabled},on:{\"click\":_vm._onClick}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\" fa-light fa-xmark \")]),_vm._v(\" \"+_vm._s(_vm.localizer('No'))+\" \")],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import BaseButton from 'App/Services/DialogService/Components/Buttons/BaseButton';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component({\r\n name: 'no-button'\r\n})\r\nexport default class NoButton extends BaseButton {\r\n\r\n}\r\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./NoButton.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./NoButton.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NoButton.vue?vue&type=template&id=4d77ce47&\"\nimport script from \"./NoButton.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./NoButton.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VBtn,{attrs:{\"color\":\"primary\",\"large\":\"\",\"loading\":_vm.loading,\"disabled\":_vm.disabled},on:{\"click\":_vm._onClick}},[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\" fa-light fa-check \")]),_vm._v(\" \"+_vm._s(_vm.localizer('Yes'))+\" \")],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import BaseButton from 'App/Services/DialogService/Components/Buttons/BaseButton';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component({\r\n name: 'yes-button'\r\n})\r\nexport default class YesButton extends BaseButton {\r\n\r\n}\r\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./YesButton.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./YesButton.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./YesButton.vue?vue&type=template&id=2648fdf0&\"\nimport script from \"./YesButton.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./YesButton.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { IDialogBehavior } from 'Framework/Components/ModalDialog/DialogBehavior';\r\nimport { DialogResult } from 'Framework/Services/IDialogService';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\nexport interface IDialogTemplateSlotContext {\r\n onOk: () => Promise;\r\n onCancel: () => Promise;\r\n onYes: () => Promise;\r\n onNo: () => Promise;\r\n onClose: () => Promise\r\n\r\n isOkBusy: boolean;\r\n isCancelBusy: boolean;\r\n isYesBusy: boolean;\r\n isNoBusy: boolean;\r\n isCloseBusy: boolean;\r\n isBusy: boolean;\r\n}\r\n\r\n@Component\r\nexport default class DialogTemplateRenderless extends Vue {\r\n public render() {\r\n const slotContext: IDialogTemplateSlotContext = {\r\n onOk: this._onOkAsync,\r\n onCancel: this._onCancelAsync,\r\n onYes: this._onYesAsync,\r\n onNo: this._onNoAsync,\r\n onClose: this._onCloseAsync,\r\n isBusy: this.isBusy,\r\n isOkBusy: this.isOkBusy,\r\n isCancelBusy: this.isCancelBusy,\r\n isYesBusy: this.isYesBusy,\r\n isNoBusy: this.isNoBusy,\r\n isCloseBusy: this.isCloseBusy\r\n };\r\n\r\n return this.$scopedSlots.default(slotContext);\r\n }\r\n\r\n private async _onOkAsync(): Promise {\r\n if (this.isBusy) {\r\n return;\r\n }\r\n\r\n try {\r\n this.isOkBusy = true;\r\n\r\n if (await this.behavior.beforeOkAsync()) {\r\n this._close(DialogResult.OK);\r\n }\r\n }\r\n finally {\r\n this.isOkBusy = false;\r\n }\r\n }\r\n\r\n private async _onCancelAsync(): Promise {\r\n if (this.isBusy) {\r\n return;\r\n }\r\n\r\n try {\r\n this.isCancelBusy = true;\r\n\r\n if (await this.behavior.beforeCancelAsync()) {\r\n this._close(DialogResult.Cancel);\r\n }\r\n }\r\n finally {\r\n this.isCancelBusy = false;\r\n }\r\n }\r\n\r\n private async _onYesAsync(): Promise {\r\n if (this.isBusy) {\r\n return;\r\n }\r\n\r\n try {\r\n this.isYesBusy = true;\r\n\r\n if (await this.behavior.beforeYesAsync()) {\r\n\r\n this._close(DialogResult.Yes);\r\n }\r\n }\r\n finally {\r\n this.isYesBusy = false;\r\n }\r\n }\r\n\r\n private async _onNoAsync(): Promise {\r\n if (this.isBusy) {\r\n return;\r\n }\r\n\r\n try {\r\n this.isNoBusy = true;\r\n\r\n if (await this.behavior.beforeNoAsync()) {\r\n this._close(DialogResult.No);\r\n }\r\n }\r\n finally {\r\n this.isNoBusy = false;\r\n }\r\n }\r\n\r\n private async _onCloseAsync(): Promise {\r\n if (this.isBusy) {\r\n return;\r\n }\r\n\r\n try {\r\n this.isCloseBusy = true;\r\n\r\n if (await this.behavior.beforeCloseAsync()) {\r\n this._close(DialogResult.None);\r\n }\r\n }\r\n finally {\r\n this.isCloseBusy = false;\r\n }\r\n\r\n }\r\n\r\n private _close(result: DialogResult): void {\r\n this.$emit('on-close', result);\r\n }\r\n\r\n public get isBusy(): boolean {\r\n return this.isOkBusy\r\n || this.isCancelBusy\r\n || this.isYesBusy\r\n || this.isNoBusy\r\n || this.isCloseBusy;\r\n }\r\n\r\n public isOkBusy: boolean = false;\r\n public isCancelBusy: boolean = false;\r\n public isYesBusy: boolean = false;\r\n public isNoBusy: boolean = false;\r\n public isCloseBusy: boolean = false;\r\n\r\n @Prop({ type: Object, default: () => new EmptyBehavior() })\r\n public behavior: IDialogBehavior;\r\n}\r\n\r\nclass EmptyBehavior implements IDialogBehavior {\r\n public beforeOkAsync: () => Promise = () => Promise.resolve(true);\r\n public beforeCancelAsync: () => Promise = () => Promise.resolve(true);\r\n public beforeYesAsync: () => Promise = () => Promise.resolve(true);\r\n public beforeNoAsync: () => Promise = () => Promise.resolve(true);\r\n public beforeCloseAsync: () => Promise = () => Promise.resolve(true);\r\n}\r\n","import CancelButton from 'App/Services/DialogService/Components/Buttons/CancelButton.vue';\r\nimport NoButton from 'App/Services/DialogService/Components/Buttons/NoButton.vue';\r\nimport OkButton from 'App/Services/DialogService/Components/Buttons/OkButton.vue';\r\nimport YesButton from 'App/Services/DialogService/Components/Buttons/YesButton.vue';\r\nimport VoDialogBase from 'App/Services/DialogService/Components/_VoDialogBase';\r\nimport DialogTemplateRenderless from 'Framework/Components/ModalDialog/DialogTemplateRenderless';\r\nimport { Component, Prop } from 'vue-property-decorator';\r\n\r\nexport enum DialogButton {\r\n Custom,\r\n Ok,\r\n OkCancel,\r\n YesNoCancel,\r\n YesNo\r\n}\r\n\r\n@Component({\r\n name: 'default-dialog',\r\n components: {\r\n OkButton,\r\n CancelButton,\r\n YesButton,\r\n NoButton,\r\n DialogTemplateRenderless\r\n }\r\n})\r\nexport default class DefaultDialog extends VoDialogBase {\r\n //Use a function because $scopedSlots isn't reactive\r\n public isActionsSlotDisplayed(): boolean {\r\n return (this.$scopedSlots['actions'] != null) || (this.buttons != DialogButton.Custom);\r\n }\r\n\r\n @Prop({ type: Number, default: DialogButton.Custom })\r\n public buttons: DialogButton;\r\n\r\n public DialogButton: any = DialogButton;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./DefaultDialog.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./DefaultDialog.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./DefaultDialog.vue?vue&type=template&id=ed3d89ba&scoped=true&\"\nimport script from \"./DefaultDialog.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./DefaultDialog.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./DefaultDialog.vue.scss?vue&type=style&index=0&id=ed3d89ba&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ed3d89ba\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"itemContainer\",style:(_vm.itemsContainerStyle)},[_vm._l((_vm.items),function(item){return [_vm._t(\"default\",null,{\"item\":item})]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { Component, Prop, UIElement } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'x-item-presenter'\r\n})\r\nexport default class ItemPresenter extends UIElement {\r\n\r\n @Prop({ type: Array, required: false, default: null })\r\n public items: Array;\r\n @Prop({ type: Boolean, required: false, default: false })\r\n public verticalScroll: boolean;\r\n @Prop({ type: Boolean, required: false, default: true })\r\n public horizontalScroll: boolean;\r\n\r\n public get itemsContainerStyle(): object {\r\n let overflowY;\r\n let flexWrap;\r\n let overflowX = this.horizontalScroll ? 'auto' : 'hidden';\r\n if (this.verticalScroll) {\r\n overflowY = 'auto';\r\n flexWrap = 'wrap';\r\n }\r\n else {\r\n overflowY = 'hidden';\r\n flexWrap = 'nowrap';\r\n }\r\n return {\r\n 'overflow-y': overflowY,\r\n 'overflow-x': overflowX,\r\n 'flex-wrap': flexWrap\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./ItemPresenter.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./ItemPresenter.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ItemPresenter.vue?vue&type=template&id=39a51cfc&scoped=true&\"\nimport script from \"./ItemPresenter.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./ItemPresenter.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./ItemPresenter.vue.scss?vue&type=style&index=0&id=39a51cfc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"39a51cfc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:'toggle ' + _vm.toggleOpenClass + ' header-container',style:([_vm.computedStyle, {'pointer-events':'none'}])},[_c('div',{staticStyle:{\"pointer-events\":\"none\"}},[_vm._t(\"header\",null,{\"isOpen\":_vm.isOpened})],2),_c('div',{staticClass:\"content-container\",staticStyle:{\"pointer-events\":\"auto\"}},[_vm._t(\"content\",null,{\"dataContext\":_vm.dataContext})],2),(_vm.isOpened && _vm.closeOnBlur)?_c('div',{staticClass:\"toggle-background\",staticStyle:{\"pointer-events\":\"auto\"},on:{\"click\":_vm.onBlur}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { Component, Prop, UIElement } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'x-toggle'\r\n})\r\nexport default class Toggle extends UIElement {\r\n @Prop({ type: Boolean, required: false, default: true })\r\n public defaultValue: boolean;\r\n\r\n @Prop({ type: Boolean, required: false, default: false })\r\n public closeOnBlur: boolean;\r\n\r\n @Prop({ type: String, required: false, default: 'header' })\r\n public toggleElementId: string;\r\n\r\n @Prop({ type: Boolean, required: false, default: false })\r\n public scrollToElementOnOpen: boolean;\r\n\r\n public isOpened: boolean = false;\r\n\r\n public mounted(): void {\r\n this.isOpened = this.defaultValue;\r\n\r\n let element = this.$el.querySelector(`#${this.toggleElementId}`) || this.$el.firstChild;\r\n (element as HTMLElement).style.pointerEvents = 'auto';\r\n if (element) {\r\n element.addEventListener('click', () => { this.toggleOpening(); });\r\n }\r\n\r\n }\r\n\r\n public toggleOpening(): void {\r\n this.isOpened = !this.isOpened;\r\n if (this.isOpened && this.scrollToElementOnOpen) {\r\n let element = this.$el.querySelector(`#${this.toggleElementId}`) || this.$el.firstChild;\r\n if (element) {\r\n this.$nextTick(() => {\r\n (element as HTMLElement).scrollIntoView();\r\n });\r\n }\r\n }\r\n }\r\n\r\n public onBlur(): void {\r\n if (this.closeOnBlur) {\r\n this.isOpened = false;\r\n }\r\n }\r\n\r\n public get toggleOpenClass(): string {\r\n return this.isOpened ? 'opened' : 'closed';\r\n }\r\n\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./Toggle.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./Toggle.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Toggle.vue?vue&type=template&id=1efbc738&scoped=true&\"\nimport script from \"./Toggle.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./Toggle.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./Toggle.vue.scss?vue&type=style&index=0&id=1efbc738&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1efbc738\",\n null\n \n)\n\nexport default component.exports","import GridItem from 'Framework/Components/GridItem.vue';\r\nimport { PropSyncWithInternal, Serializable } from 'Framework/Components/Panel.Commons';\r\nimport { Component, UIElement } from 'Framework/Components/UIElement';\r\nimport { CreateElement, VNode } from 'vue';\r\n\r\n@Serializable()\r\n@Component({\r\n name: 'x-grid',\r\n components: {\r\n GridItem\r\n }\r\n})\r\nexport default class XGrid extends UIElement {\r\n public render(createElement: CreateElement, context: any): VNode {\r\n let children = null;\r\n if (this.$slots.default) {\r\n children = this.$slots.default.map(vnode => {\r\n if (vnode.componentOptions?.Ctor.prototype.hasOwnProperty('_gridItemMixin') || !vnode.tag) {\r\n return vnode;\r\n }\r\n else {\r\n return createElement(GridItem, {\r\n props: vnode.data.attrs\r\n }, [vnode]);\r\n }\r\n });\r\n }\r\n let result = createElement(\r\n 'div', // nom de balise\r\n {\r\n class: 'x-grid',\r\n style: this.computedGridStyle\r\n },\r\n //children\r\n children\r\n );\r\n return result;\r\n }\r\n\r\n public get computedGridStyle(): any {\r\n return {\r\n 'grid-columns': this.columnsDefinition(),\r\n 'grid-template-columns': this.columnsDefinition(),\r\n 'grid-rows': this.rowsDefinition(),\r\n 'grid-template-rows': this.rowsDefinition(),\r\n 'grid-column-gap': this._columnGap + 'px',\r\n 'grid-row-gap': this._rowGap + 'px',\r\n ...this.computedStyle\r\n };\r\n }\r\n\r\n public get children(): Array {\r\n return this.$children;\r\n }\r\n\r\n private measurementVerification(value) {\r\n let measurementVerifRegex = XGrid.MeasurementVerifRegex;\r\n if (measurementVerifRegex.test(value)) {\r\n // TODO : Reactiver quand le probleme de split (ci-dessous) sera réglé (ou pas suivant la décision prise)\r\n // return `${value.replace(this.getRegex, '$2$4')} `;\r\n return value;\r\n }\r\n return null;\r\n }\r\n\r\n private columnsDefinition(): string {\r\n let columnDefinitionResult = '';\r\n\r\n if (this._columnDefinitions) {\r\n let def = this._columnDefinitions.split(' ');\r\n for (let i = 0; i < def.length; i++) {\r\n switch (def[i]) {\r\n case '*': {\r\n columnDefinitionResult += 'minmax(0px, 1fr) ';//'1fr ';\r\n break;\r\n }\r\n case 'auto': {\r\n columnDefinitionResult += 'auto ';\r\n break;\r\n }\r\n default: {\r\n let verifiedMeasurement = this.measurementVerification(def[i]);\r\n if (verifiedMeasurement) {\r\n columnDefinitionResult += verifiedMeasurement;\r\n break;\r\n } else {\r\n throw new Error(\r\n `Error : wrong value on columnDefinition at parameter ${i + 1}`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < this._columnsCount; i++) {\r\n columnDefinitionResult += 'minmax(0px, 1fr) ';//'1fr ';\r\n }\r\n }\r\n return columnDefinitionResult.trim();\r\n }\r\n\r\n private rowsDefinition(): string {\r\n let rowDefinitionResult = '';\r\n\r\n if (this._rowDefinitions) {\r\n //TODO : Split seulement this.rowDefinitions sur les espaces qui ne sont pas suivis par 'px', '%' ou 'em'. Piste : 'new RegExp('\\s*(?!((px)|(\\%)|(em)))'\r\n let def = this._rowDefinitions.split(' ');\r\n for (let i = 0; i < def.length; i++) {\r\n switch (def[i]) {\r\n case '*': {\r\n rowDefinitionResult += 'minmax(0px, 1fr) ';//'1fr ';\r\n break;\r\n }\r\n case 'auto': {\r\n rowDefinitionResult += 'auto ';\r\n break;\r\n }\r\n default: {\r\n let verifiedMeasurement = this.measurementVerification(def[i]);\r\n if (verifiedMeasurement) {\r\n rowDefinitionResult += verifiedMeasurement;\r\n break;\r\n } else {\r\n throw new Error(\r\n `Error : wrong value on rowDefinition at parameter ${i + 1}`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < this._rowsCount; i++) {\r\n rowDefinitionResult += 'minmax(0px, 1fr) ';//'1fr ';\r\n }\r\n }\r\n return rowDefinitionResult.trim();\r\n }\r\n\r\n private static readonly MeasurementVerifRegex: RegExp\r\n = /\\d+(?:\\.\\d+)?(?:px|em|rem|%|vw|vh|vmin|vmax|pt|cm|mm|in|ex|ch)?/;\r\n\r\n @PropSyncWithInternal('rowDefinitions', { type: String, required: false, default: null })\r\n public _rowDefinitions: string;\r\n @PropSyncWithInternal('columnDefinitions', { type: String, required: false, default: null })\r\n public _columnDefinitions: string;\r\n @PropSyncWithInternal('rowsCount', { type: Number, required: false, default: 1 })\r\n public _rowsCount: number;\r\n @PropSyncWithInternal('columnsCount', { type: Number, required: false, default: 1 })\r\n public _columnsCount: number;\r\n @PropSyncWithInternal('columnGap', { type: Number, required: false, default: 0 })\r\n public _columnGap: number;\r\n @PropSyncWithInternal('rowGap', { type: Number, required: false, default: 0 })\r\n public _rowGap: number;\r\n}\r\n","var render, staticRenderFns\nimport script from \"./XGrid.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./XGrid.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./XGrid.vue.scss?vue&type=style&index=0&id=8ea6cab8&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8ea6cab8\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./XGrid.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./XGrid.vue.ts?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('video',{style:(_vm.computedStyle),attrs:{\"src\":_vm._source,\"poster\":_vm._preview,\"controls\":_vm._showControls,\"autoplay\":_vm._autoPlay},domProps:{\"muted\":_vm._muted}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { editorBrowsable, JsonProperty, PropSyncWithInternal } from 'Framework/Components/Panel.Commons';\r\nimport { UIElement } from 'Framework/Components/UIElement';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component({ name: 'x-media-player' })\r\nexport default class XMediaPlayer extends UIElement {\r\n @JsonProperty({ className: 'x-media-player', name: 'showControls', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Boolean' })\r\n @PropSyncWithInternal('showControls', { type: Boolean, required: false, default: false })\r\n public _showControls: boolean;\r\n\r\n @JsonProperty({ className: 'x-media-player', name: 'source', type: String })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('source', { type: String, required: false, default: null })\r\n public _source: string;\r\n\r\n @JsonProperty({ className: 'x-media-player', name: 'preview', type: String })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('preview', { type: String, required: false, default: null })\r\n public _preview: string;\r\n\r\n @JsonProperty({ className: 'x-media-player', name: 'autoPlay', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Boolean' })\r\n @PropSyncWithInternal('autoPlay', { type: Boolean, required: false, default: true })\r\n public _autoPlay: boolean;\r\n\r\n @JsonProperty({ className: 'x-media-player', name: 'muted', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Boolean' })\r\n @PropSyncWithInternal('muted', { type: Boolean, required: false, default: true })\r\n public _muted: boolean;\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./XMediaPlayer.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./XMediaPlayer.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./XMediaPlayer.vue?vue&type=template&id=5f225317&\"\nimport script from \"./XMediaPlayer.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./XMediaPlayer.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { Component, UIElement } from 'Framework/Components/UIElement';\r\nimport { CreateElement, VNode } from 'vue';\r\n\r\n@Component({\r\n name: 'x-grid-item'\r\n})\r\nexport default class GridItem extends UIElement {\r\n public render(createElement: CreateElement, context: any): VNode {\r\n let result = createElement(\r\n 'div', // nom de balise\r\n {\r\n class: 'x-grid-item',\r\n style: this.computedStyle\r\n },\r\n this.$slots.default\r\n );\r\n return result;\r\n }\r\n}\r\n","var render, staticRenderFns\nimport script from \"./GridItem.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./GridItem.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./GridItem.vue.scss?vue&type=style&index=0&id=12b3323c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12b3323c\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./GridItem.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./GridItem.vue.ts?vue&type=script&lang=ts&\"","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","import {\r\n AnalyticPermissions,\r\n AuditLogPermissions,\r\n DomainNameSystemPermissions,\r\n DrivePermissions,\r\n UserPermissions as EnumUserPermissions,\r\n GroupPermissions,\r\n IconPermissions,\r\n IdentityProviderPermissions,\r\n PlatformPermissions,\r\n ProjectPermissions,\r\n RolePermissions,\r\n SettingPermissions,\r\n SmartObjectPermissions,\r\n SubscriptionPermissions,\r\n SystemInformationPermissions,\r\n TagPermissions,\r\n WorkerPermissions\r\n} from 'Api/Enums/Permissions';\r\n\r\nexport class UserPermissions {\r\n public platform: PlatformPermissions;\r\n public subscription: SubscriptionPermissions;\r\n public role: RolePermissions;\r\n public drive: DrivePermissions;\r\n public user: EnumUserPermissions;\r\n public group: GroupPermissions;\r\n public project: ProjectPermissions;\r\n public setting: SettingPermissions;\r\n public analytic: AnalyticPermissions;\r\n public domainNameSystem: DomainNameSystemPermissions;\r\n public systemInformation: SystemInformationPermissions;\r\n public identityProvider: IdentityProviderPermissions;\r\n public auditLog: AuditLogPermissions;\r\n public tag: TagPermissions;\r\n public worker: WorkerPermissions;\r\n public icon: IconPermissions;\r\n public smartObject: SmartObjectPermissions;\r\n}\r\n","import { ILoginResponse } from 'Api/Dto/Authentication';\r\nimport { UserPermissions } from 'Api/UserPermissions';\r\n\r\nexport class User {\r\n static fromLoginResponse(login: ILoginResponse): User {\r\n let user = new User();\r\n\r\n Object.assign(user, login.user);\r\n Object.assign(user.permissions, login.role);\r\n\r\n return user;\r\n }\r\n\r\n constructor() {\r\n this.permissions = new UserPermissions();\r\n }\r\n\r\n public get displayName(): string {\r\n if (this.firstName && this.lastName) {\r\n return `${this.firstName} ${this.lastName}`;\r\n }\r\n else if (this.firstName) {\r\n return this.firstName;\r\n }\r\n else if (this.lastName) {\r\n return this.lastName;\r\n }\r\n return this.name;\r\n }\r\n\r\n public get isSignedIn(): boolean {\r\n return this.id > 0;\r\n }\r\n\r\n public id: number;\r\n\r\n public firstName: string;\r\n public lastName: string;\r\n public name: string;\r\n public email: string;\r\n\r\n public avatarGuid: string;\r\n\r\n public resetPasswordNeeded: boolean;\r\n\r\n public permissions: UserPermissions;\r\n}\r\n","import { ILoginResponse } from 'Api/Dto/Authentication';\r\nimport { IPlatformSettings } from 'Api/Dto/PlatformSettings.public';\r\nimport { MenuStateType } from 'Api/Enums/MenuStateType';\r\nimport { SocialNetworks } from 'Api/Enums/SocialNetworks';\r\nimport { ViewerStateType } from 'Api/Enums/ViewerStateType';\r\nimport { User } from 'Api/User';\r\nimport { injectable } from 'inversify';\r\nimport 'reflect-metadata';\r\nimport { Vue } from 'vue-property-decorator';\r\n\r\nexport interface IAppInformation {\r\n informationalVersion: string;\r\n copyright: string;\r\n version: string;\r\n}\r\n\r\nexport interface IAppLogin extends ILoginResponse {\r\n apiUri: string;\r\n}\r\n\r\nexport enum ExperimentalFeature {\r\n BabylonProjectMapEditor = 'BabylonProjectMapEditor'\r\n}\r\n\r\nexport class ExperimentalFeatures {\r\n public hasFlag(feature: ExperimentalFeature): boolean {\r\n this._loadFeatures();\r\n\r\n return this._features.has(feature);\r\n }\r\n\r\n public setFlag(feature: ExperimentalFeature, value: boolean): void {\r\n this._loadFeatures();\r\n\r\n if (value) {\r\n this._features.add(feature);\r\n }\r\n else {\r\n this._features.delete(feature);\r\n }\r\n\r\n this._save();\r\n }\r\n\r\n private _loadFeatures(): void {\r\n if (!this._isLoaded) {\r\n const features: Array = JSON.parse(localStorage.getItem(ExperimentalFeatures._key)) ?? [];\r\n this._features = new Set(features);\r\n\r\n this._isLoaded = true;\r\n }\r\n }\r\n\r\n private _save(): void {\r\n const features = Array.from(this._features);\r\n localStorage.setItem(ExperimentalFeatures._key, JSON.stringify(features));\r\n }\r\n\r\n private _features: Set;\r\n private _isLoaded: boolean = false;\r\n\r\n private static readonly _key = 'Sbs.Vison.Experimental';\r\n}\r\n\r\n@injectable()\r\nexport class AppContext {\r\n constructor() {\r\n this.user = new User();\r\n\r\n if (this.login) {\r\n this.user = User.fromLoginResponse(this.login);\r\n this.apiUri = this.login.apiUri;\r\n }\r\n\r\n this.settings = {\r\n general: {\r\n availableSocialNetworks: SocialNetworks.None,\r\n isMenuStateOverridable: false,\r\n isThemeOverridable: false\r\n },\r\n explore: {\r\n defaultViewerState: ViewerStateType.Normal,\r\n isMapVisible: false,\r\n isDefaultViewerStateOverridable: false\r\n },\r\n drive: {\r\n forbiddenExtensions: [],\r\n maxFileSize: 0\r\n },\r\n login: {\r\n allowCreateAccount: false,\r\n allowPasswordReset: false,\r\n allowSelfDelete: false\r\n },\r\n mapProvider: null,\r\n dialogs: {\r\n small: {\r\n width: '35vw',\r\n height: '35vh'\r\n },\r\n medium: {\r\n width: '50vw',\r\n height: '50vh'\r\n },\r\n large: {\r\n width: '80vw',\r\n height: '80vh'\r\n },\r\n auto: {\r\n width: 'auto',\r\n height: 'auto'\r\n }\r\n }\r\n };\r\n }\r\n\r\n public get isStandalone(): boolean {\r\n return this.standaloneWrapper != null;\r\n }\r\n\r\n public get standaloneWrapper(): any {\r\n return window['standaloneWrapper'] ?? null;\r\n }\r\n\r\n public get login(): IAppLogin {\r\n let login = localStorage.getItem('login')\r\n\r\n if (!login) {\r\n return null;\r\n }\r\n\r\n const result = JSON.parse(login) as IAppLogin;\r\n\r\n let dateNow = new Date();\r\n if (!result || dateNow > new Date(result.expiration)) {\r\n return null;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public set login(value: IAppLogin) {\r\n if (value) {\r\n localStorage.setItem('login', JSON.stringify(value));\r\n this.user = User.fromLoginResponse(value);\r\n }\r\n else {\r\n localStorage.removeItem('login');\r\n this.user = Vue.observable(new User());\r\n }\r\n }\r\n\r\n public get isDarkTheme(): boolean {\r\n return this.theme.startsWith('dark-');\r\n }\r\n\r\n public codeCulture: string = null;\r\n\r\n public baseUri: string | (() => string) = '';\r\n\r\n public apiUri: string;\r\n\r\n public homePage: string = null;\r\n\r\n public platformId?: number = null;\r\n\r\n public subscriptionId?: number = null;\r\n\r\n public information: IAppInformation = null;\r\n\r\n\r\n public user: User = null;\r\n\r\n public isMobile: boolean = false;\r\n\r\n public theme: string = null;\r\n\r\n public antiForgeryToken: string = null;\r\n\r\n public menuState: MenuStateType = MenuStateType.Open;\r\n\r\n public settings: IPlatformSettings;\r\n\r\n public subscriptionPlugins: { [name: string]: { isEnabled: boolean, options: string } } = {};\r\n\r\n public isDedicatedPlatform: boolean;\r\n\r\n public organizationName: string;\r\n\r\n public experimentalFeatures: ExperimentalFeatures = new ExperimentalFeatures();\r\n}\r\n","import { IMapSubrouteDto } from 'Api/Contracts/Dtos/GeoRouting/IMapSubrouteDto';\r\n\r\nexport enum CoordinateSystem {\r\n Cartesian,\r\n Geographic\r\n}\r\n\r\nexport interface IGeoRoutingResultDto {\r\n isRouteFound: boolean;\r\n distance: number;\r\n route: Array;\r\n coordinateSystem: CoordinateSystem;\r\n}\r\n","export * from 'Api/Contracts/Dtos/Drive/ISymlinkInputDto';\r\nexport * from 'Api/Contracts/Dtos/GeoRouting';\r\n\r\nimport { JsonObject, JsonSchemaDto } from 'Api/Contracts/Dtos/SmartObject';\r\nimport { CreativeCommonsLicense } from 'Api/Dto/CreativeCommonsLicense';\r\nimport { File as DriveFile, IFileShare, WorkerTaskState } from 'Api/Dto/Drive';\r\nimport { CoordinateSystem, ICoordinates } from 'Api/Dto/Project';\r\nimport { IIdentity } from 'Api/Dto/Shares';\r\nimport { ITooltipStyle, RenderType } from 'Framework/Components/Controls/XView/Core';\r\nimport { GeoJSON, MultiPoint, Point } from 'geojson';\r\nimport { RE2JS } from 're2js';\r\n\r\nexport enum ManipulationState {\r\n None,\r\n Copy,\r\n Cut\r\n}\r\n\r\nexport enum SortOptions {\r\n name_asc,\r\n name_desc,\r\n date_asc,\r\n date_desc,\r\n connection_asc,\r\n connection_desc,\r\n status_asc,\r\n status_desc,\r\n url_asc,\r\n url_desc\r\n}\r\n\r\nexport interface IUpdateProjectItemViewModel {\r\n projectId: number;\r\n itemId: number;\r\n properties: { [key: string]: any };\r\n}\r\n\r\nexport class EventAction {\r\n public constructor(\r\n actionName: string,\r\n name: string,\r\n description: string,\r\n callToAction: string,\r\n regex: RegExp | string,\r\n linkWithAssetType: Array = null\r\n ) {\r\n this.actionName = actionName;\r\n this.name = name;\r\n this.description = description;\r\n this.callToAction = callToAction;\r\n this.regex = regex;\r\n this.linkWithAssetType = linkWithAssetType;\r\n }\r\n\r\n public parseAction(action: string, assetItem?: AssetItem): boolean {\r\n return false;\r\n }\r\n\r\n public toString(assetItem?: AssetItem): string {\r\n return '';\r\n }\r\n\r\n public isValid(): boolean {\r\n return false;\r\n }\r\n\r\n protected getArguments(action: string): Array {\r\n if (EventAction._isNativeRegExp(this.regex)) {\r\n return this.regex.exec(action);\r\n }\r\n\r\n const reg: RE2JS = RE2JS.compile(this.regex, RE2JS.DOTALL);\r\n const matcher = reg.matcher(action);\r\n\r\n return matcher.find()\r\n ? Array.from(Array(reg.groupCount() + 1))\r\n .map((_, index) => matcher.group(index))\r\n : [];\r\n }\r\n\r\n private static _isNativeRegExp(regex: RegExp | string): regex is RegExp {\r\n return typeof regex !== 'string';\r\n }\r\n\r\n public actionName: string;\r\n public name: string;\r\n public description: string;\r\n public callToAction: string;\r\n public regex: RegExp | string;\r\n public linkWithAssetType: Array;\r\n\r\n public static hotspotAvailableEvents: Array<{ key: string, eventName: string }> = [\r\n { key: 'Clic', eventName: 'onClick' },\r\n //'Double clic',\r\n //'Mouse Enter',\r\n //'Mouse Leave',\r\n //'Enter in frustum',\r\n //'Leave frustum',\r\n\r\n //'Double clic',\r\n //'Drag enter',\r\n //'Drag leave',\r\n //'Drag over',\r\n //'Drop',\r\n //'Key Down',\r\n //'Key Up',\r\n //'Loaded',\r\n //'Mouse Down',\r\n //'Clic Gauche Down',\r\n //'Clic Gauche Up',\r\n //'Clic Droit Down',\r\n //'Clic Droit Up',\r\n //'Expanded'\r\n ];\r\n\r\n public static projectAvailableEvents: Array<{ key: string, eventName: string }> = [\r\n { key: 'Loaded', eventName: 'onLoaded' },\r\n ];\r\n\r\n public static panoramaGroupAvailableEvents: Array<{ key: string, eventName: string }> = [\r\n { key: 'Loaded', eventName: 'onLoaded' },\r\n ];\r\n\r\n public static panoramaVersionAvailableEvents: Array<{ key: string, eventName: string }> = [\r\n { key: 'Loaded', eventName: 'onLoaded' },\r\n ];\r\n}\r\n\r\nexport class EventActionGroup extends EventAction {\r\n\r\n public constructor(actionName: string,\r\n name: string,\r\n actions: Array) {\r\n super(actionName, name, null, null, null);\r\n this.eventActions = actions;\r\n }\r\n\r\n public eventActions: Array;\r\n}\r\n\r\nexport enum AssetItemType {\r\n Normal = 0,\r\n Directory = 1,\r\n Project = 2,\r\n File = 4,\r\n Link = 8,\r\n Hotspot = 16,\r\n PanoramaVersion = 32,\r\n ProjectMap = 64,\r\n FileMap = 128,\r\n StreetMap = 256,\r\n PanoramaItemLink = 512,\r\n Navigation = 1024,\r\n MapArea = 2048,\r\n Template = 4096,\r\n PanoramaGroup = 8192,\r\n SmartObject = 16384,\r\n}\r\n\r\nexport enum FormType {\r\n Rectangle = 1, Circle = 2, Polygon = 3\r\n}\r\nexport enum NavigationType {\r\n None = 0, List = 1, Map = 2\r\n}\r\nexport enum MapSize {\r\n Hidden = 1, Small = 2, Medium = 4, Large = 8\r\n}\r\nexport enum StreetMapType {\r\n GoogleMaps = 1, OpenStreetMap = 2, BingMap = 4\r\n}\r\n\r\nexport enum SearchOption {\r\n TopDirectoryOnly,\r\n AllDirectories\r\n}\r\n\r\nexport interface IIconRenderer {\r\n type: string,\r\n icon: string,\r\n color: string,\r\n size: string,\r\n tooltip: string,\r\n tooltipStyle?: ITooltipStyle\r\n}\r\n\r\nexport interface IShapeRenderer {\r\n type: string,\r\n color: string,\r\n tooltip: string,\r\n formType: FormType,\r\n hoverColor: string,\r\n selectedColor: string,\r\n stroke: { color: string, width: number },\r\n tooltipStyle?: ITooltipStyle\r\n}\r\n\r\nexport interface ITextRenderer {\r\n type: 'textRenderer';\r\n text: string;\r\n color: string;\r\n size: number;\r\n tooltip: string;\r\n tooltipStyle?: ITooltipStyle;\r\n}\r\n\r\nexport type IRenderer = IIconRenderer | IShapeRenderer | ITextRenderer;\r\n\r\nexport interface IPanoramaLocation {\r\n worldCoordinates?: Point;\r\n localCoordinates?: Point;\r\n}\r\n\r\nexport class RendererHelper {\r\n public static isIconRenderer(renderer: IRenderer): renderer is IIconRenderer {\r\n return renderer\r\n && (renderer as IIconRenderer).type !== undefined\r\n && (renderer as IIconRenderer).type === 'iconRenderer';\r\n }\r\n\r\n public static isShapeRenderer(renderer: IRenderer): renderer is IShapeRenderer {\r\n return renderer\r\n && (renderer as IIconRenderer).type !== undefined\r\n && (renderer as IIconRenderer).type === 'shapeRenderer';\r\n }\r\n\r\n public static isTextRenderer(renderer: IRenderer): renderer is ITextRenderer {\r\n return (renderer as ITextRenderer).type === 'textRenderer';\r\n }\r\n}\r\n\r\nexport interface IOrderedAssetItem {\r\n order: number;\r\n}\r\n\r\nexport class AssetItem {\r\n public constructor(type: AssetItemType = AssetItemType.Normal) {\r\n this.assetItemId = 0;\r\n this.name = null;\r\n this.parentId = null;\r\n this.type = type;\r\n }\r\n\r\n public static fromJson(json: any): AssetItem {\r\n let assetItem: AssetItem = new AssetItem();\r\n assetItem.assetItemId = json.assetItemId;\r\n assetItem.name = json.name;\r\n assetItem.parentId = json.parentId;\r\n assetItem.type = json.type;\r\n assetItem.events = json.events || {};\r\n\r\n return assetItem;\r\n }\r\n\r\n public static jsonToArray(value: any): Array {\r\n if (Array.isArray(value)) {\r\n let array = new Array();\r\n for (let v of value) {\r\n array.push(AssetItem.jsonToObject(v));\r\n }\r\n return array;\r\n }\r\n return [];\r\n }\r\n\r\n public static jsonToObject(value: any): T {\r\n switch (value?.type) {\r\n case AssetItemType.StreetMap:\r\n return StreetMap.fromJson(value) as unknown as T;\r\n case AssetItemType.PanoramaItemLink:\r\n return PanoramaItemLink.fromJson(value) as unknown as T;\r\n case AssetItemType.FileMap:\r\n return FileMap.fromJson(value) as unknown as T;\r\n case AssetItemType.Navigation:\r\n return Navigation.fromJson(value) as unknown as T;\r\n case AssetItemType.PanoramaVersion:\r\n return AssetPanoramaVersion.fromJson(value) as unknown as T;\r\n case AssetItemType.Project:\r\n return AssetProject.fromJson(value) as unknown as T;\r\n case AssetItemType.Template:\r\n return AssetTemplate.fromJson(value) as unknown as T;\r\n case AssetItemType.Link:\r\n return AssetLink.fromJson(value) as unknown as T;\r\n case AssetItemType.Hotspot:\r\n return AssetHotspot.fromJson(value) as unknown as T;\r\n case AssetItemType.MapArea:\r\n return AssetMapArea.fromJson(value) as unknown as T;\r\n case AssetItemType.File:\r\n return AssetFile.fromJson(value) as unknown as T;\r\n case AssetItemType.Directory:\r\n return AssetDirectory.fromJson(value) as unknown as T;\r\n case AssetItemType.Normal:\r\n return AssetFile.fromJson(value) as unknown as T;\r\n case AssetItemType.ProjectMap:\r\n return ProjectMap.fromJson(value) as unknown as T;\r\n case AssetItemType.PanoramaGroup:\r\n return AssetPanoramaGroup.fromJson(value) as unknown as T;\r\n case AssetItemType.SmartObject:\r\n return SmartObjectDto.fromJson(value) as unknown as T;\r\n default:\r\n return value;\r\n }\r\n }\r\n\r\n public get isSystem(): boolean {\r\n return this._reservedNames.includes(this.name);\r\n }\r\n\r\n private readonly _reservedNames: Array = [\r\n AssetDirectory.DefaultSmartObjectsDirectory\r\n ];\r\n\r\n public assetItemId: number;\r\n public name: string;\r\n public parentId?: number;\r\n public parent?: AssetDirectory;\r\n public type: AssetItemType;\r\n public events: { [key: string]: string };\r\n}\r\n\r\nexport class AssetFile extends AssetItem {\r\n public constructor(type: AssetItemType = AssetItemType.File) {\r\n super(type);\r\n }\r\n\r\n public static fromJson(json: any): AssetFile {\r\n let assetFile: AssetFile = Object.assign(new AssetFile(), AssetItem.fromJson(json));\r\n assetFile.file = json.file;\r\n\r\n if (assetFile.file) {\r\n assetFile.file.state = {\r\n creationTimeUtc: new Date(),\r\n description: null,\r\n filePathGuid: assetFile.file.guid,\r\n taskId: 0,\r\n resultId: 0,\r\n state: WorkerTaskState.Created,\r\n typeOfBody: null,\r\n typeOfHeader: null,\r\n lastExecutedTimeUtc: null\r\n };\r\n }\r\n\r\n return assetFile;\r\n }\r\n\r\n public file: DriveFile;\r\n}\r\n\r\nexport class AssetDirectory extends AssetFile {\r\n public constructor(type: AssetItemType = AssetItemType.Directory) {\r\n super(type);\r\n }\r\n\r\n public static fromJson(json: any): AssetDirectory {\r\n let assetDirectory: AssetDirectory = Object.assign(new AssetDirectory(), AssetFile.fromJson(json));\r\n assetDirectory.children = AssetItem.jsonToArray(json.children);\r\n\r\n assetDirectory.children.forEach(c => {\r\n c.parent = assetDirectory;\r\n });\r\n\r\n return assetDirectory;\r\n }\r\n\r\n public addChildren(...children: Array): void {\r\n this.children.push(...children);\r\n }\r\n\r\n public removeChildren(...children: Array): void {\r\n this.children = this.children.filter(c => !children.includes(c));\r\n }\r\n\r\n public get isDefaultSmartObjectDirectory(): boolean {\r\n return this.name == AssetDirectory.DefaultSmartObjectsDirectory;\r\n }\r\n\r\n public static readonly DefaultSmartObjectsDirectory: string = '$AssetItems.Project.SmartObjects';\r\n\r\n public children: Array;\r\n}\r\n\r\nexport interface ICompassConfiguration {\r\n background: string,\r\n foreground: string,\r\n border: string,\r\n borderThickness: number,\r\n arcBackground: string,\r\n arcBorder: string,\r\n arcBorderThickness: number,\r\n baseArcBackground: string,\r\n baseArcBorder: string,\r\n baseArcBorderThickness: number\r\n}\r\n\r\nexport class Navigation extends AssetDirectory {\r\n public constructor() {\r\n super(AssetItemType.Navigation);\r\n }\r\n\r\n public static fromJson(json: any): Navigation {\r\n let assetNavigation: Navigation = Object.assign(new Navigation(), AssetDirectory.fromJson(json));\r\n assetNavigation.navigationType = json.navigationType;\r\n assetNavigation.compassConfiguration = json.compassConfiguration;\r\n\r\n if (assetNavigation.navigationType == NavigationType.List) {\r\n assetNavigation.children.sort((a: PanoramaItemLink, b: PanoramaItemLink) => a.order - b.order);\r\n }\r\n\r\n assetNavigation.children.forEach(c => {\r\n c.parent = assetNavigation;\r\n });\r\n\r\n return assetNavigation;\r\n }\r\n\r\n public navigationType: NavigationType;\r\n public compassConfiguration: ICompassConfiguration;\r\n}\r\n\r\nexport class ProjectMap extends AssetDirectory {\r\n public constructor(type: AssetItemType = AssetItemType.ProjectMap) {\r\n super(type);\r\n }\r\n\r\n public static fromJson(json: any): ProjectMap {\r\n let assetProjectMap: ProjectMap = Object.assign(new ProjectMap(), AssetDirectory.fromJson(json));\r\n\r\n assetProjectMap.children.forEach(c => {\r\n c.parent = assetProjectMap;\r\n });\r\n\r\n return assetProjectMap;\r\n }\r\n}\r\n\r\nexport interface IMapLocation {\r\n itemCoordinates: MultiPoint;\r\n worldCoordinates?: MultiPoint;\r\n localCoordinates?: MultiPoint;\r\n}\r\n\r\nexport class FileMap extends ProjectMap {\r\n public constructor() {\r\n super(AssetItemType.FileMap);\r\n }\r\n\r\n public static fromJson(json: any): FileMap {\r\n let assetFileMap: FileMap = Object.assign(new FileMap(), ProjectMap.fromJson(json));\r\n assetFileMap.isDefault = json.isDefault;\r\n assetFileMap.location = json.location;\r\n\r\n assetFileMap.children.forEach(c => {\r\n c.parent = assetFileMap;\r\n });\r\n\r\n return assetFileMap;\r\n }\r\n\r\n public isDefault: boolean;\r\n public location: IMapLocation;\r\n}\r\n\r\nexport class StreetMap extends ProjectMap {\r\n public constructor() {\r\n super(AssetItemType.StreetMap);\r\n }\r\n\r\n public static fromJson(json: any): StreetMap {\r\n let assetStreetMap: StreetMap = Object.assign(new StreetMap(), ProjectMap.fromJson(json));\r\n assetStreetMap.coordinates = json.coordinates;\r\n assetStreetMap.provider = json.provider;\r\n\r\n assetStreetMap.children.forEach(c => {\r\n c.parent = assetStreetMap;\r\n });\r\n\r\n return assetStreetMap;\r\n }\r\n\r\n public coordinates: string;\r\n public provider: StreetMapType;\r\n}\r\n\r\nexport class AssetProject extends AssetDirectory {\r\n public constructor(type: AssetItemType = AssetItemType.Project) {\r\n super(type);\r\n }\r\n\r\n public static fromJson(json: any): AssetProject {\r\n let assetLink: AssetProject = Object.assign(new AssetProject(), AssetDirectory.fromJson(json));\r\n assetLink.projectId = json.projectId;\r\n assetLink.fileShares = AssetItem.jsonToArray(json.fileShares);\r\n\r\n assetLink.children.forEach(c => {\r\n c.parent = assetLink;\r\n });\r\n\r\n return assetLink;\r\n }\r\n\r\n public projectId: number;\r\n public project: Project;\r\n public fileShares: Array;\r\n}\r\n\r\nexport class AssetTemplate extends AssetProject {\r\n public constructor() {\r\n super(AssetItemType.Template);\r\n }\r\n\r\n public static fromJson(json: any): AssetTemplate {\r\n let assetTemplate: AssetTemplate = Object.assign(new AssetTemplate(), AssetProject.fromJson(json));\r\n assetTemplate.description = json.description || null;\r\n assetTemplate.project = AssetItem.jsonToObject(json.project);\r\n\r\n assetTemplate.children.forEach(c => {\r\n c.parent = assetTemplate;\r\n });\r\n\r\n return assetTemplate;\r\n }\r\n\r\n public description: string;\r\n}\r\n\r\nexport class AssetLink extends AssetItem {\r\n public constructor(type: AssetItemType = AssetItemType.Link) {\r\n super(type);\r\n }\r\n\r\n public static fromJson(json: any): AssetLink {\r\n let assetLink: AssetLink = Object.assign(new AssetLink(), AssetItem.fromJson(json));\r\n assetLink.assetItemLinkedId = json.assetItemLinkedId ?? null;\r\n\r\n return assetLink;\r\n }\r\n\r\n public assetItemLinkedId?: number;\r\n}\r\n\r\nexport class PanoramaItemLink extends AssetLink implements IOrderedAssetItem {\r\n public constructor() {\r\n super(AssetItemType.PanoramaItemLink);\r\n }\r\n\r\n public static fromJson(json: any): PanoramaItemLink {\r\n let assetPanoramaItemLink: PanoramaItemLink = Object.assign(new PanoramaItemLink(), AssetLink.fromJson(json));\r\n assetPanoramaItemLink.order = json.order;\r\n\r\n return assetPanoramaItemLink;\r\n }\r\n\r\n public static fromAssetPanorama(assetPanorama: AssetPanoramaGroup, parentId: number, order: number): PanoramaItemLink {\r\n let link = new PanoramaItemLink();\r\n link.name = assetPanorama.name;\r\n link.parentId = parentId;\r\n link.assetItemLinkedId = assetPanorama.assetItemId;\r\n link.order = order;\r\n\r\n return link;\r\n }\r\n\r\n public order: number;\r\n}\r\n\r\nexport class AssetHotspot extends AssetLink {\r\n public constructor(type: AssetItemType = AssetItemType.Hotspot) {\r\n super(type);\r\n }\r\n\r\n public static fromJson(json: any): AssetHotspot {\r\n let assetHotspot: AssetHotspot = Object.assign(new AssetHotspot(), AssetLink.fromJson(json));\r\n assetHotspot.coordinateSystem = json.coordinateSystem;\r\n assetHotspot.coordinates = json.coordinates;\r\n assetHotspot.content = json.content;\r\n\r\n return assetHotspot;\r\n }\r\n\r\n public coordinateSystem: CoordinateSystem;\r\n public coordinates: Array;\r\n public content: IRenderer;\r\n}\r\n\r\nexport class AssetMapArea extends AssetHotspot {\r\n public constructor() {\r\n super(AssetItemType.MapArea);\r\n }\r\n\r\n public static fromJson(json: any): AssetMapArea {\r\n let assetAssetMapArea: AssetMapArea = Object.assign(new AssetMapArea(), AssetHotspot.fromJson(json));\r\n assetAssetMapArea.areaCoordinates = JSON.stringify(json.areaCoordinates);\r\n\r\n return assetAssetMapArea;\r\n }\r\n\r\n public areaCoordinates: string;\r\n declare public content: IShapeRenderer;\r\n}\r\n\r\nexport class AssetPanoramaVersion extends AssetDirectory implements IOrderedAssetItem {\r\n public constructor() {\r\n super(AssetItemType.PanoramaVersion);\r\n }\r\n\r\n public static fromJson(json: any): AssetPanoramaVersion {\r\n let assetAssetPanorama: AssetPanoramaVersion = Object.assign(new AssetPanoramaVersion(), AssetDirectory.fromJson(json));\r\n assetAssetPanorama.renderType = json.renderType;\r\n assetAssetPanorama.startOrientation = json.startOrientation;\r\n assetAssetPanorama.northOrientation = json.northOrientation;\r\n assetAssetPanorama.offset = json.offset;\r\n assetAssetPanorama.order = json.order;\r\n assetAssetPanorama.location = json.location;\r\n\r\n assetAssetPanorama.children.forEach(c => {\r\n c.parent = assetAssetPanorama;\r\n });\r\n\r\n return assetAssetPanorama;\r\n }\r\n\r\n public renderType: RenderType;\r\n public startOrientation: ICoordinates;\r\n public northOrientation: number;\r\n public offset: number;\r\n public order: number;\r\n public location: IPanoramaLocation;\r\n}\r\n\r\nexport class AssetPanoramaGroup extends AssetDirectory {\r\n public constructor() {\r\n super(AssetItemType.PanoramaGroup);\r\n }\r\n\r\n static fromJson(json: any): AssetPanoramaGroup {\r\n let assetAssetPanoramaGroup: AssetPanoramaGroup = Object.assign(new AssetPanoramaGroup(), AssetDirectory.fromJson(json));\r\n assetAssetPanoramaGroup.defaultVersionId = json.defaultVersionId;\r\n assetAssetPanoramaGroup.hotspots = AssetItem.jsonToArray(json.hotspots);\r\n\r\n assetAssetPanoramaGroup.children.forEach(c => {\r\n c.parent = assetAssetPanoramaGroup;\r\n });\r\n\r\n assetAssetPanoramaGroup.hotspots.forEach(h => {\r\n h.parent = assetAssetPanoramaGroup;\r\n });\r\n\r\n return assetAssetPanoramaGroup;\r\n }\r\n\r\n public getDefaultPanoramaVersion(currentVersion?: string): AssetPanoramaVersion {\r\n const panoramaVersions = this.children as Array;\r\n\r\n return panoramaVersions.find(pv => pv.name == currentVersion)\r\n ?? panoramaVersions.find(pv => pv.assetItemId == this.defaultVersionId)\r\n ?? null;\r\n }\r\n\r\n public addChildren(...children: Array): void {\r\n const panoramaVersions: AssetFile[] = children.filter(\r\n (c: AssetItem): c is AssetFile => c instanceof AssetFile);\r\n\r\n const hotspots: AssetHotspot[] = children.filter(\r\n (c: AssetItem): c is AssetHotspot => c instanceof AssetHotspot);\r\n\r\n this.children.push(...panoramaVersions);\r\n this.hotspots.push(...hotspots);\r\n }\r\n\r\n public removeChildren(...children: Array): void {\r\n this.hotspots = this.hotspots.filter(h => !children.includes(h));\r\n this.children = this.children.filter(c => !children.includes(c));\r\n }\r\n\r\n public defaultVersionId?: number;\r\n public hotspots: Array;\r\n}\r\n\r\nexport class SmartObjectDto extends AssetItem {\r\n public constructor() {\r\n super(AssetItemType.SmartObject);\r\n }\r\n\r\n public static fromJson(json: any): SmartObjectDto {\r\n const instance = Object.assign(new SmartObjectDto(), AssetItem.fromJson(json));\r\n instance.dataSource = json.dataSource;\r\n instance.displayPropertyPath = json.displayPropertyPath;\r\n instance.schema = json.schema;\r\n\r\n return instance;\r\n }\r\n\r\n public dataSource: T;\r\n public displayPropertyPath?: string;\r\n public schema?: JsonSchemaDto;\r\n}\r\n\r\nexport const AssetItemSorter = (x: AssetItem, y: AssetItem): number => {\r\n const xType = x.type;\r\n const yType = y.type;\r\n\r\n if (xType != yType) {\r\n if (xType == AssetItemType.Project) {\r\n return -1;\r\n }\r\n if (yType == AssetItemType.Project) {\r\n return 1;\r\n }\r\n\r\n if (xType == AssetItemType.Navigation) {\r\n return -1;\r\n }\r\n if (yType == AssetItemType.Navigation) {\r\n return 1;\r\n }\r\n\r\n if (xType == AssetItemType.Directory) {\r\n return -1;\r\n }\r\n if (yType == AssetItemType.Directory) {\r\n return 1;\r\n }\r\n }\r\n\r\n if (isOrderedAssetItem(x) && isOrderedAssetItem(y)) {\r\n return x.order - y.order;\r\n }\r\n\r\n return x.name.localeCompare(y.name);\r\n}\r\n\r\nfunction isOrderedAssetItem(assetItem: any): assetItem is IOrderedAssetItem {\r\n return 'order' in assetItem;\r\n}\r\n\r\nexport function isFileMap(assetItem: AssetItem): assetItem is FileMap {\r\n return assetItem.type == AssetItemType.FileMap;\r\n}\r\n\r\nexport function isStreetMap(assetItem: AssetItem): assetItem is StreetMap {\r\n return assetItem.type == AssetItemType.StreetMap;\r\n}\r\n\r\nfunction isNavigation(assetItem: AssetItem): assetItem is Navigation {\r\n return assetItem.type == AssetItemType.Navigation;\r\n}\r\n\r\nfunction isAssetDirectory(assetItem: AssetItem): assetItem is AssetDirectory {\r\n return assetItem.type == AssetItemType.Directory;\r\n}\r\n\r\nfunction isAssetFile(assetItem: AssetItem): assetItem is AssetFile {\r\n return assetItem.type == AssetItemType.File;\r\n}\r\n\r\nfunction isAssetHotspot(assetItem: AssetItem): assetItem is AssetHotspot {\r\n return assetItem.type == AssetItemType.Hotspot;\r\n}\r\n\r\nfunction isAssetLink(assetItem: AssetItem): assetItem is AssetLink {\r\n return assetItem.type == AssetItemType.Link;\r\n}\r\n\r\nfunction isAssetMapArea(assetItem: AssetItem): assetItem is AssetMapArea {\r\n return assetItem.type == AssetItemType.MapArea;\r\n}\r\n\r\nfunction isAssetPanoramaGroup(assetItem: AssetItem): assetItem is AssetPanoramaGroup {\r\n return assetItem.type == AssetItemType.PanoramaGroup;\r\n}\r\n\r\nfunction isAssetPanoramaVersion(assetItem: AssetItem): assetItem is AssetPanoramaVersion {\r\n return assetItem.type == AssetItemType.PanoramaVersion;\r\n}\r\n\r\nexport enum PublicationStatus { Offline = 0, Online = 1 }\r\n\r\nexport class Project {\r\n constructor() {\r\n this.assetProject = new AssetProject();\r\n this.tags = new Array();\r\n }\r\n\r\n public projectId: number;\r\n public assetProject: AssetProject;\r\n public thumbnail: DriveFile;\r\n public fileShares: Array;\r\n public description: string;\r\n public license: CreativeCommonsLicense;\r\n public publicationStatus: PublicationStatus;\r\n public location: GeoJSON;\r\n public tags: Array;\r\n public creationTimeUtc: Date;\r\n public viewCounter: number;\r\n public layout: any;\r\n public size: number;\r\n public owner: IIdentity;\r\n}\r\n\r\nexport class Tag {\r\n public tagId: number;\r\n public name: string;\r\n}\r\n\r\nexport class TagCounter extends Tag {\r\n public count: number;\r\n}\r\n\r\nexport class ProjectLocation {\r\n public location: GeoJSON;\r\n}\r\n\r\nexport interface ICreateProject {\r\n name: string;\r\n license: CreativeCommonsLicense;\r\n assetTemplateId: number;\r\n}\r\n\r\nexport interface ICreateProjectTemplate {\r\n name: string,\r\n\r\n description: string;\r\n\r\n /** Id de l'élément recevant le nouveau modèle */\r\n assetItemId: number;\r\n\r\n /** Id du project source à cloner */\r\n assetProjectId: number;\r\n\r\n icon: Blob;\r\n}\r\n\r\nexport interface IAddNavigationSystem {\r\n name: string,\r\n assetParentId: number,\r\n navigationType: NavigationType,\r\n importAllPanorama?: boolean\r\n}\r\n\r\nexport interface IDownloadStandaloneOption {\r\n includeAssetFiles: boolean,\r\n assetPanoramaVersionIds?: Array;\r\n}\r\n\r\nexport function singleifyItemNames(collection: Array, name: string): string {\r\n if (!collection.find(ai => ai.name == name)) {\r\n return name;\r\n }\r\n\r\n const regex = new RegExp(`^${name} \\\\((?\\\\d+)\\\\)$`);\r\n\r\n let maxNumber: number = 0;\r\n\r\n for (let child of collection) {\r\n const number = parseInt(regex.exec(child.name)?.groups.number);\r\n\r\n if (!isNaN(number)) {\r\n maxNumber = Math.max(maxNumber, number);\r\n }\r\n }\r\n\r\n return `${name} (${maxNumber + 1})`;\r\n}\r\n\r\n/**\r\n * Browse recursively children of {@link AssetItem} if exists and filter {@link AssetPanoramaVersion} leafs\r\n * @param items Items to filter\r\n * @returns Filtered leaf and theirs ancestrors\r\n */\r\nexport function getPanoramaVersionAscendants(items: Array): Array {\r\n if (items.length == 0) {\r\n return [];\r\n }\r\n\r\n let filtered: Array = [];\r\n\r\n for (const item of items) {\r\n if (isTypeValid(item)) {\r\n item.children = getPanoramaVersionAscendants(item.children);\r\n\r\n if (isEmptyDirectory(item)) {\r\n continue;\r\n }\r\n\r\n filtered.push(item);\r\n }\r\n }\r\n\r\n return filtered;\r\n\r\n function isEmptyDirectory(item: AssetDirectory): boolean {\r\n return item.type == AssetItemType.Directory\r\n && item.children.length == 0;\r\n }\r\n\r\n function isTypeValid(item: AssetItem): item is AssetDirectory {\r\n return item.type == AssetItemType.Project\r\n || item.type == AssetItemType.PanoramaGroup\r\n || item.type == AssetItemType.PanoramaVersion\r\n || item.type == AssetItemType.Directory;\r\n }\r\n}\r\n","import { DrivePermissions } from 'Api/Enums/Permissions';\r\n\r\nexport enum FileType { Unknow, Image, Video, Pdf, Directory, Office, Audio, PointCloud, Symlink }\r\nexport enum Permission { Read, Write }\r\nexport enum ShareType { None, Read, Write }\r\n\r\nexport type FileLinkKey =\r\n | 'preview'\r\n | 'download'\r\n | 'panorama'\r\n | 'image'\r\n | 'optimizedImage'\r\n | 'deepzoom'\r\n | 'video'\r\n | 'pdf'\r\n | 'audio'\r\n | 'pointcloud';\r\n\r\nexport type FileLinks = Partial>;\r\n\r\nexport class Guid {\r\n public static readonly emptyGuid: string = '00000000-0000-0000-0000-000000000000';\r\n\r\n public static isNullOrEmpty(guid: string): boolean {\r\n return !guid || guid == Guid.emptyGuid;\r\n }\r\n\r\n public static isEmpty(guid: string): boolean {\r\n return guid == Guid.emptyGuid;\r\n }\r\n}\r\n\r\nexport interface File {\r\n fileId: number;\r\n ownerId: number;\r\n guid: string;\r\n nameWithoutExtension: string;\r\n extension: string;\r\n isSymlink: boolean;\r\n isDirectory: boolean;\r\n fileType: FileType;\r\n shareType: ShareType;\r\n isShare: boolean;\r\n creationTime: Date;\r\n updatedTime?: Date;\r\n thumbnailGuid: string;\r\n size: number;\r\n state: FileTaskResult;\r\n target?: File;\r\n links: FileLinks;\r\n}\r\ninterface MoveFileViewModel {\r\n files: number[];\r\n destination: number;\r\n}\r\n\r\ninterface GetFilesResult {\r\n breadcrumb: File[],\r\n files: File[],\r\n totalFilesCount: number,\r\n resultPerPage: number,\r\n pageNumber: number\r\n}\r\n\r\nexport interface IFilePermission {\r\n id: number;\r\n permission: DrivePermissions;\r\n creationTime: Date;\r\n updatedTime: Date;\r\n identityId: number;\r\n fileId: number;\r\n fileName: string;\r\n}\r\n\r\nexport interface IFileShare {\r\n fileShareId: number;\r\n name: string;\r\n creationTime: Date;\r\n picture: string;\r\n pictureUrl: string;\r\n isGroup: boolean;\r\n permission: Permission;\r\n token: string;\r\n identityId: number;\r\n}\r\n\r\nexport enum WorkerTaskState {\r\n Created = 0,\r\n Running = 1,\r\n Completed = 2,\r\n Canceled = 3,\r\n Faulted = 4\r\n}\r\n\r\nexport interface FileTaskResult {\r\n taskId: number;\r\n resultId: number;\r\n state: WorkerTaskState;\r\n description: string;\r\n typeOfBody: string;\r\n typeOfHeader: string;\r\n filePathGuid: string;\r\n creationTimeUtc: Date;\r\n lastExecutedTimeUtc?: Date;\r\n}\r\n\r\nexport interface IFileValidationResult {\r\n fileName: string;\r\n errors: Array;\r\n}\r\n\r\nexport class DriveHelper {\r\n public static isFileShare(fileShare: any): fileShare is IFileShare {\r\n return fileShare\r\n && (fileShare as IFileShare).fileShareId !== undefined;\r\n }\r\n}\r\n","export class Exception extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n }\r\n}\r\n\r\nexport class ArgumentNullException extends Exception {\r\n constructor(parameterName: string) {\r\n super(`The value cannot be null. Parameter Name: ${parameterName}`);\r\n }\r\n}\r\n\r\nexport class NotSupportedException extends Exception {\r\n constructor() {\r\n super(\"La méthode spécifiée n'est pas prise en charge\");\r\n }\r\n}\r\n\r\nexport class NotImplementedException extends Exception {\r\n constructor(message?: string) {\r\n super('The method or operation is not implemented. ' + message);\r\n }\r\n}\r\n\r\nexport class RangeException extends Exception {\r\n constructor(parameterName: string, minimum: number, maximum?: number) {\r\n const constraint = maximum\r\n ? `between ${minimum} and ${maximum}`\r\n : `greater than or equal to ${minimum}`;\r\n\r\n super(`Value for parameter ${parameterName} must be ${constraint}.`);\r\n }\r\n}\r\n","import { RenderType } from 'Framework/Components/Controls/XView/Core';\r\n\r\nenum CoordinateSystem { Plane, Spherical, Cartesian }\r\n\r\ninterface IPlanCoordinates {\r\n x: number;\r\n y: number;\r\n}\r\n\r\ninterface ISphericalCoordinates {\r\n //Horizontal angle. ATH -Pi <-> +Pi\r\n theta: number;\r\n //Vertical angle. ATV +Pi/2 <-> -Pi/2\r\n phi: number;\r\n}\r\n\r\ninterface ICartesianCoordinates {\r\n x: number;\r\n y: number;\r\n z: number;\r\n}\r\nexport type ICoordinates = IPlanCoordinates | ISphericalCoordinates | ICartesianCoordinates;\r\n\r\ninterface IHotspot {\r\n coordinateSystem: CoordinateSystem;\r\n coordinates: Array;\r\n name: string;\r\n content: any;\r\n events: any;\r\n onclick: any;\r\n}\r\n\r\ninterface ISphericalHotspot extends IHotspot {\r\n\r\n}\r\n\r\ninterface ICartesianHotspot extends IHotspot {\r\n}\r\n\r\ninterface IConfiguration {\r\n basePath: string;\r\n RenderType: RenderType;\r\n MaxFov?: number;\r\n MinFov?: number;\r\n Fov?: number;\r\n hotspots: Array;\r\n iconProvider: IIconProvider;\r\n}\r\n\r\ninterface IPanoramaConfiguration extends IConfiguration {\r\n Url: string;\r\n MaxLevel: number;\r\n IsMultiResolution: boolean;\r\n idleRotationWaitTime: number;\r\n idleRotationSpeed: number;\r\n Levels: Array;\r\n startOrientation: ICartesianCoordinates;\r\n}\r\ninterface IPanoramaLevel {\r\n ImageWidth: number;\r\n ImageHeight: number;\r\n TileSize: number;\r\n}\r\n\r\ninterface IViewer {\r\n MaxFov: number;\r\n MinFov: number;\r\n FPS: number;\r\n autoRotationEnabled: boolean;\r\n\r\n //String of base64-encoded characters. This string can be assigned to the src parameter of an to display it\r\n TakeScreenshot(): Promise;\r\n ResizeView(): void;\r\n setSizeView(width: number, height: number): void;\r\n\r\n renderTypeSupported: RenderType;\r\n loadConfiguration(configuration: TConfiguration)\r\n}\r\n\r\nenum TextureType {\r\n OpacityTexture,\r\n EmissiveTexture\r\n}\r\n\r\ninterface IIconInfo {\r\n url: string;\r\n textureType: TextureType;\r\n animation?: {\r\n nRows: number,\r\n nCols: number,\r\n startFrame: number,\r\n endFrame: number,\r\n frameRate: number\r\n };\r\n}\r\n\r\ninterface IIconProvider {\r\n getIconInfo(hotspot: IHotspot): IIconInfo;\r\n}\r\n\r\nexport {\r\n CoordinateSystem,\r\n type IPlanCoordinates,\r\n type ISphericalCoordinates,\r\n type ICartesianCoordinates,\r\n type IHotspot,\r\n type ISphericalHotspot,\r\n type ICartesianHotspot,\r\n type IConfiguration,\r\n type IPanoramaConfiguration,\r\n type IPanoramaLevel,\r\n type IViewer,\r\n TextureType,\r\n type IIconInfo,\r\n type IIconProvider\r\n};\r\n","import { ArgumentNullException, Exception } from 'Api/Dto/Exception';\r\n\r\nexport interface IError {\r\n code: string;\r\n target: string;\r\n message: string;\r\n details: Array;\r\n innerError: IInnerError;\r\n}\r\n\r\nexport interface IInnerError {\r\n code: string;\r\n innerError: IInnerError;\r\n}\r\n\r\nexport interface IQueryResultBase {\r\n error?: IError\r\n}\r\n\r\nexport interface IQueryResult extends IQueryResultBase {\r\n result: T;\r\n}\r\n\r\nexport interface IPaginationResult {\r\n items: Array;\r\n hasNextPage: boolean;\r\n hasPreviousPage: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n totalPages: number;\r\n nextLink: string;\r\n previousLink: string;\r\n}\r\n\r\nexport interface IServerPaginationResult extends IQueryResult> {\r\n nextLink: string;\r\n}\r\n\r\nexport class QueryException extends Exception {\r\n constructor(error: IError) {\r\n if(!error) {\r\n throw new ArgumentNullException(nameof(error));\r\n }\r\n\r\n super(error.message);\r\n\r\n this.error = error;\r\n }\r\n\r\n /**\r\n * Flattens all error messages\r\n */\r\n public get messages(): string {\r\n const flatMessages: string = this.error.details\r\n ?.flatMap(d => d.message)\r\n .reduce((p, c) => `${p}\\n${c}`);\r\n\r\n return flatMessages ?? this.message;\r\n }\r\n\r\n public error: IError;\r\n}\r\n\r\nexport class UnauthorizedException extends Exception {\r\n constructor() {\r\n super('Unauthorized');\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends Exception {\r\n constructor() {\r\n super('Forbidden');\r\n }\r\n}\r\n\r\nexport class NotFoundException extends Exception {\r\n constructor(message?: string) {\r\n super(`Not found ${message}`);\r\n }\r\n}\r\n\r\nexport interface IProblemDetails {\r\n title: string,\r\n detail: string,\r\n type: string,\r\n status: number,\r\n instance: string\r\n}\r\n\r\nexport class ApiException extends Exception {\r\n public constructor(statusCode: number, error: IError) {\r\n super(`Api call returned an error code (${statusCode}). See error for details.`);\r\n\r\n this.statusCode = statusCode;\r\n this.error = error;\r\n }\r\n\r\n public readonly statusCode: number;\r\n public readonly error: IError;\r\n}\r\n","export enum FileSelectionType {\r\n File = 1,\r\n Directory = 2,\r\n All = File | Directory\r\n}\r\n","export enum MenuStateType {\r\n Open = 1,\r\n Closed = 2,\r\n Float = 3\r\n}\r\n","export type Permission = DrivePermissions | UserPermissions | GroupPermissions | RolePermissions | PlatformPermissions | SubscriptionPermissions | ProjectPermissions | SettingPermissions | AnalyticPermissions | DomainNameSystemPermissions | SystemInformationPermissions | IdentityProviderPermissions | AuditLogPermissions;\r\n\r\nexport enum DrivePermissions {\r\n None = 0,\r\n CreateFolder = 1,\r\n EditFolderOrFile = 2,\r\n DeleteFolder = 4,\r\n ShareFolder = 8,\r\n MoveFolder = 16,\r\n DuplicateFolder = 32,\r\n UploadFile = 64,\r\n DownloadFile = 128,\r\n ViewFile = 256,\r\n DeleteFile = 512,\r\n ShareFile = 1024,\r\n DuplicateFile = 2048,\r\n MoveFile = 4096,\r\n HiddenFile = 8192,\r\n Allow = 16384,\r\n Deny = 32768,\r\n Absolute = 65536,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = CreateFolder | EditFolderOrFile | DeleteFolder | ShareFolder | MoveFolder | DuplicateFolder | UploadFile | DownloadFile | ViewFile | DeleteFile | ShareFile | DuplicateFile | MoveFile | HiddenFile\r\n}\r\n\r\nexport enum UserPermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n ChangeRole = 8,\r\n ChangeSubscription = 16,\r\n ChangeType = 32,\r\n Import = 64,\r\n Export = 128,\r\n List = 256,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = Create | Edit | Delete | ChangeRole | ChangeSubscription | ChangeType | Import | Export | List\r\n}\r\n\r\nexport enum GroupPermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n List = 8,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = Create | Edit | Delete | List\r\n}\r\n\r\nexport enum RolePermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n List = 8,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = Create | Edit | Delete | List\r\n}\r\n\r\nexport enum PlatformPermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n List = 8,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = Create | Edit | Delete | List\r\n}\r\n\r\nexport enum SubscriptionPermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n List = 8,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = Create | Edit | Delete | List\r\n}\r\n\r\nexport enum ProjectPermissions {\r\n None = 0,\r\n Create = 1 << 0,\r\n Edit = 1 << 1,\r\n Delete = 1 << 2,\r\n Read = 1 << 3,\r\n Publish = 1 << 4,\r\n Comment = 1 << 5,\r\n Copy = 1 << 6,\r\n List = 1 << 7,\r\n Standalone = 1 << 8,\r\n Contribute = 1 << 9,\r\n Import = 1 << 10,\r\n Export = 1 << 11,\r\n CreateTemplate = 1 << 12,\r\n EditTemplate = 1 << 13,\r\n DeleteTemplate = 1 << 14,\r\n ListTemplate = 1 << 15,\r\n ReadTemplate = 1 << 16,\r\n All = Create | Edit | Delete | Read | Publish | Comment | Copy | List | Standalone | Contribute | Import | Export | CreateTemplate | EditTemplate | DeleteTemplate | ListTemplate | ReadTemplate\r\n}\r\n\r\nexport enum SettingPermissions {\r\n None = 0,\r\n Security = 1,\r\n Drive = 2,\r\n General = 4,\r\n Login = 8,\r\n Mail = 16,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = Security | Drive | General | Login | Mail\r\n}\r\n\r\nexport enum AnalyticPermissions {\r\n None = 0,\r\n ShowLineDataIn = 1,\r\n ShowLineDataOut = 2,\r\n ShowPieLogicalStorage = 4,\r\n ShowPiePhysicalStorage = 8,\r\n ShowLineLogicalFiles = 16,\r\n ShowLinePhysicalFiles = 32,\r\n ShowLineRequest = 64,\r\n ShowLineRequestError = 128,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = ShowLineDataIn | ShowLineDataOut | ShowPieLogicalStorage | ShowPiePhysicalStorage | ShowLineLogicalFiles | ShowLinePhysicalFiles | ShowLineRequest | ShowLineRequestError\r\n}\r\n\r\nexport enum DomainNameSystemPermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n List = 8,\r\n\r\n All = Create | Edit | Delete | List\r\n}\r\n\r\nexport enum SystemInformationPermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n List = 8,\r\n\r\n Anonymous = None,\r\n Standard = None,\r\n Advanced = None,\r\n All = Create | Edit | Delete | List\r\n}\r\n\r\nexport enum IdentityProviderPermissions {\r\n None = 0,\r\n Create = 1,\r\n List = 2,\r\n Edit = 4,\r\n Delete = 8,\r\n\r\n All = Create | List | Edit | Delete\r\n}\r\n\r\nexport enum AuditLogPermissions {\r\n None = 0,\r\n List = 1\r\n}\r\n\r\nexport enum TagPermissions {\r\n Create = 1 << 0,\r\n Update = 1 << 1,\r\n Delete = 1 << 2,\r\n List = 1 << 3,\r\n\r\n All = (List << 1) - 1\r\n}\r\n\r\nexport enum WorkerPermissions {\r\n None = 0,\r\n Create = 1,\r\n Edit = 2,\r\n Delete = 4,\r\n List = 8,\r\n RestartTask = 16,\r\n\r\n All = Create | Edit | Delete | List | RestartTask\r\n}\r\n\r\nexport enum IconPermissions {\r\n None = 0,\r\n List = 1 << 0,\r\n Import = 1 << 1,\r\n Update = 1 << 2,\r\n Delete = 1 << 3,\r\n\r\n All = List | Import | Update | Delete\r\n}\r\n\r\nexport enum SmartObjectPermissions {\r\n None = 0,\r\n List = 1 << 0,\r\n CreateCategory = 1 << 1,\r\n EditCategory = 1 << 2,\r\n DeleteCategory = 1 << 3,\r\n MoveCategory = 1 << 4,\r\n CreateSmartObject = 1 << 5,\r\n EditSmartObject = 1 << 6,\r\n DeleteSmartObject = 1 << 7,\r\n MoveSmartObject = 1 << 8,\r\n ReadSmartObject = 1 << 9,\r\n\r\n All = (ReadSmartObject << 1) - 1\r\n}\r\n\r\n","export enum SocialNetworks {\r\n None = 0,\r\n Facebook = 1 << 0,\r\n Twitter = 1 << 1,\r\n Linkedin = 1 << 2,\r\n Mail = 1 << 3\r\n}\r\n","export enum ViewerStateType {\r\n Normal = 1,\r\n Wide = 2,\r\n FullPage = 3,\r\n FullScreen = 4,\r\n normal = Normal,\r\n wide = Wide,\r\n fullpage = FullPage,\r\n fullscreen = FullScreen\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { AssetItemType, IGeoRoutingResultDto, IMapLocation, IRouteFilterInputDto, SmartObjectDto } from 'Api/Contracts/Dtos';\r\nimport { File } from 'Api/Dto/Drive';\r\nimport { PointCloud } from 'Api/Dto/PointCloud';\r\nimport { CoordinateSystem, ICartesianCoordinates, IHotspot, IPlanCoordinates, ISphericalCoordinates } from 'Api/Dto/Project';\r\nimport { IPaginationResult, IQueryResultBase, IServerPaginationResult, QueryException } from 'Api/Dto/QueryResult';\r\nimport { ISearchResult } from 'Api/Dto/SearchResult';\r\nimport { IIdentity } from 'Api/Dto/Shares';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { RenderType } from 'Framework/Components/Controls/XView/Core';\r\nimport { GeoJSON } from 'geojson';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\nexport enum NavigationType {\r\n None = 0, List = 1, Map = 2\r\n}\r\nexport enum MapSize {\r\n Hidden = 1, Small = 2, Medium = 4, Large = 8\r\n}\r\nexport enum StreetMapType {\r\n GoogleMaps = 1, OpenStreetMap = 2, BingMap = 4\r\n}\r\nexport enum BindingMode { OneWay = 1, TwoWay = 2 }\r\n\r\nexport class Datasource {\r\n name: string;\r\n type: string;\r\n of: string;\r\n value: any;\r\n\r\n static fromJson(json: any) {\r\n let datasource: Datasource = new Datasource();\r\n datasource.name = json.name;\r\n datasource.type = json.type;\r\n datasource.of = json.of;\r\n if (Array.isArray(json.value)) {\r\n let array = new Array();\r\n for (let value of json.value) {\r\n array.push(jsonToObject(value));\r\n }\r\n datasource.value = array;\r\n } else {\r\n datasource.value = json.value;\r\n }\r\n\r\n return datasource;\r\n }\r\n}\r\n\r\nfunction jsonToObject(value: any): any {\r\n if (Array.isArray(value)) {\r\n let array = new Array();\r\n for (let v of value) {\r\n array.push(jsonToObject(v));\r\n }\r\n return array;\r\n }\r\n\r\n switch (value?.type) {\r\n case AssetItemType.StreetMap:\r\n return StreetMap.fromJson(value);\r\n case AssetItemType.PanoramaItemLink:\r\n return OrderedPanorama.fromJson(value);\r\n case AssetItemType.FileMap:\r\n return FileMap.fromJson(value);\r\n case AssetItemType.Navigation:\r\n return Navigation.fromJson(value);\r\n case AssetItemType.PanoramaVersion:\r\n return AssetPanoramaVersion.fromJson(value);\r\n case AssetItemType.PanoramaGroup:\r\n return AssetPanoramaGroup.fromJson(value);\r\n case AssetItemType.Project:\r\n return Project.fromJson(value);\r\n case AssetItemType.Link:\r\n return AssetLink.fromJson(value);\r\n case AssetItemType.Hotspot:\r\n return AssetHotspot.fromJson(value);\r\n case AssetItemType.MapArea:\r\n return AssetMapArea.fromJson(value);\r\n case AssetItemType.File:\r\n return AssetFile.fromJson(value);\r\n case AssetItemType.Directory:\r\n return AssetDirectory.fromJson(value);\r\n case AssetItemType.SmartObject:\r\n return SmartObjectDto.fromJson(value);\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nexport class Author {\r\n id: number;\r\n name: string;\r\n picture: string;\r\n pictureUrl: string;\r\n\r\n static fromJson(json: any) {\r\n let author: Author = new Author();\r\n author.id = json.id;\r\n author.name = json.name;\r\n author.picture = json.picture;\r\n author.pictureUrl = json.pictureUrl;\r\n\r\n return author;\r\n }\r\n}\r\n\r\nexport interface IComment {\r\n id: number;\r\n text: string;\r\n creationTime: Date;\r\n updateTime?: Date;\r\n author: IIdentity;\r\n}\r\n\r\nexport class Project {\r\n id: number;\r\n name: string;\r\n rating: number;\r\n description: string;\r\n thumbnail: string;\r\n thumbnailUrl: string;\r\n publicationTimeUtc?: Date;\r\n location: GeoJSON;\r\n author: Author;\r\n token: string;\r\n validatedToken: string;\r\n views: number;\r\n layout: any;\r\n datasources: Array;\r\n basePath?: string;\r\n events: string;\r\n tags: Array;\r\n\r\n public findPanoramaFileFromAssetId(assetId: number): AssetPanoramaVersion {\r\n return (this.datasources?.[0].value as Array)\r\n ?.find(item => item.assetItemId == assetId) ?? null;\r\n }\r\n\r\n public findAssetFileFromAssetId(assetId: number): AssetFile {\r\n return (this.datasources?.[2].value as Array)\r\n ?.find(item => item.assetItemId == assetId) ?? null;\r\n }\r\n\r\n public findAssetFileFromAssetFolderId(assetId: number): Array {\r\n return (this.datasources?.[2].value as Array)\r\n ?.filter(item => item.parentId == assetId) ?? null;\r\n }\r\n\r\n static fromJson(json: Project): Project {\r\n let project: Project = new Project();\r\n project.basePath = json.basePath || null;\r\n project.id = Number(json.id);\r\n project.name = json.name;\r\n project.token = json.token;\r\n project.rating = Number(json.rating) || 0;\r\n project.description = json.description || '';\r\n project.thumbnail = json.thumbnail;\r\n project.location = json.location || null;\r\n project.thumbnailUrl = json.thumbnailUrl;\r\n project.publicationTimeUtc = json.publicationTimeUtc ? new Date(json.publicationTimeUtc) : null;\r\n project.author = Author.fromJson(json.author);\r\n project.views = Number(json.views) || 0;\r\n project.events = json.events;\r\n project.layout = json.layout;\r\n project.tags = json.tags;\r\n\r\n project.datasources = new Array();\r\n if (Array.isArray(json.datasources)) {\r\n for (let datasource of json.datasources) {\r\n project.datasources.push(Datasource.fromJson(datasource));\r\n }\r\n }\r\n\r\n return project;\r\n }\r\n}\r\n\r\nexport class AssetItem {\r\n public static fromJson(json: any): AssetItem {\r\n let assetItem: AssetItem = new AssetItem();\r\n assetItem.assetItemId = json.assetItemId;\r\n assetItem.name = json.name;\r\n assetItem.type = json.type;\r\n assetItem.parentId = json.parentId;\r\n assetItem.events = json.events || {};\r\n assetItem.waypointIds = json.waypointIds;\r\n\r\n return assetItem;\r\n }\r\n\r\n public static jsonToArray(value: any): Array {\r\n if (Array.isArray(value)) {\r\n let array = new Array();\r\n for (let v of value) {\r\n array.push(AssetItem.jsonToObject(v));\r\n }\r\n return array;\r\n }\r\n return [];\r\n }\r\n\r\n public static jsonToObject(value: any): T {\r\n switch (value?.type) {\r\n case AssetItemType.StreetMap:\r\n return StreetMap.fromJson(value) as unknown as T;\r\n case AssetItemType.PanoramaItemLink:\r\n return OrderedPanorama.fromJson(value) as unknown as T;\r\n case AssetItemType.FileMap:\r\n return FileMap.fromJson(value) as unknown as T;\r\n case AssetItemType.Navigation:\r\n return Navigation.fromJson(value) as unknown as T;\r\n case AssetItemType.PanoramaVersion:\r\n return AssetPanoramaVersion.fromJson(value) as unknown as T;\r\n case AssetItemType.PanoramaGroup:\r\n return AssetPanoramaGroup.fromJson(value) as unknown as T;\r\n case AssetItemType.Project:\r\n return Project.fromJson(value) as unknown as T;\r\n case AssetItemType.Link:\r\n return AssetLink.fromJson(value) as unknown as T;\r\n case AssetItemType.Hotspot:\r\n return AssetHotspot.fromJson(value) as unknown as T;\r\n case AssetItemType.MapArea:\r\n return AssetMapArea.fromJson(value) as unknown as T;\r\n case AssetItemType.File:\r\n return AssetFile.fromJson(value) as unknown as T;\r\n case AssetItemType.Directory:\r\n return AssetDirectory.fromJson(value) as unknown as T;\r\n case AssetItemType.SmartObject:\r\n return SmartObjectDto.fromJson(value) as unknown as T;\r\n default:\r\n return value;\r\n }\r\n }\r\n\r\n public name: string;\r\n public assetItemId: number;\r\n public parentId?: number;\r\n public parent?: AssetDirectory;\r\n public type: AssetItemType;\r\n public events: { [key: string]: string; };\r\n public waypointIds: Array;\r\n}\r\n\r\nexport class AssetFile extends AssetItem {\r\n public static fromJson(json: any): AssetFile {\r\n let assetFile: AssetFile = Object.assign(new AssetFile(), AssetItem.fromJson(json));\r\n assetFile.file = json.file;\r\n\r\n return assetFile;\r\n }\r\n\r\n public file: File;\r\n}\r\n\r\nexport class AssetDirectory extends AssetFile {\r\n public static fromJson(json: any): AssetDirectory {\r\n let assetDirectory: AssetDirectory = Object.assign(new AssetDirectory(), AssetFile.fromJson(json));\r\n assetDirectory.children = AssetItem.jsonToArray(json.children);\r\n\r\n assetDirectory.children.forEach(c => {\r\n c.parent = assetDirectory;\r\n });\r\n\r\n return assetDirectory;\r\n }\r\n\r\n public addChildren(...children: Array): void {\r\n this.children.push(...children);\r\n }\r\n\r\n public removeChildren(...children: Array): void {\r\n this.children = this.children.filter(c => !children.includes(c));\r\n }\r\n\r\n public children: Array;\r\n}\r\n\r\nexport class AssetPanoramaVersion extends AssetDirectory {\r\n public static fromJson(json: any): AssetPanoramaVersion {\r\n let panorama: AssetPanoramaVersion = Object.assign(new AssetPanoramaVersion(), AssetDirectory.fromJson(json));\r\n panorama.renderType = json.renderType;\r\n panorama.level = json.level;\r\n panorama.northOrientation = json.northOrientation;\r\n panorama.hotspots = AssetItem.jsonToArray(json.hotspots);\r\n panorama.order = json.order;\r\n panorama.offset = json.offset;\r\n\r\n if (json.startOrientation) {\r\n panorama.startOrientation = JSON.parse(json.startOrientation);\r\n }\r\n\r\n panorama.children.forEach(c => {\r\n c.parent = panorama;\r\n });\r\n\r\n panorama.hotspots.forEach(h => {\r\n h.parent = panorama;\r\n });\r\n\r\n return panorama;\r\n }\r\n\r\n public addChildren(...children: Array): void {\r\n const hotspots = children.filter(c => c instanceof AssetHotspot) as Array;\r\n this.hotspots.push(...hotspots);\r\n }\r\n\r\n public removeChildren(...children: Array): void {\r\n this.hotspots = this.hotspots.filter(h => !children.includes(h));\r\n }\r\n\r\n public renderType: RenderType;\r\n public level: number;\r\n public hotspots: Array;\r\n public startOrientation: ICartesianCoordinates;\r\n public northOrientation: number;\r\n public offset: number;\r\n public order: number;\r\n}\r\n\r\nexport class AssetPanoramaGroup extends AssetDirectory {\r\n public static fromJson(json: any): AssetPanoramaGroup {\r\n let panoGroup: AssetPanoramaGroup = Object.assign(new AssetPanoramaGroup(), AssetDirectory.fromJson(json));\r\n panoGroup.defaultVersionId = json.defaultVersionId;\r\n panoGroup.hotspots = AssetItem.jsonToArray(json.hotspots);\r\n\r\n panoGroup.children.forEach(c => {\r\n c.parent = panoGroup;\r\n });\r\n\r\n panoGroup.hotspots.forEach(h => {\r\n h.parent = panoGroup;\r\n });\r\n\r\n return panoGroup;\r\n }\r\n\r\n public getDefaultPanoramaVersion(currentVersion?: string): AssetPanoramaVersion {\r\n const panoramaVersions = this.children as Array;\r\n\r\n return panoramaVersions.find(pv => pv.name == currentVersion)\r\n ?? panoramaVersions.find(pv => pv.assetItemId == this.defaultVersionId)\r\n ?? null;\r\n }\r\n\r\n public addChildren(...children: Array): void {\r\n const panoramaVersions = children.filter(c => c instanceof AssetPanoramaVersion);\r\n const hotspots = children.filter(c => c instanceof AssetHotspot) as Array;\r\n\r\n this.children.push(...panoramaVersions);\r\n this.hotspots.push(...hotspots);\r\n }\r\n\r\n public removeChildren(...children: Array): void {\r\n this.hotspots = this.hotspots.filter(h => !children.includes(h));\r\n this.children = this.children.filter(c => !children.includes(c));\r\n }\r\n\r\n public defaultVersionId?: number;\r\n public hotspots: Array;\r\n}\r\n\r\nexport class Navigation extends AssetDirectory {\r\n public static fromJson(json: any): Navigation {\r\n let navigation: Navigation = Object.assign(new Navigation(), AssetDirectory.fromJson(json));\r\n navigation.navigationType = json.navigationType;\r\n navigation.compassConfiguration = json.compassConfiguration;\r\n navigation.maps = AssetItem.jsonToArray(json.maps);\r\n\r\n navigation.children.forEach(c => {\r\n c.parent = navigation;\r\n });\r\n\r\n navigation.maps.forEach(m => {\r\n m.parent = navigation;\r\n });\r\n\r\n return navigation;\r\n }\r\n\r\n public addChildren(...children: Array): void {\r\n const maps: Array = children.filter(\r\n (c: AssetItem): c is ProjectMap | OrderedPanorama =>\r\n c instanceof ProjectMap || c instanceof OrderedPanorama);\r\n\r\n this.maps.push(...maps);\r\n }\r\n\r\n public removeChildren(...children: Array): void {\r\n this.maps = this.maps.filter(m => !children.includes(m));\r\n }\r\n\r\n public navigationType: NavigationType;\r\n public maps: Array;\r\n public compassConfiguration: string;\r\n}\r\n\r\nexport class ProjectMap extends AssetDirectory {\r\n public static fromJson(json: any): ProjectMap {\r\n let projectMap: ProjectMap = Object.assign(new ProjectMap(), AssetDirectory.fromJson(json));\r\n\r\n projectMap.children.forEach(c => {\r\n c.parent = projectMap;\r\n });\r\n\r\n return projectMap;\r\n }\r\n}\r\n\r\nexport class AssetLink extends AssetItem {\r\n public static fromJson(json: any): AssetLink {\r\n let assetLink: AssetLink = Object.assign(new AssetLink(), AssetItem.fromJson(json));\r\n assetLink.assetItemLinkedId = json.assetItemLinkedId ?? null;\r\n\r\n return assetLink;\r\n }\r\n\r\n public assetItemLinkedId?: number;\r\n}\r\n\r\nexport class AssetHotspot extends AssetLink {\r\n public static fromJson(json: any): AssetHotspot {\r\n let assetHotspot: AssetHotspot = Object.assign(new AssetHotspot(), AssetLink.fromJson(json));\r\n assetHotspot.coordinateSystem = json.coordinateSystem;\r\n assetHotspot.coordinates = json.coordinates;\r\n assetHotspot.content = json.content;\r\n\r\n return assetHotspot;\r\n }\r\n\r\n public coordinateSystem: CoordinateSystem;\r\n public coordinates: Array;\r\n public content: any;\r\n}\r\n\r\nexport class AssetMapArea extends AssetHotspot {\r\n public static fromJson(json: any): AssetMapArea {\r\n let assetMapArea: AssetMapArea = Object.assign(new AssetMapArea(), AssetHotspot.fromJson(json));\r\n assetMapArea.areaCoordinates = json.areaCoordinates;\r\n\r\n return assetMapArea;\r\n }\r\n\r\n public areaCoordinates: Array;\r\n}\r\n\r\nexport class FileMap extends ProjectMap {\r\n public static fromJson(json: any): FileMap {\r\n let fileMap: FileMap = Object.assign(new FileMap(), ProjectMap.fromJson(json));\r\n fileMap.isDefault = json.isDefault;\r\n fileMap.mapLocation = json.mapLocation;\r\n\r\n fileMap.children.forEach(c => {\r\n c.parent = fileMap;\r\n });\r\n\r\n return fileMap;\r\n }\r\n\r\n public isDefault: boolean;\r\n public mapLocation: IMapLocation;\r\n}\r\n\r\nexport class StreetMap extends ProjectMap {\r\n public static fromJson(json: any): StreetMap {\r\n let streetMap: StreetMap = Object.assign(new StreetMap(), ProjectMap.fromJson(json));\r\n streetMap.coordinates = json.coordinates;\r\n streetMap.provider = json.provider;\r\n\r\n streetMap.children.forEach(c => {\r\n c.parent = streetMap;\r\n });\r\n\r\n return streetMap;\r\n }\r\n\r\n public coordinates: string;\r\n public provider: StreetMapType;\r\n}\r\n\r\nexport class OrderedPanorama extends AssetLink {\r\n public static fromJson(json: any): OrderedPanorama {\r\n let orderedPanorama: OrderedPanorama = Object.assign(new OrderedPanorama(), AssetLink.fromJson(json));\r\n orderedPanorama.order = json.order;\r\n\r\n return orderedPanorama;\r\n }\r\n\r\n public order: number;\r\n}\r\n\r\n@injectable()\r\nexport class ExploreService {\r\n constructor(\r\n @inject(AppContext) appContext: AppContext,\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n private static responseToProjectMap(item: any): Promise> {\r\n if (item) {\r\n let projectMap = Array();\r\n for (const i of item) {\r\n let map = null;\r\n switch (i.type) {\r\n case AssetItemType.StreetMap:\r\n map = (Object.assign(new StreetMap(), i));\r\n break;\r\n case AssetItemType.PanoramaItemLink:\r\n map = (Object.assign(new OrderedPanorama(), i));\r\n break;\r\n case AssetItemType.FileMap:\r\n map = (Object.assign(new FileMap(), i));\r\n break;\r\n default:\r\n break;\r\n }\r\n if (map) {\r\n projectMap.push(map);\r\n }\r\n }\r\n return Promise.resolve(projectMap);\r\n }\r\n return null;\r\n }\r\n\r\n\r\n public async loadProjectAsync(idProject: number, token: string = null, basePath: string = null): Promise {\r\n const url = String.Format(Routes.Api.Projects.Published, idProject);\r\n\r\n const result = await this._responseHandler.handleResponseAsync(\r\n await this._httpClient.getAsync(url, null, { token: token }));\r\n\r\n const project: Project = Project.fromJson(result);\r\n project.basePath = basePath;\r\n project.validatedToken = token;\r\n\r\n return project;\r\n }\r\n\r\n public async rateProjectAsync(idProject: number, rating: number): Promise {\r\n // /fr-fr/explore/rate/{idProject}/{rating}\r\n let url = `/explore/rate/${idProject}/${rating}`;\r\n\r\n let response = await this._httpClient.getAsync(url);\r\n\r\n if (!response.ok) {\r\n let jsonResult = await response.json();\r\n\r\n throw new Error(jsonResult.error.code);\r\n }\r\n }\r\n\r\n public async getRelatedProjectAsync(idProject: number): Promise> {\r\n // /fr-fr/explore/related/{idProject}\r\n let url = `/explore/related/${idProject}`;\r\n\r\n let response = await this._httpClient.getAsync(url);\r\n let jsonResult = await response.json();\r\n\r\n return jsonToObject(jsonResult) as Array;\r\n }\r\n\r\n public async getCommentsAsync(idProject: number): Promise> {\r\n // /fr-fr/explore/comments/{idProject}\r\n let url = `/explore/comments/${idProject}`;\r\n\r\n let response = await this._httpClient.getAsync(url);\r\n let jsonResult = await response.json();\r\n\r\n return jsonToObject(jsonResult) as Array;\r\n }\r\n\r\n public async scanExistAsync(projectId: number, assetItemId: number): Promise {\r\n const url = String.Format(\r\n Routes.Api.Projects.ScanExist,\r\n projectId,\r\n assetItemId\r\n );\r\n\r\n const response = await this._httpClient.getAsync(url);\r\n const jsonResult = await response.json();\r\n\r\n if (!response.ok) {\r\n const queryError = jsonResult as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResult as boolean;\r\n }\r\n\r\n public async readScanAtAsync(projectId: number, assetItemId: number, theta: number, phi: number): Promise {\r\n const url = String.Format(\r\n Routes.Api.Projects.ReadScanAt,\r\n projectId,\r\n assetItemId,\r\n theta,\r\n phi\r\n );\r\n\r\n const response = await this._httpClient.getAsync(url);\r\n const jsonResult = await response.json();\r\n\r\n if (!response.ok) {\r\n const queryError = jsonResult as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResult as PointCloud;\r\n }\r\n\r\n public async getRoutesBetweenAssetsAsync(\r\n projectId: number,\r\n fromAssetItemId: number,\r\n toAssetItemId: number,\r\n filters: IRouteFilterInputDto,\r\n token: string\r\n ): Promise> {\r\n const response = await this._httpClient.getAsync(\r\n Routes.Api.GeoRouting.Routes,\r\n null,\r\n {\r\n token: token,\r\n from: fromAssetItemId,\r\n to: toAssetItemId,\r\n projectId: projectId,\r\n reference: 'asset',\r\n ...filters\r\n });\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async addCommentAsync(idProject: number, text: string): Promise {\r\n // /fr-fr/explore/comments/{idProject}\r\n let url = `/explore/addcomment`;\r\n\r\n let postData = {\r\n 'idProject': idProject,\r\n 'text': text\r\n };\r\n\r\n let response = await this._httpClient.postAsync(url, postData);\r\n let jsonResult = await response.json();\r\n\r\n return jsonToObject(jsonResult) as IComment;\r\n }\r\n\r\n public async addViewProjectAsync(idProject: number): Promise {\r\n // /fr-fr/explore/comments/{idProject}\r\n let url = `/explore/addview/${idProject}`;\r\n\r\n let response = await this._httpClient.getAsync(url);\r\n\r\n if (!response.ok) {\r\n throw Error(response.statusText);\r\n }\r\n }\r\n\r\n public async getPublishedProjectsAsync(page: number, pageSize: number, sortBy: string, type: string = null): Promise> {\r\n let response: Response = await this._httpClient.getAsync(\r\n `/api/explore/${sortBy.toLowerCase()}/${type.toLowerCase()}`,\r\n null,\r\n {\r\n page,\r\n pageSize\r\n }\r\n );\r\n\r\n const result: IPaginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n result.items = jsonToObject(result.items);\r\n\r\n return result;\r\n }\r\n\r\n public async getPublishedProjectsByUserAsync(userId: number, page: number, pageSize: number = 50): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n String.Format(Routes.Api.Users.Projects, userId),\r\n null,\r\n {\r\n page,\r\n pageSize\r\n }\r\n );\r\n\r\n const result: IPaginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n result.items = jsonToObject(result.items);\r\n\r\n return result;\r\n }\r\n\r\n public async searchAsync(searchText: string, filterType: string, maxPageSize: number): Promise> {\r\n const queryData = {\r\n searchText: searchText,\r\n type: filterType,\r\n maxPageSize: maxPageSize\r\n };\r\n\r\n const response = await this._httpClient.getAsync(Routes.Api.Explore.Search, null, queryData);\r\n\r\n return await this._searchResponseAsync(response);\r\n }\r\n\r\n public async searchNextPageAsync(nextPageLink: string): Promise> {\r\n const response = await this._httpClient.getAsync(nextPageLink, '/');\r\n\r\n return await this._searchResponseAsync(response);\r\n }\r\n\r\n private async _searchResponseAsync(response: Response): Promise> {\r\n const result: IServerPaginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n return {\r\n found: result.result,\r\n nextLink: result.nextLink,\r\n hasMoreResults: result.nextLink != null\r\n };\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n private readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { IQueryResultBase, QueryException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { inject, injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class FileUploader {\r\n constructor(@inject(HttpClient) httpClient: HttpClient) {\r\n this._httpClient = httpClient;\r\n\r\n this.files = [];\r\n }\r\n\r\n public async uploadFilesAsync(onUploadedFileAsync?: (chunkedFile: ChunkedFile) => Promise): Promise> {\r\n this.isCanceled = false;\r\n let filesToUpload = this.files.filter(f => !f.hasError);\r\n\r\n let results = new Array();\r\n\r\n for (let file of filesToUpload) {\r\n await this.uploadFileAsync(file);\r\n\r\n if (onUploadedFileAsync && !file.hasError && !file.isCanceled) {\r\n const result = await onUploadedFileAsync(file);\r\n\r\n results.push(result);\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n public cancelUpload(): void {\r\n this.isCanceled = true;\r\n console.log('file uploader iscancelled');\r\n console.log(this.isCanceled);\r\n }\r\n\r\n public addFile(file: File): ChunkedFile {\r\n let chunkedFile = new ChunkedFile(file);\r\n this.files.push(chunkedFile);\r\n\r\n return chunkedFile;\r\n }\r\n\r\n public removeFile(file: ChunkedFile): void {\r\n let index = this.files.findIndex(cf => cf.fileToBeUploaded == file.fileToBeUploaded);\r\n\r\n if (index >= 0) {\r\n this.files.splice(index, 1);\r\n }\r\n }\r\n\r\n public clear(): void {\r\n this.files = [];\r\n }\r\n\r\n public async clearServerCacheAsync(guids: Array): Promise {\r\n const response = await this._httpClient.postFormDataAsync('/asset/clearcache', { fileGuids: guids }, null, true);\r\n\r\n if (response.status != 204) {\r\n const jsonResponse = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(jsonResponse.error);\r\n }\r\n }\r\n\r\n private async uploadFileAsync(file: ChunkedFile): Promise {\r\n while (!file.uploadCompleted && !file.isCanceled && !file.hasError) {\r\n await this.uploadChunckAsync(file);\r\n }\r\n return file;\r\n }\r\n\r\n private async uploadChunckAsync(file: ChunkedFile): Promise {\r\n try {\r\n let status: string = null;\r\n if (this.isCanceled) {\r\n status = 'abort';\r\n file.status = 'abort';\r\n }\r\n\r\n let response = await this.uploadChunkInternalAsync(file.guid, file.currentChunk, file.fileChunck, status);\r\n\r\n if (response.status == 'abort') {\r\n return file;\r\n }\r\n\r\n file.guid = response.guid;\r\n file.currentChunk++;\r\n file.retryCount = 0;\r\n\r\n return file;\r\n }\r\n catch (ex) {\r\n if (ex instanceof QueryException) {\r\n if (file.status === 'abort') {\r\n file.status = 'Aborted';\r\n }\r\n else {\r\n file.status = ex.message;\r\n file.hasError = true;\r\n }\r\n\r\n return file;\r\n }\r\n else {\r\n if (file.retryCount < this.maxRetries) {\r\n file.status = 'Resuming upload';\r\n ++file.retryCount;\r\n await FileUploader.wait(this.retryAfterSeconds * 1000);\r\n\r\n return await this.uploadChunckAsync(file);\r\n }\r\n else {\r\n file.status = 'Upload timed out.';\r\n file.hasError = true;\r\n\r\n throw ex;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async uploadChunkInternalAsync(fileGuid: string, chunkIndex: number, chunk: Blob, status?: string): Promise {\r\n const url = '/asset/uploadchunk';\r\n const data = {\r\n fileChunk: chunk,\r\n chunkIndex: chunkIndex,\r\n fileGuid: fileGuid,\r\n status: status\r\n };\r\n\r\n let response = await this._httpClient.postFormDataAsync(url, data);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as IFileChunk;\r\n }\r\n\r\n protected _httpClient: HttpClient;\r\n private isCanceled: boolean;\r\n private files: Array;\r\n private readonly maxRetries = 3;\r\n private readonly retryAfterSeconds = 3;\r\n private static readonly wait = ms => new Promise(r => setTimeout(r, ms));\r\n static blockLength = 262144;//256Ko\r\n}\r\n\r\nexport class ChunkedFile {\r\n private static _uniqueId = 0;\r\n\r\n public constructor(file: File) {\r\n this.uniqueId = ++ChunkedFile._uniqueId;\r\n this._fileToBeUploaded = file;\r\n this._name = file.name;\r\n this._size = file.size;\r\n this._guid = '00000000-0000-0000-0000-000000000000';\r\n this._numberOfBlocks = Math.ceil(this._size / FileUploader.blockLength);\r\n this._currentChunk = 0;\r\n this._status = '';\r\n this._retryCount = 0;\r\n this._hasError = false;\r\n }\r\n\r\n get hasError(): boolean {\r\n return this._hasError;\r\n }\r\n set hasError(value: boolean) {\r\n this._hasError = value;\r\n if (this.onHasErrorChanged) {\r\n this.onHasErrorChanged(this);\r\n }\r\n }\r\n\r\n get fileToBeUploaded(): File {\r\n return this._fileToBeUploaded;\r\n }\r\n\r\n get name(): string {\r\n return this._name;\r\n }\r\n\r\n get size(): number {\r\n return this._size;\r\n }\r\n\r\n get guid(): string {\r\n return this._guid;\r\n }\r\n set guid(value: string) {\r\n this._guid = value;\r\n }\r\n\r\n get numberOfBlocks(): number {\r\n return this._numberOfBlocks;\r\n }\r\n get isCanceled(): boolean {\r\n return this.status === 'Aborted' || this.status === 'abort' || this.status === 'Upload timed out.' || this.status === 'Resuming Upload';\r\n }\r\n\r\n get fileChunck(): Blob {\r\n return this._fileToBeUploaded.slice(this.start, this.end);\r\n }\r\n\r\n get currentChunk(): number {\r\n return this._currentChunk;\r\n }\r\n set currentChunk(value: number) {\r\n this._currentChunk = value;\r\n\r\n if (this.onProgressChanged) {\r\n this.onProgressChanged(this);\r\n }\r\n }\r\n get uploadCompleted(): boolean {\r\n return this._currentChunk == this._numberOfBlocks;\r\n }\r\n\r\n get progress(): number {\r\n const progress = this._currentChunk / this._numberOfBlocks * 100;\r\n if (progress < 0) {\r\n return 0;\r\n }\r\n else if (progress <= 100) {\r\n return progress;\r\n }\r\n else if (progress > 100) {\r\n return 100;\r\n }\r\n return 0;\r\n }\r\n\r\n get status(): string {\r\n return this._status;\r\n }\r\n set status(value: string) {\r\n this._status = value;\r\n }\r\n\r\n get start(): number {\r\n return (this._currentChunk) * FileUploader.blockLength;\r\n }\r\n\r\n get end(): number {\r\n return Math.min((this._currentChunk + 1) * FileUploader.blockLength, this._size);\r\n }\r\n\r\n get retryCount(): number {\r\n return this._retryCount;\r\n }\r\n set retryCount(value: number) {\r\n this._retryCount = value;\r\n }\r\n\r\n public onProgressChanged: (e: any) => void;\r\n public onHasErrorChanged: (e: any) => void;\r\n\r\n public errors: Array = [];\r\n\r\n public uniqueId: number;\r\n private _hasError: boolean;\r\n private _guid: any;\r\n private _currentChunk: number;\r\n private _status: string;\r\n private _retryCount: number;\r\n private readonly _fileToBeUploaded: File;\r\n private readonly _name: string;\r\n private readonly _size: number;\r\n private readonly _numberOfBlocks: number;\r\n\r\n}\r\n\r\nexport interface IFileChunk {\r\n status: string;\r\n chunkIndex: number;\r\n guid: string;\r\n}\r\n","import { IUriService } from 'Api/Contracts/Interfaces';\r\nimport { injectable } from 'inversify';\r\nimport asFormData from 'json-form-data';\r\nimport urlJoin from 'url-join';\r\n\r\nexport type HttpVerb = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\r\n\r\n@injectable()\r\nexport class HttpClient {\r\n public constructor(uriService: IUriService) {\r\n this._uriService = uriService;\r\n\r\n this._requestInit = {\r\n credentials: 'same-origin',\r\n headers: new Headers({\r\n 'Accept': 'application/json'\r\n })\r\n };\r\n }\r\n\r\n public async getAsync(relativeUri: string, baseUri: string = null, options?: any, headers?: Headers): Promise {\r\n let initRequest = this._initializeInitRequest('GET', null, headers);\r\n\r\n if (options) {\r\n let params = new URLSearchParams();\r\n\r\n for (let parameter in options) {\r\n let value = options[parameter];\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach(parameterArrayItem => {\r\n if (parameterArrayItem != null) {\r\n params.append(parameter, parameterArrayItem);\r\n }\r\n });\r\n }\r\n else {\r\n if (value != null) {\r\n params.append(parameter, value)\r\n }\r\n }\r\n }\r\n\r\n const queryString = params.toString();\r\n\r\n if (queryString) {\r\n relativeUri += `?${queryString}`;\r\n }\r\n }\r\n\r\n return await this._fetch(baseUri, relativeUri, initRequest);\r\n }\r\n\r\n public postAsJsonAsync(value: any, baseUri: string = null, relativeUri: string = ''): Promise {\r\n return this.postAsync(relativeUri, value, baseUri);\r\n }\r\n\r\n public putAsJsonAsync(value: any, baseUri: string = null, relativeUri: string = ''): Promise {\r\n return this.putAsync(relativeUri, value, baseUri);\r\n }\r\n\r\n public deleteAsJsonAsync(value: any, baseUri: string = null, relativeUri: string = ''): Promise {\r\n return this.deleteAsync(relativeUri, value, baseUri);\r\n }\r\n\r\n public async patchAsJsonAsync(value: any, baseUri: string = null, relativeUri: string = '', headers?: Headers): Promise {\r\n let initRequest = this._initializeInitRequest('PATCH', JSON.stringify(value), headers);\r\n\r\n return await this._fetch(baseUri, relativeUri, initRequest);\r\n }\r\n\r\n public async postAsync(relativeUri: string, value: any, baseUri: string = null, headers?: Headers): Promise {\r\n let initRequest = this._initializeInitRequest('POST', JSON.stringify(value), headers);\r\n\r\n return await this._fetch(baseUri, relativeUri, initRequest);\r\n }\r\n\r\n public async postFormDataAsync(relativeUri: string, data: any, baseUri: string = null, keepAlive: boolean = false): Promise {\r\n\r\n let formData = asFormData(data, {\r\n includeNullValues: false, mapping: value => {\r\n //TODO : Cast en string à supprimer apres la mise à jour de la définition de la fonction de mapping\r\n return value as unknown as string;\r\n }\r\n });\r\n\r\n if (this.antiForgeryToken) {\r\n formData.append('__RequestVerificationToken', this.antiForgeryToken);\r\n }\r\n\r\n let initRequest = {\r\n ...this._requestInit,\r\n method: 'POST',\r\n body: formData,\r\n headers: {\r\n 'Accept': 'application/json',\r\n },\r\n keepalive: keepAlive\r\n } as RequestInit;\r\n\r\n return await this._fetch(baseUri, relativeUri, initRequest);\r\n }\r\n\r\n public async putAsync(relativeUri: string, value: any, baseUri: string = null, headers?: Headers): Promise {\r\n let initRequest = this._initializeInitRequest('PUT', JSON.stringify(value), headers);\r\n\r\n return await this._fetch(baseUri, relativeUri, initRequest);\r\n }\r\n\r\n public async deleteAsync(relativeUri: string, value: any, baseUri: string = null, headers?: Headers): Promise {\r\n let initRequest = this._initializeInitRequest('DELETE', JSON.stringify(value), headers);\r\n\r\n return await this._fetch(baseUri, relativeUri, initRequest);\r\n }\r\n\r\n protected _initializeInitRequest(method: HttpVerb, body: any = null, headers: Headers = null): RequestInit {\r\n let initRequest: RequestInit = {\r\n ...this._requestInit,\r\n method: method\r\n };\r\n\r\n if (body) {\r\n initRequest.body = body;\r\n }\r\n\r\n initRequest.headers = new Headers(initRequest.headers);\r\n\r\n for (let h of (this._requestInit.headers as Headers).entries()) {\r\n initRequest.headers.set(h[0], h[1]);\r\n }\r\n for (let h of HttpClient._jsonContentHeader.entries()) {\r\n initRequest.headers.set(h[0], h[1]);\r\n }\r\n\r\n if (headers) {\r\n for (let h of headers.entries()) {\r\n initRequest.headers.set(h[0], h[1]);\r\n }\r\n }\r\n\r\n return initRequest;\r\n }\r\n\r\n protected buildUri(baseUri: string, relativeUri: string): string {\r\n return baseUri\r\n ? urlJoin(baseUri, relativeUri)\r\n : relativeUri;\r\n }\r\n\r\n private async _fetch(baseUri: string, relativeUri: string, initRequest: RequestInit): Promise {\r\n return await fetch(\r\n this._uriService.getAbsoluteUri(\r\n this.buildUri(baseUri, relativeUri)\r\n ),\r\n initRequest\r\n );\r\n }\r\n\r\n public get bearerToken(): string {\r\n return this._bearerToken;\r\n }\r\n\r\n public set bearerToken(token: string) {\r\n if (token) {\r\n this._bearerToken = token;\r\n (this._requestInit.headers as Headers).set('Authorization', `Bearer ${token}`);\r\n }\r\n else {\r\n (this._requestInit.headers as Headers).delete('Authorization');\r\n }\r\n }\r\n\r\n public get antiForgeryToken(): string {\r\n return this._antiForgeryToken;\r\n }\r\n\r\n public set antiForgeryToken(antiForgeryToken: string) {\r\n this._antiForgeryToken = antiForgeryToken;\r\n }\r\n\r\n protected _bearerToken: string;\r\n protected _antiForgeryToken: string;\r\n protected readonly _uriService: IUriService;\r\n protected readonly _requestInit: RequestInit;\r\n\r\n protected static readonly _jsonContentHeader: Headers = new Headers({\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n });\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { inject, injectable } from 'inversify';\r\nimport { JSONPath } from 'jsonpath-plus';\r\nimport moment from 'moment';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class LocalizerService {\r\n constructor(@inject(AppContext) appContext: AppContext, @inject(HttpClient) httpClient: HttpClient) {\r\n this._appContext = appContext;\r\n this._httpClient = httpClient;\r\n }\r\n\r\n public async loadTranslationAsync(codeCulture: string): Promise {\r\n if (this.locale?.[codeCulture]) {\r\n return;\r\n }\r\n\r\n let r = await this._httpClient.getAsync(`locale/i18n`);\r\n this.locale = {};\r\n this.locale[codeCulture] = await r.json();\r\n }\r\n\r\n public async getTermsOfServicesAsync(codeCulture: string): Promise {\r\n return await (await this._httpClient.getAsync(`i18n/tos/${codeCulture}.md`, '/'))\r\n .text();\r\n }\r\n\r\n public get codeCulture(): string {\r\n return this._appContext.codeCulture;\r\n }\r\n\r\n public getTemplateString(key: string): string {\r\n if (!this.locale?.[this.codeCulture]) {\r\n return key;\r\n }\r\n\r\n return JSONPath({ path: key, json: this.locale[this.codeCulture], preventEval: true, wrap: false });\r\n }\r\n\r\n public localizeDate(date: Date): moment.Moment {\r\n return moment(date).locale(this._appContext.codeCulture);\r\n }\r\n\r\n public localize(key: string, ...params: Array): string {\r\n const rawString = this.getTemplateString(key);\r\n return String.Format(rawString, ...params);\r\n }\r\n\r\n public getISODate(date: Date): string {\r\n return moment(date).toISOString(true).substr(0, 10);\r\n }\r\n\r\n public getISOTime(date: Date): string {\r\n return moment(date).toISOString(true).substr(11, 5);\r\n }\r\n\r\n public get utcOffset(): number {\r\n return moment().utcOffset();\r\n }\r\n\r\n public locale: any;\r\n protected readonly _appContext: AppContext;\r\n protected readonly _httpClient: HttpClient;\r\n}\r\n\r\n@injectable()\r\nexport class LocalizerServiceStandalone extends LocalizerService {\r\n public async loadTranslationAsync(codeCulture: string): Promise {\r\n let r = await this._httpClient.getAsync(`local/i18n`);\r\n\r\n this.locale = {};\r\n this.locale[codeCulture] = await r.json();\r\n }\r\n}\r\n","const Routes = {\r\n Api: {\r\n Platforms: {\r\n /** api/platforms */\r\n Base: 'api/platforms',\r\n /** api/platforms/run */\r\n Run: 'api/platforms/run',\r\n /** api/platforms/stop */\r\n Stop: 'api/platforms/stop',\r\n /** api/platforms/{platformId}/logo */\r\n Logo: 'api/platforms/{0}/logo',\r\n /** api/platforms/{platformId} */\r\n Get: 'api/platforms/{0}',\r\n Settings: {\r\n /** api/platforms/settings/drive */\r\n Drive: 'api/platforms/settings/drive',\r\n /** api/platforms/settings/security */\r\n Security: 'api/platforms/settings/security',\r\n /** api/platforms/settings/login */\r\n Login: 'api/platforms/settings/login',\r\n Dns: {\r\n /** api/platforms/settings/dns */\r\n Base: 'api/platforms/settings/dns',\r\n /** api/platforms/settings/dns/{dnsId} */\r\n Get: 'api/platforms/settings/dns/{0}',\r\n /** api/platforms/settings/dns/{dnsId} */\r\n Edit: 'api/platforms/settings/dns/{0}'\r\n }\r\n },\r\n Subscriptions: {\r\n /** api/platforms/{platformId}/subscriptions */\r\n Base: 'api/platforms/{0}/subscriptions',\r\n /** api/platforms/{platformId}/subscriptions/{subscriptionId} */\r\n Get: 'api/platforms/{0}/subscriptions/{1}',\r\n /** api/platforms/{platformId}/subscriptions/delete */\r\n Delete: 'api/platforms/{0}/subscriptions/delete'\r\n },\r\n IdentityProviders: {\r\n /** api/identityproviders */\r\n Base: 'api/identityproviders',\r\n /** api/platforms/{platformId}/identityproviders/{identityProviderId} */\r\n Get: 'api/platforms/{0}/identityproviders/{1}',\r\n /** api/platforms/{platformId}/identityproviders */\r\n Create: 'api/platforms/{0}/identityproviders',\r\n /** api/platforms/{platformId}/identityproviders/testldap */\r\n TestLdap: 'api/platforms/{0}/identityproviders/testldap',\r\n /** api/platforms/{platformId}/identityproviders/delete */\r\n Delete: 'api/platforms/{0}/identityproviders/delete',\r\n /** api/platforms/{platformId}/identityproviders/{identityProviderId}/synchronizeldap */\r\n SynchronizeLdap: 'api/platforms/{0}/identityproviders/{1}/synchronizeldap'\r\n }\r\n },\r\n Subscriptions: {\r\n /** api/subscriptions */\r\n Base: 'api/subscriptions',\r\n /** api/subscriptions/{subscriptionId} */\r\n Get: 'api/subscriptions/{0}'\r\n },\r\n Agents: {\r\n /** api/agents */\r\n Base: 'api/agents',\r\n /** api/agents/{agentId} */\r\n Agent: 'api/agents/{0}',\r\n },\r\n Workers: {\r\n /** api/workers */\r\n Base: 'api/workers',\r\n /** api/workers/{workerId} */\r\n Worker: 'api/workers/{0}',\r\n /** api/workers/{workerId}/tasks */\r\n Tasks: 'api/workers/{0}/tasks',\r\n /** api/workers/{workerId}/state */\r\n WorkerState: 'api/workers/{0}/state',\r\n /** /api/workers/{workerId}/services/state*/\r\n ServicesState: '/api/workers/{0}/services/state',\r\n /** /api/workers/{workerId}/services/{serviceId}/state */\r\n ServiceState: '/api/workers/{0}/services/{1}/state'\r\n },\r\n Tasks: {\r\n /** /api/tasks */\r\n Base: 'api/tasks',\r\n /** api/tasks/{taskId}/restart */\r\n Restart: 'api/tasks/{0}/restart'\r\n },\r\n Services: {\r\n /** api/services */\r\n Base: 'api/services',\r\n },\r\n Settings: {\r\n Mail: {\r\n /** api/platforms/settings/mail */\r\n Base: 'api/platforms/settings/mail',\r\n /** api/platforms/settings/mail/test */\r\n Test: 'api/platforms/settings/mail/test'\r\n }\r\n },\r\n List: {\r\n /** api/list/mailproviders */\r\n MailProviders: 'api/list/mailproviders',\r\n /** api/list/countries */\r\n Countries: 'api/list/countries',\r\n /** api/list/genders */\r\n Genders: 'api/list/genders',\r\n /** api/list/languages */\r\n Languages: 'api/list/languages',\r\n /** api/list/themes */\r\n Themes: 'api/list/themes',\r\n /** api/list/notificationusertypes */\r\n Notifications: 'api/list/notificationusertypes'\r\n },\r\n Roles: {\r\n /** api/platforms/{platformId}/roles/delete */\r\n Delete: 'api/platforms/{0}/roles/delete'\r\n },\r\n Tags: {\r\n /** api/tags */\r\n Base: 'api/tags',\r\n /** api/tags/list */\r\n List: 'api/tags/list',\r\n /** api/tags/search */\r\n Search: 'api/tags/search'\r\n },\r\n Drive: {\r\n /** api/drive */\r\n Base: 'api/drive',\r\n Items: {\r\n /** api/drive/items */\r\n Base: 'api/drive/items',\r\n /** 'api/drive/items/{fileGuid}' */\r\n Item: 'api/drive/items/{0}',\r\n /** api/drive/items/{fileGuid}/permission */\r\n Permission: 'api/drive/items/{0}/permission'\r\n },\r\n /** api/drive/symlinks */\r\n Symlinks: 'api/drive/symlinks'\r\n },\r\n Projects: {\r\n /** api/projects */\r\n Base: 'api/projects',\r\n Assets: {\r\n /** api/projects/{projectId}/assets */\r\n Base: 'api/projects/{0}/assets',\r\n /** api/projects/{projectId}/items/{itemId} */\r\n Asset: 'api/projects/{0}/assets/{1}',\r\n /** api/projects/assets/{itemId}/children */\r\n Children: 'api/projects/assets/{0}/children'\r\n },\r\n Templates: {\r\n /** api/projects/templates */\r\n Base: 'api/projects/templates',\r\n /** api/projects/templates/{templateId} */\r\n Template: 'api/projects/templates/{0}',\r\n /** api/projects/templates/{templateId}/thumbnail */\r\n Thumbnail: 'api/projects/templates/{0}/thumbnail'\r\n },\r\n Types: {\r\n /** api/projects/types */\r\n Base: 'api/projects/types'\r\n },\r\n Imports: {\r\n /** api/projects/imports */\r\n Base: 'api/projects/imports'\r\n },\r\n /** api/projects/{projectId}/assets/{assetItemId}/scanexist */\r\n ScanExist: 'api/projects/{0}/assets/{1}/scanexist',\r\n /** api/projects/{projectId}/assets/{assetItemId}/readscanat/{theta}/{phi} */\r\n ReadScanAt: 'api/projects/{0}/assets/{1}/readscanat/{2}/{3}',\r\n /**\r\n * override route {culture}/areas/project/home/downloadstandalone\r\n * by api/projects/{projectId:int}/downloadstandalone?culture={culture}\r\n */\r\n Standalone: 'api/projects/{0}/downloadstandalone',\r\n /** api/projects/{projectId}/tags */\r\n Tags: 'api/projects/{0}/tags',\r\n /** api/projects/{projectId}/export */\r\n Export: 'api/projects/{0}/export',\r\n /** api/projects/{projectId} */\r\n Project: 'api/projects/{0}',\r\n /** api/projects/{projectId}/published */\r\n Published: 'api/projects/{0}/published',\r\n /** api/projects/{projectId}/changeowner */\r\n ChangeOwner: 'api/projects/{0}/changeowner',\r\n Graph: {\r\n /** api/projects/{projectId}/graph/waypointgraph.gexf */\r\n WaypointGraph: 'api/projects/{0}/graph/waypointgraph.gexf',\r\n Waypoints: {\r\n /** api/projects/{projectId}/graph/waypoints */\r\n Base: 'api/projects/{0}/graph/waypoints',\r\n Waypoint: {\r\n /** api/projects/{projectId}/graph/waypoints/{waypointId} */\r\n Base: 'api/projects/{0}/graph/waypoints/{1}',\r\n /** api/projects/{projectId}/graph/waypoints/{waypointId}/assets */\r\n Assets: 'api/projects/{0}/graph/waypoints/{1}/assets',\r\n /** api/projects/{projectId}/graph/waypoints/{waypointId}/assets/{assetId} */\r\n Asset: 'api/projects/{0}/graph/waypoints/{1}/assets/{2}'\r\n }\r\n },\r\n Edges: {\r\n /** api/projects/{projectId}/graph/edges */\r\n Base: 'api/projects/{0}/graph/edges',\r\n /** api/projects/{projectId}/graph/edges/{sourceId}/{targetId} */\r\n Edge: 'api/projects/{0}/graph/edges/{1}/{2}'\r\n }\r\n }\r\n },\r\n Audits: {\r\n Logs: {\r\n /** administratorportal/auditlogs/getdata */\r\n Base: 'administratorportal/auditlogs/getdata',\r\n }\r\n },\r\n Users: {\r\n /** api/users */\r\n Base: 'api/users',\r\n /** api/users/{userGuid} */\r\n User: 'api/users/{0}',\r\n /** api/users/{userGuid}/avatar */\r\n Avatar: 'api/users/{0}/avatar',\r\n /** api/users/{userId}/notifications */\r\n Notifications: 'api/users/{0}/notifications',\r\n /** api/users/{userId}/profile */\r\n Profile: 'api/users/{0}/profile',\r\n /** api/users/{userId}/projects */\r\n Projects: 'api/users/{0}/projects',\r\n /** api/users/{userGuid}/groups */\r\n Groups: 'api/users/{0}/groups',\r\n /** api/users/{userGuid}/filepermissions */\r\n FilePermissions: 'api/users/{0}/filepermissions',\r\n /** api/users/{userGuid}/shares */\r\n shares: 'api/users/{0}/shares',\r\n /** api/users/export.csv */\r\n Export: 'api/users/export.csv',\r\n Drive: {\r\n Search: {\r\n /** api/users/{userId}/drive/search/import */\r\n Import: 'api/users/{0}/drive/search/import'\r\n }\r\n },\r\n /** api/public/users */\r\n Public: 'api/public/users'\r\n },\r\n Groups: {\r\n /** api/groups */\r\n Base: 'api/groups',\r\n /** api/groups/{groupId} */\r\n Group: 'api/groups/{0}',\r\n /** api/groups/{groupId}/members */\r\n Members: 'api/groups/{0}/members',\r\n /** api/groups/{groupId}/shares */\r\n Shares: 'api/groups/{0}/shares'\r\n },\r\n Explore: {\r\n /** api/explore/search */\r\n Search: 'api/explore/search'\r\n },\r\n Authentication: {\r\n /** api/authentication */\r\n Base: 'api/authentication',\r\n /** api/authentication/login */\r\n Login: 'api/authentication/login',\r\n /** api/authentication/sso */\r\n SingleSignOn: 'api/authentication/sso',\r\n /** api/authentication/share */\r\n Share: 'api/authentication/share'\r\n },\r\n Account: {\r\n /** api/account */\r\n Base: 'api/account',\r\n Me: {\r\n /** api/account/me/tokens/{0} */\r\n Token: 'api/account/me/tokens/{0}',\r\n /** api/account/me/tokens */\r\n Tokens: 'api/account/me/tokens'\r\n }\r\n },\r\n Videos: {\r\n /** api/videos */\r\n Base: 'api/videos',\r\n /** api/videos/{videoId} */\r\n Video: 'api/videos/{0}',\r\n /** api/videos/{videoId}/tags */\r\n Tags: 'api/videos/{0}/tags',\r\n /** api/videos/{videoId}/shares */\r\n Shares: 'api/videos/{0}/shares',\r\n /** api/videos/{videoId}/thumbnail */\r\n Thumbnail: 'api/videos/{0}/thumbnail',\r\n /** api/videos/{videoId}/publicationstatus */\r\n PublicationStatus: 'api/videos/{0}/publicationstatus',\r\n Published: {\r\n /** api/videos/published */\r\n Base: 'api/videos/published',\r\n /** api/videos/published/{videoId} */\r\n Video: 'api/videos/published/{0}',\r\n /** api/videos/published/{videoId}/addview */\r\n AddView: 'api/videos/published/{0}/addview',\r\n /** api/videos/published/search */\r\n Search: 'api/videos/published/search',\r\n /** api/videos/published/{videoId}/comments*/\r\n Comments: 'api/videos/published/{0}/comments'\r\n }\r\n },\r\n SmartObjects: {\r\n /** api/smart-objects */\r\n Base: 'api/smart-objects',\r\n /** api/smart-objects/{objectId} */\r\n SmartObject: 'api/smart-objects/{0}',\r\n /** api/smart-objects/{objectId}/properties/{propertyId} */\r\n LookupProperty: 'api/smart-objects/{0}/properties/{1}'\r\n },\r\n SmartObjectDefinitions: {\r\n /** api/smart-object-definitions */\r\n Base: 'api/smart-object-definitions',\r\n /** api/smart-object-definitions/{objectId} */\r\n SmartObjectDefinition: 'api/smart-object-definitions/{0}',\r\n /** api/smart-object-definitions:/root */\r\n RootCategory: 'api/smart-object-definitions:/root',\r\n /** api/smart-object-definitions:/root/{categoryId} */\r\n Category: 'api/smart-object-definitions/{0}',\r\n /** api/smart-object-definitions:/root/{categoryId}/children */\r\n Categories: 'api/smart-object-definitions:/root/{0}/children',\r\n },\r\n GeoRouting: {\r\n /** api/georouting/routes */\r\n Routes: 'api/georouting/routes',\r\n },\r\n JsonSchema: {\r\n /** api/json-schemas */\r\n Base: 'api/json-schemas',\r\n /** api/json-schemas/{objectId} */\r\n JsonSchema: 'api/json-schemas/{0}',\r\n },\r\n }\r\n};\r\n\r\nexport { Routes };\r\n","import { ICaptchaSettings } from 'Api/Dto/Admin/CaptchaSettings';\r\nimport { IDomainNameSystem } from 'Api/Dto/Admin/DomainNameSystem';\r\nimport { IDriveSettings } from 'Api/Dto/Admin/DriveSettings';\r\nimport { IIdentityProvider } from 'Api/Dto/Admin/IdentityProvider';\r\nimport { ILoginSettings } from 'Api/Dto/Admin/LoginSettings';\r\nimport { IPlatform } from 'Api/Dto/Admin/Platform';\r\nimport { ISubscription } from 'Api/Dto/Admin/Subscription';\r\nimport { IDomainNameSystemViewModel } from 'Api/Dto/Admin/ViewModels/DomainNameSystem/DomainNameSystemViewModel';\r\nimport { IdentityProviderViewModel } from 'Api/Dto/Admin/ViewModels/IdentityProvider/IdentityProviderViewModel';\r\nimport { AddSubscriptionViewModel } from 'Api/Dto/Admin/ViewModels/Subscription/AddSubscriptionViewModel';\r\nimport { EditSubscriptionViewModel } from 'Api/Dto/Admin/ViewModels/Subscription/EditSubscriptionViewModel';\r\nimport { IPaginationResult, IQueryResultBase, QueryException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class PlatformService {\r\n public constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n public async getPlatformsAsync(): Promise> {\r\n const response: Response = await this._httpClient.getAsync(Routes.Api.Platforms.Base);\r\n\r\n const paginationResult: IPaginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n return paginationResult.items;\r\n }\r\n\r\n public async getPlatformByIdAsync(platformId: number): Promise {\r\n let response = await this._httpClient.getAsync(String.Format(Routes.Api.Platforms.Get, platformId));\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n //TODO handle error and use type queryresult.\r\n }\r\n\r\n return jsonResponse as IPlatform;\r\n }\r\n\r\n public async changeLogoAsync(platformId: number, logo: Blob): Promise {\r\n const response = await this._httpClient.postFormDataAsync(String.Format(Routes.Api.Platforms.Logo, platformId), { logo });\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteLogoAsync(platformId: number): Promise {\r\n const response = await this._httpClient.deleteAsJsonAsync(null, null, String.Format(Routes.Api.Platforms.Logo, platformId));\r\n\r\n if (response.status == 400) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deletePlatformsAsync(platformIds: number[]): Promise {\r\n const response = await this._httpClient.deleteAsJsonAsync(platformIds, null, Routes.Api.Platforms.Base);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new Error(queryError.error.message);\r\n }\r\n }\r\n\r\n public async deleteSubscriptionAsync(platformId: number, subscriptionIds: Array): Promise {\r\n const url = String.Format(Routes.Api.Platforms.Subscriptions.Delete, platformId);\r\n const response = await this._httpClient.postFormDataAsync(url, { subscriptionIds: subscriptionIds });\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async stopPlatformsAsync(platformIds: number[]): Promise {\r\n const response = await this._httpClient.postAsJsonAsync(platformIds, null, Routes.Api.Platforms.Stop);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new Error(queryError.error.message);\r\n }\r\n }\r\n\r\n public async runPlatformsAsync(platformIds: number[]): Promise {\r\n const response = await this._httpClient.postAsJsonAsync(platformIds, null, Routes.Api.Platforms.Run);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new Error(queryError.error.message);\r\n }\r\n }\r\n\r\n public async getCurrentDriveSettingsAsync(): Promise {\r\n let response = await this._httpClient.getAsync(Routes.Api.Platforms.Settings.Drive);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as IDriveSettings;\r\n }\r\n\r\n public async updateDriveSettingsAsync(driveSettings: IDriveSettings): Promise {\r\n let response = await this._httpClient.postAsJsonAsync(driveSettings, null, Routes.Api.Platforms.Settings.Drive);\r\n\r\n if (response.status == 400) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async getCurrentSecuritySettingsAsync(): Promise {\r\n let response = await this._httpClient.getAsync(Routes.Api.Platforms.Settings.Security);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as ICaptchaSettings;\r\n }\r\n\r\n public async updateSecuritySettingsAsync(settings: ICaptchaSettings): Promise {\r\n let response = await this._httpClient.postAsJsonAsync(settings, null, Routes.Api.Platforms.Settings.Security);\r\n\r\n if (response.status == 400) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async getCurrentLoginSettingsAsync(): Promise {\r\n const response = await this._httpClient.getAsync(Routes.Api.Platforms.Settings.Login);\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as ILoginSettings;\r\n }\r\n\r\n public async updateLoginSettingsAsync(settings: ILoginSettings): Promise {\r\n const response = await this._httpClient.postAsJsonAsync(\r\n settings,\r\n null,\r\n Routes.Api.Platforms.Settings.Login\r\n );\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async getSubscriptionAsync(platformId: number, subscriptionId: number): Promise {\r\n const url = String.Format(Routes.Api.Platforms.Subscriptions.Get, platformId, subscriptionId);\r\n const response = await this._httpClient.getAsync(url);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as ISubscription;\r\n }\r\n\r\n public async addSubscriptionAsync(viewModel: AddSubscriptionViewModel): Promise {\r\n let response = await this._httpClient.postFormDataAsync(Routes.Api.Subscriptions.Base, viewModel);\r\n\r\n if (response.status != 201) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async addIdentityProviderAsync(platformId: number, viewModel: IdentityProviderViewModel): Promise {\r\n let response = await this._httpClient.postFormDataAsync(String.Format(Routes.Api.Platforms.IdentityProviders.Create, platformId), viewModel);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async editSubscriptionAsync(platformId: number, subscriptionId: number, viewModel: EditSubscriptionViewModel): Promise {\r\n const url = String.Format(Routes.Api.Platforms.Subscriptions.Get, platformId, subscriptionId);\r\n //TODO: utiliser Patch\r\n const response = await this._httpClient.postFormDataAsync(url, viewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteIdentityProviderAsync(platformId: number, identityProviderIds: Array): Promise {\r\n const url = String.Format(Routes.Api.Platforms.IdentityProviders.Delete, platformId);\r\n const response = await this._httpClient.postFormDataAsync(url, { identityProviderIds: identityProviderIds });\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async getIdentityProviderAsync(platformId: number, identityProviderId: number): Promise {\r\n const url = String.Format(Routes.Api.Platforms.IdentityProviders.Get, platformId, identityProviderId);\r\n const response = await this._httpClient.getAsync(url);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as IdentityProviderViewModel;\r\n }\r\n\r\n public async getIdentityProvidersAsync(\r\n platformId: number,\r\n searchText?: string,\r\n sortOrder?: string,\r\n page: number = 1,\r\n pageSize: number = 100\r\n ): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n Routes.Api.Platforms.IdentityProviders.Base,\r\n null,\r\n {\r\n platformId,\r\n searchText,\r\n sortOrder,\r\n page,\r\n pageSize\r\n });\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async updateIdentityProviderAsync(platformId: number, identityProviderId: number, viewModel: IdentityProviderViewModel): Promise {\r\n const url = String.Format(Routes.Api.Platforms.IdentityProviders.Get, platformId, identityProviderId);\r\n const response = await this._httpClient.postFormDataAsync(url, viewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteDnsAsync(platformId: number, domainNameSystemIds: Array): Promise {\r\n const url = String.Format(Routes.Api.Platforms.Settings.Dns.Base);\r\n const response = await this._httpClient.deleteAsJsonAsync(domainNameSystemIds, null, url);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async createDnsAsync(addDomainViewModel: IDomainNameSystemViewModel): Promise {\r\n const url = Routes.Api.Platforms.Settings.Dns.Base;\r\n let response = await this._httpClient.postAsync(url, addDomainViewModel);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as IDomainNameSystem;\r\n }\r\n\r\n public async editDnsAsync(dnsId: number, editDomainViewModel: IDomainNameSystemViewModel): Promise {\r\n const url = String.Format(Routes.Api.Platforms.Settings.Dns.Edit, dnsId);\r\n let response = await this._httpClient.putAsync(url, editDomainViewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n private readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { IAbsoluteUriBehavior, IUriService } from 'Api/Contracts/Interfaces';\r\nimport { ArgumentNullException } from 'Api/Dto/Exception';\r\nimport { injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class UriService implements IUriService {\r\n public constructor(baseUri: string | (() => string), behavior: IAbsoluteUriBehavior) {\r\n if (!behavior) {\r\n throw new ArgumentNullException('behavior');\r\n }\r\n\r\n this.baseUri = baseUri;\r\n this._absoluteUriBehavior = behavior;\r\n }\r\n\r\n public getAbsoluteUri(relativeUri: string, parameters?: Record): string {\r\n return this._absoluteUriBehavior.getAbsoluteUri(this.getBaseUri(), relativeUri, parameters);\r\n }\r\n\r\n public getAbsoluteUriAsync(relativeUri: string, parameters?: Record): Promise {\r\n return this._absoluteUriBehavior.getAbsoluteUriAsync(this.getBaseUri(), relativeUri, parameters);\r\n }\r\n\r\n public getBaseUri(): string {\r\n return typeof this.baseUri === 'string'\r\n ? this.baseUri\r\n : this.baseUri();\r\n }\r\n\r\n public baseUri: string | (() => string);\r\n private readonly _absoluteUriBehavior: IAbsoluteUriBehavior;\r\n}\r\n","import { IUserLogin } from 'Api/Dto/Account/UserLogin';\r\nimport { IForgotPasswordViewModel } from 'Api/Dto/Account/ViewModels/ForgotPasswordViewModel';\r\nimport { IGenerateNewApiKeyViewModel } from 'Api/Dto/Account/ViewModels/GenerateNewApiKeyViewModel';\r\nimport { IRegisterViewModel } from 'Api/Dto/Account/ViewModels/RegisterViewModel';\r\nimport { IEditEmailViewModel } from 'Api/Dto/Profile/ViewModels/EditEmailViewModel';\r\nimport { IPaginationResult, IQueryResultBase, QueryException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class AccountService {\r\n constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n public async getTokensAsync(search: string, page: number = 1, pageSize: number = 100): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n Routes.Api.Account.Me.Tokens,\r\n null,\r\n {\r\n search,\r\n page,\r\n pageSize\r\n });\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getTokenAsync(tokenId: string): Promise {\r\n const response: Response = await this._httpClient.getAsync(\r\n Routes.Api.Account.Me.Tokens,\r\n null,\r\n {\r\n tokenId: tokenId\r\n });\r\n\r\n return this._responseHandler.handleResponseAsync(response);\r\n }\r\n\r\n public async addTokenAsync(keyName: string): Promise {\r\n const response: Response = await this._httpClient.postAsync(\r\n Routes.Api.Account.Me.Tokens,\r\n {\r\n keyName: keyName\r\n } as IGenerateNewApiKeyViewModel);\r\n\r\n return this._responseHandler.handleResponseAsync(response);\r\n }\r\n\r\n public async deleteTokensAsync(tokenIds: Array): Promise {\r\n const response: Response = await this._httpClient.deleteAsync(\r\n Routes.Api.Account.Me.Tokens,\r\n tokenIds);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async deleteTokenAsync(tokenId: string): Promise {\r\n const response: Response = await this._httpClient.deleteAsync(\r\n String.Format(Routes.Api.Account.Me.Token, tokenId),\r\n null);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async requestResetPassword(email: string): Promise {\r\n const response = await this._httpClient.postFormDataAsync(\r\n 'account/forgotpassword',\r\n { email: email } as IForgotPasswordViewModel\r\n );\r\n\r\n if (response.status != 204) {\r\n const queryResult = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryResult.error);\r\n }\r\n }\r\n\r\n public async webRegisterAsync(viewModel: IRegisterViewModel): Promise {\r\n const response = await this._httpClient.postFormDataAsync(\r\n 'account/register',\r\n viewModel\r\n );\r\n\r\n if (response.status != 204) {\r\n const queryException = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryException.error);\r\n }\r\n }\r\n\r\n public async webUpdateEmailAsync(viewModel: IEditEmailViewModel): Promise {\r\n const response = await this._httpClient.postFormDataAsync(\r\n 'profile/profile/editemail',\r\n viewModel\r\n );\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as string;\r\n }\r\n\r\n private readonly _httpClient: HttpClient;\r\n private readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { IAuditLog } from 'Api/Dto/Audit';\r\nimport { IPaginationResult } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { Routes } from 'Api/Routes';\r\nimport { inject, injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class AuditService {\r\n constructor(@inject(HttpClient) httpClient: HttpClient) {\r\n this._httpClient = httpClient;\r\n }\r\n\r\n public async getDataAsync(params: any): Promise> {\r\n let response = await this._httpClient.getAsync(Routes.Api.Audits.Logs.Base, null, params);\r\n\r\n return await response.json() as IPaginationResult;\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n}\r\n","import { ILoginRequest, ILoginResponse, IWebLoginViewModel } from 'Api/Dto/Authentication';\r\nimport { Exception } from 'Api/Dto/Exception';\r\nimport { ForbiddenException, IQueryResultBase, QueryException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { inject, injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class AuthenticationService {\r\n constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n public async signInAsync(params: ILoginRequest): Promise {\r\n let response = await this._httpClient.postAsync(Routes.Api.Authentication.Login, params, null);\r\n const queryResult = await response.json();\r\n\r\n if (response.status !== 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as ILoginResponse;\r\n }\r\n\r\n public async singleSignOnAsync(onRedirect?: () => void): Promise {\r\n let response = await this._httpClient.getAsync(Routes.Api.Authentication.SingleSignOn);\r\n\r\n if (response.redirected) {\r\n onRedirect?.();\r\n\r\n return null;\r\n }\r\n\r\n if (response.status != 200) {\r\n if (response.status == 403) {\r\n throw new ForbiddenException();\r\n }\r\n else {\r\n throw new Exception('Connection to the server is not possible');\r\n }\r\n }\r\n\r\n const queryResult = await response.json();\r\n\r\n return queryResult as ILoginResponse;\r\n }\r\n\r\n public async webSignInAsync(userName: string, password: string, rememberMe: boolean = false): Promise {\r\n const response = await this._httpClient.postFormDataAsync(\r\n 'account/login',\r\n {\r\n userName: userName,\r\n password: password,\r\n rememberMe: rememberMe\r\n } as IWebLoginViewModel\r\n )\r\n\r\n if (response.status != 204) {\r\n const queryException = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryException.error);\r\n }\r\n }\r\n\r\n public async authenticateForShareAsync(token: string, password: string): Promise {\r\n return await this._responseHandler.handleResponseAsync(\r\n await this._httpClient.postAsync(Routes.Api.Authentication.Share, {\r\n token: token,\r\n password: password }));\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n protected readonly _responseHandler: IResponseHandler;\r\n}\r\n","export class SearchFilesViewModel {\r\n public constructor(\r\n currentDirectoryGuid: string,\r\n token: string,\r\n searchText: string,\r\n filter: string,\r\n maxPageSize: number\r\n ) {\r\n this.currentDirectoryGuid = currentDirectoryGuid;\r\n this.token = token;\r\n this.searchText = searchText;\r\n this.filter = filter;\r\n this.maxPageSize = maxPageSize;\r\n }\r\n public currentDirectoryGuid: string;\r\n public token: string;\r\n public searchText: string;\r\n public filter: string;\r\n public maxPageSize: number;\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { ISymlinkInputDto, Tag } from 'Api/Contracts/Dtos';\r\nimport { ITagService } from 'Api/Contracts/Interfaces';\r\nimport { IUserFileShares } from 'Api/Dto/Admin/UserFileShares';\r\nimport { FileTaskResult, File as FileVison, IFilePermission, IFileValidationResult } from 'Api/Dto/Drive';\r\nimport { SearchFilesViewModel } from 'Api/Dto/Drive/ViewModels/SearchFilesViewModel';\r\nimport { Exception } from 'Api/Dto/Exception';\r\nimport { IPaginationResult, IQueryResultBase, IServerPaginationResult, QueryException } from 'Api/Dto/QueryResult';\r\nimport { ISearchResult } from 'Api/Dto/SearchResult';\r\nimport { IUserFileShare } from 'Api/Dto/UserFileShare';\r\nimport { FileSelectionType } from 'Api/Enums/FileSelectionType';\r\nimport { DrivePermissions } from 'Api/Enums/Permissions';\r\nimport { ChunkedFile } from 'Api/FileUploader';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { CreateFileResult, GetFileInfoResult, GetFilesResult, MoveFileViewModel, ShareResult } from 'Api/ViewModel/Drive';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\nexport type SortDirection = 'Ascending' | 'Descending';\r\nexport type OrderBy = 'Name' | 'CreateDate' | 'UpdateDate' | 'Rank';\r\nexport type Filter = 'None' | 'Image' | 'Video' | 'PDF' | 'Other';\r\n\r\n@injectable()\r\nexport class DriveService implements ITagService {\r\n protected _appContext: AppContext;\r\n\r\n constructor(\r\n @inject(AppContext) appContext: AppContext,\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IVisonUriService) uriService: IVisonUriService,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._appContext = appContext;\r\n this._httpClient = httpClient;\r\n this._uriService = uriService;\r\n this._responseHandler = responseHandler;\r\n\r\n this.codeCulture = appContext.codeCulture;\r\n this.searchText = null;\r\n this.orderBy = 'Name';\r\n this.direction = 'Ascending';\r\n this.filter = 'None';\r\n }\r\n\r\n public async validateFilesAsync(parentGuid: string, files: Array<{ name: string, size: number }>): Promise> {\r\n let postData = {\r\n destinationDirectory: parentGuid,\r\n files: files\r\n };\r\n\r\n let response = await this._httpClient.postAsync('/drive/home/validatefiles', postData);\r\n let jsonResult = await response.json();\r\n\r\n return jsonResult as Array;\r\n }\r\n\r\n public onCreateFileAfterUploadCallbackFactory(parentDirectory: FileVison): (chunk?: ChunkedFile) => Promise {\r\n const directoryGuid = parentDirectory.guid;\r\n\r\n return async f => {\r\n await this.addFileAsync(directoryGuid, f);\r\n };\r\n }\r\n\r\n public onReplaceFileAfterUploadCallbackFactory(fileToReplaceGuid: string): (chunk?: ChunkedFile) => Promise {\r\n return async f => {\r\n await this.replaceFileAsync(fileToReplaceGuid, f.guid);\r\n };\r\n }\r\n\r\n public onValidateServerSideCallbackFactory(parentDirectory: FileVison): (files: Array) => Promise> {\r\n return async (files: Array) => {\r\n const validationResults: Array = await this.validateFilesAsync(\r\n parentDirectory.guid,\r\n files.map(f => ({ name: f.name, size: f.size }))\r\n );\r\n\r\n return validationResults\r\n .filter(vr => vr.errors.length > 0)\r\n .map(vr => {\r\n const file = files.find(f => f.name == vr.fileName);\r\n\r\n const chunkedFile = new ChunkedFile(file);\r\n chunkedFile.hasError = true;\r\n chunkedFile.errors = vr.errors;\r\n\r\n return chunkedFile;\r\n });\r\n }\r\n }\r\n\r\n public async share(selectedFile: FileVison, identityIds: Array, allowEdit: boolean, expireDateAfterDays: number = 0): Promise {\r\n // /fr-fr/drive/share/\r\n let url = `/drive/home/share`;\r\n\r\n let postData = {\r\n 'identityIds': identityIds,\r\n 'allowEdit': allowEdit,\r\n 'fileId': selectedFile.fileId,\r\n 'expireDateAfterDays': expireDateAfterDays\r\n };\r\n\r\n const response = await this._httpClient.postAsync(url, postData);\r\n return await response.json();\r\n }\r\n\r\n public async getShareLink(selectedFile: FileVison, allowEdit: boolean, expireDateAfterDays: number = 0, password: string = null): Promise {\r\n // /fr-fr/drive/getsharelink/\r\n let url = `/drive/home/getsharelink`;\r\n\r\n let postData = {\r\n 'allowEdit': allowEdit,\r\n 'fileId': selectedFile.fileId,\r\n 'expireDateAfterDays': expireDateAfterDays,\r\n 'password': password\r\n };\r\n\r\n const response = await this._httpClient.postAsync(url, postData);\r\n return await response.json();\r\n }\r\n\r\n public async removeSharesAsync(shareIds: Array): Promise {\r\n // /fr-fr/drive/removeshares/\r\n let url = `/drive/home/removeshares`;\r\n\r\n let postData = {\r\n shareIds: shareIds\r\n };\r\n\r\n let response = await this._httpClient.postAsync(url, postData);\r\n\r\n if (response.status == 400) {\r\n let jsonResult = await response.json();\r\n throw new Error(jsonResult.error.message);\r\n }\r\n }\r\n\r\n public async getFileSharesOfGroupAsync(groupId: number, page: number, pageSize: number): Promise> {\r\n let options = {\r\n page,\r\n pageSize\r\n };\r\n\r\n const response = await this._httpClient.getAsync(\r\n String.Format(Routes.Api.Groups.Shares, groupId),\r\n null,\r\n options\r\n );\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async removeSharesOfGroupAsync(groupId: number, shareIds: Array): Promise {\r\n const response = await this._httpClient.deleteAsync(\r\n String.Format(Routes.Api.Groups.Shares, groupId),\r\n shareIds\r\n );\r\n\r\n if (response.status == 400) {\r\n let jsonResult = await response.json() as IQueryResultBase;\r\n throw new QueryException(jsonResult.error);\r\n }\r\n }\r\n\r\n public async createFile(directoryGuid: string, fileUploadedGuid: string, fileName: string): Promise {\r\n // /fr-fr/drive/createfile/\r\n let url = `/drive/home/createfile`;\r\n\r\n let postData = {\r\n 'currentDirectoryGuid': directoryGuid,\r\n 'fileUploadedGuid': fileUploadedGuid,\r\n 'fileName': fileName,\r\n };\r\n\r\n let response = await this._httpClient.postAsync(url, postData);\r\n let jsonResult = await response.json();\r\n\r\n let result: CreateFileResult = {\r\n file: null,\r\n error: null\r\n };\r\n\r\n if (response.ok) {\r\n result.file = jsonResult as FileVison;\r\n }\r\n else {\r\n result.error = (jsonResult as IQueryResultBase).error.message;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public async replaceFileAsync(fileToReplaceGuid: string, fileUploadedGuid: string): Promise {\r\n let url = String.Format(Routes.Api.Drive.Items.Item, fileToReplaceGuid);\r\n\r\n let response = await this._httpClient.patchAsJsonAsync(\r\n [{ op: 'replace', path: 'physicalFile', value: fileUploadedGuid }],\r\n null,\r\n url\r\n );\r\n\r\n if (!response.ok) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async addFileAsync(directoryGuid: string, chunckedFile: ChunkedFile): Promise<{ createFileResult: CreateFileResult, chunckedFile: ChunkedFile }> {\r\n if (chunckedFile.status === 'abort') {\r\n return null;\r\n }\r\n\r\n let createFileResult = await this.createFile(directoryGuid, chunckedFile.guid, chunckedFile.name);\r\n\r\n if (!createFileResult.file) {\r\n chunckedFile.errors.push(createFileResult.error);\r\n chunckedFile.hasError = true;\r\n }\r\n\r\n return { createFileResult, chunckedFile };\r\n }\r\n\r\n public async createDirectoryAsync(directoryName: string, parentDirectory: FileVison): Promise {\r\n let value = {\r\n currentDirectoryId: parentDirectory.fileId,\r\n directoryName: directoryName\r\n };\r\n\r\n let response = await this._httpClient.postAsync('/drive/home/create', value);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status != 201) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as FileVison;\r\n }\r\n\r\n //NOK\r\n public searchFiles(parentDirectory: FileVison, inputSearchText: string, pageNumber?: number, resultPerPage?: number, token: string = null): Promise {\r\n this.searchText = inputSearchText;\r\n\r\n return this.getFiles(parentDirectory, pageNumber, resultPerPage, token);\r\n }\r\n\r\n public async searchNextPageAsync(nextSearchPageLink: string): Promise> {\r\n const response = await this._httpClient.getAsync(nextSearchPageLink, '/');\r\n\r\n return await this._searchResponseAsync(response);\r\n }\r\n\r\n public async searchFilesAsync(\r\n parentDirectory: FileVison,\r\n inputSearchText: string,\r\n filter: string,\r\n maxPageSize: number,\r\n token: string = null)\r\n : Promise> {\r\n const queryData = new SearchFilesViewModel(\r\n parentDirectory.guid,\r\n token,\r\n inputSearchText,\r\n filter,\r\n maxPageSize\r\n );\r\n\r\n const response = await this._httpClient.getAsync('drive/home/searchfiles', null, queryData);\r\n\r\n return await this._searchResponseAsync(response);\r\n }\r\n\r\n private async _searchResponseAsync(response: Response): Promise> {\r\n const paginationResult: IServerPaginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n return {\r\n found: paginationResult.result,\r\n nextLink: paginationResult.nextLink,\r\n hasMoreResults: paginationResult.nextLink != null\r\n };\r\n }\r\n\r\n /**\r\n * Déplace les fichiers sélectionnés vers un emplacement donné.\r\n * @param {Array} sourceFiles - Liste des fichiers a déplacer (id)\r\n * @param {number} folderId - Dossier de destination (id)\r\n */\r\n public async moveToAsync(sourceFiles: number[], folderId: number): Promise {\r\n // /fr-fr/drive/move/\r\n let url = `/drive/home/move`;\r\n\r\n let postData: MoveFileViewModel = {\r\n files: sourceFiles,\r\n destination: folderId\r\n };\r\n\r\n const response: Response = await this._httpClient.postAsync(url, postData);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n /**\r\n * Copie les fichiers sélectionnés vers un emplacement donné.\r\n * @param {Array} sourceFiles - Liste des fichiers a déplacer (id)\r\n * @param {number} folderId - Dossier de destination (id)\r\n */\r\n public async copyToAsync(sourceFiles: number[], folderId: number): Promise {\r\n // /fr-fr/drive/copy/\r\n let url = `/drive/home/copy`;\r\n\r\n let postData: MoveFileViewModel = {\r\n files: sourceFiles,\r\n destination: folderId\r\n };\r\n\r\n const response: Response = await this._httpClient.postAsync(url, postData);\r\n\r\n if (response.status == 400) {\r\n throw new Exception('error while copying file');\r\n }\r\n else if (response.status == 403) {\r\n throw new Exception('you do not have permission to perform this copy');\r\n }\r\n }\r\n\r\n public async getUserFileSharesAsync(userId: number, platformId: number, subscriptionId: number): Promise {\r\n const url = String.Format(Routes.Api.Users.shares, userId);\r\n\r\n let options = {\r\n platformId: platformId,\r\n subscriptionId: subscriptionId\r\n };\r\n\r\n let response = await this._httpClient.getAsync(url, null, options);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n //TODO handle error and use type queryresult.\r\n }\r\n\r\n return jsonResponse as IUserFileShares;\r\n }\r\n\r\n public async deleteFileSharesOfUserAsync(userId: string, fileSharesIds: Array): Promise {\r\n const url = String.Format(Routes.Api.Users.shares, userId);\r\n const response = await this._httpClient.deleteAsync(url, fileSharesIds);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async getFilePermissionsOfUserAsync(userId: string, page: number, pageSize: number): Promise> {\r\n const url = String.Format(Routes.Api.Users.FilePermissions, userId);\r\n\r\n const response: Response = await this._httpClient.getAsync(url, null, {\r\n page,\r\n pageSize\r\n });\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async deleteFilePermissionsOfUserAsync(userId: string, permissionsIds: Array): Promise {\r\n const url = String.Format(Routes.Api.Users.FilePermissions, userId);\r\n const response = await this._httpClient.deleteAsync(url, permissionsIds);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n //NOK\r\n public async getChildren(directory: FileVison): Promise {\r\n // /fr-fr/drive/directories/{currentId}\r\n let url = `/drive/home/directories`;\r\n\r\n if (directory != null) {\r\n url += '/?currentId=' + directory.guid;\r\n }\r\n\r\n const response = await this._httpClient.getAsync(url);\r\n return await response.json();\r\n }\r\n\r\n public async getFiles(currentDirectory?: FileVison, pageNumber?: number, resultPerPage?: number, token: string = null, listFileOfType?: FileSelectionType): Promise {\r\n // /fr-fr/drive/getfiles/\r\n let url = `/drive/home/getfiles`;\r\n\r\n if (token) {\r\n const queryString = new URLSearchParams({ token: token });\r\n url = `${url}?${queryString}`;\r\n }\r\n\r\n let currentDirectoryGuid: string = currentDirectory ? currentDirectory.guid : null;\r\n pageNumber = pageNumber || 1;\r\n resultPerPage = resultPerPage || 20;\r\n\r\n let postData = {\r\n 'currentDirectoryGuid': currentDirectoryGuid,\r\n 'orderBy': this.orderBy,\r\n 'direction': this.direction,\r\n 'searchText': null,\r\n 'pageNumber': pageNumber,\r\n 'resultPerPage': resultPerPage,\r\n 'filter': this.filter,\r\n 'token': token,\r\n 'listFileOfType': listFileOfType ?? FileSelectionType.All\r\n };\r\n\r\n return await this._responseHandler.handleResponseAsync(\r\n await this._httpClient.postAsync(url, postData)\r\n );\r\n }\r\n\r\n public async getFileInfo(selectedFile: FileVison, token?: string): Promise {\r\n // /fr-fr/drive/getfileinfo/{id}\r\n const url: string = `/drive/home/getfileinfo/${selectedFile.guid}`;\r\n\r\n const response: Response = await this._httpClient\r\n .getAsync(url, null, { 'token': token });\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync(response);\r\n }\r\n\r\n public async getFilesInfo(selectedFile: Array): Promise {\r\n // /fr-fr/drive/getfileinfo/{id}\r\n let url = `/drive/home/getfilesinfo`;\r\n\r\n const response = await this._httpClient.postAsync(url, selectedFile.map(fv => fv.guid));\r\n return await response.json();\r\n }\r\n\r\n public async getFileProcessState(selectedFile: FileVison): Promise {\r\n // /fr-fr/drive/getfileinfo/{id}\r\n let url = `/drive/home/getfileprocessstate`;\r\n\r\n const response = await this._httpClient.getAsync(url, null, { ids: selectedFile.guid });\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const [state] = jsonResponse as Array;\r\n return state || null;\r\n }\r\n\r\n public async getFilesProcessState(selectedFiles: Array): Promise> {\r\n let url = `/drive/home/getfileprocessstate`;\r\n\r\n const response = await this._httpClient.postAsync(url, selectedFiles.map(f => f.guid));\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async renameFileAsync(newName: string, selectedFile: FileVison): Promise {\r\n // /fr-fr/drive/rename/\r\n let url = `/drive/home/rename`;\r\n\r\n let postData = {\r\n 'fileId': selectedFile.fileId,\r\n 'newName': newName\r\n };\r\n\r\n const response = await this._httpClient.postAsync(url, postData);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as FileVison;\r\n }\r\n\r\n public async softDeleteFilesAsync(fileIds: Array): Promise {\r\n const response = await this._httpClient.postAsync(`/drive/home/delete`, fileIds);\r\n\r\n if (response.status != 204) {\r\n let result: IQueryResultBase = await response.json();\r\n\r\n throw new QueryException(result.error);\r\n }\r\n }\r\n\r\n public downloadSelectedFiles(selectedFiles: FileVison[], token: string = null): void {\r\n let form = document.createElement('form');\r\n\r\n form.action = this._uriService.getAbsoluteUri(\r\n `/${this.codeCulture}/asset/downloadfiles/`,\r\n {\r\n token: token,\r\n ids: selectedFiles.length == 1 ? selectedFiles[0].guid : null\r\n }\r\n );\r\n\r\n form.method = 'POST';\r\n form.setAttribute('download', null);\r\n form.target = '_blank';\r\n\r\n if (selectedFiles.length > 1) {\r\n for (let file of selectedFiles) {\r\n let input = document.createElement('input');\r\n input.type = 'hidden';\r\n input.name = 'ids';\r\n input.value = file.guid;\r\n\r\n form.appendChild(input);\r\n }\r\n }\r\n\r\n let body = document.querySelector('body');\r\n body.appendChild(form);\r\n form.submit();\r\n body.removeChild(form);\r\n }\r\n\r\n public async uploadThumbnailAsync(thumbnail: File, folderId: number): Promise {\r\n let url = `/drive/home/editthumbnail`;\r\n\r\n let data = {\r\n thumbnail: thumbnail,\r\n folderId: folderId\r\n };\r\n\r\n const response = await this._httpClient.postFormDataAsync(url, data);\r\n return await response.json();\r\n }\r\n\r\n public async deleteThumbnail(parentId: number) {\r\n let url = `/drive/home/deletethumbnail`;\r\n\r\n const response = await this._httpClient.postAsync(url, { FolderId: parentId });\r\n return await response.json();\r\n }\r\n\r\n public async searchTagsAsync(search: string): Promise> {\r\n //TODO refactor with import tagservice\r\n if (!search) {\r\n throw new Error(`ArgumentNullException: ${search}`);\r\n }\r\n\r\n const response = await this._httpClient.postAsJsonAsync(search, null, 'api/tags/search');\r\n let queryResult = await response.json();\r\n\r\n if (queryResult.error) {\r\n throw new Error((queryResult as IQueryResultBase).error.message);\r\n }\r\n\r\n return queryResult as Array;\r\n }\r\n\r\n public async saveTagsAsync(item: FileVison, tags: Array): Promise {\r\n let tagNames = tags.map(t => t.name);\r\n\r\n const response = await this._httpClient.putAsJsonAsync(tagNames, null, `api/drive/items/${item.fileId}/tags`);\r\n\r\n if (response.status != 201) {\r\n let queryResult: IQueryResultBase = await response.json();\r\n\r\n throw new Error(queryResult.error.message);\r\n }\r\n }\r\n\r\n public async getImportFolderAsync(userId: number): Promise {\r\n const url = String.Format(Routes.Api.Users.Drive.Search.Import, userId);\r\n\r\n const response = await this._httpClient.getAsync(url);\r\n const queryResult = await response.json();\r\n\r\n if (response.status !== 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as FileVison;\r\n }\r\n\r\n public async createSymlinkAsync(symlinkInput: ISymlinkInputDto): Promise {\r\n return await this._responseHandler.handleResponseAsync(\r\n await this._httpClient.postAsync(Routes.Api.Drive.Symlinks, symlinkInput));\r\n }\r\n\r\n public async getPermissionAsync(fileGuid: string, token: string = null): Promise {\r\n return await this._responseHandler.handleResponseAsync(\r\n await this._httpClient.getAsync(\r\n String.Format(Routes.Api.Drive.Items.Permission, fileGuid),\r\n null,\r\n { token: token }));\r\n }\r\n\r\n protected _httpClient: HttpClient;\r\n protected _uriService: IVisonUriService;\r\n private readonly _responseHandler: IResponseHandler;\r\n\r\n private searchText: string;\r\n private orderBy: OrderBy;\r\n private direction: SortDirection;\r\n private filter: Filter;\r\n private codeCulture: string;\r\n\r\n get CodeCulture(): string {\r\n return this.codeCulture;\r\n }\r\n set CodeCulture(value: string) {\r\n this.codeCulture = value;\r\n }\r\n\r\n get SearchText(): string {\r\n return this.searchText;\r\n }\r\n set SearchText(value: string) {\r\n this.searchText = value;\r\n }\r\n\r\n get OrderBy(): OrderBy {\r\n return this.orderBy;\r\n }\r\n set OrderBy(value: OrderBy) {\r\n this.orderBy = value;\r\n }\r\n\r\n get Direction(): SortDirection {\r\n return this.direction;\r\n }\r\n set Direction(value: SortDirection) {\r\n this.direction = value;\r\n }\r\n\r\n get Filter(): Filter {\r\n return this.filter;\r\n }\r\n set Filter(value: Filter) {\r\n this.filter = value;\r\n }\r\n}\r\n\r\n","import { IIconService } from 'Api/Contracts/Interfaces';\r\nimport { injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class IconService implements IIconService {\r\n public getRecentlyUsedIcons(): Array {\r\n const json = localStorage.getItem(IconService.recentlyUsedLocalStorageKey);\r\n\r\n return json == null\r\n ? []\r\n : JSON.parse(json) as Array;\r\n }\r\n\r\n public addRecentlyUsedIcon(icon: string): void {\r\n const icons = this.getRecentlyUsedIcons();\r\n const index = icons.indexOf(icon);\r\n\r\n if (index >= 0) {\r\n icons.splice(index, 1);\r\n }\r\n\r\n if (icons.unshift(icon) > IconService.recentlyUsedMaxSize) {\r\n icons.pop();\r\n }\r\n\r\n localStorage.setItem(\r\n IconService.recentlyUsedLocalStorageKey,\r\n JSON.stringify(icons)\r\n );\r\n }\r\n\r\n private static readonly recentlyUsedLocalStorageKey = 'Sbs.Vison.RecentlyUsedIcons';\r\n private static readonly recentlyUsedMaxSize = 20;\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { ForceResetPasswordViewModel } from 'Api/Dto/Account/ViewModels/ForceResetPasswordViewModel';\r\nimport { ResetPasswordViewModel } from 'Api/Dto/Account/ViewModels/ResetPasswordViewModel';\r\nimport { GenerateType } from 'Api/Dto/Admin/Enums/GenerateType';\r\nimport { IGroup } from 'Api/Dto/Admin/Group';\r\nimport { IIdentityProvider, ILdapSynchronizationResult } from 'Api/Dto/Admin/IdentityProvider';\r\nimport { IRolesWithUsersAndAvailableRoles } from 'Api/Dto/Admin/RolesWithUsersAndAvailableRoles';\r\nimport { ISubscription } from 'Api/Dto/Admin/Subscription';\r\nimport { IInternalSystemType, IUserType } from 'Api/Dto/Admin/User';\r\nimport { IGroupViewModel } from 'Api/Dto/Admin/ViewModels/Groups/GroupViewModel';\r\nimport { ISynchronizeLdapViewModel } from 'Api/Dto/Admin/ViewModels/IdentityProvider/SynchronizeLdapViewModel';\r\nimport { TestLdapViewModel } from 'Api/Dto/Admin/ViewModels/IdentityProvider/TestLdapViewModel';\r\nimport { IDeleteRoleViewModel } from 'Api/Dto/Admin/ViewModels/Roles/DeleteRoleViewModel';\r\nimport { CreateUserViewModel } from 'Api/Dto/Admin/ViewModels/Users/CreateUserViewModel';\r\nimport { UpdateUserViewModel } from 'Api/Dto/Admin/ViewModels/Users/UpdateUserViewModel';\r\nimport { Identity } from 'Api/Dto/Identity';\r\nimport { IdentityVisonRole } from 'Api/Dto/IdentityVisonRole';\r\nimport { IListItem } from 'Api/Dto/ListItem';\r\nimport { IUserProfile } from 'Api/Dto/Profile';\r\nimport { INotificationsUser } from 'Api/Dto/Profile/Notifications';\r\nimport { EditLoginViewModel } from 'Api/Dto/Profile/ViewModels/EditLoginViewModel';\r\nimport { EditPasswordViewModel } from 'Api/Dto/Profile/ViewModels/EditPasswordViewModel';\r\nimport { IPaginationResult, IQueryResultBase, QueryException, UnauthorizedException } from 'Api/Dto/QueryResult';\r\nimport { IIdentity } from 'Api/Dto/Shares';\r\nimport { User } from 'Api/Dto/User';\r\nimport { IUserPreferences } from 'Api/Dto/UserPreferences';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class IdentityService {\r\n constructor(\r\n @inject(AppContext) appContext: AppContext,\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IVisonUriService) uriService: IVisonUriService,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._appContext = appContext;\r\n this._httpClient = httpClient;\r\n this._uriService = uriService;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n public async getUserPreferencesAsync(userId: number): Promise {\r\n let uri = `api/user/${userId}/preferences`\r\n\r\n let response = await this._httpClient.getAsync(uri);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n //TODO handle error and use type queryresult.\r\n }\r\n\r\n return jsonResponse as IUserPreferences;\r\n }\r\n\r\n public async getGroupsAsync(includeSystem: boolean, search: string, page: number, pageSize: number, orderBy?: string): Promise> {\r\n const response = await this._httpClient.getAsync(\r\n Routes.Api.Groups.Base,\r\n null,\r\n {\r\n includeSystem,\r\n search,\r\n orderBy,\r\n page,\r\n pageSize\r\n }\r\n );\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getGroupAsync(groupId: number): Promise {\r\n const response = await this._httpClient.getAsync(String.Format(Routes.Api.Groups.Group, groupId));\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((jsonResponse as IQueryResultBase).error);\r\n }\r\n\r\n return jsonResponse as IGroup;\r\n }\r\n\r\n public async createGroupAsync(addGroupViewModel: IGroupViewModel): Promise {\r\n const response = await this._httpClient.postAsync(Routes.Api.Groups.Base, addGroupViewModel);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n else if (response.status === 401) {\r\n throw new UnauthorizedException();\r\n }\r\n\r\n return jsonResponse as IGroup;\r\n }\r\n\r\n public async editGroupAsync(groupId: number, editGroupViewModel: IGroupViewModel): Promise {\r\n let url = String.Format(Routes.Api.Groups.Group, groupId);\r\n\r\n const response = await this._httpClient.putAsync(url, editGroupViewModel);\r\n\r\n if (response.status == 400) {\r\n let jsonResponse = await response.json() as IQueryResultBase;\r\n throw new QueryException(jsonResponse.error);\r\n }\r\n else if (response.status === 401) {\r\n throw new UnauthorizedException();\r\n }\r\n }\r\n\r\n public async deleteGroupsAsync(platformId: number, subscriptionId: number, groupIds: Array): Promise {\r\n let url = `api/platform/${platformId}/subscription/${subscriptionId}/group`;\r\n\r\n let response = await this._httpClient.deleteAsJsonAsync(groupIds, null, url);\r\n\r\n if (response.status == 400) {\r\n let jsonResponse = await response.json();\r\n throw new Error(jsonResponse.error.message);\r\n }\r\n }\r\n\r\n public async getGroupMembersAsync(groupId: number, page: number, pageSize: number): Promise> {\r\n let options = {\r\n page,\r\n pageSize\r\n };\r\n\r\n const response = await this._httpClient.getAsync(String.Format(Routes.Api.Groups.Members, groupId), null, options);\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async addMembersToGroupAsync(groupId: number, identitiesIds: Array): Promise {\r\n let url = String.Format(Routes.Api.Groups.Members, groupId);\r\n\r\n let response = await this._httpClient.postAsync(url, identitiesIds);\r\n\r\n if (response.status == 400) {\r\n let jsonResponse = await response.json() as IQueryResultBase;\r\n throw new QueryException(jsonResponse.error);\r\n }\r\n }\r\n\r\n public async removeMembersFromGroupAsync(groupId: number, identitiesIds: Array): Promise {\r\n const url = String.Format(Routes.Api.Groups.Members, groupId);\r\n\r\n const response = await this._httpClient.deleteAsync(url, identitiesIds);\r\n\r\n if (response.status == 400) {\r\n let jsonResponse = await response.json() as IQueryResultBase;\r\n throw new QueryException(jsonResponse.error);\r\n }\r\n }\r\n\r\n public async getUsersAsync(includeSystem: boolean, search: string, page: number, pageSize: number, orderBy?: string): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n Routes.Api.Users.Base,\r\n null,\r\n {\r\n includeSystem,\r\n search,\r\n orderBy,\r\n page,\r\n pageSize\r\n }\r\n );\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getUserAsync(userGuid: string): Promise {\r\n const url = String.Format(Routes.Api.Users.User, userGuid);\r\n\r\n const response = await this._httpClient.getAsync(url);\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as User;\r\n }\r\n\r\n public async createUserAsync(createUserViewModel: CreateUserViewModel): Promise {\r\n const response = await this._httpClient.postAsync(\r\n Routes.Api.Users.Base,\r\n createUserViewModel,\r\n );\r\n\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 201) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as User;\r\n }\r\n\r\n public async updateUserAsync(userId: string, viewModel: UpdateUserViewModel): Promise {\r\n const url = String.Format(Routes.Api.Users.User, userId);\r\n\r\n const response = await this._httpClient.putAsync(url, viewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteUsersAsync(userIds: Array): Promise {\r\n const response = await this._httpClient.deleteAsync(\r\n Routes.Api.Users.Base,\r\n userIds,\r\n );\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteAvatarAsync(userGuid: string): Promise {\r\n const url = String.Format(Routes.Api.Users.Avatar, userGuid);\r\n\r\n const response = await this._httpClient.deleteAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async searchIdentitiesAsync(search: string): Promise> {\r\n let url = this._buildSearchUrl(search);\r\n\r\n let response = await this._httpClient.getAsync(url);\r\n\r\n if (!response.ok) {\r\n throw Error('Unhandled SearchIdentitiesAsync:' + response.statusText);\r\n }\r\n\r\n let jsonResult = await response.json();\r\n\r\n return jsonResult as Array;\r\n }\r\n\r\n public async searchPublicUsersAsync(search: string, page: number, pageSize: number = 100): Promise> {\r\n const response = await this._httpClient.getAsync(\r\n Routes.Api.Users.Public,\r\n null,\r\n {\r\n search,\r\n page,\r\n pageSize\r\n }\r\n );\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getSubscriptionsAsync(): Promise> {\r\n const response: Response = await this._httpClient\r\n .getAsync(`api/platform/${this._appContext.platformId}/subscription`);\r\n\r\n const paginationResult: IPaginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n return paginationResult.items;\r\n }\r\n\r\n public async getIdentityProvidersAsync(): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n Routes.Api.Platforms.IdentityProviders.Base,\r\n null,\r\n { platformId: this._appContext.platformId });\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getRolesAsync(): Promise> {\r\n const response: Response = await this._httpClient.getAsync(`api/platform/${this._appContext.platformId}/role`);\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getPaginatedRolesAsync(search: string, sortOrder: string, page: number, pageSize: number): Promise> {\r\n const options = {\r\n search,\r\n sortOrder,\r\n page,\r\n pageSize\r\n };\r\n\r\n const response: Response = await this._httpClient.getAsync(`api/platform/${this._appContext.platformId}/role`, null, options);\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getRolesWithUsersAndAvailableRolesAsync(roleIds: Array): Promise {\r\n let options = {\r\n roleIds: roleIds,\r\n actionType: 'delete'\r\n }\r\n\r\n let response = await this._httpClient.getAsync(`api/platform/${this._appContext.platformId}/role`, null, options);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n //TODO handle error and use type queryresult.\r\n }\r\n\r\n return jsonResponse as IRolesWithUsersAndAvailableRoles;\r\n }\r\n\r\n public async deleteRolesAsync(platformId: number, deleteRoleViewModel: IDeleteRoleViewModel): Promise {\r\n const response = await this._httpClient.postFormDataAsync(String.Format(Routes.Api.Roles.Delete, platformId), deleteRoleViewModel);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new Error(queryError.error.message);\r\n }\r\n }\r\n\r\n public async getUserTypesAsync(): Promise> {\r\n let response = await this._httpClient.getAsync('api/list/userTypes');\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n //TODO handle error and use type queryresult.\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async getInternalSystemTypesAsync(): Promise> {\r\n let response = await this._httpClient.getAsync('api/list/InternalSystemTypes');\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n //TODO handle error and use type queryresult.\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async getUserGroupsAsync(userGuid: string, page: number, pageSize: number): Promise> {\r\n const options = {\r\n page,\r\n pageSize\r\n };\r\n\r\n const response: Response = await this._httpClient.getAsync(\r\n String.Format(Routes.Api.Users.Groups, userGuid),\r\n null,\r\n options);\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getNotificationsDetailsAsync(): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.List.Notifications);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async getCurrentNotificationSettingsAsync(): Promise {\r\n const url = String.Format(Routes.Api.Users.Notifications, this._appContext.user.id);\r\n const response = await this._httpClient.getAsync(url);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as INotificationsUser;\r\n }\r\n\r\n public async updateNotificationSettingsAsync(notificationsUser: INotificationsUser): Promise {\r\n const url = String.Format(Routes.Api.Users.Notifications, this._appContext.user.id);\r\n const response = await this._httpClient.postFormDataAsync(url, notificationsUser);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async resetPasswordAsync(viewModel: ResetPasswordViewModel): Promise {\r\n const response = await this._httpClient.postFormDataAsync('account/resetpassword', viewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async forceResetPasswordAsync(viewModel: ForceResetPasswordViewModel): Promise {\r\n const response = await this._httpClient.postFormDataAsync('/account/forceresetpassword', viewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async resetUserPasswordAsync(userId: number, resetPasswordType: GenerateType, password: string, notifyUser: boolean): Promise {\r\n const response = await this._httpClient.postFormDataAsync(\r\n 'administratorPortal/users/resetpassword',\r\n {\r\n userId: userId,\r\n generateType: resetPasswordType,\r\n generatedPassword: password,\r\n notifyUser: notifyUser\r\n }\r\n )\r\n\r\n if (response.status != 200) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async testLdapConfigAsync(platformId: number, configuration: TestLdapViewModel): Promise> {\r\n const response = await this._httpClient.postFormDataAsync(String.Format(Routes.Api.Platforms.IdentityProviders.TestLdap, platformId), configuration);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array<{ [key: string]: string }>;\r\n }\r\n\r\n public async synchronizeLdapUsersAsync(platformId: number, identityProviderId: number, viewModel: ISynchronizeLdapViewModel): Promise> {\r\n const url = String.Format(Routes.Api.Platforms.IdentityProviders.SynchronizeLdap, platformId, identityProviderId);\r\n const response = await this._httpClient.postFormDataAsync(url, viewModel);\r\n\r\n if (response.status != 201) {\r\n throw new QueryException({\r\n code: response.status.toString(),\r\n message: response.statusText,\r\n details: [],\r\n innerError: null,\r\n target: null\r\n });\r\n }\r\n\r\n const jsonResponse = await response.json();\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async getUserProfileAsync(userId: number): Promise {\r\n const url = String.Format(Routes.Api.Users.Profile, userId)\r\n const response = await this._httpClient.getAsync(url);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as IUserProfile;\r\n }\r\n\r\n public async updateUserBannerAsync(userId: number, banner: File): Promise {\r\n const data = {\r\n banner: banner,\r\n id: userId\r\n };\r\n\r\n const response = await this._httpClient.postFormDataAsync('profile/profile/editbanner', data);\r\n\r\n if (response.status != 201) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return response.headers.get('location');\r\n }\r\n\r\n public async deleteUserBannerAsync(userId: number): Promise {\r\n const data = {\r\n banner: null,\r\n id: userId\r\n }\r\n\r\n const response = await this._httpClient.postFormDataAsync('profile/profile/deletebanner', data);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteGroupsOfUserAsync(userGuid: string, groupIds: Array): Promise {\r\n const url = String.Format(Routes.Api.Users.Groups, userGuid);\r\n\r\n const response = await this._httpClient.deleteAsync(url, groupIds);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteOwnAccountAsync(password: string): Promise {\r\n const url = 'profile/profile/confirmdelete';\r\n\r\n const data = {\r\n password: password\r\n };\r\n\r\n const response = await this._httpClient.postFormDataAsync(url, data);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async editLoginAsync(editLoginViewModel: EditLoginViewModel): Promise {\r\n const url = 'profile/profile/editlogin';\r\n\r\n const response = await this._httpClient.postFormDataAsync(url, editLoginViewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async editPasswordAsync(editPasswordViewModel: EditPasswordViewModel): Promise {\r\n const url = 'profile/profile/editpassword';\r\n\r\n const response = await this._httpClient.postFormDataAsync(url, editPasswordViewModel);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public exportUsersCsv(platformId: number, subscriptionId: number, userIds?: Array): void {\r\n let form = document.createElement('form');\r\n form.action = this._uriService.getAbsoluteUri(\r\n Routes.Api.Users.Export,\r\n {\r\n 'platformId': platformId.toString(),\r\n 'subscriptionId': subscriptionId.toString()\r\n }\r\n );\r\n form.method = 'POST';\r\n form.setAttribute('download', null);\r\n form.target = '_blank';\r\n\r\n if (userIds) {\r\n for (let user of userIds) {\r\n let input = document.createElement('input');\r\n input.type = 'hidden';\r\n input.name = 'userIds';\r\n input.value = user.toString();\r\n\r\n form.appendChild(input);\r\n }\r\n }\r\n\r\n let body = document.querySelector('body');\r\n body.appendChild(form);\r\n form.submit();\r\n body.removeChild(form);\r\n }\r\n\r\n private _buildSearchUrl(searchText: string): string {\r\n let url = `/administratorportal/users/searchidentities/?searchString=${searchText}`;\r\n\r\n let platformId = this._appContext.platformId;\r\n\r\n if (platformId) {\r\n url += `&platformId=${platformId}`;\r\n }\r\n\r\n let subscriptionId = this._appContext.subscriptionId;\r\n\r\n if (subscriptionId) {\r\n url += `&subscriptionId=${subscriptionId}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n protected readonly _appContext: AppContext;\r\n protected readonly _httpClient: HttpClient;\r\n protected readonly _uriService: IVisonUriService;\r\n protected readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { IQueryParameters } from 'Api/Contracts/Dtos/QueryParameters';\r\nimport { JsonSchemaDto, JsonSchemaInputDto } from 'Api/Contracts/Dtos/SmartObject';\r\nimport { IJsonSchemaService } from 'Api/Contracts/Interfaces';\r\nimport { IPaginationResult } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class JsonSchemaService implements IJsonSchemaService {\r\n public constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n public async getJsonSchemaAsync(jsonSchemaId: number): Promise {\r\n const endpoint: string = String.Format(\r\n Routes.Api.JsonSchema.JsonSchema,\r\n jsonSchemaId);\r\n\r\n const response: Response = await this._httpClient.getAsync(endpoint);\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync(response);\r\n }\r\n\r\n public async getJsonSchemasAsync(queryParameters: IQueryParameters): Promise> {\r\n const response: Response = await this._httpClient\r\n .getAsync(\r\n Routes.Api.JsonSchema.Base,\r\n null,\r\n queryParameters);\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async createJsonSchemaAsync(inputSchema: JsonSchemaInputDto): Promise {\r\n const response: Response = await this._httpClient\r\n .postAsync(\r\n Routes.Api.JsonSchema.Base,\r\n inputSchema);\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync(response);\r\n }\r\n\r\n public async updateJsonSchemaAsync(jsonSchemaId: number, inputSchema: JsonSchemaInputDto): Promise {\r\n const endpoint: string = String.Format(\r\n Routes.Api.JsonSchema.JsonSchema,\r\n jsonSchemaId);\r\n\r\n const response: Response = await this._httpClient.putAsync(endpoint, inputSchema);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async deleteJsonSchemaAsync(jsonSchemaId: number): Promise {\r\n const endpoint: string = String.Format(\r\n Routes.Api.JsonSchema.JsonSchema,\r\n jsonSchemaId);\r\n\r\n const response: Response = await this._httpClient.deleteAsync(endpoint, null);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n private readonly _httpClient: HttpClient;\r\n private readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class PasswordValidationService {\r\n public isValidLength(password: string): boolean {\r\n return (password && password.length >= 8);\r\n }\r\n\r\n public isValidNumber(password: string): boolean {\r\n return (/[0-9]/g).test(password);\r\n }\r\n\r\n public isValidCaps(password: string): boolean {\r\n return (/[A-Z]/g).test(password);\r\n }\r\n\r\n public isSamePassword(password: string, confirmPassword: string): boolean {\r\n return password === confirmPassword;\r\n }\r\n}\r\n","import { HttpClient } from 'Api/HttpClient';\r\nimport { UriService } from 'Api/Services';\r\nimport { OnlineAbsoluteUriBehavior } from 'App/Services/UriServices/AbsoluteUriBehaviors';\r\nimport { injectable } from 'inversify';\r\n\r\n/**\r\n * Represents a service for generating and downloading PDFs.\r\n*/\r\n@injectable()\r\nexport class PdfService {\r\n public constructor() {\r\n this._httpClient = new HttpClient(\r\n new UriService('https://sbspdfservice.azurewebsites.net', new OnlineAbsoluteUriBehavior()));\r\n }\r\n\r\n /**\r\n * Generates a PDF using the specified template and data.\r\n * @param templateName - The name of the template to use for generating the PDF.\r\n * @param data - The data to be used for generating the PDF.\r\n * @returns A Promise that resolves to a Blob representing the generated PDF.\r\n * @throws An error if the PDF generation fails.\r\n */\r\n public async generatePdfAsync(templateName: string, data: any): Promise {\r\n const response: Response = await this._httpClient.postAsync(`templates/${templateName}`, data, null, new Headers({\r\n 'Accept': 'application/pdf',\r\n 'Content-Type': 'application/json'\r\n }));\r\n\r\n if (!response.ok) {\r\n throw new Error('Failed to generate PDF');\r\n }\r\n\r\n return await response.blob();\r\n }\r\n\r\n /**\r\n * Downloads a PDF from the specified URL with the given file name.\r\n * @param pdfUrl - The URL of the PDF to download.\r\n * @param fileName - The desired file name for the downloaded PDF.\r\n */\r\n public downloadPdf(pdfUrl: string, fileName: string): void {\r\n const link: HTMLAnchorElement = document.createElement('a');\r\n link.href = pdfUrl;\r\n link.download = fileName;\r\n link.click();\r\n }\r\n\r\n /**\r\n * Generates a PDF using the specified template and data, and then downloads it with the given file name.\r\n * @param templateName - The name of the template to use for generating the PDF.\r\n * @param data - The data to be used for generating the PDF.\r\n * @param fileName - The desired file name for the downloaded PDF.\r\n * @returns A Promise that resolves when the PDF generation and download are complete.\r\n */\r\n public async generateAndDownloadPdfAsync(templateName: string, data: any, fileName: string): Promise {\r\n const pdf: Blob = await this.generatePdfAsync(templateName, data);\r\n this.downloadPdf(URL.createObjectURL(pdf), fileName);\r\n }\r\n\r\n private readonly _httpClient: HttpClient;\r\n}\r\n","import { AssetDirectory, AssetFile, AssetItem, AssetItemType, AssetPanoramaGroup, AssetProject, AssetTemplate, FileMap, IAddNavigationSystem, ICreateProject, ICreateProjectTemplate, IDownloadStandaloneOption, isFileMap, isStreetMap, IUpdateProjectItemViewModel, ManipulationState, Navigation, NavigationType, Project, ProjectLocation, ProjectMap, PublicationStatus, SearchOption, SortOptions, StreetMap, Tag } from 'Api/Contracts/Dtos';\r\nimport { IGexfWaypointAttributesDto } from 'Api/Contracts/Dtos/WaypointGraph';\r\nimport { ITagService } from 'Api/Contracts/Interfaces';\r\nimport { ICartesianCoordinatesDto, WaypointAttributes, WaypointEdgeAttributes, WaypointGraph } from 'Api/Contracts/Types';\r\nimport { IEditProjectTemplateViewModel } from 'Api/Dto/Admin/ViewModels/Projects';\r\nimport { File as DriveFile } from 'Api/Dto/Drive';\r\nimport { IAddAssetPanoramaGroupViewModel } from 'Api/Dto/Project/ViewModels/AddAssetPanoramaGroupViewModel';\r\nimport { IAssetViewModel } from 'Api/Dto/Project/ViewModels/AssetViewModel';\r\nimport { IManipulateItemsViewModel } from 'Api/Dto/Project/ViewModels/ManipulateItemsViewModel';\r\nimport { IPaginationResult, IQueryResultBase, QueryException, UnauthorizedException } from 'Api/Dto/QueryResult';\r\nimport { ChunkedFile, FileUploader } from 'Api/FileUploader';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\n//Don't import from 'Api/Services' to prevent circular dependencies\r\nimport { DriveService } from 'Api/Services/DriveService';\r\nimport { CreateFileResult } from 'Api/ViewModel/Drive';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport JsonPatch, { Operation } from 'fast-json-patch';\r\nimport Graph from 'graphology';\r\nimport gexf from 'graphology-gexf';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n\r\n@injectable()\r\nexport class ProjectService implements ITagService /*implements IProjectService*/ {\r\n constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(DriveService) driveService: DriveService,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._driveService = driveService;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n private static responseToProject(item: any): Project {\r\n let project: Project = new Project();\r\n project.projectId = item.projectId;\r\n project.thumbnail = item.thumbnail;\r\n project.fileShares = item.fileShares;\r\n project.description = item.description ?? '';\r\n project.license = item.license;\r\n project.publicationStatus = item.publicationStatus;\r\n project.location = item.location;\r\n project.tags = item.tags;\r\n project.creationTimeUtc = new Date(item.creationTimeUtc);\r\n project.viewCounter = item.viewCounter;\r\n project.size = item.size;\r\n project.layout = item.layout;\r\n project.assetProject = AssetItem.jsonToObject(item.assetProject);\r\n project.owner = item.owner;\r\n //project.projectLocation = Object.assign(new ProjectLocation, project.projectLocation);\r\n return project;\r\n }\r\n private static responseToTagProject(item: any): Tag {\r\n let tag: Tag = Object.assign(new Tag(), item);\r\n return tag;\r\n }\r\n\r\n public async createProjectAsync(newProject: ICreateProject): Promise {\r\n const response = await this._httpClient.postAsJsonAsync(newProject, null, Routes.Api.Projects.Base);\r\n const jsonResult = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResult as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResult as Project;\r\n }\r\n\r\n public async createProjectTemplateAsync(newTemplate: ICreateProjectTemplate): Promise {\r\n let icon = newTemplate.icon;\r\n delete newTemplate.icon;\r\n\r\n let response = await this._httpClient.postAsync(Routes.Api.Projects.Templates.Base, newTemplate);\r\n let jsonResult = await response.json();\r\n\r\n if (response.status != 201) {\r\n let queryError = jsonResult as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n let queryResult = jsonResult as Project;\r\n\r\n if (icon) {\r\n await this.editProjectThumbnail(queryResult.projectId, icon);\r\n }\r\n\r\n return queryResult;\r\n }\r\n\r\n public async createNewProjectTypeAsync(name: string): Promise {\r\n let response = await this._httpClient.postAsync(\r\n Routes.Api.Projects.Types.Base,\r\n { name: name }\r\n );\r\n\r\n let queryResult = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = queryResult as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return queryResult as AssetDirectory;\r\n }\r\n\r\n public async getProjectById(projectId: number): Promise {\r\n const response = await this._httpClient.getAsync(`/project/home/project?projectId=${projectId}`);\r\n const item = await response.json();\r\n\r\n return ProjectService.responseToProject(item);\r\n }\r\n\r\n public async searchProjectAsync(search: string, sortOrder?: SortOptions, page: number = 1, pageSize: number = 100): Promise> {\r\n let url = '/project/home/searchprojects';\r\n\r\n const response: Response = await this._httpClient.getAsync(url, null, {\r\n search,\r\n sortOrder,\r\n page,\r\n pageSize\r\n });\r\n\r\n const result: IPaginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n result.items = result.items.map(project => ProjectService.responseToProject(project));\r\n\r\n return result;\r\n }\r\n\r\n public async getTagsAsync(projectId: number): Promise> {\r\n const response = await this._httpClient.getAsync(\r\n String.Format(Routes.Api.Projects.Tags, projectId)\r\n );\r\n let queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n //TODO handle errors\r\n }\r\n\r\n const tags = queryResult as Array;\r\n\r\n return tags.map(tag => ProjectService.responseToTagProject(tag));\r\n }\r\n\r\n public searchTagsAsync(search: string): Promise> {\r\n //TODO refactor with import tagservice\r\n return this._driveService.searchTagsAsync(search);\r\n }\r\n\r\n public async saveTagsAsync(project: Project, tags: Array): Promise {\r\n let tagNames = tags.map(t => t.name);\r\n const url = String.Format(Routes.Api.Projects.Tags, project.projectId);\r\n\r\n const response = await this._httpClient.putAsJsonAsync(tagNames, null, url);\r\n\r\n if (response.status != 201) {\r\n let queryResult: IQueryResultBase = await response.json();\r\n\r\n throw new Error(queryResult.error.message);\r\n }\r\n }\r\n\r\n public async getAssets(assetId: number, searchOption: SearchOption = SearchOption.TopDirectoryOnly): Promise> {\r\n const response = await this._httpClient.getAsync(`/project/home/assets?id=${assetId}&searchOption=${searchOption}`);\r\n const items = await response.json();\r\n\r\n return AssetItem.jsonToArray(items);\r\n }\r\n\r\n public async getAssetAsync(projectId: number, assetId: number): Promise {\r\n const url = String.Format(Routes.Api.Projects.Assets.Asset, projectId, assetId);\r\n const response = await this._httpClient.getAsync(url);\r\n const item = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = item as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const assetItem = item as T;\r\n return AssetItem.jsonToObject(assetItem);\r\n }\r\n\r\n public async getAssetsAsync(projectId: number, assetIds: Array): Promise> {\r\n const url = String.Format(Routes.Api.Projects.Assets.Base, projectId);\r\n\r\n const response = await this._httpClient.postAsync(url, assetIds);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const jsonItem = jsonResponse as Array;\r\n return AssetItem.jsonToArray(jsonItem);\r\n }\r\n\r\n public async addNewFolderAsync(name: string, parent: AssetDirectory): Promise {\r\n const url = String.Format(Routes.Api.Projects.Assets.Children, parent.assetItemId);\r\n const model = {\r\n name,\r\n type: AssetItemType.Directory\r\n };\r\n\r\n const response = await this._httpClient.postAsync(url, model);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 201) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const jsonItem = jsonResponse as AssetDirectory;\r\n const assetDirectory = AssetItem.jsonToObject(jsonItem);\r\n\r\n assetDirectory.parent = parent;\r\n parent.addChildren(assetDirectory);\r\n\r\n return assetDirectory;\r\n }\r\n\r\n public async addNewAssetPanoramaGroupAsync(name: string, parent: AssetDirectory): Promise {\r\n let model: IAddAssetPanoramaGroupViewModel = {\r\n name: name,\r\n parentId: parent.assetItemId\r\n };\r\n\r\n const response = await this._httpClient.postAsync('/project/home/addassetpanoramagroup', model);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const jsonItem = jsonResponse as AssetPanoramaGroup;\r\n const assetPanoramaGroup = AssetItem.jsonToObject(jsonItem);\r\n\r\n assetPanoramaGroup.parent = parent;\r\n parent.addChildren(assetPanoramaGroup);\r\n\r\n return assetPanoramaGroup;\r\n }\r\n\r\n public async addNavigationFolder(name: string, parent: AssetDirectory, navigationType: NavigationType, doImportAllPanoramas: boolean): Promise {\r\n const model: IAddNavigationSystem = {\r\n name: name,\r\n assetParentId: parent.assetItemId,\r\n navigationType: navigationType,\r\n importAllPanorama: doImportAllPanoramas\r\n };\r\n\r\n const response = await this._httpClient.postAsync('/project/home/addnavigationdirectory', model);\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 201) {\r\n const queryError = queryResult as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const navigation = AssetItem.jsonToObject(queryResult);\r\n\r\n navigation.parent = parent;\r\n parent.addChildren(navigation);\r\n\r\n return navigation;\r\n }\r\n\r\n public async addNewAssets(projectId: number, model: Array, parent: AssetDirectory): Promise> {\r\n const clonedModel = model.map(ai => {\r\n const clone = { ...ai };\r\n clone.parentId = parent.assetItemId;\r\n\r\n if (ai instanceof AssetItem) {\r\n //avoid circular reference when serializing to JSON\r\n delete clone['parent'];\r\n //assetItemId must be server generated when creating new item\r\n delete clone['assetItemId'];\r\n }\r\n\r\n return clone;\r\n });\r\n\r\n const response = await this._httpClient.postAsync(\r\n '/project/home/addassetitems',\r\n {\r\n projectId,\r\n assets: clonedModel\r\n }\r\n );\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 201) {\r\n const queryError = queryResult as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const items = AssetItem.jsonToArray(queryResult);\r\n\r\n items.forEach(ai => {\r\n ai.parent = parent;\r\n });\r\n\r\n parent.addChildren(...items);\r\n\r\n return items;\r\n }\r\n\r\n public async addNewStreetMap(model: StreetMap, parent: Navigation): Promise {\r\n model.parentId = parent.assetItemId;\r\n\r\n const response = await this._httpClient.postAsync('/project/home/addstreetmapitem', model);\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 201) {\r\n const queryError = queryResult as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const jsonItem = queryResult as StreetMap;\r\n const item = AssetItem.jsonToObject(jsonItem);\r\n\r\n item.parent = parent;\r\n parent.addChildren(item);\r\n\r\n return item;\r\n }\r\n\r\n public async cloneAssetItems(assetItems: Array, destination: AssetDirectory): Promise> {\r\n const model: IManipulateItemsViewModel = {\r\n assetItemIds: assetItems.map(ai => ai.assetItemId),\r\n destinationAssetItemId: destination.assetItemId,\r\n state: ManipulationState.Copy\r\n };\r\n\r\n const response = await this._httpClient.postAsync('/project/home/manipulateassetitem', model);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n const jsonItem = jsonResponse as Array;\r\n const items = AssetItem.jsonToArray(jsonItem);\r\n\r\n destination.addChildren(...items);\r\n items.forEach(ai => {\r\n ai.parent = destination;\r\n });\r\n\r\n return items;\r\n }\r\n\r\n public async moveAssetItems(assetItems: Array, destination: AssetDirectory): Promise {\r\n const model: IManipulateItemsViewModel = {\r\n assetItemIds: assetItems.map(ai => ai.assetItemId),\r\n destinationAssetItemId: destination.assetItemId,\r\n state: ManipulationState.Cut\r\n };\r\n\r\n const response = await this._httpClient.postAsync('/project/home/manipulateassetitem', model);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n assetItems.forEach(ai => {\r\n ai.parent.removeChildren(ai);\r\n ai.parent = destination;\r\n });\r\n\r\n destination.addChildren(...assetItems);\r\n }\r\n\r\n public async uploadMapItem(projectId: number, navigationFolder: Navigation, newMapItem: ProjectMap, files?: FileList | Array): Promise {\r\n if (isStreetMap(newMapItem)) {\r\n await this.addNewStreetMap(newMapItem, navigationFolder);\r\n }\r\n else if (isFileMap(newMapItem)) {\r\n let fileUploader: FileUploader = new FileUploader(this._httpClient);\r\n let uploadFiles: Array = new Array();\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n const chunckedFile = fileUploader.addFile(files[i]);\r\n uploadFiles.push(chunckedFile);\r\n }\r\n\r\n const results = await fileUploader.uploadFilesAsync(\r\n this.onCreateFileMapAfterUploadCallbackFactory(\r\n projectId,\r\n navigationFolder,\r\n newMapItem\r\n )\r\n );\r\n\r\n return results[0];\r\n }\r\n else {\r\n throw new Error(`Map of type ${newMapItem.type} is not supported`);\r\n }\r\n }\r\n\r\n public onCreateAssetFileAfterUploadCallbackFactory(projectId: number, assetParent: AssetDirectory): (chunk?: ChunkedFile) => Promise {\r\n const onUploadedFile = async (result: CreateFileResult) => {\r\n let file = result.file;\r\n\r\n if (!file) {\r\n return null;\r\n }\r\n\r\n let assetItem = {\r\n name: file.nameWithoutExtension,\r\n parentId: assetParent.assetItemId,\r\n type: AssetItemType.File,\r\n fileId: file.fileId\r\n } as IAssetViewModel;\r\n\r\n let results = await this.addNewAssets(\r\n projectId,\r\n [assetItem],\r\n assetParent\r\n );\r\n\r\n return results[0];\r\n };\r\n\r\n return this.onFileUploadedCallbackFactory(\r\n assetParent.file,\r\n onUploadedFile\r\n );\r\n }\r\n\r\n public onCreateImportAfterUploadCallbackFactory(parentDirectory: DriveFile): (chunk?: ChunkedFile) => Promise> {\r\n const onUploadedFile = async (result: CreateFileResult) => {\r\n let file = result.file;\r\n\r\n if (!file) {\r\n return null;\r\n }\r\n\r\n return await this.createImportAsync([file]);\r\n };\r\n\r\n return this.onFileUploadedCallbackFactory(\r\n parentDirectory,\r\n onUploadedFile\r\n );\r\n }\r\n\r\n public onCreateFileMapAfterUploadCallbackFactory(projectId: number, assetParent: AssetDirectory, newFileMap: FileMap): (chunk?: ChunkedFile) => Promise {\r\n const onUploadedFile = async (result: CreateFileResult) => {\r\n let file = result.file;\r\n\r\n if (!file) {\r\n return null;\r\n }\r\n\r\n let assetItem = {\r\n name: newFileMap.name,\r\n type: newFileMap.type,\r\n fileId: file.fileId,\r\n parentId: assetParent.assetItemId,\r\n isDefault: newFileMap.isDefault,\r\n location: newFileMap.location\r\n } as IAssetViewModel;\r\n\r\n let results = await this.addNewAssets(\r\n projectId,\r\n [assetItem],\r\n assetParent\r\n );\r\n\r\n return results[0];\r\n };\r\n\r\n return this.onFileUploadedCallbackFactory(\r\n assetParent.file,\r\n onUploadedFile\r\n );\r\n }\r\n\r\n private onFileUploadedCallbackFactory(parentDirectory: DriveFile, onCreatedFile?: (createFileResult: CreateFileResult) => Promise): (chunk?: ChunkedFile) => Promise {\r\n const directoryGuid = parentDirectory.guid;\r\n\r\n return async (f) => {\r\n const result = await this._driveService.addFileAsync(directoryGuid, f);\r\n\r\n if (onCreatedFile) {\r\n return await onCreatedFile(result.createFileResult);\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n public updateProjectLocation(model: any): Promise {\r\n return this._httpClient.postAsync('/project/home/updateprojectlocation', model);\r\n }\r\n\r\n public async getProjectsLocation(ids: Array): Promise> {\r\n const response = await this._httpClient.getAsync(`/project/home/getprojectslocation?projectIds=${ids.join('&projectIds=')}`);\r\n const jsonResult = await response.json() as Array;\r\n\r\n //jsonResult.forEach(l => l.location = JSON.parse(l.location));\r\n return jsonResult;\r\n }\r\n\r\n public async editProjectThumbnail(projectId: number, thumbnail: Blob): Promise {\r\n let data = {\r\n projectId: projectId,\r\n thumbnail: thumbnail\r\n };\r\n\r\n const response = await this._httpClient.postFormDataAsync('/project/home/editprojectthumbnail', data);\r\n\r\n return await response.json();\r\n }\r\n\r\n public deleteThumbnail(projectId: number): Promise {\r\n return this._httpClient.postAsync('/project/home/deletethumbnail', projectId);\r\n }\r\n\r\n public async updateProjectAsync(source: Project, destination: Array<{ path: string; value: any; }>): Promise {\r\n let patch: Array = destination.map(\r\n m => ({ op: 'replace', path: m.path, value: m.value })\r\n );\r\n\r\n const response = await this._httpClient.patchAsJsonAsync(\r\n patch,\r\n null,\r\n String.Format(Routes.Api.Projects.Project, source.projectId)\r\n );\r\n\r\n if (response.status !== 204) {\r\n const queryResult: IQueryResultBase = await response.json();\r\n\r\n throw new QueryException(queryResult.error);\r\n }\r\n }\r\n\r\n public updateProjectPublicationStatus(model: { projectId: number; publicationStatus: PublicationStatus; }): Promise {\r\n return this._httpClient.putAsync('/project/home/updatepublicationstatus', model);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Use updateItemAsync instead.\r\n */\r\n public updateItem(model: IUpdateProjectItemViewModel): Promise {\r\n return this._httpClient.putAsync('/project/home/updateitems', [model]);\r\n }\r\n\r\n /**\r\n * TODO Complete https://dev.azure.com/sbs-interactive/Vison/_workitems/edit/1271\r\n */\r\n public async updateItemAsync(model: IUpdateProjectItemViewModel): Promise {\r\n const query = await this._httpClient.putAsync('/project/home/updateitems', [model]);\r\n\r\n if (!query.ok) {\r\n throw new QueryException({\r\n message: 'Unhandled error while updating',\r\n code: '',\r\n details: [],\r\n target: '',\r\n innerError: null\r\n });\r\n }\r\n }\r\n\r\n public updateItems(model: Array): Promise {\r\n return this._httpClient.putAsync('/project/home/updateitems', model);\r\n }\r\n\r\n public async deleteAsset(projectId: number, model: number): Promise {\r\n const apiUri: string = String.Format(Routes.Api.Projects.Assets.Asset,\r\n projectId,\r\n model);\r\n\r\n const response: Response = await this._httpClient.deleteAsync(apiUri, model);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async deleteAssets(projectId: number, model: Array): Promise {\r\n const apiUri: string = String.Format(Routes.Api.Projects.Assets.Base,\r\n projectId,\r\n model);\r\n\r\n const response: Response = await this._httpClient.deleteAsync(apiUri, model);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async deleteProjectsAsync(projectIds: Array): Promise {\r\n let response = await this._httpClient.deleteAsync(\r\n Routes.Api.Projects.Base,\r\n projectIds\r\n );\r\n\r\n if (response.status == 400) {\r\n let jsonResponse = await response.json() as IQueryResultBase;\r\n throw new Error(jsonResponse.error.message);\r\n }\r\n }\r\n\r\n /**\r\n * Retourne l'ensemble de type de projet possibles.\r\n * La propriété children contient l'ensemble des templates\r\n * pour le type\r\n * */\r\n public async getProjectTypesAsync(): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.Projects.Templates.Base);\r\n const queryResult = await response.json();\r\n\r\n if (response.status !== 200) {\r\n throw new Error((queryResult as IQueryResultBase).error.message);\r\n }\r\n\r\n const projectTypes = queryResult as Array;\r\n\r\n return AssetItem.jsonToArray(projectTypes);\r\n }\r\n\r\n public async deleteProjectTypesAsync(typeIds: Array): Promise {\r\n const response = await this._httpClient.deleteAsync(\r\n Routes.Api.Projects.Types.Base,\r\n typeIds\r\n );\r\n\r\n if (response.status != 204) {\r\n const queryResult = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryResult.error);\r\n }\r\n }\r\n\r\n public async deleteProjectTemplatesAsync(templateIds: Array): Promise {\r\n const response = await this._httpClient.deleteAsync(\r\n Routes.Api.Projects.Templates.Base,\r\n templateIds\r\n );\r\n\r\n if (response.status != 204) {\r\n const queryResult = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryResult.error);\r\n }\r\n }\r\n\r\n public async updateProjectTemplateThumbnailAsync(templateId: number, picture: File): Promise {\r\n const url = String.Format(Routes.Api.Projects.Templates.Thumbnail, templateId);\r\n const data = { file: picture };\r\n\r\n const response = await this._httpClient.postFormDataAsync(url, data);\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 201) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as DriveFile;\r\n }\r\n\r\n public async deleteProjectTemplateThumbnailAsync(tempalteId: number): Promise {\r\n const url = String.Format(Routes.Api.Projects.Templates.Thumbnail, tempalteId);\r\n const response = await this._httpClient.deleteAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n const queryResult = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryResult.error);\r\n }\r\n }\r\n\r\n public async updateProjectTemplateAsync(original: AssetTemplate, updated: IEditProjectTemplateViewModel): Promise {\r\n updated = { ...original, ...updated };\r\n\r\n const patch = JsonPatch.compare(original, updated);\r\n const url = String.Format(\r\n Routes.Api.Projects.Templates.Template,\r\n original.assetItemId\r\n );\r\n\r\n const response = await this._httpClient.patchAsJsonAsync(patch, null, url);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n JsonPatch.applyPatch(original, patch);\r\n }\r\n\r\n public async moveProjectTemplateAsync(templateId: number, typeId: number): Promise {\r\n const patch: Array = [\r\n { op: 'replace', path: '/parentId', value: typeId }\r\n ];\r\n\r\n const url = String.Format(Routes.Api.Projects.Templates.Template, templateId);\r\n\r\n const response = await this._httpClient.patchAsJsonAsync(patch, null, url);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n /**\r\n * Retourne l'ensemble des fichiers d'import de projet.\r\n * */\r\n public async getImportsAsync(): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.Projects.Imports.Base);\r\n const queryResult = await response.json();\r\n\r\n if (response.status === 401) {\r\n throw new UnauthorizedException();\r\n }\r\n else if (response.status !== 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as Array;\r\n }\r\n\r\n /**\r\n * Retourne l'ensemble des fichiers d'import créé.\r\n * */\r\n public async createImportAsync(importFiles: Array): Promise> {\r\n let data = importFiles.map(df => df.fileId);\r\n\r\n const response = await this._httpClient.postAsJsonAsync(data, null, Routes.Api.Projects.Imports.Base);\r\n const queryResult = await response.json();\r\n\r\n if (response.status !== 201) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as Array;\r\n }\r\n\r\n public async getStandaloneEndpointUriAsync(\r\n apiUri: string,\r\n option: IDownloadStandaloneOption,\r\n baseUri?: string\r\n ): Promise {\r\n const response = await this._httpClient.postAsync(apiUri, option, baseUri);\r\n\r\n return response.status == 201\r\n ? response.headers.get('location')\r\n : null;\r\n }\r\n\r\n public async changeProjectOwnerAsync(\r\n projectId: number,\r\n newOwnerId: number\r\n ): Promise {\r\n const route = String.Format(Routes.Api.Projects.ChangeOwner, projectId);\r\n const response = await this._httpClient.postAsync(route, { newOwnerId });\r\n\r\n return await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async getWaypointGraphAsync(projectId: number): Promise {\r\n const route = String.Format(Routes.Api.Projects.Graph.WaypointGraph, projectId);\r\n\r\n const response = await this._httpClient.getAsync(\r\n route,\r\n null,\r\n null,\r\n new Headers({ 'Accept': 'application/xml, application/problem+json' }));\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n\r\n const content = await response.text();\r\n\r\n const parsed = gexf.parse(\r\n Graph,\r\n content,\r\n { respectInputGraphType: true });\r\n\r\n parsed.updateEachNodeAttributes((_, attributes: IGexfWaypointAttributesDto) => ({\r\n mapId: attributes.mapId,\r\n assetItems: attributes.assetItems,\r\n coordinates: {\r\n $type: 'cartesian',\r\n x: attributes.x,\r\n y: attributes.y,\r\n z: attributes.z\r\n }\r\n } as WaypointAttributes));\r\n\r\n return parsed;\r\n }\r\n\r\n public async deleteWaypointAsync(projectId: number, waypointId: number): Promise {\r\n const route = String.Format(\r\n Routes.Api.Projects.Graph.Waypoints.Waypoint.Base,\r\n projectId,\r\n waypointId);\r\n\r\n const response = await this._httpClient.deleteAsync(route, null);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async deleteEdgeAsync(\r\n projectId: number,\r\n sourceId: number,\r\n targetId: number\r\n ): Promise {\r\n const route = String.Format(\r\n Routes.Api.Projects.Graph.Edges.Edge,\r\n projectId,\r\n sourceId,\r\n targetId);\r\n\r\n const response = await this._httpClient.deleteAsync(route, null);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async linkAssetItemToWaypointAsync(\r\n projectId: number,\r\n waypointId: number,\r\n assetItemId: number\r\n ): Promise {\r\n const route = String.Format(\r\n Routes.Api.Projects.Graph.Waypoints.Waypoint.Assets,\r\n projectId,\r\n waypointId);\r\n\r\n const response = await this._httpClient.postAsync(route, assetItemId);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async unlinkAssetItemFromWaypointAsync(\r\n projectId: number,\r\n waypointId: number,\r\n assetItemId: number\r\n ): Promise {\r\n const route = String.Format(\r\n Routes.Api.Projects.Graph.Waypoints.Waypoint.Asset,\r\n projectId,\r\n waypointId,\r\n assetItemId);\r\n\r\n const response = await this._httpClient.deleteAsync(route, null);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n\r\n public progressChanged: Function;\r\n public _driveService: DriveService;\r\n private readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { IMailProviderDetails, IMailSettings, MailSettingsValidationResult } from 'Api/Dto/Admin/MailSettings';\r\nimport { MailSettingsViewModel } from 'Api/Dto/Admin/ViewModels/MailSettings/MailSettingsViewModel';\r\nimport { IQueryResultBase, QueryException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { Routes } from 'Api/Routes';\r\nimport { inject, injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class SettingService {\r\n constructor(\r\n @inject(AppContext) appContext: AppContext,\r\n @inject(HttpClient) httpClient: HttpClient\r\n ) {\r\n this._appContext = appContext;\r\n this._httpClient = httpClient;\r\n }\r\n\r\n public async getMailProvidersAsync(): Promise> {\r\n let response = await this._httpClient.getAsync(Routes.Api.List.MailProviders);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async getCurrentMailSettingsAsync(): Promise {\r\n let response = await this._httpClient.getAsync(Routes.Api.Settings.Mail.Base);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as IMailSettings;\r\n }\r\n\r\n public async updateMailSettingsAsync(mailSettings: MailSettingsViewModel): Promise {\r\n let response = await this._httpClient.postFormDataAsync(Routes.Api.Settings.Mail.Base, mailSettings);\r\n\r\n if (response.status == 400) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async testMailSettingsAsync(mailSettings: MailSettingsViewModel): Promise {\r\n let response = await this._httpClient.postFormDataAsync(Routes.Api.Settings.Mail.Test, mailSettings);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as MailSettingsValidationResult;\r\n }\r\n\r\n protected readonly _appContext: AppContext;\r\n protected readonly _httpClient: HttpClient;\r\n}\r\n","import { SmartObjectDto } from 'Api/Contracts/Dtos';\r\nimport { CreateSmartObjectInputDto, SmartObjectGroupingDto, SmartObjectSearchCriteriaDto, UpdateSmartObjectInputDto } from 'Api/Contracts/Dtos/SmartObject';\r\nimport { ISmartObjectService } from 'Api/Contracts/Interfaces';\r\nimport { IPaginationResult } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class SmartObjectService implements ISmartObjectService {\r\n public constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n public async getObjectAsync(\r\n smartObjectId: number,\r\n expand?: string,\r\n token?: string\r\n ): Promise {\r\n const endpoint: string = String.Format(\r\n Routes.Api.SmartObjects.SmartObject,\r\n smartObjectId);\r\n\r\n const queryParameters = expand\r\n ? { $expand: 'schema', token: token }\r\n : { token: token };\r\n\r\n const response: Response = await this._httpClient.getAsync(\r\n endpoint,\r\n null,\r\n queryParameters);\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync(response);\r\n }\r\n\r\n public getObjectsAsync(\r\n smartObjectSearchCriteriaDto?: SmartObjectSearchCriteriaDto,\r\n token?: string\r\n ): Promise>;\r\n\r\n public getObjectsAsync(\r\n endpoint: string,\r\n token?: string\r\n ): Promise>;\r\n\r\n public async getObjectsAsync(\r\n arg?: SmartObjectSearchCriteriaDto | string,\r\n token: string = null\r\n ): Promise> {\r\n const response: Response = typeof arg === 'string'\r\n ? await this._httpClient.getAsync('', arg, null, new Headers({ token: token }))\r\n : await this._httpClient.getAsync(Routes.Api.SmartObjects.Base, null, { ...arg, token: token });\r\n\r\n const paginationResult = await this._responseHandler\r\n .handleResponseAsync>(response);\r\n\r\n for (const group of paginationResult.items) {\r\n for (const smartObject of group.items) {\r\n smartObject.schema = group.group;\r\n }\r\n }\r\n\r\n return paginationResult;\r\n }\r\n\r\n public async createObjectAsync(\r\n smartObjectInput: CreateSmartObjectInputDto\r\n ): Promise> {\r\n const response: Response = await this._httpClient\r\n .postAsync(Routes.Api.SmartObjects.Base, smartObjectInput);\r\n\r\n return await this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async updateObjectAsync(\r\n smartObjectId: number,\r\n smartObjectInput: UpdateSmartObjectInputDto\r\n ): Promise {\r\n const endpoint: string = String.Format(\r\n Routes.Api.SmartObjects.SmartObject,\r\n smartObjectId);\r\n\r\n const response: Response = await this._httpClient.putAsync(endpoint, smartObjectInput);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async deleteObjectAsync(smartObjectId: number): Promise {\r\n const endpoint: string = String.Format(\r\n Routes.Api.SmartObjects.SmartObject,\r\n smartObjectId);\r\n\r\n const response: Response = await this._httpClient.deleteAsync(endpoint, null);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n private readonly _httpClient: HttpClient;\r\n private readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { Tag, TagCounter } from 'Api/Contracts/Dtos';\r\nimport { IQueryResultBase, QueryException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { Routes } from 'Api/Routes';\r\nimport { inject, injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class TagService {\r\n public constructor(@inject(HttpClient) httpClient: HttpClient) {\r\n this._httpClient = httpClient;\r\n }\r\n\r\n public async listTagsAsync(): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.Tags.List);\r\n const jsonResponse = await response.json();\r\n\r\n if(response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async searchTagsAsync(search: string): Promise> {\r\n if (search == null || search == undefined) {\r\n throw new Error(`ArgumentNullException: ${search}`);\r\n }\r\n\r\n const response = await this._httpClient.postAsync(Routes.Api.Tags.Search, search);\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async getTagsAsync(tagIds: Array): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.Tags.Base, null, {\r\n tagIds: tagIds\r\n });\r\n\r\n let jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async createTagsAsync(tagNames: Array): Promise> {\r\n const response = await this._httpClient.postAsync(Routes.Api.Tags.Base, tagNames);\r\n const jsonResponse = await response.json();\r\n\r\n if(response.status != 201) {\r\n let queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as Array;\r\n }\r\n\r\n public async updateTagAsync(tag: Tag): Promise {\r\n const response = await this._httpClient.putAsync(Routes.Api.Tags.Base, tag);\r\n\r\n if(response.status != 204) {\r\n const jsonResponse = await response.json();\r\n let queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async deleteTagsAsync(tagIds: Array): Promise {\r\n const response = await this._httpClient.deleteAsync(Routes.Api.Tags.Base, tagIds);\r\n\r\n if(response.status != 204) {\r\n const jsonResponse = await response.json();\r\n let queryError = jsonResponse as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n}\r\n","import { PublicationStatus, Tag } from 'Api/Contracts/Dtos';\r\nimport { ITagService } from 'Api/Contracts/Interfaces';\r\nimport { IFileShare } from 'Api/Dto/Drive';\r\nimport { IPaginationResult, IQueryResultBase, IServerPaginationResult, NotFoundException, QueryException, UnauthorizedException } from 'Api/Dto/QueryResult';\r\nimport { ISearchResult } from 'Api/Dto/SearchResult';\r\nimport { IUpdateVideoViewModel, IVideo } from 'Api/Dto/Video';\r\nimport { IComment } from 'Api/ExploreService';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { TagService } from 'Api/Services';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport JsonPatch from 'fast-json-patch';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class VideoService implements ITagService {\r\n constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(TagService) tagService: TagService,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._tagService = tagService;\r\n this._responseHandler = responseHandler;\r\n }\r\n\r\n public async searchVideoAsync(search: string, page: number, pageSize: number): Promise> {\r\n const response: Response = await this._httpClient.getAsync(Routes.Api.Videos.Base, null, {\r\n search,\r\n page,\r\n pageSize\r\n });\r\n\r\n return this._responseHandler.handleResponseAsync>(response);\r\n }\r\n\r\n public async deleteVideosAsync(videoIds: Array) {\r\n const response = await this._httpClient.deleteAsJsonAsync(videoIds, null, Routes.Api.Videos.Base);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async getVideoAsync(videoId: number, token?: string): Promise {\r\n const url = String.Format(Routes.Api.Videos.Video, videoId);\r\n const response = await this._httpClient.getAsync(url, null, { token: token });\r\n const queryResult = await response.json();\r\n\r\n if (response.status == 404) {\r\n throw new NotFoundException();\r\n }\r\n\r\n if (response.status == 401) {\r\n throw new UnauthorizedException();\r\n }\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as IVideo;\r\n }\r\n\r\n public async updateVideoAsync(original: IVideo, updated: IUpdateVideoViewModel): Promise {\r\n const patch = JsonPatch.compare(original, updated);\r\n const url = String.Format(Routes.Api.Videos.Video, original.videoId);\r\n const response = await this._httpClient.patchAsJsonAsync(patch, null, url);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n JsonPatch.applyPatch(original, patch);\r\n }\r\n\r\n public searchTagsAsync(search: string): Promise {\r\n return this._tagService.searchTagsAsync(search);\r\n }\r\n\r\n public async saveTagsAsync(item: IVideo, tags: Tag[]): Promise {\r\n await this.setTagsAsync(item.videoId, tags.map(t => t.name));\r\n }\r\n\r\n public async setTagsAsync(videoId: number, tags: string[]): Promise> {\r\n const url = String.Format(Routes.Api.Videos.Tags, videoId);\r\n const response = await this._httpClient.putAsJsonAsync(tags, null, url);\r\n\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 201) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as Array;\r\n }\r\n\r\n public async getTagsAsync(videoId: number, token?: string): Promise {\r\n const url = String.Format(Routes.Api.Videos.Tags, videoId);\r\n const response = await this._httpClient.getAsync(url, null, { token: token });\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as Array;\r\n }\r\n\r\n public async getSharesAsync(videoId: number, token?: string): Promise> {\r\n const url = String.Format(Routes.Api.Videos.Shares, videoId);\r\n const response = await this._httpClient.getAsync(url, null, { token: token });\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as Array;\r\n }\r\n\r\n public async updateThumbnailAsync(videoId: number, picture: File): Promise {\r\n const url = String.Format(Routes.Api.Videos.Thumbnail, videoId);\r\n const data = {\r\n file: picture\r\n };\r\n const response = await this._httpClient.postFormDataAsync(url, data);\r\n\r\n if (response.status != 201) {\r\n const queryResult = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryResult.error);\r\n }\r\n\r\n return response.headers.get('location');\r\n }\r\n\r\n public async deleteThumbnailAsync(videoId: number): Promise {\r\n const url = String.Format(Routes.Api.Videos.Thumbnail, videoId);\r\n const response = await this._httpClient.deleteAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n const queryResult = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryResult.error);\r\n }\r\n }\r\n\r\n public async updatePublicationStatusAsync(videoId: number, status: PublicationStatus): Promise {\r\n const url = String.Format(Routes.Api.Videos.PublicationStatus, videoId);\r\n const response = await this._httpClient.putAsJsonAsync(status, null, url);\r\n\r\n if (response.status != 204) {\r\n const queryError = await response.json() as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async getPublishedVideosAsync(page: number, pageSize: number, orderBy: string): Promise> {\r\n const response = await this._httpClient.getAsync(\r\n Routes.Api.Videos.Published.Base,\r\n null,\r\n {\r\n page,\r\n pageSize,\r\n orderBy\r\n }\r\n );\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async getPublishedVideoAsync(videoId: number, token?: string): Promise {\r\n const url = String.Format(Routes.Api.Videos.Published.Video, videoId);\r\n\r\n const queryResult = await this._responseHandler.handleResponseAsync(\r\n await this._httpClient.getAsync(url, null, { token: token })\r\n );\r\n\r\n return queryResult;\r\n }\r\n\r\n public async addViewToVideoAsync(videoId: number, token?: string): Promise {\r\n let url = String.Format(Routes.Api.Videos.Published.AddView, videoId);\r\n\r\n if (token) {\r\n const queryParameters = new URLSearchParams({ token: token });\r\n url = `${url}?${queryParameters}`;\r\n }\r\n\r\n const response = await this._httpClient.postAsJsonAsync(null, null, url);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n public async getCommentsAsync(videoId: number, page: number, pageSize: number, token?: string): Promise> {\r\n const data = {\r\n token,\r\n page,\r\n pageSize\r\n };\r\n\r\n const response: Response = await this._httpClient.getAsync(\r\n String.Format(Routes.Api.Videos.Published.Comments, videoId),\r\n null,\r\n data);\r\n\r\n return this._responseHandler\r\n .handleResponseAsync>(response);\r\n }\r\n\r\n public async addCommentAsync(videoId: number, text: string, token?: string): Promise {\r\n let url = String.Format(Routes.Api.Videos.Published.Comments, videoId);\r\n\r\n if (token) {\r\n const queryParameters = new URLSearchParams({ token: token });\r\n url = `${url}?${queryParameters}`;\r\n }\r\n\r\n const queryResult = await this._responseHandler.handleResponseAsync(\r\n await this._httpClient.postAsJsonAsync({ text: text }, null, url)\r\n );\r\n\r\n return queryResult;\r\n }\r\n\r\n public async searchPublishedVideosAsync(searchText: string, maxPageSize: number): Promise> {\r\n const queryData = {\r\n searchText: searchText,\r\n maxPageSize: maxPageSize\r\n };\r\n\r\n const response = await this._httpClient.getAsync(Routes.Api.Videos.Published.Search, null, queryData);\r\n\r\n return await this._handleSearchResponseAsync(response);\r\n }\r\n\r\n public async searchPublishedVideosNextPageAsync(nextPageLink: string): Promise> {\r\n const response = await this._httpClient.getAsync(nextPageLink, '/');\r\n\r\n return await this._handleSearchResponseAsync(response);\r\n }\r\n\r\n private async _handleSearchResponseAsync(response: Response): Promise> {\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n const paginatedResult = queryResult as IServerPaginationResult;\r\n\r\n return {\r\n found: paginatedResult.result,\r\n nextLink: paginatedResult.nextLink,\r\n hasMoreResults: paginatedResult.nextLink != null\r\n }\r\n }\r\n\r\n private readonly _httpClient: HttpClient;\r\n private readonly _tagService: TagService;\r\n private readonly _responseHandler: IResponseHandler;\r\n}\r\n","import { IWorkerViewModel } from 'Api/Dto/Admin/ViewModels/Workers/WorkerViewModel';\r\nimport { IAgent, IService, ITask, IWorker, IWorkerDetail, WorkerTaskStatus } from 'Api/Dto/Admin/Worker';\r\nimport { RangeException } from 'Api/Dto/Exception';\r\nimport { IPaginationResult, IQueryResultBase, QueryException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { Routes } from 'Api/Routes';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { inject, injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\n\r\n@injectable()\r\nexport class WorkerService {\r\n constructor(\r\n @inject(HttpClient) httpClient: HttpClient,\r\n @inject(injectTypes.IResponseHandler) responseHandler: IResponseHandler\r\n ) {\r\n this._httpClient = httpClient;\r\n this._responseHandler = responseHandler;;\r\n }\r\n\r\n public async getWorkersAsync(search: string, page: number, pageSize: number): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.Workers.Base, null, {\r\n search,\r\n page,\r\n pageSize\r\n });\r\n\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((jsonResponse as IQueryResultBase).error);\r\n }\r\n\r\n return jsonResponse as IPaginationResult;\r\n }\r\n\r\n public async getAgentsAsync(search: string, page: number, pageSize: number): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.Agents.Base, null, {\r\n search,\r\n page,\r\n pageSize\r\n });\r\n\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((jsonResponse as IQueryResultBase).error);\r\n }\r\n\r\n return jsonResponse as IPaginationResult;\r\n }\r\n\r\n public async getWorkerAsync(workerId: number): Promise {\r\n const url = String.Format(Routes.Api.Workers.Worker, workerId);\r\n const response = await this._httpClient.getAsync(url);\r\n\r\n const queryResult = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((queryResult as IQueryResultBase).error);\r\n }\r\n\r\n return queryResult as IWorkerDetail;\r\n }\r\n\r\n public async getWorkerTasksAsync(\r\n tasksStatus: WorkerTaskStatus[],\r\n servicesIds: number[],\r\n page: number,\r\n pageSize: number,\r\n orderBy?: string,\r\n workerId?: number,\r\n startTime?: Date,\r\n endTime?: Date,\r\n fileGuid?: string\r\n ): Promise> {\r\n if (page <= 0) {\r\n throw new RangeException('page', 1);\r\n }\r\n\r\n const url = workerId\r\n ? String.Format(Routes.Api.Workers.Tasks, workerId)\r\n : Routes.Api.Tasks.Base;\r\n\r\n const response = await this._httpClient.getAsync(\r\n url,\r\n null,\r\n {\r\n tasksStatus,\r\n servicesIds,\r\n fileGuid,\r\n orderBy,\r\n page,\r\n pageSize,\r\n startTime,\r\n endTime\r\n }\r\n );\r\n\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((jsonResponse as IQueryResultBase).error);\r\n }\r\n\r\n return jsonResponse as IPaginationResult;\r\n }\r\n\r\n public async getServicesAsync(search: string, page: number, pageSize: number): Promise> {\r\n const response = await this._httpClient.getAsync(Routes.Api.Services.Base, null, {\r\n search,\r\n page,\r\n pageSize\r\n });\r\n\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status != 200) {\r\n throw new QueryException((jsonResponse as IQueryResultBase).error);\r\n }\r\n\r\n return jsonResponse as IPaginationResult;\r\n }\r\n\r\n public async turnOnWorkerAsync(workerId: number): Promise {\r\n const url = String.Format(Routes.Api.Workers.WorkerState, workerId);\r\n const response = await this._httpClient.putAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async turnOffWorkerAsync(workerId: number): Promise {\r\n const url = String.Format(Routes.Api.Workers.WorkerState, workerId);\r\n const response = await this._httpClient.deleteAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async enableAllServices(workerId: number): Promise {\r\n const url = String.Format(Routes.Api.Workers.ServicesState, workerId);\r\n const response = await this._httpClient.putAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async disableAllServices(workerId: number): Promise {\r\n const url = String.Format(Routes.Api.Workers.ServicesState, workerId);\r\n const response = await this._httpClient.deleteAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async enableService(workerId: number, serviceId: number): Promise {\r\n const url = String.Format(Routes.Api.Workers.ServiceState, workerId, serviceId);\r\n const response = await this._httpClient.putAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async disableService(workerId: number, serviceId: number): Promise {\r\n const url = String.Format(Routes.Api.Workers.ServiceState, workerId, serviceId);\r\n const response = await this._httpClient.deleteAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async restartTaskAsync(taskId: number): Promise {\r\n const url = String.Format(Routes.Api.Tasks.Restart, taskId);\r\n const response = await this._httpClient.putAsync(url, null);\r\n\r\n if (response.status != 204) {\r\n let queryError = await response.json() as IQueryResultBase;\r\n\r\n throw new QueryException(queryError.error);\r\n }\r\n }\r\n\r\n public async createWorkerAsync(addWorkerViewModel: IWorkerViewModel): Promise {\r\n const url = Routes.Api.Workers.Base;\r\n const response = await this._httpClient.postAsync(url, addWorkerViewModel);\r\n const jsonResponse = await response.json();\r\n\r\n if (response.status == 400) {\r\n const queryError = jsonResponse as IQueryResultBase;\r\n throw new QueryException(queryError.error);\r\n }\r\n\r\n return jsonResponse as IWorker;\r\n }\r\n\r\n public async deleteAgentAsync(agentId: number): Promise {\r\n const endpoint: string = String.Format(Routes.Api.Agents.Agent, agentId);\r\n\r\n const response: Response = await this._httpClient.deleteAsync(endpoint, null);\r\n\r\n await this._responseHandler.handleErrorsAsync(response);\r\n }\r\n\r\n protected readonly _responseHandler: IResponseHandler;\r\n protected readonly _httpClient: HttpClient;\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { MenuStateType } from 'Api/Enums/MenuStateType';\r\nimport { LocalizerService } from 'Api/LocalizerService';\r\nimport CookieConsent from 'App/Areas/Public/Components/CookieConsent.vue';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IToastArgs, ToastType } from 'App/Mixins/ShowToastMixin';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { Component, Prop, UIElement, Vue, Watch } from 'Framework/Components/UIElement';\r\nimport { CookieConsentType, CookieHelper, ICookieConfig, ICookieConsentItem } from 'Framework/Helpers/CookieHelper';\r\nimport { UrlHelper } from 'Framework/Helpers/UrlHelper';\r\nimport { ComponentOptions } from 'vue';\r\nimport { Framework } from 'vuetify';\r\n\r\n@Component\r\nclass BasePage extends UIElement {\r\n public beforeMount(): void {\r\n UIElement.Bus.$on('show-toast', this.onShowToastAsync);\r\n\r\n this._initializeCookieConsent();\r\n }\r\n\r\n public mounted(): void {\r\n this._logo = this.$refs['app-logo'] as HTMLObjectElement;\r\n\r\n if (this._logo) {\r\n this._logo.onload = this.onLogoLoaded;\r\n }\r\n }\r\n\r\n public destroy(): void {\r\n UIElement.Bus.$off('show-toast');\r\n }\r\n\r\n public static async InitializeFromBody(vuetifyOption?: any): Promise {\r\n let mainDiv = document.getElementById('vue-data-context');\r\n let pageIdentifier = mainDiv.dataset['context'];\r\n let options: any = {};\r\n\r\n if (pageIdentifier?.startsWith('Spa')) {\r\n options.data = {};\r\n options.data.internals = {};\r\n options.data.internals.page = pageIdentifier.substring(4);\r\n pageIdentifier = 'Spa';\r\n }\r\n\r\n let pageType = BasePage._pages[pageIdentifier] || Vue.extend({ extends: BasePage });\r\n\r\n if (pageType) {\r\n let pageTypeLoader = pageType as any;\r\n\r\n if (typeof (pageTypeLoader) === 'function' && !pageTypeLoader.component) {\r\n pageTypeLoader = pageTypeLoader();\r\n\r\n if (Promise.resolve(pageTypeLoader) == pageTypeLoader) {\r\n const { default: typeLoaded } = await pageTypeLoader;\r\n pageType = typeLoaded;\r\n }\r\n else {\r\n pageType = pageTypeLoader;\r\n }\r\n }\r\n\r\n return BasePage.Initialize(mainDiv, pageType, vuetifyOption, options);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public static Initialize(element: HTMLElement, c: { new(options?: ComponentOptions): T; }, vuetify?: any, options?: any): T {\r\n if (element) {\r\n let vmDefinition = { el: element, ...options };\r\n vmDefinition['vuetify'] = vuetify;\r\n\r\n let vm = new c(vmDefinition);\r\n let attributes: any = element.attributes || [];\r\n if (!attributes[Symbol.iterator]) {\r\n attributes = Array.from(attributes);\r\n }\r\n\r\n for (let attr of attributes) {\r\n let attributeName: string = BasePage.camelize(attr.name);\r\n if (attributeName[0] === ':') {\r\n attributeName = attributeName.slice(1);\r\n }\r\n if (attributeName in vm) {\r\n if (typeof (vm[attributeName]) == 'number') {\r\n Vue.set(vm, attributeName, Number(attr.nodeValue));\r\n }\r\n else if (typeof (vm[attributeName]) == 'boolean') {\r\n Vue.set(vm, attributeName, attr.nodeValue === 'true');\r\n }\r\n else {\r\n if (attr.nodeValue.startsWith('{') || attr.nodeValue.startsWith('[')) {\r\n Vue.set(vm, attributeName, JSON.parse(attr.nodeValue));\r\n attr.nodeValue = '[object Object]';\r\n }\r\n else {\r\n Vue.set(vm, attributeName, attr.nodeValue);\r\n }\r\n }\r\n }\r\n }\r\n window['mainViewModel'] = vm\r\n return vm;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Camelize a hyphen-delimited string.\r\n */\r\n public static camelize(str: string): string {\r\n return str.replace(BasePage.camelizeRE, (_, c) => { return c ? c.toUpperCase() : ''; });\r\n }\r\n\r\n /**\r\n * Hyphenate a camelCase string\r\n */\r\n public static hyphenate(str: string): string {\r\n return str.replace(BasePage.hyphenateRE, '-$1').toLowerCase();\r\n }\r\n\r\n public static RegisterPage(pageIdentifier: string, pageType: any) {\r\n BasePage._pages[pageIdentifier] = pageType;\r\n }\r\n\r\n public static ConfigureVuetifyLocalizer(vuetify: Framework, localizerService: LocalizerService): void {\r\n vuetify.lang.locales = localizerService.locale;\r\n vuetify.lang.current = localizerService.codeCulture;\r\n }\r\n\r\n public getUrlParameter(parameterName: string): string {\r\n return UrlHelper.getUrlParameter(parameterName);\r\n }\r\n\r\n public getUrlHashParameter(parameterName: string): string {\r\n return UrlHelper.getUrlHashParameter(parameterName);\r\n }\r\n\r\n public getUrlHashParameters(): any {\r\n return UrlHelper.getUrlHashParameters();\r\n };\r\n\r\n public async changeCultureAsync(codeCulture: string): Promise {\r\n if (this.appContext.codeCulture != codeCulture) {\r\n // replace codeCulture in URl without reloading the page\r\n window.history.replaceState('', '', window.location.href.replace(this.appContext.codeCulture, codeCulture));\r\n }\r\n\r\n this.appContext.codeCulture = codeCulture;\r\n await this.localizerService.loadTranslationAsync(codeCulture);\r\n\r\n BasePage.ConfigureVuetifyLocalizer(this.vuetify, this.localizerService);\r\n }\r\n\r\n public showToastAsync(text: string, buttonText: string, type: ToastType = 'success', timeout: number = 4000): Promise {\r\n if (!text || text == '' || !buttonText || buttonText == '') {\r\n throw new Error('Invalid parameters in showToast() method');\r\n }\r\n\r\n return new Promise(resolve => {\r\n this.toastOptions.icon = this._selectToastIcon(type);\r\n\r\n this.toastOptions.content = text;\r\n this.toastOptions.buttonText = buttonText;\r\n this.toastOptions.type = type;\r\n this.toastOptions.timeout = timeout\r\n\r\n this.isToastOpen = true;\r\n setTimeout(resolve, timeout);\r\n\r\n });\r\n }\r\n\r\n public async onShowToastAsync(args: IToastArgs): Promise {\r\n await this.showToastAsync(args.text, args.buttonText, args.type, args.timeout);\r\n }\r\n\r\n public onLogoLoaded(e: Event): void {\r\n const logo = e.srcElement as HTMLObjectElement;\r\n const contentDocument = logo.contentDocument;\r\n\r\n if (contentDocument) {\r\n let style = getComputedStyle(this.$el);\r\n const documentElement = contentDocument.documentElement;\r\n\r\n const textColor = this.vuetify.theme.dark\r\n ? '--v-secondary-lighten4'\r\n : '--v-secondary-darken1';\r\n\r\n documentElement.style.setProperty('--accent-color', style.getPropertyValue('--v-primary-base'));\r\n documentElement.style.setProperty('--logo-text-color', style.getPropertyValue(textColor));\r\n }\r\n }\r\n\r\n private _initializeCookieConsent(): void {\r\n UIElement.Bus.$on(CookieConsent.EventName, async (c: CookieConsentType) => {\r\n this.partnerServices.forEach(ps => ps.value = c);\r\n await this._updateCookiesAsync();\r\n });\r\n }\r\n\r\n protected async _updateCookiesAsync(): Promise {\r\n CookieHelper.setCookiesAsJson(this.partnerServices, this.cookieConsentConfig);\r\n this.$raisePropertyChanged(nameof(this.areCookiesAccepted));\r\n\r\n await this.showToastAsync(this.localizer('Views.Public.Cookies.UpdateConfirmation'), this.localizer('Close'));\r\n }\r\n\r\n private _selectToastIcon(type: ToastType): string {\r\n switch (type) {\r\n case 'success':\r\n return 'fa-circle-check';\r\n case 'error':\r\n return 'fa-triangle-exclamation';\r\n case 'warning':\r\n return 'fa-circle-exclamation';\r\n case 'info':\r\n return 'fa-circle-info';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n protected static camelizeRE: RegExp = /-(\\w)/g;\r\n protected static hyphenateRE: RegExp = /\\B([A-Z])/g;\r\n\r\n @Watch('localizerService')\r\n private async _onLocalizerChanged(newValue: LocalizerService, oldValue: LocalizerService): Promise {\r\n if (newValue) {\r\n await this.changeCultureAsync(newValue.codeCulture);\r\n }\r\n }\r\n\r\n @Watch('appContext.theme', { immediate: true })\r\n private async _onThemeChangedAsync(newValue: string, oldValue: string): Promise {\r\n if (newValue) {\r\n await this.$nextTick();\r\n let vuetify = this.vuetify;\r\n\r\n vuetify.theme.dark = newValue.startsWith('dark');\r\n\r\n if (vuetify.theme.dark) {\r\n vuetify.theme.themes.dark = Object.assign(vuetify.theme.themes.dark, BasePage._themes[newValue]);\r\n\r\n } else {\r\n vuetify.theme.themes.light = Object.assign(vuetify.theme.themes.light, BasePage._themes[newValue]);\r\n }\r\n\r\n if (this._logo) {\r\n //ré-exécutue le onload\r\n let url = this._logo.data;\r\n\r\n this._logo.removeEventListener('onload', this.onLogoLoaded);\r\n this._logo.data = '';\r\n\r\n this._logo.addEventListener('onload', this.onLogoLoaded);\r\n this._logo.data = url;\r\n }\r\n }\r\n }\r\n\r\n @Watch('appContext.menuState', { immediate: true })\r\n private _onMenuStateChanged(newValue: string, oldValue: string): void {\r\n this.drawer = this.isDrawerOpenByDefault;\r\n }\r\n\r\n public get vuetify(): any {\r\n return (this as any).$vuetify;\r\n }\r\n\r\n public get isLoggedIn(): boolean {\r\n return this.appContext.user.isSignedIn;\r\n }\r\n\r\n public get isDrawerOpenByDefault(): boolean {\r\n return this.appContext.menuState != MenuStateType.Closed && !this.isMobileOrTabletDevice;\r\n }\r\n\r\n public get homePageLink(): string {\r\n let appContext = this.appContext;\r\n return `${appContext.codeCulture}${appContext.homePage}`;\r\n }\r\n\r\n public get cookieConsents(): Array {\r\n return CookieHelper.getCookiesAsJson(this.cookieConsentConfig.name);\r\n }\r\n\r\n public get areCookiesAccepted(): boolean {\r\n return CookieHelper.isCookieExist(this.cookieConsentConfig.name);\r\n }\r\n\r\n public get isMobileOrTabletDevice(): boolean {\r\n return this.$vuetify.breakpoint.mobile;\r\n }\r\n\r\n @Prop({ type: String, required: false, default: null })\r\n public antiForgeryToken: string;\r\n\r\n protected static _pages: { [id: string]: any; } = {};\r\n\r\n @lazyInject(AppContext)\r\n public appContext: AppContext;\r\n\r\n @lazyInject(LocalizerService)\r\n public localizerService: LocalizerService;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n public uriService: IVisonUriService;\r\n\r\n public isToastOpen: boolean = false;\r\n public toastOptions = {\r\n type: '',\r\n icon: '',\r\n content: '',\r\n buttonText: '',\r\n timeout: -1\r\n }\r\n\r\n public isDrawerEnabled: boolean = true;\r\n public isGoToHomeEnabled: boolean = true;\r\n public isFullScreen: boolean = false;\r\n public isSpa: boolean = false;\r\n public drawer: boolean = false;\r\n\r\n protected readonly cookieConsentConfig: ICookieConfig = {\r\n name: 'cookieconsent_status',\r\n domain: '',\r\n path: '/',\r\n expirationInDays: 90,\r\n sameSite: 'None',\r\n secure: true\r\n };\r\n\r\n protected readonly partnerServices: Array = [\r\n //TODO: Get services dynamicaly from dataSource\r\n // { \r\n // name:'google', \r\n // value: CookieConsentType.None \r\n // },\r\n // { \r\n // name:'bing', \r\n // value: CookieConsentType.None \r\n // }\r\n ];\r\n\r\n protected baseTranslationPath: string = '';\r\n protected baseViewTranslationPath: string = '';\r\n\r\n private _logo: HTMLObjectElement;\r\n\r\n private static readonly _themes: any = {\r\n light: {\r\n primary: '#f18800',\r\n secondary: '#B0BEC5',\r\n accent: '#f18800',\r\n error: '#FF5252',\r\n info: '#2196F3',\r\n success: '#4CAF50',\r\n warning: '#FFC107',\r\n },\r\n dark: {\r\n primary: '#f18800',\r\n secondary: '#424242',\r\n accent: '#f18800',\r\n error: '#FF5252',\r\n info: '#2196F3',\r\n success: '#4CAF50',\r\n warning: '#FFC107',\r\n },\r\n 'dark-cyan': {\r\n primary: '#00d2d3',\r\n accent: '#00d2d3',\r\n },\r\n 'dark-blue': {\r\n primary: '#0078D7',\r\n accent: '#0078D7',\r\n },\r\n 'dark-blue1': {\r\n primary: '#103494',\r\n accent: '#103494',\r\n },\r\n 'dark-green': {\r\n primary: '#2ecc71',\r\n accent: '#2ecc71',\r\n },\r\n 'dark-orange': {\r\n primary: '#f18800',\r\n accent: '#f18800',\r\n },\r\n 'dark-pink': {\r\n primary: '#fd79a8',\r\n accent: '#fd79a8',\r\n },\r\n 'dark-purple': {\r\n primary: '#8e44ad',\r\n accent: '#8e44ad',\r\n },\r\n 'dark-red': {\r\n primary: '#f63622',\r\n accent: '#f63622',\r\n },\r\n 'dark-yellow': {\r\n primary: '#ebb500',\r\n accent: '#ebb500',\r\n },\r\n 'light-cyan': {\r\n primary: '#00d2d3',\r\n accent: '#00d2d3',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-blue': {\r\n primary: '#0078D7',\r\n accent: '#0078D7',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-blue1': {\r\n primary: '#103494',\r\n accent: '#103494',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-green': {\r\n primary: '#2ecc71',\r\n accent: '#2ecc71',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-orange': {\r\n primary: '#f18800',\r\n accent: '#f18800',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-pink': {\r\n primary: '#fd79a8',\r\n accent: '#fd79a8',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-purple': {\r\n primary: '#8e44ad',\r\n accent: '#8e44ad',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-red': {\r\n primary: '#f63622',\r\n accent: '#f63622',\r\n secondary: '#B0BEC5',\r\n },\r\n 'light-yellow': {\r\n primary: '#ebb500',\r\n accent: '#ebb500',\r\n secondary: '#B0BEC5',\r\n }\r\n };\r\n}\r\n\r\nexport { BasePage, Component, Prop, Watch };\r\n","/// \r\n\r\nexport const isDirectoryEntry = (entry: Entry): entry is DirectoryEntry => entry?.isDirectory === true;\r\n\r\nexport class CordovaFileError extends Error {\r\n constructor(error: FileError) {\r\n super(`Cordova file error with code ${error.code}`, { cause: error });\r\n }\r\n}\r\n\r\nexport class FileStorageHelper {\r\n constructor(fileSystem: LocalFileSystem) {\r\n this._fileSystemEntryPoint = fileSystem;\r\n }\r\n\r\n public async initializeAsync(): Promise {\r\n if (!this._fs) {\r\n this._fs = await this._getFileSystemAsync(this._fileSystemEntryPoint);\r\n\r\n if (this._fileSystemEntryPoint == LocalFileSystem.PERSISTENT) {\r\n cordova.file.dataDirectory = (this._fs.root as any).toURL();\r\n }\r\n else {\r\n cordova.file.cacheDirectory = (this._fs.root as any).toURL();\r\n }\r\n if (cordova.file.applicationDirectory.startsWith('file:')) {\r\n let applicationDirectory = `${window.location.origin}${window.location.pathname}`;\r\n\r\n let index = applicationDirectory.lastIndexOf('/');\r\n cordova.file.applicationDirectory = applicationDirectory.substring(0, index);\r\n }\r\n\r\n console.log('file system open: ' + this._fs.name);\r\n }\r\n }\r\n\r\n public isFileExistsAsync(path: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n window.resolveLocalFileSystemURL(\r\n path,\r\n entry => {\r\n resolve(true);\r\n },\r\n error => {\r\n resolve(false);\r\n }\r\n );\r\n });\r\n }\r\n\r\n public async deleteAsync(entry: Entry): Promise {\r\n if (entry.isDirectory) {\r\n const entries = await this.getEntriesAsync(entry as DirectoryEntry);\r\n\r\n for (const subEntry of entries) {\r\n await this.deleteAsync(subEntry);\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n entry.remove(\r\n () => resolve(),\r\n error => reject(new CordovaFileError(error))\r\n );\r\n });\r\n }\r\n\r\n public async getEntriesAsync(directory: DirectoryEntry): Promise> {\r\n let reader = directory.createReader();\r\n let results = new Array();\r\n let done = false;\r\n\r\n do {\r\n const entries = await this._getEntriesAsync(reader);\r\n done = entries.length == 0;\r\n results.push(...entries);\r\n }\r\n while (!done);\r\n\r\n results.forEach(entry => entry.fileHelper = this);\r\n return results;\r\n }\r\n\r\n private _getEntriesAsync(directoryReader: DirectoryReader): Promise> {\r\n return new Promise((resolve, reject) => {\r\n directoryReader.readEntries(\r\n entries => {\r\n resolve(entries);\r\n },\r\n error => {\r\n reject(new CordovaFileError(error));\r\n }\r\n );\r\n });\r\n }\r\n\r\n public getFileEntryAsync(path: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n window.resolveLocalFileSystemURL(\r\n path,\r\n entry => {\r\n entry.fileHelper = this;\r\n resolve(entry);\r\n },\r\n error => {\r\n if (error.code === FileError.SYNTAX_ERR\r\n || error.code === FileError.NOT_FOUND_ERR) {\r\n resolve(null);\r\n }\r\n else {\r\n reject(new CordovaFileError(error));\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n public async createDirectoryAsync(destination: DirectoryEntry, directoryPath: string): Promise {\r\n let directories = directoryPath.split('/');\r\n let currentDirectory = destination;\r\n\r\n if (directories.length > 1) {\r\n for (let directoryName of directories) {\r\n currentDirectory = await this.createDirectoryAsync(currentDirectory, directoryName);\r\n }\r\n return currentDirectory;\r\n }\r\n else {\r\n return new Promise((resolve, reject) => {\r\n currentDirectory.getDirectory(\r\n directories[0],\r\n { create: true, exclusive: false },\r\n directoryEntry => {\r\n directoryEntry.fileHelper = this;\r\n resolve(directoryEntry);\r\n },\r\n error => {\r\n reject(new CordovaFileError(error));\r\n }\r\n );\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new file or returns the file if it already exists.\r\n * @param folder \r\n * @param fileName \r\n * @param override override file if exists\r\n */\r\n public async createFileAsync(folder: DirectoryEntry, fileName: string, override: boolean = true): Promise {\r\n if (override) {\r\n const filePath: string = `${cordova.file.dataDirectory}${folder.fullPath}/${fileName}`;\r\n const fileEntry: Entry = await this.getFileEntryAsync(filePath);\r\n\r\n if (fileEntry) {\r\n await this.deleteAsync(fileEntry);\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n folder.getFile(\r\n fileName,\r\n { create: true, exclusive: override },\r\n fileEntry => {\r\n fileEntry.fileHelper = this;\r\n resolve(fileEntry);\r\n },\r\n error => {\r\n reject(new CordovaFileError(error));\r\n }\r\n );\r\n });\r\n }\r\n\r\n public async readFileAsync(file: FileEntry | string, mode: 'string' | 'object' | 'Array'): Promise {\r\n if (typeof (file) === 'string') {\r\n let fileEntry = await this.getFileEntryAsync(file) as FileEntry;\r\n return await this._readFileEntryAsync(fileEntry, mode);\r\n }\r\n else {\r\n return await this._readFileEntryAsync(file, mode);\r\n }\r\n }\r\n\r\n private _readFileEntryAsync(fileEntry: FileEntry, mode: 'string' | 'object' | 'Array'): Promise {\r\n return new Promise((resolve, reject) => {\r\n fileEntry.file(\r\n file => {\r\n let reader = new FileReader();\r\n reader.onloadend = () => {\r\n if (mode === 'object') {\r\n resolve(JSON.parse(reader.result as string));\r\n }\r\n else {\r\n resolve(reader.result);\r\n }\r\n };\r\n\r\n if (mode === 'string' || mode === 'object') {\r\n reader.readAsText(file);\r\n }\r\n else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n },\r\n error => {\r\n reject(new CordovaFileError(error));\r\n }\r\n );\r\n });\r\n }\r\n\r\n public get Root(): DirectoryEntry {\r\n return this._fs\r\n ? this._fs.root as any\r\n : null;\r\n }\r\n\r\n private _getFileSystemAsync(type: LocalFileSystem): Promise {\r\n return new Promise((resolve, reject) => {\r\n let w: any = window;\r\n\r\n if (w.initPersistentFileSystem) {\r\n w.initPersistentFileSystem(\r\n FileStorageHelper._persistentFileQuotaByteSize,\r\n () => {\r\n console.log('Persistent fs quota granted');\r\n },\r\n error => {\r\n console.error('Error occured while trying to request Persistent fs quota: ' + JSON.stringify(error));\r\n }\r\n );\r\n }\r\n\r\n window.requestFileSystem(\r\n type,\r\n FileStorageHelper._persistentFileQuotaByteSize,\r\n fs => {\r\n (fs.root as any).fileHelper = this;\r\n resolve(fs);\r\n },\r\n error => {\r\n reject(new CordovaFileError(error));\r\n }\r\n );\r\n });\r\n }\r\n\r\n public static async writeFileAsync(file: FileEntry, data: Blob | ReadableStream | ReadableStreamDefaultReader): Promise {\r\n if (!data) {\r\n throw new Error('No data argument');\r\n }\r\n\r\n if (data instanceof Blob) {\r\n await FileStorageHelper._writeFileFromBlobAsync(file, data);\r\n }\r\n else if (data instanceof ReadableStream) {\r\n await FileStorageHelper._writeFileFromReadableStreamAsync(file, data);\r\n }\r\n else if (data instanceof ReadableStreamDefaultReader) {\r\n await FileStorageHelper._writeFileFromReadableStreamReaderAsync(file, data);\r\n }\r\n }\r\n\r\n private static async _writeFileFromReadableStreamAsync(file: FileEntry, data: ReadableStream): Promise {\r\n let reader = data.getReader();\r\n\r\n await FileStorageHelper._writeFileFromReadableStreamReaderAsync(file, reader);\r\n }\r\n\r\n private static async _writeFileFromReadableStreamReaderAsync(file: FileEntry, reader: ReadableStreamDefaultReader): Promise {\r\n let nextChunk: ReadableStreamReadResult = await reader.read();\r\n\r\n let writer: FileWriter = await FileStorageHelper._getFileWriterAsync(file);\r\n while (!nextChunk.done) {\r\n const value = nextChunk.value;\r\n\r\n await FileStorageHelper._writeAsync(writer, new Blob([value.buffer.slice(value.byteOffset, value.byteLength)]));\r\n nextChunk = await reader.read();\r\n }\r\n }\r\n\r\n private static _writeFileFromBlobAsync(file: FileEntry, data: Blob, offset: number = 0): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!data) {\r\n reject(new Error('No data argument'));\r\n }\r\n\r\n file.createWriter(\r\n fw => {\r\n fw.seek(offset);\r\n fw.onerror = (event) => reject(new Error('Error while writing', { cause: event }));\r\n fw.onwriteend = (ev) => resolve();\r\n fw.write(data);\r\n },\r\n error => {\r\n reject(new CordovaFileError(error));\r\n }\r\n )\r\n });\r\n }\r\n\r\n private static _writeAsync(writer: FileWriter, data: Blob): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!data) {\r\n reject(new Error('No data argument'));\r\n }\r\n\r\n writer.onerror = (event) => reject(new Error('Error while writing', { cause: event }));\r\n writer.onwriteend = (ev) => resolve();\r\n writer.write(data);\r\n });\r\n }\r\n\r\n private static _getFileWriterAsync(file: FileEntry): Promise {\r\n return new Promise((resolve, reject) => {\r\n file.createWriter(\r\n fw => {\r\n resolve(fw);\r\n },\r\n error => {\r\n reject(new CordovaFileError(error));\r\n }\r\n )\r\n });\r\n }\r\n\r\n private readonly _fileSystemEntryPoint: LocalFileSystem;\r\n private _fs: FileSystem = null;\r\n private static readonly _persistentFileQuotaByteSize: number = 1024 * 1024 * 1024 * 10;\r\n}\r\n","import { AssetDirectory, AssetFile, AssetItem, AssetItemType, AssetPanoramaGroup, AssetProject, FileMap, FormType, Navigation, NavigationType, PanoramaItemLink, AssetHotspot as ProjectAssetHotspot, AssetPanoramaVersion as ProjectAssetPanoramaVersion, RendererHelper } from 'Api/Contracts/Dtos';\r\nimport { FileType } from 'Api/Dto/Drive';\r\nimport { CoordinateSystem, ICoordinates } from 'Api/Dto/Project';\r\nimport { AssetMapArea, AssetHotspot as ExploreAssetHotspot, AssetPanoramaVersion as ExploreAssetPanoramaVersion } from 'Api/ExploreService';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { CoordinatesHelper } from 'App/Helpers/CoordinatesHelper';\r\nimport { XMLParser } from 'fast-xml-parser';\r\nimport { IHotspot, IPlanCoordinates, ISphericalCoordinates } from 'Framework/Components/Controls/XView/Core';\r\n\r\ntype AssetHotspot = ProjectAssetHotspot | ExploreAssetHotspot;\r\ntype AssetPanoramaVersion = ProjectAssetPanoramaVersion | ExploreAssetPanoramaVersion;\r\n\r\nexport function getPdfUrl(cultureName: string, guid: string): string {\r\n return `/${cultureName}/asset/pdf/${guid}`;\r\n}\r\n\r\nexport function getPreviewUrl(cultureName: string, guid: string): string {\r\n return `/${cultureName}/asset/preview/${guid}`;\r\n}\r\n\r\nexport function getVideoUrl(cultureName: string, guid: string): string {\r\n return `/${cultureName}/asset/video/${guid}`;\r\n}\r\n\r\nexport function getPanoramaUrl(cultureName: string, guid: string): string {\r\n return `/${cultureName}/asset/panorama/${guid}/%lvl/%s/%h/%v`;\r\n}\r\n\r\nexport function getImageUrl(cultureName: string, guid: string, quality: 'original' | 'optimized'): string {\r\n return `/${cultureName}/asset/image/${guid}?quality=${quality}`;\r\n}\r\n\r\nexport function getDeepZoomImageConfigurationUrl(cultureName: string, guid: string): string {\r\n return `/${cultureName}/asset/deepzoom/${guid}`;\r\n}\r\n\r\nexport function getDeepZoomImageUrlwithParameters(cultureName: string, guid: string): string {\r\n return `/${cultureName}/asset/deepzoom/${guid}/%lvl/%tile`;\r\n}\r\n\r\nexport function getDeepZoomImageUrl(cultureName: string, guid: string, level: number, tile: number): string {\r\n return `/${cultureName}/asset/deepzoom/${guid}/${level}/${tile}`;\r\n}\r\n\r\nexport function getPanoramaMobileUrl(cultureName: string, guid: string): string {\r\n return `/${cultureName}/asset/panorama/${guid}/%lvl/%s`;\r\n}\r\n\r\nexport function getIconForItem(item: AssetItem, open: boolean = null): string {\r\n if (item instanceof ProjectAssetHotspot) {\r\n return RendererHelper.isIconRenderer(item.content) ? item.content.icon : 'fa-light fa-draw-polygon';\r\n }\r\n else if (item instanceof ProjectAssetPanoramaVersion) {\r\n return 'fa-light fa-globe';\r\n }\r\n else if (item instanceof Navigation) {\r\n return getNavigationIcon(item);\r\n }\r\n else if (item instanceof FileMap) {\r\n return 'fa-light fa-map';\r\n }\r\n else if (item instanceof AssetProject) {\r\n return 'fa-solid fa-pen-ruler';\r\n }\r\n else if (item instanceof PanoramaItemLink) {\r\n return 'fa-light fa-globe';\r\n }\r\n else if (item instanceof AssetPanoramaGroup) {\r\n return 'fa-light fa-book-atlas';\r\n }\r\n else if (item instanceof AssetDirectory) {\r\n if (item.isDefaultSmartObjectDirectory) {\r\n return 'fa-light fa-cubes';\r\n }\r\n\r\n return open ? 'fa-solid fa-folder-open' : 'fa-solid fa-folder';\r\n }\r\n else if (item instanceof AssetFile) {\r\n return getFileIcon(item);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getNavigationIcon(item: Navigation): string {\r\n if (item.navigationType == NavigationType.List) {\r\n return 'fa-light fa-list';\r\n }\r\n else if (item.navigationType == NavigationType.Map) {\r\n return 'fa-light fa-map-location-dot';\r\n }\r\n return null;\r\n}\r\n\r\nexport function getFileIcon(assetFile: AssetFile): string {\r\n let fileType = assetFile.file.fileType;\r\n\r\n if (fileType == FileType.Symlink) {\r\n fileType = assetFile.file.target.fileType;\r\n }\r\n\r\n if (fileType == FileType.Image) {\r\n return 'fa-solid fa-file-image';\r\n }\r\n else if (fileType == FileType.Office) {\r\n switch (assetFile.file.extension) {\r\n case '.xlsx':\r\n return 'fa-solid fa-file-excel';\r\n case '.pptx':\r\n return 'fa-solid fa-file-powerpoint';\r\n case '.docx':\r\n return 'fa-solid fa-file-word';\r\n default:\r\n return 'fa-solid fa-file';\r\n }\r\n }\r\n else if (fileType == FileType.Pdf) {\r\n return 'fa-solid fa-file-pdf';\r\n }\r\n else if (fileType == FileType.Video) {\r\n return 'fa-solid fa-file-video';\r\n }\r\n else if (fileType == FileType.Audio) {\r\n return 'fa-solid fa-file-audio';\r\n }\r\n else {\r\n return 'fa-solid fa-file';\r\n }\r\n}\r\n\r\nexport function getIconColorForItem(item: AssetItem, open: boolean = null): string {\r\n switch (item.type) {\r\n case AssetItemType.Directory:\r\n return (item as AssetDirectory).isDefaultSmartObjectDirectory\r\n ? null\r\n : 'amber';\r\n case AssetItemType.PanoramaItemLink:\r\n case AssetItemType.PanoramaVersion:\r\n case AssetItemType.PanoramaGroup:\r\n return 'blue';\r\n case AssetItemType.Hotspot:\r\n return (item as AssetHotspot).content.color;\r\n case AssetItemType.Project:\r\n return 'green';\r\n case AssetItemType.Navigation:\r\n return 'purple';\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nexport function makeLocalHotspot(globalHotspot: T, destinationVersion: AssetPanoramaVersion): T {\r\n let clone: T;\r\n\r\n if (globalHotspot instanceof ProjectAssetHotspot\r\n && destinationVersion instanceof ProjectAssetPanoramaVersion\r\n ) {\r\n clone = ProjectAssetHotspot.fromJson(globalHotspot) as T;\r\n }\r\n else if (globalHotspot instanceof ExploreAssetHotspot\r\n && destinationVersion instanceof ExploreAssetPanoramaVersion\r\n ) {\r\n clone = ExploreAssetHotspot.fromJson(globalHotspot) as T;\r\n }\r\n else {\r\n throw new Error('Mixing Dto.Project and Dto.Explore is forbidden. globalHotspot, oldReference and destinationVersion must all extend the same AssetItem type.');\r\n }\r\n\r\n clone.parent = destinationVersion;\r\n clone.parentId = destinationVersion.assetItemId;\r\n clone.coordinates = alignGlobalHotspotCoordinates(globalHotspot, 0, destinationVersion.offset);\r\n\r\n return clone;\r\n}\r\n\r\nexport function alignGlobalHotspotCoordinates(hotspot: AssetHotspot, oldOrigin: number, newOrigin: number): Array {\r\n if (hotspot.coordinateSystem == CoordinateSystem.Spherical) {\r\n return hotspot.coordinates.map(\r\n c => CoordinatesHelper.changeAzimuthBase(\r\n c as ISphericalCoordinates,\r\n oldOrigin,\r\n newOrigin\r\n )\r\n );\r\n }\r\n\r\n return hotspot.coordinates;\r\n}\r\n\r\nexport async function getImageSizeAsync(httpClient: HttpClient, codeCulture: string, guid: string, token: string = null): Promise<{ width: number, height: number }> {\r\n const result = await httpClient.getAsync(\r\n getDeepZoomImageConfigurationUrl(codeCulture, guid),\r\n null,\r\n { token: token }\r\n );\r\n\r\n const parser = new XMLParser({ ignoreAttributes: false });\r\n const jObj = parser.parse(await result.text());\r\n\r\n return {\r\n width: parseInt(jObj.Image.Size['@_Width'], 10),\r\n height: parseInt(jObj.Image.Size['@_Height'], 10)\r\n };\r\n}\r\n\r\nexport function toIHotspot(hotspot: AssetHotspot): IHotspot {\r\n const result: IHotspot = {\r\n coordinateSystem: hotspot.coordinateSystem,\r\n coordinates: hotspot.coordinates,\r\n name: hotspot.name,\r\n content: hotspot.content,\r\n events: hotspot.events,\r\n onclick: null,\r\n };\r\n\r\n if (hotspot instanceof AssetMapArea) {\r\n const coordinates = hotspot.areaCoordinates;\r\n\r\n const type = parseInt(hotspot.content.formType, 10);\r\n\r\n switch (type) {\r\n case FormType.Rectangle: {\r\n const origin: IPlanCoordinates = coordinates[0] as IPlanCoordinates;\r\n const size: any = coordinates[1];\r\n\r\n result.coordinates = [\r\n origin,\r\n { x: origin.x + size.w, y: origin.y + size.h },\r\n { x: origin.x + size.w, y: origin.y },\r\n { x: origin.x, y: origin.y + size.h }\r\n ];\r\n\r\n break;\r\n }\r\n case FormType.Circle: {\r\n const center: any = coordinates[0];\r\n const rayon: any = coordinates[1];\r\n\r\n //Generate the coordinates of the circle in the plan\r\n result.coordinates = [...generatePointsOnCircumference(\r\n { x: center.cx, y: center.cy },\r\n rayon.r,\r\n 100)\r\n ];\r\n\r\n break;\r\n }\r\n case FormType.Polygon: {\r\n const points: any = coordinates[0];\r\n\r\n result.coordinates = points.points;\r\n break;\r\n }\r\n default:\r\n }\r\n }\r\n\r\n if (hotspot.content.size) {\r\n if (!(hotspot.content.size instanceof Number)) {\r\n result.content.size = Number.parseInt(hotspot.content.size, 10);\r\n }\r\n }\r\n else {\r\n result.content.size = 20;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction* generatePointsOnCircumference(center: IPlanCoordinates, radius: number, numberOfPoints: number): IterableIterator {\r\n for (let i = 0; i < numberOfPoints; i++) {\r\n const theta = 2 * Math.PI * (i / numberOfPoints); // angle in radians\r\n\r\n yield {\r\n x: center.x + radius * Math.cos(theta),\r\n y: center.y + radius * Math.sin(theta)\r\n };\r\n }\r\n}\r\n","import { ICartesianCoordinates, ICoordinates, IPlanCoordinates, ISphericalCoordinates } from 'Api/Dto/Project';\r\nimport { MathHelper } from 'Framework/Helpers/MathHelper';\r\n\r\nexport class CoordinatesHelper {\r\n public static isCartesianCoordinates(coordinates: ICoordinates): coordinates is ICartesianCoordinates {\r\n return coordinates\r\n && (coordinates as ICartesianCoordinates).x !== undefined\r\n && (coordinates as ICartesianCoordinates).y !== undefined\r\n && (coordinates as ICartesianCoordinates).z !== undefined;\r\n }\r\n\r\n public static isSphericalCoordinates(coordinates: ICoordinates): coordinates is ISphericalCoordinates {\r\n return coordinates\r\n && (coordinates as ISphericalCoordinates).phi !== undefined\r\n && (coordinates as ISphericalCoordinates).theta !== undefined;\r\n }\r\n\r\n public static isPlanCoordinates(coordinates: ICoordinates): coordinates is IPlanCoordinates {\r\n return coordinates\r\n && (coordinates as IPlanCoordinates).x !== undefined\r\n && (coordinates as IPlanCoordinates).y !== undefined;\r\n }\r\n\r\n public static planToSpherical(coordinates: IPlanCoordinates, width: number, height: number): ISphericalCoordinates {\r\n return {\r\n theta: -((coordinates.x / width) - 0.5) * 2 * Math.PI,\r\n phi: (1 - ((2 * coordinates.y) / height)) * (Math.PI / 2)\r\n };\r\n }\r\n\r\n public static sphericalToPlan(coordinates: ISphericalCoordinates, width: number, height: number): IPlanCoordinates {\r\n return {\r\n x: ((-coordinates.theta / (2 * Math.PI)) + 0.5) * width,\r\n y: (((-2 * coordinates.phi) / Math.PI) + 1) * (height / 2)\r\n };\r\n }\r\n\r\n public static changeAzimuthBase(coordinates: ISphericalCoordinates, oldOrigin: number, newOrigin: number): ISphericalCoordinates {\r\n return {\r\n phi: coordinates.phi,\r\n theta: MathHelper.mod(coordinates.theta - oldOrigin + newOrigin + Math.PI, 2 * Math.PI) - Math.PI\r\n };\r\n }\r\n}\r\n","import { ApiException, IError, IProblemDetails } from 'Api/Dto/QueryResult';\r\nimport { injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class ApiExceptionFactory {\r\n public fromProblemDetails(problemDetails: IProblemDetails): ApiException {\r\n const error: IError = {\r\n code: problemDetails.title,\r\n message: problemDetails.detail,\r\n details: null,\r\n innerError: null,\r\n target: null\r\n };\r\n\r\n return new ApiException(\r\n problemDetails.status,\r\n error\r\n );\r\n }\r\n}\r\n","import { IProblemDetails } from 'Api/Dto/QueryResult';\r\nimport { ApiExceptionFactory } from 'Api/Infrastructure/ApiExceptionFactory';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { inject, injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class ResponseHandler implements IResponseHandler {\r\n public constructor(\r\n @inject(ApiExceptionFactory) apiExceptionFactory: ApiExceptionFactory\r\n ) {\r\n this._apiExceptionFactory = apiExceptionFactory;\r\n }\r\n\r\n public async handleResponseAsync(response: Response): Promise {\r\n await this.handleErrorsAsync(response);\r\n\r\n return await response.json() as T;\r\n }\r\n\r\n public async handleErrorsAsync(response: Response): Promise {\r\n if (response.status >= 400) {\r\n const problemDetails = await response.json() as IProblemDetails;\r\n\r\n throw this._apiExceptionFactory.fromProblemDetails(problemDetails);\r\n }\r\n }\r\n\r\n private readonly _apiExceptionFactory: ApiExceptionFactory;\r\n}\r\n\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { HttpClient, HttpVerb } from 'Api/HttpClient';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { inject, injectable } from 'inversify';\r\nimport urlJoin from 'url-join';\r\n\r\n@injectable()\r\nexport class VisonHttpClient extends HttpClient {\r\n public constructor(@inject(AppContext) appContext: AppContext, @inject(injectTypes.IVisonUriService) uriService: IVisonUriService) {\r\n super(uriService);\r\n\r\n this._appContext = appContext;\r\n this.antiForgeryToken = this._appContext.antiForgeryToken;\r\n }\r\n\r\n protected buildUri(baseUri: string, relativeUri: string): string {\r\n if (baseUri) {\r\n return urlJoin(baseUri, relativeUri);\r\n }\r\n\r\n return /^\\/?api\\//.exec(relativeUri)\r\n ? relativeUri\r\n : urlJoin(this._appContext.codeCulture, relativeUri);\r\n }\r\n\r\n protected _initializeInitRequest(method: HttpVerb, body: any = null, headers: Headers = null): RequestInit {\r\n headers = headers ?? new Headers();\r\n\r\n if (!headers.has('Accept-Language')) {\r\n headers.set('Accept-Language', this._appContext.codeCulture);\r\n }\r\n\r\n this.bearerToken = this._appContext.login?.token ?? null;\r\n\r\n return super._initializeInitRequest(method, body, headers);\r\n }\r\n\r\n protected readonly _appContext: AppContext;\r\n}\r\n","export class Stack {\r\n public push(item: T): void {\r\n if (this._currentItem) {\r\n this._list.push(this._currentItem);\r\n }\r\n\r\n this._currentItem = item;\r\n }\r\n\r\n public pop(): void {\r\n this._currentItem = this._list.pop() ?? null;\r\n }\r\n\r\n public get length(): number {\r\n return this._list.length + (this._currentItem == null ? 0 : 1);\r\n }\r\n\r\n public get currentItem(): T {\r\n return this._currentItem;\r\n }\r\n\r\n private _currentItem: T = null;\r\n private readonly _list: Array = [];\r\n}\r\n","import { ModalDialog } from 'Framework/Components/ModalDialog/ModalDialog';\r\nimport { Stack } from 'Framework/Extensions/Collections';\r\nimport { delayAsync } from 'Framework/Extensions/CoreJsExtensions';\r\nimport { DialogResult, IDialogOptions, IDialogService } from 'Framework/Services/IDialogService';\r\nimport { injectable } from 'inversify';\r\nimport Vue from 'vue';\r\n\r\n@injectable()\r\nexport class VDialogService implements IDialogService {\r\n public async openAsync(controller: string, modalComponent: new () => TComponent, dataContext?: any, dialogOptions?: IDialogOptions): Promise {\r\n //Defers dialog creation to the next event loop cycle\r\n //This addresses an issue where a touch event originating on a BabylonJS hotspot\r\n //could be incorrectly captured by the subsequently created input dialog overlay.\r\n //Without this delay, the touch event might propagate through the overlay before\r\n //the dialog is fully initialized, triggering unintended behavior.\r\n await delayAsync(0);\r\n\r\n const dialog: Dialog = new Dialog();\r\n this._dialogsStack.push(dialog);\r\n\r\n return new Promise(resolve => {\r\n dialog.resolver = resolve;\r\n\r\n dialogOptions = {\r\n ...VDialogService.DEFAULT_OPTIONS,\r\n ...dialogOptions\r\n };\r\n\r\n dialog.defaultResult = dialogOptions.dialogResult;\r\n\r\n const modalName = (modalComponent as any).extendOptions\r\n ? (modalComponent as any).extendOptions.name\r\n : modalComponent.name\r\n\r\n const contentTemplate = () => import(/* webpackMode: 'weak' */ `../../Areas/${controller}/Dialogs/${modalName}.vue`);\r\n\r\n dialog.isDialogOpened = true;\r\n\r\n let $root: Vue = (document.body.firstElementChild as any).__vue__;\r\n const $this = this;\r\n\r\n let dynamicDialog = Vue.component('DynamicDialog', {\r\n parent: $root,\r\n data: function() {\r\n return {\r\n width: dialogOptions.width,\r\n height: dialogOptions.height,\r\n vDialogProps: {\r\n contentClass: 'override_dialog',\r\n persistent: dialogOptions.fullScreen || $root.$vuetify.breakpoint.mobile || dialogOptions.persistent,\r\n scrollable: dialogOptions.scrollable,\r\n value: true,\r\n fullscreen: dialogOptions.fullScreen || $root.$vuetify.breakpoint.mobile\r\n }\r\n }\r\n },\r\n provide: function () {\r\n return {\r\n dialogOptions: this.$data.vDialogProps\r\n }\r\n },\r\n render: function(createElement) {\r\n return createElement(\r\n 'v-dialog',\r\n {\r\n props: this.$data.vDialogProps,\r\n on: {\r\n 'input': (value: boolean) => $this.isDialogOpened = value\r\n }\r\n },\r\n [\r\n createElement(contentTemplate, {\r\n props: {\r\n dataContext: Vue.observable(dataContext) || null\r\n },\r\n on: {\r\n 'close-dialog': (e: { sender: Vue, args?: DialogResult }) => {\r\n dialog.dialogResult = e.args;\r\n $this.isDialogOpened = false;\r\n },\r\n 'maximize-dialog': (e: { sender: Vue }) => {\r\n this.vDialogProps.fullscreen = true;\r\n },\r\n 'restore-dialog': (e: { sender: Vue }) => {\r\n this.vDialogProps.fullscreen = false;\r\n }\r\n },\r\n style: {\r\n height: this.$data.height,\r\n width: this.$data.width\r\n }\r\n })\r\n ]\r\n );\r\n }\r\n });\r\n\r\n let instance = new dynamicDialog();\r\n instance.$mount();\r\n\r\n dialog.destroy = () => {\r\n $root.$children.splice($root.$children.indexOf(instance), 1);\r\n instance.$destroy();\r\n };\r\n })\r\n }\r\n\r\n public get isDialogOpened(): boolean {\r\n return this._dialogsStack.currentItem?.isDialogOpened ?? false;\r\n }\r\n\r\n public set isDialogOpened(value: boolean) {\r\n const dialog = this._dialogsStack.currentItem;\r\n\r\n if (dialog == null) {\r\n return;\r\n }\r\n\r\n dialog.isDialogOpened = value;\r\n\r\n if (!value) {\r\n this._dialogsStack.pop();\r\n }\r\n }\r\n\r\n private readonly _dialogsStack: Stack = new Stack();\r\n\r\n public static readonly DEFAULT_OPTIONS: IDialogOptions = {\r\n width: 'auto',\r\n height: 'auto',\r\n persistent: false,\r\n dialogResult: DialogResult.None,\r\n scrollable: true,\r\n fullScreen: false\r\n };\r\n}\r\n\r\nclass Dialog {\r\n public dialogResult: DialogResult;\r\n public defaultResult: DialogResult;\r\n public resolver: (value?: DialogResult | PromiseLike) => void;\r\n public destroy: () => void;\r\n\r\n public get isDialogOpened(): boolean {\r\n return this._isDialogOpened;\r\n }\r\n\r\n public set isDialogOpened(value: boolean) {\r\n if (!value) {\r\n if (this.isDialogOpened && this.resolver) {\r\n this.resolver(this.dialogResult || this.defaultResult);\r\n }\r\n\r\n if (this.destroy) {\r\n this.destroy();\r\n }\r\n }\r\n\r\n this._isDialogOpened = value;\r\n }\r\n\r\n private _isDialogOpened: boolean = false;\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { IHotspot, IIconInfo, IIconProvider, TextureTypes } from 'Framework/Components/Controls/XView/Core';\r\nimport { inject, injectable } from 'inversify';\r\n\r\n@injectable()\r\nexport class IconProvider implements IIconProvider {\r\n public constructor(\r\n @inject(AppContext) appContext: AppContext,\r\n @inject(injectTypes.IVisonUriService) uriService: IVisonUriService\r\n ) {\r\n this._appContext = appContext;\r\n this._uriService = uriService;\r\n }\r\n\r\n public getIconInfo(hotspot: IHotspot): IIconInfo {\r\n const iconParts = (hotspot.content.icon as string).split(' ');\r\n\r\n let iconGroup: string;\r\n let iconName: string;\r\n let textureType: TextureTypes;\r\n\r\n if (iconParts[0] == 'sbs') {\r\n if (iconParts[2]?.startsWith('hs-roav7-')) {\r\n iconGroup = 'roav7';\r\n textureType = TextureTypes.OpacityTexture;\r\n iconName = iconParts[2];\r\n }\r\n }\r\n else {\r\n iconGroup = iconParts[0];\r\n iconName = iconParts[1];\r\n textureType = TextureTypes.OpacityTexture;\r\n }\r\n\r\n const iconInfo: IIconInfo = {\r\n url: this._uriService.getAbsoluteUri(`${this._appContext.codeCulture}/asset/icons/${iconGroup}/${iconName}`),\r\n textureType: textureType\r\n };\r\n\r\n if (iconParts[0] == 'animated') {\r\n iconInfo.animation = {\r\n nRows: 1,\r\n nCols: 28,\r\n frameRate: 20,\r\n startFrame: 0,\r\n endFrame: 27\r\n };\r\n }\r\n\r\n return iconInfo;\r\n }\r\n\r\n private readonly _appContext: AppContext;\r\n private readonly _uriService: IVisonUriService;\r\n}\r\n","import { ApiException } from 'Api/Dto/QueryResult';\r\nimport { AuthenticationService } from 'Api/Services';\r\nimport { IPasswordDialogContext } from 'App/Areas/Shares/Dialogs/IPasswordDialogContext';\r\nimport VoPasswordDialog from 'App/Areas/Shares/Dialogs/VoPasswordDialog.vue';\r\nimport { DialogResult, IDialogService } from 'Framework/Services/IDialogService';\r\n\r\nexport type TokenValidatorFactory = (token: string) => TokenValidator;\r\n\r\nexport class TokenValidator {\r\n public constructor(dialogService: IDialogService, authenticationService: AuthenticationService, token: string) {\r\n this._dialogService = dialogService;\r\n this._authenticationService = authenticationService;\r\n this._rawToken = token;\r\n }\r\n\r\n public async executeAsync(operation: (token: string) => Promise): Promise {\r\n try {\r\n return await operation(this.token);\r\n }\r\n catch (ex) {\r\n if (!(ex instanceof ApiException)) {\r\n throw ex;\r\n }\r\n\r\n if (ex.error.code == TokenValidator.TokenExpiredErrorCode) {\r\n this._validatedToken = await this._authenticationService\r\n .authenticateForShareAsync(this._rawToken, this._password);\r\n }\r\n else if (ex.error.code == TokenValidator.PasswordNeededErrorCode) {\r\n this._passwordDialogPromise ??= this._askPasswordAsync();\r\n\r\n await this._passwordDialogPromise;\r\n this._passwordDialogPromise = null;\r\n }\r\n\r\n return await operation(this.token);\r\n }\r\n }\r\n\r\n private async _askPasswordAsync(): Promise {\r\n const dialogContext: IPasswordDialogContext = {\r\n token: this._rawToken,\r\n authenticateForShareAsync: (token, password) => this._authenticationService.authenticateForShareAsync(token, password)\r\n };\r\n\r\n const dialogResult = await this._dialogService.openAsync(\r\n \"Shares\",\r\n VoPasswordDialog,\r\n dialogContext,\r\n { persistent: true }\r\n );\r\n\r\n if (dialogResult == DialogResult.OK) {\r\n this._password = dialogContext.password;\r\n this._validatedToken = dialogContext.validatedToken;\r\n }\r\n }\r\n\r\n public get token(): string {\r\n return this._validatedToken ?? this._rawToken;\r\n }\r\n\r\n private _validatedToken: string = null;\r\n private _password: string = null;\r\n private _passwordDialogPromise: Promise = null;\r\n\r\n private readonly _dialogService: IDialogService;\r\n private readonly _authenticationService: AuthenticationService;\r\n private readonly _rawToken: string;\r\n\r\n private static readonly PasswordNeededErrorCode = \"E_0x00000009\";\r\n private static readonly TokenExpiredErrorCode = \"E_0x00000008\";\r\n}\r\n","import { UriService } from 'Api/Services';\r\nimport { IReactive, IUriServiceReactive } from 'App/Services/UriServices/Core';\r\nimport { injectable } from 'inversify';\r\nimport { Vue } from 'vue-property-decorator';\r\n\r\n/** Add support of Promise to vue binding */\r\n@injectable()\r\nexport class UriServiceReactive extends UriService implements IUriServiceReactive {\r\n public getAbsoluteUriReactive(relativeUri: string, parameters?: Record): IReactive {\r\n if (!this.reactiveUri[relativeUri]) {\r\n this.reactiveUri[relativeUri] = Vue.observable({\r\n result: null,\r\n isLoading: true\r\n });\r\n }\r\n\r\n if (this.reactiveUri[relativeUri].result == null) {\r\n const _ = this.getAbsoluteUriAsync(relativeUri, parameters)\r\n .then(r => {\r\n this.reactiveUri[relativeUri].result = r;\r\n this.reactiveUri[relativeUri].isLoading = false;\r\n });\r\n }\r\n\r\n return this.reactiveUri[relativeUri];\r\n }\r\n\r\n protected reactiveUri: Record = {};\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { IAbsoluteUriBehavior } from 'Api/Contracts/Interfaces';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { UriServiceReactive } from 'App/Services/UriServices/UriServiceReactive';\r\nimport { injectable } from 'inversify';\r\nimport { String } from 'typescript-string-operations';\r\nimport urlJoin from 'url-join';\r\n\r\n@injectable()\r\nexport class VisonUriService extends UriServiceReactive implements IVisonUriService {\r\n public constructor(appContext: AppContext, baseUri: string | (() => string), behavior: IAbsoluteUriBehavior) {\r\n super(baseUri, behavior);\r\n this._appContext = appContext;\r\n }\r\n\r\n public getWebUri(uriSchema: string, organization?: string, ...parameters: Array): string {\r\n return this._getRelativeUri(uriSchema, organization, null, ...parameters);\r\n }\r\n\r\n public getApiUri(uriSchema: string, organization?: string, ...parameters: Array): string {\r\n return this._getRelativeUri(uriSchema, organization, '', ...parameters);\r\n }\r\n\r\n private _getRelativeUri(uriSchema: string, organization?: string, codeCulture?: string, ...parameters: Array): string {\r\n let uri = parameters.length > 0\r\n ? String.Format(uriSchema, parameters)\r\n : uriSchema;\r\n\r\n codeCulture ??= this._appContext.codeCulture;\r\n uri = urlJoin(codeCulture, uri);\r\n\r\n if (!this._appContext.isDedicatedPlatform) {\r\n organization ??= this._appContext.organizationName;\r\n\r\n return urlJoin(organization, uri);\r\n }\r\n\r\n return uri;\r\n }\r\n\r\n private readonly _appContext: AppContext;\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport {\r\n IAbsoluteUriBehavior,\r\n IIconService,\r\n IJsonSchemaService,\r\n ISmartObjectService\r\n} from 'Api/Contracts/Interfaces';\r\nimport { ExploreService } from 'Api/ExploreService';\r\nimport { FileUploader } from 'Api/FileUploader';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { ApiExceptionFactory, ResponseHandler } from 'Api/Infrastructure';\r\nimport { IResponseHandler } from 'Api/Infrastructure/Interfaces';\r\nimport { LocalizerService, LocalizerServiceStandalone } from 'Api/LocalizerService';\r\nimport {\r\n AccountService,\r\n AuditService,\r\n AuthenticationService,\r\n DriveService,\r\n IconService,\r\n IdentityService,\r\n JsonSchemaService,\r\n PasswordValidationService,\r\n PdfService,\r\n PlatformService,\r\n ProjectService,\r\n SettingService,\r\n SmartObjectService,\r\n TagService,\r\n VideoService,\r\n WorkerService\r\n} from 'Api/Services';\r\nimport { VisonHttpClient } from 'App/Services/VisonHttpClient';\r\nimport { VDialogService } from 'App/Services/DialogService/DialogService';\r\nimport { IconProvider } from 'App/Services/IconProvider';\r\nimport { TokenValidator, TokenValidatorFactory } from 'App/Services/TokenValidator';\r\nimport { OfflineAbsoluteUriBehavior, OnlineAbsoluteUriBehavior } from 'App/Services/UriServices/AbsoluteUriBehaviors';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { VisonUriService } from 'App/Services/UriServices/VisonUriService';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport manifest from 'App/manifest.json';\r\nimport { IIconProvider } from 'Framework/Components/Controls/XView/Core';\r\nimport { IDialogService } from 'Framework/Services/IDialogService';\r\nimport { Container, interfaces } from 'inversify';\r\nimport getDecorators from 'inversify-inject-decorators';\r\nimport Vue from 'vue';\r\n\r\nconst serviceProvider = new Container();\r\nconst standaloneOnlineServiceProvider = serviceProvider.createChild();\r\n\r\nconst { lazyInject, lazyInjectNamed } = getDecorators(serviceProvider);\r\nconst { lazyInject: lazyInjectStandaloneOnline } = getDecorators(standaloneOnlineServiceProvider);\r\n\r\nserviceProvider\r\n .bind(AppContext)\r\n .toDynamicValue((context: interfaces.Context) => {\r\n //TODO temporary code, find a better way, to process that\r\n let appContext: AppContext = null;\r\n\r\n let appContextBuilder: (c: AppContext) => void = window['appContextBuilder'];\r\n\r\n if (!appContextBuilder) {\r\n throw new Error('You must declare a function appContextBuilder: (c: AppContext) => void onto window object.');\r\n }\r\n\r\n appContext = new AppContext();\r\n appContextBuilder(appContext);\r\n appContext.information = manifest;\r\n\r\n return Vue.observable(appContext);\r\n })\r\n .inSingletonScope();\r\n\r\nserviceProvider\r\n .bind(SettingService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(PlatformService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(AuthenticationService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(PdfService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(injectTypes.IVisonUriService)\r\n .toDynamicValue((context: interfaces.Context) => {\r\n const appContext: AppContext = context.container.get(AppContext);\r\n\r\n const behavior: IAbsoluteUriBehavior = appContext.isStandalone\r\n ? new OfflineAbsoluteUriBehavior(appContext.standaloneWrapper.persistentFolder)\r\n : new OnlineAbsoluteUriBehavior();\r\n\r\n return new VisonUriService(appContext, appContext.baseUri, behavior);\r\n })\r\n .inRequestScope();\r\n\r\nstandaloneOnlineServiceProvider\r\n .bind(injectTypes.IVisonUriService)\r\n .toDynamicValue((context: interfaces.Context) => {\r\n const appContext: AppContext = context.container.get(AppContext);\r\n\r\n return new VisonUriService(\r\n appContext,\r\n () => appContext.apiUri,\r\n new OnlineAbsoluteUriBehavior()\r\n );\r\n })\r\n .inSingletonScope();\r\n\r\nserviceProvider\r\n .bind(PasswordValidationService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(LocalizerService)\r\n .toDynamicValue((context: interfaces.Context) => {\r\n const appContext: AppContext = context.container.get(AppContext);\r\n const httpClient: HttpClient = context.container.get(HttpClient);\r\n\r\n if (appContext.isStandalone) {\r\n return new LocalizerServiceStandalone(appContext, httpClient);\r\n }\r\n else {\r\n return new LocalizerService(appContext, httpClient);\r\n }\r\n })\r\n .inSingletonScope();\r\n\r\nserviceProvider\r\n .bind(HttpClient)\r\n .to(VisonHttpClient)\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(ExploreService)\r\n .toSelf();\r\n\r\nserviceProvider\r\n .bind(DriveService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(ProjectService)\r\n .toSelf();\r\n\r\nserviceProvider\r\n .bind(AccountService)\r\n .toSelf();\r\n\r\nserviceProvider\r\n .bind(AuditService)\r\n .toSelf();\r\n\r\nserviceProvider\r\n .bind(IdentityService)\r\n .toSelf();\r\n\r\nserviceProvider\r\n .bind(TagService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(injectTypes.IDialogService)\r\n .toDynamicValue(ctx => Vue.observable(new VDialogService()))\r\n .inTransientScope();\r\n\r\nserviceProvider\r\n .bind(FileUploader)\r\n .toSelf();\r\n\r\nserviceProvider\r\n .bind(VideoService)\r\n .toSelf();\r\n\r\nserviceProvider\r\n .bind(WorkerService)\r\n .toSelf()\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(injectTypes.IIconProvider)\r\n .to(IconProvider)\r\n .inTransientScope();\r\n\r\nserviceProvider\r\n .bind(injectTypes.ISmartObjectService)\r\n .to(SmartObjectService)\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(ApiExceptionFactory)\r\n .toSelf()\r\n .inSingletonScope();\r\n\r\nserviceProvider\r\n .bind(injectTypes.IResponseHandler)\r\n .to(ResponseHandler)\r\n .inSingletonScope();\r\n\r\nserviceProvider\r\n .bind(injectTypes.TokenValidatorFactory)\r\n .toFactory((context: interfaces.Context) => {\r\n return (token: string) => new TokenValidator(\r\n context.container.get(injectTypes.IDialogService),\r\n context.container.get(AuthenticationService),\r\n token\r\n );\r\n });\r\n\r\nserviceProvider\r\n .bind(injectTypes.IIconService)\r\n .to(IconService)\r\n .inRequestScope();\r\n\r\nserviceProvider\r\n .bind(injectTypes.IJsonSchemaService)\r\n .to(JsonSchemaService)\r\n .inRequestScope();\r\n\r\nexport { lazyInject, lazyInjectNamed, lazyInjectStandaloneOnline, serviceProvider };\r\n","import { UIElement } from 'Framework/Components/UIElement';\r\nimport { Component, Vue } from 'vue-property-decorator';\r\n\r\nexport type ToastType = 'success' | 'error' | 'warning' | 'info' | 'primary' | 'secondary';\r\n\r\nexport interface IToastArgs {\r\n text: string,\r\n buttonText: string,\r\n type?: ToastType,\r\n timeout?: number\r\n}\r\n\r\n@Component\r\nexport class ShowToastMixin extends Vue {\r\n public showToast(text: string, buttonText: string, type?: ToastType, timeout?: number): void {\r\n const toastArgs: IToastArgs = {\r\n text: text,\r\n buttonText: buttonText,\r\n type: type,\r\n timeout: timeout\r\n };\r\n\r\n UIElement.Bus.$emit('show-toast', toastArgs);\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Vuetify, {\r\n VAlert,\r\n VApp,\r\n VAppBar,\r\n VAppBarNavIcon,\r\n VAutocomplete,\r\n VAvatar,\r\n VBreadcrumbs,\r\n VBreadcrumbsItem,\r\n VBtn,\r\n VBtnToggle,\r\n VCard,\r\n VCardActions,\r\n VCardSubtitle,\r\n VCardText,\r\n VCardTitle,\r\n VCarousel,\r\n VCarouselItem,\r\n VCheckbox,\r\n VChip,\r\n VCol,\r\n VColorPicker,\r\n VContainer,\r\n VDataIterator,\r\n VDataTable,\r\n VDialog,\r\n VDivider,\r\n VEditDialog,\r\n VExpandTransition,\r\n VExpansionPanel,\r\n VExpansionPanelContent,\r\n VExpansionPanelHeader,\r\n VExpansionPanels,\r\n VFadeTransition,\r\n VFileInput,\r\n VForm,\r\n VHover,\r\n VIcon,\r\n VImg,\r\n VList,\r\n VListGroup,\r\n VListItem,\r\n VListItemAction,\r\n VListItemAvatar,\r\n VListItemContent,\r\n VListItemGroup,\r\n VListItemIcon,\r\n VListItemSubtitle,\r\n VListItemTitle,\r\n VMain,\r\n VMenu,\r\n VNavigationDrawer,\r\n VOverflowBtn,\r\n VOverlay,\r\n VPagination,\r\n VProgressCircular,\r\n VProgressLinear,\r\n VRadio,\r\n VRadioGroup,\r\n VRating,\r\n VRow,\r\n VSelect,\r\n VSimpleTable,\r\n VSkeletonLoader,\r\n VSlider,\r\n VSnackbar,\r\n VSpacer,\r\n VSubheader,\r\n VSwitch,\r\n VSystemBar,\r\n VTab,\r\n VTabItem,\r\n VTableOverflow,\r\n VTabs,\r\n VTabsItems,\r\n VTabsSlider,\r\n VTextarea,\r\n VTextField,\r\n VTimeline,\r\n VTimelineItem,\r\n VToolbar,\r\n VToolbarItems,\r\n VToolbarTitle,\r\n VTooltip,\r\n VTreeview\r\n} from 'vuetify/lib';\r\n\r\nVue.use(Vuetify, {\r\n components: {\r\n VApp,\r\n VMain,\r\n VTreeview,\r\n VTabs,\r\n VTab,\r\n VTabsItems,\r\n VTabItem,\r\n VTabsSlider,\r\n VBtn,\r\n VIcon,\r\n VProgressLinear,\r\n VSlider,\r\n VMenu,\r\n VExpansionPanel,\r\n VTextField,\r\n VCheckbox,\r\n VDataIterator,\r\n VDataTable, VEditDialog, VTableOverflow,\r\n VPagination,\r\n VBreadcrumbs,\r\n VBreadcrumbsItem,\r\n VList,\r\n VListItem,\r\n VListItemGroup,\r\n VListItemTitle,\r\n VListItemContent,\r\n VListItemAction,\r\n VNavigationDrawer,\r\n VAppBar,\r\n VAppBarNavIcon,\r\n VListGroup,\r\n VListItemAvatar,\r\n VForm,\r\n VContainer,\r\n VRow,\r\n VCol,\r\n VDivider,\r\n VAlert,\r\n VDialog,\r\n VCard,\r\n VCardTitle,\r\n VCardText,\r\n VCardActions,\r\n VToolbar,\r\n VToolbarTitle,\r\n VToolbarItems,\r\n VSwitch,\r\n VRating,\r\n VHover,\r\n VImg,\r\n VAvatar,\r\n VSelect,\r\n VTooltip,\r\n VSnackbar,\r\n VProgressCircular,\r\n VSpacer,\r\n VAutocomplete,\r\n VExpandTransition,\r\n VOverflowBtn,\r\n VOverlay,\r\n VSystemBar,\r\n VListItemIcon,\r\n VChip,\r\n VSimpleTable,\r\n VColorPicker,\r\n VSkeletonLoader,\r\n VBtnToggle,\r\n VCardSubtitle,\r\n VListItemSubtitle,\r\n VRadioGroup,\r\n VRadio,\r\n VExpansionPanels,\r\n VExpansionPanelHeader,\r\n VExpansionPanelContent,\r\n VFileInput,\r\n VTimeline,\r\n VTimelineItem,\r\n VTextarea,\r\n VCarousel,\r\n VCarouselItem,\r\n VFadeTransition,\r\n VSubheader\r\n }\r\n});\r\n\r\n\r\nexport default new Vuetify({\r\n lang: {\r\n locales: {},\r\n current: 'NotLoaded',\r\n t: function (key: string, ...params: Array): string {\r\n if (this.current == 'NotLoaded') {\r\n return '';\r\n }\r\n\r\n if (!key.startsWith('$vuetify.')) {\r\n return (this as any).replace(key, params);\r\n }\r\n\r\n return (this as any).defaultTranslator(key, ...params)\r\n }\r\n },\r\n icons: {\r\n iconfont: 'fa',\r\n values: {\r\n search: 'fa-light fa-magnifying-glass',\r\n 'expand': 'fa-light fa-sm fa-fw fa-chevron-down',\r\n waypoint: 'M9 9V15H15V9H9M11 11H13V13H11V11Z',\r\n waypointEdge: 'M15,3V7.59L7.59,15H3V21H9V16.42L16.42,9H21V3M17,5H19V7H17M5,17H7V19H5',\r\n waypointEdgeNoTarget: 'M15,7.59 L7.59,15H3V21H9V16.42L16.42,9M5,17H7V19H5'\r\n },\r\n },\r\n theme: {\r\n options: {\r\n customProperties: true,\r\n },\r\n dark: true,\r\n themes: {\r\n light: {\r\n primary: '#f18800',\r\n secondary: '#424242',\r\n accent: '#f18800',\r\n error: '#FF5252',\r\n info: '#2196F3',\r\n success: '#4CAF50',\r\n warning: '#FFC107',\r\n 'text-primary': '#000000'\r\n },\r\n dark: {\r\n primary: '#f18800',\r\n secondary: '#424242',\r\n accent: '#f18800',\r\n error: '#FF5252',\r\n info: '#2196F3',\r\n success: '#4CAF50',\r\n warning: '#FFC107',\r\n 'text-primary': '#FFFFFF'\r\n }\r\n },\r\n },\r\n});\r\n","import { IDialogBehavior } from 'Framework/Components/ModalDialog/DialogBehavior';\r\nimport { DialogResult, ModalDialog } from 'Framework/Components/ModalDialog/ModalDialog';\r\nimport { VueClass } from 'vue-class-component/lib/declarations';\r\nimport { Component, Mixins, Provide } from 'vue-property-decorator';\r\n\r\nexport interface IBaseDialogBehavior extends IDialogBehavior {\r\n onClose: (result?: DialogResult) => void;\r\n onMaximize: () => void;\r\n onRestore: () => void;\r\n canConfirm: () => boolean;\r\n}\r\n\r\n@Component\r\nexport class BaseDialogBehavior extends ModalDialog implements IDialogBehavior {\r\n public async beforeOkAsync(): Promise {\r\n return true;\r\n }\r\n\r\n public async beforeCancelAsync(): Promise {\r\n return true;\r\n }\r\n\r\n public async beforeYesAsync(): Promise {\r\n return true;\r\n }\r\n\r\n public async beforeNoAsync(): Promise {\r\n return true;\r\n }\r\n\r\n public async beforeCloseAsync(): Promise {\r\n return true;\r\n }\r\n\r\n public canConfirm(): boolean {\r\n return true;\r\n }\r\n\r\n @Provide()\r\n private readonly dialogBehavior: IBaseDialogBehavior = {\r\n beforeCancelAsync: this.beforeCancelAsync,\r\n beforeCloseAsync: this.beforeCloseAsync,\r\n beforeNoAsync: this.beforeNoAsync,\r\n beforeOkAsync: this.beforeOkAsync,\r\n beforeYesAsync: this.beforeYesAsync,\r\n canConfirm: this.canConfirm,\r\n onClose: this.onClose,\r\n onMaximize: this.onMaximize,\r\n onRestore: this.onRestore\r\n };\r\n}\r\n\r\nexport function BaseDialogBehaviorMixin(): VueClass> {\r\n return Mixins>(BaseDialogBehavior);\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class BaseButton extends Vue {\r\n protected _onClick(event: Event): void {\r\n this.$emit('click', event);\r\n }\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public loading: boolean;\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public disabled: boolean;\r\n}\r\n","import { BaseDialogBehavior, IBaseDialogBehavior } from 'App/Services/DialogService/BaseDialogBehavior';\r\nimport { DialogOptions } from 'App/Services/DialogService/Components/DialogOptions';\r\nimport { DialogResult } from 'Framework/Services/IDialogService';\r\nimport { Component, Inject, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class VoDialogBase extends Vue {\r\n public close(result: DialogResult): void {\r\n this.dialog.onClose(result);\r\n }\r\n\r\n public maximize(): void {\r\n this.dialog.onMaximize();\r\n }\r\n\r\n public restore(): void {\r\n this.dialog.onRestore();\r\n }\r\n\r\n @Inject({ from: 'dialogBehavior', default: new BaseDialogBehavior()})\r\n public readonly dialog: IBaseDialogBehavior;\r\n\r\n @Inject()\r\n public readonly dialogOptions: DialogOptions;\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public canMaximize: boolean;\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public canRestore: boolean;\r\n\r\n @Prop({ type: Boolean, default: false })\r\n public noPadding: boolean;\r\n}\r\n","import { IAbsoluteUriBehavior } from 'Api/Contracts/Interfaces';\r\nimport { ArgumentNullException } from 'Api/Dto/Exception';\r\nimport { FileStorageHelper } from 'App/Areas/Standalone/FileStorageHelper';\r\nimport urlJoin from 'url-join';\r\n\r\nexport abstract class AbsoluteUriBehavior implements IAbsoluteUriBehavior {\r\n public getAbsoluteUri(baseUri: string, relativeUri: string, parameters?: Record): string {\r\n if (!relativeUri) {\r\n throw new ArgumentNullException('relativeUri');\r\n }\r\n\r\n let url: URL = null;\r\n\r\n try {\r\n const urlString = relativeUri.startsWith('http')\r\n ? relativeUri\r\n : this._urlJoin(baseUri, relativeUri);\r\n\r\n url = new URL(urlString);\r\n }\r\n catch {\r\n return null;\r\n }\r\n\r\n if (parameters) {\r\n for (let [key, value] of Object.entries(parameters)) {\r\n if (value && value.length > 0) {\r\n url.searchParams.append(key, value);\r\n }\r\n }\r\n }\r\n\r\n return url.href;\r\n }\r\n\r\n public abstract getAbsoluteUriAsync(baseUri: string, relativeUri: string, parameters?: Record): Promise;\r\n\r\n protected abstract _urlJoin(baseUri: string, relativeUri: string): string;\r\n}\r\n\r\nexport class OnlineAbsoluteUriBehavior extends AbsoluteUriBehavior {\r\n public override getAbsoluteUriAsync(baseUri: string, relativeUri: string, parameters?: Record): Promise {\r\n return Promise.resolve(this.getAbsoluteUri(baseUri, relativeUri, parameters));\r\n }\r\n\r\n protected override _urlJoin(baseUri: string, relativeUri: string): string {\r\n return urlJoin(baseUri, relativeUri);\r\n }\r\n}\r\n\r\nexport class OfflineAbsoluteUriBehavior extends AbsoluteUriBehavior {\r\n public constructor(persistentFolder: FileStorageHelper) {\r\n super();\r\n\r\n this._persistentFolder = persistentFolder;\r\n }\r\n\r\n public override getAbsoluteUri(baseUri: string, relativeUri: string, parameters?: Record): string {\r\n let urlString: string = super.getAbsoluteUri(baseUri, relativeUri, parameters);\r\n\r\n const isFileScheme: boolean = urlString.startsWith('file:///')\r\n || urlString.startsWith('cdvfile://')\r\n || urlString.startsWith('filesystem:');\r\n\r\n if (isFileScheme) {\r\n const indexOfQueryParameters: number = urlString.indexOf('?');\r\n\r\n if (indexOfQueryParameters > 0) {\r\n urlString = urlString.substring(0, indexOfQueryParameters);\r\n }\r\n }\r\n\r\n return urlString;\r\n }\r\n\r\n public override async getAbsoluteUriAsync(baseUri: string, relativeUri: string, parameters?: Record): Promise {\r\n let urlString: string = this.getAbsoluteUri(baseUri, relativeUri, parameters);\r\n\r\n if (!await this._persistentFolder.isFileExistsAsync(urlString)) {\r\n console.debug('Uri Service isFileExistsAsync: ' + urlString);\r\n\r\n if (!relativeUri.startsWith('../../../')) {\r\n return this.getAbsoluteUriAsync(baseUri, `../${relativeUri}`, parameters);\r\n }\r\n }\r\n\r\n return urlString;\r\n }\r\n\r\n protected override _urlJoin(baseUri: string, relativeUri: string): string {\r\n return urlJoin(baseUri, relativeUri).replace('filesystem://', 'filesystem:');\r\n }\r\n\r\n private readonly _persistentFolder: FileStorageHelper;\r\n}\r\n","export const injectTypes = {\r\n IDialogService: Symbol.for('IDialogService'),\r\n IComponent: Symbol.for('IComponent'),\r\n IVisonUriService: Symbol.for('IVisonUriService'),\r\n IPlayerContext: Symbol.for('IPlayerContext'),\r\n IIconProvider: Symbol.for('IIconProvider'),\r\n ISmartObjectService: Symbol.for('ISmartObjectService'),\r\n IResponseHandler: Symbol.for('IResponseHandler'),\r\n TokenValidatorFactory: Symbol.for('TokenValidatorFactory'),\r\n IIconService: Symbol.for('IIconService'),\r\n IJsonSchemaService: Symbol.for('IJsonSchemaService'),\r\n};\r\n","import { VChip } from 'vuetify/lib/components/VChip';\nimport { VCombobox } from 'vuetify/lib/components/VCombobox';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VCombobox,{ref:\"comboBox\",attrs:{\"value\":_vm.selectedItems,\"items\":_vm.searchResults,\"loading\":_vm.isBusy,\"hide-no-data\":_vm.hasSearchResults,\"item-text\":\"name\",\"item-value\":\"tagId\",\"hide-selected\":\"\",\"no-filter\":\"\",\"multiple\":\"\",\"small-chips\":\"\"},on:{\"input\":_vm._onSelectionChanged,\"update:search-input\":_vm.onDebounceSearchTag},scopedSlots:_vm._u([{key:\"no-data\",fn:function(){return [_c(VListItem,[_c('span',{staticClass:\"subheading mr-1\"},[_vm._t(\"no-data\")],2),_c(VChip,{attrs:{\"label\":\"\",\"small\":\"\"}},[_c(VIcon,{attrs:{\"small\":\"\",\"left\":\"\"}},[_vm._v(\"fa-solid fa-tag\")]),_vm._v(_vm._s(_vm.searchTag)+\" \")],1)],1)]},proxy:true},{key:\"label\",fn:function(){return [_vm._t(\"label\")]},proxy:true},{key:\"selection\",fn:function(ref){\nvar item = ref.item;\nreturn [(item === Object(item))?_c(VChip,_vm._b({attrs:{\"label\":\"\",\"small\":\"\",\"close\":\"\",\"close-icon\":\"fa-light fa-xmark\"},on:{\"click:close\":function($event){return _vm._onRemoveTag(item)}}},'v-chip',item,false),[_c(VIcon,{attrs:{\"small\":\"\",\"left\":\"\"}},[_vm._v(\"fa-solid fa-tag\")]),_vm._v(_vm._s(item.name)+\" \")],1):_vm._e()]}},{key:\"item\",fn:function(ref){\nvar item = ref.item;\nreturn [_c(VChip,_vm._b({attrs:{\"label\":\"\",\"small\":\"\"}},'v-chip',item,false),[_c(VIcon,{attrs:{\"small\":\"\",\"left\":\"\"}},[_vm._v(\"fa-solid fa-tag\")]),_vm._v(_vm._s(item.name)+\" \")],1)]}}],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { Tag } from 'Api/Contracts/Dtos';\r\nimport { Component, Prop, UIElement } from 'Framework/Components/UIElement';\r\nimport { VChip, VCombobox, VIcon, VList } from 'vuetify/lib';\r\n\r\n//import { VCombobox } from 'vuetify/lib';\r\n\r\n@Component({\r\n name: 'x-tagger',\r\n components: {\r\n VCombobox,\r\n VList,\r\n VChip,\r\n VIcon\r\n }\r\n})\r\nexport default class Tagger extends UIElement {\r\n public onSearchTag(search: string): void { \r\n this.searchTag = search;\r\n\r\n this.$emit('text-changed', search);\r\n }\r\n\r\n private _onSelectionChanged(newValue: Array): void {\r\n const oldValue = this.selectedItems;\r\n\r\n if (newValue.length <= oldValue.length) {\r\n return;\r\n }\r\n\r\n let newSelection: Array = newValue.map(v => {\r\n if (v instanceof Tag) {\r\n return v;\r\n }\r\n else if (typeof v === 'string') {\r\n let tag: Tag = new Tag();\r\n tag.name = v;\r\n\r\n return tag;\r\n }\r\n else if(typeof v === 'object') {\r\n let tag: Tag = v as Tag;\r\n\r\n return tag;\r\n }\r\n else {\r\n throw Error('Not Supported Type');\r\n }\r\n });\r\n\r\n newSelection = newSelection.filter((v, i, array) => \r\n array.findIndex((v1, i1) => this._tagComparator(array[i], array[i1])) == i\r\n );\r\n\r\n newSelection.forEach(element => {\r\n let found = this.selectedItems.find(i => i == element);\r\n\r\n if(!found) {\r\n this.selectedItems.push(element);\r\n }\r\n });\r\n\r\n this.searchTag = null;\r\n (this.$refs.comboBox as any).internalSearch = '';\r\n this.$emit('selection-changed', this.selectedItems);\r\n }\r\n\r\n private _onRemoveTag(item: Tag): void {\r\n let index = this.selectedItems.findIndex(v => v == item);\r\n this.selectedItems.splice(index, 1);\r\n\r\n this.$emit('selection-changed', this.selectedItems);\r\n this.$emit('tag-removed', item);\r\n }\r\n\r\n private _tagComparator(tagA: Tag | string, tagB: Tag | string): boolean {\r\n let tagNameA = null;\r\n let tagNameB = null;\r\n\r\n if (tagA instanceof Tag) {\r\n tagNameA = tagA.name.toLowerCase();\r\n }\r\n else {\r\n tagNameA = tagA;\r\n }\r\n\r\n if (tagB instanceof Tag) {\r\n tagNameB = tagB.name.toLowerCase();\r\n }\r\n else {\r\n tagNameB = tagB;\r\n }\r\n\r\n return tagNameA == tagNameB;\r\n }\r\n\r\n public get hasSearchResults(): boolean {\r\n return this.searchResults && this.searchResults.length > 0;\r\n }\r\n\r\n public onDebounceSearchTag: any \r\n = this.$debounce((search: string) => this.onSearchTag(search), 500);\r\n\r\n public searchTag: string = null;\r\n\r\n @Prop({ type: Array, required: false, default: () => [] })\r\n public selectedItems: Array;\r\n\r\n @Prop({ type: Boolean, required: false, default: false })\r\n public isBusy: boolean;\r\n\r\n @Prop({ type: Array, required: false, default: () => [] })\r\n public searchResults: Array;\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./Tagger.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./Tagger.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Tagger.vue?vue&type=template&id=49058ec6&\"\nimport script from \"./Tagger.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./Tagger.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VListItem,[_c(VListItemAvatar,[_c(VIcon,{staticClass:\"primary\",domProps:{\"textContent\":_vm._s(_vm.fileIcon)}})],1),_c(VListItemContent,[_c(VListItemTitle,[_c('span',[_vm._v(_vm._s(_vm.file.name))]),_c(VChip,{class:(\"float-right \" + _vm.onStatusChanged),attrs:{\"x-small\":\"\"}},[_vm._v(_vm._s(_vm.localizer((\"JS.Drive.UploadFileEntries.States.\" + (_vm.uploadStatusEnumeration[_vm.uploadStatus])))))])],1),(!_vm.file.hasError)?_c(VListItemSubtitle,[_c('span',[_vm._v(_vm._s(_vm._formatFileEntrySize(_vm.file.progress, _vm.file.size))+\" / \"+_vm._s(_vm._formatTotalSize(_vm.file.size)))]),_c('span',{staticClass:\"float-right\"},[_vm._v(_vm._s(Math.round(_vm.file.progress))+\" %\")])]):_vm._e(),_c(VListItemSubtitle,[(!_vm.file.hasError)?_c(VProgressLinear,{attrs:{\"primary\":\"\",\"value\":Math.round(_vm.file.progress)}}):_vm._l((_vm.file.errors),function(error,index){return _c('span',{key:index,staticClass:\"error--text\"},[_vm._v(_vm._s(error))])})],2)],1),_c(VListItemAction,[(!_vm.isUploading)?_c(VBtn,{attrs:{\"text\":\"\",\"x-small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$emit('on-remove-file-entry', _vm.file)}}},[_c(VIcon,[_vm._v(\"fa-light fa-xmark\")])],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { ChunkedFile } from 'Api/FileUploader';\r\nimport { Component, Prop, UIElement, Watch } from 'Framework/Components/UIElement';\r\nimport { FileHelper } from 'Framework/Helpers/FileHelper';\r\n\r\n@Component({\r\n name: 'x-upload-file-entry'\r\n})\r\nexport default class UploadFileEntry extends UIElement {\r\n private _formatFileEntrySize(fileProgress: number, fileSize: number): string {\r\n return FileHelper.formatSize((fileProgress / 100) * fileSize);\r\n }\r\n\r\n private _formatTotalSize(bytesFloat: number): string {\r\n return FileHelper.formatSize(bytesFloat);\r\n }\r\n\r\n @Watch('file.progress')\r\n private _onProgressionChanged(newValue: number) {\r\n if (newValue >= 1 && newValue < 100) {\r\n this.uploadStatus = UploadStatus.uploading;\r\n }\r\n else {\r\n this.uploadStatus = UploadStatus.uploaded;\r\n }\r\n }\r\n\r\n @Watch('file.hasError', { immediate: true })\r\n private _onErrorChanged(newValue: boolean) {\r\n if (newValue) {\r\n this.uploadStatus = UploadStatus.failed;\r\n }\r\n }\r\n\r\n public get onStatusChanged(): string {\r\n switch (this.uploadStatus) {\r\n case UploadStatus.uploading:\r\n return 'info'\r\n case UploadStatus.uploaded:\r\n return 'success';\r\n case UploadStatus.failed:\r\n return 'error';\r\n default:\r\n return 'gray'\r\n }\r\n }\r\n\r\n public get fileIcon(): string {\r\n switch (FileHelper.getFileExtension(this.file.name)) {\r\n case '.xlsx':\r\n return 'fa-light fa-file-excel';\r\n case '.pptx':\r\n return 'fa-light fa-file-powerpoint';\r\n case '.docx':\r\n return 'fa-light fa-file-word';\r\n case '.pdf':\r\n return 'fa-light fa-file-pdf';\r\n case '.mp4':\r\n case '.avi':\r\n case '.flv':\r\n case '.wmv':\r\n case '.mov':\r\n case '.mpg':\r\n case '.m1v':\r\n case '.mpeg':\r\n return 'fa-light fa-file-video';\r\n case '.jpg':\r\n case '.jpeg':\r\n case '.png':\r\n case '.bmp':\r\n case '.tif':\r\n case '.tiff':\r\n return 'fa-light fa-file-image';\r\n default:\r\n return 'fa-light fa-file';\r\n }\r\n }\r\n\r\n public uploadStatusEnumeration: any = UploadStatus;\r\n\r\n public uploadStatus: UploadStatus = UploadStatus.pending;\r\n\r\n @Prop({ type: Boolean, required: true, default: false })\r\n public isUploading: boolean;\r\n\r\n @Prop({ type: Object, required: true, default: null })\r\n public file: ChunkedFile;\r\n}\r\n\r\nexport enum UploadStatus {\r\n pending,\r\n uploading,\r\n uploaded,\r\n failed\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./UploadFileEntry.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./UploadFileEntry.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./UploadFileEntry.vue?vue&type=template&id=780844f2&\"\nimport script from \"./UploadFileEntry.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./UploadFileEntry.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',{attrs:{\"transform\":_vm.transformScale}},[_c('path',{attrs:{\"d\":_vm.fovPath,\"fill\":_vm.parsedConfiguration.arcBackground,\"stroke\":_vm.parsedConfiguration.arcBorder,\"stroke-width\":_vm.parsedConfiguration.arcBorderThickness / _vm.scale,\"transform\":_vm.transformRotate}}),_c('circle',{attrs:{\"cx\":_vm.compassX,\"cy\":_vm.compassY,\"r\":5 / _vm.scale,\"fill\":_vm.parsedConfiguration.baseArcBackground,\"stroke\":_vm.parsedConfiguration.baseArcBorder,\"stroke-width\":_vm.parsedConfiguration.baseArcBorderThickness / _vm.scale}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { ICartesianCoordinates, ICoordinates } from 'Framework/Components/Controls/XView/Core';\r\nimport { Component, Prop, UIElement, Watch } from 'Framework/Components/UIElement';\r\nimport { MathHelper } from 'Framework/Helpers/MathHelper';\r\n\r\n@Component({\r\n name: 'x-compass'\r\n})\r\nexport default class Compass extends UIElement {\r\n @Prop({ type: Number, default: 1 })\r\n public scale: number;\r\n @Prop({ type: Number, default: null })\r\n public north: number;\r\n @Prop({ type: Object, default: null })\r\n public currentOrientation: ICoordinates;\r\n @Prop({ type: Object, default: null })\r\n public coordinates: any;\r\n @Prop({ type: String, default: null })\r\n public configuration: string;\r\n @Prop({ type: Number, default: null })\r\n public currentFocale: number;\r\n\r\n public currentNorth: number = null;\r\n\r\n @Watch('currentOrientation')\r\n private _onCurrentOrientationChanged(newValue: ICoordinates): void {\r\n if (!newValue) {\r\n return;\r\n }\r\n\r\n if (MathHelper.isSphericalCoordinates(newValue)) {\r\n newValue = MathHelper.toCartesianCoordinates(newValue);\r\n }\r\n\r\n const coordinates = newValue as ICartesianCoordinates;\r\n this.currentNorth = Math.atan2(coordinates.y, coordinates.x);\r\n }\r\n\r\n public get transformScale(): string {\r\n return `scale(${this.scale})`;\r\n }\r\n\r\n public get transformRotate(): string {\r\n if (this.compassX && this.compassY) {\r\n let rotation = this.north - this.currentNorth;\r\n rotation = rotation / Math.PI * 180;\r\n //Rotation svg en ° par défaut\r\n //Sens anti trigonometrique\r\n return `rotate(${rotation}, ${this.compassX}, ${this.compassY})`;\r\n }\r\n return '';\r\n\r\n }\r\n\r\n public get compassX(): number {\r\n return this.coordinates?.x;\r\n }\r\n\r\n public get compassY(): number {\r\n return this.coordinates?.y;\r\n }\r\n\r\n public get fovPath(): string {\r\n if (this.compassX && this.compassY) {\r\n let anglePoint = this._radianToCartesian((Math.PI / 2) + this.currentFocale / 2);\r\n let refPoint = this._radianToCartesian((Math.PI / 2) - this.currentFocale / 2);\r\n\r\n return `M ${refPoint.x} ${refPoint.y}\r\n A ${this.radius} ${this.radius}, 0, 0, 0, ${anglePoint.x} ${anglePoint.y}\r\n L ${this.compassX} ${this.compassY}\r\n Z`;\r\n }\r\n return '';\r\n }\r\n\r\n public get radius(): number {\r\n return 25 / this.scale;\r\n }\r\n\r\n public get parsedConfiguration(): object {\r\n if (this.configuration) {\r\n return JSON.parse(this.configuration);\r\n }\r\n return {};\r\n }\r\n\r\n private _radianToCartesian(angle: number): { x: number, y: number } {\r\n return {\r\n x: this.compassX + (this.radius * Math.cos(angle)),\r\n y: this.compassY - (this.radius * Math.sin(angle))\r\n };\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./Compass.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./Compass.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Compass.vue?vue&type=template&id=09d3327e&\"\nimport script from \"./Compass.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./Compass.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VImg } from 'vuetify/lib/components/VImg';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:['fileThumbnail', {'selected': _vm.isSelected}],attrs:{\"title\":_vm.fileName},on:{\"click\":function($event){return _vm.$emit('click')}}},[(_vm.HasThumbnail)?_c(VImg,{attrs:{\"src\":_vm.uriService.getAbsoluteUri(_vm.ThumbnailUrl),\"alt\":_vm.assetFile.name + ' thumbnail',\"aspect-ratio\":\"1.778\",\"max-width\":\"206px\",\"lazy-src\":_vm.uriService.getAbsoluteUri(((_vm._appContext.codeCulture) + \"/asset/preview/00000000-0000-0000-0000-000000000000\"))}}):_c('div',{staticClass:\"v-image\"},[_c('span',{class:_vm.FileIcon})]),_c('span',{staticClass:\"text\"},[_vm._v(_vm._s(_vm.fileName))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AppContext } from 'Api/AppContext';\r\nimport { AssetFile, AssetItemType } from 'Api/Contracts/Dtos';\r\nimport { getPreviewUrl } from 'App/Helpers/AssetHelper';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { Component, Prop, UIElement } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'x-file-preview'\r\n})\r\nexport default class FilePreview extends UIElement {\r\n @Prop({ type: Object, required: false, default: null })\r\n public assetFile: AssetFile;\r\n\r\n @Prop()\r\n public isSelected: boolean;\r\n\r\n\r\n public get HasThumbnail(): boolean {\r\n switch (this.assetFile.file.extension) {\r\n case '.pdf':\r\n case '.mp4':\r\n case '.avi':\r\n case '.flv':\r\n case '.wmv':\r\n case '.mov':\r\n case '.mpg':\r\n case '.m1v':\r\n case '.mpeg':\r\n case '.jpg':\r\n case '.jpeg':\r\n case '.png':\r\n case '.bmp':\r\n case '.tif':\r\n case '.tiff':\r\n case '.e57':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n public get ThumbnailUrl(): string {\r\n if (this.HasThumbnail) {\r\n return getPreviewUrl(this._appContext.codeCulture, this.assetFile.file.guid);\r\n }\r\n return '';\r\n }\r\n\r\n public get FileIcon(): string {\r\n if (this.assetFile.type == AssetItemType.Directory) {\r\n return 'fa-light fa-folder';\r\n }\r\n\r\n switch (this.assetFile.file.extension) {\r\n case '.xlsx':\r\n return 'fa-light fa-file-excel';\r\n case '.pptx':\r\n return 'fa-light fa-file-powerpoint';\r\n case '.docx':\r\n return 'fa-light fa-file-word';\r\n case '.pdf':\r\n return 'fa-light fa-file-pdf';\r\n case '.mp4':\r\n case '.avi':\r\n case '.flv':\r\n case '.wmv':\r\n case '.mov':\r\n case '.mpg':\r\n case '.m1v':\r\n case '.mpeg':\r\n return 'fa-light fa-file-video';\r\n case '.jpg':\r\n case '.jpeg':\r\n case '.png':\r\n case '.bmp':\r\n case '.tif':\r\n case '.tiff':\r\n return 'fa-light fa-file-image';\r\n default:\r\n return 'fa-light fa-file';\r\n }\r\n }\r\n\r\n public get fileName(): string {\r\n const nameWithoutExtension = this.assetFile.name || this.assetFile.file.nameWithoutExtension;\r\n const extension = this.assetFile.file.extension ?? '';\r\n\r\n return `${nameWithoutExtension}${extension}`;\r\n }\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n public uriService: IVisonUriService;\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { IError, IQueryResultBase } from 'Api/Dto/QueryResult';\r\nimport { AnalyticPermissions, AuditLogPermissions, DomainNameSystemPermissions, DrivePermissions, GroupPermissions, IdentityProviderPermissions, PlatformPermissions, ProjectPermissions, RolePermissions, SettingPermissions, SmartObjectPermissions, SubscriptionPermissions, TagPermissions, UserPermissions, WorkerPermissions } from 'Api/Enums/Permissions';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { UserPermissions as UserPermissionsDto } from 'Api/UserPermissions';\r\nimport VoSignInDialog, { ISignInDialogContext } from 'App/Areas/Shares/Dialogs/VoSignInDialog.vue';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { ShowToastMixin } from 'App/Mixins/ShowToastMixin';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { Component, Mixins, Prop, UIElement } from 'Framework/Components/UIElement';\r\nimport { EnumHelper } from 'Framework/Helpers/EnumHelper';\r\nimport { IDialogService } from 'Framework/Services/IDialogService';\r\n\r\nenum ApplicationType { Web = 1, Standalone = 2, Both = Web | Standalone }\r\n\r\nexport interface IDrawerItem {\r\n icon: string;\r\n titleKey: string;\r\n uri: string;\r\n permissionFlags: Array | number;\r\n permissionType?: keyof UserPermissionsDto;\r\n isSignInRequired: boolean;\r\n requiredPlugins?: Array;\r\n availableIn: ApplicationType;\r\n children?: Array;\r\n}\r\n\r\n\r\n@Component({\r\n name: 'x-drawer'\r\n})\r\nexport default class SbsDrawer extends Mixins(UIElement, ShowToastMixin) {\r\n public mounted() {\r\n this.isMiniVariant = this._appContext.menuState == 3;\r\n }\r\n\r\n private async _onLogOffAsync(): Promise {\r\n this._appContext.login = null;\r\n const root: any = this.$root as any;\r\n\r\n if (!root.isSpa) {\r\n const response = await this._httpClient.postFormDataAsync('account/logoff', null);\r\n\r\n if (response.redirected) {\r\n window.location.href = response.url;\r\n }\r\n\r\n if (response.status == 400) {\r\n const jsonResponse: IQueryResultBase = await response.json();\r\n let error: IError = jsonResponse.error;\r\n\r\n this.showToast(error.message, this.localizer('Close'), 'error', 8000);\r\n }\r\n }\r\n }\r\n\r\n private async _onOpenSignInDialogAsync(): Promise {\r\n await this._dialogService.openAsync(\r\n 'Shares',\r\n VoSignInDialog,\r\n {\r\n allowPasswordReset: false,\r\n allowRegister: false,\r\n loginProviders: []\r\n },\r\n {\r\n width: this._appContext.settings.dialogs.medium.width,\r\n height: this._appContext.settings.dialogs.medium.height,\r\n persistent: true\r\n }\r\n );\r\n }\r\n\r\n private _onClickLocale(): void {\r\n const currentUri = encodeURIComponent(`${window.location.pathname}${window.location.search}`);\r\n window.location.href = this.uriService.getAbsoluteUri(`${this._appContext.codeCulture}/locale?target=${currentUri}`);\r\n }\r\n\r\n private _accessIsAllowed(userPermissions: number, permissionFlags: Array | number): boolean {\r\n if (permissionFlags) {\r\n if (permissionFlags instanceof Array) {\r\n let result = true;\r\n\r\n for (let permissionFlag of permissionFlags) {\r\n result = result && EnumHelper.hasOneOfFlags(userPermissions, permissionFlag);\r\n }\r\n\r\n return result;\r\n }\r\n else {\r\n return EnumHelper.hasOneOfFlags(userPermissions, permissionFlags);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public itemsSource(): Array {\r\n const codeCulture = this._appContext.codeCulture;\r\n const administratorPortal = `${codeCulture}/administratorportal`;\r\n const profile = `${codeCulture}/profile`;\r\n\r\n const source: Array = [\r\n {\r\n icon: 'fa-light fa-plane',\r\n titleKey: 'Views.Shared.Explore',\r\n uri: `/${codeCulture}/explore`,\r\n permissionFlags: ProjectPermissions.List,\r\n requiredPlugins: ['virtualTours'],\r\n permissionType: 'project',\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-house',\r\n titleKey: 'Views.Shared.VideosHome',\r\n uri: `/${codeCulture}/video/explore`,\r\n permissionFlags: ProjectPermissions.List,\r\n requiredPlugins: ['videos'],\r\n permissionType: 'project',\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-plane',\r\n titleKey: 'Views.Shared.Explore',\r\n uri: `index.html`,\r\n permissionFlags: ProjectPermissions.List,\r\n permissionType: 'project',\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Standalone\r\n },\r\n {\r\n icon: 'fa-light fa-hard-drive',\r\n titleKey: 'Views.Shared.Drive',\r\n uri: `/${codeCulture}/drive`,\r\n permissionFlags: DrivePermissions.All,\r\n requiredPlugins: ['cms'],\r\n permissionType: 'drive',\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-pen-ruler',\r\n titleKey: 'Views.Shared.Project',\r\n uri: `/${codeCulture}/project`,\r\n permissionFlags: [ProjectPermissions.List, ProjectPermissions.Edit],\r\n requiredPlugins: ['virtualTours'],\r\n permissionType: 'project',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-file-video',\r\n titleKey: 'Views.Shared.Videos',\r\n uri: `/${codeCulture}/video/home/list`,\r\n requiredPlugins: ['videos'],\r\n permissionFlags: [ProjectPermissions.List, ProjectPermissions.Edit],\r\n permissionType: 'project',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-gauge',\r\n titleKey: 'Views.Shared.Administration',\r\n uri: null,\r\n permissionFlags: null,\r\n permissionType: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web,\r\n children: [\r\n {\r\n icon: 'fa-light fa-server',\r\n titleKey: 'Views.Shared.Platform',\r\n uri: `/${administratorPortal}/platform`,\r\n permissionFlags: [PlatformPermissions.List],\r\n permissionType: 'platform',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-address-book',\r\n titleKey: 'Views.Shared.Subscription',\r\n uri: `/${administratorPortal}/subscription`,\r\n permissionFlags: SubscriptionPermissions.All,\r\n permissionType: 'subscription',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-lock',\r\n titleKey: 'Views.Shared.Roles',\r\n uri: `/${administratorPortal}/roles`,\r\n permissionFlags: RolePermissions.All,\r\n permissionType: 'role',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-users',\r\n titleKey: 'Views.Shared.Groups',\r\n uri: `/${administratorPortal}/groups`,\r\n permissionFlags: GroupPermissions.Create | GroupPermissions.Edit | GroupPermissions.Delete,\r\n permissionType: 'group',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-user',\r\n titleKey: 'Views.Shared.Users',\r\n uri: `/${administratorPortal}/users`,\r\n permissionFlags: UserPermissions.Create | UserPermissions.Edit | UserPermissions.Delete,\r\n permissionType: 'user',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-id-card',\r\n titleKey: 'Views.Shared.IdentityProviders',\r\n uri: `/${administratorPortal}/identityproviders`,\r\n permissionFlags: IdentityProviderPermissions.All,\r\n permissionType: 'identityProvider',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-globe',\r\n titleKey: 'Views.Shared.DomainNameSystem',\r\n uri: `/${administratorPortal}/domainnamesystem`,\r\n permissionFlags: DomainNameSystemPermissions.All,\r\n permissionType: 'domainNameSystem',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-gears',\r\n titleKey: 'Views.Shared.GeneralSettings',\r\n uri: `/${administratorPortal}/generalsettings`,\r\n permissionFlags: SettingPermissions.General,\r\n permissionType: 'setting',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-hard-drive',\r\n titleKey: 'Views.Shared.DriveSettings',\r\n uri: `/${administratorPortal}/drivesettings`,\r\n permissionFlags: SettingPermissions.Drive,\r\n permissionType: 'setting',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-pen-ruler',\r\n titleKey: 'Views.Shared.Projects',\r\n uri: null,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web,\r\n children: [\r\n {\r\n icon: 'fa-light fa-puzzle-piece',\r\n titleKey: 'Views.Shared.Templates',\r\n uri: `/${administratorPortal}/projects/templates`,\r\n permissionFlags: ProjectPermissions.ListTemplate,\r\n permissionType: 'project',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-brackets-curly',\r\n titleKey: 'Views.Shared.JsonSchemas',\r\n uri: `/${administratorPortal}/projects/jsonschemas`,\r\n permissionFlags: SmartObjectPermissions.List,\r\n permissionType: 'smartObject',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n }\r\n ]\r\n },\r\n {\r\n icon: 'fa-light fa-industry',\r\n titleKey: 'Views.Shared.Workers',\r\n uri: null,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web,\r\n children: [\r\n {\r\n icon: 'fa-light fa-ballot',\r\n titleKey: 'Views.Shared.Tasks',\r\n uri: `/${administratorPortal}/workers/tasks`,\r\n permissionFlags: WorkerPermissions.List,\r\n permissionType: 'worker',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-industry',\r\n titleKey: 'Views.Shared.Workers',\r\n uri: `/${administratorPortal}/workers/workers`,\r\n permissionFlags: WorkerPermissions.List | WorkerPermissions.Create | WorkerPermissions.Edit,\r\n permissionType: 'worker',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web,\r\n }\r\n ]\r\n },\r\n {\r\n icon: 'fa-light fa-tag',\r\n titleKey: 'Views.Shared.Tags',\r\n uri: `/${administratorPortal}/tags`,\r\n permissionFlags: TagPermissions.Create | TagPermissions.Delete | TagPermissions.Update,\r\n permissionType: 'tag',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-key',\r\n titleKey: 'Views.Shared.LoginSettings',\r\n uri: `/${administratorPortal}/loginsettings`,\r\n permissionFlags: SettingPermissions.Login,\r\n permissionType: 'setting',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-shield',\r\n titleKey: 'Views.Shared.SecuritySettings',\r\n uri: `/${administratorPortal}/securitysettings`,\r\n permissionFlags: SettingPermissions.Security,\r\n permissionType: 'setting',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-book',\r\n titleKey: 'Views.Shared.AuditLogs',\r\n uri: `/${administratorPortal}/auditlogs`,\r\n permissionFlags: AuditLogPermissions.List,\r\n permissionType: 'auditLog',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-envelope',\r\n titleKey: 'Views.Shared.MailSettings',\r\n uri: `/${administratorPortal}/mailsettings`,\r\n permissionFlags: SettingPermissions.Mail,\r\n permissionType: 'setting',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-chart-mixed',\r\n titleKey: 'Views.Shared.Statistics',\r\n uri: null,\r\n permissionFlags: AnalyticPermissions.All,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web,\r\n children: [\r\n {\r\n icon: 'fa-light fa-chart-line',\r\n titleKey: 'Views.Shared.Data',\r\n //uri: `/${administratorPortal}/statistics/data`,\r\n uri: '',\r\n permissionFlags: [AnalyticPermissions.ShowLineDataIn | AnalyticPermissions.ShowLineDataOut],\r\n permissionType: 'analytic',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-chart-pie',\r\n titleKey: 'Views.Shared.Storage',\r\n //uri: `/${administratorPortal}/statistics/storage`,\r\n uri: '',\r\n permissionFlags: [AnalyticPermissions.ShowPieLogicalStorage | AnalyticPermissions.ShowPiePhysicalStorage],\r\n permissionType: 'analytic',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-file-chart-column',\r\n titleKey: 'Views.Shared.Files',\r\n //uri: `/${administratorPortal}/statistics/files`,\r\n uri: '',\r\n permissionFlags: [AnalyticPermissions.ShowLineLogicalFiles | AnalyticPermissions.ShowLinePhysicalFiles],\r\n permissionType: 'analytic',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-chart-line',\r\n titleKey: 'Views.Shared.Requests',\r\n uri: `/${administratorPortal}/statistics/requests`,\r\n permissionFlags: [AnalyticPermissions.ShowLineRequest | AnalyticPermissions.ShowLineRequestError],\r\n permissionType: 'analytic',\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n }\r\n ]\r\n }\r\n ],\r\n },\r\n {\r\n icon: 'fa-light fa-circle-user',\r\n titleKey: 'Views.Shared.MyAccount',\r\n uri: null,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web,\r\n children: [\r\n {\r\n icon: 'fa-light fa-address-card',\r\n titleKey: 'Views.Shared.PublicProfile',\r\n uri: `/${profile}/public/index/${this._appContext.user.id}`,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-user',\r\n titleKey: 'Views.Shared.PersonalInformations',\r\n uri: `/${profile}/profile`,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-user-lock',\r\n titleKey: 'Views.Shared.Authentification',\r\n uri: `/${profile}/profile/account`,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-key',\r\n titleKey: 'Views.Shared.Tokens',\r\n uri: `/${profile}/profile/tokens`,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-wrench',\r\n titleKey: 'Views.Shared.Preferences',\r\n uri: `/${profile}/profile/preferences`,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-envelope',\r\n titleKey: 'Views.Shared.Email',\r\n uri: `/${profile}/profile/email`,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-flask',\r\n titleKey: 'Views.Shared.ExperimentalFeatures',\r\n uri: `/${profile}/profile/experimentalfeatures`,\r\n permissionFlags: null,\r\n isSignInRequired: true,\r\n availableIn: ApplicationType.Web\r\n },\r\n ]\r\n },\r\n {\r\n icon: 'fa-light fa-circle-info',\r\n titleKey: 'Views.Shared.About',\r\n uri: null,\r\n permissionFlags: null,\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Both,\r\n children: [\r\n {\r\n icon: 'fa-light fa-cookie',\r\n titleKey: 'Views.Shared.Cookies',\r\n uri: `/${codeCulture}/public/about/cookies`,\r\n permissionFlags: null,\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-file-signature',\r\n titleKey: 'Views.Shared.TermsAndConditions',\r\n uri: `/${codeCulture}/public/about/termsandconditions`,\r\n permissionFlags: null,\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-box-open-full',\r\n titleKey: 'Views.Shared.Libraries',\r\n uri: `/${codeCulture}/public/about/libraries`,\r\n permissionFlags: null,\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Web\r\n },\r\n {\r\n icon: 'fa-light fa-file-shield',\r\n titleKey: 'Views.Shared.PrivacyPolicy',\r\n uri: 'https://www.sbs-interactive.fr/Politique-de-confidentialité',\r\n permissionFlags: null,\r\n isSignInRequired: false,\r\n availableIn: ApplicationType.Both\r\n },\r\n ]\r\n }\r\n ];\r\n\r\n const filterItem = (item: IDrawerItem) => {\r\n const isAvailableMenuItem = EnumHelper.hasOneOfFlags(\r\n item.availableIn,\r\n this._appContext.isStandalone\r\n ? ApplicationType.Standalone\r\n : ApplicationType.Web\r\n );\r\n\r\n if (!isAvailableMenuItem\r\n || (item.isSignInRequired\r\n && !this._appContext.user.isSignedIn)) {\r\n return false;\r\n }\r\n\r\n if (item.requiredPlugins) {\r\n if (!item.requiredPlugins.every(plugin => this._appContext.subscriptionPlugins[plugin]?.isEnabled == true)) {\r\n return false;\r\n }\r\n }\r\n\r\n if (item.permissionType) {\r\n let userPermission = this._appContext.user.permissions[item.permissionType];\r\n\r\n if (userPermission != null) {\r\n return this._accessIsAllowed(userPermission, item.permissionFlags);\r\n }\r\n }\r\n\r\n if (item.children) {\r\n item.children = item.children.filter(filterItem);\r\n return item.children.length > 0;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n return source.filter(filterItem);\r\n }\r\n\r\n public isMiniVariant: boolean = false;\r\n\r\n @Prop({ type: Boolean, required: false, default: true })\r\n public isOpened: boolean;\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInject(HttpClient)\r\n private readonly _httpClient: HttpClient;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n public uriService: IVisonUriService;\r\n\r\n @lazyInject(injectTypes.IDialogService)\r\n private readonly _dialogService: IDialogService;\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./FilePreview.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./FilePreview.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./FilePreview.vue?vue&type=template&id=41ace11a&scoped=true&\"\nimport script from \"./FilePreview.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./FilePreview.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./FilePreview.vue.scss?vue&type=style&index=0&id=41ace11a&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"41ace11a\",\n null\n \n)\n\nexport default component.exports","import { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBadge } from 'vuetify/lib/components/VBadge';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListGroup } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\nimport { VRow } from 'vuetify/lib/components/VGrid';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VNavigationDrawer,{staticClass:\"SbsDrawer\",attrs:{\"value\":_vm.isOpened,\"mini-variant\":_vm.isMiniVariant,\"expand-on-hover\":_vm._appContext.menuState == 3,\"clipped\":\"\",\"app\":\"\"},on:{\"input\":function($event){return _vm.$emit('update:is-opened', $event)},\"update:miniVariant\":function($event){_vm.isMiniVariant=$event},\"update:mini-variant\":function($event){_vm.isMiniVariant=$event}},scopedSlots:_vm._u([(_vm._appContext.user && _vm._appContext.user.isSignedIn)?{key:\"prepend\",fn:function(){return [(_vm._appContext.menuState != 3)?_c(VRow,{staticClass:\"flex-column py-4\",attrs:{\"no-gutters\":\"\",\"align\":\"center\"}},[_c(VAvatar,{attrs:{\"size\":96}},[_c(VImg,{attrs:{\"src\":_vm.uriService.getAbsoluteUriReactive((\"/\" + (_vm._appContext.codeCulture) + \"/asset/avatar/\" + (_vm._appContext.user.avatarGuid) + \"/large\")).result}})],1),_c('span',{staticClass:\"font-weight-regular mt-2\"},[_vm._v(_vm._s(_vm._appContext.user.displayName))])],1):_c(VListItem,[_c(VListItemIcon,[_c(VAvatar,{attrs:{\"size\":24}},[_c(VImg,{attrs:{\"src\":_vm.uriService.getAbsoluteUriReactive((\"/\" + (_vm._appContext.codeCulture) + \"/asset/avatar/\" + (_vm._appContext.user.avatarGuid) + \"/small\")).result}})],1)],1),_c(VListItemContent,[_c(VListItemTitle,{domProps:{\"textContent\":_vm._s(_vm._appContext.user.displayName)}})],1)],1)]},proxy:true}:null,{key:\"append\",fn:function(){return [_c(VRow,{staticClass:\"flex-column py-4\",attrs:{\"no-gutters\":\"\",\"align\":\"center\"}},[_c('div',{staticClass:\"overflow-y-hidden\",staticStyle:{\"height\":\"24px\"}},[_c(VIcon,{attrs:{\"small\":\"\",\"left\":\"\"}},[_vm._v(\"fa-light fa-globe\")]),(!_vm.isMiniVariant)?_c('a',{on:{\"click\":_vm._onClickLocale}},[_c('span',[_vm._v(_vm._s(_vm.localizer('JS.NativeCultureName')))])]):_vm._e()],1),_c('div',{staticClass:\"my-2 overflow-y-hidden\",staticStyle:{\"height\":\"24px\"}},[(_vm.isMiniVariant)?_c(VIcon,{attrs:{\"left\":\"\",\"small\":\"\"}},[_vm._v(\"fa-light fa-copyright\")]):_c('span',[_vm._v(_vm._s(_vm._appContext.information.copyright))])],1),_c('div',{staticClass:\"text-truncate\",staticStyle:{\"height\":\"24px\",\"max-width\":\"160px\"}},[_c(VIcon,{attrs:{\"left\":\"\",\"small\":\"\"}},[_vm._v(\"fa-light fa-code-branch\")]),(!_vm.isMiniVariant)?_c('span',{attrs:{\"title\":_vm._appContext.information.informationalVersion}},[_vm._v(_vm._s(_vm._appContext.information.informationalVersion))]):_vm._e()],1)])]},proxy:true}],null,true)},[_c(VList,{attrs:{\"dense\":\"\"}},[_vm._l((_vm.itemsSource()),function(drawerItem){return [(_vm.$root.isSpa && !drawerItem.children)?_c(VListItem,{key:drawerItem.titleKey,attrs:{\"href\":drawerItem.uri}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(drawerItem.icon))])],1),_c(VListItemContent,[_c(VListItemTitle,[(drawerItem.uri.length == 0)?[_c(VBadge,{staticClass:\"mt-0\",attrs:{\"color\":\"primary\",\"content\":_vm.localizer('Soon'),\"inline\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.localizer(drawerItem.titleKey))+\" \")])]:[_vm._v(\" \"+_vm._s(_vm.localizer(drawerItem.titleKey))+\" \")]],2)],1)],1):(!drawerItem.children)?_c(VListItem,{key:drawerItem.titleKey,attrs:{\"href\":drawerItem.uri && _vm.uriService.getAbsoluteUri(drawerItem.uri)}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(drawerItem.icon))])],1),_c(VListItemContent,[_c(VListItemTitle,[(drawerItem.uri.length == 0)?[_c(VBadge,{staticClass:\"mt-0\",attrs:{\"color\":\"primary\",\"content\":_vm.localizer('Soon'),\"inline\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.localizer(drawerItem.titleKey))+\" \")])]:[_vm._v(\" \"+_vm._s(_vm.localizer(drawerItem.titleKey))+\" \")]],2)],1)],1):_c(VListGroup,{key:drawerItem.titleKey,attrs:{\"append-icon\":\"fa-light fa-angle-down\"},scopedSlots:_vm._u([{key:\"prependIcon\",fn:function(){return [_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(drawerItem.icon))])]},proxy:true},{key:\"activator\",fn:function(){return [_c(VListItemContent,[_c(VListItemTitle,{domProps:{\"textContent\":_vm._s(_vm.localizer(drawerItem.titleKey))}})],1)]},proxy:true}],null,true)},[_c(VDivider),_vm._l((drawerItem.children),function(drawerSubItem){return [(!drawerSubItem.children)?_c(VListItem,{key:drawerSubItem.titleKey,attrs:{\"href\":drawerSubItem.uri && _vm.uriService.getAbsoluteUri(drawerSubItem.uri)}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(drawerSubItem.icon))])],1),_c(VListItemContent,[_c(VListItemTitle,[(drawerSubItem.uri.length == 0)?[_c(VBadge,{staticClass:\"mt-0\",attrs:{\"color\":\"primary\",\"content\":_vm.localizer('Soon'),\"inline\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.localizer(drawerSubItem.titleKey))+\" \")])]:[_vm._v(\" \"+_vm._s(_vm.localizer(drawerSubItem.titleKey))+\" \")]],2)],1)],1):_c(VListGroup,{key:drawerSubItem.titleKey,attrs:{\"sub-group\":\"\",\"prepend-icon\":\"fa-light fa-angle-down\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c(VListItemContent,[_c(VListItemTitle,{domProps:{\"textContent\":_vm._s(_vm.localizer(drawerSubItem.titleKey))}})],1)]},proxy:true}],null,true)},_vm._l((drawerSubItem.children),function(item){return _c(VListItem,{key:item.titleKey,attrs:{\"href\":item.uri && _vm.uriService.getAbsoluteUri(item.uri)}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(item.icon))])],1),_c(VListItemContent,[_c(VListItemTitle,[(item.uri.length == 0)?[_c(VBadge,{staticClass:\"mt-0\",attrs:{\"color\":\"primary\",\"content\":_vm.localizer('Soon'),\"inline\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.localizer(item.titleKey))+\" \")])]:[_vm._v(\" \"+_vm._s(_vm.localizer(item.titleKey))+\" \")]],2)],1)],1)}),1)]}),_c(VDivider)],2)]}),(_vm.$root.isSpa)?[(_vm._appContext.user && _vm._appContext.user.isSignedIn)?_c(VListItem,{on:{\"click\":function($event){$event.preventDefault();return _vm._onLogOffAsync.apply(null, arguments)}}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(\"fa-light fa-arrow-right-from-bracket\")])],1),_c(VListItemContent,[_c(VListItemTitle,[_vm._v(_vm._s(_vm.localizer('Views.Shared.LogOut')))])],1)],1):_c(VListItem,{on:{\"click\":function($event){$event.preventDefault();return _vm._onOpenSignInDialogAsync.apply(null, arguments)}}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(\"fa-light fa-arrow-right-to-bracket\")])],1),_c(VListItemContent,[_c(VListItemTitle,[_vm._v(_vm._s(_vm.localizer('Views.Shared.LogIn')))])],1)],1)]:[(_vm._appContext.user && _vm._appContext.user.isSignedIn)?_c(VListItem,{attrs:{\"href\":_vm.uriService.getAbsoluteUri((\"/\" + (_vm._appContext.codeCulture) + \"/account/logoff\"))},on:{\"click\":function($event){$event.preventDefault();return _vm._onLogOffAsync.apply(null, arguments)}}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(\"fa-light fa-arrow-right-from-bracket\")])],1),_c(VListItemContent,[_c(VListItemTitle,[_vm._v(_vm._s(_vm.localizer('Views.Shared.LogOut')))])],1)],1):_c(VListItem,{attrs:{\"href\":_vm.uriService.getAbsoluteUri((\"/\" + (_vm._appContext.codeCulture) + \"/account/login\"))}},[_c(VListItemIcon,[_c(VIcon,{attrs:{\"small\":\"\"}},[_vm._v(\"fa-light fa-arrow-right-to-bracket\")])],1),_c(VListItemContent,[_c(VListItemTitle,[_vm._v(_vm._s(_vm.localizer('Views.Shared.LogIn')))])],1)],1)]],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./SbsDrawer.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./SbsDrawer.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SbsDrawer.vue?vue&type=template&id=4e89f5c7&scoped=true&\"\nimport script from \"./SbsDrawer.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./SbsDrawer.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./SbsDrawer.vue.scss?vue&type=style&index=0&id=4e89f5c7&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4e89f5c7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"wrappanel\",style:(_vm.computedStyle)},[_vm._l((_vm.itemSource),function(item){return [_vm._t(\"default\",null,{\"item\":item})]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { HorizontalAlignment, Orientation, VerticalAlignment } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Prop, Vue } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'x-wrap-panel'\r\n})\r\nexport default class WrapPanel extends Vue {\r\n @Prop({ type: Array, required: false, default: null })\r\n public itemSource: Array;\r\n @Prop({ type: Number, required: false, default: HorizontalAlignment.Left })\r\n public horizontalContentAlignment: HorizontalAlignment;\r\n @Prop({ type: Number, required: false, default: VerticalAlignment.Top })\r\n public verticalContentAlignment: VerticalAlignment;\r\n @Prop({ type: Number, required: false, default: Orientation.Horizontal })\r\n public orientation: Orientation;\r\n\r\n public get computedStyle(): object {\r\n let verticalContentAlignmentValue = 'flex-start';\r\n let horizontalContentAlignmentValue = 'flex-start';\r\n let orientationValue = 'row';\r\n\r\n if (this.verticalContentAlignment == VerticalAlignment.Bottom) {\r\n verticalContentAlignmentValue = 'flex-end';\r\n } else if (this.verticalContentAlignment == VerticalAlignment.Center) {\r\n verticalContentAlignmentValue = 'center';\r\n } else if (this.verticalContentAlignment == VerticalAlignment.Stretch) {\r\n verticalContentAlignmentValue = 'stretch';\r\n }\r\n\r\n if (this.horizontalContentAlignment == HorizontalAlignment.Right) {\r\n horizontalContentAlignmentValue = 'flex-end';\r\n } else if (this.horizontalContentAlignment == HorizontalAlignment.Center) {\r\n horizontalContentAlignmentValue = 'center';\r\n } else if (this.horizontalContentAlignment == HorizontalAlignment.Stretch) {\r\n horizontalContentAlignmentValue = 'stretch';\r\n }\r\n\r\n if (this.orientation == Orientation.Vertical) {\r\n orientationValue = 'column';\r\n }\r\n\r\n return {\r\n 'align-content': verticalContentAlignmentValue,\r\n 'justify-content': horizontalContentAlignmentValue,\r\n 'flex-direction': orientationValue\r\n };\r\n }\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./WrapPanel.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./WrapPanel.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./WrapPanel.vue?vue&type=template&id=5bdbb511&scoped=true&\"\nimport script from \"./WrapPanel.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./WrapPanel.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./WrapPanel.vue.scss?vue&type=style&index=0&id=5bdbb511&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5bdbb511\",\n null\n \n)\n\nexport default component.exports","import XGrid from 'Framework/Components/Controls/XGrid.vue';\r\nimport GridItem from 'Framework/Components/GridItem.vue';\r\nimport { UIElement } from 'Framework/Components/UIElement';\r\nimport { IRouter } from 'App/Areas/Shares/IRouter';\r\nimport Tagger from 'App/Areas/Shares/Tagger.vue';\r\nimport DefaultDialog from 'App/Services/DialogService/Components/DefaultDialog.vue';\r\nimport XMediaPlayer from 'Framework/Components/Controls/XMediaPlayer.vue';\r\nimport Vue from 'vue';\r\nimport UploadFileEntry from 'App/Areas/Drive/DataTemplates/UploadFileEntry.vue';\r\nimport PanoramaPreview from 'App/Areas/Explore/Components/PanoramaPreview.vue';\r\nimport VoPanoramaBreadcrumb from 'App/Areas/Explore/Components/VoPanoramaBreadcrumb.vue';\r\nimport Compass from 'App/Areas/Project/Components/Compass.vue';\r\nimport CookieConsent from 'App/Areas/Public/Components/CookieConsent.vue';\r\nimport ExploreMap from 'App/Areas/Shares/ExploreMap.vue';\r\nimport FilePreview from 'App/Areas/Shares/FilePreview.vue';\r\nimport SbsDrawer from 'App/Areas/Shares/SbsDrawer.vue';\r\nimport ItemPresenter from 'Framework/Components/Controls/ItemPresenter.vue';\r\nimport Toggle from 'Framework/Components/Controls/Toggle.vue';\r\nimport WrapPanel from 'Framework/Components/Controls/WrapPanel.vue';\r\n\r\nimport '@/scss/CustomHotspotsIcon.scss';\r\nimport '@/scss/dockspawn-ts.override.scss';\r\nimport '@/scss/main.scss';\r\nimport '@/scss/vuetify.override.scss';\r\n\r\ndeclare module 'vue/types/vue' {\r\n interface Vue {\r\n $router: IRouter;\r\n }\r\n}\r\n\r\nObject.defineProperty(Vue.prototype, '$router', {\r\n get() { return this.$root }\r\n})\r\n\r\nexport default {\r\n components: {\r\n UIElement,\r\n XGrid,\r\n GridItem,\r\n DefaultDialog,\r\n XMediaPlayer,\r\n Tagger,\r\n CookieConsent,\r\n WrapPanel,\r\n ItemPresenter,\r\n PanoramaPreview,\r\n Toggle,\r\n ExploreMap,\r\n UploadFileEntry,\r\n FilePreview,\r\n VoPanoramaBreadcrumb,\r\n Compass,\r\n SbsDrawer,\r\n },\r\n install: function (vue, options) {\r\n for (const componentKey in this.components) {\r\n const component = this.components[componentKey];\r\n\r\n if (component.extendOptions) {\r\n Vue.component(component.extendOptions.name, component);\r\n } else {\r\n Vue.component(component.name, component);\r\n }\r\n }\r\n }\r\n}\r\n","export class Transform {\r\n public constructor(\r\n public rotation: { x: number, y: number, z: number, w: number },\r\n public translation: { x: number, y: number, z: number }\r\n ) {}\r\n}\r\n\r\nexport class PointCloud {\r\n public constructor(\r\n public global: { x: number, y: number, z: number },\r\n public transform: Transform\r\n ) {}\r\n}\r\n\r\nexport interface IScanPosition {\r\n tx: number;\r\n ty: number;\r\n tz: number;\r\n}\r\n\r\nexport interface IScanOrientation {\r\n rx: number;\r\n ry: number;\r\n rz: number;\r\n theta: number;\r\n}\r\n\r\nexport class ScanInfo {\r\n private constructor(\r\n rows: number,\r\n columns: number,\r\n scanPosition: IScanPosition,\r\n scanOrientation: IScanOrientation\r\n ) {\r\n this.rows = rows;\r\n this.columns = columns;\r\n this.totalPoints = this.rows * this.columns;\r\n this.scanPosition = scanPosition;\r\n this.scanOrientation = scanOrientation;\r\n\r\n this.panoramaWidth = this.columns;\r\n this.panoramaHeight = this.panoramaWidth / 2;\r\n\r\n this.widthRatio = (this.panoramaWidth - 1) / (Math.PI * 2);\r\n this.heightRatio = (this.panoramaHeight - 1) / Math.PI;\r\n }\r\n\r\n public static createfromJson(jsonValue: JSON): ScanInfo {\r\n const si = jsonValue as unknown as ScanInfo;\r\n\r\n return new ScanInfo(\r\n si.rows,\r\n si.columns,\r\n si.scanPosition,\r\n si.scanOrientation\r\n );\r\n }\r\n\r\n public readonly rows: number;\r\n public readonly columns: number;\r\n public readonly totalPoints: number;\r\n\r\n public readonly panoramaWidth: number;\r\n public readonly panoramaHeight: number;\r\n\r\n public readonly widthRatio: number;\r\n public readonly heightRatio: number;\r\n\r\n public readonly scanPosition: IScanPosition;\r\n public readonly scanOrientation: IScanOrientation;\r\n}\r\n\r\nexport class BinaryHeader {\r\n public constructor(\r\n public version: number,\r\n public sizeOfHeader: number,\r\n public scanInfo: ScanInfo\r\n ) {}\r\n\r\n public get headerOffset(): number {\r\n return BinaryHeader.fileVersionByteSize\r\n + BinaryHeader.sizeOfHeaderByteSize\r\n + this.sizeOfHeader;\r\n }\r\n\r\n public static readonly fileVersionByteSize: number = 4\r\n public static readonly sizeOfHeaderByteSize: number = 4;\r\n}","import { Matrix, Vector3 } from '@babylonjs/core/Maths/math.vector';\r\nimport { BinaryHeader, PointCloud, ScanInfo, Transform } from 'Api/Dto/PointCloud';\r\n\r\nexport class BinaryScanReader {\r\n public constructor(buffer: ArrayBuffer) {\r\n this._buffer = new DataView(buffer);\r\n this._header = this._readHeader();\r\n }\r\n\r\n public readValueAt(phi: number, theta: number): PointCloud {\r\n //compute pixel position from spherical coordinates\r\n const row: number = Math.round((Math.PI / 2 - phi) * this._header.scanInfo.heightRatio);\r\n const col: number = Math.round((Math.PI - theta) * this._header.scanInfo.widthRatio);\r\n\r\n //compute offset position in binary buffer\r\n const offset: number = (row * this._header.scanInfo.columns + col) * BinaryScanReader._sizeOfInt32;\r\n this._bufferPosition = this._header.headerOffset + offset;\r\n\r\n let radius = this._readInt32();\r\n\r\n if (radius == 0) {\r\n return null;\r\n }\r\n\r\n //convert micrometers to meters\r\n radius /= 1_000_000;\r\n\r\n //convert spherical to cartesian\r\n let localPoint: Vector3 = new Vector3(\r\n radius * Math.cos(phi) * Math.cos(theta),\r\n radius * Math.cos(phi) * Math.sin(theta),\r\n radius * Math.sin(phi)\r\n );\r\n\r\n let axis: Vector3 = new Vector3(\r\n this._header.scanInfo.scanOrientation.rx,\r\n this._header.scanInfo.scanOrientation.ry,\r\n this._header.scanInfo.scanOrientation.rz\r\n );\r\n\r\n //apply transformations\r\n let globalRotation = Matrix.RotationAxis(axis, this._header.scanInfo.scanOrientation.theta);\r\n\r\n let globalTranslation = Matrix.Translation(\r\n this._header.scanInfo.scanPosition.tx,\r\n this._header.scanInfo.scanPosition.ty,\r\n this._header.scanInfo.scanPosition.tz\r\n );\r\n\r\n localPoint = Vector3.TransformCoordinates(localPoint, globalRotation);\r\n localPoint = Vector3.TransformCoordinates(localPoint, globalTranslation);\r\n\r\n return new PointCloud(\r\n {\r\n x: localPoint.x,\r\n y: localPoint.y,\r\n z: localPoint.z\r\n },\r\n new Transform(\r\n {\r\n x: axis.x,\r\n y: axis.y,\r\n z: axis.z,\r\n w: this._header.scanInfo.scanOrientation.theta\r\n },\r\n {\r\n x: this._header.scanInfo.scanPosition.tx,\r\n y: this._header.scanInfo.scanPosition.ty,\r\n z: this._header.scanInfo.scanPosition.tz\r\n }\r\n )\r\n );\r\n }\r\n\r\n private _readHeader(): BinaryHeader {\r\n const fileVersion: number = this._readInt32();\r\n const sizeOfHeader: number = this._readInt32();\r\n const rawHeader: Int8Array = this._readBytes(sizeOfHeader);\r\n const jsonHeader: JSON = this._deserializeAsJson(rawHeader);\r\n\r\n const header: ScanInfo = ScanInfo.createfromJson(jsonHeader);\r\n\r\n return new BinaryHeader(\r\n fileVersion,\r\n sizeOfHeader,\r\n header\r\n );\r\n }\r\n\r\n private _readInt32(): number {\r\n let value = this._buffer.getInt32(this._bufferPosition, true);\r\n this._bufferPosition += BinaryScanReader._sizeOfInt32;\r\n\r\n return value;\r\n }\r\n\r\n private _readBytes(length: number): Int8Array {\r\n let endOfPosition = this._bufferPosition + length;\r\n\r\n let bytes = new Int8Array(this._buffer.buffer.slice(this._bufferPosition, endOfPosition));\r\n this._bufferPosition = endOfPosition;\r\n\r\n return bytes\r\n }\r\n\r\n private _convertBytesToString(bytes: Int8Array): string {\r\n return String.fromCharCode(...bytes);\r\n }\r\n\r\n private _deserializeAsJson(rawJson: Int8Array): JSON {\r\n const rawJsonStringified: string = this._convertBytesToString(rawJson);\r\n\r\n const toCamelCasePropertyName = (key: string, value: any) => {\r\n if (value && typeof value === 'object')\r\n for (let k in value) {\r\n if (/^[A-Z]/.test(k) && Object.hasOwnProperty.call(value, k)) {\r\n value[k.charAt(0).toLowerCase() + k.substring(1)] = value[k];\r\n delete value[k];\r\n }\r\n }\r\n\r\n return value;\r\n };\r\n\r\n return JSON.parse(rawJsonStringified, toCamelCasePropertyName);\r\n }\r\n\r\n private _bufferPosition: number = 0;\r\n\r\n private static readonly _sizeOfInt32: number = 4;\r\n private readonly _header: BinaryHeader;\r\n private readonly _buffer: DataView;\r\n}","import { AssetItemType } from 'Api/Contracts/Dtos';\r\nimport { PointCloud } from 'Api/Dto/PointCloud';\r\nimport { IQueryResultBase, NotFoundException } from 'Api/Dto/QueryResult';\r\nimport { AssetItem } from 'Api/ExploreService';\r\nimport { Routes } from 'Api/Routes';\r\nimport { BinaryScanReader } from 'App/Areas/Standalone/BinaryScanReader';\r\nimport { FileStorageHelper } from 'App/Areas/Standalone/FileStorageHelper';\r\nimport { JSONPath } from 'jsonpath-plus';\r\nimport { String } from 'typescript-string-operations';\r\n\r\nexport class FetchFileReader {\r\n constructor(storage?: FileStorageHelper) {\r\n this._originalFetch = window.fetch;\r\n this._originalFetchBind = this._originalFetch.bind(window);\r\n this._persistentFolder = storage || new FileStorageHelper(LocalFileSystem.PERSISTENT);\r\n }\r\n\r\n public async polyfillFetchAsync(): Promise {\r\n await this._persistentFolder.initializeAsync();\r\n window.fetch = this._fetchFileReader.bind(this);\r\n }\r\n\r\n public unpolyfillFetch(): void {\r\n window.fetch = this._originalFetch;\r\n }\r\n\r\n private async _fetchFileReader(input: RequestInfo, init?: RequestInit): Promise {\r\n let isFileScheme = false;\r\n let url = '';\r\n\r\n if (input instanceof Request) {\r\n url = input.url;\r\n }\r\n else {\r\n url = input;\r\n }\r\n\r\n isFileScheme = url.startsWith('file:///')\r\n || url.startsWith('cdvfile://')\r\n || url.startsWith('filesystem:');\r\n\r\n const isScanApi: boolean = isFileScheme\r\n && url.includes('/readscanat/');\r\n\r\n try {\r\n if (isScanApi) {\r\n return await this.fetchScanApiAsync(url, init);\r\n }\r\n else if (isFileScheme) {\r\n url = url.replace('filesystem://', 'filesystem:');\r\n\r\n let fileExists = await this._persistentFolder.isFileExistsAsync(url);\r\n if (fileExists) {\r\n console.info(`File found on filesystem : ${url}`);\r\n\r\n let mode: 'string' | 'object' | 'Array' = 'string';\r\n if ((init?.headers as any)?.get('Accept') == 'application/octet-stream') {\r\n mode = 'Array';\r\n }\r\n\r\n let content = await this._persistentFolder.readFileAsync(url, mode);\r\n\r\n return new Response(content, init);\r\n }\r\n }\r\n }\r\n catch (error) {\r\n if (error instanceof Error) {\r\n let body: BodyInit = JSON.stringify({\r\n error: {\r\n message: error.message\r\n }\r\n } as IQueryResultBase);\r\n\r\n let response: ResponseInit = init;\r\n\r\n if (error instanceof NotFoundException) {\r\n response.status = 404;\r\n }\r\n else {\r\n response.status = 400;\r\n }\r\n\r\n return new Response(body, response);\r\n }\r\n }\r\n\r\n return await this._originalFetchBind(input, init);\r\n }\r\n\r\n private async fetchScanApiAsync(url: string, init: RequestInit): Promise {\r\n const headers = new Headers(init.headers);\r\n const culture = headers.get('Accept-Language').toLowerCase();\r\n\r\n //url should be formatted as:\r\n //filesystem:file:///persistent/{subscriptionId:int}/{projectId:int}/api/projects/{projectId:int}/assets/{assetId:int}/readscanat/{theta:float}/{phi:float}\r\n const indexOfFirstSegment: number = url.search(/\\/\\d/) + 1;\r\n\r\n const [\r\n subscriptionId,\r\n , //projectId\r\n , //api\r\n , //projects\r\n projectId,\r\n , //assets\r\n assetItemId,\r\n , //readscanat\r\n theta,\r\n phi\r\n ] = url.slice(indexOfFirstSegment).split('/').map(Number);\r\n\r\n const projectUrl: string = String.Format(Routes.Api.Projects.Published, projectId);\r\n const projectFilePath: string\r\n = `${cordova.file.dataDirectory}${subscriptionId}/${projectId}/${projectUrl}`;\r\n\r\n const pathExpression: string\r\n = `$.datasources[?(@.name==\"assets\" && @.type==\"${nameof(Array)}\" && @.of==\"${nameof(AssetItem)}\")].value[?(@.assetItemId==${assetItemId} && @.type==${AssetItemType.PanoramaVersion})].file.guid`;\r\n\r\n await this._ensureFileExistsAsync(projectFilePath);\r\n\r\n const projectJson: JSON = await this._persistentFolder.readFileAsync(\r\n projectFilePath,\r\n 'object'\r\n );\r\n\r\n const fileGuidOfAsset: string = JSONPath>({\r\n json: projectJson,\r\n path: pathExpression\r\n })[0] ?? '';\r\n\r\n const binaryFilePath: string = `${cordova.file.dataDirectory}${subscriptionId}/${projectId}/${culture}/asset/panorama/${fileGuidOfAsset}/${fileGuidOfAsset}`;\r\n\r\n await this._ensureFileExistsAsync(binaryFilePath);\r\n\r\n let content: ArrayBuffer = await this._persistentFolder.readFileAsync(\r\n binaryFilePath,\r\n 'Array'\r\n );\r\n\r\n const binaryReader = new BinaryScanReader(content);\r\n\r\n let point: PointCloud = binaryReader.readValueAt(phi, theta);\r\n\r\n const jsonResponse: string = JSON.stringify(point);\r\n\r\n return new Response(jsonResponse, init);\r\n }\r\n\r\n private async _ensureFileExistsAsync(url: string): Promise {\r\n if (!await this._persistentFolder.isFileExistsAsync(url)) {\r\n throw new NotFoundException(url);\r\n }\r\n }\r\n\r\n private readonly _originalFetch: (input: RequestInfo, init?: RequestInit) => Promise = null;\r\n private readonly _originalFetchBind: (input: RequestInfo, init?: RequestInit) => Promise = null;\r\n private readonly _persistentFolder: FileStorageHelper = null;\r\n}\r\n\r\n","import { MenuStateType } from 'Api/Enums/MenuStateType';\r\nimport { FetchFileReader } from 'App/Areas/Standalone/FetchFileReader';\r\nimport { FileStorageHelper } from 'App/Areas/Standalone/FileStorageHelper';\r\n\r\ndeclare global {\r\n const standaloneWrapper: StandaloneWrapper;\r\n const cordova: any;\r\n\r\n interface Entry {\r\n fileHelper: FileStorageHelper;\r\n }\r\n}\r\n\r\nexport class StandaloneWrapper {\r\n public initializeAsync(): Promise {\r\n return new Promise((resolve, reject) => {\r\n document.addEventListener('deviceready', async (e) => {\r\n try {\r\n await this._onDeviceReadyAsync(e);\r\n resolve();\r\n }\r\n catch (error) {\r\n reject(error as Error);\r\n }\r\n }, false);\r\n });\r\n }\r\n\r\n public baseUriResolver() {\r\n return `${cordova.file.dataDirectory}${this._appContext.subUriPath}`\r\n }\r\n\r\n public appContextBuilder(appContext: any): void {\r\n this._appContext = appContext;\r\n\r\n appContext.subUriPath = '';\r\n appContext.baseUri = this.baseUriResolver.bind(this);\r\n appContext.codeCulture = 'fr-fr';\r\n\r\n appContext.homePage = 'index.html';\r\n appContext.menuState = MenuStateType.Closed;\r\n appContext.isMobile = true;\r\n appContext.theme = 'dark-orange';\r\n\r\n appContext.isDedicatedPlatform = false;\r\n }\r\n\r\n private async _onDeviceReadyAsync(ev: Event): Promise {\r\n document.addEventListener('pause', (e) => this._onPause(e), false);\r\n document.addEventListener('resume', (e) => this._onResume(e), false);\r\n\r\n await this._filePluginIsReadyAsync();\r\n\r\n if (!await this.hasStoragePermissionAsync()) {\r\n await this._requestStoragePermissionAsync();\r\n }\r\n\r\n this._persistentFolder = new FileStorageHelper(LocalFileSystem.PERSISTENT);\r\n this._temporaryFolder = new FileStorageHelper(LocalFileSystem.TEMPORARY);\r\n this._fetchFileReader = new FetchFileReader(this._persistentFolder);\r\n\r\n await this._persistentFolder.initializeAsync();\r\n await this._temporaryFolder.initializeAsync();\r\n await this._fetchFileReader.polyfillFetchAsync();\r\n\r\n await this._copyDefaultFilesAsync();\r\n }\r\n\r\n private async _copyDefaultFilesAsync(): Promise {\r\n await Promise.all([\r\n this._copyBundleFileToStorageFileAsync('/i18n/en-us.json', 'en-us/local/i18n'),\r\n this._copyBundleFileToStorageFileAsync('/i18n/fr-fr.json', 'fr-fr/local/i18n'),\r\n this._copyBundleFileToStorageFileAsync('/assets/Logo-vison.svg', 'assets/Logo-Vison.svg'),\r\n this._copyBundleFileToStorageFileAsync('/assets/no-thumb.jpg', 'fr-fr/asset/preview/00000000-0000-0000-0000-000000000000'),\r\n this._copyBundleFileToStorageFileAsync('/assets/no-thumb.jpg', 'fr-fr/asset/avatar/00000000-0000-0000-0000-000000000000/small'),\r\n this._copyBundleFileToStorageFileAsync('/assets/no-thumb.jpg', 'fr-fr/asset/avatar/00000000-0000-0000-0000-000000000000/medium'),\r\n this._copyBundleFileToStorageFileAsync('/assets/no-thumb.jpg', 'fr-fr/asset/avatar/00000000-0000-0000-0000-000000000000/large')\r\n ]);\r\n }\r\n\r\n private async _copyBundleFileToStorageFileAsync(source: string, destination: string): Promise {\r\n const sourceFile = await fetch(`${cordova.file.applicationDirectory}${source}`);\r\n\r\n let indexOfSlash = destination.lastIndexOf('/');\r\n let assetDirectory: DirectoryEntry = null;\r\n if (indexOfSlash > 0) {\r\n let directoryPath = destination.slice(0, indexOfSlash);\r\n assetDirectory = await this._persistentFolder.createDirectoryAsync(this._persistentFolder.Root, directoryPath);\r\n }\r\n\r\n let destinationFile = await this._persistentFolder.createFileAsync(assetDirectory, destination.slice(indexOfSlash + 1));\r\n\r\n await FileStorageHelper.writeFileAsync(destinationFile, await sourceFile.blob());\r\n }\r\n\r\n private _onResume(e: Event): void {\r\n // throw new Error('Method not implemented.');\r\n }\r\n\r\n private _onPause(e: Event): void {\r\n //throw new Error('Method not implemented.');\r\n }\r\n\r\n private _filePluginIsReadyAsync(): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (cordova.platformId == 'android') {\r\n resolve();\r\n }\r\n else if ((window as any).isFilePluginReadyRaised) {\r\n console.log('File plugin is ready');\r\n resolve();\r\n }\r\n else {\r\n window.addEventListener('filePluginIsReady', (e) => {\r\n console.log('File plugin is ready');\r\n resolve();\r\n }, false);\r\n }\r\n });\r\n\r\n }\r\n\r\n public hasStoragePermissionAsync(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const permissions = cordova.plugins.permissions;\r\n\r\n permissions.checkPermission(\r\n permissions.WRITE_EXTERNAL_STORAGE,\r\n (status) => resolve(status.hasPermission),\r\n reject\r\n );\r\n });\r\n }\r\n\r\n private _requestStoragePermissionAsync(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const permissions = cordova.plugins.permissions;\r\n\r\n permissions.requestPermissions(\r\n [permissions.READ_EXTERNAL_STORAGE, permissions.WRITE_EXTERNAL_STORAGE],\r\n resolve,\r\n reject\r\n );\r\n });\r\n }\r\n\r\n public get persistentFolder(): FileStorageHelper {\r\n return this._persistentFolder;\r\n }\r\n\r\n public get temporaryFolder(): FileStorageHelper {\r\n return this._temporaryFolder;\r\n }\r\n\r\n public get fetchFileReader(): FetchFileReader {\r\n return this._fetchFileReader;\r\n }\r\n\r\n private _appContext: any = null;\r\n private _persistentFolder: FileStorageHelper = null;\r\n private _temporaryFolder: FileStorageHelper = null;\r\n private _fetchFileReader: FetchFileReader = null;\r\n}\r\n","import { Localizer } from 'dock-spawn-ts/lib/js/i18n/Localizer';\r\nimport { PluginObject, VueConstructor } from 'vue';\r\n\r\nexport interface DockSpawnPluginOptions {\r\n localizer?: Parameters[0];\r\n}\r\n\r\nexport const dockSpawnPlugin: PluginObject = {\r\n install: function (_Vue: VueConstructor, options?: DockSpawnPluginOptions): void {\r\n if (options?.localizer) {\r\n Localizer.configure(options.localizer);\r\n }\r\n }\r\n};\r\n\r\n","//load polyfills before all\r\nimport 'core-js/stable';\r\nimport 'regenerator-runtime/runtime';\r\nimport 'pepjs';\r\n//end of polyfill\r\nimport ts from 'ts-nameof';\r\nimport { serviceProvider } from 'App/Inversify.config';\r\n\r\nimport '@fortawesome/fontawesome-pro/css/all.css';\r\n\r\nimport '@fortawesome/fontawesome-pro/sprites/brands.svg';\r\nimport '@fortawesome/fontawesome-pro/sprites/duotone.svg';\r\nimport '@fortawesome/fontawesome-pro/sprites/light.svg';\r\nimport '@fortawesome/fontawesome-pro/sprites/regular.svg';\r\nimport '@fortawesome/fontawesome-pro/sprites/solid.svg';\r\nimport '@fortawesome/fontawesome-pro/sprites/thin.svg';\r\n\r\nimport Vue from 'vue';\r\nimport vuetify from 'App/Plugins/vuetify';\r\nimport Sbs from 'App/Plugins/sbs';\r\nimport { defineCustomElements } from '@peculiar/certificates-viewer/loader';\r\nimport { debounce, throttle } from 'lodash';\r\nimport 'moment/locale/fr';\r\n\r\nimport { LocalizerService } from 'Api/LocalizerService';\r\nimport { BasePage } from 'App/Areas/BasePage';\r\nimport { StandaloneWrapper } from 'App/Areas/Standalone/StandaloneWrapper';\r\n\r\ndeclare module 'vue/types/vue' {\r\n interface Vue {\r\n localizer: (key: string, ...params: Array) => string;\r\n $debounce(func: Function, wait: number, options?: { leading: boolean, trailing: boolean, maxWait: number });\r\n $throttle(func: Function, wait: number, options?: { leading: boolean, trailing: boolean });\r\n }\r\n}\r\nconst baseElement = document.getElementById('base') as HTMLBaseElement;\r\n\r\nif (baseElement) {\r\n __webpack_public_path__ = baseElement.href;\r\n}\r\n\r\nimport OpenSeadragon from 'openseadragon';\r\nimport { dockSpawnPlugin } from 'App/Plugins/dockspawn';\r\n\r\ndeclare module 'openseadragon' {\r\n interface Viewport {\r\n viewer: OpenSeadragon.Viewer;\r\n viewportToSvgCoordinates(point: OpenSeadragon.Point): OpenSeadragon.Point;\r\n svgToViewportCoordinates(point: OpenSeadragon.Point, svg: any): OpenSeadragon.Point;\r\n }\r\n}\r\n\r\nOpenSeadragon.Viewport.prototype.viewportToSvgCoordinates = function (point: OpenSeadragon.Point): OpenSeadragon.Point {\r\n const source: OpenSeadragon.TileSource = this.viewer.world.getItemAt(0).source;\r\n const dimensions: OpenSeadragon.Point = source.dimensions;\r\n const width = dimensions.x;\r\n const height = dimensions.y;\r\n\r\n point = this.viewportToImageCoordinates(point);\r\n let pX = point.x / width * this.viewer.container.clientWidth;\r\n let pY = point.y / height * this.viewer.container.clientWidth * (height / width);\r\n\r\n return new OpenSeadragon.Point(pX, pY);\r\n};\r\n\r\nOpenSeadragon.Viewport.prototype.svgToViewportCoordinates = function (point: OpenSeadragon.Point, svg: any): OpenSeadragon.Point {\r\n let width: number = svg\r\n ? svg.width()\r\n : this.viewer.container.clientWidth;\r\n\r\n const source: OpenSeadragon.TileSource = this.viewer.world.getItemAt(0).source;\r\n const dimensions: OpenSeadragon.Point = source.dimensions;\r\n const viewerWidth = dimensions.x;\r\n const viewerheight = dimensions.y;\r\n\r\n let pX = point.x / width * viewerWidth;\r\n let pY = point.y / (width * (viewerheight / viewerWidth)) * viewerheight;\r\n\r\n return this.imageToViewportCoordinates(new OpenSeadragon.Point(pX, pY));\r\n};\r\n\r\nVue.prototype.localizer = function (traductionKey: string, ...params) {\r\n traductionKey = (traductionKey.charAt(0).toUpperCase() + traductionKey.slice(1))\r\n .split('.')\r\n .reduce((prev, curr) => prev + '.' + curr.charAt(0).toUpperCase() + curr.slice(1));\r\n\r\n return this.$vuetify.lang.t(`$vuetify.${traductionKey}`, ...params);\r\n}\r\n\r\nVue.prototype.$debounce = debounce;\r\nVue.prototype.$throttle = throttle;\r\nVue.config.ignoredElements = [\r\n 'peculiar-certificate-viewer'\r\n];\r\n\r\ndefineCustomElements();\r\n\r\nasync function main() {\r\n if (window['cordova']) {\r\n //Temporary Fix : platform support Electron\r\n if (cordova.platformId == 'electron') {\r\n cordova.platformId = 'browser';\r\n }\r\n const standaloneWrapper = new StandaloneWrapper();\r\n\r\n await standaloneWrapper.initializeAsync();\r\n window['standaloneWrapper'] = standaloneWrapper;\r\n window['appContextBuilder'] = standaloneWrapper.appContextBuilder.bind(standaloneWrapper);\r\n }\r\n\r\n const localizerService = serviceProvider.get(LocalizerService);\r\n const localizerPromise = localizerService.loadTranslationAsync(localizerService.codeCulture);\r\n\r\n Vue.use(Sbs);\r\n\r\n Vue.use(dockSpawnPlugin, {\r\n localizer: key =>\r\n localizerService.getTemplateString(`JS.Framework.Controls.XDockSpawn.${key}`)\r\n });\r\n\r\n BasePage.RegisterPage('AccountLoginPage', () => import(/* webpackChunkName: \"account\" */ 'App/Areas/Account/LoginPage.vue'));\r\n BasePage.RegisterPage('AccountRegisterPage', () => import(/* webpackChunkName: \"account\" */ 'App/Areas/Account/RegisterPage.vue'));\r\n BasePage.RegisterPage('AccountForceResetPasswordPage', () => import(/* webpackChunkName: \"account\" */ 'App/Areas/Account/ForceResetPasswordPage.vue'));\r\n BasePage.RegisterPage('AccountResetPasswordPage', () => import(/* webpackChunkName: \"account\" */ 'App/Areas/Account/ResetPasswordPage.vue'));\r\n BasePage.RegisterPage('AccountForgotPasswordPage', () => import(/* webpackChunkName: \"account\" */ 'App/Areas/Account/ForgotPasswordPage.vue'));\r\n\r\n BasePage.RegisterPage('PublicCookiesPage', () => import(/* webpackChunkName: \"public\" */ 'App/Areas/Public/CookiesPage.vue'));\r\n BasePage.RegisterPage('PublicTermsAndConditionsPage', () => import(/* webpackChunkName: \"public\" */ 'App/Areas/Public/TermsAndConditionsPage.vue'));\r\n BasePage.RegisterPage('HomeErrorPage', () => import(/* webpackChunkName: \"public\" */ 'App/Areas/Home/ErrorPage.vue'));\r\n BasePage.RegisterPage('HomeStatusCodePagePage', () => import(/* webpackChunkName: \"public\" */ 'App/Areas/Home/StatusCodePage.vue'));\r\n\r\n BasePage.RegisterPage('Spa', () => import(/* webpackChunkName: \"spa\" */ 'App/Areas/Shares/SpaIndexPage.vue'));\r\n BasePage.RegisterPage('StandaloneHomeIndexPage', () => import(/* webpackChunkName: \"standalone\" */ 'App/Areas/Standalone/IndexPage.vue'));\r\n BasePage.RegisterPage('StandaloneHomeWatchPage', () => import(/* webpackChunkName: \"standalone\" */ 'App/Areas/Standalone/WatchPage.vue'));\r\n\r\n BasePage.RegisterPage('ProfileProfileIndexPage', () => import(/* webpackChunkName: \"profile\" */ 'App/Areas/Profile/IndexProfilePage.vue'));\r\n BasePage.RegisterPage('ProfileProfilePreferencesPage', () => import(/* webpackChunkName: \"profile\" */ 'App/Areas/Profile/PreferencesPage.vue'));\r\n BasePage.RegisterPage('ProfileProfileAccountPage', () => import(/* webpackChunkName: \"profile\" */ 'App/Areas/Profile/AccountPage.vue'));\r\n BasePage.RegisterPage('ProfileProfileTokensPage', () => import(/* webpackChunkName: \"profile\" */ 'App/Areas/Profile/TokensPage.vue'));\r\n BasePage.RegisterPage('ProfileProfileEmailPage', () => import(/* webpackChunkName: \"profile\" */ 'App/Areas/Profile/EmailPage.vue'));\r\n BasePage.RegisterPage('ProfileProfileExperimentalFeaturesPage', () => import(/* webpackChunkName: \"profile\" */ 'App/Areas/Profile/ExperimentalFeaturesPage.vue'));\r\n BasePage.RegisterPage('ProfilePublicIndexPage', () => import(/* webpackChunkName: \"profile\" */ 'App/Areas/Profile/Public/IndexPage.vue'));\r\n\r\n BasePage.RegisterPage('ExploreHomeDetailEmbedPage', () => import(/* webpackChunkName: \"embed\" */ 'App/Areas/Embed/IndexPage.vue'));\r\n BasePage.RegisterPage('ProjectHomeIndexPage', () => import(/* webpackChunkName: \"project\" */ 'App/Areas/Project/IndexPage.vue'));\r\n BasePage.RegisterPage('ProjectHomeEditPage', () => import(/* webpackChunkName: \"project\" */ 'App/Areas/Project/EditProject.vue'));\r\n\r\n BasePage.RegisterPage('ExploreHomeIndexPage', () => import(/* webpackChunkName: \"explore\" */ 'App/Areas/Explore/IndexPage.vue'));\r\n BasePage.RegisterPage('ExploreHomeDetailExplorePage', () => import(/* webpackChunkName: \"explore\" */ 'App/Areas/Explore/DetailsExplore.vue'));\r\n BasePage.RegisterPage('ExploreHomePreviewPage', () => import(/* webpackChunkName: \"explore\" */ 'App/Areas/Explore/DetailsExplore.vue'));\r\n\r\n BasePage.RegisterPage('DriveHomeIndexPage', () => import(/* webpackChunkName: \"drive\" */ 'App/Areas/Drive/IndexPage.vue'));\r\n\r\n BasePage.RegisterPage('AdministratorPortalGeneralSettingsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/GeneralSettings/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalMailSettingsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/MailSettings/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalDriveSettingsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/DriveSettings/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalSecuritySettingsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/SecuritySettings/IndexPage.vue'));\r\n\r\n\r\n BasePage.RegisterPage('AdministratorPortalPlatformIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Platforms/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalPlatformAddPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Platforms/AddPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalPlatformEditPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Platforms/EditPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalDomainNameSystemIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/DomainNameSystem/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalGroupsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Groups/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalUsersIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Users/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalUsersAddPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Users/AddPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalUsersEditPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Users/EditPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalSubscriptionIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Subscription/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalSubscriptionAddPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Subscription/AddPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalSubscriptionEditPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Subscription/EditPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalRolesIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Roles/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalRolesAddPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Roles/AddPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalRolesEditPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Roles/EditPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalIdentityProvidersIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/IdentityProviders/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalLoginSettingsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/LoginSettings/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalStatisticsRequestsPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Statistics/RequestPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalTagsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Tags/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalAuditLogsIndexPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/AuditLogs/IndexPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalWorkersTasksPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Workers/TasksPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalWorkersWorkersPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Workers/WorkersPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalWorkersConfigurationPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Workers/ConfigurationPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalProjectsTemplatesPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Projects/TemplatesPage.vue'));\r\n BasePage.RegisterPage('AdministratorPortalProjectsJsonSchemasPage', () => import(/* webpackChunkName: \"administratorPortal\" */ 'App/Areas/AdministratorPortal/Projects/JsonSchemasPage.vue'));\r\n\r\n BasePage.RegisterPage('VideoHomeListPage', () => import(/* webpackChunkName: \"video\" */ 'App/Areas/Video/ListPage.vue'));\r\n BasePage.RegisterPage('VideoHomeEditPage', () => import(/* webpackChunkName: \"video\" */ 'App/Areas/Video/EditPage.vue'));\r\n BasePage.RegisterPage('VideoExploreIndexPage', () => import(/* webpackChunkName: \"video\" */ 'App/Areas/Video/ExplorePage.vue'));\r\n BasePage.RegisterPage('VideoExploreWatchPage', () => import(/* webpackChunkName: \"video\" */ 'App/Areas/Video/WatchPage.vue'));\r\n\r\n await localizerPromise;\r\n\r\n const app = await BasePage.InitializeFromBody(vuetify);\r\n\r\n BasePage.ConfigureVuetifyLocalizer(app.$vuetify, localizerService);\r\n}\r\nmain().catch((e) => console.error(e));\r\n\r\n\r\n","import { ICoordinates, IPlanCoordinates } from 'Framework/Components/Controls/XView/Core/Coordinates';\r\nimport { IHotspot } from 'Framework/Components/Controls/XView/Core/Hotspots';\r\nimport { IIconProvider } from 'Framework/Components/Controls/XView/Core/Icons';\r\n\r\nexport enum RenderType {\r\n None = 0,\r\n Spherical = 1,\r\n Cube = 2,\r\n Flat = 3,\r\n}\r\n\r\nexport interface IConfiguration {\r\n RenderType: RenderType;\r\n MaxFov?: number;\r\n MinFov?: number;\r\n Fov?: number;\r\n hotspots: Array;\r\n iconProvider: IIconProvider;\r\n}\r\n\r\nexport interface IPanoramaConfiguration extends IConfiguration {\r\n Url: string;\r\n MaxLevel: number;\r\n IsMultiResolution: boolean;\r\n idleRotationWaitTime: number;\r\n idleRotationSpeed: number;\r\n Levels: Array;\r\n startOrientation: ICoordinates;\r\n}\r\n\r\nexport interface IFlatConfiguration extends IConfiguration {\r\n url: string;\r\n maxLevel: number;\r\n imageWidth: number;\r\n imageHeight: number;\r\n levels: Array;\r\n startPosition: IPlanCoordinates;\r\n\r\n readonly ratio: number;\r\n}\r\n\r\nexport interface IPanoramaLevel {\r\n ImageWidth: number;\r\n ImageHeight: number;\r\n TileSize: number;\r\n}\r\n\r\nexport function isPanoramaConfiguration(configuration: IConfiguration): configuration is IPanoramaConfiguration {\r\n return configuration\r\n && (configuration.RenderType === RenderType.Cube\r\n || configuration.RenderType === RenderType.Spherical);\r\n}\r\n\r\nexport function isFlatConfiguration(configuration: IConfiguration): configuration is IFlatConfiguration {\r\n return configuration?.RenderType === RenderType.Flat;\r\n}\r\n\r\nexport class FlatConfiguration implements IFlatConfiguration {\r\n public constructor(url: string, imageWidth: number, imageHeight: number, getHotspots: () => Array) {\r\n this.url = url;\r\n this.imageWidth = imageWidth;\r\n this.imageHeight = imageHeight;\r\n this.RenderType = RenderType.Flat;\r\n this.iconProvider = null;\r\n this.maxLevel = 0;\r\n this.levels = new Array();\r\n this.startPosition = { x: 0.5, y: 0.5 / (imageWidth / imageHeight) };\r\n this.MaxFov = Math.PI;\r\n this.MinFov = Math.PI / 180;\r\n\r\n this._getHotspots = getHotspots;\r\n }\r\n\r\n public RenderType: RenderType;\r\n public MaxFov?: number;\r\n public MinFov?: number;\r\n public Fov?: number;\r\n public iconProvider: IIconProvider;\r\n public url: string;\r\n public maxLevel: number;\r\n public imageWidth: number;\r\n public imageHeight: number;\r\n public levels: Array;\r\n public startPosition: IPlanCoordinates;\r\n\r\n public get hotspots(): Array> {\r\n return this._getHotspots();\r\n }\r\n\r\n public get ratio(): number {\r\n return this.imageWidth / this.imageHeight;\r\n }\r\n\r\n private readonly _getHotspots: () => Array;\r\n}\r\n\r\nexport class PanoramaConfiguration implements IPanoramaConfiguration {\r\n public constructor(url: string, levels: Array, getHotspots: () => Array) {\r\n this.Url = url;\r\n this.RenderType = RenderType.Cube;\r\n this.MaxLevel = levels.length;\r\n this.Levels = levels;\r\n this.Fov = 80 / 180 * Math.PI;\r\n this.MaxFov = Math.PI / 2;\r\n this.MinFov = Math.PI / 180;\r\n\r\n this._getHotspots = getHotspots;\r\n }\r\n\r\n public Url: string;\r\n public MaxLevel: number;\r\n public IsMultiResolution: boolean;\r\n public idleRotationWaitTime: number;\r\n public idleRotationSpeed: number;\r\n public Levels: IPanoramaLevel[];\r\n public startOrientation: ICoordinates;\r\n public RenderType: RenderType;\r\n public MaxFov?: number;\r\n public MinFov?: number;\r\n public Fov?: number;\r\n public iconProvider: IIconProvider;\r\n\r\n public get hotspots(): Array> {\r\n return this._getHotspots();\r\n }\r\n\r\n private readonly _getHotspots: () => Array;\r\n}\r\n\r\nexport abstract class ConfigurationBuilder {\r\n public static CreateFlatConfigurationWithImage(\r\n url: string,\r\n imageWidth: number,\r\n imageHeight: number,\r\n getHotspots: () => Array = () => []\r\n ): FlatConfiguration {\r\n return new FlatConfiguration(\r\n url,\r\n imageWidth,\r\n imageHeight,\r\n getHotspots);\r\n }\r\n\r\n public static CreatePanoramaConfigurationWithConstantTile(\r\n url: string,\r\n levelCount: number,\r\n getHotspots: () => Array = () => []\r\n ): PanoramaConfiguration {\r\n return new PanoramaConfiguration(\r\n url,\r\n [...ConfigurationBuilder.levelPanoramaGenerator(levelCount, true)],\r\n getHotspots);\r\n }\r\n\r\n public static CreatePanoramaConfigurationWithComputedTile(\r\n url: string,\r\n levelCount: number,\r\n getHotspots: () => Array = () => []\r\n ): PanoramaConfiguration {\r\n return new PanoramaConfiguration(\r\n url,\r\n [...ConfigurationBuilder.levelPanoramaGenerator(levelCount, false)],\r\n getHotspots);\r\n }\r\n\r\n private static *levelPanoramaGenerator(\r\n maxLevel: number,\r\n constantTileSize: boolean = true\r\n ): IterableIterator {\r\n for (let level: number = 1; level <= maxLevel; level++) {\r\n let size: number = Math.pow(2, level - 1);\r\n let sizeOfImage = size * 512;\r\n\r\n yield {\r\n ImageWidth: sizeOfImage,\r\n ImageHeight: sizeOfImage,\r\n TileSize: constantTileSize ? 512 : sizeOfImage\r\n };\r\n }\r\n }\r\n}\r\n","export enum CoordinateSystem { Plane, Spherical, Cartesian }\r\n\r\nexport const DefaultCoordinates: ICartesianCoordinates = { x: 1, y: 0, z: 0 };\r\n\r\nexport interface ICoordinates {\r\n}\r\n\r\nexport interface IPlanCoordinates extends ICoordinates {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface ISphericalCoordinates extends ICoordinates {\r\n /** Horizontal angle over [+π;-π] */\r\n theta: number;\r\n /** Vertical angle over [+π/2;-π/2] */\r\n phi: number;\r\n}\r\n\r\nexport interface ICartesianCoordinates extends ICoordinates {\r\n x: number;\r\n y: number;\r\n z: number;\r\n}","import { IHotspot } from 'Framework/Components/Controls/XView/Core/Hotspots';\r\n\r\nexport enum TextureTypes {\r\n OpacityTexture = 1 << 0,\r\n EmissiveTexture = 1 << 1,\r\n DiffuseTexture = 1 << 2,\r\n AmbientTexture = 1 << 3,\r\n SpecularTexture = 1 << 4\r\n}\r\n\r\nexport interface IIconInfo {\r\n url: string;\r\n textureType: TextureTypes;\r\n animation?: {\r\n nRows: number,\r\n nCols: number,\r\n startFrame: number,\r\n endFrame: number,\r\n frameRate: number\r\n };\r\n}\r\n\r\nexport interface IIconProvider {\r\n getIconInfo(hotspot: IHotspot): IIconInfo;\r\n}\r\n","export enum TooltipPosition { Top, Bottom, Left, Right, Center }\r\nexport enum TooltipVisibility { OnHover, Always }\r\n\r\nexport interface ITooltipStyle {\r\n position: TooltipPosition,\r\n color: string,\r\n size: number,\r\n visibility: TooltipVisibility\r\n}\r\n\r\nexport class TooltipStyle implements ITooltipStyle {\r\n public static get defaultTop(): ITooltipStyle {\r\n return {\r\n position: TooltipPosition.Top,\r\n color: '#dddddd',\r\n size: 12,\r\n visibility: TooltipVisibility.OnHover\r\n };\r\n }\r\n\r\n public static get defaultCenter(): ITooltipStyle {\r\n return {\r\n position: TooltipPosition.Center,\r\n color: '#dddddd',\r\n size: 12,\r\n visibility: TooltipVisibility.OnHover\r\n };\r\n }\r\n\r\n public position: TooltipPosition;\r\n public color: string;\r\n public size: number;\r\n public visibility: TooltipVisibility;\r\n}\r\n","import { Component, UIElement } from 'Framework/Components/UIElement';\r\n\r\nexport enum DialogResult {\r\n /**\r\n *Nothing is returned from the dialog box. This means that the modal dialog continues running.\r\n * */\r\n None = 0,\r\n /**\r\n * The dialog box return value is OK (usually sent from a button labeled OK).\r\n * */\r\n OK = 1,\r\n /**\r\n *The dialog box return value is Cancel (usually sent from a button labeled Cancel).\r\n * */\r\n Cancel = 2,\r\n /**\r\n *The dialog box return value is Abort (usually sent from a button labeled Abort).\r\n * */\r\n Abort = 3,\r\n /**\r\n *The dialog box return value is Retry (usually sent from a button labeled Retry).\r\n * */\r\n Retry = 4,\r\n /**\r\n *The dialog box return value is Ignore (usually sent from a button labeled Ignore).\r\n * */\r\n Ignore = 5,\r\n /**\r\n *The dialog box return value is Yes (usually sent from a button labeled Yes).\r\n * */\r\n Yes = 6,\r\n /**\r\n *The dialog box return value is No (usually sent from a button labeled No).\r\n * */\r\n No = 7\r\n}\r\n\r\n@Component\r\nexport class ModalDialog extends UIElement {\r\n public onClose(result?: DialogResult): void {\r\n this.$emit('close-dialog', { sender: this, args: result });\r\n }\r\n\r\n public onMaximize(): void {\r\n this.$emit('maximize-dialog', { sender: this });\r\n }\r\n\r\n public onRestore(): void {\r\n this.$emit('restore-dialog', { sender: this });\r\n }\r\n\r\n public DialogResult: any = DialogResult;\r\n}\r\n","import { ExperimentalFeature } from 'Api/AppContext';\r\nimport { camelCase, cloneDeep, throttle, upperFirst } from 'lodash';\r\nimport 'reflect-metadata';\r\nimport Vue, { PropOptions } from 'vue';\r\nimport { createDecorator } from 'vue-class-component';\r\nimport { ComponentOptions, ComputedOptions, Constructor } from 'vue/types/options';\r\n\r\nenum VerticalAlignment {\r\n Top = 0,\r\n Center = 1,\r\n Bottom = 2,\r\n Stretch = 3\r\n};\r\n\r\nenum HorizontalAlignment {\r\n Left = 0,\r\n Center = 1,\r\n Right = 2,\r\n Stretch = 3\r\n};\r\n\r\nenum Orientation {\r\n Horizontal = 0,\r\n Vertical = 1\r\n};\r\n\r\nenum Visibility {\r\n Visible = 0,\r\n Hidden = 1,\r\n Collapsed = 2\r\n};\r\n\r\nexport {\r\n HorizontalAlignment,\r\n Orientation,\r\n VerticalAlignment,\r\n Visibility\r\n};\r\n\r\nexport const BrowsableMetadataKey: string = 'editor:browsable';\r\n\r\nexport function getMetadataOverBaseClass(targetConstructor: any, metadataKey: string) {\r\n let metadata: any = Reflect.getMetadata(metadataKey, targetConstructor);\r\n\r\n if(!metadata) {\r\n metadata = {};\r\n\r\n let mixins: Array<(ComponentOptions | typeof Vue)> = /*targetConstructor.__proto__?.extendOptions?.mixins ||*/ targetConstructor?.extendOptions?.mixins || [];\r\n\r\n mixins?.forEach(mx => metadata = {...metadata, ...getMetadataOverBaseClass(mx, metadataKey)});//mx.constructor ?\r\n\r\n if(targetConstructor.super) {\r\n metadata = {...metadata, ...getMetadataOverBaseClass(targetConstructor.super, metadataKey)}\r\n }\r\n }\r\n\r\n return metadata;\r\n};\r\nexport function getMetadataOverBaseClassWithKeyBuilder(targetConstructor: any, metadataKeyBuilder: (targetConstructor: any) => string) {\r\n let metadataKey = metadataKeyBuilder(targetConstructor);\r\n let metadata: any = Reflect.getMetadata(metadataKey, targetConstructor);\r\n\r\n if (!metadata) {\r\n metadata = {};\r\n\r\n let mixins: Array<(ComponentOptions | typeof Vue)> = /*targetConstructor.__proto__?.extendOptions?.mixins ||*/ targetConstructor?.extendOptions?.mixins || [];\r\n\r\n mixins?.forEach(mx => metadata = { ...metadata, ...getMetadataOverBaseClassWithKeyBuilder(mx, metadataKeyBuilder) });//mx.constructor ?\r\n\r\n if (targetConstructor.super) {\r\n metadata = { ...metadata, ...getMetadataOverBaseClassWithKeyBuilder(targetConstructor.super, metadataKeyBuilder) }\r\n }\r\n }\r\n\r\n return metadata;\r\n};\r\n\r\nexport type BorderStyle = 'none' | 'hidden' | 'dotted' | 'dashed' | 'solid' | 'double' | 'groove' | 'ridge' | 'inset' | 'outset';\r\n\r\nexport const reflectMetadataIsSupported =\r\n typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined'\r\n\r\nexport function applyMetadata(\r\n options: PropOptions | Constructor[] | Constructor,\r\n target: Vue,\r\n key: string,\r\n) {\r\n if (reflectMetadataIsSupported) {\r\n if (\r\n !Array.isArray(options) &&\r\n typeof options !== 'function' &&\r\n typeof options.type === 'undefined'\r\n ) {\r\n const type = Reflect.getMetadata('design:type', target, key)\r\n if (type !== Object) {\r\n options.type = type\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * decorator of a synced prop\r\n * @param propName the name to interface with from outside, must be different from decorated property\r\n * @param options the options for the synced prop\r\n * @return PropertyDecorator | void\r\n */\r\nexport function PropSyncWithInternal(\r\n propName: string,\r\n options: PropOptions | Constructor[] | Constructor = {},\r\n): PropertyDecorator {\r\n if(!options) {\r\n options = {};\r\n }\r\n\r\n // @ts-ignore\r\n return (target: Vue, key: string) => {\r\n applyMetadata(options, target, key);\r\n\r\n createDecorator((componentOptions: ComponentOptions, k: string, index: number): void => {\r\n (componentOptions.props || (componentOptions.props = {} as any))[propName] = options;\r\n\r\n (componentOptions.computed || (componentOptions.computed = {}))[k] = {\r\n get() {\r\n let result = this[propName];\r\n\r\n if (result == void (0)) {\r\n result = this['internals'][propName];\r\n }\r\n if (result == void (0)) {\r\n result = null;\r\n }\r\n\r\n return result;\r\n },\r\n set: throttle(\r\n function (this: ComputedOptions | (() => any), value: any) {\r\n this['internals'][propName] = value;\r\n\r\n // @ts-ignore\r\n this.$emit(`update:${k}`, value);\r\n // @ts-ignore\r\n this.$emit(`update:${propName}`, value);\r\n // @ts-ignore\r\n this.$emit('property-changed', this, propName, value);\r\n },\r\n 300,\r\n {\r\n leading: true,\r\n trailing: true\r\n }\r\n )\r\n };\r\n\r\n (componentOptions.mixins || (componentOptions.mixins = [])).push({\r\n data(this: Vue) {\r\n return {\r\n internals: {\r\n [propName]: this[propName]\r\n }\r\n }\r\n }\r\n });\r\n })(target, key);\r\n }\r\n}\r\n\r\nexport enum EditorBrowsableState {\r\n Always,\r\n Never\r\n}\r\n\r\nexport type EditorTemplateType =\r\n | 'String'\r\n | 'Boolean'\r\n | 'Number'\r\n | 'Color'\r\n | 'Visibility'\r\n | 'BorderStyle'\r\n | 'HorizontalAlignment'\r\n | 'VerticalAlignment';\r\n\r\nexport interface IEditorOptions {\r\n /** Group properties when they are same group name */\r\n groupName: string,\r\n /** Determine if property can be browsable */\r\n editorBrowsableState?: EditorBrowsableState,\r\n /** Set order to ordering more than one properties */\r\n order?: number,\r\n /** Template used to render field */\r\n template?: EditorTemplateType\r\n}\r\n\r\n/**\r\n * Specifies that a property or method is viewable in an editor\r\n */\r\nexport function editorBrowsable(editorOptions?: IEditorOptions): PropertyDecorator {\r\n let decoratorOptions: IEditorOptions = {\r\n editorBrowsableState: EditorBrowsableState.Always,\r\n groupName: 'groupName'\r\n }\r\n\r\n decoratorOptions = {...decoratorOptions, ...editorOptions };\r\n\r\n return (target: Vue, propertyName: string) => {\r\n if(decoratorOptions.editorBrowsableState == EditorBrowsableState.Never) {\r\n return;\r\n }\r\n\r\n createDecorator((options: ComponentOptions, propertyKey: string) => {\r\n let targetConstructor = target.constructor;\r\n\r\n let metadata = cloneDeep(getMetadataOverBaseClass(targetConstructor, BrowsableMetadataKey));\r\n metadata[decoratorOptions.groupName] = [...(metadata[decoratorOptions.groupName] || [])];\r\n metadata[decoratorOptions.groupName].push({\r\n propertyName: propertyKey,\r\n order: decoratorOptions.order,\r\n template: decoratorOptions.template\r\n });\r\n\r\n Reflect.defineMetadata(BrowsableMetadataKey, metadata, targetConstructor);\r\n })(\r\n target,\r\n propertyName.substring(propertyName.startsWith('_') ? 1 : 0)\r\n );\r\n }\r\n}\r\n\r\nconst apiMap = 'api:map:';\r\nconst apiMapSerializable = `${apiMap}serializable`;\r\nconst designType = 'design:type';\r\nconst designParamTypes = 'design:paramtypes';\r\n\r\n// Enums\r\nenum Type {\r\n Array = 'array',\r\n Boolean = 'boolean',\r\n Date = 'date',\r\n Number = 'number',\r\n String = 'string'\r\n}\r\n\r\n// Types\r\ntype Args =\r\n | string\r\n | {\r\n name?: string;\r\n className?: string;\r\n type?: Function;\r\n onSerialize?: Function;\r\n onDeserialize?: Function;\r\n postDeserialize?: Function;\r\n }\r\n | {\r\n name?: string;\r\n className?: string;\r\n predicate?: Function;\r\n onSerialize?: Function;\r\n onDeserialize?: Function;\r\n postDeserialize?: Function;\r\n }\r\n | {\r\n names: Array;\r\n className?: string;\r\n type?: Function;\r\n onSerialize?: Function;\r\n onDeserialize?: Function;\r\n postDeserialize?: Function;\r\n }\r\n | {\r\n names: Array;\r\n className?: string;\r\n predicate?: Function;\r\n onSerialize?: Function;\r\n onDeserialize?: Function;\r\n postDeserialize?: Function;\r\n };\r\n\r\ntype Metadata =\r\n | {\r\n name: string;\r\n type: Function;\r\n onSerialize: Function;\r\n onDeserialize: Function;\r\n postDeserialize: Function;\r\n }\r\n | {\r\n name: string;\r\n predicate: Function;\r\n onSerialize: Function;\r\n onDeserialize: Function;\r\n postDeserialize: Function;\r\n }\r\n | {\r\n names: Array;\r\n type: Function;\r\n onSerialize: Function;\r\n onDeserialize: Function;\r\n postDeserialize: Function;\r\n }\r\n | {\r\n names: Array;\r\n predicate: Function;\r\n onSerialize: Function;\r\n onDeserialize: Function;\r\n postDeserialize: Function;\r\n };\r\n\r\n/**\r\n * Function to get all base class names recursively\r\n *\r\n * @param {Object} target The target class from which the parent classes are extracted\r\n * @returns {Array} All the base class names\r\n */\r\nfunction getBaseClassNames(target: any): Array {\r\n const names: Array = [];\r\n const baseClass = target?.super;\r\n const className = getComponentName(baseClass);\r\n\r\n if (!className) {\r\n return names;\r\n }\r\n\r\n names.push(className);\r\n let mixins: (ComponentOptions | typeof Vue)[] = baseClass.extendOptions?.mixins ?? [];\r\n\r\n for (const mixin of mixins) {\r\n const mixinName = getComponentName(mixin);\r\n\r\n if (mixinName) {\r\n names.push(mixinName);\r\n }\r\n }\r\n\r\n return [...names, ...getBaseClassNames(baseClass)];\r\n}\r\n\r\n/**\r\n * Decorator to take the property in account during the serialize and deserialize function\r\n * @param {Args} args Arguments to describe the property\r\n */\r\n\r\nexport function JsonProperty(args?: Args): PropertyDecorator {\r\n return (target: Vue, propertyName: string) => {\r\n createDecorator((options: ComponentOptions, propertyKey: string) => {\r\n let targetConstructor = target.constructor;\r\n\r\n const targetName = args?.['className'] ?? getComponentName(targetConstructor);\r\n const apiMapTargetName = `${apiMap}${targetName}`;\r\n\r\n let map: { [id: string]: Metadata } = getMetadataOverBaseClassWithKeyBuilder(targetConstructor, (tc) => tc == targetConstructor ? apiMapTargetName :`${apiMap}${getComponentName(tc)}`);\r\n\r\n map[propertyKey] = getJsonPropertyValue(propertyKey, args);\r\n Reflect.defineMetadata(apiMapTargetName, map, targetConstructor);\r\n })(target, propertyName);\r\n };\r\n}\r\n\r\n/**\r\n * Decorator to make a class Serializable\r\n *\r\n * BREAKING CHANGE: Since version 2.0.0 the parameter `baseClassName` is not needed anymore\r\n */\r\nexport function Serializable(args?: {name:string}): ClassDecorator {\r\n return (target: any) => {\r\n const baseClassNames = getBaseClassNames(target);\r\n Reflect.defineMetadata(apiMapSerializable, baseClassNames, target);\r\n };\r\n}\r\n\r\n/**\r\n * Function to retrieve and merge all base class properties\r\n *\r\n * @param baseClassNames The base classe names of the instance provided\r\n * @param {any} instance The instance target from which the parents metadata are extracted\r\n * @returns {{ [id: string]: Metadata }} All base class metadata properties\r\n */\r\nfunction getBaseClassMaps(\r\n baseClassNames: Array,\r\n instance: any\r\n): { [id: string]: Metadata } {\r\n let baseClassMaps: { [id: string]: Metadata } = {};\r\n\r\n baseClassNames.forEach(baseClassName => {\r\n baseClassMaps = {\r\n ...baseClassMaps,\r\n ...getMetadataOverBaseClass(instance.constructor, `${apiMap}${baseClassName}`) //Reflect.getMetadata(`${apiMap}${baseClassName}`, instance.constructor)\r\n };\r\n });\r\n\r\n return baseClassMaps;\r\n}\r\n\r\n/**\r\n * Function to deserialize json into a class\r\n *\r\n * @param {object} json The json to deserialize\r\n * @param {new (...params: Array) => T} type The class in which we want to deserialize\r\n * @returns {T} The instance of the specified type containing all deserialized properties\r\n */\r\nexport function deserialize(json: object, type: new (...params: Array) => T): T {\r\n const instance: any = new type();\r\n const instanceName = getComponentName(instance.constructor);\r\n const baseClassNames: Array = Reflect.getMetadata(apiMapSerializable, type);\r\n const apiMapInstanceName = `${apiMap}${instanceName}`;\r\n const hasMap = Reflect.hasMetadata(apiMapInstanceName, instance);\r\n\r\n if (!hasMap && !baseClassNames?.length) {\r\n return instance;\r\n }\r\n\r\n let instanceMap: { [id: string]: Metadata } = Reflect.getMetadata(apiMapInstanceName, instance) ?? {};\r\n instanceMap = { ...instanceMap, ...getBaseClassMaps(baseClassNames, instance) };\r\n\r\n Object.keys(instanceMap).forEach(key => {\r\n const canConvert = instanceMap[key]['names']\r\n ? instanceMap[key]['names'].some((name: string) => json[name] !== undefined)\r\n : json[instanceMap[key]['name']] !== undefined;\r\n\r\n if (canConvert) {\r\n instance[key] = convertDataToProperty(instance, key, instanceMap[key], json);\r\n }\r\n });\r\n\r\n return instance;\r\n}\r\n\r\nexport function getComponentName(comp: any): string {\r\n if (!comp) {\r\n return null;\r\n }\r\n\r\n if (comp instanceof Vue) {\r\n return 'vue';\r\n }\r\n\r\n return comp.extendOptions?.name || comp.name || null;\r\n}\r\n\r\n/**\r\n * Function to serialize a class into json\r\n *\r\n * @param {any} instance Instance of the object to deserialize\r\n * @param {boolean} removeUndefined Indicates if you want to keep or remove undefined values\r\n * @returns {any} The json object\r\n */\r\nexport function serializeAsJson(instance: any, removeUndefined: boolean = true): any {\r\n const json: any = {\r\n type: upperFirst(camelCase(instance.$options.name))\r\n };\r\n\r\n const constructor = instance.constructor;\r\n const instanceName = getComponentName(constructor);\r\n const baseClassNames: Array = Reflect.getMetadata(apiMapSerializable, constructor);\r\n const apiMapInstanceName = `${apiMap}${instanceName}`;\r\n const hasMap = Reflect.hasMetadata(apiMapInstanceName, constructor);\r\n\r\n if (!hasMap && !baseClassNames?.length) {\r\n return json;\r\n }\r\n\r\n let instanceMap: { [id: string]: Metadata } = Reflect.getMetadata(apiMapInstanceName, constructor) ?? {};\r\n instanceMap = { ...instanceMap, ...getBaseClassMaps(baseClassNames, instance) };\r\n\r\n Object.keys(instanceMap).forEach(key => {\r\n const onSerialize: Function = instanceMap[key]['onSerialize'];\r\n\r\n if (key in instance) {\r\n let data = convertPropertyToData(instance, key, instanceMap[key], removeUndefined);\r\n\r\n if (onSerialize) {\r\n data = onSerialize(data, instance);\r\n }\r\n\r\n if (instanceMap[key]['names']) {\r\n instanceMap[key]['names'].forEach((name: string) => {\r\n if (!removeUndefined || (removeUndefined && data[name] !== undefined)) {\r\n json[name] = data[name];\r\n }\r\n });\r\n }\r\n else if (!removeUndefined || (removeUndefined && data !== undefined)) {\r\n json[instanceMap[key]['name']] = data;\r\n }\r\n }\r\n });\r\n\r\n return json;\r\n}\r\n\r\n/**\r\n * Function to convert class property to json data\r\n *\r\n * @param {Function} instance The instance containing the property to convert\r\n * @param {string} key The name of the property to convert\r\n * @param {Metadata} metadata The metadata of the property to convert\r\n * @param {boolean} removeUndefined Indicates if you want to keep or remove undefined value\r\n * @returns {any} The converted property\r\n */\r\nfunction convertPropertyToData(\r\n instance: Function,\r\n key: string,\r\n metadata: Metadata,\r\n removeUndefined: boolean\r\n): any {\r\n const property: any = instance[key];\r\n const type: any = Reflect.getMetadata(designType, instance, key);\r\n const isArray = Array.isArray(property);\r\n const predicate: Function = metadata['predicate'];\r\n const propertyType: any = metadata['type'] || type;\r\n const isSerializableProperty = isSerializable(propertyType);\r\n\r\n if (property && (isSerializableProperty || predicate)) {\r\n if (isArray) {\r\n const array = [];\r\n property.forEach((d: any) => {\r\n array.push(serializeAsJson(d, removeUndefined));\r\n });\r\n\r\n return array;\r\n }\r\n\r\n return serializeAsJson(property, removeUndefined);\r\n }\r\n\r\n if (propertyType.name.toLocaleLowerCase() === Type.Date) {\r\n return property ? property.toISOString() : property;\r\n }\r\n\r\n return property;\r\n}\r\n\r\n/**\r\n * Function to convert json data to the class property\r\n * @param {Function} instance The instance containing the property to convert\r\n * @param {string} key The name of the property to convert\r\n * @param {Metadata} metadata The metadata of the property to convert\r\n * @param {any} json Json containing the values\r\n */\r\nfunction convertDataToProperty(instance: Function, key: string, metadata: Metadata, json: any) {\r\n let data: any;\r\n\r\n if (metadata['names']) {\r\n const object = {};\r\n metadata['names'].forEach((name: string) => (object[name] = json[name]));\r\n data = object;\r\n } else {\r\n data = json[metadata['name']];\r\n }\r\n\r\n const type: any = Reflect.getMetadata(designType, instance, key);\r\n const isArray = type.name.toLowerCase() === Type.Array;\r\n const predicate: Function = metadata['predicate'];\r\n const onDeserialize: Function = metadata['onDeserialize'];\r\n const postDeserialize: Function = metadata['postDeserialize'];\r\n let propertyType: any = metadata['type'] || type;\r\n const isSerializableProperty = isSerializable(propertyType);\r\n let result: any;\r\n\r\n if (onDeserialize) {\r\n data = onDeserialize(data, instance);\r\n }\r\n\r\n if (!isSerializableProperty && !predicate) {\r\n result = castSimpleData(propertyType.name, data);\r\n } else if (isArray) {\r\n const array = [];\r\n\r\n if (!Array.isArray(data)) {\r\n console.error(`${data} is not and array.`);\r\n result = undefined;\r\n } else {\r\n data.forEach((d: any) => {\r\n if (predicate) {\r\n propertyType = predicate(d);\r\n }\r\n array.push(deserialize(d, propertyType));\r\n });\r\n result = array;\r\n }\r\n } else {\r\n propertyType = predicate ? predicate(data) : propertyType;\r\n result = deserialize(data, propertyType);\r\n }\r\n\r\n if (postDeserialize) {\r\n result = postDeserialize(result, instance);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Function to test if a class is serializable\r\n *\r\n * @param {any} type The type to test\r\n * @returns {boolean} If the type is serializable or not\r\n */\r\nfunction isSerializable(type: any): boolean {\r\n return Reflect.hasOwnMetadata(apiMapSerializable, type);\r\n}\r\n\r\n/**\r\n * Function to transform the JsonProperty value into Metadata\r\n *\r\n * @param {string} key The property name\r\n * @param {Args} args Arguments to describe the property\r\n * @returns {Metadata} The metadata object\r\n */\r\nfunction getJsonPropertyValue(key: string, args: Args): Metadata {\r\n if (!args) {\r\n return {\r\n name: key.toString(),\r\n type: undefined,\r\n onDeserialize: undefined,\r\n onSerialize: undefined,\r\n postDeserialize: undefined\r\n };\r\n }\r\n\r\n let metadata: any;\r\n if (typeof args === Type.String) {\r\n metadata = { name: args };\r\n }\r\n else if (args['name']) {\r\n metadata = { name: args['name'] };\r\n }\r\n else if (args?.['names'].length) {\r\n metadata = { names: args['names'] };\r\n }\r\n else {\r\n metadata = { name: key.toString() };\r\n }\r\n\r\n return args['predicate']\r\n ? {\r\n ...metadata,\r\n predicate: args['predicate'],\r\n onDeserialize: args['onDeserialize'],\r\n onSerialize: args['onSerialize'],\r\n postDeserialize: args['postDeserialize']\r\n }\r\n : {\r\n ...metadata,\r\n type: args['type'],\r\n onDeserialize: args['onDeserialize'],\r\n onSerialize: args['onSerialize'],\r\n postDeserialize: args['postDeserialize']\r\n };\r\n}\r\n\r\n/**\r\n * Function to cast simple type data into the real class property type\r\n *\r\n * @param {string} type The type to cast data into\r\n * @param {any} data The data to cast\r\n * @returns {any} The casted data\r\n */\r\nfunction castSimpleData(type: string, data: any): any {\r\n type = type.toLowerCase();\r\n\r\n if ((typeof data).toLowerCase() === type) {\r\n return data;\r\n }\r\n\r\n switch (type) {\r\n case Type.String:\r\n return data ? data.toString() : data;\r\n case Type.Number:\r\n if (isNaN(data)) {\r\n console.error(`${data}: Type ${typeof data} is not assignable to type ${type}.`);\r\n return undefined;\r\n }\r\n return Number(data);\r\n case Type.Boolean:\r\n console.error(`${data}: Type ${typeof data} is not assignable to type ${type}.`);\r\n return undefined;\r\n case Type.Date:\r\n if (isNaN(Date.parse(data))) {\r\n console.error(`${data}: Type ${typeof data} is not assignable to type ${type}.`);\r\n return undefined;\r\n }\r\n return new Date(data);\r\n default:\r\n return data;\r\n }\r\n}\r\n\r\n/**\r\n * Add metadata to classes indicating which experimental feature is required for them\r\n *\r\n * @param {ExperimentalFeature} feature expected feature enabled\r\n */\r\nexport function ExperimentalComponent(feature: ExperimentalFeature): ClassDecorator {\r\n return function (target: Function) {\r\n Reflect.defineMetadata('experimental:component', feature, target);\r\n };\r\n}\r\n\r\n","import { editorBrowsable, HorizontalAlignment, JsonProperty, PropSyncWithInternal, Serializable, VerticalAlignment } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Vue } from 'vue-property-decorator';\r\n\r\n@Serializable()\r\n@Component({\r\n name: 'GridItem'\r\n})\r\nexport default class GridItem extends Vue {\r\n public gridItemStyle(): any {\r\n //if (this.$parent instanceof Grid) {\r\n //Impossible d'inclure Grid pour faire un instanceof\r\n //Sinon référence circulaire entre Grid et UIElment\r\n if (this.$parent.$options.name == 'x-grid') {\r\n let rowEnd = this._row + this._rowSpan;\r\n let columnEnd = this._column + this._columnSpan;\r\n\r\n let result = {\r\n 'grid-row': `${this._row}`,\r\n 'grid-row-span': `${rowEnd - this._row}`,\r\n 'grid-column': `${this._column}`,\r\n 'grid-column-span': `${columnEnd - this._column}`,\r\n 'grid-area': `${this._row} / ${this._column} / ${rowEnd} / ${columnEnd}`\r\n };\r\n\r\n result['justify-self'] = GridItem._horizontalAlignmentToHtmlGrid(this._horizontalAlignment);\r\n result['align-self'] = GridItem._verticalAlignmentToHtmlGrid(this._verticalAlignment);\r\n\r\n if (this._horizontalAlignment == HorizontalAlignment.Stretch) {\r\n result['width'] = 'unset';\r\n }\r\n else {\r\n result['max-width'] = '100%';\r\n }\r\n\r\n if (this._verticalAlignment == VerticalAlignment.Stretch) {\r\n result['height'] = 'unset';\r\n }\r\n else {\r\n result['max-height'] = '100%';\r\n }\r\n\r\n return result;\r\n }\r\n else {\r\n return {};\r\n }\r\n }\r\n\r\n private static _horizontalAlignmentToHtmlGrid(horizontalAlignment: HorizontalAlignment): string {\r\n if (horizontalAlignment == HorizontalAlignment.Stretch) {\r\n return 'stretch';\r\n } \r\n else if (horizontalAlignment == HorizontalAlignment.Left) {\r\n return 'self-start';\r\n } \r\n else if (horizontalAlignment == HorizontalAlignment.Right) {\r\n return 'self-end';\r\n } \r\n else if (horizontalAlignment == HorizontalAlignment.Center) {\r\n return 'center';\r\n }\r\n\r\n throw new TypeError('horizontalAlignment invalid');\r\n }\r\n\r\n private static _verticalAlignmentToHtmlGrid(verticalAlignment: VerticalAlignment): string {\r\n if (verticalAlignment == VerticalAlignment.Stretch) {\r\n return 'stretch';\r\n } \r\n else if (verticalAlignment == VerticalAlignment.Top) {\r\n return 'self-start';\r\n } \r\n else if (verticalAlignment == VerticalAlignment.Bottom) {\r\n return 'self-end';\r\n } \r\n else if (verticalAlignment == VerticalAlignment.Center) {\r\n return 'center';\r\n }\r\n\r\n throw new TypeError('verticalAlignment invalid');\r\n }\r\n\r\n @JsonProperty({ className: 'GridItem', name: 'row', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('row', { type: Number, required: false, default: 1 })\r\n public _row: number;\r\n\r\n @JsonProperty({ className: 'GridItem', name: 'column', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('column', { type: Number, required: false, default: 1 })\r\n public _column: number;\r\n\r\n @JsonProperty({ className: 'GridItem', name: 'rowSpan', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('rowSpan', { type: Number, required: false, default: 1 })\r\n public _rowSpan: number;\r\n\r\n @JsonProperty({ className: 'GridItem', name: 'columnSpan', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('columnSpan', { type: Number, required: false, default: 1 })\r\n public _columnSpan: number;\r\n\r\n @JsonProperty({ className: 'GridItem', name: 'horizontalAlignment', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'HorizontalAlignment'})\r\n @PropSyncWithInternal('horizontalAlignment', { type: Number, required: false, default: HorizontalAlignment.Stretch })\r\n public _horizontalAlignment: HorizontalAlignment;\r\n\r\n @JsonProperty({ className: 'GridItem', name: 'verticalAlignment', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'VerticalAlignment'})\r\n @PropSyncWithInternal('verticalAlignment', { type: Number, required: false, default: VerticalAlignment.Stretch })\r\n public _verticalAlignment: VerticalAlignment;\r\n\r\n\r\n public get _gridItemMixin(): boolean {\r\n return true;\r\n }\r\n}\r\n","import { Component, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'ObservableObject',\r\n})\r\nexport class ObservableObject extends Vue {\r\n public created(): void {\r\n const recomputed = Object.create(null)\r\n const watchers = (this as any)._computedWatchers; // Warning: Vue internal\r\n\r\n if (!watchers) {\r\n return;\r\n }\r\n\r\n for (const key in watchers) {\r\n let watcher = watchers[key];\r\n const original = watcher.getter;\r\n recomputed[key] = true;\r\n watcher.getter = (vm: Vue) => (recomputed[key], original.call(vm, vm));\r\n }\r\n\r\n this.$raisePropertyChanged = (key: string) => recomputed[key] = !recomputed[key];\r\n\r\n Vue.observable(recomputed);\r\n }\r\n}\r\n","import GridItemMixin from 'Framework/Components/mixins/GridItem';\r\nimport { ObservableObject } from 'Framework/Components/mixins/ObservableObject';\r\nimport { BorderStyle, editorBrowsable, EditorBrowsableState, JsonProperty, PropSyncWithInternal, Serializable, Visibility } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Mixins, Prop, PropSync, Ref, Vue, Watch } from 'vue-property-decorator';\r\n\r\ndeclare module 'vue/types/vue' {\r\n interface Vue {\r\n $debounce(func: Function, wait: number, options?: { leading: boolean, trailing: boolean, maxWait: number });\r\n $throttle(func: Function, wait: number, options?: { leading: boolean, trailing: boolean });\r\n $raisePropertyChanged(propertyName: string): boolean;\r\n }\r\n}\r\n\r\n/** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */\r\n\r\n@Serializable()\r\n@Component({\r\n name: 'x-ui-element',\r\n})\r\nclass UIElement extends Mixins(GridItemMixin, ObservableObject) {\r\n @Watch('_dataContext', { immediate: true })\r\n protected _onDataContextChanged(newValue: T, oldValue: T): void {\r\n\r\n }\r\n\r\n public get computedStyle(): any {\r\n let style = { ...this.gridItemStyle() };\r\n\r\n if (this._zIndex) {\r\n style['z-index'] = this._zIndex;\r\n }\r\n\r\n if (this._visibility == Visibility.Hidden) {\r\n style['visibility'] = 'hidden';\r\n }\r\n else if (this._visibility == Visibility.Collapsed) {\r\n style['display'] = 'none';\r\n }\r\n\r\n if (this._minWidth) {\r\n style['min-width'] = `${this._minWidth}px`;\r\n }\r\n if (this._width) {\r\n style['width'] = `${this._width}px`;\r\n }\r\n if (this._maxWidth) {\r\n style['max-width'] = `${this._maxWidth}px`;\r\n }\r\n\r\n if (this._minHeight) {\r\n style['min-height'] = `${this._minHeight}px`;\r\n }\r\n if (this._height) {\r\n style['height'] = `${this._height}px`;\r\n }\r\n if (this._maxHeight) {\r\n style['max-height'] = `${this._maxHeight}px`;\r\n }\r\n\r\n if (this._opacity) {\r\n style['opacity'] = this._opacity;\r\n }\r\n\r\n if (this._background) {\r\n style['background-color'] = this._background;\r\n }\r\n\r\n if (this._foreground) {\r\n style['color'] = this._foreground;\r\n }\r\n\r\n if (this._marginTop) {\r\n style['margin-top'] = `${this._marginTop}px`;\r\n }\r\n if (this._marginBottom) {\r\n style['margin-bottom'] = `${this._marginBottom}px`;\r\n }\r\n if (this._marginLeft) {\r\n style['margin-left'] = `${this._marginLeft}px`;\r\n }\r\n if (this._marginRight) {\r\n style['margin-right'] = `${this._marginRight}px`;\r\n }\r\n\r\n if (this._paddingTop) {\r\n style['padding-top'] = `${this._paddingTop}px`;\r\n }\r\n if (this._paddingBottom) {\r\n style['padding-bottom'] = `${this._paddingBottom}px`;\r\n }\r\n if (this._paddingLeft) {\r\n style['padding-left'] = `${this._paddingLeft}px`;\r\n }\r\n if (this._paddingRight) {\r\n style['padding-right'] = `${this._paddingRight}px`;\r\n }\r\n\r\n if (this._borderTopSize) {\r\n style['border-top-width'] = `${this._borderTopSize}px`;\r\n }\r\n if (this._borderBottomSize) {\r\n style['border-bottom-width'] = `${this._borderBottomSize}px`;\r\n }\r\n if (this._borderLeftSize) {\r\n style['border-left-width'] = `${this._borderLeftSize}px`;\r\n }\r\n if (this._borderRightSize) {\r\n style['border-right-width'] = `${this._borderRightSize}px`;\r\n }\r\n\r\n if (this._borderTopColor) {\r\n style['border-top-color'] = this._borderTopColor;\r\n }\r\n if (this._borderBottomColor) {\r\n style['border-bottom-color'] = this._borderBottomColor;\r\n }\r\n if (this._borderLeftColor) {\r\n style['border-left-color'] = this._borderLeftColor;\r\n }\r\n if (this._borderRightColor) {\r\n style['border-right-color'] = this._borderRightColor;\r\n }\r\n\r\n if (this._borderTopStyle) {\r\n style['border-top-style'] = this._borderTopStyle;\r\n }\r\n if (this._borderBottomStyle) {\r\n style['border-bottom-style'] = this._borderBottomStyle;\r\n }\r\n if (this._borderLeftStyle) {\r\n style['border-left-style'] = this._borderLeftStyle;\r\n }\r\n if (this._borderRightStyle) {\r\n style['border-right-style'] = this._borderRightStyle;\r\n }\r\n\r\n return style;\r\n }\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'isVisible', type: Boolean })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Boolean' })\r\n public get _isVisible(): boolean {\r\n return this._visibility == Visibility.Visible;\r\n }\r\n\r\n public set _isVisible(value: boolean) {\r\n this._visibility = value \r\n ? Visibility.Visible \r\n : Visibility.Collapsed;\r\n\r\n this.$emit('update:isVisible', value);\r\n this.$emit('update:_isVisible', value);\r\n this.$emit('property-changed', this, 'isVisible', value);\r\n }\r\n\r\n @Prop()\r\n public readonly dataContext: T;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'dataContext', type: Object })\r\n @editorBrowsable({ groupName: 'Commons', editorBrowsableState: EditorBrowsableState.Never })\r\n public get _dataContext(): T {\r\n let dc = this.dataContext || this['internals']['dataContext'] || null;\r\n\r\n if (!dc && this.$parent instanceof UIElement) {\r\n dc = this.$parent._dataContext;\r\n }\r\n\r\n return dc;\r\n }\r\n\r\n public set _dataContext(value: T) {\r\n this.$set(this['internals'], 'dataContext', value);\r\n\r\n this.$emit('update:dataContext', value);\r\n this.$emit('update:_dataContext', value);\r\n this.$emit('property-changed', this, 'dataContext', value);\r\n }\r\n\r\n @Prop({ type: Boolean, default: true })\r\n public readonly isVisible: boolean;\r\n\r\n @Watch('isVisible')\r\n private _onIsVisiblePropertyChanged(newValue: boolean, oldValue: boolean): void {\r\n this._isVisible = newValue;\r\n }\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'name', type: String })\r\n @editorBrowsable({ groupName: 'Commons'})\r\n @PropSyncWithInternal('name', { type: String, required: false, default: null })\r\n public _name: string;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'zIndex', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('zIndex', { type: Number, required: false, default: null })\r\n public _zIndex: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'visibility', type: Number })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Visibility'})\r\n @PropSyncWithInternal('visibility', { type: Number, required: false, default: Visibility.Visible })\r\n public _visibility: Visibility;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'minWidth', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('minWidth', { type: Number, required: false, default: null })\r\n public _minWidth: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'width', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('width', { type: Number, required: false, default: null })\r\n public _width: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'maxWidth', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('maxWidth', { type: Number, required: false, default: null })\r\n public _maxWidth: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'minHeight', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('minHeight', { type: Number, required: false, default: null })\r\n public _minHeight: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'height', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('height', { type: Number, required: false, default: null })\r\n public _height: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'maxHeight', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('maxHeight', { type: Number, required: false, default: null })\r\n public _maxHeight: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'opacity', type: Number })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Number'})\r\n @PropSyncWithInternal('opacity', { type: Number, required: false, default: null })\r\n public _opacity: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'background', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Color'})\r\n @PropSyncWithInternal('background', { type: String, required: false, default: null })\r\n public _background: string;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'foreground', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Color'})\r\n @PropSyncWithInternal('foreground', { type: String, required: false, default: null })\r\n public _foreground: string;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'marginTop', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('marginTop', { type: Number, required: false, default: null })\r\n public _marginTop: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'marginBottom', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('marginBottom', { type: Number, required: false, default: null })\r\n public _marginBottom: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'marginLeft', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('marginLeft', { type: Number, required: false, default: null })\r\n public _marginLeft: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'marginRight', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number'})\r\n @PropSyncWithInternal('marginRight', { type: Number, required: false, default: null })\r\n public _marginRight: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'paddingTop', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number', editorBrowsableState: EditorBrowsableState.Never })\r\n @PropSyncWithInternal('paddingTop', { type: Number, required: false, default: null })\r\n public _paddingTop: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'paddingBottom', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number', editorBrowsableState: EditorBrowsableState.Never })\r\n @PropSyncWithInternal('paddingBottom', { type: Number, required: false, default: null })\r\n public _paddingBottom: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'paddingLeft', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number', editorBrowsableState: EditorBrowsableState.Never })\r\n @PropSyncWithInternal('paddingLeft', { type: Number, required: false, default: null })\r\n public _paddingLeft: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'paddingRight', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'Number', editorBrowsableState: EditorBrowsableState.Never })\r\n @PropSyncWithInternal('paddingRight', { type: Number, required: false, default: null })\r\n public _paddingRight: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderTopSize', type: Number })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Number'})\r\n @PropSyncWithInternal('borderTopSize', { type: Number, required: false, default: null })\r\n public _borderTopSize: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderTopColor', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Color'})\r\n @PropSyncWithInternal('borderTopColor', { type: String, required: false, default: null })\r\n public _borderTopColor: string;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderTopStyle', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'BorderStyle'})\r\n @PropSyncWithInternal('borderTopStyle', { type: String, required: false, default: null })\r\n public _borderTopStyle: BorderStyle;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderBottomSize', type: Number })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Number'})\r\n @PropSyncWithInternal('borderBottomSize', { type: Number, required: false, default: null })\r\n public _borderBottomSize: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element',name: 'borderBottomColor', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Color'})\r\n @PropSyncWithInternal('borderBottomColor', { type: String, required: false, default: null })\r\n public _borderBottomColor: string;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderBottomStyle', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'BorderStyle'})\r\n @PropSyncWithInternal('borderBottomStyle', { type: String, required: false, default: null })\r\n public _borderBottomStyle: BorderStyle;\r\n\r\n @JsonProperty({ className: 'x-ui-element',name: 'borderLeftSize', type: Number })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Number'})\r\n @PropSyncWithInternal('borderLeftSize', { type: Number, required: false, default: null })\r\n public _borderLeftSize: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderLeftColor', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Color'})\r\n @PropSyncWithInternal('borderLeftColor', { type: String, required: false, default: null })\r\n public _borderLeftColor: string;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderLeftStyle', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'BorderStyle'})\r\n @PropSyncWithInternal('borderLeftStyle', { type: String, required: false, default: null })\r\n public _borderLeftStyle: BorderStyle;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderRightSize', type: Number })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Number'})\r\n @PropSyncWithInternal('borderRightSize', { type: Number, required: false, default: null })\r\n public _borderRightSize: number;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderRightColor', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'Color'})\r\n @PropSyncWithInternal('borderRightColor', { type: String, required: false, default: null })\r\n public _borderRightColor: string;\r\n\r\n @JsonProperty({ className: 'x-ui-element', name: 'borderRightStyle', type: String })\r\n @editorBrowsable({ groupName: 'Appearence', template: 'BorderStyle'})\r\n @PropSyncWithInternal('borderRightStyle', { type: String, required: false, default: null })\r\n public _borderRightStyle: BorderStyle;\r\n\r\n public static readonly Bus: Vue = new Vue();\r\n}\r\n\r\nexport { Component, Mixins, Prop, PropSync, PropSyncWithInternal, Ref, UIElement, Vue, Watch };\r\n\r\n","export async function delayAsync(timeout: number): Promise {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, timeout);\r\n });\r\n}\r\n\r\nconst isFulfilled = (input: PromiseSettledResult): input is PromiseFulfilledResult =>\r\n input.status === 'fulfilled'\r\n\r\nexport type SettledResult = {\r\n values: Array,\r\n reasons: Array\r\n}\r\n\r\nexport function partitionPromiseResults(\r\n results: Array>\r\n): SettledResult {\r\n const result: SettledResult = {\r\n values: [],\r\n reasons: []\r\n };\r\n\r\n return results.reduce((acc, r) => {\r\n if (isFulfilled(r)) {\r\n acc.values.push(r.value);\r\n }\r\n else {\r\n acc.reasons.push(r.reason);\r\n }\r\n return acc;\r\n }, result);\r\n}\r\n\r\nexport class CancellationTokenSource {\r\n public constructor() {\r\n this.token = new CancellationToken(this);\r\n this._isCancellationRequested = false;\r\n }\r\n\r\n public cancel(): void {\r\n this._isCancellationRequested = true;\r\n }\r\n\r\n public get isCancellationRequested(): boolean {\r\n return this._isCancellationRequested;\r\n }\r\n\r\n public readonly token: CancellationToken;\r\n\r\n private _isCancellationRequested: boolean;\r\n}\r\n\r\nexport class CancellationToken {\r\n public constructor(source: CancellationTokenSource) {\r\n this._source = source;\r\n }\r\n\r\n public get isCancellationRequested(): boolean {\r\n return this._source.isCancellationRequested;\r\n }\r\n\r\n private readonly _source: CancellationTokenSource;\r\n}\r\n\r\nexport type EventHandler = T extends void ? (sender: any) => void : (sender: any, eventArgs: T) => void;\r\n\r\nexport interface IEvent {\r\n subscribe(handler: EventHandler): void;\r\n unsubscribe(handler: EventHandler): void;\r\n}\r\n\r\nexport class EventDispatcher implements IEvent {\r\n public subscribe(handler: EventHandler): void {\r\n this._handlers.push(handler);\r\n }\r\n\r\n public unsubscribe(handler: EventHandler): void {\r\n this._handlers = this._handlers.filter(h => h != handler);\r\n }\r\n\r\n public dispatch(sender: any, value: T): void {\r\n this._handlers.forEach(h => h(sender, value))\r\n }\r\n\r\n public toEvent(): IEvent {\r\n return this as IEvent;\r\n }\r\n\r\n private _handlers: Array> = [];\r\n}\r\n\r\nexport function getOrAdd(\r\n dictionary: Record,\r\n key: TKey,\r\n valueFactory: (key: TKey) => TValue\r\n): TValue {\r\n if (dictionary.hasOwnProperty(key)) {\r\n return dictionary[key];\r\n }\r\n\r\n const value = valueFactory(key);\r\n dictionary[key] = value;\r\n\r\n return value;\r\n}\r\n","export interface ICookieConsentItem {\r\n name: string,\r\n value: CookieConsentType\r\n}\r\n\r\nexport interface ICookieConfig {\r\n name: string;\r\n domain?: string;\r\n path?: string;\r\n expirationInDays?: number;\r\n sameSite?: 'Lax' | 'Strict' | 'None';\r\n secure?: boolean;\r\n}\r\n\r\nexport enum CookieConsentType {\r\n None = 0,\r\n Deny = 1,\r\n Allow = 2\r\n}\r\n\r\nexport class CookieHelper {\r\n public static getCookies(): Array<{key: string, value: string}> {\r\n return document.cookie\r\n .split(';')\r\n .map(part => {\r\n let [key, value] = part.split('=');\r\n key = key.trim();\r\n\r\n if(value) {\r\n value = decodeURIComponent(value);\r\n }\r\n\r\n return { key, value };\r\n });\r\n }\r\n\r\n public static getCookie(name: string): string {\r\n let cookie = CookieHelper.getCookies()\r\n .find(k => k.key == name)\r\n\r\n return cookie ? cookie.value : null;\r\n }\r\n\r\n public static isCookieExist(name: string): boolean {\r\n return document.cookie\r\n .split(';')\r\n .filter(c => c.trim().startsWith(`${name}=`)).length > 0;\r\n }\r\n\r\n public static getCookiesAsJson(name: string): Array {\r\n let jsonResult = CookieHelper.getCookie(name);\r\n let result: Array = JSON.parse(jsonResult);\r\n\r\n if(jsonResult == null) {\r\n result = [];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public static setCookiesAsJson(value: any, config: ICookieConfig): void {\r\n let jsonValue = encodeURIComponent(JSON.stringify(value));\r\n\r\n let cookie = [\r\n `${config.name}=${jsonValue}`,\r\n `path=${(config.path || '/')}`\r\n ]\r\n\r\n if (config.expirationInDays) {\r\n let expirationDate = new Date();\r\n expirationDate.setDate(expirationDate.getDate() + (config.expirationInDays || 365));\r\n cookie.push(`expires=${expirationDate.toUTCString()}`);\r\n }\r\n\r\n if (config.domain) {\r\n cookie.push(`domain=${config.domain}`);\r\n }\r\n\r\n if (config.sameSite) {\r\n cookie.push(`SameSite=${config.sameSite}`);\r\n }\r\n\r\n if (config.secure) {\r\n cookie.push('Secure');\r\n }\r\n\r\n document.cookie = cookie.join(';');\r\n }\r\n}\r\n","export class EnumHelper {\r\n public static hasFlag(enumToVerify: number, flagMask: number): boolean {\r\n return (enumToVerify & flagMask) == flagMask;\r\n }\r\n\r\n public static hasOneOfFlags(enumToVerify: number, flagMasks: number): boolean {\r\n return (enumToVerify & flagMasks) > 0;\r\n }\r\n\r\n public static enumKeysOfType(e: T): (keyof T)[] {\r\n return Object.keys(e).filter(key => Number.isNaN(Number(key))) as (keyof T)[];\r\n }\r\n\r\n public static extractFlags(enumType: TEnum, value: number): Array {\r\n return EnumHelper.getValues(enumType, false)\r\n .filter(flag => EnumHelper.hasFlag(value, flag));\r\n }\r\n\r\n public static mergeFlags(values: Array): number {\r\n return values.reduce((p, c) => c | p, 0);\r\n }\r\n\r\n public static getValues(enumType: TEnum, includeZeroValue = true): Array {\r\n return Object.values(enumType).filter(value => !isNaN(value) && (includeZeroValue || value != 0));\r\n }\r\n}\r\n","export interface IFileHeader {\r\n extensions: Array;\r\n offset: number;\r\n signatures: Array>;\r\n}\r\n\r\ndeclare global {\r\n interface File {\r\n getFileExtension(): string;\r\n readFileAsync(startingByte: number, endindByte?: number): Promise;\r\n isFileHeaderValidAsync(headerOffset: number, allowedTypesHeaders: Array>): Promise\r\n getFormatSize(): string;\r\n }\r\n}\r\n\r\nFile.prototype.getFileExtension = function (): string {\r\n return FileHelper.getFileExtension(this.name);\r\n}\r\n\r\nFile.prototype.readFileAsync = function (startingByte: number = 0, endindByte?: number): Promise {\r\n return FileHelper.readFileAsync(this, startingByte, endindByte);\r\n}\r\n\r\nFile.prototype.isFileHeaderValidAsync = function (headerOffset: number, allowedTypeSignature: Array>): Promise {\r\n return FileHelper.isFileHeaderValidAsync(this, headerOffset, allowedTypeSignature);\r\n}\r\n\r\nFile.prototype.getFormatSize = function () {\r\n return FileHelper.formatSize(this.size);\r\n}\r\n\r\nexport class FileHelper {\r\n public static async readFileAsync(file: File, startingByte: number = 0, endindByte?: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n let reader = new FileReader();\r\n\r\n reader.onload = () => {\r\n resolve(reader.result as ArrayBuffer);\r\n };\r\n\r\n reader.onerror = reject;\r\n reader.readAsArrayBuffer(file.slice(startingByte, endindByte));\r\n });\r\n }\r\n\r\n public static async isFileHeaderValidAsync(file: File, headerOffset: number, allowedTypesHeaders: Array>): Promise {\r\n let result = await FileHelper.readFileAsync(file, headerOffset, 16);\r\n\r\n let fileIndex = 0;\r\n let headerCopy = [...allowedTypesHeaders];\r\n\r\n while (true) {\r\n if (headerCopy.length <= 0) {\r\n return false;\r\n }\r\n\r\n let byteToCompare = new Uint8Array(result.slice(fileIndex, fileIndex + 1))[0];\r\n\r\n for (let i = headerCopy.length - 1; i >= 0; i--) {\r\n if (headerCopy[i][fileIndex] !== byteToCompare) {\r\n headerCopy.splice(i, 1);\r\n }\r\n }\r\n\r\n fileIndex++;\r\n\r\n if (headerCopy.length == 1 && headerCopy[0].length == fileIndex) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n public static getFileExtension(fileName: string): string {\r\n return fileName.slice((fileName.lastIndexOf('.') - 1 >>> 0) + 1) || null;\r\n }\r\n\r\n public static formatSize(bytesFloat: number): string {\r\n if (bytesFloat < 0) {\r\n return '-- Octets';\r\n }\r\n else if (bytesFloat > FileHelper.size_Eo) {\r\n return (bytesFloat / FileHelper.size_Eo).toFixed(2) + ' Eo';\r\n }\r\n else if (bytesFloat > FileHelper.size_Po) {\r\n return (bytesFloat / FileHelper.size_Po).toFixed(2) + ' Po';\r\n }\r\n else if (bytesFloat > FileHelper.size_To) {\r\n return (bytesFloat / FileHelper.size_To).toFixed(2) + ' To';\r\n }\r\n else if (bytesFloat > FileHelper.size_Go) {\r\n return (bytesFloat / FileHelper.size_Go).toFixed(2) + ' Go';\r\n }\r\n else if (bytesFloat > FileHelper.size_Mo) {\r\n return (bytesFloat / FileHelper.size_Mo).toFixed(2) + ' Mo';\r\n }\r\n else if (bytesFloat > FileHelper.size_Ko) {\r\n return (bytesFloat / FileHelper.size_Ko).toFixed(2) + ' Ko';\r\n }\r\n else {\r\n return `${bytesFloat} Octets`;\r\n }\r\n }\r\n\r\n public static getTypesSignaturesFromExtensions(extensions: Array): Array>> {\r\n let areExtensionsNotValid: boolean = extensions.some(extension =>\r\n !extension.startsWith('.')\r\n );\r\n\r\n if (areExtensionsNotValid) {\r\n throw new Error('Extension should be start with dot (eg: .jpg)');\r\n }\r\n\r\n return FileHelper.fileHeaders.filter(\r\n fileHeader => extensions.some(extension => fileHeader.extensions.includes(extension))\r\n ).map(fileHeader =>\r\n fileHeader.signatures\r\n );\r\n }\r\n\r\n public static async isFileTypeSupportedAsync(file: File, supportedExtensions: Array, headerOffset: number): Promise {\r\n if (!file) {\r\n throw new Error('NullReferenceException: file');\r\n }\r\n\r\n let allowedTypesSignatures: Array>> = FileHelper.getTypesSignaturesFromExtensions(supportedExtensions);\r\n\r\n if (allowedTypesSignatures.length == 0) {\r\n return false;\r\n }\r\n\r\n let signatureVerifications: Array> = allowedTypesSignatures.map(signature => file.isFileHeaderValidAsync(headerOffset, signature));\r\n\r\n let results: Array = await Promise.all(signatureVerifications);\r\n\r\n return results.some(result => result == true);\r\n }\r\n\r\n public static isValidSize(file: File, maxSize: number): boolean {\r\n if (!file) {\r\n throw new Error('NullReferenceException: file');\r\n }\r\n\r\n return file.size <= maxSize;\r\n }\r\n\r\n //https://www.garykessler.net/library/file_sigs.html\r\n public static fileHeaders: Array = [\r\n {\r\n extensions: ['.jpg', '.jpeg'],\r\n offset: 0,\r\n signatures: [\r\n [0xFF, 0xD8]\r\n ]\r\n },\r\n {\r\n extensions: ['.png'],\r\n offset: 0,\r\n signatures: [\r\n [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0A, 0x1A, 0x0A]\r\n ]\r\n },\r\n {\r\n extensions: ['.bmp'],\r\n offset: 0,\r\n signatures: [\r\n [0x42, 0x4D]\r\n ]\r\n },\r\n {\r\n extensions: ['.tiff', '.tif'],\r\n offset: 0,\r\n signatures: [\r\n [0x49, 0x49, 0x2A, 0x00],\r\n [0x4D, 0x4D, 0x00, 0x2A],\r\n [0x4D, 0x4D, 0x00, 0x2B]\r\n ]\r\n },\r\n {\r\n extensions: ['.e57'],\r\n offset: 0,\r\n signatures: [\r\n [0x41, 0x53, 0x54, 0x4d, 0x2d, 0x45, 0x35, 0x37]\r\n ]\r\n },\r\n {\r\n extensions: ['.mp4', '.m4a', '.m4p', '.m4b', '.m4r', '.m4v', '.mov'],\r\n offset: 4,\r\n signatures: [\r\n [0x66, 0x74, 0x79, 0x70, 0x4D, 0x53, 0x4E, 0x56],\r\n [0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6F, 0x6D],\r\n [0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32],\r\n [0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]\r\n ]\r\n },\r\n {\r\n extensions: ['.pdf'],\r\n offset: 0,\r\n signatures: [\r\n [0x25, 0x50, 0x44, 0x46]\r\n ]\r\n }\r\n ]\r\n\r\n public static readonly size_Eo: number = 1152921504606846976.0;\r\n public static readonly size_Po: number = 1125899906842624.0;\r\n public static readonly size_To: number = 1099511627776.0;\r\n public static readonly size_Go: number = 1073741824.0;\r\n public static readonly size_Mo: number = 1048576.0;\r\n public static readonly size_Ko: number = 1024.0;\r\n}\r\n","import { PickingInfo, Vector3 } from '@babylonjs/core';\r\nimport { ICartesianCoordinates, ICoordinates, IPlanCoordinates, ISphericalCoordinates } from 'Framework/Components/Controls/XView/Core';\r\n\r\nexport class MathHelper {\r\n /**\r\n * @throws {ArgumentNullException}\r\n */\r\n public static toCartesianCoordinates(sphericalCoordinates: ISphericalCoordinates): ICartesianCoordinates {\r\n if (!sphericalCoordinates) {\r\n throw new Error('ArgumentNullException');\r\n }\r\n\r\n let theta = sphericalCoordinates.theta;\r\n let phi = sphericalCoordinates.phi;\r\n\r\n let x = Math.cos(phi) * Math.cos(theta);\r\n let y = Math.cos(phi) * Math.sin(theta);\r\n let z = Math.sin(phi);\r\n\r\n return {\r\n x: x,\r\n y: y,\r\n z: z\r\n };\r\n }\r\n\r\n public static toSphericalCoordinates(coordinates: ICartesianCoordinates | PickingInfo): ISphericalCoordinates {\r\n if (coordinates instanceof PickingInfo) {\r\n coordinates = MathHelper.leftHandedToRightHandedCoordinates(coordinates.pickedPoint);\r\n }\r\n\r\n const r = Math.sqrt(coordinates.x ** 2 + coordinates.y ** 2 + coordinates.z ** 2);\r\n\r\n const spherical: ISphericalCoordinates = {\r\n phi: Math.asin(coordinates.z / r),\r\n theta: Math.atan2(coordinates.y, coordinates.x)\r\n };\r\n\r\n return spherical;\r\n }\r\n\r\n public static leftHandedToRightHandedCoordinates(leftHandedCoordinates: ICartesianCoordinates | Vector3): ICartesianCoordinates {\r\n return {\r\n x: leftHandedCoordinates.z,\r\n y: -leftHandedCoordinates.x,\r\n z: leftHandedCoordinates.y\r\n };\r\n }\r\n\r\n public static isCartesianCoordinates(coordinates: ICoordinates): coordinates is ICartesianCoordinates {\r\n return coordinates\r\n && (coordinates as ICartesianCoordinates).x !== undefined\r\n && (coordinates as ICartesianCoordinates).y !== undefined\r\n && (coordinates as ICartesianCoordinates).z !== undefined;\r\n }\r\n\r\n public static isSphericalCoordinates(coordinates: ICoordinates): coordinates is ISphericalCoordinates {\r\n return coordinates\r\n && (coordinates as ISphericalCoordinates).phi !== undefined\r\n && (coordinates as ISphericalCoordinates).theta !== undefined;\r\n }\r\n\r\n public static isPlanCoordinates(coordinates: ICoordinates): coordinates is IPlanCoordinates {\r\n return coordinates\r\n && (coordinates as IPlanCoordinates).x !== undefined\r\n && (coordinates as IPlanCoordinates).y !== undefined\r\n && !('z' in coordinates);\r\n }\r\n\r\n /**\r\n * Computes `m = a mod b` so that 0 ⩽ m < |b| \r\n * @param a\r\n * @param b\r\n */\r\n public static mod(a: number, b: number): number {\r\n const m = ((a % b) + b) % b;\r\n\r\n return m < 0 ? Math.abs(m) : m;\r\n }\r\n}\r\n","export class UrlHelper {\r\n public static getUrlParameter(parameterName: string, url: string = window.location.href): string {\r\n let urlParameters = new URL(url).searchParams;\r\n\r\n return urlParameters.get(parameterName)\r\n ?? urlParameters.get(parameterName.toLowerCase());\r\n }\r\n\r\n public static addUrlParameter(urlString: string, parameterName: string, parameterValue: string, addIfEmpty: boolean = false): string {\r\n let url = new URL(urlString);\r\n\r\n if (addIfEmpty || (parameterValue && parameterValue.length > 0)) {\r\n url.searchParams.append(parameterName, parameterValue);\r\n }\r\n\r\n return url.href;\r\n }\r\n\r\n public static addUrlParameters(url: URL, addIfEmpty: boolean = false, ...parameters: Record[]): URL {\r\n if (parameters) {\r\n for (let param of parameters) {\r\n if (addIfEmpty || (param.Value && param.Value.length > 0)) {\r\n url.searchParams.append(param.Key, param.Value);\r\n }\r\n }\r\n }\r\n\r\n return url;\r\n }\r\n\r\n public static getUrlHashParameter(parameterName: string): any {\r\n parameterName = parameterName.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n let regex = new RegExp('[\\\\?&]' + parameterName + '=([^&#]*)');\r\n let results = regex.exec(location.hash);\r\n\r\n return results === null\r\n ? null\r\n : decodeURIComponent(results[1]);\r\n };\r\n\r\n public static getUrlHashParameters(): { [key: string]: string } {\r\n return Object.fromEntries(new URLSearchParams(location.hash.slice(1)));\r\n }\r\n\r\n public static isValidUrl(url: string): boolean {\r\n try {\r\n const _ = new URL(url);\r\n\r\n return true;\r\n }\r\n catch (error) {\r\n return false;\r\n }\r\n }\r\n\r\n public static isLocalUrl(url: string): boolean {\r\n try {\r\n const urlObj = new URL(url, window.location.origin);\r\n return urlObj.origin === window.location.origin;\r\n }\r\n catch (error) {\r\n return false;\r\n }\r\n }\r\n}\r\n"],"names":["map","webpackAsyncContext","req","webpackAsyncContextResolve","then","id","__webpack_require__","m","e","Error","code","Promise","resolve","o","keys","Object","module","exports","ids","all","slice","render","_vm","this","_h","$createElement","_c","_self","class","isSelected","attrs","name","on","$event","$emit","VImg","staticClass","uriService","getAbsoluteUri","formatUrl","_appContext","_t","_v","_s","staticRenderFns","PanoramaPreview","UIElement","getPreviewUrl","codeCulture","guid","__decorate","Prop","lazyInject","AppContext","injectTypes","Component","component","BreadcrumbItemType","VBreadcrumbs","style","position","computedStyle","breadcrumbItems","scopedSlots","_u","key","fn","VIcon","proxy","ref","item","type","Home","VBreadcrumbsItem","Standard","text","VSelect","currentPanoramaGroup","children","_currentPanorama","_onSelectedPanoramaVersionChange","VListItemAvatar","_uriService","file","links","preview","VList","VoPanoramaBreadcrumb","newValue","currentOrientation","MathHelper","_dataContext","newOrientation","CoordinatesHelper","offset","fov","currentFocale","goToPanoramaVersion","items","_currentMap","push","VersionsList","_panoramas","find","g","assetItemId","parentId","JsonProperty","className","editorBrowsable","groupName","PropSyncWithInternal","required","default","Array","_onAcceptAll","_onDenyAll","_e","CookieConsent","_updateAllCookies","CookieConsentType","consentType","CookieConsent_1","EventName","buttons","localizer","baseTranslationPath","onOk","VContainer","VRow","VCol","errors","VTextField","indexOf","_k","keyCode","apply","arguments","model","value","dataContext","callback","$$v","$set","expression","VoPasswordDialog","BaseDialogBehavior","DialogButton","validatedToken","authenticateForShareAsync","token","password","ex","ApiException","error","components","VoErrorsList","isOkBusy","VForm","preventDefault","isFormPropertyValid","isHttpApiUri","apiUri","platformRules","onTryAutoSignIn","platformName","trim","userName","VCheckbox","VBtn","staticStyle","VDivider","loginProviders","length","_l","provider","index","Name","DisplayName","VoSignInDialog","$debounce","uri","tryAutoSignInAsync","result","_authenticationService","signInAsync","login","QueryException","user","singleSignOnAsync","isAutoSignInFail","onClose","ForbiddenException","message","innerError","target","details","input","UrlHelper","startsWith","lazyInjectStandaloneOnline","AuthenticationService","VCard","height","width","cursor","readonly","zIndex","zoomSnap","mapProvider","zoom","center","maxBounds","maxZoom","minZoom","crs","_onLocationClick","_onMouseMove","_mapReady","contentTemplate","_b","tag","onLoaded","geoSearchOptions","assign","showMarker","itemsSource","filter","p","location","project","projectId","_invertLngLat","_onNavigateTo","direction","thumbnail","assetProject","formatCurrentCoordinates","currentCoordinates","VAlert","translationPath","L","iconRetinaUrl","require","iconUrl","shadowUrl","ExploreMap","_emitLocationChanged","latlng","lat","lng","latitude","longitude","coordinates","geoJsonPoint","window","href","point","leafletMap","mapObject","fitBounds","featurePoint","geometry","ro","ResizeObserver","_","invalidateSize","observe","$el","y","x","centerOnProject","getCenter","getBoundsZoom","Ref","String","Boolean","LMap","LImageOverlay","LMarker","LGeoJson","LTileLayer","LControl","LTooltip","LGeosearch","Vue","displayedErrors","flattenExpression","flatMap","loading","disabled","_onClick","CancelButton","BaseButton","OkButton","dialog","close","props","VSystemBar","VSpacer","canMaximize","dialogOptions","fullscreen","maximize","canRestore","restore","noPadding","$vuetify","breakpoint","mobile","isActionsSlotDisplayed","Custom","Ok","canConfirm","OkCancel","isCancelBusy","onCancel","YesNoCancel","isNoBusy","onNo","isYesBusy","onYes","YesNo","NoButton","YesButton","DialogTemplateRenderless","slotContext","_onOkAsync","_onCancelAsync","_onYesAsync","_onNoAsync","_onCloseAsync","isBusy","isCloseBusy","$scopedSlots","behavior","beforeOkAsync","_close","DialogResult","beforeCancelAsync","beforeYesAsync","beforeNoAsync","beforeCloseAsync","EmptyBehavior","DefaultDialog","VoDialogBase","Number","ItemPresenter","itemsContainerStyle","overflowY","flexWrap","overflowX","horizontalScroll","verticalScroll","toggleOpenClass","isOpened","closeOnBlur","onBlur","Toggle","mounted","defaultValue","element","querySelector","toggleElementId","firstChild","pointerEvents","addEventListener","toggleOpening","scrollToElementOnOpen","$nextTick","scrollIntoView","XGrid","createElement","context","$slots","vnode","componentOptions","Ctor","prototype","hasOwnProperty","GridItem","data","computedGridStyle","columnsDefinition","rowsDefinition","_columnGap","_rowGap","$children","measurementVerification","measurementVerifRegex","XGrid_1","MeasurementVerifRegex","test","columnDefinitionResult","_columnDefinitions","def","split","i","verifiedMeasurement","_columnsCount","rowDefinitionResult","_rowDefinitions","_rowsCount","Serializable","_source","_preview","_showControls","_autoPlay","domProps","_muted","XMediaPlayer","template","webpackContext","webpackContextResolve","UserPermissions","User","permissions","role","constructor","displayName","firstName","lastName","isSignedIn","ExperimentalFeature","ExperimentalFeatures","hasFlag","feature","_loadFeatures","_features","has","setFlag","add","delete","_save","_isLoaded","features","JSON","parse","localStorage","getItem","_key","Set","from","setItem","stringify","MenuStateType","fromLoginResponse","settings","general","availableSocialNetworks","SocialNetworks","isMenuStateOverridable","isThemeOverridable","explore","defaultViewerState","ViewerStateType","isMapVisible","isDefaultViewerStateOverridable","drive","forbiddenExtensions","maxFileSize","allowCreateAccount","allowPasswordReset","allowSelfDelete","dialogs","small","medium","large","auto","isStandalone","standaloneWrapper","dateNow","Date","expiration","removeItem","isDarkTheme","theme","injectable","CoordinateSystem","ManipulationState","SortOptions","AssetItemType","FormType","NavigationType","MapSize","StreetMapType","SearchOption","EventAction","actionName","description","callToAction","regex","linkWithAssetType","parseAction","action","assetItem","toString","isValid","getArguments","_isNativeRegExp","exec","reg","RE2JS","matcher","groupCount","group","eventName","EventActionGroup","actions","super","eventActions","RendererHelper","renderer","undefined","AssetItem","Normal","AssetDirectory","DefaultSmartObjectsDirectory","json","events","isArray","array","v","jsonToObject","StreetMap","fromJson","PanoramaItemLink","FileMap","Navigation","PanoramaVersion","AssetPanoramaVersion","Project","AssetProject","Template","AssetTemplate","Link","AssetLink","Hotspot","AssetHotspot","MapArea","AssetMapArea","File","AssetFile","Directory","ProjectMap","PanoramaGroup","AssetPanoramaGroup","SmartObject","SmartObjectDto","isSystem","_reservedNames","includes","assetFile","state","creationTimeUtc","filePathGuid","taskId","resultId","WorkerTaskState","typeOfBody","typeOfHeader","lastExecutedTimeUtc","assetDirectory","jsonToArray","forEach","c","parent","addChildren","removeChildren","isDefaultSmartObjectDirectory","assetNavigation","navigationType","compassConfiguration","List","sort","a","b","order","assetProjectMap","assetFileMap","isDefault","assetStreetMap","assetLink","fileShares","assetTemplate","assetItemLinkedId","assetPanoramaItemLink","assetPanorama","link","assetHotspot","coordinateSystem","content","assetAssetMapArea","areaCoordinates","assetAssetPanorama","renderType","startOrientation","northOrientation","assetAssetPanoramaGroup","defaultVersionId","hotspots","h","getDefaultPanoramaVersion","currentVersion","panoramaVersions","pv","instance","dataSource","displayPropertyPath","schema","AssetItemSorter","xType","yType","isOrderedAssetItem","localeCompare","isFileMap","isStreetMap","PublicationStatus","tags","Tag","singleifyItemNames","collection","ai","RegExp","maxNumber","child","number","parseInt","groups","isNaN","Math","max","getPanoramaVersionAscendants","filtered","isTypeValid","isEmptyDirectory","FileType","Permission","ShareType","Guid","emptyGuid","Exception","ArgumentNullException","parameterName","NotSupportedException","NotImplementedException","RangeException","minimum","maximum","constraint","TextureType","messages","flatMessages","d","reduce","UnauthorizedException","NotFoundException","statusCode","FileSelectionType","DrivePermissions","GroupPermissions","RolePermissions","PlatformPermissions","SubscriptionPermissions","ProjectPermissions","SettingPermissions","AnalyticPermissions","DomainNameSystemPermissions","SystemInformationPermissions","IdentityProviderPermissions","AuditLogPermissions","TagPermissions","WorkerPermissions","IconPermissions","SmartObjectPermissions","BindingMode","Datasource","datasource","of","OrderedPanorama","Author","author","picture","pictureUrl","findPanoramaFileFromAssetId","assetId","datasources","findAssetFileFromAssetId","findAssetFileFromAssetFolderId","basePath","rating","thumbnailUrl","publicationTimeUtc","views","layout","waypointIds","panorama","level","panoGroup","navigation","maps","projectMap","assetMapArea","fileMap","mapLocation","streetMap","orderedPanorama","ExploreService","appContext","httpClient","responseHandler","_httpClient","_responseHandler","idProject","url","Routes","handleResponseAsync","getAsync","response","ok","jsonResult","queryError","theta","phi","fromAssetItemId","toAssetItemId","filters","to","reference","postData","postAsync","statusText","page","pageSize","sortBy","toLowerCase","userId","searchText","filterType","maxPageSize","queryData","_searchResponseAsync","nextPageLink","found","nextLink","hasMoreResults","__param","HttpClient","FileUploader","files","onUploadedFileAsync","isCanceled","filesToUpload","f","hasError","results","uploadFileAsync","cancelUpload","console","log","addFile","chunkedFile","ChunkedFile","removeFile","findIndex","cf","fileToBeUploaded","splice","clear","guids","postFormDataAsync","fileGuids","status","jsonResponse","uploadCompleted","uploadChunckAsync","uploadChunkInternalAsync","currentChunk","fileChunck","retryCount","maxRetries","FileUploader_1","wait","retryAfterSeconds","fileGuid","chunkIndex","chunk","fileChunk","ms","r","setTimeout","uniqueId","_uniqueId","_fileToBeUploaded","_name","_size","size","_guid","_numberOfBlocks","ceil","blockLength","_currentChunk","_status","_retryCount","_hasError","onHasErrorChanged","numberOfBlocks","start","end","onProgressChanged","progress","min","_requestInit","credentials","headers","Headers","relativeUri","baseUri","options","initRequest","_initializeInitRequest","params","URLSearchParams","parameter","parameterArrayItem","append","queryString","_fetch","postAsJsonAsync","putAsJsonAsync","putAsync","deleteAsJsonAsync","deleteAsync","keepAlive","formData","asFormData","includeNullValues","mapping","antiForgeryToken","method","body","keepalive","entries","set","HttpClient_1","_jsonContentHeader","buildUri","urlJoin","fetch","bearerToken","_bearerToken","_antiForgeryToken","LocalizerService","locale","getTemplateString","JSONPath","path","preventEval","wrap","localizeDate","date","moment","localize","rawString","getISODate","toISOString","substr","getISOTime","utcOffset","LocalizerServiceStandalone","Api","Platforms","Base","Run","Stop","Logo","Get","Settings","Drive","Security","Login","Dns","Edit","Subscriptions","Delete","IdentityProviders","Create","TestLdap","SynchronizeLdap","Agents","Agent","Workers","Worker","Tasks","WorkerState","ServicesState","ServiceState","Restart","Services","Mail","Test","MailProviders","Countries","Genders","Languages","Themes","Notifications","Roles","Tags","Search","Items","Item","Symlinks","Projects","Assets","Asset","Children","Templates","Thumbnail","Types","Imports","ScanExist","ReadScanAt","Standalone","Export","Published","ChangeOwner","Graph","WaypointGraph","Waypoints","Waypoint","Edges","Edge","Audits","Logs","Users","Avatar","Profile","Groups","FilePermissions","shares","Import","Public","Group","Members","Shares","Explore","Authentication","SingleSignOn","Share","Account","Me","Token","Tokens","Videos","Video","AddView","Comments","SmartObjects","LookupProperty","SmartObjectDefinitions","SmartObjectDefinition","RootCategory","Category","Categories","GeoRouting","JsonSchema","PlatformService","paginationResult","platformId","logo","platformIds","subscriptionIds","driveSettings","queryResult","subscriptionId","viewModel","identityProviderIds","identityProviderId","sortOrder","domainNameSystemIds","addDomainViewModel","dnsId","editDomainViewModel","UriService","_absoluteUriBehavior","parameters","getBaseUri","getAbsoluteUriAsync","AccountService","search","tokenId","keyName","tokenIds","handleErrorsAsync","email","queryException","AuditService","onRedirect","redirected","rememberMe","SearchFilesViewModel","currentDirectoryGuid","DriveService","orderBy","parentGuid","destinationDirectory","onCreateFileAfterUploadCallbackFactory","parentDirectory","directoryGuid","async","addFileAsync","onReplaceFileAfterUploadCallbackFactory","fileToReplaceGuid","replaceFileAsync","onValidateServerSideCallbackFactory","validationResults","validateFilesAsync","vr","fileName","selectedFile","identityIds","allowEdit","expireDateAfterDays","fileId","shareIds","groupId","fileUploadedGuid","patchAsJsonAsync","op","chunckedFile","createFileResult","createFile","directoryName","currentDirectoryId","searchFiles","inputSearchText","pageNumber","resultPerPage","getFiles","nextSearchPageLink","sourceFiles","folderId","destination","fileSharesIds","permissionsIds","directory","currentDirectory","listFileOfType","fv","selectedFiles","newName","fileIds","downloadSelectedFiles","form","document","setAttribute","appendChild","submit","removeChild","FolderId","tagNames","t","symlinkInput","CodeCulture","SearchText","OrderBy","Direction","Filter","IconService","getRecentlyUsedIcons","IconService_1","recentlyUsedLocalStorageKey","addRecentlyUsedIcon","icon","icons","unshift","recentlyUsedMaxSize","pop","IdentityService","includeSystem","addGroupViewModel","editGroupViewModel","groupIds","identitiesIds","userGuid","createUserViewModel","userIds","_buildSearchUrl","roleIds","actionType","deleteRoleViewModel","notificationsUser","resetPasswordType","notifyUser","generateType","generatedPassword","configuration","banner","get","editLoginViewModel","editPasswordViewModel","exportUsersCsv","JsonSchemaService","jsonSchemaId","endpoint","queryParameters","inputSchema","PasswordValidationService","isValidLength","isValidNumber","isValidCaps","isSamePassword","confirmPassword","PdfService","OnlineAbsoluteUriBehavior","templateName","blob","downloadPdf","pdfUrl","download","click","pdf","generatePdfAsync","URL","createObjectURL","ProjectService","driveService","_driveService","license","publicationStatus","viewCounter","owner","newProject","newTemplate","editProjectThumbnail","ProjectService_1","responseToProject","responseToTagProject","searchTagsAsync","searchOption","assetIds","jsonItem","assetPanoramaGroup","doImportAllPanoramas","assetParentId","importAllPanorama","clonedModel","clone","assets","assetItems","assetItemIds","destinationAssetItemId","navigationFolder","newMapItem","fileUploader","uploadFiles","uploadFilesAsync","onCreateFileMapAfterUploadCallbackFactory","addNewStreetMap","onCreateAssetFileAfterUploadCallbackFactory","assetParent","onUploadedFile","nameWithoutExtension","addNewAssets","onFileUploadedCallbackFactory","onCreateImportAfterUploadCallbackFactory","createImportAsync","newFileMap","onCreatedFile","updateProjectLocation","join","deleteThumbnail","source","patch","updateProjectPublicationStatus","updateItem","query","updateItems","projectIds","projectTypes","typeIds","templateIds","templateId","tempalteId","original","updated","JsonPatch","typeId","importFiles","df","option","newOwnerId","route","parsed","gexf","respectInputGraphType","updateEachNodeAttributes","attributes","mapId","$type","z","waypointId","sourceId","targetId","SettingService","mailSettings","SmartObjectService","smartObjectId","expand","$expand","arg","smartObject","smartObjectInput","TagService","tagIds","VideoService","tagService","_tagService","videoIds","videoId","setTagsAsync","_handleSearchResponseAsync","paginatedResult","WorkerService","workerId","tasksStatus","servicesIds","startTime","endTime","serviceId","addWorkerViewModel","agentId","BasePage","buttonText","timeout","domain","expirationInDays","sameSite","secure","beforeMount","onShowToastAsync","_initializeCookieConsent","_logo","$refs","onload","onLogoLoaded","destroy","vuetifyOption","mainDiv","getElementById","pageIdentifier","dataset","internals","substring","pageType","BasePage_1","_pages","extends","pageTypeLoader","typeLoaded","Initialize","vuetify","vmDefinition","el","vm","Symbol","iterator","attr","attributeName","camelize","nodeValue","str","replace","camelizeRE","toUpperCase","hyphenateRE","localizerService","lang","locales","current","getUrlParameter","getUrlHashParameter","getUrlHashParameters","history","replaceState","loadTranslationAsync","ConfigureVuetifyLocalizer","showToastAsync","toastOptions","_selectToastIcon","isToastOpen","args","srcElement","contentDocument","getComputedStyle","documentElement","textColor","dark","setProperty","getPropertyValue","partnerServices","ps","_updateCookiesAsync","CookieHelper","cookieConsentConfig","$raisePropertyChanged","oldValue","changeCultureAsync","themes","_themes","light","removeEventListener","_onMenuStateChanged","drawer","isDrawerOpenByDefault","isLoggedIn","menuState","isMobileOrTabletDevice","homePageLink","homePage","cookieConsents","areCookiesAccepted","primary","secondary","accent","info","success","warning","Watch","immediate","isDirectoryEntry","entry","isDirectory","CordovaFileError","cause","FileStorageHelper","fileSystem","_fileSystemEntryPoint","_fs","_getFileSystemAsync","LocalFileSystem","PERSISTENT","cordova","dataDirectory","root","toURL","cacheDirectory","applicationDirectory","origin","pathname","lastIndexOf","isFileExistsAsync","reject","resolveLocalFileSystemURL","getEntriesAsync","subEntry","remove","reader","createReader","done","_getEntriesAsync","fileHelper","directoryReader","readEntries","getFileEntryAsync","FileError","SYNTAX_ERR","NOT_FOUND_ERR","directoryPath","directories","createDirectoryAsync","getDirectory","create","exclusive","directoryEntry","folder","override","filePath","fullPath","fileEntry","getFile","mode","_readFileEntryAsync","FileReader","onloadend","readAsText","readAsArrayBuffer","Root","w","initPersistentFileSystem","_persistentFileQuotaByteSize","requestFileSystem","fs","Blob","_writeFileFromBlobAsync","ReadableStream","_writeFileFromReadableStreamAsync","ReadableStreamDefaultReader","_writeFileFromReadableStreamReaderAsync","getReader","nextChunk","read","writer","_getFileWriterAsync","_writeAsync","buffer","byteOffset","byteLength","createWriter","fw","seek","onerror","event","onwriteend","ev","write","getPdfUrl","cultureName","getVideoUrl","getPanoramaUrl","getImageUrl","quality","getDeepZoomImageConfigurationUrl","getPanoramaMobileUrl","getIconForItem","open","ProjectAssetHotspot","ProjectAssetPanoramaVersion","getNavigationIcon","getFileIcon","fileType","extension","getIconColorForItem","color","makeLocalHotspot","globalHotspot","destinationVersion","ExploreAssetHotspot","ExploreAssetPanoramaVersion","alignGlobalHotspotCoordinates","hotspot","oldOrigin","newOrigin","getImageSizeAsync","parser","XMLParser","ignoreAttributes","jObj","Image","Size","PI","ApiExceptionFactory","fromProblemDetails","problemDetails","title","detail","ResponseHandler","apiExceptionFactory","_apiExceptionFactory","VisonHttpClient","Stack","_currentItem","_list","currentItem","VDialogService","controller","modalComponent","delayAsync","Dialog","_dialogsStack","resolver","VDialogService_1","DEFAULT_OPTIONS","defaultResult","dialogResult","modalName","extendOptions","isDialogOpened","$root","firstElementChild","__vue__","$this","dynamicDialog","vDialogProps","contentClass","persistent","fullScreen","scrollable","provide","$data","$mount","$destroy","_isDialogOpened","IconProvider","getIconInfo","iconParts","iconGroup","iconName","textureType","TextureTypes","iconInfo","animation","nRows","nCols","frameRate","startFrame","endFrame","TokenValidator","dialogService","authenticationService","_dialogService","_rawToken","operation","TokenExpiredErrorCode","_validatedToken","_password","PasswordNeededErrorCode","_passwordDialogPromise","_askPasswordAsync","dialogContext","openAsync","UriServiceReactive","getAbsoluteUriReactive","reactiveUri","isLoading","VisonUriService","getWebUri","uriSchema","organization","_getRelativeUri","getApiUri","isDedicatedPlatform","organizationName","serviceProvider","Container","standaloneOnlineServiceProvider","createChild","lazyInjectNamed","getDecorators","bind","toDynamicValue","appContextBuilder","information","manifest","inSingletonScope","toSelf","inRequestScope","container","OfflineAbsoluteUriBehavior","persistentFolder","ctx","inTransientScope","toFactory","ShowToastMixin","showToast","toastArgs","Vuetify","VApp","VMain","VTreeview","VTabs","VTab","VTabsItems","VTabItem","VTabsSlider","VProgressLinear","VSlider","VMenu","VExpansionPanel","VDataIterator","VDataTable","VEditDialog","VTableOverflow","VPagination","VListItem","VListItemGroup","VListItemTitle","VListItemContent","VListItemAction","VNavigationDrawer","VAppBar","VAppBarNavIcon","VListGroup","VDialog","VCardTitle","VCardText","VCardActions","VToolbar","VToolbarTitle","VToolbarItems","VSwitch","VRating","VHover","VAvatar","VTooltip","VSnackbar","VProgressCircular","VAutocomplete","VExpandTransition","VOverflowBtn","VOverlay","VListItemIcon","VChip","VSimpleTable","VColorPicker","VSkeletonLoader","VBtnToggle","VCardSubtitle","VListItemSubtitle","VRadioGroup","VRadio","VExpansionPanels","VExpansionPanelHeader","VExpansionPanelContent","VFileInput","VTimeline","VTimelineItem","VTextarea","VCarousel","VCarouselItem","VFadeTransition","VSubheader","defaultTranslator","iconfont","values","waypoint","waypointEdge","waypointEdgeNoTarget","customProperties","ModalDialog","onMaximize","onRestore","BaseDialogBehaviorMixin","Mixins","Provide","Inject","AbsoluteUriBehavior","urlString","_urlJoin","searchParams","_persistentFolder","isFileScheme","indexOfQueryParameters","debug","IDialogService","for","IComponent","IVisonUriService","IPlayerContext","IIconProvider","ISmartObjectService","IResponseHandler","TokenValidatorFactory","IIconService","IJsonSchemaService","VCombobox","selectedItems","searchResults","hasSearchResults","_onSelectionChanged","onDebounceSearchTag","searchTag","_onRemoveTag","Tagger","onSearchTag","newSelection","v1","i1","_tagComparator","comboBox","internalSearch","tagA","tagB","tagNameA","tagNameB","fileIcon","onStatusChanged","uploadStatusEnumeration","uploadStatus","_formatFileEntrySize","_formatTotalSize","round","isUploading","UploadFileEntry","UploadStatus","pending","fileProgress","fileSize","FileHelper","bytesFloat","_onProgressionChanged","uploading","uploaded","_onErrorChanged","failed","transformScale","fovPath","parsedConfiguration","arcBackground","arcBorder","arcBorderThickness","scale","transformRotate","compassX","compassY","baseArcBackground","baseArcBorder","baseArcBorderThickness","Compass","_onCurrentOrientationChanged","currentNorth","atan2","rotation","north","anglePoint","_radianToCartesian","refPoint","radius","angle","cos","sin","ThumbnailUrl","FileIcon","FilePreview","HasThumbnail","ApplicationType","isMiniVariant","_onClickLocale","copyright","informationalVersion","drawerItem","isSpa","titleKey","VBadge","drawerSubItem","_onLogOffAsync","_onOpenSignInDialogAsync","SbsDrawer","allowRegister","currentUri","encodeURIComponent","_accessIsAllowed","userPermissions","permissionFlags","permissionFlag","EnumHelper","administratorPortal","profile","requiredPlugins","permissionType","isSignInRequired","availableIn","Web","Both","filterItem","isAvailableMenuItem","every","plugin","subscriptionPlugins","isEnabled","userPermission","WrapPanel","verticalContentAlignmentValue","horizontalContentAlignmentValue","orientationValue","verticalContentAlignment","VerticalAlignment","horizontalContentAlignment","HorizontalAlignment","orientation","Orientation","defineProperty","install","vue","componentKey","Transform","translation","PointCloud","global","transform","ScanInfo","rows","columns","scanPosition","scanOrientation","totalPoints","panoramaWidth","panoramaHeight","widthRatio","heightRatio","jsonValue","si","BinaryHeader","version","sizeOfHeader","scanInfo","headerOffset","fileVersionByteSize","sizeOfHeaderByteSize","BinaryScanReader","_buffer","DataView","_header","_readHeader","readValueAt","row","col","_sizeOfInt32","_bufferPosition","_readInt32","localPoint","Vector3","axis","rx","ry","rz","globalRotation","Matrix","globalTranslation","tx","ty","tz","fileVersion","rawHeader","_readBytes","jsonHeader","_deserializeAsJson","header","createfromJson","getInt32","endOfPosition","bytes","Int8Array","_convertBytesToString","fromCharCode","rawJson","rawJsonStringified","toCamelCasePropertyName","k","call","charAt","FetchFileReader","storage","_originalFetch","_originalFetchBind","initializeAsync","_fetchFileReader","unpolyfillFetch","init","Request","isScanApi","fetchScanApiAsync","fileExists","readFileAsync","Response","culture","indexOfFirstSegment","projectUrl","projectFilePath","pathExpression","_ensureFileExistsAsync","projectJson","fileGuidOfAsset","binaryFilePath","binaryReader","StandaloneWrapper","_onDeviceReadyAsync","baseUriResolver","subUriPath","isMobile","_onPause","_onResume","_filePluginIsReadyAsync","hasStoragePermissionAsync","_requestStoragePermissionAsync","_temporaryFolder","TEMPORARY","polyfillFetchAsync","_copyDefaultFilesAsync","_copyBundleFileToStorageFileAsync","sourceFile","indexOfSlash","destinationFile","createFileAsync","isFilePluginReadyRaised","plugins","checkPermission","WRITE_EXTERNAL_STORAGE","hasPermission","requestPermissions","READ_EXTERNAL_STORAGE","temporaryFolder","fetchFileReader","dockSpawnPlugin","_Vue","Localizer","baseElement","main","localizerPromise","Sbs","app","__webpack_public_path__","OpenSeadragon","viewer","world","getItemAt","dimensions","viewportToImageCoordinates","pX","clientWidth","pY","svg","viewerWidth","viewerheight","imageToViewportCoordinates","traductionKey","prev","curr","debounce","throttle","defineCustomElements","catch","RenderType","isPanoramaConfiguration","Cube","Spherical","isFlatConfiguration","Flat","FlatConfiguration","imageWidth","imageHeight","getHotspots","iconProvider","maxLevel","levels","startPosition","MaxFov","MinFov","_getHotspots","ratio","PanoramaConfiguration","Url","MaxLevel","Levels","Fov","ConfigurationBuilder","levelCount","levelPanoramaGenerator","constantTileSize","pow","sizeOfImage","ImageWidth","ImageHeight","TileSize","DefaultCoordinates","TooltipPosition","TooltipVisibility","TooltipStyle","defaultTop","Top","visibility","OnHover","defaultCenter","Center","sender","Visibility","BrowsableMetadataKey","getMetadataOverBaseClass","targetConstructor","metadataKey","metadata","Reflect","getMetadata","mixins","mx","getMetadataOverBaseClassWithKeyBuilder","metadataKeyBuilder","reflectMetadataIsSupported","applyMetadata","propName","createDecorator","computed","leading","trailing","EditorBrowsableState","editorOptions","decoratorOptions","editorBrowsableState","Always","propertyName","Never","propertyKey","cloneDeep","defineMetadata","apiMap","apiMapSerializable","designType","Type","getBaseClassNames","names","baseClass","getComponentName","mixin","mixinName","targetName","apiMapTargetName","tc","getJsonPropertyValue","baseClassNames","getBaseClassMaps","baseClassMaps","baseClassName","comp","serializeAsJson","removeUndefined","upperFirst","camelCase","$options","instanceName","apiMapInstanceName","hasMap","hasMetadata","instanceMap","onSerialize","convertPropertyToData","property","predicate","propertyType","isSerializableProperty","isSerializable","toLocaleLowerCase","hasOwnMetadata","onDeserialize","postDeserialize","gridItemStyle","$parent","rowEnd","_row","_rowSpan","columnEnd","_column","_columnSpan","GridItem_1","_horizontalAlignmentToHtmlGrid","_horizontalAlignment","_verticalAlignmentToHtmlGrid","_verticalAlignment","horizontalAlignment","TypeError","verticalAlignment","_gridItemMixin","ObservableObject","created","recomputed","watchers","_computedWatchers","watcher","getter","GridItemMixin","_onDataContextChanged","_zIndex","_visibility","_minWidth","_width","_maxWidth","_minHeight","_height","_maxHeight","_opacity","_background","_foreground","_marginTop","_marginBottom","_marginLeft","_marginRight","_paddingTop","_paddingBottom","_paddingLeft","_paddingRight","_borderTopSize","_borderBottomSize","_borderLeftSize","_borderRightSize","_borderTopColor","_borderBottomColor","_borderLeftColor","_borderRightColor","_borderTopStyle","_borderBottomStyle","_borderLeftStyle","_borderRightStyle","_isVisible","dc","UIElement_1","_onIsVisiblePropertyChanged","CancellationTokenSource","CancellationToken","_isCancellationRequested","cancel","isCancellationRequested","EventDispatcher","subscribe","handler","_handlers","unsubscribe","dispatch","toEvent","getOrAdd","dictionary","valueFactory","cookie","part","decodeURIComponent","getCookies","getCookie","config","expirationDate","setDate","getDate","toUTCString","enumToVerify","flagMask","flagMasks","enumType","getValues","flag","includeZeroValue","getFileExtension","startingByte","endindByte","isFileHeaderValidAsync","allowedTypeSignature","getFormatSize","formatSize","allowedTypesHeaders","fileIndex","headerCopy","byteToCompare","Uint8Array","size_Eo","toFixed","size_Po","size_To","size_Go","size_Mo","size_Ko","extensions","areExtensionsNotValid","some","fileHeaders","fileHeader","signatures","supportedExtensions","allowedTypesSignatures","getTypesSignaturesFromExtensions","signatureVerifications","signature","maxSize","sphericalCoordinates","PickingInfo","leftHandedToRightHandedCoordinates","pickedPoint","sqrt","spherical","asin","leftHandedCoordinates","abs","urlParameters","parameterValue","addIfEmpty","param","Value","Key","hash","fromEntries","urlObj"],"sourceRoot":""}