{"version":3,"file":"app-c06cfc63.79c3c67d84e59c17.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\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: BimViewerThreeDService): 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 async getAllSimilarInstancesAsEntityIds(objectListMgr: ObjectListManager, bimViewerThreeDService: BimViewerThreeDService): 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: BimViewerThreeDService): 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: BimViewerThreeDService): 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: BimViewerThreeDService): 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 return value?.categoryName == \"Rooms\" && !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\tconstructor(private modal: ModalService, private i18n: I18N, private events: EventAggregator) {\r\n\r\n\t}\r\n\r\n\tpublic genericError() {\r\n\t\tthis.modal.OpenMessage(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'), true);\r\n\t}\r\n\r\n\tpublic noProjectSelected() {\r\n\t\tthis.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;\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","static","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","async","objectListMgr","bimViewerThreeDService","this","listOfInstances","selectedItems","filter","item","isInstance","listOfTypes","isType","handleInstances","handleTypes","handleUserMessages","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","spacesEnabled","OpenMessage","autoinject","ErrorService","i18n","events","genericError","tr","noProjectSelected","whenClosed","publish","I18N","GlobalRejectionErrorHandler","setupRejectionHandler","self","onunhandledrejection","event","setupErrorHandler","onerror","errMsg","url","line","column","error","result","ListService","searchVC","allSelected","selectedElements","displayState","icon","direction","columnName","Boolean","list","every","x","selected","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":""}