{"version":3,"file":"app-6d92e58f.c8491e7df28a2094.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/components/navigation/navigation.scss","webpack://client-app/./src/app/components/navigation/navigation.html","webpack://client-app/./src/app/components/navigation/navigation.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, `.navigation--mobile{background:#a5a3a3;color:#fff;display:grid;grid-template-columns:40px 1fr 40px;grid-gap:calc(15px/3);place-items:center;height:50px;padding:calc(15px/3);position:relative;z-index:calc(1040 + 1)}[data-device-type=desktop] .navigation--mobile{display:none}.navigation--mobile .logo{height:35px}.navigation--mobile .btn-mobile-nav-toggle{color:#fff}.navigation{background:#e4e9ec;color:#000;display:flex;flex-direction:column;justify-content:space-between;min-height:100vh;max-height:100vh;position:fixed;top:0;left:0;user-select:none;width:275px;will-change:auto;z-index:calc(1040 + 2)}.navigation .theme-switch-button{position:absolute;top:7px;left:7px}.navigation[data-nav-collapsed=false]{overflow-y:auto;scrollbar-width:none}.navigation[data-nav-collapsed=false]::-webkit-scrollbar{display:none}[data-device-type=mobile] .navigation{width:100vw;transform:translateX(-100%);transition:all 150ms ease-in-out;overflow:auto}[data-device-type=mobile] .navigation[data-show-nav-mobile=true]{box-shadow:0 0 .25rem rgba(0,0,0,.175);transform:translateX(0)}[data-device-type=tablet] .navigation{transform:translateX(-100%);transition:all 150ms ease-in-out;overflow:auto}[data-device-type=tablet] .navigation[data-show-nav-mobile=true]{box-shadow:0 0 .25rem rgba(0,0,0,.175);transform:translateX(0)}[data-device-type=desktop] .navigation{box-shadow:.05rem 0 .25rem rgba(0,0,0,.175);position:relative;transform:translateX(0)}[data-device-type=desktop] .navigation[data-nav-collapsed=true]{width:50px}.navigation .project-invitations-toggle{position:relative}.navigation .project-invitations-toggle .badge{position:absolute;transform:translate(2px, -5px)}[data-nav-collapsed=true] .navigation .project-invitations-toggle .badge{transform:translate(-50%, 4px);top:0;left:50%}[data-nav-collapsed=false] .top-org-picker{width:80%;padding:10px 15px 0 15px}[data-nav-collapsed=true] .top-org-picker{padding:calc(15px/2)}.top-org-picker button{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.top-org-picker .dropdown .dropdown-item{padding-top:10px;padding-bottom:10px}.nav-profile{display:flex;flex-direction:column;border-bottom:1px solid #d4d6d7;padding:15px}[data-nav-collapsed=true] .nav-profile{padding:calc(15px/2)}[data-nav-collapsed=false] .nav-profile{margin-top:40px}.nav-profile__image{display:flex;justify-content:center;align-items:center;color:#fff;border-radius:50%;font-weight:600}.nav-profile__image img{border-radius:50%;height:auto;max-width:100%}.nav-profile__details{cursor:pointer;display:grid;gap:15px;position:relative;transition:all 200ms ease-in-out}[data-nav-collapsed=false] .nav-profile__details{grid-template-columns:calc(100% - 3em - 15px) 3em}.nav-profile__details:hover,.nav-profile__details.active{color:hsla(0,0%,100%,.8)}.nav-profile__details:hover .nav-profile__image,.nav-profile__details.active .nav-profile__image{opacity:.8}.nav-profile__image{transition:all 200ms ease-in-out}.nav-profile__details-container{background:rgba(0,0,0,0);display:grid;grid-template-columns:2.5em calc(100% - 2.5em - 15px/2);grid-template-rows:2.5em;column-gap:calc(15px/2)}.nav-profile__name,.nav-profile__firm,.nav-profile__role{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-profile__role{font-weight:600}.profile-menu{border-radius:4px;background:#fff;color:#1a2229;display:grid;position:absolute;top:calc(100% + 10px);z-index:1020}.navigation-minify-btn{cursor:pointer;background:#d9e0e7;border:none;border-radius:5px;color:#000;display:inline-flex;justify-content:center;align-items:center;height:34px;width:34px;position:absolute;top:15px;right:10px;top:10.5px}.navigation-minify-btn .toggle-side-menu-icon{font-size:20px !important}.navigation-minify-btn:focus{outline:none}[data-nav-collapsed=true] .navigation-minify-btn{transform:rotateZ(180deg)}.nav-list{display:flex;flex-direction:column;padding:0;margin:0;list-style-type:none}.nav-list__item{border-bottom:1px solid #d4d6d7;position:relative}.nav-list__item:not(:first-of-type){transition:all 150ms ease-in-out}.nav-list__item.expanded .sub-menu-icon{transform:rotateZ(180deg)}.nav-list__item.expanded .sub-menu-list{display:block}nav[data-nav-collapsed=true] .nav-list__item.expanded .sub-menu-list{display:none}.nav-list__item-header{cursor:pointer;display:flex;align-items:center;justify-content:space-between;color:#000;background-color:#fff;height:2.74rem;padding:calc(15px/2) 15px}.nav-list__item-header .toggle-side-menu-icon{font-size:20px !important}.nav-list__item-header .title{display:inline-block;margin-left:calc(15px/2);width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.noHover{pointer-events:none}@keyframes fade-in{from{width:0}to{width:calc(275px - 50px)}}.sub-menu-list{display:none;background:#f0f3f9;padding:0;list-style-type:none}[data-nav-collapsed=true] .nav-list__item:hover>.sub-menu-list{display:block !important;width:calc(275px - 50px);box-shadow:0 0 .25rem rgba(0,0,0,.175);left:50px;max-height:calc(100vh - 45px);overflow-y:auto;white-space:nowrap;animation:fade-in .2s;position:absolute;top:0px}[data-nav-collapsed=true] .Project:hover>.sub-menu-list{position:fixed !important;top:44.8px !important}.sub-menu-list__item{border-bottom:1px solid #d4d6d7}.sub-menu-list__item>.nav-link{padding:.5rem 1rem;color:#000;line-height:calc(3em - 15px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:all 150ms ease-in-out}[data-nav-collapsed=true] .sub-menu-list__item>.nav-link{height:calc(3rem - 15px);display:flex;align-items:center}.sub-menu-list__item>.nav-link.active{color:#fff}.sub-menu-list__item:last-child{border-bottom:0px}.sub-menu-list__sub-list{cursor:pointer}.sub-menu-list__sub-list__item{display:none;padding:.5rem 1rem}.sub-menu-list__sub-list__item:first-child{border-top:1px solid #d4d6d7}.sub-menu-list__sub-list .sub-sub-menu-header-title{width:100%;position:relative;color:#000}.sub-menu-list__sub-list .sub-sub-menu-header-title a{position:absolute;margin-right:15px;right:0}.sub-menu-list__sub-list .sub-sub-menu-header-title a .sub-sub-menu-icon{vertical-align:middle;text-align:center}.sub-menu-list__sub-list.expanded{background-color:green !important}.sub-menu-list__sub-list.expanded .sub-sub-menu-header-title{font-weight:600}.sub-menu-list__sub-list.expanded .sub-sub-menu-icon{transform:rotateZ(180deg)}.sub-menu-list__sub-list.expanded ul{padding-left:0;background-color:#f0f3f4}.sub-menu-list__sub-list.expanded ul .sub-menu-list__sub-list__item{border-bottom:1px solid #d4d6d7;display:block;padding-left:3em;background-color:#f0f3f4;color:#000}.sub-menu-list__sub-list.expanded ul .sub-menu-list__sub-list__item.active{color:#fff;transition:all 150ms ease-in-out}.sub-menu-list__sub-list.expanded ul .sub-menu-list__sub-list__item:last-child{border-bottom:0}.sub-menu-list__sub-list>.nav-link{padding:.5rem 1rem;color:#000;line-height:calc(3em - 15px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:all 150ms ease-in-out}[data-nav-collapsed=true] .sub-menu-list__sub-list>.nav-link{height:calc(3rem - 15px);display:flex;align-items:center}.sub-menu-list__sub-list>.nav-link.active{color:#fff}.sub-menu-list .project-selector-btn{cursor:pointer;background:#485561;color:inherit;display:flex;justify-content:space-between;align-items:center;padding:0 15px;height:3em}[data-nav-collapsed=true] .sub-menu-list .project-selector-btn{height:3rem}.sub-menu-list .project-overview{padding-right:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#a5a3a3}.sub-menu-list .project-overview.active{color:#fff}.nav-footer{color:inherit;display:grid;justify-content:center;justify-items:center;height:max-content;padding:15px 0;text-align:center}[data-nav-collapsed=true] .nav-footer{padding:0;height:50px}.nav-footer a{color:inherit !important;text-decoration:none}.nav-footer__logo{width:200px}.nav-footer address{padding:0 15px;margin-top:calc(15px/2);margin-bottom:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/components/navigation/navigation.scss\",\"webpack://./src/resources/customized-styles/variables.scss\",\"webpack://./src/resources/color-admin/_variables.scss\"],\"names\":[],\"mappings\":\"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\",\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Module\nvar code = ` `;\n// Exports\nexport default code;","import { AppContextService } from 'app/services/app-context-service';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport {DeviceService} from 'app/services/device-service';\r\nimport {UserSessionService} from 'app/services/user-session-service';\r\nimport {Router,NavModel} from 'aurelia-router'; // , NavModel\r\nimport {ProjectDto} from 'app/models/project-dto';\r\nimport {EventAggregator, Subscription} from 'aurelia-event-aggregator';\r\nimport * as settings from 'app-settings.json';\r\nimport {autoinject, bindable, computedFrom} from 'aurelia-framework';\r\nimport {ErrorService} from \"../../services/error-service\";\r\nimport { ProjectRole } from 'app/models/project-role';\r\nimport { ProjectTokenService } from 'app/services/project-token-service';\r\nimport { ApiClient } from 'app/services/api-client';\r\nimport { OrgRole } from 'app/models/org-role';\r\nimport { ProjectTokenInfo } from 'app/models/project-token-info';\r\nimport { OrgTokenInfo } from 'app/models/org-token-info';\r\nimport { OrgTokenService } from 'app/services/org-token-service';\r\nimport { IRouteConfig_Child, RouteConfig_Root, RouteSettingAjour } from 'app/aox/RouteTypings_Ajour'; // --RouteSettingAjour, -- MenuAccessLevel, \r\nimport { AccessLevelService } from 'app/services/access-level-service';\r\n\r\n\r\n@autoinject\r\nexport class Navigation {\r\n\t@bindable public router: Router | undefined;\r\n\t@bindable public selectedProject: ProjectDto | undefined = undefined;\r\n\tpublic navCollapsed: boolean = false;\r\n\tpublic showMobileNav: boolean = false;\r\n\tpublic isDesktop: boolean = false;\r\n\tpublic ajourLogo: string = settings.ajour.logoWhiteUrl;\r\n\tpublic egPhone: string = settings.eg.phone;\r\n\tpublic ajourEmail: string = settings.ajour.email;\r\n\tpublic egWebsite: string = settings.eg.website;\r\n\tpublic isProfileMenuOpen: boolean = false;\r\n\tprivate subscriptions: Subscription[] = [];\r\n\t\r\n\tprivate projectTokenInfo:ProjectTokenInfo = {prjId: '00000000-0000-0000-0000-000000000000', prjRole: ProjectRole.VeryUnknown, orgId:'00000000-0000-0000-0000-000000000000', orgRole: OrgRole.Unknown}\r\n\tprivate orgTokenInfo: OrgTokenInfo = {orgId: '00000000-0000-0000-0000-000000000000', orgRole: OrgRole.Unknown};\r\n\tprivate selectedOrg: {id: string, name: string} | undefined;\r\n\tprivate organizations: {id: string, name: string}[] = [];\r\n\r\n\tconstructor(private events: EventAggregator, \r\n\t\tprivate appContext: AppContextService, \r\n\t\tprivate i18n: I18N, \r\n\t\tprivate userSession: UserSessionService, \r\n\t\tprivate device: DeviceService, private errorService: ErrorService, \r\n\t\tprivate projectTokenService: ProjectTokenService, private orgTokenService: OrgTokenService,\r\n\t\tprivate apiClient: ApiClient\r\n\t) {\t\r\n\t\tconsole.log('navigation.ctor, appCtx.project says:', appContext.projectId);\r\n\t\t// This is too early, because appContext.projectId may not be set yet!\r\n\r\n\t\t//this.initAll(); // problem, that it is still async - navigation view may render before tokens are complete.\r\n\t\t//this.dumpRouter('ctor');\r\n\t}\r\n\r\n\tasync initAll() {\r\n\t\tawait this.initProjectWithToken();//in-attached.\r\n\t\tawait this.initOrgsWithToken();\r\n\t}\r\n\r\n\tactivate() { // JG: I don't think this ever triggers, for navigation.ts.\r\n\t\tconsole.log('Navigation.activate');\r\n\r\n\t\tif (Boolean(this.routeExistsInNavigationAsChild()) || Boolean(this.router?.currentInstruction.config.nav)) {\r\n\t\t\tthis.setActiveParentOnLoad();\r\n\t\t}\r\n\t\t//this.dumpRouter('activate');\r\n\t}\r\n\r\n\tasync attached() { // paa dette tidspunkt er vores view allerede blevet renderet og har kigget paa data, saa det er IKKE godt hvis vi foerst laeser data nu..\r\n\r\n\t\tthis.isDesktop = Boolean(this.device.getDeviceType() === 'desktop');\r\n\t\tconsole.log('nav.attached, appCtx.project says:', this.appContext.projectId);\r\n\r\n this.initAll(); // now in attached.\r\n\r\n\t\tthis.subscriptions = [\r\n\t\t\tthis.events.subscribe(\"project-selector:project-changed\", async () => this.handleProjectChangedEvent()),\r\n\t\t\tthis.events.subscribe(\"router:navigation:processing\", () => this.showMobileNav = false),\r\n\t\t\tthis.events.subscribe(\"overlay:clicked\", () => this.closeNav()),\r\n\t\t\tthis.events.subscribe(\"navigation:update-prj-token\", async () => await this.createAndUpdatePrjToken()),//event:\"navigation:update-prj-token\"\r\n\t\t\tthis.events.subscribe(\"navigation:update-org-token\", async (orgId: string) => await this.createAndUpdateOrgToken(orgId)),\r\n\t\t\tthis.events.subscribe('project-invitation-accepted', async() => {\r\n\t\t\t\tawait this.getOrganizations_forUser();\r\n\t\t\t\tthis.updateOrgTokenInfo(false)\r\n\t\t\t})\r\n\t\t];\r\n\t\t//this.dumpRouter('attached');\r\n\t}\r\n\r\n\tdeactivate() { this.subscriptions.forEach(subscription => ( subscription.dispose() )); }\r\n\r\n\t///////////////////////////////////////////////////////////////////////////\r\n\tprivate async updateLocalProject(force:boolean):Promise { // (typically called when we receive the event \"project-selector:project-changed\")\r\n\t\t// Beware, we only get appContext.projectId set from dashboard.activate, so too early, it might not be set yet!\r\n\r\n\t\tthis.selectedProject = this.appContext.getSelectedProject();//in-updateLocalProject\r\n\t\tconsole.log(\"updateLocalProject.. Updating selectedProject on nav object, because it possibly changed on appContext. prjId:\", this.selectedProject?.id);\r\n\t\tif (force) {\r\n\t\t\tawait this.INIT_ProjectToken(this.selectedProject?.id);//in-updateLocalProject\r\n\t\t} else {\r\n\t\t\tawait this.updateProjectToken(this.selectedProject?.id);//in-updateLocalProject\r\n\t\t}\r\n\t}\r\n\r\n\tasync createAndUpdatePrjToken(): Promise {//triggered by event \"navigation:update-prj-token\"\r\n\t\t// This is what happens when you either select an ORG from the dropdown, or change roles in the manage-prj-manage(!) screens.\r\n\r\n\t\t// (JG: This variant is weird, because it ignores 'this.selectedProject'?)\r\n\t\tlet projectId: string | undefined = this.appContext.getSelectedProject()?.id;\r\n\t\tconsole.log('createAndUpdatePrjToken, prjId:', projectId);\r\n\t\tif (projectId) {\r\n\t\t\tconst createdNew = await this.projectTokenService.createNewProjectToken(projectId, this.apiClient,'createAndUpdatePrjToken');\r\n\t\t\tconsole.log('createNew?', createdNew);\r\n\t\t\tif (createdNew) { // JG: This 'check' approach is silly, because nothing is said about what to DO, when it is NOT satisfied, so it would STILL break weirdly..?\r\n\t\t\t\tlet prjTokenInfo: ProjectTokenInfo = this.projectTokenService.getPrjTokenInfo();\r\n\t\t\t\tthis.projectTokenInfo = prjTokenInfo;//in-updatePrjTokenInfo\t\t\r\n\t\t\t\t//this.updatePrjTokenInfo();//in-createAndUpdatePrjToken\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconsole.log('nav.createAndUpdatePrjToken, no prjId, no create..', projectId);\r\n\t\t}\r\n\t}\r\n\r\n\tasync INIT_ProjectToken(projectId: string | undefined) {\r\n\t\tconsole.log('INIT_ProjectToken', projectId);\r\n\t\t// first, make sure PTS _HAS_ a token:\r\n\t\tawait this.projectTokenService.updatePrjTokenIfNeeded(projectId, this.apiClient); \r\n\t\t// secondly, violently assign it no matter what, because we are INITIALIZING:\r\n\t\tthis.projectTokenInfo = this.projectTokenService.getPrjTokenInfo();\r\n\t}\r\n\tasync updateProjectToken(projectId: string | undefined): Promise { // (NB, updateProjectToken is only called by updateLocalProject.)\r\n\t\tconst anyFreshToken = await this.projectTokenService.anyFreshPrjToken(projectId, this.apiClient);\r\n\t\tif (anyFreshToken) { this.projectTokenInfo = anyFreshToken; }\r\n\t\t\r\n\t\tif (!anyFreshToken && this.projectTokenInfo.prjRole<0) { \r\n\t\t\tthis.projectTokenInfo = this.projectTokenService.getPrjTokenInfo(); \r\n\t\t\tconsole.warn('because token-update still lacks data, we force an update, to:', this.projectTokenInfo);\r\n\t\t}\r\n\t\tconsole.log('updateProjectToken, anyFresh?',anyFreshToken,'projectTokenInfo?', this.projectTokenInfo, this.projectTokenInfo.prjId );\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////////////////////////////////////////////\r\n\tasync initProjectWithToken() { // originally part of attached.\r\n\t\tconsole.log('initProjectWithToken, which tries updateLocalProject');\r\n\t\tawait this.updateLocalProject(true);//in-initProjectWithToken\r\n\t}\r\n\tasync initOrgsWithToken():Promise {\r\n\t\tawait this.getOrganizations_forUser();\r\n\t\tthis.updateOrgTokenInfo(false); \r\n\t}\r\n\r\n\t@computedFrom('selectedProject')\r\n\tget router_navigation():NavModel[] { // JG: This hack ensures enable-disable menu-items is re-evaluated whenever selectedProject changes!\r\n\t\tconsole.log('router_navigation, we triggered a computedFrom update.');\r\n\t\treturn this.router?.navigation!; \r\n\t}\r\n\r\n\t// JG: We can't do it on this level, because that is an inner nested loop, not a direct property of Navigation:\r\n\t//@computedFrom('selectedProject')\r\n\troute_settings_children(route:NavModel): IRouteConfig_Child[] { \r\n\t\tconst settings:RouteSettingAjour = route.settings;\r\n\t\tconst children:IRouteConfig_Child[] = settings.children!;\r\n\t\treturn route.settings.children; \r\n\t}\r\n\r\n\t\r\n\tstatic dumpRoutes:boolean = false;\r\n\tdumpRouter(who:string) {\r\n\t\tif (!Navigation.dumpRoutes) { return; }\r\n\t\tconsole.log('dumpRouter', who);\r\n\t\tconsole.log('token1', this.projectTokenInfo);\r\n\t\tconsole.log('token2', this.orgTokenInfo);\r\n\t\t//projectTokenInfo, orgTokenInfo\r\n\r\n\t\tif (!this.router) { return; } // console.log('no router?', this.router);\r\n\r\n\t\tfor (let route of this.router!.navigation) {\r\n\t\t\tconsole.log('route:', route.config.name, route);\r\n\t\t\tconsole.log('#children:', route.settings.children.length);\r\n\t\t\tfor (let item of route.settings.children) {\r\n\t\t\t\tconsole.log('a-item:', item);\r\n\t\t\t\tconsole.log('menuAccessLevel:', item.menuAccessLevel);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\r\n\r\n\tstatic emptyCount=0;\r\n\tisItemEmpty(item: any): boolean {\r\n\t\tconst isEmpty:boolean = (Object.keys(item).length === 0);\r\n\t\t// we will hide this log again, we are just debugging.\r\n\t\tif (isEmpty) { \r\n\t\t\t//console.warn('another empty:', ++Navigation.emptyCount, item); \r\n\t\t}\r\n\t\treturn isEmpty;\r\n\t}\r\n\r\n //////////////////////////// ORG-TOKEN STUFF ///////////////////////////\r\n\tasync getOrganizations_forUser(): Promise {\r\n\t\tthis.organizations = await this.apiClient.global.get(\"UserInfo/GetUserOrganizations\").jsonResult();\r\n\t\tif (this.organizations.length == 1) {\r\n\t\t\tawait this.orgTokenService.createNewOrgToken(this.organizations[0].id, this.apiClient);\r\n\t\t} // why is updateOrgTokenInfo not required in THIS case?\r\n\t}\r\n\r\n\tasync createAndUpdateOrgToken(orgId: string): Promise {\r\n\t\tif (await this.orgTokenService.createNewOrgToken(orgId,this.apiClient)) { this.updateOrgTokenInfo(true); }\r\n\t}\r\n\r\n\tupdateOrgTokenInfo(shouldSendEvent: boolean): void {\r\n\t\tlet orgTokenInfo: OrgTokenInfo = this.orgTokenService.getOrgTokenInfo();\r\n\t\tthis.orgTokenInfo = orgTokenInfo;\r\n\t\tthis.selectedOrg = this.organizations.find(org => org.id == orgTokenInfo.orgId);\r\n\t\tconsole.log(\"orgTokenInfo \" , this.orgTokenInfo);\r\n\t\tif (shouldSendEvent) {\r\n\t\t\tthis.events.publish(\"global:org-changed\");\r\n\t\t}\r\n\t}\r\n ////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n\tpublic hasAccess(route:IRouteConfig_Child | RouteConfig_Root, projectTokenInfo: ProjectTokenInfo, orgTokenInfo: OrgTokenInfo): boolean {\r\n\t\t//projectTokenInfo and orgTokenInfo parameter is a hack to reevaluate function whenever project or org has changed.\r\n\t\tconst show = true;\r\n\t\tconst access = AccessLevelService.hasAccess(this.appContext, route, projectTokenInfo, orgTokenInfo, show);\t\t\r\n\t\t//console.log('hasAccess:', access,route);\r\n\t\treturn access;\r\n\t}\r\n\t\r\n\tprivate routeExistsInNavigationAsChild(): Boolean {\r\n\t\tconst navChildren: any[] = [];\r\n\t\tthis.router?.navigation.forEach((section: any) => {\r\n\t\t\tsection.settings.children.forEach((children: any) => {\r\n\t\t\t\tnavChildren.push(children);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn Boolean(navChildren.some(child => child.title === this.router?.currentInstruction.config.title));\r\n\t}\r\n\r\n\tpublic toggleNav() { //For opening and closing menu.\r\n\t\tconsole.log('Navigation.toggleNav');\r\n\t\tif (this.isDesktop) { // Desktop\r\n\t\t\tthis.navCollapsed = !this.navCollapsed;\r\n\t\t\tthis.events.publish(\"nav-collapsed\", this.navCollapsed);\r\n\t\t} else { // Not Desktop\r\n\t\t\tthis.showMobileNav = !this.showMobileNav;\r\n\t\t\tthis.events.publish(\"show-overlay\", !this.showMobileNav ? false : true);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic closeNav() {\r\n\t\tconsole.log('Navigation.closeNav');\r\n\t\tif (!this.isDesktop) {\r\n\t\t\tthis.showMobileNav = false;\r\n\t\t\tthis.events.publish(\"show-overlay\", false);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleSubMenu(event: any) {//Handle opening and closing of menu items\r\n\t\tconsole.log('Navigation.toggleSubMenu, event:', event); //event.target);\r\n\t\t//this.dumpRouter('toggleSubMenu');\r\n\r\n\t\tconst eventTarget:Element = event.target;\r\n\r\n\t\tlet ALL_navListItems = document.querySelectorAll('.nav-list__item');\r\n\t\tlet anyClicked_NavList_Item_:Element|null = eventTarget.closest('.nav-list__item'); // (We are looking for a close ANCESTOR with that class)\r\n\t\tlet curClicked_NavList_Item:Element = anyClicked_NavList_Item_!; // We expect it to ALWAYS be there..\r\n\t\tconsole.log('any navList-item clicked?', curClicked_NavList_Item);\r\n\r\n\t\tif (curClicked_NavList_Item.classList.contains('expanded')) {\r\n\t\t\t// If the clicked navList item was already expanded, de-expand it:\r\n\t\t\tconsole.log(\"Removing class 'expanded' from currently expanded navlist-Item\", curClicked_NavList_Item);\r\n\t\t\tcurClicked_NavList_Item.classList.remove('expanded');\r\n\t\t} else {\r\n\t\t\tconsole.log(\"removing class 'expanded' from EACH navListItem, numbering #\", ALL_navListItems.length);\r\n\t\t\tALL_navListItems.forEach((item) => { // Closes all/any currently opened sub-menus.\r\n\t\t\t\titem.classList.remove('expanded');\r\n\t\t\t});\r\n\t\t\t// Then, ONLY open the one we just clicked:\r\n\t\t\tcurClicked_NavList_Item.classList.add('expanded');\r\n\t\t\tconsole.log(\".. then, ADDING class 'expanded' to currently clicked navList-Item\", curClicked_NavList_Item);\r\n\t\t\tconsole.log(\"classList now:\", curClicked_NavList_Item.classList);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleSubSubMenu(event: any) {\r\n\t\tconsole.log('Navigation.toggleSubSubMenu', event);\r\n\t\tlet navListItems = document.querySelectorAll('.sub-menu-list__sub-list');\r\n\t\tlet target = event.target.closest('.sub-menu-list__sub-list');\r\n\r\n\t\tif (target.classList.contains('expanded')) {\r\n\t\t\ttarget.classList.remove('expanded');\r\n\t\t} else {\r\n\t\t\tnavListItems.forEach((item) => { item.classList.remove('expanded'); });//Closes any currently opened sub-sub-menus\r\n\t\t\ttarget.classList.add('expanded');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setActiveParentOnLoad() {\r\n\t\tconsole.log('Navigation.setActiveParentOnLoad');\r\n\t\tconst classList = document.querySelector('.nav-link.active')?.parentElement?.parentElement?.parentElement?.classList;\r\n\t\tclassList!.add('active');\r\n\t\tclassList!.add('expanded');\r\n\t\tconsole.log('setActiveParentOnLoad');\r\n\t}\r\n\r\n\tpublic async handleNavigateEventForSubItem(baseUrl: string, href: string, event: any) { \r\n\t\tconsole.log('Navigation.handleNavigateEventForSubItem');\r\n\t\t// console.log(href.substring(0, 7));\r\n\t\tlet sub = href.substring(0, Navigation.PROJECT_PART.length);\r\n\t\tif (await this.handleNoSelectedProject(sub, href)) {//in-handleNavigateEventForSubSubItem\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet parent: HTMLElement = event.target.parentElement.parentElement.parentElement;\r\n\t\tthis.closeSubNavList();\r\n\t\t\r\n\t\tif (parent.classList.contains('active') === false) {\r\n\t\t\tthis.highlightParent(parent);\r\n\t\t}\r\n\t\tthis.navigateToRoute(sub, baseUrl, href);\r\n\t}\r\n\r\n\tpublic async handleNavigateEventForSubSubItem(baseUrl: string, href: string, event: any) {\r\n\t\tconsole.log('handleNavigateEventForSubSubItem, baseUrl:', baseUrl, 'href:', href, 'event:', event);\r\n\t\t// console.log(href.substring(0, 7));\r\n\t\tlet sub = href.substring(0, Navigation.PROJECT_PART.length); //7);\r\n\t\tif (await this.handleNoSelectedProject(sub, href)) {//in-handleNavigateEventForSubSubItem\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet parent: HTMLElement = event.target.parentElement.parentElement;\r\n\t\tthis.closeSubNavList();\r\n\t\t\r\n\t\tthis.highlightParent(parent);\r\n\t\tthis.handleParentsParent(parent);\r\n\r\n\t\tthis.navigateToRoute(sub, baseUrl, href);\r\n\t}\r\n\r\n\tpublic static PROJECT_PART = 'project';\r\n\r\n\tasync handleNoSelectedProject(sub: string, href: string):Promise {\r\n\t\tconsole.log('Navigation.handleNoSelectedProject');\r\n\r\n\t\tif (sub === Navigation.PROJECT_PART && !Boolean(this.appContext.projectId) && href !== \"project/overview\") {\r\n\t\t\tawait this.errorService.noProjectSelected();//in-handleNoSelectedProject\r\n\t\t\tthis.appContext.setExpectedRoute(href);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleParentsParent(parent: HTMLElement) {\r\n\t\tconsole.log('Navigation.handleParentsParent');\r\n\t\tparent.parentElement?.parentElement?.parentElement?.classList.add('active');\r\n\t\tparent.parentElement?.parentElement?.parentElement?.classList.add('expanded');\r\n\t}\r\n\r\n\tcloseSubNavList() {\r\n\t\tconsole.log('Navigation.closeSubNavList');\r\n\t\tlet subNavList = document.querySelectorAll('.sub-menu-list__sub-list');\r\n\t\tsubNavList.forEach((item) => {\r\n\t\t\titem.classList.remove('active');\r\n\t\t\titem.classList.remove('expanded');\r\n\t\t});\r\n\t}\r\n\r\n\thighlightParent(parent: HTMLElement) {\r\n\t\tconsole.log('Navigation.highlightParent');\r\n\t\tdocument.querySelectorAll('.nav-list__item').forEach((item) => {\r\n\t\t\titem.classList.remove('active');\r\n\t\t\titem.classList.remove('expanded');\r\n\t\t});\r\n\t\tparent.classList.add('active');\r\n\t\tparent.classList.add('expanded');\r\n\t}\r\n\t\r\n\tnavigateToRoute(sub: string, baseUrl: string, href: string) {\r\n\t\tconsole.log('Navigation.navigateToRoute');\r\n\t\t/* JG: Beware that this kludge requires views to have this project-bla-bla prefix to work correctly,\r\n\t\tin order to get this 'support'/helping-hand. */\r\n\t\tif (sub === \"project\" && href !== \"project/overview\") {\r\n\t\t\t// (muligvis er det længden på ordet /project'? - se 'PROJECT_PART'.)\r\n\t\t\t// JG: Hvad er det for en masse underlige hardcodede 7 og 8 taller..?\r\n\t\t\t//let url = '#' + baseUrl + sub + \"/\" + this.appContext.projectId + \"/\" + href.substring(8);\r\n\t\t\tlet newroute = `#${baseUrl}${sub}/${this.prjId()}/${href.substring(8)}`;\r\n\t\t\tconsole.log('navigateToRoute, project newroute:', newroute);\r\n\t\t\tthis.router?.navigate(newroute);\r\n\t\t} else {\r\n\t\t\tthis.router?.navigate('#' + baseUrl + href);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleProfileMenu() { this.isProfileMenuOpen = !this.isProfileMenuOpen; } //console.log('Navigation.toggleProfileMenu');\r\n\tpublic openNotifications() { this.events.publish(\"notification-center:toggle\"); }//console.log('Navigation.openNotifications');\r\n\tpublic signOut() { this.appContext.switchProjectLogic(\"\", 'signout,new-nav'); this.userSession.logOut(); } // console.log('Navigation.signOut');\r\n\r\n\thasProjectId(): boolean | string {\r\n\t\tlet prjId = this.appContext.projectId;\r\n\t\treturn prjId && (prjId != AppContextService.NO_PROJECT);\r\n\t}\r\n\r\n\tprjId():string { return this.appContext.projectId ? this.appContext.projectId : AppContextService.NO_PROJECT; }\r\n\t\r\n\tgoToProjectOverview(event: Event): boolean {\r\n\t\tevent.stopPropagation();\r\n\t\tthis.router?.navigateToRoute(\"project/overview\");\r\n\t\treturn true;\r\n\t}\r\n\r\n\tasync selectOrg(org: {id: string, name: string}): Promise {\r\n\t\tlet updated = await this.orgTokenService.updateOrgTokenIfNeeded(org.id,this.apiClient);\r\n\t\tif (updated) { this.updateOrgTokenInfo(true); }\r\n\t}\r\n\r\n\tprivate async handleProjectChangedEvent() { // (reacts on EVENT \"project-selector:project-changed\")\r\n\t\tconsole.log('handleProjectChangedEvent triggered');\r\n\t\t// typically triggered by project-selector.selectProject().\r\n\t\tawait this.updateLocalProject(false);//in-handleProjectChangedEvent\r\n\t\tconsole.log('handleProjectChangedEvent', this.selectedProject?.name);\r\n\r\n\t\tawait this.extraProjectChangeHackStuff(); // JG: I isolated this bit.\r\n\t}\r\n\r\n\tprivate async extraProjectChangeHackStuff() { // was part of handleProjectChangedEvent.\r\n\r\n\t\t/* JG: Answer for Andreas: I seem to vaguely recall what this crap was used for.\r\n\t\tThere is/was some way of navigating, where some properties that would NORMALLY be filled out/populated,\r\n\t\twould be empty when doing the weird navigation thing.\r\n\t\t The below stuff was then the band-aid that fixed that.\r\n\t\tPossibly, it has to do with how routing-sourced parameter fields are filled out\r\n\t\t(e.g. when a parameter is sourced from the url path as xyz/:someValue/xyz ).\r\n\t\t*/\r\n\r\n\t\t// AEP: I don't see what this is used for. It routes anyways when selecting a new project.\r\n\r\n\t\t/*\r\n\t\tif (Boolean(this.appContext.expectedRoute)) {\r\n\t\t\tlet sub: string | undefined = this.appContext.expectedRoute?.substring(0, Navigation.PROJECT_PART.length); //7);\r\n\r\n\t\t\tif (sub === \"project\" && this.appContext.expectedRoute !== \"project/overview\") {\r\n\t\t\t\t//let url = '#' + this.router.baseUrl + sub + \"/\" + this.appContext.projectId + \"/\" + this.appContext.expectedRoute.substring(8);\r\n\t\t\t\tlet newroute = `#${this.router?.baseUrl}${sub}/${this.prjId()}/${this.appContext.expectedRoute?.substring(8)}`; // this.appContext.projectId\r\n\t\t\t\tconsole.log('handleProjectChangedEvent, project newroute:', newroute);\r\n\t\t\t\tthis.router?.navigate(newroute);\r\n\t\t\t} else {\r\n\t\t\t\tthis.router?.navigate('#' + this.router.baseUrl + this.appContext.expectedRoute);\r\n\t\t\t}\r\n\r\n\t\t\tthis.appContext.expectedRoute = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Temporary fix for updating view data when project changes\r\n\t\tlet instruction: any = this.router?.currentInstruction.config.name;\r\n\t\tlet subroutes: any = { // maps instructions to subroutes.\r\n\t\t 'project-building-parts': \t\t\t\t'building-parts',\r\n\t\t 'project/materials': \t\t\t\t'materials',\r\n\t\t 'project/parameters': \t\t\t\t'parameters',\r\n \t\t 'project/parameters/bulk-parameters': \t'bulk-parameters',\r\n\t\t 'project/manual-entry': \t\t\t\t'manual-entry',\r\n\t\t 'project/ifc-import': \t\t\t\t'ifc-import', // JG: the left part, the 'instruction', seems to be the HREF in aox.ts?\r\n\t\t 'project/ifc-fun': \t\t\t\t 'ifc-fun', // JG: the left part, the 'instruction', seems to be the HREF in aox.ts?\r\n\t\t 'project/openbim-testbed': \t\t\t'openbim-testbed', // JG: the left part, the 'instruction', seems to be the HREF in aox.ts?\r\n\t\t 'project/value-lists': \t\t\t\t'value-lists',\r\n\t\t 'project/categories': \t\t\t\t'categories',\r\n\t\t 'project/summing': \t\t\t\t'summing',\r\n\t\t 'project-whitelist': \t\t\t\t'whitelist',\r\n\t\t 'project/changelog': \t\t\t\t'changelog',\r\n\t\t 'lca-export': \t\t\t\t'lcabyg/export',\r\n\t\t 'project/model-revision': \t\t\t\t'model-revision',\t\t\r\n\t\t 'project/work-area': \t\t\t\t'work-area',\r\n\t\t 'project/tender-list': \t\t\t\t'tender-list', // YES same subroute twice!\r\n\t\t 'project/tender-settings': \t\t\t\t'tender-list', // YES same subroute twice!\r\n\t\t 'project/quantity-views': \t\t\t\t'quantity-views',\r\n\t\t 'project/quantity-filters':\t\t\t\t'quantity-filters', // den siger den ikke kan finde denne?\r\n\t\t 'project/quantity-grid': \t\t\t\t'quantity-grid',\r\n\t\t 'project/pivot-grid': \t\t\t\t'pivot-grid',\r\n\t\t 'project/quantity-takeoff': \t\t\t\t'quantity-takeoff',\r\n\t\t 'project/test-model-revision': \t\t\t'test-model-revision',\r\n\t\t 'project/dashboard': \t\t\t\t\t\t'dashboard'\r\n\t\t}\r\n\t\tlet subroute:string = subroutes[instruction];\r\n\t\tif (subroute) {\r\n\t\t\tlet newroute = `project/${this.prjId()}/${subroute}/`;\r\n\t\t\tconsole.log('handleProjectChangedEvent, newroute:', newroute);\r\n\t\t\tthis.router?.navigate(newroute);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t */\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t/* SHARED waiting for a resource-promise, gotten from Andreas and google-gemini;\r\n\t\t\tcould be used to initialize project-token:\r\n ..\r\n\tlet tokenPromise: Promise | null = null;\r\n\tlet isTokenBeingFetched = false;\r\n\t\t\r\n\tasync function getToken(): Promise {\r\n\t\tif (tokenPromise && !isTokenBeingFetched) {\r\n\t\t\t// Token fetch already in progress, wait for it\r\n\t\t\treturn await tokenPromise;\r\n\t\t}\r\n\t\t\r\n\t\tisTokenBeingFetched = true; // Mark fetching in progress\r\n\t\t\r\n\t\ttry {\r\n\t\t\tconst token = await fetchTokenFromServer(); // Your server-side token fetching logic\r\n\t\t\ttokenPromise = Promise.resolve(token); // Update promise with resolved token\r\n\t\t\treturn token;\r\n\t\t} finally {\r\n\t\t\tisTokenBeingFetched = false; // Release the flag after fetching or error\r\n\t\t}\r\n\t}\r\n\t..\r\n\t*/\r\n}\r\n\r\n\r\n\r\n\r\n\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","Navigation","constructor","events","appContext","i18n","userSession","device","errorService","projectTokenService","orgTokenService","apiClient","selectedProject","undefined","navCollapsed","showMobileNav","isDesktop","ajourLogo","logoWhiteUrl","egPhone","phone","ajourEmail","email","egWebsite","website","isProfileMenuOpen","subscriptions","projectTokenInfo","prjId","prjRole","VeryUnknown","orgId","orgRole","Unknown","orgTokenInfo","organizations","console","log","projectId","initAll","this","initProjectWithToken","initOrgsWithToken","activate","Boolean","routeExistsInNavigationAsChild","router","currentInstruction","config","nav","setActiveParentOnLoad","attached","getDeviceType","subscribe","async","handleProjectChangedEvent","closeNav","createAndUpdatePrjToken","createAndUpdateOrgToken","getOrganizations_forUser","updateOrgTokenInfo","deactivate","forEach","subscription","dispose","updateLocalProject","force","getSelectedProject","INIT_ProjectToken","updateProjectToken","createdNew","createNewProjectToken","prjTokenInfo","getPrjTokenInfo","updatePrjTokenIfNeeded","anyFreshToken","anyFreshPrjToken","warn","router_navigation","navigation","route_settings_children","route","settings","children","dumpRouter","who","dumpRoutes","name","length","item","menuAccessLevel","isItemEmpty","Object","keys","global","get","jsonResult","createNewOrgToken","shouldSendEvent","getOrgTokenInfo","selectedOrg","find","org","publish","hasAccess","navChildren","section","some","child","title","toggleNav","toggleSubMenu","event","eventTarget","target","ALL_navListItems","document","querySelectorAll","curClicked_NavList_Item","closest","classList","contains","remove","add","toggleSubSubMenu","navListItems","querySelector","parentElement","handleNavigateEventForSubItem","baseUrl","href","sub","substring","PROJECT_PART","handleNoSelectedProject","parent","closeSubNavList","highlightParent","navigateToRoute","handleNavigateEventForSubSubItem","handleParentsParent","noProjectSelected","setExpectedRoute","newroute","navigate","toggleProfileMenu","openNotifications","signOut","switchProjectLogic","logOut","hasProjectId","NO_PROJECT","goToProjectOverview","stopPropagation","selectOrg","updateOrgTokenIfNeeded","extraProjectChangeHackStuff","emptyCount","bindable","computedFrom","autoinject","EventAggregator","I18N"],"sourceRoot":""}