{"version":3,"file":"app-f38241ad.098e3fd5aca58d85.bundle.js","mappings":"mOAGIA,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,iYAAkY,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,gFAAgF,MAAQ,GAAG,SAAW,oLAAoL,eAAiB,CAAC,olCAAolC,WAAa,MAEn1D,S,qECPAD,EAAOE,QAAU,uW,0qBCgBV,IAAMC,EAAN,MAaH,WAAAC,CAAoBC,EAAyBC,EACjCC,EAAqCC,EAA4BC,GADzD,KAAAJ,IAAAA,EAAyB,KAAAC,OAAAA,EACjC,KAAAC,WAAAA,EAAqC,KAAAC,MAAAA,EAA4B,KAAAC,oBAAAA,EAVrE,KAAAC,wBAAkC,EAClC,KAAAC,WAAqB,GACrB,KAAAC,qBAA+B,GAChC,KAAAC,eAAyB,IACzB,KAAAC,kBAA4B,EAElB,KAAAC,UAAqB,GAC9B,KAAAC,cAAgC,EAIxC,CAEA,UAAMC,CAAKC,GACH,IAAoBC,QAAUC,QAAQC,IAAI,kBAC9CC,KAAKC,qBACLD,KAAKP,UAAYG,EAAOH,UACxBO,KAAKjB,IAAImB,QAAQF,KAAKP,UAC1B,CAEA,cAAMU,GACE,IAAoBN,QAAUC,QAAQC,IAAI,sBAC9CC,KAAKI,4BACCJ,KAAKK,YACf,CAEA,gBAAAC,GACIN,KAAKO,YACT,CAEA,mBAAAH,GACmB,IAAII,gBAAgBC,IAE/B,IAAK,IAAIC,KAASD,EAAS,CACvB,MAAME,EAAKD,EAAME,YACjBZ,KAAKR,iBAAmBmB,EAAGE,MACvBF,EAAGE,MAAQb,KAAKT,gBAChBS,KAAKhB,OAAO8B,QAAQ,4BAA4B,E,KAInDC,QAAQC,SAASC,eAAe,gBAC7C,CAEA,kBAAAhB,GACI,IAAIiB,EAAOlB,KACXA,KAAKN,cAAgB,CACjBM,KAAKhB,OAAOmC,UAAU,2BAA2BC,MAAOC,UAC1CH,EAAKI,eAAeD,EAAUE,MAAOF,EAAUG,YACrDxB,KAAKZ,uBAAyBiC,EAAUE,MAAME,iBAAmBJ,EAAUG,SAASA,SACpFN,EAAKlC,OAAO8B,QAAQ,4BAA6B,CAACS,MAAOF,EAAUE,MAAOC,SAAUH,EAAUG,SAAUE,MAAM,IAC9GR,EAAKlC,OAAO8B,QAAQ,kCAAkC,GACjDO,EAAUM,mBACX3B,KAAKhB,OAAO8B,QAAQ,0CAA2C,CAACc,IAAK,EAAGC,IAAK,K,IAIzF7B,KAAKhB,OAAOmC,UAAU,4BAA4BC,gBACpCF,EAAKY,sBACX9B,KAAKZ,wBAAyB,EAC9B8B,EAAKlC,OAAO8B,QAAQ,6BAA8B,CAACS,WAAOQ,EAAWP,cAAUO,EAAWL,MAAM,IAChGR,EAAKlC,OAAO8B,QAAQ,kCAAkC,G,IAG9Dd,KAAKhB,OAAOmC,UAAU,sCAAsC,KAExDnB,KAAKgC,sBAAsB,IAIvC,CAEA,MAAAC,GACIjC,KAAKN,cAAcwC,SAASC,GAA+BA,EAAaC,WAC5E,CAEA,gBAAM7B,GACsBwB,MAApB/B,KAAKqC,aACLC,EAAE,sBAAsBC,SAAS,cAAevC,KAAKqC,YAAYG,QAEzE,CAEA,gBAAMnC,GACsD,GAApDL,KAAKb,oBAAoBsD,wBACzBzC,KAAKb,oBAAoBuD,eAGzB1C,KAAKgC,sBAEb,CAEA,WAAAW,GACI,OAAOL,EAAE,qBACb,CAEA,oBAAAN,GACI,IAAId,EAAOlB,KACXsC,EAAE,sBAAsB3C,KAAK,qBAAqByB,eAAewB,EAAcJ,GAC3E1C,QAAQC,IAAI,gBAAkB6C,GAC9B9C,QAAQC,IAAI,6BAA8ByC,GAC1CF,EAAE,sBAAsBC,SAAS,cAAeC,GAChDtB,EAAKlC,OAAO8B,QAAQ,6BAA8B,CAACS,WAAOQ,EAAWP,cAAUO,EAAWL,MAAM,IAChGR,EAAKlC,OAAO8B,QAAQ,kCAAkC,GACtDI,EAAKhC,MAAM2D,YAAY,iBAAkB,oCAC7C,IACAP,EAAE,sBAAsB3C,KAAK,iBAAiB,SAASiD,EAAcJ,GACjE,IAAIM,EAAmBR,EAAE,sBAAsBC,SAAS,cACpDhB,EAA+B,IAAI,KACvCA,EAAMwB,QAAUD,EAChBvB,EAAMiB,QAAUA,EAChBjB,EAAMyB,gBAAiB,EACvB9B,EAAKmB,YAAcd,EAGf,IAAoB1B,QAAUC,QAAQC,IAAI,wBAAyByC,EAC3E,IACAxC,KAAKiD,sBACT,CAEA,oBAAAA,GACI,IAAI/B,EAAOlB,KACXsC,EAAE,sBAAsB3C,KAAK,mBAAmByB,eAAewB,EAAcM,GAKzE,GAJAA,EAAYA,EAAUC,IAAIC,QAE1BtD,QAAQC,IAAI,SAAW6C,GACvB9C,QAAQC,IAAI,WAAamD,GACrBhC,EAAK9B,uBAAwB,CAC7B,GAAwB,GAApB8D,EAAUG,OACV,OAEJnC,EAAKlC,OAAO8B,QAAQ,8BAA+B,CAACoC,UAAWA,G,CAEnEZ,EAAE,sBAAsBgB,OAAO,IAAkBC,aACjDjB,EAAE,sBAAsBgB,OAAO,IAAkBE,OAAQN,EAC7D,GACJ,CAEA,uBAAMpB,GACF,IAAI2B,EAA4CzC,SAAS0C,uBAAuB,eAAe,GAQ/F,OAPGD,aAAO,EAAPA,EAASE,eACR3D,KAAKV,qBAAuBmE,aAAO,EAAPA,EAASE,aAErC3D,KAAKqC,cACLC,EAAE,sBAAsBC,SAAS,cAAevC,KAAKqC,YAAYG,SACjExC,KAAKqC,YAAYW,gBAAiB,IAE/B,CACX,CAEA,oBAAM1B,CAAeC,EAAkCqC,GAGnD,OAFA5D,KAAKX,WAAauE,EAAmBjF,GAC3CmB,QAAQC,IAAI,2CACOC,KAAK6D,QAAQtC,EAC9B,CAeA,aAAMsC,CAAQtC,GACV,IAAIuC,GAAmB,EACnBC,EAAgB,GAChBC,QAAqChE,KAAKjB,IAAImB,QAAQF,KAAKP,WAC1DwE,IAAI,0CAA0CjE,KAAKP,wBAAwBO,KAAKX,cAChF6E,aACL,GAAgBnC,MAAZiC,EAEA,OADAF,GAAU,EACHA,EAYX,GAVIE,EAASG,UAMTnE,KAAKhB,OAAO8B,QAAQ,2BAA4B,CAACS,MAAOA,EAAOlC,WAAY2E,EAAS3E,aACpF0E,EAAyBC,EAASI,eAAgBC,IAClDP,GAAU,IAPV9D,KAAKhB,OAAO8B,QAAQ,8BAA+B,CAACS,MAAOA,EAAOlC,WAAY2E,EAAS3E,aACvFW,KAAKd,MAAM2D,YAAY,kBAAmB,yBAAyBmB,EAASM,kCAC5EP,EAAQ,GACRD,GAAU,GAMC,GAAXA,GAA4B,IAATC,EACnB,IACIzB,EAAE,sBAAsBC,SAAS,UAAWwB,E,CAC9C,MAAOQ,GAEL,OADAzE,QAAQC,IAAI,SAAWwE,IAChB,C,CAGf,OAAOT,CACX,CAEA,gBAAMU,GACFxE,KAAKhB,OAAO8B,QAAQ,4BAA4B,EACpD,GAnMA,GAAC,EAAA2D,S,yDAVQ5F,EAAa,GADzB,EAAA6F,W,uBAc6B,IAA4B,EAAAC,gBAC/B,IAAiC,IAA0C,OAdzF9F,E","sources":["webpack://client-app/./src/app/project/work-area/bim-viewer-two-d/bim-viewer-two-d.scss","webpack://client-app/./src/app/project/work-area/bim-viewer-two-d/bim-viewer-two-d.html","webpack://client-app/./src/app/project/work-area/bim-viewer-two-d/bim-viewer-two-d.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, `#viewerContainer2d{position:relative;width:100%;height:100%}#viewerContainer2d *{background-color:rgba(255,255,255,.8)}.switch-button{position:absolute;right:0;top:0;margin-top:8px;margin-right:5px}.bs-storey-select-container{width:fit-content !important}.bs-storey-select{width:fit-content !important}.bs-storey-select button{height:30.85px !important}.bs-dropup{width:fit-content}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/work-area/bim-viewer-two-d/bim-viewer-two-d.scss\"],\"names\":[],\"mappings\":\"AAAA,mBACI,iBAAA,CACH,UAAA,CACA,WAAA,CACG,qBACI,qCAAA,CAKR,eACI,iBAAA,CACA,OAAA,CACA,KAAA,CACA,cAAA,CACA,gBAAA,CAKJ,4BACI,4BAAA,CAGJ,kBACI,4BAAA,CACA,yBACI,yBAAA,CAKR,WACI,iBAAA\",\"sourcesContent\":[\"#viewerContainer2d {\\r\\n position: relative;\\r\\n\\twidth: 100%;\\r\\n\\theight: 100%;\\r\\n * {\\r\\n background-color: rgba(255, 255, 255, 0.8); \\r\\n }\\r\\n \\r\\n}\\r\\n\\r\\n.switch-button {\\r\\n position: absolute;\\r\\n right:0;\\r\\n top:0;\\r\\n margin-top: 8px;\\r\\n margin-right: 5px;\\r\\n}\\r\\n\\r\\n//This styling is used to remove the invisible line making the dragging of the viewpoint not work in the bottom of the screen\\r\\n//This is catenda's own setup and if things get skewed it might be due to a change in Canteda's API.\\r\\n.bs-storey-select-container {\\r\\n width:fit-content !important;\\r\\n}\\r\\n\\r\\n.bs-storey-select {\\r\\n width:fit-content !important;\\r\\n button {\\r\\n height: 30.85px!important;\\r\\n }\\r\\n\\r\\n}\\r\\n\\r\\n.bs-dropup {\\r\\n width:fit-content;\\r\\n}\\r\\n\\r\\n// .bs-button {\\r\\n// \\tbackground-color: rgba(36, 42, 48,1) !important;\\r\\n// \\tcolor: white !important;\\r\\n// \\tborder-color: black !important;\\r\\n// \\ti {\\r\\n// \\t\\tcolor: white!important;\\r\\n// \\t}\\r\\n// span {\\r\\n// white-space: nowrap!important;\\r\\n// }\\r\\n// }\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\r\\n \\r\\n \\r\\n \\r\\n\";","import {autoinject, bindable} from \"aurelia-framework\";\r\nimport {ApiClient} from \"../../../services/api-client\";\r\nimport {EventAggregator, Subscription} from \"aurelia-event-aggregator\";\r\nimport { AppContextService } from \"app/services/app-context-service\";\r\nimport {ViewerTokenDto} from \"../../../models/viewer-dtos/Dtos/Bimsync/BimsyncDtos\";\r\nimport { GetViewerResponse2d, RevisionInformation2d, Story } from \"../split-viewer-interfaces\";\r\nimport { ModalService } from \"app/services/modal-service\";\r\nimport { BimViewerFileDtoSplitView, BimViewerModelAndRevision, BimViewerRevisionDtoSplitView } from \"app/models/viewer-dtos/Dtos/bimviewer-dtos\";\r\nimport { BimsyncSetupHandler } from \"app/services/bimsync-setup-handler\";\r\nimport { ViewerMethodNames } from \"app/services/viewer-object-info-service/viewer-method-names\";\r\n\r\ndeclare let $: any;\r\ndeclare let ResizeObserver: any; //Is type ResizeObserver\r\n\r\n\r\n@autoinject\r\nexport class BimViewerTwoD {\r\n public loadedModel?: RevisionInformation2d;\r\n public $viewer3d: any;\r\n public $viewer2d: any;\r\n private isNewestPlugin2dActive: boolean = false;\r\n private revisionId: string = \"\";\r\n private lastLoadedStoreyName: string = \"\";\r\n public max2dDockWidth: number = 600;\r\n public middlePanelWidth: number = -1;\r\n\r\n @bindable public projectId : string = \"\";\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private api : ApiClient, private events : EventAggregator,\r\n public appContext:AppContextService, public modal: ModalService, public bimsyncSetupHandler: BimsyncSetupHandler) {\r\n }\r\n \r\n async bind(params: any): Promise {\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"2d-viewer-bind\"); }\r\n this.setupSubscriptions();\r\n this.projectId = params.projectId;\r\n this.api.project(this.projectId)\r\n }\r\n\r\n async attached(): Promise {\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"2d-viewer-attached\"); }\r\n this.setupResizeObserver();\r\n await this.loadViewer();\r\n }\r\n\r\n projectIdChanged() {\r\n this.fullReload();\r\n }\r\n\r\n setupResizeObserver(): void {\r\n let observer = new ResizeObserver((entries: any) => {\r\n //The only resize we care about is the panel-middle as that is dependent on how the 2d view should be displayed.\r\n for (let entry of entries) {\r\n const cr = entry.contentRect;\r\n this.middlePanelWidth = cr.width;\r\n if (cr.width < this.max2dDockWidth) {\r\n this.events.publish('WorkAreaContainer:Move2d', true);\r\n }\r\n }\r\n });\r\n observer.observe(document.getElementById(\"panel-middle\"));\r\n }\r\n\r\n setupSubscriptions(): void {\r\n let self = this;\r\n this.subscriptions = [\r\n this.events.subscribe('2dViewer:TurnOnRevision', async (parameter: BimViewerModelAndRevision) => {\r\n if (await self.turnOnRevision(parameter.model, parameter.revision)) {\r\n this.isNewestPlugin2dActive = parameter.model.currentRevision == parameter.revision.revision\r\n self.events.publish('Revision:RevisionTurnedOn', {model: parameter.model, revision: parameter.revision, is2d: true});\r\n self.events.publish('WorkAreaContainer:Show2dViewer', true);\r\n if (!parameter.isAny3dRevisionOn) {\r\n this.events.publish('work-area-container:set-split-view-size', {top: 5, bot: 95});\r\n }\r\n }\r\n }),\r\n this.events.subscribe('2dViewer:TurnOffRevision', async () => {\r\n if (await self.turnOffRevision2d()) {\r\n this.isNewestPlugin2dActive = false;\r\n self.events.publish('Revision:RevisionTurnedOff', {model: undefined, revision: undefined, is2d: true});\r\n self.events.publish('WorkAreaContainer:Show2dViewer', false);\r\n }\r\n }),\r\n this.events.subscribe('viewer:enable-bindings-and-options', () => {\r\n //Ensuring viewers are setup before bindings are handled.\r\n this.handle2dviewerLoaded();\r\n })\r\n ]\r\n\r\n }\r\n\r\n unbind(): void {\r\n this.subscriptions.forEach((subscription: Subscription) => subscription.dispose());\r\n }\r\n\r\n async fullReload(): Promise {\r\n if (this.loadedModel != undefined) {\r\n $('#viewerContainer2d').viewer2d('unloadModel', this.loadedModel.modelId);\r\n }\r\n }\r\n \r\n async loadViewer(): Promise { //Loads cantenda's viewer.\r\n if (this.bimsyncSetupHandler.isBimsync_ENGINES_Setup == false) {\r\n this.bimsyncSetupHandler.loadViewer2d();\r\n\r\n } else {\r\n this.handle2dviewerLoaded();\r\n }\r\n }\r\n\r\n getViewer2d(): void {\r\n return $(\"#viewerContainer2d\");\r\n }\r\n\r\n handle2dviewerLoaded(): void {\r\n let self = this;\r\n $('#viewerContainer2d').bind('viewer2d.loadfail', async function(event: Event, modelId: string) {\r\n console.log(\"Failed event \" , event);\r\n console.log(\"Viewer2D model load failed\", modelId);\r\n $('#viewerContainer2d').viewer2d('unloadModel', modelId);\r\n self.events.publish('Revision:RevisionTurnedOff', {model: undefined, revision: undefined, is2d: true});\r\n self.events.publish('WorkAreaContainer:Show2dViewer', false);\r\n self.modal.OpenMessage(\"2D model error\", \"The 2D model could not be opened.\");\r\n });\r\n $('#viewerContainer2d').bind('viewer2d.load', function(event: Event, modelId: string) {\r\n let storeys: Story[] = $('#viewerContainer2d').viewer2d('getStoreys');\r\n let model: RevisionInformation2d = new RevisionInformation2d();\r\n model.stories = storeys;\r\n model.modelId = modelId;\r\n model.isModelShowing = true;\r\n self.loadedModel = model;\r\n\r\n // self.setStorey(storeys); //implemented wrong, and the viewer-ui setup should also make this redundant.\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"Viewer2D model loaded\", modelId); }\r\n });\r\n this.handle2dViewerSelect();\r\n }\r\n\r\n handle2dViewerSelect(): void {\r\n let self = this;\r\n $('#viewerContainer2d').bind('viewer2d.select', async function(event: Event, objectIds: number[]) {\r\n objectIds = objectIds.map(Number) //Hack to convert the \"string-type\" numbers from Catenda to actual \"number-type\" numbers.\r\n\r\n console.log(\"event \" , event);\r\n console.log(\"Objects \" , objectIds);\r\n if (self.isNewestPlugin2dActive) {\r\n if (objectIds.length == 0) {\r\n return;\r\n }\r\n self.events.publish('BP:highlight-selected-items', {objectIds: objectIds});\r\n }\r\n $('#viewerContainer3d').viewer(ViewerMethodNames.deselectAll);\r\n $('#viewerContainer3d').viewer(ViewerMethodNames.select, objectIds);\r\n });\r\n }\r\n\r\n async turnOffRevision2d(): Promise {\r\n let element: HTMLSpanElement = document.getElementsByClassName('button-text')[0]; //Catendas own storey select input.\r\n if(element?.textContent) {\r\n this.lastLoadedStoreyName = element?.textContent;\r\n }\r\n if (this.loadedModel) {\r\n $('#viewerContainer2d').viewer2d('unloadModel', this.loadedModel.modelId);\r\n this.loadedModel.isModelShowing = false;\r\n }\r\n return true;\r\n }\r\n\r\n async turnOnRevision(model: BimViewerFileDtoSplitView, revisionToToggleOn: BimViewerRevisionDtoSplitView): Promise {\r\n this.revisionId = revisionToToggleOn.id;\r\n\t\tconsole.log('turnOnRevision calls BV2D.loadUrl');\r\n return await this.loadUrl(model);\r\n }\r\n\r\n // setStorey(storeys: Story[]): void { //Hack to ensure the correct storey and name is loaded and shown\r\n // if(this.lastLoadedStoreyName != undefined) {\r\n // let filteredStoreys: Story[] = storeys.filter(element => {\r\n // return element.name == this.lastLoadedStoreyName;\r\n // })\r\n // if(filteredStoreys != undefined && filteredStoreys[0] != undefined) {\r\n // $('#viewerContainer2d').viewer2d('showStorey', filteredStoreys[0].id);\r\n // }\r\n // } else {\r\n // $('#viewerContainer2d').viewer2d('showStorey', storeys[0].id);\r\n // }\r\n // }\r\n\r\n async loadUrl(model: BimViewerFileDtoSplitView): Promise {\r\n let success: boolean = false;\r\n let url2d: string = \"\";\r\n let response:GetViewerResponse2d = await this.api.project(this.projectId)\r\n .get(`BimsyncViewer/GetViewer2d?aocProjectId=${this.projectId}&revisionId=${this.revisionId}`)\r\n .jsonResult();\r\n if (response == undefined) {\r\n success = false;\r\n return success;\r\n }\r\n if(!response.isSynced) {\r\n this.events.publish('ModelRevision:ModelNotReady', {model: model, revisionId: response.revisionId});\r\n this.modal.OpenMessage(\"Processing file\", `The requested file is ${response.syncProgress}% done processing.`);\r\n url2d = \"\";\r\n success = false;\r\n } else {\r\n this.events.publish('ModelRevision:ModelReady', {model: model, revisionId: response.revisionId});\r\n url2d = (response.viewerTokenDto).url;\r\n success = true;\r\n }\r\n if (success == true && url2d != \"\") {\r\n try { \r\n $('#viewerContainer2d').viewer2d('loadUrl', url2d); //Doing this means reloaded 2d drawing everytime but will avoid the boundingbox issue.\r\n } catch (e) {\r\n console.log(\"ERROR \" , e);\r\n return false;\r\n }\r\n }\r\n return success;\r\n }\r\n\r\n async move2dView(): Promise {\r\n this.events.publish('WorkAreaContainer:Move2d', false);\r\n }\r\n}\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","BimViewerTwoD","constructor","api","events","appContext","modal","bimsyncSetupHandler","isNewestPlugin2dActive","revisionId","lastLoadedStoreyName","max2dDockWidth","middlePanelWidth","projectId","subscriptions","bind","params","LogInf","console","log","this","setupSubscriptions","project","attached","setupResizeObserver","loadViewer","projectIdChanged","fullReload","ResizeObserver","entries","entry","cr","contentRect","width","publish","observe","document","getElementById","self","subscribe","async","parameter","turnOnRevision","model","revision","currentRevision","is2d","isAny3dRevisionOn","top","bot","turnOffRevision2d","undefined","handle2dviewerLoaded","unbind","forEach","subscription","dispose","loadedModel","$","viewer2d","modelId","isBimsync_ENGINES_Setup","loadViewer2d","getViewer2d","event","OpenMessage","storeys","stories","isModelShowing","handle2dViewerSelect","objectIds","map","Number","length","viewer","deselectAll","select","element","getElementsByClassName","textContent","revisionToToggleOn","loadUrl","success","url2d","response","get","jsonResult","isSynced","viewerTokenDto","url","syncProgress","e","move2dView","bindable","autoinject","EventAggregator"],"sourceRoot":""}