{"version":3,"file":"app-fb6c526d.4139a7b386697c7b.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/services/bimsync-client.ts","webpack://client-app/./src/app/services/bimsync-setup-handler.ts","webpack://client-app/./src/app/services/cell-edit-service.ts"],"sourcesContent":["import {autoinject} from \"aurelia-framework\";\r\nimport {ApiClient} from \"./api-client\";\r\nimport {AccessTokenDto} from \"../models/viewer-dtos/Dtos/Bimsync/BimsyncDtos\";\r\nimport {IfcProduct} from \"../models/viewer-dtos/Dtos/Bimsync/IfcDtos\";\r\nimport { BimViewerFileDtoSplitView, CheckRevisionSyncStatusResponseDto } from \"app/models/viewer-dtos/Dtos/bimviewer-dtos\";\r\nimport { GetAllObjectIdsResponse, IFCObject, ObjectRelation, ObjectRelationChild, ObjectRelationParent, ObjectRelationTreeSimple } from \"app/project/work-area/split-viewer-interfaces\";\r\n\r\nclass FetchObjectHandler {\r\n\tshouldContinue: boolean;\r\n\t\totherObjectIdsList: number[];\r\n\t\tspaceObjectIds: number[];\r\n\t\ttest: ObjectRelation[] = [];\r\n\t\tpage: number;\r\n\t\tpageSize: number;\r\n\t\tstartingBimSyncProjectId: string;\r\n\t\tsomethingWentWrong: boolean;\r\n\t\tfailedCalls: number;\r\n\r\n\t\tconstructor(bimsyncProjectId: string) {\r\n\t\tthis.shouldContinue = true,//constructor\r\n\t\tthis.otherObjectIdsList = [],\r\n\t\tthis.spaceObjectIds = [],\r\n\t\tthis.page = 1,\r\n\t\tthis.pageSize = 100,\r\n\t\tthis.startingBimSyncProjectId = bimsyncProjectId,\r\n\t\tthis.somethingWentWrong = false,\r\n\t\tthis.failedCalls = 0\r\n\t}\r\n}\r\n\r\n\r\n\r\nfunction bimsync_addr():string {\r\n\tthrow 'not enabled';\r\n\t//let _bimsync_addr:string = 'https://api.nonesync.com/v2';\r\n\t//return _bimsync_addr;\r\n}\r\n\r\n@autoinject\r\nexport class BimsyncClient {\r\n\tprivate token : AccessTokenDto | undefined;\r\n\tprivate stringToken: string = \"\";\r\n\tprivate bimsyncProjectId: string = \"\";\r\n\tpublic static abortObjectFetching: boolean = false; //If the work-area is left while instances are being loaded, this is set to true to abort the fetching.\r\n\r\n\t\r\n\tconstructor(private api : ApiClient) {\r\n\t\t\r\n\t}\r\n\r\n\tasync setTokenAndProject(projectId: string): Promise {\r\n\t\tawait Promise.all(\r\n\t\t[\r\n\t\t\tthis.api.project(projectId)\r\n\t\t\t.get(`BimsyncViewer/GetBimsyncProjectId?aocProjectId=${projectId}`).stringResult()\r\n\t\t\t.then(str => this.bimsyncProjectId = str)\r\n\t\t\t,\r\n\t\t\tthis.GetToken(projectId).then(res => {\r\n\t\t\t\tif(res != undefined) {\r\n\t\t\t\t\tthis.stringToken = res.access_token\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t]);\r\n\t}\r\n\t\r\n\tasync GetToken(projectId: string) : Promise {\r\n\t\tthis.token = await this.api.project(projectId).get('BimsyncViewer/GetToken')\r\n\t\t\t.jsonResult();\r\n\t\treturn this.token;\r\n\t}\r\n\t\r\n\tasync GetProducts() : Promise {\r\n\t\tlet value: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products`, {\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`\r\n\t\t\t}\r\n\t\t})\r\n\t\t;\r\n\t\treturn await value.json();\r\n\t}\r\n\r\n\tasync GetProductInfoByObjectId(objectId: number): Promise {\r\n\t\tlet value: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/${objectId}`, {\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn await value.json();\r\n\t}\r\n\r\n\tasync GetProductInfoByInstanceGlobalId(globalId: string): Promise {\r\n\t\tlet query = `\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"attributes.GlobalId\": { //WORKS\r\n\t\t\t\t\t\"$eq\": \"${globalId}\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products`, settings);\r\n\t\ttry {\r\n\t\t\treturn await resp.json();\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t}\r\n\r\n\tasync GetProductInfoByInstanceTag(tagId: number): Promise {\r\n\t\tlet query = `\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"attributes.Tag\": { //DO NOT WORK.\r\n\t\t\t\t\t\"$eq\": ${tagId}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products`, settings);\r\n\t\ttry {\r\n\t\t\treturn await resp.json();\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t}\r\n\r\n\tasync GetProductsInfoByInstanceObjectId(objectId: number): Promise {\r\n\t\tlet query = `\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"objectId\": { //WORKS\r\n\t\t\t\t\t\"$eq\": ${objectId}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products`, settings);\r\n\t\ttry {\r\n\t\t\tlet queryRes: IfcProduct[] = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t}\r\n\t}\r\n\tasync GetRelationsInfoByInstanceObjectId(objectId: number): Promise {\r\n\t\tlet query = `\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"objectId\": {\r\n\t\t\t\t\t\"$eq\": ${objectId}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations?pageSize=1000`, settings);//GetRelationsInfoByInstanceObjectId\r\n\t\ttry {\r\n\t\t\treturn await resp.json();\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t}\r\n\r\n\tasync GetRelationsByType(type: string): Promise {\r\n\t\tlet query = `\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"ifcType\": { \r\n\t\t\t\t\t\"$eq\": \"${type}\" //Insert type here\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations`, settings);//GetRelationsByType\r\n\t\ttry {\r\n\t\t\tlet queryRes: any[] = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t}\r\n\t}\r\n\tasync GetObjectsByParent(object: number): Promise {\r\n\t\tlet query = ` //ACTUALLY WORKING\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"objectId\": { \r\n\t\t\t\t\t\"$eq\": ${object}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tlet query2 = ` //JUST GIVING US ALL DATA\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"parent.objectId\": {\r\n\t\t\t\t\t\"$eq\": ${object}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tlet query3 = ` //JUST GIVING US ALL DATA\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"parent.objectId\": {\r\n\t\t\t\t\t\"$in\" : [${object}]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tlet query4 = ` //ERROR CODE 30\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"parent\": {\r\n\t\t\t\t\t\"objectId\": {\r\n\t\t\t\t\t\t\"$eq\": ${object}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\t//Works though attributes is not part of a relation object.\r\n\t\tlet query5 = ` //ACTUALLY WORKING.\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"attributes.GlobalId\": { //Both cases have been tried for GlobalId/globalId.\r\n\t\t\t\t\t\"$eq\": \"0onM6o7f5A1A5SvrtgGvgD\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\r\n\t\tlet query6 = ` //JUST GIVING US ALL DATA\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"parent.globalId\": { //Both cases have been tried for GlobalId/globalId.\r\n\t\t\t\t\t\"$eq\": \"0onM6o7f5A1A5SvrtgGvgD\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tlet query7 = ` //JUST GIVING US ALL DATA\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"type.ifcType\": { \r\n\t\t\t\t\t\"$eq\": \"IfcCurtainWallType\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query7,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations`, settings);//GetObjectsByParent\r\n\t\ttry {\r\n\t\t\tlet queryRes: any[] = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t}\r\n\t}\r\n\r\n\tasync downloadRevisionFile(revisionFromBimViewer: CheckRevisionSyncStatusResponseDto, normalize: boolean): Promise {\r\n\t\tlet response: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/revisions/${revisionFromBimViewer.bimRevisionId}?normalize=${normalize}`, {\r\n\t\t\tmethod: 'GET',\t\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Accept': 'application/ifc'\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t});\r\n\t\tlet blob = await response.blob();\r\n\t\tlet documentFile = document.createElement(\"a\");\r\n\t\tdocumentFile.href = window.URL.createObjectURL(blob);\r\n\t\tdocumentFile.download = revisionFromBimViewer.name;\r\n\t\tdocumentFile.click();\r\n\t}\r\n\r\n\tasync listModels(): Promise {\r\n\t\tlet resp:Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/models`, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\theaders: {\r\n\t\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t\t}\r\n\t\t});\r\n\t\treturn resp.json();\r\n\t}\r\n\r\n\tasync listRevisions(): Promise {\r\n\t\tlet resp:Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/revisions`, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\theaders: {\r\n\t\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t\t}\r\n\t\t});\r\n\t\treturn resp.json();\r\n\t}\r\n\r\n\tasync getRelations(revisionId: string): Promise {\r\n\t\tconsole.log('bsc.getRelations');\r\n\t\tlet resp:Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations/?revision=${revisionId}&pageSize=100`, {//getRelations\r\n\t\t\tmethod: 'GET',\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn resp.json();\r\n\t}\r\n\r\n\torganiseReceivedObjects(fetchObjectHandler: FetchObjectHandler,objectsFromPage: ObjectRelation[]): void {\r\n\t\tobjectsFromPage.forEach(object => {\r\n\t\t\tif(object.ifcType == \"IfcSpace\") {\r\n\t\t\t\tfetchObjectHandler.spaceObjectIds.push(object.objectId);\r\n\t\t\t} else {\r\n\t\t\t\tfetchObjectHandler.otherObjectIdsList.push(object.objectId);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\thandleObjectsNotFetched(fetchObjectHandler: FetchObjectHandler): void {\r\n\t\tfetchObjectHandler.failedCalls++;\r\n\t\tfetchObjectHandler.somethingWentWrong = true;\r\n\t}\r\n\r\n\thandleFetchedObjectsResponse(r:ProdRelsResponse, fetchObjectHandler: FetchObjectHandler, objectsFromPage: ObjectRelation[] | string, isNewestRevision: boolean): void {\r\n\t\tif (r.statusCode == 500) {\r\n\t\t\tfetchObjectHandler.shouldContinue = false; \r\n\t\t\tconsole.log('aborting relation fetch because of server 500:', r.err);\r\n\t\t}\r\n\r\n\t\tif (!r.ok) { //typeof objectsFromPage === \"string\") { // error-case\r\n\t\t\tthis.handleObjectsNotFetched(fetchObjectHandler);\r\n\t\t\t/* NB. In case of 'unspecified error' (not 500), \r\n\t\t\t the stop-mechanism for LOOP in GetAllObjectIdsForRevision()\r\n\t\t\t is, that we at most tolerate .. 10(?) failedCalls!\r\n\t\t\t*/\r\n\t\t} else { // \"normal case\", r.ok.\r\n\t\t\tthis.organiseReceivedObjects(fetchObjectHandler, r.relations); //objectsFromPage);\r\n\t\t\t//if (objectsFromPage.length == 0) {\r\n\t\t\tif (objectsFromPage.length < fetchObjectHandler.pageSize) {\r\n\t\t\t\tconsole.log(`finishing because #retrieved: ${objectsFromPage.length} < pagesize: ${fetchObjectHandler.pageSize}`);\r\n\t\t\t\tfetchObjectHandler.shouldContinue = false;\r\n\t\t\t\t/* JG: De dimser vi henter her, er iøvrigt ID på alle elementerne i 3d-modellen,\r\n\t\t\t\tudelukkende for at kunne tænde og slukke for dem.\r\n\t\t\t\tVi burde tage en diskussion med Catenda igen, om\r\n\t\t\t\tde ikke kunne lave bedre måde at tænde-slukke del-modeller på.\r\n\t\t\t\t */\r\n\t\t\t} \r\n\t\t}\r\n\t}\r\n\r\n\tasync GetAllObjectIdsForRevision(bimRevisionId: string, revisionId: string, model: BimViewerFileDtoSplitView, isNewestRevision: boolean): Promise {\r\n\t\tBimsyncClient.abortObjectFetching = false;\r\n\t\tlet fetchObjectHandler: FetchObjectHandler = new FetchObjectHandler(this.bimsyncProjectId); \r\n\t\twhile (fetchObjectHandler.shouldContinue && !BimsyncClient.abortObjectFetching) {\r\n\t\t\tif (fetchObjectHandler.startingBimSyncProjectId != this.bimsyncProjectId) { //The project has been changed and the call should not be finished.\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\ttry {\r\n\t\t\t\tlet r:ProdRelsResponse = await this.getObjectsFromPage(bimRevisionId, fetchObjectHandler.page, fetchObjectHandler.pageSize);\r\n\t\t\t\tlet objectsFromPage: ObjectRelation[] | string = (r.ok ? r.relations : r.err);\r\n\t\t\t\tthis.handleFetchedObjectsResponse(r, fetchObjectHandler,objectsFromPage, isNewestRevision);\r\n\t\t\t} catch(e) {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t\tthis.handleObjectsNotFetched(fetchObjectHandler);\t\t\t\t\r\n\t\t\t} finally {\r\n\t\t\t\tif (fetchObjectHandler.failedCalls > 10) { //Could be changed to in a row.\r\n\t\t\t\t\treturn { somethingWentWrong: fetchObjectHandler.somethingWentWrong, otherObjectIdsList: fetchObjectHandler.otherObjectIdsList, spaceObjectIds: fetchObjectHandler.spaceObjectIds, bimRevisionId , revisionId, model };\r\n\t\t\t\t}\r\n\t\t\t\tfetchObjectHandler.page++;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { somethingWentWrong: fetchObjectHandler.somethingWentWrong, otherObjectIdsList: fetchObjectHandler.otherObjectIdsList, spaceObjectIds: fetchObjectHandler.spaceObjectIds, bimRevisionId , revisionId, model };\r\n\t}\r\n\r\n\tpublic logRels:boolean = false;\r\n\r\n\tasync getObjectsFromPage(bimRevisionId: string, page: number, pageSize: number): Promise { //ObjectRelation[]|string\r\n\t\tif (this.logRels) { console.log('getObjectsFromPage,page,size:',page,pageSize); }\r\n\t\tlet r:ProdRelsResponse = await this.fetchPage(bimRevisionId, page, pageSize);\r\n\t\t//let objectsFromPage: ObjectRelation[]|string = (r.ok ? r.relations : r.err);\r\n\t\t//console.log('objectsFromPage is:', objectsFromPage);\r\n\r\n\t\t//if (typeof objectsFromPage === \"string\") { //Retry\r\n\t\t//\tconsole.log('retry');\r\n\t\t//\tobjectsFromPage = await this.fetchPage(bimRevisionId, page, pageSize);\r\n\t\t//}\r\n\r\n\t\treturn r; //objectsFromPage;\r\n\t}\r\n\r\n\tasync fetchPage(bimRevisionId: string, page: any, pageSize: number): Promise { //ObjectRelation[]|string> {\r\n\t\tlet r:ProdRelsResponse = {\r\n\t\t\trelations:[],\r\n\t\t\terr:'',\r\n\t\t\tok:false,\r\n\t\t\tstatusCode:-1\r\n\t\t};\r\n\t\ttry {\r\n\t\t\tif (this.logRels) { console.log('before bsc.fetchPage, page:',page, 'size:', pageSize); }\r\n\t\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations?revision=${bimRevisionId}&page=${page}&pageSize=${pageSize}`, { //fetchPage\r\n\t\t\t\tmethod: 'GET',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (this.logRels) { console.log('after bsc.fetchPage, ok?', resp.ok); }\r\n\t\t\tr.ok = resp.ok;\r\n\t\t\tr.statusCode = resp.status;\r\n\t\t\tif (resp.ok) {\r\n\t\t\t\tr.relations = await resp.json();\r\n\t\t\t} else {\r\n\t\t\t\tr.err = await resp.text();\r\n\t\t\t}\r\n\t\t} catch(e) {\r\n\t\t\tconsole.error(e);\r\n\t\t\tr.err = `Something went wrong: ${e}`;\r\n\t\t}\r\n\t\treturn r;\r\n\t}\r\n\r\n\tasync curlFetchOneFields1(object: number): Promise {\r\n\t\tconsole.log(\"BEARER \" , this.stringToken);\r\n\t\tlet query = ` \r\n\t\t{\r\n\t\t\t\"fields\":{\r\n\t\t\t\t\"attributes.GlobalId\":1,\r\n\t\t\t\t\"ifcSchema\":0,\r\n\t\t\t\t\"ifcType\":0,\r\n\t\t\t\t\"materials\":0,\r\n\t\t\t\t\"objectId\":1,\r\n\t\t\t\t\"propertySets\":0,\r\n\t\t\t\t\"quantitySets\":0,\r\n\t\t\t\t\"revisionId\":0,\r\n\t\t\t\t\"type\":0\r\n\t\t\t},\r\n\t\t\t\"query\": {\t\r\n\t\t\t\t\"$and\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"objectId\":{\r\n\t\t\t\t\t\t\t\"$eq\": ${object}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"ifcType\":{\r\n\t\t\t\t\t\t\t\"$eq\":\"IfcCurtainWall\"\r\n\t\t\t\t\t\t }\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\t\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations`, settings);//curlFetchOneFields1\r\n\t\ttry {\r\n\t\t\tlet queryRes: any[] = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t\treturn []\r\n\t\t}\t\r\n\t}\r\n\r\n\tasync curlFetchOneFields2(object: number): Promise {\r\n\t\tconsole.log(\"BEARER \" , this.stringToken);\r\n\t\tlet query = ` \r\n\t\t{\r\n\t\t\t\"fields\":{\r\n\t\t\t\t\"attributes.GlobalId\":0,\r\n\t\t\t\t\"ifcSchema\":0,\r\n\t\t\t\t\"ifcType\":0,\r\n\t\t\t\t\"materials\":0,\r\n\t\t\t\t\"objectId\":0,\r\n\t\t\t\t\"propertySets\":0,\r\n\t\t\t\t\"quantitySets\":0,\r\n\t\t\t\t\"revisionId\":0,\r\n\t\t\t\t\"type\":0\r\n\t\t\t},\r\n\t\t\t\"query\": {\t\r\n\t\t\t\t\"$and\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"objectId\":{\r\n\t\t\t\t\t\t\t\"$eq\": ${object}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"ifcType\":{\r\n\t\t\t\t\t\t\t\"$eq\":\"IfcCurtainWall\"\r\n\t\t\t\t\t\t }\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\t\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations`, settings);//curlFetchOneFields2\r\n\t\ttry {\r\n\t\t\tlet queryRes: any[] = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t\treturn [];\r\n\t\t}\t\r\n\t}\r\n\r\n\tasync curlFetchTwo(id: string): Promise {\r\n\t\tconsole.log(\"BEARER \" , this.stringToken);\r\n\t\tlet query = ` \r\n\t\t{\r\n\t\t\t\"fields\":{\r\n\t\t\t\t\"attributes.GlobalId\":1,\r\n\t\t\t\t\"ifcSchema\":0,\r\n\t\t\t\t\"ifcType\":0,\r\n\t\t\t\t\"materials\":0,\r\n\t\t\t\t\"objectId\":1,\r\n\t\t\t\t\"propertySets\":0,\r\n\t\t\t\t\"quantitySets\":0,\r\n\t\t\t\t\"revisionId\":0,\r\n\t\t\t\t\"type\":0\r\n\t\t\t},\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"$and\":[\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\"ifcType\":{\r\n\t\t\t\t\t\t\t\"$eq\":\"IfcCurtainWall\"\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\"attributes.GlobalId\":{\r\n\t\t\t\t\t\t\t\"$eq\": \"${id}\"\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t}\t\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations`, settings);//curlFetchTwo\r\n\t\ttry {\r\n\t\t\tlet queryRes: any[] = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t\treturn [];\r\n\t\t}\t\r\n\t}\r\n\tasync getRelationByObjectId(objectId: number): Promise { //FIXME: Make return ObjectRelationParent.\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'GET',\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/${objectId}/relations`, settings);\r\n\t\ttry {\r\n\t\t\tlet queryRes: ObjectRelationParent = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t\treturn undefined;\r\n\t\t}\t\r\n\t}\r\n\r\n\tasync curlFetchThreeRevised(ifcGuid: string): Promise {\r\n\t\tconsole.log(\"BEARER \" , this.stringToken);\r\n\t\tlet query = ` \r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"attributes.GlobalId\": {\r\n\t\t\t\t\t\"$eq\": \"${ifcGuid}\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\tlet resp: Response = await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations`, settings);//curlFetchThreeRevised\r\n\t\ttry {\r\n\t\t\tlet queryRes: any[] = await resp.json();\r\n\t\t\t\treturn queryRes;\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(ex);\r\n\t\t\tlet x = await resp.text(); \r\n\t\t\tconsole.log(x);\r\n\t\t\treturn [];\r\n\t\t}\t\r\n\t}\r\n\r\n\tasync GetIfcSpacesForRevision(bimRevisionId: string): Promise { //TODO - Should have retry and multiple pages if needed.\r\n\t\tlet ifcSpaces: number[] = [];\r\n\t\tlet page: number = 1;\r\n\t\tlet pageSize: number = 100;\r\n\t\tlet shouldContinue: boolean = true;\r\n\t\tlet retry: number = 0;\r\n\t\twhile (shouldContinue) {\r\n\t\t\ttry {\r\n\t\t\tlet resp: Response = await this.fetchIfcSpacePage(bimRevisionId,page,pageSize);\r\n\t\t\t\tlet spaces = (await resp.json()).map((object: any) => object.objectId);\r\n\t\t\t\tif (spaces.length > 0) {\r\n\t\t\t\t\tifcSpaces.push(...spaces);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn ifcSpaces;\r\n\t\t\t\t}\r\n\t\t\t\tpage++;\r\n\t\t\t} catch (ex) {\r\n\t\t\t\tconsole.log(ex);\r\n\t\t\t\tretry++\r\n\t\t\t\tif (retry > 9) {\r\n\t\t\t\t\treturn ifcSpaces;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tasync fetchIfcSpacePage(bimRevisionId: string, page: number, pageSize: number): Promise {\r\n\t\tconsole.log('bsc.fetchIfcSpacePage');\t\t\r\n\t\tlet query = `\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"ifcType\": { \r\n\t\t\t\t\t\"$eq\": \"IfcSpace\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations?revision=${bimRevisionId}&&page=${page}&pageSize=${pageSize}`, settings);//fetchIfcSpacePage\r\n\t}\r\n\t//HMM, this seems to do exactly what i need. How could i have missed this?\r\n\r\n\tasync getBuildingRelation(revisionId: string): Promise {\r\n\t\tlet query = `\r\n\t\t{\r\n\t\t\t\"query\": {\r\n\t\t\t\t\"ifcType\": { \r\n\t\t\t\t\t\"$eq\": \"IfcProject\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}`;\r\n\t\tconst settings = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tbody: query,\r\n\t\t\theaders: {\r\n\t\t\t\t'Authorization': `Bearer ${this.stringToken}`,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t}\r\n\t\t};\r\n\t\t//Skal ændres til rent faktisk at give children. Lige nu er det det forkert kald.\r\n\t\treturn await (await fetch(`${bimsync_addr()}/projects/${this.bimsyncProjectId}/ifc/products/relations?revision=${revisionId}`, settings)).json();//getBuildingRelation\r\n }\t\r\n}\r\n\r\nexport interface ProdRelsResponse {\r\n\trelations:ObjectRelation[];\r\n\terr:string;\r\n\tok:boolean;\r\n\tstatusCode:number;\r\n}\r\n","import {autoinject} from \"aurelia-framework\";\r\nimport {EventAggregator} from \"aurelia-event-aggregator\";\r\n\r\ndeclare let bimsync: any;\r\ndeclare let $: any;\r\n\r\n\r\n@autoinject\r\nexport class BimsyncSetupHandler {\r\n\r\n\tpublic static LogInf:boolean = true; //false; //true;\r\n\tpublic static LogInf2:boolean = false; // (more detailed/verbose than LogInf)\r\n\r\n is3d_ENGINE_Loaded: boolean = false; // JG: This is about the entire bimsync 3d api subsystem, NOT about the loading of an individual 3d-model!\r\n is2d_ENGINE_Loaded: boolean = false;\r\n public isBimsync_ENGINES_Setup: boolean = false; // true when both 2d and 3d are reported 'READY' back from catenda.\r\n\r\n constructor(public events: EventAggregator) {}\r\n\r\n loadViewer3d(): void {\r\n if (bimsync != undefined) {\r\n bimsync.setOnLoadCallback(() => {\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"3d-viewer-callback\"); }\r\n this.threeD_ENGINE_Ready();//in-CATENDA-onLoad-callback.\r\n });\r\n bimsync.load(['viewer-ui']);\r\n } else {\r\n console.warn(\"Bimsync was undefined\");//We should probably handle this better. Maybe with some kind of reinitialize.\r\n }\r\n }\r\n \r\n loadViewer2d(): void {\r\n if (bimsync != undefined) {\r\n bimsync.setOnViewer2dLoadCallback(() => {\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"2d-viewer-callback\"); }\r\n this.twoD_ENGINE_Ready();\r\n });\r\n bimsync.loadViewer2d();\r\n } else {\r\n console.warn(\"Bimsync was undefined\");//We should probably handle this better. Maybe with some kind of reinitialize.\r\n }\r\n }\r\n\r\n private threeD_ENGINE_Ready(): void {//UB:CATENDA-onLoad-callback.\r\n this.is3d_ENGINE_Loaded = true;\r\n this.setViewerUIFunctionality();//in-threeDReady\r\n }\r\n \r\n private twoD_ENGINE_Ready(): void {\r\n this.is2d_ENGINE_Loaded = true;\r\n this.setViewerUIFunctionality();//in-twoDReady\r\n }\r\n\r\n setViewerUIFunctionality() {\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"is-2d-ViewerLoaded\" , this.is2d_ENGINE_Loaded); }\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"is-3d-ViewerLoaded\" , this.is3d_ENGINE_Loaded); }\r\n if (this.is2d_ENGINE_Loaded && this.is3d_ENGINE_Loaded) {\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"viewer-ui-setup-call\"); }\r\n this.events.publish('viewer:enable-bindings-and-options');//in-BimsyncSetupHandler.setViewerUIFunctionality(), triggered by CATENDA-onLoad-callback.\r\n this.isBimsync_ENGINES_Setup = true;// in setViewerUIFunctionality.\r\n }\r\n }\r\n\r\n handleCATENDA_ViewerUISetupAndViewerOptions():void {\r\n //The options must be set before viewer-ui is setup otherwise options can be overriden.\r\n this.handleOptionsForViewer2d();\r\n this.handleOptionsForViewer3d();\r\n this.handleViewerUIFunctionality();\r\n this.events.publish('ViewerMenu:viewers-finished-loading'); \r\n this.events.publish('ModelRevision:ModelsPressed');\r\n }\r\n\r\n handleViewerUIFunctionality(): void {\r\n\t\tconst the_viewerContainer3d = $('#viewerContainer3d');\r\n\t\tif (!the_viewerContainer3d || the_viewerContainer3d.length == 0) {\r\n\t\t\tconsole.warn('ui the_viewerContainer3d is empty:', the_viewerContainer3d);\r\n\t\t\treturn;\r\n\t\t}\r\n the_viewerContainer3d.viewerUI({\r\n viewer2dId: 'viewerContainer2d',\r\n enableViewer2dIntegration: true,\r\n showViewer2dStoreySelect: true, //Catenda seems to have this fixed again\r\n enableJoystick: true,\r\n joystickHidden: true\r\n });\r\n the_viewerContainer3d.viewerUI('set2dLockStoreyMode', true);//Outcommented as storey is not currently functioning correct.\r\n }\r\n\r\n handleOptionsForViewer2d(): void {\r\n console.log(\"viewer options handleOptionsForViewer2d\")\r\n let options = {selectColor: '#49b6d6'};\r\n\t\tconst the_viewerContainer2d = $(\"#viewerContainer2d\");\r\n\t\tif (!the_viewerContainer2d || the_viewerContainer2d.length == 0) {\r\n\t\t\tconsole.warn('the_viewerContainer2d is empty:', the_viewerContainer2d);\r\n\t\t\treturn;\r\n\t\t}\r\n the_viewerContainer2d.viewer2d(options); //Options must be set before loading the url.\r\n //$(\"#viewerContainer2d\").viewer2d(options); //Options must be set before loading the url.\r\n }\r\n\r\n handleOptionsForViewer3d():void {\r\n let options: any = {\r\n selectedColor: '#49b6d6',\r\n fieldOfView: 60,\r\n enableClippingPlaneWidget: true\r\n };\r\n\r\n\t\tconst the_viewerContainer3d = $('#viewerContainer3d');\r\n\t\tif (!the_viewerContainer3d || the_viewerContainer3d.length == 0) {\r\n\t\t\tconsole.warn('the_viewerContainer3d is empty:', the_viewerContainer3d);\r\n\t\t\treturn;\r\n\t\t}\r\n the_viewerContainer3d.viewer(options); //Options must be set before loading the url.\r\n }\r\n}\r\n","import {EventAggregator} from 'aurelia-event-aggregator';\r\nimport {ModalService} from 'app/services/modal-service';\r\nimport {ObjectListManager} from 'app/services/object-list/object-list-manager';\r\nimport {autoinject, TaskQueue} from 'aurelia-framework';\r\nimport {ObjectCell, ObjectRow} from './object-list/object-list-row';\r\nimport {CellEditor} from 'app/components/object/object-grid/cell/cell-editor';\r\nimport {ParameterDefinitionDto, SyncDirectionEnum} from 'app/models/parameter-definition-dto';\r\nimport {ObjectValues} from 'app/models/object-values';\r\n\r\n@autoinject\r\nexport class CellEditService {\r\n\t\r\n\tconstructor(private taskQueue: TaskQueue, private modal: ModalService, private events: EventAggregator) {\r\n\t\t\r\n\t}\r\n\t\r\n\tpublic enableCellEdit(objects: ObjectListManager, cell: ObjectCell, row: ObjectRow, event: any) {\r\n if (cell.isEditing) { \r\n\t\t\tconsole.log('cell is already editing:', cell);\r\n return;\r\n\t\t}\r\n if (!cell.tryEdit()) {\r\n\t\t\tconsole.log('cell.tryEdit not happy.', cell);\r\n return;\r\n\t\t}\r\n\r\n if (cell.isSimpleValue) {\r\n this.taskQueue.queueTask(() => {\r\n let element = event.srcElement.querySelector(\".edit-cell\");\r\n if (!Boolean(element)) {\r\n element = document.getElementById(cell.elementId);\r\n }\r\n if (Boolean(element)) {\r\n element.focus();\r\n }\r\n });\r\n } else {\r\n this.modal.OpenModal(CellEditor, { objects: objects, cell, row }).whenClosed(x => {\r\n if (!x.wasCancelled) {\r\n\t\t\t\t\tthis.events.publish('object-properties:update', row);\r\n\t\t\t\t\tthis.events.publish('object-properties-material:update', row.value?.typeId);\r\n } else \r\n cell.reset();\r\n });\r\n }\r\n\t}\r\n\r\n\tpublic canEdit(row: ObjectRow, columnTargetType: string, parameterDefinitionDto: ParameterDefinitionDto | undefined): boolean{\r\n\t\tif (!parameterDefinitionDto)\r\n\t\t\treturn false;\r\n\r\n\t\t// // was: 1 \r\n\t\tif (parameterDefinitionDto.readOnly || parameterDefinitionDto.syncDirection === SyncDirectionEnum.SyncToAc || parameterDefinitionDto.isAggregateParameter) // syncDirection === 1 (RevitToAoc)\r\n \treturn false;\r\n\t\t\r\n\t\tif (row.targetType == ObjectValues.targetTypes.type) {\r\n return columnTargetType == ObjectValues.targetTypes.typeParameter;\r\n } else if (row.targetType == ObjectValues.targetTypes.instance) { \r\n return columnTargetType == ObjectValues.targetTypes.instanceParameter\r\n || columnTargetType == ObjectValues.targetTypes.typeParameter;\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":["FetchObjectHandler","constructor","bimsyncProjectId","test","this","shouldContinue","otherObjectIdsList","spaceObjectIds","page","pageSize","startingBimSyncProjectId","somethingWentWrong","failedCalls","bimsync_addr","BimsyncClient","api","stringToken","logRels","async","projectId","Promise","all","project","get","stringResult","then","str","GetToken","res","undefined","access_token","token","jsonResult","value","fetch","headers","json","objectId","globalId","settings","method","body","resp","ex","console","log","tagId","x","text","type","object","revisionFromBimViewer","normalize","response","bimRevisionId","blob","documentFile","document","createElement","href","window","URL","createObjectURL","download","name","click","revisionId","organiseReceivedObjects","fetchObjectHandler","objectsFromPage","forEach","ifcType","push","handleObjectsNotFetched","handleFetchedObjectsResponse","r","isNewestRevision","statusCode","err","ok","relations","length","model","abortObjectFetching","getObjectsFromPage","e","error","fetchPage","status","id","ifcGuid","ifcSpaces","retry","fetchIfcSpacePage","spaces","map","autoinject","BimsyncSetupHandler","events","is3d_ENGINE_Loaded","is2d_ENGINE_Loaded","isBimsync_ENGINES_Setup","loadViewer3d","bimsync","setOnLoadCallback","LogInf","threeD_ENGINE_Ready","load","warn","loadViewer2d","setOnViewer2dLoadCallback","twoD_ENGINE_Ready","setViewerUIFunctionality","publish","handleCATENDA_ViewerUISetupAndViewerOptions","handleOptionsForViewer2d","handleOptionsForViewer3d","handleViewerUIFunctionality","the_viewerContainer3d","$","viewerUI","viewer2dId","enableViewer2dIntegration","showViewer2dStoreySelect","enableJoystick","joystickHidden","the_viewerContainer2d","viewer2d","selectColor","viewer","selectedColor","fieldOfView","enableClippingPlaneWidget","LogInf2","CellEditService","taskQueue","modal","enableCellEdit","objects","cell","row","event","isEditing","tryEdit","isSimpleValue","queueTask","element","srcElement","querySelector","Boolean","getElementById","elementId","focus","OpenModal","whenClosed","wasCancelled","reset","typeId","canEdit","columnTargetType","parameterDefinitionDto","readOnly","syncDirection","isAggregateParameter","targetType","TaskQueue"],"sourceRoot":""}