{"version":3,"file":"app-e38e91c7.9f3c4df62cfbc7f5.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/project/model-revision/create-model/create-model.scss","webpack://client-app/./src/app/project/model-revision/model-revision.scss","webpack://client-app/./src/app/project/model-revision/create-model/create-model.html","webpack://client-app/./src/app/project/model-revision/model-revision.html","webpack://client-app/./src/app/project/model-revision/SSE_Manager.ts","webpack://client-app/./src/app/project/model-revision/create-model/create-model.ts","webpack://client-app/./src/app/project/model-revision/model-revision.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.create-model-title,.create-model-inner{margin-bottom:20px}.create-model-title .ok-btn,.create-model-title .cancel-btn,.create-model-inner .ok-btn,.create-model-inner .cancel-btn{display:inline;float:right}.create-model-title .cancel-btn,.create-model-inner .cancel-btn{margin-right:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/model-revision/create-model/create-model.scss\"],\"names\":[],\"mappings\":\"AAAA,wCACI,kBAAA,CACA,wHACI,cAAA,CACA,WAAA,CAEJ,gEACI,iBAAA\",\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.model-revision-top-bar{border-bottom:1px silver solid}.all-model-revision-content{width:100%;height:calc(100vh - (4em + 10px));margin-top:10px;overflow-y:auto;overflow-x:hidden}.all-model-revision-content .content-div-model{width:150%}.all-model-revision-content .content-div-revision{width:100%;animation:down-scale .18s}.all-model-revision-content .model-content{display:block;float:left;margin-left:10px;margin-top:10px;width:66%;min-width:450px}.all-model-revision-content .create-model-content,.all-model-revision-content .revision-content{float:left;margin-left:5px;margin-top:10px;width:calc(34% - 20px);min-width:220px;overflow:hidden}.all-model-revision-content .scale-up{animation:up-scale .2s}.all-model-revision-content .scale-down{animation:down-scale .18}@keyframes down-scale{to{width:100%}from{width:150%}}@keyframes up-scale{to{width:150%}from{width:100%}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/model-revision/model-revision.scss\"],\"names\":[],\"mappings\":\"AAEA,wBACI,8BAAA,CAEJ,4BACI,UAAA,CACA,iCAAA,CACA,eAAA,CACA,eAAA,CACA,iBAAA,CAEA,+CACI,UAAA,CAGJ,kDACI,UAAA,CACA,yBAAA,CAGJ,2CACI,aAAA,CACA,UAAA,CACA,gBAAA,CACA,eAAA,CACA,SAAA,CACA,eAAA,CAIJ,gGACI,UAAA,CACA,eAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CACA,eAAA,CAKJ,sCACI,sBAAA,CAGJ,wCACI,wBAAA,CAIR,sBACI,GACI,UAAA,CAEJ,KACI,UAAA,CAAA,CAIR,oBACI,GACI,UAAA,CAEJ,KACI,UAAA,CAAA\",\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Module\nvar code = ` `;\n// Exports\nexport default code;","// Module\nvar code = ` `;\n// Exports\nexport default code;","import { AWJClient } from \"app/services/AWJClient\";\r\n\r\nexport class SSE_Manager {\r\n\t/* (TODO: This should probably be an injected class instead,\r\n\t\tso it could itself get access to things like AWJClient, the environment and URL-settings.)\r\n\t*/\r\n\r\n\tstatic subscribeToProject(prjId: string, eventName: string, boundMethod: (updateData: any) => Promise, SSE_EndPoint:string) {\r\n\t\tconsole.warn('SSE subscribeToProject', prjId, eventName);\r\n\t\tconst src = this.getSource(prjId, SSE_EndPoint);\r\n\t\tsrc.addEventListener(eventName, function (event:MessageEvent) {\r\n\t\t\tconst data:string = event.data;\r\n\t\t\tconst type:string = event.type;\r\n\t\t\tconsole.warn(\"Custom Event Received:\", event.data);\r\n\t\t\tboundMethod(event);\r\n\t\t});\r\n\t}\r\n\tstatic unsubscribeToProject(prjId: string, eventName: string, SSE_EndPoint:string) {\r\n\t\tconsole.log('SSE todo unsubscribeToProject', prjId);\r\n\t\tconst src = this.getSource(prjId, SSE_EndPoint);\r\n\t\t// Is it complicated to call removeEventListener, what exactly should we put in listener arg?\r\n\t\t// Do we have to remember the original listener we used..? We can't iterate the EventSource's children.\r\n\t\t//src.removeEventListener(eventName, someListener); // TODO.\r\n\t}\r\n\r\n\tstatic sources: Map = new Map();\r\n\tstatic getSource(ID: string, SSE_EndPoint: string): EventSource {\r\n\t\tif (!this.sources.has(ID)) { this.sources.set(ID, this.makeSource(ID, SSE_EndPoint)); }\r\n\t\treturn this.sources.get(ID)!;\r\n\t}\r\n\tstatic makeSource(ID: string, SSE_EndPoint: string): EventSource {\r\n\t\t// TODO: I should go through and (presumably) remove all references to the SCM variant of this URL;\r\n\t\t// I cannot fathom why I would want to refer to the scm variant in our source code.\r\n\t\t//const url = `https://bg-worker-wa.azurewebsites.net/sse-endpoint/${ID}`;\r\n\t\tconst url = `${SSE_EndPoint}/event/SubscribeToSubject/${ID}`;\t\t\r\n\t\tlet eventSource = new EventSource(url);\r\n\r\n\t\tconsole.log('SSE makeSource, extra handlers');\r\n\t\teventSource.onerror = (e) => {\r\n\t\t\tconsole.warn(\"SSE Connection lost.\",e);\r\n\t\t\t//console.log(\"Reconnecting...\"); //setTimeout(() => { eventSource = new EventSource(url); }, 3000);\r\n\t\t};\r\n\t\teventSource.onmessage = (e) => console.warn(\"SSE Received:\", e.data, e);\r\n\r\n\t\treturn eventSource;\r\n\t}\r\n}\r\n","import { ApiClient } from \"app/services/api-client\";\r\nimport { RequestMethod } from 'app/services/RequestMethod';\r\nimport { AppContextService } from \"app/services/app-context-service\";\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ModalService } from 'app/services/modal-service';\r\nimport { BimViewerService } from \"app/services/bim-viewer-service\";\r\nimport {BimViewerFileDto, BimViewerRevisionDto} from \"../../../models/viewer-dtos/Dtos/bimviewer-dtos\";\r\nimport { ModelRevision } from \"../model-revision\";\r\nimport { UserService } from \"app/services/user-service\";\r\nimport { DateTimeFormatter } from \"app/services/date-time-formatter\";\r\n\r\n@autoinject\r\nexport class CreateModel {\r\n private newModelName: string = \"\";\r\n private modelFiles: File[] = []\r\n private selectedModelFileName = \"Upload model\"\r\n private chosenFileToUpload?: File;\r\n private bimViewerService: BimViewerService;\r\n private parentComponent?: ModelRevision;\r\n private fileInputElement?: HTMLInputElement;\r\n\r\n\r\n constructor(public apiClient: ApiClient, public appContext:AppContextService, public router: Router, public element: Element, \r\n public modal: ModalService, public userService: UserService) {\r\n this.bimViewerService = new BimViewerService(apiClient,appContext);\r\n }\r\n\r\n bind(params: ModelRevision): void {\r\n this.parentComponent = params;\r\n console.log('create-model.bind, params:', params.modelList.length, params);\r\n }\r\n\r\n attached(): void {\r\n this.fileInputElement = document.getElementById('modelFileInput');\r\n }\r\n \r\n cancel(): void {\r\n this.resetInputs();\r\n this.parentComponent?.cancel();\r\n }\r\n\r\n fileSelected(): void {\r\n if (this.modelFiles.length > 0) {\r\n this.chosenFileToUpload = this.modelFiles[0];\r\n this.selectedModelFileName = this.chosenFileToUpload.name;\r\n if (this.newModelName.length == 0) {\r\n this.newModelName = this.chosenFileToUpload.name.replace(/\\.[^/.]+$/, \"\");\r\n }\r\n } else {\r\n this.selectedModelFileName = \"Upload model\";\r\n }\r\n }\r\n\r\n async saveNewModel(event:PointerEvent): Promise {\r\n\t\tconst altUpload = event.shiftKey;\r\n\t\tconsole.log('saveNewModel, altUpload?', altUpload);\r\n\r\n let modelName:string = this.newModelName;\r\n if (modelName.length < 1) { \r\n this.modal.OpenMessage(\"No Model Name\", \"You must write a model name to create a model.\");\r\n return;\r\n }\r\n\r\n let fileDto: BimViewerFileDto | void = await this.bimViewerService.createModel(modelName, altUpload, this.chosenFileToUpload);\r\n if (fileDto) {\r\n let username: string | undefined = await this.userService.getUsername(fileDto.createdByUser_Id,'saveNewModel');\r\n fileDto.username = username ? username : \"Unknown\"; \r\n fileDto.created = DateTimeFormatter.formatDate(fileDto.created);\r\n this.parentComponent?.handleSavedModel(fileDto);\r\n }\r\n }\r\n\r\n resetInputs(): void {\r\n this.newModelName = \"\";\r\n this.selectedModelFileName = \"Upload model\";\r\n this.chosenFileToUpload = undefined;\r\n if (this.fileInputElement) {\r\n this.fileInputElement.value = \"\";\r\n }\r\n }\r\n}\r\n","import { ApiClient } from \"app/services/api-client\";\r\nimport { RequestMethod } from 'app/services/RequestMethod';\r\nimport { AppContextService } from \"app/services/app-context-service\";\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ModalService } from 'app/services/modal-service';\r\nimport { BimViewerService } from \"app/services/bim-viewer-service\";\r\nimport {BimViewerFileDto, BimViewerRevisionDto} from \"../../models/viewer-dtos/Dtos/bimviewer-dtos\";\r\nimport { Models } from \"./model/models\";\r\nimport { CreateModel } from \"./create-model/create-model\";\r\nimport { Revisions } from \"./revision/revisions\";\r\nimport { HttpResponseMessage } from \"aurelia-http-client\";\r\nimport { DialogCloseResult } from \"aurelia-dialog\";\r\nimport { IfcImport } from \"../ifc-import/ifc-import\";\r\n\r\n//import { SSE_Manager } from \"./SSE_Manager\";\r\n//import { AWJClient } from \"app/services/AWJClient\";\r\n\r\n\r\n@autoinject\r\nexport class ModelRevision {\r\n\tpublic updateData:string = '.';\r\n public showCreateModel: boolean = false;\r\n public modelList: BimViewerFileDto[] = [];\r\n public createModelView?: CreateModel;\r\n public revisionViewModel?: Revisions; // was:private.\r\n private bimViewerService: BimViewerService; // maybe HE should tell us about project.modelSource.\r\n private modelView?: Models;\r\n private selectedModel?: BimViewerFileDto;\r\n\r\n constructor(public apiClient: ApiClient, \r\n\t\tpublic appContext:AppContextService, public router: Router, \r\n\t\tpublic element: Element, public modal: ModalService\r\n\t\t// public awjClient:AWJClient\r\n\t) {\r\n this.bimViewerService = new BimViewerService(apiClient,appContext);\r\n }\r\n\r\n\tasync activate(params: any): Promise {\r\n console.log('model-revision-activate, params:', params);\r\n\t\tif (params.projectId) { this.appContext.setProject(params.projectId); }//in-activate.\r\n await this.initModels();//activate\r\n }\r\n\r\n\t/*\r\n\tasync myUpdateHandler(updateData:MessageEvent) { \r\n\t\tconsole.log('myUpdateHandler, event-data:', updateData); \r\n\t\tconst data:string = updateData.data;\r\n\t\tthis.updateData = data;\r\n\t}\r\n\r\n\tasync attached(x:any) {\r\n\t\tconsole.log('ModelRevision.attached',x);\r\n\t\tconst boundMethod = this.myUpdateHandler.bind(this);\r\n\t\tconst SSE_endpoint = this.awjClient.getApiUrl();\r\n\t\tSSE_Manager.subscribeToProject(this.appContext.projectId, 'update', boundMethod, SSE_endpoint);\r\n\t}\r\n\tasync deactivate(x:any) {\r\n\t\tconsole.log('ModelRevision.deactivate',x);\r\n\t\tconst SSE_endpoint = this.awjClient.getApiUrl();\r\n\t\tSSE_Manager.unsubscribeToProject(this.appContext.projectId, 'update', SSE_endpoint);\r\n\t}\r\n\t*/\r\n\r\n async initModels(): Promise { \r\n\t\tconsole.log('MR.initModels - GetFilesForProject');\r\n let prj: string = this.appContext.projectId;\r\n console.log('prj:', prj);\r\n let api: RequestMethod = this.apiClient.project(prj);\r\n\r\n // do we risk a cache-effect by using get instead of post?\r\n this.modelList = await api.get('BimViewer/GetFilesForProject').jsonResult();//initModels-in-MR \r\n\t\tconsole.log('model-revision,initModels, this.modelList:', this.modelList.length, this.modelList);\r\n\t\tif (this.modelList.length>0) {\r\n\t\t\tconsole.log('model-revision,initModels, model-src:', this.modelList[0].modelSource);\r\n\t\t} else {\r\n\t\t\tconsole.log('model-revision,initModels, no model-src as 0');\r\n\t\t}\r\n\r\n if (this.modelView != undefined) { //Used for reloading view on project change.\r\n\t\t\tconsole.log('model-revision.ts,initModels calling setupModels');\r\n this.modelView.setupModels(this.modelList);//initModels(modelrevision)\r\n } else {\r\n\t\t\tconsole.log('model-revision.ts,initModels NOT calling setupModels because no modelView.');\r\n\t\t}\r\n }\r\n\r\n async getNewestRevision(model: BimViewerFileDto): Promise { // hmm, does anyone use this?\r\n let prj: string = this.appContext.projectId;\r\n let api: RequestMethod = this.apiClient.project(prj);\r\n\r\n\t\tconsole.log('MR-getNewestRevision, this.appContext.projectId?', this.appContext.projectId);\r\n let revisions: BimViewerRevisionDto[] = await api.get(`BimViewer/GetRevisionsForFile?fileId=${model.id}`).jsonResult(); //Har du en anden version af denne?\r\n\t\tconsole.log('model-revision.getNewestRevision, BimViewer/GetRevisionsForFile, revisions:', revisions);\r\n\r\n if (revisions.length > 0) {\r\n revisions.sort((element1, element2) => {\r\n return Number(element2.revision) - Number(element1.revision);\r\n });\r\n return revisions[0].id;\r\n }\r\n return \"\";\r\n }\r\n\r\n public makeSpaceForRightPanel(): void {\r\n let contentElement: HTMLElement | null = this.element.querySelector('.content-div-model');\r\n if (contentElement != null) {\r\n contentElement.classList.add('content-div-revision');\r\n contentElement.classList.remove('content-div-model');\r\n }\r\n }\r\n\r\n async getRevision(currentlySelectedModel: BimViewerFileDto): Promise { // UB: openModel\r\n let prj: string = this.appContext.projectId;\r\n let api: RequestMethod = this.apiClient.project(prj);\r\n if (api == undefined) { return false; }\r\n\r\n\t\tconsole.log('MR-getRevision, this.appContext.projectId?', this.appContext.projectId);\r\n\t\t// The 'dto' that GetRevisionsForFile() returns, is actually the raw db entity, not a DTO.\r\n let listOfRevisions: BimViewerRevisionDto[] = await api.get(`BimViewer/GetRevisionsForFile?fileId=${currentlySelectedModel.id}`).jsonResult(); //Samme kald som ovenstående\r\n\t\tconsole.log('model-revision.getRevision, BimViewer/GetRevisionsForFile, listOfRevisions:', listOfRevisions);\r\n\r\n if (listOfRevisions == undefined) {\r\n return false;\r\n }\r\n this.selectedModel = currentlySelectedModel;\r\n listOfRevisions.sort((element1: BimViewerRevisionDto, element2: BimViewerRevisionDto) => {\r\n return Number(element2.revision) - Number(element1.revision);\r\n });\r\n if (currentlySelectedModel.isSynced == false) {\r\n listOfRevisions[0].isSynced = false;\r\n }\r\n await this.revisionViewModel?.fillList(listOfRevisions);//getRevision\r\n this.revisionViewModel?.setIsRevitPlugin((currentlySelectedModel.pluginUpload)); //TODO - See if you can fix this, for some reason the pluginUpload is being treated like a string.\r\n return true;\r\n }\r\n\r\n\r\n showCreateNewModelView(): void {\r\n console.log(\"Creating new model\");\r\n this.showCreateModel = true;\r\n \r\n let contentElement = this.element.querySelector('.content-div-model');\r\n if(contentElement != null) {\r\n setTimeout(() => {\r\n let inputField = this.element.querySelector('#myInput'); \r\n inputField.focus();\r\n } , 200)\r\n contentElement.classList.add('content-div-revision');\r\n contentElement.classList.remove('content-div-model');\r\n }\r\n this.selectedModel = undefined;\r\n }\r\n\r\n cancel(): void {\r\n let divElement: HTMLElement | null = this.element.querySelector('.content-div-revision');\r\n if(divElement != null) {\r\n divElement.classList.add('scale-up');\r\n setTimeout(() => {\r\n divElement?.classList.remove('scale-up');\r\n divElement?.classList.add('content-div-model');\r\n this.showCreateModel = false;\r\n this.selectedModel = undefined;\r\n }, 150 );\r\n divElement.classList.remove('content-div-revision');\r\n }\r\n this.revisionViewModel?.resetInputs();\r\n }\r\n\r\n handleSavedModel(fileDto: BimViewerFileDto): void { // UB: saveNewModel\r\n this.modelView?.insertNewModel(fileDto);\r\n this.createModelView?.resetInputs();\r\n }\r\n \r\n async deleteModel(): Promise {\r\n if (this.selectedModel) {\r\n let response: HttpResponseMessage = await this.bimViewerService.deleteModel(this.selectedModel.id);\r\n if (response.statusCode == 200) {\r\n this.modelView?.handleDeletedModel(this.selectedModel);\r\n this.selectedModel = undefined;\r\n this.cancel();\r\n }\r\n }\r\n }\r\n\r\n\tasync importIFCModel() { //ModelRevision. If user clicks a button.\r\n\t\tconsole.log('ModelRevision.importIFCModel');\r\n\r\n\t\tif (this.modelList && this.modelList.length>0) {\r\n\t\t\tconst bvFile:BimViewerFileDto = this.modelList[0];\r\n\t\t\tconsole.log('Models.importIFCModel, source:', bvFile.modelSource);\r\n\t\t\tif (bvFile.modelSource != 'ifc') { \r\n\t\t\t\tconst msg = 'not importing, as modelSource not ifc.';\r\n\t\t\t\twindow.alert(msg);\r\n\t\t\t\tconsole.log(msg); return; \r\n\t\t\t}\t\r\n\t\t} else {\r\n\t\t\tconsole.warn('MR.importIFCModel, no modelList to check for ifc', this.modelList);\r\n\t\t}\r\n\r\n\t\tif (await this.warnIfOverwrite()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet args = {\r\n\t\t\tasDialog: true, // (Hides the topbar which is meant for full-screen, not dialogs.)\r\n\t\t\tprojectId: this.appContext.projectId \r\n\t\t};\r\n\t\tlet DCR: DialogCloseResult = await this.modal.OpenModal(IfcImport,args).whenClosed();\r\n\t\tif (DCR.wasCancelled) { \r\n\t\t\tconsole.log('(import was cancelled)');\r\n\t\t\treturn; \r\n\t\t}\r\n\r\n\t\tlet okResult:boolean = DCR.output;\r\n\t\tconsole.log('okResult:',okResult);\r\n\t\tif (okResult) { await this.reload(); }\r\n\t}\r\n\r\n\tasync warnIfOverwrite():Promise {\r\n\t\tconst importedEarlierInfo:string = this.hasEarlierImport();\r\n\t\tif (!importedEarlierInfo) { return false; }\r\n\r\n\t\tconst overwriteHeader = 'Overwriting existing project data';\r\n\t\tconst overwriteMsg = \r\n\t\t'Import will overwrite your existing project data.\\n'+\r\n\t\t'Your project already contains earlier imported data.\\n\\n'+\r\n\t\timportedEarlierInfo + '\\n\\n'+\r\n\t\t'If you proceed, your existing data will be deleted and overwritten.\\n'+\r\n\t\t' Are you sure?'\r\n\t\t;\r\n\t\t//let DCR: DialogCloseResult = await this.modal.OpenMessage(overwriteHeader, overwriteMsg).whenClosed();\r\n\t\tlet DCR: DialogCloseResult = await this.modal.OpenConfirm(overwriteHeader, overwriteMsg).whenClosed();\r\n\t\treturn DCR.wasCancelled; // return true to give up.\r\n\t}\r\n\thasEarlierImport(): string {\r\n\t\tif (!this.modelList) { console.log('(with no modelList, we cant have an earlier model..)'); return ''; }\r\n\t\tif (this.modelList.length==0) { console.log('(with zero models, we cant have an earlier model..)'); return ''; }\r\n\t\t// Hmm, we have > 1 models..\r\n\t\tconst SM:BimViewerFileDto = this.modelList[0];\r\n\t\tconst source = SM.modelSource;\r\n\t\tconsole.log('We have at least one model, and its source is:', source, SM); \r\n\t\tconsole.log(`Its curRevision is:[${SM.currentRevision}]`, SM.currentRevision); \r\n\t\tif (!SM.currentRevision) {\r\n\t\t\tconsole.warn(`Because it doesn't have a non-zero current Revision, we judge it as NO-EARLIER-IMPORT`); \r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst info:string = `${SM.name}\\n By user: ${SM.createdByUser_Id}\\n Revision: ${SM.currentRevision}\\n Created: ${SM.created}\\n Latest: ${SM.newestRevisionDate}\\n Source: ${SM.modelSource}`;\r\n\t\treturn info;\r\n\t}\r\n\r\n\tasync reload() {\r\n\t\tconsole.log('reload from importIFCModel uses initModels');\r\n\t\tawait this.initModels();//reload\r\n\t}\r\n\r\n getSelectedModel(): BimViewerFileDto | undefined { return this.selectedModel; } \r\n setSelectedModelSynced(value: boolean): void { if (this.selectedModel) { this.selectedModel.isSynced = value; } }\r\n updateRevisionNumber(revision:number, created: string): void { this.modelView?.updateRevisionNumber(revision, created); }\r\n async open3DViewerRevision(revision: BimViewerRevisionDto) { await this.bimViewerService.openBimViewerWithRevisionId(revision.id); }\r\n}\r\n\r\n\r\n\r\n\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","SSE_Manager","subscribeToProject","prjId","eventName","boundMethod","SSE_EndPoint","console","warn","this","getSource","addEventListener","event","data","type","unsubscribeToProject","log","ID","sources","has","set","makeSource","get","eventSource","EventSource","onerror","e","onmessage","Map","CreateModel","constructor","apiClient","appContext","router","element","modal","userService","newModelName","modelFiles","selectedModelFileName","bimViewerService","bind","params","parentComponent","modelList","length","attached","fileInputElement","document","getElementById","cancel","resetInputs","fileSelected","chosenFileToUpload","name","replace","saveNewModel","altUpload","shiftKey","modelName","OpenMessage","fileDto","createModel","username","getUsername","createdByUser_Id","created","formatDate","handleSavedModel","undefined","value","autoinject","Element","ModelRevision","updateData","showCreateModel","activate","projectId","setProject","initModels","prj","api","project","jsonResult","modelSource","modelView","setupModels","getNewestRevision","model","revisions","sort","element1","element2","Number","revision","makeSpaceForRightPanel","contentElement","querySelector","classList","add","remove","getRevision","currentlySelectedModel","listOfRevisions","selectedModel","isSynced","revisionViewModel","fillList","setIsRevitPlugin","pluginUpload","showCreateNewModelView","setTimeout","focus","divElement","insertNewModel","createModelView","deleteModel","statusCode","handleDeletedModel","importIFCModel","bvFile","msg","window","alert","warnIfOverwrite","args","asDialog","DCR","OpenModal","IfcImport","whenClosed","wasCancelled","okResult","output","reload","importedEarlierInfo","hasEarlierImport","overwriteMsg","OpenConfirm","SM","source","currentRevision","newestRevisionDate","getSelectedModel","setSelectedModelSynced","updateRevisionNumber","open3DViewerRevision","openBimViewerWithRevisionId"],"sourceRoot":""}