{"version":3,"file":"app-c06cfc63.ca808f420435daaf.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/services/date-time-formatter.ts","webpack://client-app/./src/app/services/device-service.ts","webpack://client-app/./src/app/services/entity-id-finder-service.ts","webpack://client-app/./src/app/services/error-service.ts","webpack://client-app/./src/app/services/global-rejection-error-handler.ts","webpack://client-app/./src/app/services/list-service.ts","webpack://client-app/./src/app/services/modal-service.ts"],"sourcesContent":["export class DateTimeFormatter {\r\n static formatDate(dateString: string): string {\r\n if (dateString == undefined) {return \"\"};\r\n let date = new Date(dateString);\r\n let day: string = date.toDateString(); \r\n let time: string = date.toLocaleTimeString(undefined, {hour: \"2-digit\", minute: '2-digit', second: undefined, hour12: false});\r\n if (day != \"Invalid Date\" && time != \"Invalid Date\") {\r\n return `${day}, ${time}`;\r\n }\r\n return \"Invalid Date\";\r\n }\r\n}","export class DeviceService {\r\n\r\n\tpublic getScreenWidth() {\r\n\t\treturn window.screen.width;\r\n\t}\r\n\r\n\tpublic getScreenOrientation() {\r\n\t\tswitch (window.orientation) {\r\n\t\t\tcase 0:\r\n\t\t\t\treturn \"portrait\";\r\n\t\t\tcase 90:\r\n\t\t\t\treturn \"landscape\";\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getDeviceType = () => {\r\n\t\tconst ua = navigator.userAgent;\r\n\t\tif (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) {\r\n\t\t\treturn \"tablet\";\r\n\t\t}\r\n\t\tif (/Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)) {\r\n\t\t\treturn \"mobile\";\r\n\t\t}\r\n\t\treturn \"desktop\";\r\n\t};\r\n}\r\n","import {autoinject} from \"aurelia-framework\";\r\nimport { ObjectListManager } from \"./object-list/object-list-manager\";\r\nimport { BimViewerThreeDService } from \"./bim-viewer-three-d-service\";\r\nimport { ObjectRow } from \"./object-list/object-list-row\";\r\nimport { ApiClient } from \"./api-client\";\r\nimport { AppContextService } from \"./app-context-service\";\r\nimport { ModalService } from \"./modal-service\";\r\nimport { IFC_Dto } from \"app/viewer/viewer-content-table/viewer-content-table\";\r\nimport { ObjectDetails } from \"app/models/object-details\";\r\nimport {ViewerThreeDServiceIF} from \"./ViewerThreeDServiceIF\";\r\nimport {ObjectIDsIF} from \"../project/ifc-fun/openbim-container\";\r\n\r\ndeclare let $: any;\r\n\r\n@autoinject\r\nexport class EntityIdFinderService {\r\n private listOfObjects: number[] = []; // (This weirdly named property holds a list of IFC_EntityId's.)\r\n private troubledObjects: (ObjectRow | IFC_Dto)[] = [];\r\n private warnUserAboutRooms: boolean = false;\r\n private remember:IFC_Dto[] = []; // used for diagnostics/troubleshooting.\r\n\r\n constructor(private modal: ModalService, private api: ApiClient, private appContext: AppContextService) {}\r\n \r\n async getSelectedObjectsAsEntityIds(objectListMgr: ObjectListManager, bimViewerThreeDService: ViewerThreeDServiceIF): Promise {\r\n\t\t// JG: Weird - this is a get-method, but it CHANGES many fields on the SERVICE EntityIdFinderService??\r\n\t\t// But a UI selection IS a 'kind of singleton', so maybe it's all ..OK..\r\n\t\r\n this.listOfObjects = []; \r\n this.troubledObjects = [];\r\n this.warnUserAboutRooms = false;\r\n\t\tthis.remember = [];\r\n let listOfInstances: ObjectRow[] = objectListMgr.selectedItems.filter(item => item.isInstance());\r\n let listOfTypes: ObjectRow[] = objectListMgr.selectedItems.filter(item => item.isType());\r\n this.handleInstances(listOfInstances, bimViewerThreeDService);\r\n await this.handleTypes(listOfTypes, bimViewerThreeDService);\r\n this.handleUserMessages();\r\n \r\n return this.listOfObjects;\r\n }\r\n\r\n\tasync getSelectedObjectsAsObjectIdsIF(objectListMgr: ObjectListManager, bimViewerThreeDService: ViewerThreeDServiceIF): Promise {\r\n\t\t// JG: Weird - this is a get-method, but it CHANGES many fields on the SERVICE EntityIdFinderService??\r\n\t\t// But a UI selection IS a 'kind of singleton', so maybe it's all ..OK..\r\n\r\n\t\tthis.listOfObjects = [];\r\n\t\tthis.troubledObjects = [];\r\n\t\tthis.warnUserAboutRooms = false;\r\n\t\tthis.remember = [];\r\n\t\tlet listOfInstances: ObjectRow[] = objectListMgr.selectedItems.filter(item => item.isInstance());\r\n\t\tlet listOfTypes: ObjectRow[] = objectListMgr.selectedItems.filter(item => item.isType());\r\n\t\tthis.handleInstances(listOfInstances, bimViewerThreeDService);\r\n\t\tawait this.handleTypes(listOfTypes, bimViewerThreeDService);\r\n\t\tthis.handleUserMessages();\r\n\r\n\t\treturn { objectIds: this.listOfObjects, revitObjectIds: [] };\r\n\t}\r\n\r\n async getAllSimilarInstancesAsEntityIds(objectListMgr: ObjectListManager, bimViewerThreeDService: ViewerThreeDServiceIF): Promise {\r\n this.listOfObjects = [];\r\n this.troubledObjects = [];\r\n this.warnUserAboutRooms = false;\r\n\t\tthis.remember = [];\r\n await this.handleTypes(objectListMgr.selectedItems, bimViewerThreeDService);\r\n this.handleUserMessages();\r\n \r\n return this.listOfObjects;\r\n }\r\n\r\n handleInstances(listOfInstances: ObjectRow[], bimViewerThreeDService: ViewerThreeDServiceIF): void {\r\n\t\t/* Appears to mainly forward 'everything that is not a ROOM', to this.listOfObjects..?\r\n\t\tFOR rooms then, we include them based on whether bimViewerThreeDService currently has spacesEnabled.\r\n\t\t */\r\n for (let i = 0; i < listOfInstances.length; i++) {\r\n if (listOfInstances[i]?.value?.ifC_EntityId == 0) {\r\n this.troubledObjects.push(listOfInstances[i]);\r\n } else {\r\n let objectRow_ifcId: number | undefined = listOfInstances[i]?.value?.ifC_EntityId;\r\n if (!objectRow_ifcId) {\r\n console.warn(\"An instans without an ID was found:\" , listOfInstances[i]);\r\n } else {\r\n let shouldWarnAboutRoom = this.shouldHandleRoom(listOfInstances[i]?.value, bimViewerThreeDService);\r\n if (shouldWarnAboutRoom) {\r\n this.warnUserAboutRooms = true;\r\n } else {\r\n this.listOfObjects.push(objectRow_ifcId); //We want to push the id even if it is not good.\r\n }\r\n } \r\n }\r\n }\r\n }\r\n\r\n async handleTypes(listOfTypes: ObjectRow[], bimViewerThreeDService: ViewerThreeDServiceIF): Promise {\r\n for(let i = 0; i < listOfTypes.length; i++) {\r\n let shouldWarnAboutRoom = this.shouldHandleRoom(listOfTypes[i]?.value, bimViewerThreeDService);\r\n if (shouldWarnAboutRoom) {\r\n this.warnUserAboutRooms = true;\r\n } else {\r\n const instsForType: IFC_Dto[] = await this.api.target('project', this.appContext.projectId)\r\n .get(`ObjectDetail/InstancesForType?TypeId=${listOfTypes[i]?.value?.typeId}`,)\r\n .handleError(\"Could not get instances\", \"The instances for this type could not get fetched.\")\r\n .objectResult();\r\n this.remember = instsForType; // for diagnostics.\r\n for (let j = 0; j < instsForType.length; j++) {\r\n if (!this.troubledObjects.includes(instsForType[j]) && instsForType[j].ifC_EntityId == 0) {\r\n this.troubledObjects.push(instsForType[j]);\r\n } else {\r\n let ifcDTO: IFC_Dto = instsForType[j];\r\n if (ifcDTO.ifC_EntityId && !this.listOfObjects.includes(ifcDTO.ifC_EntityId)) {\r\n this.listOfObjects.push(ifcDTO.ifC_EntityId);\r\n }\r\n }\r\n }\r\n }\r\n } \r\n }\r\n\r\n reportIssues(listOfObjects:number[], instsForType:IFC_Dto[], info:any) {\r\n console.log('IFC entities not found:');\r\n console.log('listOfObjects:', listOfObjects);\r\n console.log('instsForType:', instsForType);\r\n console.log('info:', info);\r\n }\r\n\r\n public shouldHandleRoom(value: ObjectDetails | null, bimViewerThreeDService: ViewerThreeDServiceIF): boolean {\r\n //We want to warn the user to enable IFC spaces\r\n //if they are trying to highlight a room (They are equivalent) if the spaces are not enabled.\r\n\t\tconsole.warn(\"Not implemented fully for OpenBIM\");\r\n return value?.categoryName == \"Rooms\" && false; // bimViewerThreeDService.spacesEnabled;\r\n }\r\n\r\n handleUserMessages() {\r\n if (this.troubledObjects.length > 0) {\r\n this.modal.OpenMessage(\"Objects not found\", \"Some of the objects could not be found.\");\r\n console.warn(\"Not found objects \" , this.troubledObjects);\r\n }\r\n if (this.warnUserAboutRooms) {\r\n this.modal.OpenMessage(\"Spaces not enabled\", \"To work with Rooms please show spaces in the Viewer Settings.\");\r\n }\r\n }\r\n}\r\n","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { ModalService } from 'app/services/modal-service';\r\n\r\n@autoinject\r\nexport class ErrorService {\r\n\t/* Jeg tror nok jeg har regnet ideen med denne ud.\r\n\tDen er en hjælper til RequestErrorHandling.handleErrorWithErrorService(),\r\n\tog saa vidt jeg kan se, er handleErrorWithErrorService daarligt navngivet.\r\n\thandleErrorWithErrorService handler nemlig IKKE om at bruge ErrorService.\r\n\tIstedet bruges handleErrorWithErrorService som regel til at udføre custom kode passet som callback/lambda.\r\n\t */\r\n\tconstructor(private modal: ModalService, private i18n: I18N, private events: EventAggregator) {\r\n\r\n\t}\r\n\r\n\tpublic async genericError():Promise { // denne bliver vist aldrig kaldt..\r\n\t\tawait this.modal.OpenMessage(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'), true);\r\n\t}\r\n\r\n\tpublic async noProjectSelected():Promise {\r\n\t\tawait this.modal.OpenMessage(this.i18n.tr('Error_Title_NoProjectSelected'), this.i18n.tr('Error_Message_NoProjectSelected')).whenClosed(() => {\r\n\t\t\tthis.events.publish(\"project-selector:open\");\r\n\t\t});\r\n\t}\r\n}\r\n","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\n\r\n@autoinject\r\nexport class GlobalRejectionErrorHandler {\r\n\tasync initialize(): Promise {\r\n this.setupRejectionHandler();\r\n\t}\r\n constructor(public events: EventAggregator) {\r\n console.log('ctor GlobalRejectionErrorHandler');\r\n }\r\n\r\n public setupRejectionHandler(): void {\r\n\t\tconsole.log(\"Setting up window.onunhandledrejection\");\r\n let self: this = this;\r\n window.onunhandledrejection = function(event: PromiseRejectionEvent) {\r\n\t\t\tconsole.log(\"onunhandledrejection event \" , event);\r\n self.events.publish('onunhandledrejection', event);\r\n\t\t};\r\n }\r\n \r\n public setupErrorHandler(): void {\r\n window.onerror = function(errMsg, \turl, \tline, \tcolumn, \terror) {\r\n\t\t\tconsole.log(\"errMsg \" , errMsg);\r\n\t\t\tconsole.log(\"url \" , url);\r\n\t\t\tconsole.log(\"line \" , line);\r\n\t\t\tconsole.log(\"column \" , column);\r\n\t\t\tconsole.log(\"error \" , error);\r\n\t\t let result = !column ? '' : 'column: ' + column;\r\n\t\t console.log(\"result \", result)\r\n\t\t result += !error;\r\n\t\t console.log(\"Error= \" + errMsg + \"url= \" + url + \"line= \" + line + result);\r\n\t\t let suppressErrorAlert: boolean = true;\r\n\t\t return suppressErrorAlert;\r\n\t\t};\r\n }\r\n}","import { SearchValueConverter } from 'resources/value-converters/search';\r\nimport { autoinject } from 'aurelia-framework';\r\n\r\nexport interface SelectResult {\r\n\tselected: any[]; \r\n\tallSelected: boolean;\r\n}\r\n\r\nexport interface SortResult {\r\n\tcolumn: string;\r\n\tdisplayState: { icon: string, direction: string };\r\n}\r\n\r\n@autoinject\r\nexport class ListService {\r\n\tallSelected: boolean = false;\r\n\tselectedElements: any[] = [];\r\n\tcolumn: string = \"\";\r\n\tdisplayState: { icon: string, direction: string };\r\n\t\r\n\tconstructor (private searchVC: SearchValueConverter) {\r\n\t\tthis.displayState = { icon: \"fa-sort-up\", direction: \"ascending\" };\r\n\t}\r\n\r\n\tpublic async sortBy(columnName: string): Promise {\r\n\t\tif (Boolean(this.column === columnName) && Boolean(this.displayState.direction === 'ascending')) {\r\n\t\t\tthis.displayState = { icon: \"fa-sort-down\", direction: \"descending\" };\r\n\t\t} else {\r\n\t\t\tthis.displayState = { icon: \"fa-sort-up\", direction: \"ascending\" };\r\n\t\t}\r\n\r\n\t\tif (Boolean(this.column !== columnName)) {\r\n\t\t\tthis.column = columnName;\r\n\t\t}\r\n\r\n\t\treturn { column: this.column, displayState: this.displayState };\r\n\t}\r\n\r\n\tpublic async toggleElement(list: any[]): Promise { // any\r\n\t\tif (this.allSelected && list.every(x => x.selected) === false) {\r\n\t\t\tthis.allSelected = false;\r\n\t\t}\r\n\r\n\t\tif (list.every(x => x.selected)) {\r\n\t\t\tthis.allSelected = true;\r\n\t\t}\r\n\r\n\t\treturn { selected: list.filter(x => x.selected), allSelected: this.allSelected };\r\n\t}\r\n\r\n\tpublic async toggleAll(list: any[], searchTerm: string = \"\", searchColumns: string[] = []): Promise {\r\n\t\tlet listFilteredBySearch: any[] = [];\r\n\r\n\t\tif (Boolean(searchTerm)) {\r\n\t\t\tlistFilteredBySearch = this.searchVC.toView(list, {\r\n\t\t\t\tsearchTerm: searchTerm,\r\n\t\t\t\tcolumns: searchColumns\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (listFilteredBySearch.length > 0) {\r\n\t\t\tif (listFilteredBySearch.every(x => x.selected)) {\r\n\t\t\t\treturn this.deselectAll_async(listFilteredBySearch);\r\n\t\t\t}\r\n\t\r\n\t\t\tif (listFilteredBySearch.every(x => !x.selected) || listFilteredBySearch.some(x => x.selected)) {\r\n\t\t\t\treturn this.selectAll(listFilteredBySearch, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// maa man godt i typescript blande sync/async paa den maade, uden await?\r\n\t\tif (list.every(x => x.selected)) {\r\n\t\t\treturn this.deselectAll_async(list); // ER async.\r\n\t\t}\r\n\r\n\t\tif (list.every(x => !x.selected) || list.some(x => x.selected)) {\r\n\t\t\treturn this.selectAll(list); // ikke async.\r\n\t\t}\r\n\t}\r\n\r\n\tprivate selectAll(list: any[], isListFiltered: boolean = false):SelectResult {\r\n\t\tlist.forEach(x => {\r\n\t\t\tx.selected = true;\r\n\t\t});\r\n\t\tthis.selectedElements = Array.from(new Set(list));\r\n\t\tthis.allSelected = isListFiltered ? false : true;\r\n\t\treturn { selected: this.selectedElements, allSelected: this.allSelected };\r\n\t}\r\n\r\n\tpublic async deselectAll_async(list: any[]):Promise {\r\n\t\tlist.forEach(x => {\r\n\t\t\tx.selected = false;\r\n\t\t});\r\n\t\tthis.selectedElements = [];\r\n\t\tthis.allSelected = false;\r\n\t\treturn { selected: this.selectedElements, allSelected: this.allSelected };\r\n\t}\r\n}\r\n","import { DialogService, DialogOpenPromise, DialogCancellableOpenResult } from 'aurelia-dialog';\r\nimport { autoinject } from \"aurelia-framework\";\r\nimport { ModalMessage } from 'app/components/dialog/modal-message';\r\nimport { ModalConfirm } from 'app/components/dialog/modal-confirm';\r\nimport {ModalConfirmSyncStatus} from \"../components/dialog/modal-confirm-sync-status\";\r\nimport {SyncStatusDto} from \"../models/tender/sync-status-dto\";\r\nimport { ModalLog } from 'app/components/dialog/modal-log';\r\n\r\n\r\nexport interface ModalMessageOptions {\r\n\ttitle: string;\r\n\tmessage: string;\r\n\tactions: any;\r\n\tshowReset:boolean; // used by X.\r\n\t// au dialog settings from method\r\n\t// settings for dialog type from method\r\n\t// settings for content from caller\r\n}\r\n\r\n@autoinject\r\nexport class ModalService {\r\n\tconstructor(private dialog: DialogService) {\r\n\r\n\t}\r\n\r\n\tpublic get custom() { return this.dialog; }\r\n\r\n\t// Opens a specialized modalview\r\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\r\n\tpublic OpenModal(view: string | { new(...params: any[]): object; } | object, content?: any): DialogOpenPromise {\r\n\t\treturn this.dialog.open({\r\n\t\t\tviewModel: view,\r\n\t\t\tmodel: content\r\n\t\t})\r\n\t}\r\n \r\n\t// Opens a message modal with cancel \r\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\r\n\tpublic OpenMessage(title: string, message: string, showReset:boolean=false): DialogOpenPromise { // msgbox, showmsg ShowMessage, MessageBox\r\n\t\tconsole.log('title:', title);\r\n\t\tconsole.log('message:', message);\r\n\t\t\r\n\t\t// some code may pass a request object instead of a string;\r\n\t\t// in that case we try to extract the URL.\r\n\t\t// We want to receive the entire object so we can log it in the console;\r\n\t\t// we cannot up front know what kind of issue has happened.\r\n\t\tlet any: any = message;\r\n\t\tif (any.hasOwnProperty('requestMessage')) {\r\n\t\t\tlet messageUrl = any.requestMessage.url;\r\n\t\t\tif (Boolean(messageUrl)) {\r\n\t\t\t\tmessage = messageUrl;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.dialog.open({\r\n\t\t\tviewModel: ModalMessage,\r\n\t\t\tmodel: { title, message, showReset } // A ModalMessageOptions object.\r\n\t\t})\r\n\t}\r\n\r\n\t// Opens a pre-formatted log\r\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\r\n\tpublic OpenLog(title: string, message: string): DialogOpenPromise {\r\n\t\treturn this.dialog.open({ viewModel: ModalLog, model: { title, message } })\r\n\t}\r\n\r\n\t// Opens a confirm modal with ok cancel \r\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\r\n\tpublic OpenConfirm(title: string, message: string): DialogOpenPromise {\r\n\t\treturn this.dialog.open({\r\n\t\t\tviewModel: ModalConfirm,\r\n\t\t\tmodel: { title, message }\r\n\t\t})\r\n\t}\r\n\r\n\t// Opens a confirm modal with ok cancel and displays the sync status warning\r\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\r\n\tpublic OpenConfirmSyncStatus(title: string, message: string, lastFullSync: SyncStatusDto, syncStatus: SyncStatusDto, useQuantities: boolean = true): DialogOpenPromise {\r\n\t\treturn this.dialog.open({\r\n\t\t\tviewModel: ModalConfirmSyncStatus,\r\n\t\t\tmodel: { title, message, syncStatus, useQuantities, lastFullSync }\r\n\t\t})\r\n\t}\r\n}\r\n"],"names":["DateTimeFormatter","formatDate","dateString","undefined","date","Date","day","toDateString","time","toLocaleTimeString","hour","minute","second","hour12","DeviceService","getDeviceType","ua","navigator","userAgent","test","getScreenWidth","window","screen","width","getScreenOrientation","orientation","EntityIdFinderService","constructor","modal","api","appContext","listOfObjects","troubledObjects","warnUserAboutRooms","remember","getSelectedObjectsAsEntityIds","objectListMgr","bimViewerThreeDService","this","listOfInstances","selectedItems","filter","item","isInstance","listOfTypes","isType","handleInstances","handleTypes","handleUserMessages","getSelectedObjectsAsObjectIdsIF","objectIds","revitObjectIds","getAllSimilarInstancesAsEntityIds","i","length","value","ifC_EntityId","push","objectRow_ifcId","shouldHandleRoom","console","warn","instsForType","target","projectId","get","typeId","handleError","objectResult","j","includes","ifcDTO","reportIssues","info","log","categoryName","OpenMessage","autoinject","ErrorService","i18n","events","genericError","tr","noProjectSelected","whenClosed","publish","I18N","EventAggregator","GlobalRejectionErrorHandler","initialize","setupRejectionHandler","self","onunhandledrejection","event","setupErrorHandler","onerror","errMsg","url","line","column","error","result","ListService","searchVC","allSelected","selectedElements","displayState","icon","direction","sortBy","columnName","Boolean","toggleElement","list","every","x","selected","toggleAll","searchTerm","searchColumns","listFilteredBySearch","toView","columns","deselectAll_async","some","selectAll","isListFiltered","forEach","Array","from","Set","SearchValueConverter","ModalService","dialog","custom","OpenModal","view","content","open","viewModel","model","title","message","showReset","any","hasOwnProperty","messageUrl","requestMessage","OpenLog","OpenConfirm","OpenConfirmSyncStatus","lastFullSync","syncStatus","useQuantities","DialogService"],"sourceRoot":""}