{"version":3,"file":"app-e62072f0.4fb1de309c5b30f6.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/project/work-area/model-revision/model-revision-parent.scss","webpack://client-app/./src/app/project/work-area/model-revision/model/model.scss","webpack://client-app/./src/app/project/work-area/model-revision/model-revision-parent.html","webpack://client-app/./src/app/project/work-area/model-revision/model/model.html","webpack://client-app/./src/app/project/work-area/model-revision/model-revision-parent.ts","webpack://client-app/./src/app/project/work-area/model-revision/model/model.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, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"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, `h1{padding:2px}.search-form{min-width:350px;font-family:Arial,FontAwesome;display:block;margin-top:2px;margin-bottom:2px}.model-column-width{max-width:150px}td .model-name-text{all:unset;display:block}td .model-time-text{all:unset;display:block}td .model-username-text{all:unset;display:block}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/work-area/model-revision/model/model.scss\"],\"names\":[],\"mappings\":\"AAAA,GACI,WAAA,CAUJ,aACI,eAAA,CACA,6BAAA,CACA,aAAA,CACA,cAAA,CACA,iBAAA,CAGJ,oBACI,eAAA,CAIA,oBACI,SAAA,CACA,aAAA,CAEJ,oBACI,SAAA,CACA,aAAA,CAEJ,wBACI,SAAA,CACA,aAAA\",\"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 'jquery-ui/ui/widgets/draggable';\r\nimport { 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,bindable } from 'aurelia-framework';\r\nimport { Model } from \"./model/model\";\r\nimport { Revision } from \"./revision/revision\";\r\nimport {EventAggregator, Subscription} from 'aurelia-event-aggregator';\r\nimport { UserService } from \"app/services/user-service\";\r\nimport { BimViewerFileAndRevisionId, BimViewerFileDtoSplitView, BimViewerRevisionDtoSplitView, ModelById, RevisionById } from \"app/models/viewer-dtos/Dtos/bimviewer-dtos\";\r\n\r\n@autoinject\r\nexport class ModelRevisionParent {\r\n\t// JG: Jeg hader dette system - den SKAL kaldes 'project-id' i html view templaten, for at det binder til 'projectId'!\r\n @bindable projectId: string = \"\"; // JG: Det her er idiotisk, vi har flere mekanismer der sender projectIDs ind i MRP!\r\n\r\n\tprivate parentDoneLoading: boolean = false;\r\n public modelRevisionsMap: Map = new Map();\r\n private pluginModel: BimViewerFileDtoSplitView | undefined;\r\n public revisionModelView: Revision | undefined;\r\n public modelModelView: Model | undefined;\r\n private keybuttonHandling: (this: Window, ev: KeyboardEvent) => any;\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private events: EventAggregator, public apiClient: ApiClient, public appContext:AppContextService, public userService: UserService) {\r\n\t\tconsole.log('MRP someone constructing MRP');\r\n\r\n this.keybuttonHandling = (event) => {\r\n if (event.key == \"Escape\") {\r\n this.closeModelRevisionContainer();\r\n } \r\n };\r\n }\r\n\r\n\tactivate(params:any) {\r\n\t\tconsole.log('MRP activate is called.'); \r\n\t}\r\n\tasync attached() { // called second.\r\n\t\tconsole.log('MRP attached is called, this.projectId is now:', this.projectId); \r\n\t}\r\n\t\r\n\r\n\r\n async bind(params: any): Promise {\r\n console.log(\"MRP bind 42\");\r\n this.parentDoneLoading = false;\r\n let self = this;\r\n this.subscriptions = [\r\n this.events.subscribe('ModelRevision:ModelNotReady', (parameter: BimViewerFileAndRevisionId) => {self.handleModelNotReady(parameter.revisionId, parameter.model)}),\r\n this.events.subscribe('ModelRevision:ModelReady', (parameter: BimViewerFileAndRevisionId) => {self.handleModelReady(parameter.revisionId, parameter.model)}),\r\n this.events.subscribe('ModelRevision:UndoLoadModel', (model: BimViewerFileDtoSplitView) => {self.undoLoadModel(model)}),\r\n this.events.subscribe('ModelRevision:LoadModelById', (model: ModelById) => { if(model.is2d) {self.turnOn2dModelById(model.id)} else {self.turnOn3dModelById(model.id)}}),\r\n this.events.subscribe('ModelRevision:LoadRevisionById', async (revision: RevisionById) => {if(revision.is2d) {await self.turnOn2dRevisionById(revision)} else {await self.turnOn3dRevisionById(revision)}}),\r\n this.events.subscribe('ModelRevision:CloseModelRevision', () => {self.closeModelRevisionContainer()}),\r\n this.events.subscribe('ModelRevision:ModelsPressed', () => {self.showModels()}),\r\n this.events.subscribe(\"ModelRevision:HandleStateChange\", async (): Promise => { this.handleCorrectViewerSplitSize() }), //Checking if split-viewer should be resized\r\n ];\r\n\r\n try {\r\n let prjId: string = this.appContext.projectId;\r\n\r\n // this used to NOT have await, which risked that model.ts would access its 'result' before it was ready..\r\n await this.initModels(prjId);//in-bind.\r\n //this.initModels(prjId);//in-bind.\r\n\r\n this.parentDoneLoading = true;\r\n } catch (reason) {\r\n console.error(reason);\r\n }\r\n\r\n console.log('MRP.bind, this.projectId is already:', this.projectId);\r\n console.log('MRP.bind params is:', params);\r\n //console.log('MRP.bind sets projectId to ', params.projectIdForMRP);\r\n //this.projectId = params.projectIdForMRP; //projectId; // Er dette ikke dum raekkefoelge, burde vi ikke soerge for at den er i appContext?\r\n \r\n window.addEventListener('keyup', this.keybuttonHandling, false);\r\n }\r\n\r\n projectIdChanged(): void { // who fires this?\r\n\t\tconsole.trace('did anyone call MRP.projectIdChanged?');\r\n this.reload();\r\n }\r\n\r\n async turnOn3dRevisionById(currentRevision: RevisionById): Promise {\r\n\t\tconsole.log(\"MRP turnOn3dRevisionById 71\");\r\n let model: BimViewerFileDtoSplitView = this.getModels().filter((model: BimViewerFileDtoSplitView) => {\r\n return model.id == currentRevision.modelId;\r\n })[0];\r\n (await this.COSTLY_getAllRevisions('TON-3D-REV-BY-ID')).forEach((revision: BimViewerRevisionDtoSplitView) => {\r\n if (revision.id == currentRevision.revisionId) {\r\n this.revisionModelView?.open3DViewerRevisionOnStartup(revision, model);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n async turnOn2dRevisionById(currentRevision: RevisionById): Promise {\r\n\t\tconsole.log(\"MRP turnOn2dRevisionById 83\");\r\n let model: BimViewerFileDtoSplitView = this.getModels().filter((model: BimViewerFileDtoSplitView) => {\r\n return model.id == currentRevision.modelId;\r\n })[0];\r\n (await this.COSTLY_getAllRevisions('TON-2D-REV-BY-ID')).forEach((revision: BimViewerRevisionDtoSplitView) => {\r\n if (revision.id == currentRevision.revisionId) {\r\n this.revisionModelView?.open2DViewerRevisionOnStartup(revision, model);\r\n return;\r\n }\r\n });\r\n }\r\n \r\n async turnOn2dModelById(id: string): Promise {\r\n\t\tconsole.log(\"MRP turnOn2dModelById 95\");\r\n this.getModels().forEach((model: BimViewerFileDtoSplitView) => {\r\n if (model.id == id) {\r\n this.modelModelView?.open2DViewerModel(model, false, undefined);\r\n }\r\n });\r\n }\r\n\r\n turnOn3dModelById(id: string): void { // in model-revision-parent.ts\r\n\t\tconsole.log(\"MRP turnOn3dModelById 103\");\r\n this.getModels().forEach((model: BimViewerFileDtoSplitView) => {\r\n if (model.id == id) {\r\n this.modelModelView?.open3DViewerModel(model, false, undefined);\r\n }\r\n });\r\n }\r\n\r\n undoLoadModel(model: BimViewerFileDtoSplitView): void {\r\n\t\tconsole.log(\"MRP undoLoadModel 111\");\r\n let revisionIds: string[] = []; \r\n if (model != undefined) {\r\n let revisions: BimViewerRevisionDtoSplitView[] | undefined = this.modelRevisionsMap.get(model);//in-undoLoadModel\r\n if (revisions) {\r\n for (let revision of revisions) {\r\n revisionIds.push(revision.id);\r\n revision.objectsIdNotDoneLoading = undefined;\r\n revision.pressed2d = false;\r\n revision.pressed3d = false;\r\n }\r\n model.objectsIdNotDoneLoading = undefined;\r\n model.pressed2d = false;\r\n model.pressed3d = false;\r\n }\r\n }\r\n this.events.publish('3dViewer:removeRevisions', revisionIds);\r\n }\r\n\r\n unbind(): void {\r\n\t\tconsole.log(\"MRP unbind 130\");\r\n window.removeEventListener('keyup', this.keybuttonHandling, false);\r\n this.subscriptions.forEach((subscription: Subscription) => subscription.dispose());\r\n }\r\n\r\n async reload(): Promise {\r\n\t\tconsole.log(\"MRP reload 135\");\r\n\t\tlet prjId: string = this.appContext.projectId;\r\n await this.initModels(prjId);//in-reload.\r\n if (this.modelModelView != undefined) {\r\n this.modelModelView.handleReload();\r\n } \r\n if (this.revisionModelView != undefined) {\r\n this.revisionModelView.hideRevisions();\r\n }\r\n }\r\n\r\n async initModels(prjId:string): Promise { \r\n\t\tconsole.log(\"MRP initModels\");\r\n this.modelRevisionsMap = new Map();//in-initModels\r\n\t\tconsole.log('MRP initModels is passed prjId as:', prjId); \r\n\t\tif (!prjId) {\r\n\t\t\tconst err = 'no this.appContext.projectId in model-revision-parent.initModels()';\r\n\t\t\tconsole.trace(err);\r\n\t\t\t//throw err;\r\n\t\t}\r\n let api: RequestMethod = this.apiClient.project(prjId);\r\n\r\n // do we risk a cache-effect by using get instead of post?\r\n let modelList: BimViewerFileDtoSplitView[] = await api.get('BimViewer/GetFilesForProject').jsonResult();//initModels-in-MRP \r\n\t\tconsole.log('model-revision-parent,initModels, modelList:', modelList);\r\n\r\n modelList.forEach((model: BimViewerFileDtoSplitView) => {\r\n this.modelRevisionsMap.set(model, undefined);//in-initModels\r\n\t\t\tconsole.log('MRP, modelRevisionsMap.set in initModels..');\r\n if (model.pluginUpload == true) {\r\n this.pluginModel = model;\r\n }\r\n });\r\n }\r\n\r\n getModels(): BimViewerFileDtoSplitView[] {\r\n\t\tlet modelArray = Array.from(this.modelRevisionsMap.keys());//in-getModels\r\n\t\tconsole.log(\"MRP getModels L168, #:\", modelArray.length);\r\n return modelArray;\r\n }\r\n\r\n closeModelRevisionContainer(): void {\r\n\t\tconsole.log(\"MRP closeModelRevisionContainer 172\");\r\n let container: HTMLElement | null = document.getElementById('model-revision-container');\r\n if (container) { container.style.visibility = \"hidden\"; }\r\n this.hideRevisions();//in closeModelRevisionContainer.\r\n this.closeModel_MRP('CMRC');\r\n this.modelModelView?.resetInput();\r\n this.events.publish('ViewerMenu:ChangeModelToVisible', false);\r\n }\r\n\r\n hideRevisions(): void {//UB: closeModelRevisionContainer\r\n\t\tconsole.log(\"MRP hideRevisions 183\");\r\n this.revisionModelView?.hideRevisions();\r\n }\r\n\r\n closeModel_MRP(who:string): void {\r\n\t\tconsole.log(\"MRP closeModel_MRP 187\", who);\r\n this.modelModelView?.closeModel('MRP-CloseModel');\r\n }\r\n\r\n async showRevisions(model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log(\"MRP showRevisions 191\");\r\n let priorModelId: string | undefined;\r\n if (this.revisionModelView?.currentModel != undefined) {\r\n priorModelId = this.revisionModelView.currentModel.id;\r\n }\r\n let success = await this.revisionModelView?.showRevisions(model);\r\n if (success != true) {\r\n return;\r\n }\r\n\t\t// JG: HVad er alt dette, og hvorfor skal de ikke slukkes/lukkes INDEN vi starter naeste showRevisions ovenfor?\r\n\t\t// Er det maaske saadan noget gejl med, at vi ikke kan slukke den forrige, foer vi har aabnet den naeste, eller..?\r\n if (this.revisionModelView?.currentModel != undefined && !this.revisionModelView.currentModel.isOpen) {\r\n this.modelModelView?.closeModel('MRP-showRevisions');\r\n let container: HTMLElement | null = document.getElementById('model-revision-container');\r\n if (container) {\r\n container.scrollTop = 0;\r\n return true;\r\n } \r\n }\r\n\t\t// DEN HER er da i hvert fald noget vi har skaffet lige ovenfor..?\r\n if (priorModelId != undefined && priorModelId != this.revisionModelView?.currentModel?.id) {\r\n this.modelModelView?.closePriorModel(priorModelId); \r\n }\r\n return true\r\n }\r\n\r\n async getAllRevisions_forMODEL(model: BimViewerFileDtoSplitView, who:string): Promise {\r\n\t\tlet prjId:string = this.appContext.projectId;\r\n\t\t//console.log('\\n\\nMRP, getRevisions, prjId:', prjId, 'model:', 'who:', who, model.id, model.newestRevisionDate); //this.projectId is:', this.projectId);\r\n if (model == undefined) { return; }\r\n\r\n\t\tif (this.modelRevisionsMap.get(model) != undefined) {//in-getRevisions\r\n\t\t\treturn this.modelRevisionsMap.get(model);//in-getRevisions\r\n\t\t} else {\r\n\t\t\tlet api: RequestMethod = this.apiClient.project(prjId); //this.projectId); // last ref to project in this file.\r\n\r\n\t\t\t//console.log('MRP-getRevisions, projectId?', prjId); //this.projectId);\r\n\t\t\tlet revisionList: BimViewerRevisionDtoSplitView[] = await api.get(`BimViewer/GetRevisionsForFile?fileId=${model.id}`).jsonResult();\r\n\t\t\t//console.log('model-revision-parent.getRevisions, BimViewer/GetRevisionsForFile, revisionList:', revisionList);\r\n\r\n\t\t\tif (revisionList == undefined) {\r\n\t\t\t\treturn revisionList;\r\n\t\t\t}\r\n\t\t\trevisionList = await this.userService.fillUsernames(revisionList,'getRevisions');\r\n\t\t\trevisionList = this.sortRevisions(revisionList);//in-MRP.getRevisions \r\n\t\t\tthis.modelRevisionsMap.set(model, revisionList);//in-MRP.getRevisions \r\n\t\t\t//console.log('MRP, modelRevisionsMap.set in getRevisions.., modelId:', model.id);\r\n\t\t\treturn this.modelRevisionsMap.get(model);//in-getRevisions\r\n\t\t}\r\n }\r\n\r\n sortRevisions(revisionList: BimViewerRevisionDtoSplitView[]): BimViewerRevisionDtoSplitView[] { // UB: MRP.getRevisions.\r\n\t\t//console.log(\"MRP sortRevisions 237\", revisionList.length);\r\n revisionList.sort((revision1: BimViewerRevisionDtoSplitView, revision2: BimViewerRevisionDtoSplitView) => {\r\n if (revision1.revision > revision2.revision) {\r\n return -1;\r\n } else if (revision1.revision < revision2.revision) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n return revisionList;\r\n }\r\n\r\n showModels(): boolean {\r\n\t\tconsole.log(\"MRP model-revison-parent: Showing models 250\");\r\n let revisionContainer: HTMLElement | null = document.getElementById('revision-container');\r\n if (revisionContainer) {\r\n revisionContainer.hidden = true; \r\n }\r\n let container: HTMLElement | null = document.getElementById('model-revision-container');\r\n if (container && (container.style.visibility == \"hidden\" || container.style.visibility == \"\")) {\r\n container.style.visibility = \"visible\";\r\n let modelRevisionContainer: HTMLElement | null = document.getElementById('model-revision-container');\r\n let topBarHeight: number = (40 / 2);\r\n let panelLeftLength: number | undefined = 0;\r\n if (document.getElementById('panel-left')) {\r\n panelLeftLength = document.getElementById('panel-left')?.clientWidth;\r\n }\r\n let panelRightLength: number | undefined = 0;\r\n if (document.getElementById('panel-right')) {\r\n panelRightLength = document.getElementById('panel-right')?.clientWidth;\r\n }\r\n //Subscriping on navCollapsed is not working in this case as \r\n //we need to know the width of the navbar even if it has not\r\n //been toggled after loading this view.\r\n let navigation: HTMLElement = document.getElementsByClassName('navigation')[0];\r\n let navbar: number = 275; \r\n if (navigation) {\r\n navbar = navigation.clientWidth;\r\n }\r\n\r\n let modelRevisionHeight = modelRevisionContainer?.clientHeight;\r\n let modelRevisionWidth = modelRevisionContainer?.clientWidth;\r\n if (modelRevisionHeight == 0) {\r\n //This can occur when the height of the container is set before this code is run.\r\n //It has for now only occured when going directly from Model -> click 3d -> Work-area (Viewer)\r\n modelRevisionHeight = 200;\r\n }\r\n if (modelRevisionContainer && modelRevisionWidth && modelRevisionHeight && panelLeftLength && panelRightLength) {\r\n modelRevisionContainer.style.left = (window.innerWidth - modelRevisionWidth - navbar + panelLeftLength - panelRightLength) / 2 + \"px\";\r\n modelRevisionContainer.style.top = (window.innerHeight - modelRevisionHeight - topBarHeight) / 2 + \"px\";\r\n }\r\n this.events.publish('ViewerMenu:ChangeModelToVisible', true);\r\n return true;\r\n } else {\r\n this.closeModelRevisionContainer();\r\n return false;\r\n }\r\n }\r\n\r\n async turnOn2dRevision(model: BimViewerFileDtoSplitView, revision: BimViewerRevisionDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.turnOn2dRevision-297');\r\n this.turnOff2dModel();\r\n for (let currentRevision of (await this.COSTLY_getAllRevisions('TON-2R'))) {\r\n if (currentRevision.pressed2d) { // First the prior 2d is turned off\r\n currentRevision.pressed2d = false;\r\n }\r\n if (currentRevision.id == revision.id) { // Then the new revision is turned on\r\n currentRevision.pressed2d = true;\r\n }\r\n }\r\n this.turnOn2dModel(model);\r\n }\r\n\r\n turnOn2dModel(model: BimViewerFileDtoSplitView): void {\r\n\t\tconsole.log('MRP.turnOn2dModel-310');\r\n this.getModels().forEach((currentModel: BimViewerFileDtoSplitView) => {\r\n if (currentModel.id == model.id) {\r\n currentModel.pressed2d = true;\r\n }\r\n });\r\n }\r\n\r\n async turnOff2dRevision(): Promise {\r\n\t\tconsole.log('MRP.turnOff2dRevision-318');\r\n (await this.COSTLY_getAllRevisions('TOFF-2R')).forEach((revision: BimViewerRevisionDtoSplitView) => {\r\n if (revision.pressed2d) { revision.pressed2d = false; }\r\n });\r\n }\r\n\r\n turnOff2dModel(): void {\r\n\t\tconsole.log('MRP.turnOff2dModel-324');\r\n this.getModels().forEach((model: BimViewerFileDtoSplitView) => {\r\n if (model.pressed2d) { model.pressed2d = false; }\r\n });\r\n }\r\n\r\n isAny3dRevisionOn(): boolean { return !!this.getModels().find(m => m.pressed3d); }\r\n\r\n async COSTLY_getAllRevisions(who:string): Promise {\r\n\t\t/* JG: I don't know in which cases we need all of this crap read in,\r\n\t\tbut some of them are clearly unnecessary, and I am disabling those.\r\n\t\t */\r\n\t\tconsole.log('MRP.COSTLY_getAllRevisions-332', who);\r\n let allModels: BimViewerFileDtoSplitView[] = this.getModels();\r\n\r\n\t\tlet ix=0;\r\n let allRevision: BimViewerRevisionDtoSplitView[] = [];\r\n for (let currentModel of allModels) {\r\n\t\t\tconsole.log('ALL!, GETTING', ++ix, '/', allModels.length);\r\n let revisions: BimViewerRevisionDtoSplitView[] | undefined = await this.getAllRevisions_forMODEL(currentModel,'GAR');\r\n if (revisions) {\r\n allRevision.push(...revisions);\r\n }\r\n }\r\n return allRevision;\r\n }\r\n\r\n async started3dModelLoading(model: BimViewerFileDtoSplitView, currentRevision: BimViewerRevisionDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.started3dModelLoading-344');\r\n let revision: BimViewerRevisionDtoSplitView | undefined = this.modelRevisionsMap.get(model)?.filter((revision: BimViewerRevisionDtoSplitView) => revision.id == currentRevision.id)[0];//in-started3dModelLoading\r\n\r\n if (revision && revision.objectsIdNotDoneLoading != false) { // It has never been set i.e undefined\r\n revision.objectsIdNotDoneLoading = true;\r\n }\r\n\r\n if (revision) {\r\n revision.pressed3d = true;\r\n }\r\n\r\n if (model.objectsIdNotDoneLoading == false || model.objectsIdNotDoneLoading == undefined ) { \r\n model.objectsIdNotDoneLoading = true;\r\n }\r\n model.pressed3d = true;\r\n }\r\n\r\n async model3dDoneLoading(model: BimViewerFileDtoSplitView, currentRevisionId: string): Promise {\r\n\t\tconsole.log('MRP.model3dDoneLoading-361');\r\n let objectsIdNotDoneLoading: boolean = false; \r\n let revisions: BimViewerRevisionDtoSplitView[] | undefined = await this.getAllRevisions_forMODEL(model,'M3DL');\r\n if (revisions) {\r\n for (let revision of revisions) {\r\n if (revision.id == currentRevisionId) {\r\n revision.objectsIdNotDoneLoading = false;\r\n revision.pressed3d = true;\r\n }\r\n if (revision.objectsIdNotDoneLoading) {\r\n objectsIdNotDoneLoading = true;\r\n }\r\n } \r\n model.objectsIdNotDoneLoading = objectsIdNotDoneLoading;\r\n model.pressed3d = true;\r\n }\r\n }\r\n\r\n async handleCorrectViewerSplitSize(): Promise {\r\n\t\tconsole.log('MRP.handleCorrectViewerSplitSize-379');\r\n\t\t//If just one 3d revision is turned on, and one 2d revision turned on, the screen should be split equally. \r\n\t\tlet isAny2dOn: boolean = this.getModels().filter(model => model.pressed2d). length > 0;\r\n\r\n\t\t// I don't when we REQUIRE to have all this crap read in, but the splitter-sizing is NOT one of those cases.\r\n\t\t//let itemsWith3dOnA = (await this.COSTLY_getAllRevisions('HCVSS')).filter((revision: BimViewerRevisionDtoSplitView) => revision.pressed3d == true);\r\n\t\tlet itemsWith3dOn = this.cheap_anyRevisionsWith3dOn();\r\n\r\n\t\t// JG: Apparently: WHENEVER exactly 1 3d-model is enabled, and the 2d-viewer is active, THEN reset their splitter to 50-50:\r\n\t\tif (itemsWith3dOn == 1 && isAny2dOn == true) {\r\n\t\t\tthis.events.publish('work-area-container:set-split-view-size', {top: 50, bot: 50});\r\n\t\t}\r\n }\r\n\r\n\tcheap_anyRevisionsWith3dOn():number {\r\n\t\tlet count=0;\r\n\t\tlet models = this.getModels();\r\n\t\tfor (let model of models) {\r\n\t\t\tif (!this.modelRevisionsMap.has(model)) { continue; }\r\n\t\t\tlet revisions:BimViewerRevisionDtoSplitView[]|undefined = this.modelRevisionsMap.get(model);\r\n\t\t\tif (!revisions) { continue; }\r\n\t\t\tfor (let revision of revisions) {\r\n\t\t\t\tif (revision.pressed3d) { ++count; } //return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn count; //false;\r\n\t}\r\n\r\n turnOff3dRevision(revision: BimViewerRevisionDtoSplitView): void {\r\n\t\tconsole.log('MRP.turnOff3dRevision-387');\r\n revision.pressed3d = false;\r\n }\r\n\r\n turnOff3dModel(model: BimViewerFileDtoSplitView): void {\r\n\t\tconsole.log('MRP.turnOff3dModel-391');\r\n let shouldTurnOffModel: boolean = true;\r\n if (this.modelRevisionsMap.get(model) != undefined) {//in-turnOff3dModel.\r\n this.modelRevisionsMap.get(model)?.forEach((revision: BimViewerRevisionDtoSplitView) => {//in-turnOff3dModel.\r\n if (revision.pressed3d == true) {\r\n shouldTurnOffModel = false;\r\n }\r\n });\r\n }\r\n\r\n if (shouldTurnOffModel) {\r\n model.pressed3d = false;\r\n }\r\n }\r\n\r\n async handleModelNotReady(revisionId: string, model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.handleModelNotReady-406');\r\n let revision: BimViewerRevisionDtoSplitView | undefined = this.modelRevisionsMap.get(model)?.filter((revision: BimViewerRevisionDtoSplitView) => revision.id == revisionId)[0];//in-handleModelNotReady.\r\n if (revision) {\r\n revision.objectsIdNotDoneLoading = false;\r\n revision.pressed2d = false;\r\n revision.pressed3d = false;\r\n revision.isSynced = false;\r\n }\r\n\r\n model.objectsIdNotDoneLoading = false;\r\n model.pressed2d = false;\r\n model.pressed3d = false;\r\n model.isSynced = false;\r\n }\r\n\r\n async handleModelReady(revisionId: string, model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log('MRP.handleModelReady-421');\r\n let revision: BimViewerRevisionDtoSplitView | undefined = this.modelRevisionsMap.get(model)?.filter((revision: BimViewerRevisionDtoSplitView) => revision.id == revisionId)[0];//-in-handleModelReady.\r\n if (revision) {\r\n revision.isSynced = true;\r\n model.isSynced = true;\r\n }\r\n }\r\n\r\n isNewestPluginRevision(currentModelToCheckAgainst: BimViewerFileDtoSplitView, isThisRevisionNewest: BimViewerRevisionDtoSplitView): boolean {\r\n\t\tconsole.log('MRP.isNewestPluginRevision-429');\r\n if (currentModelToCheckAgainst == undefined) { return false; } // ( - Then we can't claim it's the newest.)\r\n\t\tif (!currentModelToCheckAgainst.pluginUpload) { return false; } // ( - If it is not a plugin-model, we can't be choosing 'its' newest plugin-rev..)\r\n\r\n\t\tlet revisions = this.modelRevisionsMap.get(currentModelToCheckAgainst);//in-isNewestPluginRevision\r\n\t\tif (!revisions) { return false; } // ( - if no revisions exist, we can't claim to hold the newest of them.)\r\n\r\n\t\t// We HAVE revisions, and the one we are asking about, matches the front one:\r\n\t\treturn revisions[0] == isThisRevisionNewest; // what kind of equality is being checked between these dicts?\r\n }\r\n\r\n}\r\n","import { BimViewerFileDtoSplitView, BimViewerRevisionDtoSplitView } from 'app/models/viewer-dtos/Dtos/bimviewer-dtos';\r\nimport { ModelRevisionParent } from '../model-revision-parent';\r\nimport {observable} from 'aurelia-framework';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport {EventAggregator} from \"aurelia-event-aggregator\";\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 Model {\r\n private modelList: BimViewerFileDtoSplitView[] = [];\r\n private filteredModels: BimViewerFileDtoSplitView[] = [];\r\n private parentComponent: ModelRevisionParent | undefined;\r\n public isModelButtonsClicked: boolean = false;\r\n @observable filteredInputModel: string = \"\";\r\n private currentSelectedIndex: number = -1;\r\n private connectedModelName: string = \"\";\r\n\r\n constructor(public userService: UserService, public eventAggregator : EventAggregator) {\r\n\t\tconsole.log('model.ts, ctor');\r\n }\r\n\r\n async handleReload(): Promise {\r\n console.log(\"Model.handleReload\", this.parentComponent);\r\n await this.setupModels();//-in-handleReload model.ts\r\n }\r\n\r\n async bind(params: any): Promise {\r\n\t\tconsole.log('model.ts, bind');\r\n this.filteredInputModel = \"\";\r\n this.parentComponent = params;\r\n\t\t\r\n\t\tconsole.log('model.ts bind attempts to call model.setupModels, which assumes MRP has finished its initModels..');\r\n await this.setupModels();//-in-bind model.ts\r\n }\r\n\r\n\tpublic static sortABC:boolean = false; // JG: I like that the server sorts by newest-time, but I don't really know what the user wants/needs.\r\n\r\n async setupModels(): Promise { // called by BIND and RELOAD.\r\n\t\tconsole.log('model.ts, setupModels');\r\n // do we risk a cache-effect by using get instead of post?\r\n let name: string | undefined = this.parentComponent?.appContext?.getSelectedProject()?.name; \r\n this.connectedModelName = name ? name : \"No Connected model name found\";\r\n\r\n let models: BimViewerFileDtoSplitView[] | undefined = this.parentComponent?.getModels();\r\n\t\tconsole.log('setupModels:', models?.length, ', from ParentComponent.getModels');\r\n\r\n this.modelList = models ? models : [];\r\n\t\tif (Model.sortABC) {\r\n\t\t\tthis.sortModelsABC();\r\n\t\t}\r\n this.setupConnectedModel();\r\n this. modelList = await this.userService.fillUsernames(this.modelList,'M.setupModels');\r\n this.filteredModels = this.modelList;\r\n\t\tconsole.log('M-setupModels, filteredModels was:',this.filteredModels.length, 'becomes:', this.modelList.length);\r\n this.formatDateTime();\r\n }\r\n\r\n setupConnectedModel(): void { //If no connected model exists, a fake one is created to tell the user.\r\n\t\tconst hasConnectedModel:boolean = this.connectedModelExist();\r\n\t\tconsole.log('model.ts, setup-CONNECTED-Model, hasConnectedModel?', hasConnectedModel);\t\t\r\n if (this.connectedModelExist()) { return; } \r\n\r\n\t\tconsole.log('making fakeModel with currentRevision 0, as no connectedModel.');\r\n\t\tlet fakeModel: BimViewerFileDtoSplitView = {\r\n\t\t\t\t\t\t\t\t\tid:'00000000-0000-0000-0000-000000000000',\r\n\t\t\t\t\t\t\t\t\tname: this.parentComponent?.appContext?.getSelectedProject()?.name,\r\n\t\t\t\t\t\t\t\t\tcreatedByUser_Id: '00000000-0000-0000-0000-000000000000', //TODO - find user id.\r\n\t\t\t\t\t\t\t\t\tusername: '',\r\n\t\t\t\t\t\t\t\t\tcreated: this.parentComponent?.appContext?.getSelectedProject()?.created_UTC + \"\",\r\n\t\t\t\t\t\t\t\t\tprojectId: this.parentComponent?.appContext.projectId,\r\n\t\t\t\t\t\t\t\t\tcurrentRevision: 0,\r\n\t\t\t\t\t\t\t\t\tisChecked: false,\r\n\t\t\t\t\t\t\t\t\tisOpen: false,\r\n\t\t\t\t\t\t\t\t\tpluginUpload: true,\r\n\t\t\t\t\t\t\t\t\tisSynced: true,\r\n\t\t\t\t\t\t\t\t\tnewestRevisionDate: this.parentComponent?.appContext?.getSelectedProject()?.created_UTC + \"\",\r\n\t\t\t\t\t\t\t\t\tpressed2d: false,\r\n\t\t\t\t\t\t\t\t\tpressed3d: false,\r\n\t\t\t\t\t\t\t\t\tobjectsIdNotDoneLoading: false,\r\n\t\t\t\t\t\t\t\t\taltUpload: 'false'\r\n\t\t\t\t\t\t\t\t}\r\n\t\tthis.modelList.push(fakeModel); // JG: Det er nok fakeModel, vi ofte ser i UI?\r\n }\r\n\r\n connectedModelExist(): boolean {\r\n\t\tlet exists:boolean = (this.modelList.filter(model => (model.pluginUpload)).length > 0);\r\n\t\tconsole.log('model.ts, connectedModelExist..?', exists, 'among #',this.modelList.length, 'models.');\r\n return exists;\r\n }\r\n \r\n sortModelsABC(): void {\r\n\t\tconsole.log('model.ts, sortModelsABC');\r\n this.modelList.sort((element1: BimViewerFileDtoSplitView, element2: BimViewerFileDtoSplitView) => {\r\n if (!element1.name || !element2.name) {\r\n return 0;\r\n }\r\n if (element1?.name?.toLocaleLowerCase() < element2?.name?.toLocaleLowerCase()) {\r\n return -1;\r\n }\r\n if (element1.name.toLocaleLowerCase() > element2.name.toLocaleLowerCase()) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n this.filteredModels.sort((element1, element2) => {\r\n if (!element1.name || !element2.name) {\r\n return 0;\r\n }\r\n if (element1.name.toLocaleLowerCase() < element2.name.toLocaleLowerCase()) {\r\n return -1;\r\n }\r\n if (element1.name.toLocaleLowerCase() > element2.name.toLocaleLowerCase()) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n formatDateTime(): void {\r\n\t\tconsole.log('model.ts, formatDateTime');\r\n this.filteredModels.forEach(model => {\r\n model.created = DateTimeFormatter.formatDate(model.created);\r\n if (model.newestRevisionDate) {\r\n model.newestRevisionDate = DateTimeFormatter.formatDate(model.newestRevisionDate);\r\n }\r\n });\r\n }\r\n \r\n async openModel(model: number): Promise {\r\n\t\t/* Ak, openModel bliver triggered, hvis man klikker i 'hele item rektanglet', UDENFOR 2d/3d knapperne.\r\n\t\t */\r\n\t\tconsole.log('model.ts, openModel');\r\n if (this.isModelButtonsClicked == true) {\r\n this.isModelButtonsClicked = false;\r\n return;\r\n }\r\n let success: boolean | undefined = await this.parentComponent?.showRevisions(this.filteredModels[model]);\r\n if (success != true) {\r\n return;\r\n }\r\n this.filteredModels[model].isOpen = !this.filteredModels[model].isOpen;\r\n if (this.filteredModels[model].isOpen) {\r\n this.currentSelectedIndex = model;\r\n } else {\r\n this.currentSelectedIndex = -1\r\n }\r\n }\r\n\r\n async open2DViewerModel(model: BimViewerFileDtoSplitView, clicked: boolean, event: PointerEvent | undefined): Promise {\r\n\t\tconsole.log('model.ts, open2DViewerModel');\r\n this.isModelButtonsClicked = clicked; //making sure only the button is pressed\r\n if (event?.detail && event?.detail > 1) {\r\n console.warn(\"Multiple clicks are not supported\")\r\n return;\r\n }\r\n if (model.pressed2d != true) {\r\n let revisionList: BimViewerRevisionDtoSplitView[] | undefined = await this.parentComponent?.getAllRevisions_forMODEL(model,'O2VM');\r\n if (revisionList != undefined && revisionList.length > 0) {\r\n this.eventAggregator.publish('2dViewer:TurnOnRevision', {revision: revisionList[0], model: model, is2d: true, isAny3dRevisionOn: this.parentComponent?.isAny3dRevisionOn()})\r\n }\r\n } else {\r\n this.eventAggregator.publish('2dViewer:TurnOffRevision');\r\n }\r\n }\r\n\r\n async open3DViewerModel(model: BimViewerFileDtoSplitView, clicked: boolean, event: PointerEvent | undefined): Promise { // in model.ts\r\n\t\tconsole.log('model.ts, open3DViewerModel');\r\n this.isModelButtonsClicked = clicked; //making sure only the button is pressed\r\n if (event?.detail && event?.detail > 1) { console.warn(\"Multiple clicks are not supported\"); return; }\r\n\t\tlet revisions: BimViewerRevisionDtoSplitView[] | undefined = await this.parentComponent?.getAllRevisions_forMODEL(model,'O3VM');\r\n\t\tif (revisions == undefined || revisions.length == 0) { console.log('(no revisions)'); return; }\r\n\r\n\t\tlet isNewestPluginRevision: boolean | undefined = this.parentComponent?.isNewestPluginRevision(model, revisions[0]);\r\n\t\t// (JG: I don't understand the logic/reasoning of how isNewestPluginRevision() is expressed..?)\r\n\t\t// (Actually, I believe it is because it is intended for revision.ts, so here in model.ts, it becomes a no-op.\r\n\t\t// - because we have 'clicked the entire-model, NOT a revision, we automatically have 'chosen' to use the newest revision.. )\r\n\r\n if (model.pressed3d !== true) {\r\n\t\t\tconsole.log('open3DViewerModel emitting 3dViewer:TurnOn3dRevision');\r\n\t\t\tthis.eventAggregator.publish('3dViewer:TurnOn3dRevision', {model: model, revision: revisions[0], isNewestPluginRevision: isNewestPluginRevision});\r\n } else {\r\n\t\t\tconsole.log('emitting 3dViewer:TurnOffMultiple3dRevision');\r\n\t\t\tthis.eventAggregator.publish('3dViewer:TurnOffMultiple3dRevision', {model: model, revisions: revisions, isNewestPluginRevision: isNewestPluginRevision});\r\n }\r\n }\r\n\r\n closeModel(who:string): void { // UB MRP.closeModel_MRP, MRP.showRevisions og model.filteredInputModelChanged.\r\n\t\tconsole.log('model.ts,closeModel', who, 'with #', this.filteredModels.length, 'filteredModels');\r\n this.filteredModels.forEach(model => {\r\n\t\t\tif (!model.isOpen) { return; }\r\n\t\t\t// only log those we actually need to turn off.\r\n\t\t\t// What a weird and unpleasant design?\r\n\t\t\tconsole.log('model.ts-isOpen<-false', model.id, model);\r\n model.isOpen = false;\r\n });\r\n }\r\n\r\n closePriorModel(priorModelId: string): void {\r\n\t\tconsole.log('model.ts, closePriorModel');\r\n this.filteredModels.forEach(model => {\r\n if(model.id == priorModelId) {\r\n model.isOpen = false;\r\n }\r\n });\r\n }\r\n \r\n //Search filter handling\r\n filteredInputModelChanged(): void {\r\n\t\tconsole.log('model.ts, filteredInputModelChanged');\r\n let priorChosenModel = this.filteredModels[this.currentSelectedIndex];\r\n\r\n\t\tconsole.log('M-filteredInputModelChanged, filteredModels was:',this.filteredModels.length, 'becomes:', this.modelList.length);\r\n this.filteredModels = this.modelList;\r\n\r\n this.filteredModels = this.modelList.filter(model => {\r\n return model?.name?.toLocaleLowerCase().includes(this.filteredInputModel.toLocaleLowerCase())\r\n });\r\n\t\tconsole.log('(filter) M-filteredInputModelChanged, filteredModels down to#',this.filteredModels.length);\r\n\r\n let index = -1;\r\n if(priorChosenModel != undefined) {\r\n index = this.filteredModels.indexOf(priorChosenModel);\r\n }\r\n if(index != -1) {\r\n if(this.filteredModels[index] != undefined) { \r\n this.currentSelectedIndex = index;\r\n }\r\n } else {\r\n this.closeModel('in filteredInputModelChanged');\r\n\r\n if(priorChosenModel != undefined) {\r\n priorChosenModel.isOpen = false;\r\n this.parentComponent?.hideRevisions();\r\n }\r\n } \r\n }\r\n\r\n resetInput(): void {\r\n\t\tconsole.log('model.ts, resetInput');\r\n this.filteredInputModel = \"\";\r\n }\r\n}\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","ModelRevisionParent","constructor","events","apiClient","appContext","userService","projectId","parentDoneLoading","modelRevisionsMap","Map","subscriptions","console","log","this","keybuttonHandling","event","key","closeModelRevisionContainer","activate","params","attached","bind","self","subscribe","parameter","handleModelNotReady","revisionId","model","handleModelReady","undoLoadModel","is2d","turnOn2dModelById","turnOn3dModelById","async","revision","turnOn2dRevisionById","turnOn3dRevisionById","showModels","handleCorrectViewerSplitSize","prjId","initModels","reason","error","window","addEventListener","projectIdChanged","trace","reload","currentRevision","getModels","filter","modelId","COSTLY_getAllRevisions","forEach","revisionModelView","open3DViewerRevisionOnStartup","open2DViewerRevisionOnStartup","modelModelView","open2DViewerModel","undefined","open3DViewerModel","revisionIds","revisions","get","objectsIdNotDoneLoading","pressed2d","pressed3d","publish","unbind","removeEventListener","subscription","dispose","handleReload","hideRevisions","err","api","project","modelList","jsonResult","set","pluginUpload","pluginModel","modelArray","Array","from","keys","length","container","document","getElementById","style","visibility","closeModel_MRP","resetInput","who","closeModel","showRevisions","priorModelId","currentModel","isOpen","scrollTop","closePriorModel","getAllRevisions_forMODEL","revisionList","fillUsernames","sortRevisions","sort","revision1","revision2","revisionContainer","hidden","modelRevisionContainer","topBarHeight","panelLeftLength","clientWidth","panelRightLength","navigation","getElementsByClassName","navbar","modelRevisionHeight","clientHeight","modelRevisionWidth","left","innerWidth","top","innerHeight","turnOn2dRevision","turnOff2dModel","turnOn2dModel","turnOff2dRevision","isAny3dRevisionOn","find","m","allModels","ix","allRevision","started3dModelLoading","model3dDoneLoading","currentRevisionId","isAny2dOn","cheap_anyRevisionsWith3dOn","bot","count","models","has","turnOff3dRevision","turnOff3dModel","shouldTurnOffModel","isSynced","isNewestPluginRevision","currentModelToCheckAgainst","isThisRevisionNewest","bindable","autoinject","EventAggregator","Model","eventAggregator","filteredModels","isModelButtonsClicked","filteredInputModel","currentSelectedIndex","connectedModelName","parentComponent","setupModels","name","getSelectedProject","sortABC","sortModelsABC","setupConnectedModel","formatDateTime","hasConnectedModel","connectedModelExist","fakeModel","createdByUser_Id","username","created","created_UTC","isChecked","newestRevisionDate","altUpload","exists","element1","element2","toLocaleLowerCase","formatDate","openModel","clicked","detail","warn","filteredInputModelChanged","priorChosenModel","includes","index","indexOf","observable"],"sourceRoot":""}