@huntsman-cancer-institute/navigation 17.14.0 → 17.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"huntsman-cancer-institute-navigation.mjs","sources":["../../../projects/navigation/src/services/navigation-global.service.ts","../../../projects/navigation/src/services/navigation.service.ts","../../../projects/navigation/src/components/nav.component.ts","../../../projects/navigation/src/components/ul-nav.component.ts","../../../projects/navigation/src/components/badge.component.ts","../../../projects/navigation/src/directives/ri-ripple-effect.directive.ts","../../../projects/navigation/src/components/li-nav.component.ts","../../../projects/navigation/src/components/li-dd-nav.component.ts","../../../projects/navigation/src/components/div-nav.component.ts","../../../projects/navigation/src/components/brand-nav.component.ts","../../../projects/navigation/src/components/li-exp-nav.component.ts","../../../projects/navigation/src/components/template.component.ts","../../../projects/navigation/src/components/search-list/row-group.ts","../../../projects/navigation/src/components/search-list/search-list-controller.component.ts","../../../projects/navigation/src/components/search-list/search-list.component.ts","../../../projects/navigation/src/directives/top-margin.directive.ts","../../../projects/navigation/src/impl/app-header.component.ts","../../../projects/navigation/src/impl/app-footer.component.ts","../../../projects/navigation/src/impl/sidebar.component.ts","../../../projects/navigation/src/components/search-tree/search-tree-controller.component.ts","../../../projects/navigation/src/components/search-tree/search-tree.component.ts","../../../projects/navigation/src/navigation.module.ts","../../../projects/navigation/src/index.ts","../../../projects/navigation/src/huntsman-cancer-institute-navigation.ts"],"sourcesContent":["import {Injectable, isDevMode} from \"@angular/core\";\r\n\r\nimport {Subject} from \"rxjs\";\r\n\r\nimport {NavigationService} from \"./navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\n\r\n/**\r\n * A singleton service that when a navigation component is instantiated, will register itself and its service with\r\n * this global service. That way any navigation component or service can be referenced from anywhere in the\r\n * implementing application.\r\n */\r\n@Injectable()\r\nexport class NavigationGlobalService {\r\n\r\n uniqueId: number = 0;\r\n\r\n serviceMap: Map<string, NavigationService> = new Map<string, NavigationService>();\r\n componentMap: Map<string, NavComponent> = new Map<string, NavComponent>();\r\n\r\n notificationEvent: Subject<boolean> = new Subject<boolean>();\r\n\r\n getNavigationComponent(id: string): NavComponent {\r\n return this.componentMap.get(id);\r\n }\r\n\r\n getNavigationService(id: string): NavigationService {\r\n return this.serviceMap.get(id);\r\n }\r\n\r\n /**\r\n * For a root navigation component to call when first instantiated. Stores a reference of that component and service\r\n * in a map that is referenced by id.\r\n *\r\n * @param {string} id\r\n * @param {NavComponent} navComponent\r\n * @param {NavigationService} navigationService\r\n */\r\n register(id: string, navComponent: NavComponent, navigationService: NavigationService) {\r\n if (isDevMode()) {\r\n console.info(\"NavigationGlobalService.register: \" + id);\r\n }\r\n\r\n if (id) {\r\n this.componentMap.set(id, navComponent);\r\n this.serviceMap.set(id, navigationService);\r\n }\r\n }\r\n\r\n getNotificationEventSubject(): Subject<boolean> {\r\n return this.notificationEvent;\r\n }\r\n\r\n /**\r\n * Currently, a simple way for navigation components to be made aware of potential changes external to itself.\r\n */\r\n pushNotificationEvent(): void {\r\n this.notificationEvent.next(true);\r\n }\r\n}\r\n","import {Injectable, isDevMode, Type} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subject} from \"rxjs\";\r\n\r\nimport {RoleEntity} from \"@huntsman-cancer-institute/user\";\r\n\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"./navigation-global.service\";\r\n\r\n/**\r\n * This service manages injected components and handles events between components.\r\n */\r\n@Injectable()\r\nexport class NavigationService {\r\n\r\n private id: string;\r\n private idNavComponent: number = -1;\r\n\r\n private registeredComponents: Map<string, NavComponent> = new Map<string, NavComponent>();\r\n private eventMap: Map<string, Subject<string>> = new Map<string, Subject<string>>();\r\n private userRoles: BehaviorSubject<RoleEntity[]> = new BehaviorSubject<RoleEntity[]>([]);\r\n\r\n constructor(private navigationGlobalService: NavigationGlobalService) {}\r\n\r\n setRootComponent(id: string, navComponent: NavComponent): void {\r\n this.id = id;\r\n this.navigationGlobalService.register(id, navComponent, this);\r\n }\r\n\r\n getId(): string {\r\n return this.id;\r\n }\r\n\r\n getIdNavComponent(): string {\r\n this.idNavComponent++;\r\n return \"nav-component-\" + this.idNavComponent;\r\n }\r\n\r\n insertAfter(id: string, config: any) {\r\n this.registeredComponents.get(id).getParent().insertAfter(id, config);\r\n }\r\n\r\n insertBefore(id: string, config: any) {\r\n this.registeredComponents.get(id).getParent().insertBefore(id, config);\r\n }\r\n\r\n setUserRoles(userRoles: RoleEntity[]) {\r\n this.userRoles.next(userRoles);\r\n }\r\n\r\n getUserRoles(): BehaviorSubject<RoleEntity[]> {\r\n return this.userRoles;\r\n }\r\n\r\n registerEvent(event: string) {\r\n this.eventMap.set(event, new Subject<string>());\r\n }\r\n\r\n emitEvent(event: string, value: string) {\r\n this.eventMap.get(event).next(value);\r\n }\r\n\r\n getEvent(event: string): Subject<string> {\r\n return this.eventMap.get(event);\r\n }\r\n\r\n registerComponent(id: string, component: NavComponent) {\r\n if (id !== undefined) {\r\n this.registeredComponents.set(id, component);\r\n if (isDevMode()) {\r\n console.debug(\"registerComponent: \" + id + \" \" + component.typeName);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Return a component by its id.\r\n *\r\n * @param {string} id\r\n * @returns {NavComponent}\r\n */\r\n getComponent(id: string): NavComponent {\r\n return this.registeredComponents.get(id);\r\n }\r\n\r\n /**\r\n * Return a component by its type.\r\n *\r\n * @param {string} type\r\n * @returns {NavComponent}\r\n */\r\n getComponentByType(type: string): NavComponent {\r\n if (isDevMode()) {\r\n console.debug(\"getComponentByType: \" + type);\r\n }\r\n\r\n for (let navComponent of this.registeredComponents.values()) {\r\n if (type === navComponent.typeName) {\r\n return navComponent;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n Input,\r\n isDevMode,\r\n Renderer2,\r\n SimpleChange,\r\n Type,\r\n ViewContainerRef,\r\n ViewRef,\r\n OnInit,\r\n AfterViewInit,\r\n OnChanges,\r\n OnDestroy,\r\n Component\r\n} from \"@angular/core\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\nimport {RoleEntity} from \"@huntsman-cancer-institute/user\";\r\nimport {ComponentInjector} from \"@huntsman-cancer-institute/utils\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n/**\r\n * This is the base class that all navigation components extend from. This includes other standalone modules such\r\n * as a header or sidebar. It contains common properties, configuration tools, and functions to add/insert other\r\n * NavComponents.\r\n * The config property is any object that contains a list of properties that specifies configuration options. Common\r\n * properties include id, title, rootClass and roleName. Extending classes may have their own properties such as extra\r\n * css classes.\r\n */\r\n@Component(\r\n {\r\n template:\r\n `\r\n `,\r\n selector: \"hci-nav\"\r\n }\r\n)\r\nexport class NavComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\r\n\r\n @Input() config: any = {\r\n rendered: true\r\n };\r\n @Input(\"navId\") id: string;\r\n @Input() isRoot: boolean = false;\r\n @Input() type: Type<any> | string;\r\n @Input() title: string;\r\n @Input() rootClass: string;\r\n @Input() roleName: string;\r\n @Input() authenticatedKey: string = \"AUTHC\";\r\n @Input() notAuthenticatedKey: string = \"NOT_AUTHC\";\r\n @Input(\"children\") inputChildren: any[] = [];\r\n @Input() isCCR: boolean = false;\r\n /**\r\n * An array of all component instances of children. It is important to note that we try to render everything in the\r\n * children array. However, if roles are not met, some children may not be rendered so no component instance will\r\n * exist for them.\r\n */\r\n children: NavComponent[] = [];\r\n\r\n typeName: string;\r\n\r\n elementRef: ElementRef;\r\n renderer: Renderer2;\r\n resolver: ComponentFactoryResolver;\r\n navigationService: NavigationService;\r\n changeDetectorRef: ChangeDetectorRef;\r\n\r\n afterViewInit: boolean = false;\r\n initialized: boolean = false;\r\n\r\n /**\r\n * A set of container names. Some components may not define a container while others just have\r\n * one (a \"default\" container).\r\n */\r\n containerSet: Set<string> = new Set<string>();\r\n\r\n /**\r\n * A map of IDs to the corresponding viewRef. When we dynamically inject a new component, we first pull the created\r\n * ComponentRef and from there its ViewRef. We need the ViewRef to determine the component's position in the\r\n * ViewContainerRef. With a set of ViewRefs, we can detach them from the container and re-add them in a different order\r\n * based on the component's sortOrder (which is based on the position in the children array. This map provides the\r\n * component to view relationship.\r\n */\r\n private viewRefMap: Map<string, ViewRef> = new Map<string, ViewRef>();\r\n\r\n /**\r\n * A reference to the parent component. When a child is added, a reference to the parent is automatically set.\r\n */\r\n private parent: NavComponent;\r\n\r\n subscriptions: Subscription = new Subscription();\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n this.elementRef = elementRef;\r\n this.renderer = renderer;\r\n this.resolver = resolver;\r\n this.navigationService = navigationService;\r\n this.changeDetectorRef = changeDetectorRef;\r\n\r\n this.containerSet.add(\"default\");\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.isRoot) {\r\n this.subscriptions.add(this.navigationService.getUserRoles().subscribe((userRoles: RoleEntity[]) => {\r\n if (isDevMode()) {\r\n console.debug(\"User Roles changed. Refresh children.\");\r\n }\r\n this.refreshChildren();\r\n }));\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.ngAfterViewInit\");\r\n }\r\n\r\n this.afterViewInit = true;\r\n this.checkInitialized();\r\n }\r\n\r\n /**\r\n * If config is bound by input, reset the config when it changes. An important note, if anything in the config was\r\n * updated by updateConfig only, then those options will be lost.\r\n *\r\n * @param {{[p: string]: SimpleChange}} changes\r\n */\r\n ngOnChanges(changes: { [propName: string]: SimpleChange }): void {\r\n if (isDevMode()) {\r\n console.debug(\"ngOnChanges:\");\r\n console.debug(changes);\r\n }\r\n\r\n for (let change of Object.keys(changes)) {\r\n if (change !== \"config\") {\r\n this[change] = changes[change].currentValue;\r\n\r\n if (change === \"inputChildren\") {\r\n this.config[\"children\"] = changes[change].currentValue;\r\n } else {\r\n this.config[change] = changes[change].currentValue;\r\n }\r\n }\r\n }\r\n\r\n if (changes[\"config\"]) {\r\n this.setConfig(this.config);\r\n }\r\n\r\n if (changes[\"id\"]) {\r\n this.setId();\r\n }\r\n if (changes[\"rootClass\"]) {\r\n this.setRootClass();\r\n }\r\n if (changes[\"inputChildren\"]) {\r\n this.setChildren();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.changeDetectorRef) {\r\n this.changeDetectorRef.detach();\r\n }\r\n\r\n this.subscriptions.unsubscribe();\r\n }\r\n\r\n checkInitialized(): void {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.detectChanges();\r\n this.postInit();\r\n }\r\n }\r\n\r\n postInit(): void {\r\n }\r\n\r\n getNavigationService() {\r\n return this.navigationService;\r\n }\r\n\r\n /**\r\n * Remove all children.\r\n */\r\n clear(): void {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.clear\");\r\n }\r\n\r\n for (let i = 0; i < this.children.length; i++) {\r\n this.remove(this.children[i], i);\r\n }\r\n\r\n this.children = [];\r\n }\r\n\r\n refresh() {\r\n let isRendered: boolean = false;\r\n if (this.config.rendered !== undefined) {\r\n isRendered = this.config.rendered;\r\n }\r\n }\r\n\r\n /**\r\n * Checks children and sees if there is a change in rendering status. If a permission goes away, a component that\r\n * is currently rendered might need to be removed. Recursively move through the tree of children.\r\n */\r\n refreshChildren() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (this.config.children) {\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n if (isDevMode()) {\r\n console.debug(\"refreshChildren: \" + i);\r\n }\r\n\r\n let render = this.canRender(this.config.children[i]);\r\n\r\n let isRendered: boolean = false;\r\n if (this.config.children[i].rendered !== undefined) {\r\n isRendered = this.config.children[i].rendered;\r\n }\r\n\r\n if (render && !isRendered) {\r\n this.add(this.config.children[i], i);\r\n } else if (!render && isRendered) {\r\n this.remove(this.config.children[i], i);\r\n }\r\n }\r\n }\r\n\r\n // Recursively check children\r\n for (let component of this.children) {\r\n component.refreshChildren();\r\n }\r\n\r\n this.sortContainers();\r\n\r\n this.detectChanges();\r\n }\r\n\r\n /**\r\n * Using the sortOrder property of each component, detach each ViewRef from the container, and re-attach based\r\n * on the sortOrder.\r\n */\r\n sortContainers() {\r\n if (this.config.children === undefined || !this.initialized) {\r\n return;\r\n }\r\n\r\n // Sort the children. It doesn't matter that this list may contain children in multiple containers.\r\n let sortedChildren = this.config.children.sort((a: any, b: any) => {\r\n if (a.sortOrder < b.sortOrder) {\r\n return -1;\r\n } else if (a.sortOrder > b.sortOrder) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n for (let containerName of this.containerSet) {\r\n let container: ViewContainerRef = this.getContainer(containerName);\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < sortedChildren.length; i++) {\r\n if (!sortedChildren[i].id) {\r\n continue;\r\n } else if (sortedChildren[i].container !== containerName) {\r\n // Children is a list possibly spanning multiple containers. Skip if not on the current container.\r\n continue;\r\n }\r\n\r\n if (this.viewRefMap.get(sortedChildren[i].id)) {\r\n if (isDevMode()) {\r\n console.debug(\"sortChildren: i: \" + i + \", id: \" + sortedChildren[i].id + \", destroyed: \" + this.viewRefMap.get(sortedChildren[i].id).destroyed);\r\n }\r\n\r\n if (!this.viewRefMap.get(sortedChildren[i].id).destroyed) {\r\n container.insert(this.viewRefMap.get(sortedChildren[i].id));\r\n } else {\r\n this.viewRefMap.delete(sortedChildren[i].id);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove a component by id from its parent container.\r\n *\r\n * @param componentConfig\r\n * @param {number} index\r\n */\r\n remove(componentConfig: any, index: number) {\r\n if (!this.config.children || !this.config.children[index]) {\r\n console.warn(\"NavComponent: Child \" + index + \" does not exist on \" + this.config.id);\r\n return;\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.remove: \" + componentConfig.id);\r\n }\r\n if (componentConfig.children) {\r\n for (let i = 0; i < componentConfig.children.length; i++) {\r\n let renderedChild: NavComponent = this.getChild(componentConfig.children[i].id);\r\n if (renderedChild) {\r\n renderedChild.remove(componentConfig.children[i], i);\r\n }\r\n }\r\n }\r\n\r\n let container: ViewContainerRef;\r\n\r\n if (componentConfig.container) {\r\n container = this.getContainer(componentConfig.container);\r\n } else {\r\n container = this.getContainer();\r\n }\r\n if (this.viewRefMap.get(componentConfig.id)) {\r\n container.remove(container.indexOf(this.viewRefMap.get(componentConfig.id)));\r\n this.viewRefMap.delete(componentConfig.id);\r\n }\r\n componentConfig.rendered = false;\r\n this.config.children[index].rendered = false;\r\n\r\n this.removeChild(componentConfig.id);\r\n }\r\n\r\n removeById(id: any): void {\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.removeById: \" + id);\r\n }\r\n\r\n for (let i = 0; i < this.children.length; i++) {\r\n if (this.children[i].id == id) {\r\n this.remove(this.children[i], i);\r\n\r\n return;\r\n }\r\n }\r\n\r\n throw new Error(\"removeById: ID \" + id + \" not found.\");\r\n }\r\n\r\n /**\r\n * Checks to see if the component can be rendered based on user roles. A role can be any string, but there are hardcoded\r\n * roles NOT_AUTHC and AUTHC. If no roleName is specified, the component is always rendered. If the roleName is\r\n * NOT_AUTHC, the component will only be rendered if there is no authenticated user. If the roleName is AUTHC, the\r\n * component will be rendered if the user is authenticated. If the roleName is any string and matches a user's role,\r\n * then the component will be rendered.\r\n *\r\n * @param componentConfig\r\n * @returns {boolean}\r\n */\r\n canRender(componentConfig: any): boolean {\r\n let render: boolean = true;\r\n\r\n if (componentConfig.roleName) {\r\n render = false;\r\n let userRoles: RoleEntity[] = this.navigationService.getUserRoles().getValue();\r\n\r\n if (componentConfig.roleName === this.notAuthenticatedKey && !userRoles) {\r\n render = true;\r\n } else if (componentConfig.roleName === this.authenticatedKey && userRoles) {\r\n render = true;\r\n } else if (userRoles && userRoles.length > 0) {\r\n render = userRoles.some((role: RoleEntity) => {\r\n return role.RoleName === componentConfig.roleName;\r\n });\r\n }\r\n }\r\n\r\n return render;\r\n }\r\n\r\n getChild(id: string): NavComponent {\r\n for (let i = 0; i < this.children.length; i++) {\r\n if (this.children[i].id === id) {\r\n return this.children[i];\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n removeChild(id: string) {\r\n for (let i = 0; i < this.children.length; i++) {\r\n if (this.children[i].id === id) {\r\n this.children.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n getId(): string {\r\n return this.id;\r\n }\r\n\r\n /**\r\n * If no index is specified, add the component to the children. In all cases, see if the component can be rendered.\r\n * If so, call addComponent to handle the injection.\r\n *\r\n * @param componentConfig\r\n * @param index\r\n */\r\n add(componentConfig: any, index?: number) {\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.add: \" + index);\r\n }\r\n\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n if (index === undefined) {\r\n if (this.config.children) {\r\n index = this.config.children.length;\r\n } else {\r\n index = 0;\r\n this.config.children = [];\r\n }\r\n\r\n this.config.children.push(componentConfig);\r\n }\r\n\r\n if (this.canRender(componentConfig)) {\r\n this.addComponent(componentConfig, index);\r\n }\r\n }\r\n\r\n /**\r\n * Injects the component described by the configuration object in to the view and creates an instance of the component.\r\n * If no container is specified, inject in to the \"default\" container.\r\n *\r\n * @param componentConfig\r\n * @param index\r\n */\r\n addComponent(componentConfig: any, index: number) {\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n\r\n if (componentConfig.container === undefined) {\r\n componentConfig.container = \"default\";\r\n }\r\n let container: ViewContainerRef = this.getContainer(componentConfig.container);\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.addComponent: to: \" + componentConfig.container);\r\n }\r\n\r\n let componentRef = ComponentInjector.getComponentRef(this.resolver, container, componentConfig.type);\r\n let componentInstance = <NavComponent>componentRef.instance;\r\n\r\n this.config.children[index].rendered = true;\r\n componentConfig.rendered = true;\r\n\r\n let id: string = componentConfig.id;\r\n if (!id) {\r\n id = this.navigationService.getIdNavComponent();\r\n componentConfig.id = id;\r\n }\r\n\r\n componentInstance.setParent(this);\r\n (<NavComponent>componentInstance).setConfig(componentConfig);\r\n this.children.push(componentInstance);\r\n this.viewRefMap.set(componentConfig.id, componentRef.hostView);\r\n //this.navigationService.registerComponent(componentConfig.id, componentInstance);\r\n }\r\n\r\n insertAfter(id: string, componentConfig: any) {\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n\r\n let index: number = undefined;\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n if (this.config.children[i].id === id) {\r\n index = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (index <= this.config.children.length - 1) {\r\n componentConfig.sortOrder = index;\r\n for (let i = index + 1; i < this.config.children.length; i++) {\r\n this.config.children[i].sortOrder = this.config.children[i].sortOrder + 1;\r\n }\r\n this.config.children.splice(index, 0, componentConfig);\r\n } else {\r\n index = this.config.children.length;\r\n componentConfig.sortOrder = index;\r\n this.config.children.push(componentConfig);\r\n }\r\n\r\n if (this.canRender(componentConfig)) {\r\n this.addComponent(componentConfig, index);\r\n }\r\n\r\n this.sortContainers();\r\n }\r\n\r\n insertBefore(id: string, componentConfig: any) {\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n\r\n let index: number = undefined;\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n if (this.config.children[i].id === id) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index <= this.config.children.length - 1) {\r\n for (let i = index; i < this.config.children.length; i++) {\r\n this.config.children[i].sortOrder = this.config.children[i].sortOrder + 1;\r\n }\r\n componentConfig.sortOrder = index;\r\n this.config.children.splice(index, 0, componentConfig);\r\n } else {\r\n index = this.config.children.length;\r\n componentConfig.sortOrder = index;\r\n this.config.children.push(componentConfig);\r\n }\r\n\r\n if (this.canRender(componentConfig)) {\r\n this.addComponent(componentConfig, index);\r\n }\r\n\r\n this.sortContainers();\r\n }\r\n\r\n /**\r\n * A function to be extended by other classes. This class and something like a LiNavComponent don't have any containers\r\n * so components can't be added to them. In other cases, the UlNavComponent has a single container so it can always\r\n * return that container regardless of the containerName requested (should be \"default\"). Any component should have\r\n * a container that is the \"default\". For example, a header component might have a container for the left components\r\n * and a container for the right components. The left container can just be called \"default\" and the right container\r\n * could be called \"rightContainer\". If a child component doesn't specify a container, it will be added to the default.\r\n *\r\n * @param container\r\n * @returns {undefined}\r\n */\r\n getContainer(container?: string): ViewContainerRef {\r\n return undefined;\r\n }\r\n\r\n getComponent(id: string): NavComponent {\r\n return this.navigationService.getComponent(id);\r\n }\r\n\r\n getComponentByType(type: string): NavComponent {\r\n return this.navigationService.getComponentByType(type);\r\n }\r\n\r\n public setParent(parent: NavComponent) {\r\n this.parent = parent;\r\n }\r\n\r\n public getParent(): NavComponent {\r\n return this.parent;\r\n }\r\n\r\n public setTitle(title: string) {\r\n this.title = title;\r\n }\r\n\r\n setConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"setConfig: \" + this.initialized);\r\n }\r\n\r\n if (config) {\r\n if (config.rendered === undefined) {\r\n config.rendered = true;\r\n }\r\n\r\n this.config = config;\r\n if (this.initialized) {\r\n this.updateConfig(this.config);\r\n }\r\n } else {\r\n this.config = {\r\n rendered: true\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * A function to be extended by other classes. The children should call super.updateConfig(config). This sets the\r\n * common properties of the NavComponent.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (config.type) {\r\n this.type = config.type;\r\n }\r\n if (this.type) {\r\n if (typeof this.type === \"string\") {\r\n this.typeName = this.type;\r\n }\r\n // The componentType decorator was created for uglification. Use it!\r\n else if (this.type[\"componentType\"]) {\r\n this.typeName = this.type[\"componentType\"];\r\n }\r\n else {\r\n this.typeName = (<Type<any>>this.type).name;\r\n }\r\n }\r\n\r\n if (config.id) {\r\n this.id = config.id;\r\n } else if (!this.id) {\r\n this.id = this.navigationService.getIdNavComponent();\r\n }\r\n this.setId();\r\n\r\n if (this.isRoot) {\r\n this.navigationService.setRootComponent(this.id, this);\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.updateConfig: \" + this.id + \": \" + this.initialized);\r\n }\r\n\r\n if (config.authenticatedKey) {\r\n this.authenticatedKey = config.authenticatedKey;\r\n }\r\n if (config.notAuthenticatedKey) {\r\n this.notAuthenticatedKey = config.notAuthenticatedKey;\r\n }\r\n if (config.roleName) {\r\n this.roleName = config.roleName;\r\n }\r\n if (config.title) {\r\n this.title = config.title;\r\n }\r\n if (config.rootClass) {\r\n this.rootClass = config.rootClass;\r\n this.setRootClass();\r\n }\r\n if (config.children) {\r\n this.inputChildren = config.children;\r\n this.setChildren();\r\n }\r\n\r\n this.detectChanges();\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.updateConfig: \" + (this.constructor.name) + \", \" + this.id + \", \" + this.navigationService.getId());\r\n }\r\n }\r\n\r\n setId(): void {\r\n this.navigationService.registerComponent(this.id, this);\r\n this.renderer.setAttribute(this.elementRef.nativeElement, \"id\", this.id);\r\n }\r\n\r\n setRootClass(): void {\r\n if (this.rootClass) {\r\n let classes: string[] = this.rootClass.split(\" \");\r\n for (let rootClass of classes) {\r\n this.renderer.addClass(this.elementRef.nativeElement, rootClass);\r\n }\r\n }\r\n }\r\n\r\n setChildren(): void {\r\n if (this.initialized) {\r\n this.clear();\r\n }\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n this.config.children[i].sortOrder = i;\r\n this.add(this.config.children[i], i);\r\n }\r\n }\r\n\r\n detectChanges(): void {\r\n if (!(<ViewRef>this.changeDetectorRef).destroyed) {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"UlNavComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-ul\",\r\n template:\r\n `\r\n <ul [id]=\"id + '-ul'\" class=\"hci-ul {{ulClass}}\">\r\n <ng-container #containerRef></ng-container>\r\n </ul>\r\n `,\r\n styles: [\r\n `\r\n .hci-dic-ul-class {\r\n color: var(--grey-darkest);\r\n background-color: var(--bluewarm-lighter);\r\n }\r\n `\r\n ]\r\n }\r\n)\r\nexport class UlNavComponent extends NavComponent {\r\n\r\n @Input() ulClass: string = \"nav-container\";\r\n\r\n containerRef: ViewContainerRef;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(\r\n elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n @ViewChild(\"containerRef\", {\r\n read: ViewContainerRef,\r\n static: true\r\n }) set containerRefSetter(containerRef: ViewContainerRef) {\r\n this.containerRef = containerRef;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.containerRef) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n getContainer(container?: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n setConfig(config): void {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config): void {\r\n super.updateConfig(config);\r\n\r\n if (config.ulClass) {\r\n this.ulClass = config.ulClass;\r\n }\r\n }\r\n}\r\n","import {Component, Input, SimpleChanges} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subscription} from \"rxjs\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\n@ComponentType(\"BadgeComponent\")\r\n@Component({\r\n selector: \"hci-badge\",\r\n template: `\r\n <div class=\"hci-badge\" [class.spinner]=\"loading\">{{(loading) ? \"|\" : ((count > 0) ? count : \"\")}}</div>\r\n `\r\n})\r\nexport class BadgeComponent {\r\n\r\n public count: number;\r\n public loading: boolean = false;\r\n\r\n @Input() countSubject: BehaviorSubject<number>;\r\n @Input() countLoading: BehaviorSubject<boolean>;\r\n\r\n public countSubscription: Subscription;\r\n public countLoadingSubscription: Subscription;\r\n\r\n ngOnDestroy() {\r\n if (this.countSubscription) {\r\n this.countSubscription.unsubscribe();\r\n }\r\n if (this.countLoadingSubscription) {\r\n this.countLoadingSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"countSubject\"]) {\r\n if (this.countSubscription) {\r\n this.countSubscription.unsubscribe();\r\n }\r\n\r\n if (this.countSubject) {\r\n this.countSubscription = this.countSubject.subscribe((count: number) => {\r\n this.count = count;\r\n });\r\n }\r\n }\r\n if (changes[\"countLoading\"]) {\r\n if (this.countLoadingSubscription) {\r\n this.countLoadingSubscription.unsubscribe();\r\n }\r\n\r\n if (this.countLoading) {\r\n this.countLoadingSubscription = this.countLoading.subscribe((loading: boolean) => {\r\n this.loading = loading;\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import {Directive, ElementRef, Renderer2, HostListener, Input} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[riRippleEffect]'\r\n})\r\nexport class RIRippleEffectDirective {\r\n\r\n @Input()\r\n hostClass: string = 'ri-ripple-host';\r\n @Input()\r\n rippleClass: string = 'ri-ripple-effect-container';\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {\r\n const hostElement = this.el.nativeElement;\r\n this.renderer.addClass(hostElement, this.hostClass);\r\n }\r\n\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n const hostElement = this.el.nativeElement;\r\n\r\n const ripple = this.renderer.createElement('span');\r\n this.renderer.addClass(ripple, this.rippleClass);\r\n\r\n this.renderer.appendChild(hostElement, ripple);\r\n\r\n const styles = getComputedStyle(ripple);\r\n const animationDuration = styles.getPropertyValue(\"animation-duration\");\r\n const animationDurationInMs = Number(animationDuration.substr(0,animationDuration.length-1))*1000;\r\n const rect = hostElement.getBoundingClientRect();\r\n const left = event.pageX - rect.left;\r\n const top = event.pageY - rect.top;\r\n\r\n this.renderer.setStyle(ripple, 'left', `${left}px`);\r\n this.renderer.setStyle(ripple, 'top', `${top}px`);\r\n\r\n setTimeout(() => {\r\n this.renderer.removeChild(hostElement, ripple);\r\n }, animationDurationInMs); // Matching the jQuery animation duration\r\n }\r\n}\r\n","import {ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Input, Renderer2} from \"@angular/core\";\r\nimport {Subject} from \"rxjs\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"LiNavComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-li\",\r\n template:\r\n `\r\n <ng-container>\r\n <li [id]=\"id + '-li'\" class=\"hci-li {{liClass}}\" (click)=\"handleLiClick($event)\">\r\n <a *ngIf=\"!href && !route\" class=\"hci-li-a {{aClass}}\">\r\n <i *ngIf=\"!imgSrc && iClass && !iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && !iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <span riRippleEffect class=\"hci-li-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"!imgSrc && iClass && iRight\" class=\"hci-li-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n </a>\r\n\r\n <a *ngIf=\"href\" [href]=\"href\" [target]=\"target\" class=\"hci-li-a {{aClass}}\">\r\n <i *ngIf=\"!imgSrc && iClass && !iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && !iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <span class=\"hci-li-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"!imgSrc && iClass && iRight\" class=\"hci-li-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n </a>\r\n\r\n <a *ngIf=\"route\"\r\n routerLink=\"{{route}}\"\r\n routerLinkActive=\"active-link\"\r\n [queryParams]=\"queryParams\"\r\n queryParamsHandling=\"{{queryParamsHandling}}\"\r\n class=\"hci-li-a {{aClass}}\">\r\n <i *ngIf=\"!imgSrc && iClass && !iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && !iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\"/>\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <span class=\"{{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"!imgSrc && iClass && iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\"/>\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n </a>\r\n </li>\r\n\r\n <p class=\"{{showValueClass}}\" *ngIf=\"showValueFlag\">\r\n {{showValue}}\r\n </p>\r\n </ng-container>\r\n `,\r\n styles: [\r\n `\r\n .hci-dic-li-l {\r\n float: left;\r\n border: 0 var(--greywarm-meddark) !important;\r\n padding: 0;\r\n margin: 0;\r\n }\r\n\r\n .hci-dic-li-r {\r\n float: right;\r\n border: 0 var(--greywarm-meddark) !important;\r\n padding-right: 10px;\r\n margin: 0;\r\n }\r\n\r\n /* ------- BTN GRAD BLUE 1 STYLES DICTIONARY BUTTON SHOW ALL ------- */\r\n .hci-dic-span-1 {\r\n color: var(--white-lightest);\r\n border-radius: 5px;\r\n padding-right: 5px;\r\n padding-left: 2px !important;\r\n padding-top: 3px;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n }\r\n\r\n /* ------- BTN GRAD BLUE 1 STYLES DICTIONARY BUTTON SHOW ALL ACTIVE ------- */\r\n .hci-dic-span-3 {\r\n color: var(--white-lightest);\r\n border-radius: 5px;\r\n padding-right: 5px;\r\n padding-left: 2px !important;\r\n padding-top: 3px;\r\n background: linear-gradient(0deg, var(--bluewarm-meddark) 0%, var(--bluewarm-dark) 100%);\r\n }\r\n\r\n #filterReadOnly {\r\n float: left;\r\n }\r\n\r\n .hci-dic-show-value {\r\n padding-left: 10px;\r\n padding-top: 3px;\r\n font-size: 15px !important;\r\n float: left;\r\n }\r\n `\r\n ]\r\n }\r\n)\r\nexport class LiNavComponent extends NavComponent {\r\n\r\n @Input() liClass: string = \"nav-item\";\r\n @Input() href: string;\r\n @Input() target: string;\r\n @Input() route: string;\r\n @Input() queryParams: Object;\r\n @Input() queryParamsHandling: string = \"merge\";\r\n @Input() aClass: string = \"nav-link\";\r\n @Input() spanClass: string;\r\n @Input() iClass: string;\r\n @Input() imgSrc: string;\r\n @Input() altText: string;\r\n @Input() iText: string;\r\n @Input() iRight: boolean = false;\r\n @Input() badgeCount: Subject<number>;\r\n @Input() badgeLoading: Subject<boolean>;\r\n @Input() showValueFlag: boolean = false;\r\n @Input() showValue: string = \"\";\r\n @Input() showValueClass: string = \"\";\r\n\r\n @Input() liClick: Function = () => {\r\n }\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n handleLiClick(event: Event) {\r\n this.liClick(this, this.navigationService, event);\r\n }\r\n\r\n setConfig(config) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n if (!config) {\r\n return;\r\n }\r\n\r\n if (config.liClass) {\r\n this.liClass = config.liClass;\r\n }\r\n\r\n if (config.href) {\r\n this.href = config.href;\r\n }\r\n\r\n if (config.target) {\r\n this.target = config.target;\r\n }\r\n\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n\r\n if (config.queryParams) {\r\n this.queryParams = config.queryParams;\r\n }\r\n\r\n if (config.queryParamsHandling) {\r\n this.queryParamsHandling = config.queryParamsHandling;\r\n }\r\n\r\n if (config.aClass) {\r\n this.aClass = config.aClass;\r\n }\r\n\r\n if (config.spanClass) {\r\n this.spanClass = config.spanClass;\r\n }\r\n\r\n if (config.iClass) {\r\n if (this.iClass !== config.iClass) {\r\n this.iClass = undefined;\r\n this.detectChanges();\r\n }\r\n\r\n this.iClass = config.iClass;\r\n }\r\n\r\n if (config.imgSrc) {\r\n this.imgSrc = config.imgSrc;\r\n }\r\n\r\n if (config.altText) {\r\n this.altText = config.altText;\r\n }\r\n\r\n if (config.iText) {\r\n this.iText = config.iText;\r\n }\r\n\r\n if (config.iRight !== undefined) {\r\n this.iRight = config.iRight;\r\n }\r\n\r\n if (config.liClick) {\r\n this.liClick = config.liClick;\r\n }\r\n\r\n if (config.badgeCount) {\r\n this.badgeCount = config.badgeCount;\r\n }\r\n\r\n if (config.badgeLoading) {\r\n this.badgeLoading = config.badgeLoading;\r\n }\r\n\r\n if (config.showValueFlag) {\r\n this.showValueFlag = config.showValueFlag;\r\n }\r\n\r\n if (config.showValue) {\r\n this.showValue = config.showValue;\r\n }\r\n\r\n if (config.showValueClass) {\r\n this.showValueClass = config.showValueClass;\r\n }\r\n\r\n super.updateConfig(config);\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NgbDropdown} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"LiDdNavComponent\")\r\n@Component({\r\n selector: \"hci-li-dd\",\r\n template: `\r\n <li [id]=\"id + '-li'\" class=\"hci-li-dd-li dropdown {{liClass}}\" (click)=\"handleLiClick($event)\" ngbDropdown #dropdown=\"ngbDropdown\" [autoClose]=\"true\">\r\n <a id=\"li-dd-dropdown\" class=\"hci-li-dd-a dropdown-toggle {{aClass}}\" ngbDropdownToggle>\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-dd-i\">\r\n <span [class]=\"iClass\"></span>\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-dd-i\">\r\n <span [class]=\"iClass\"></span>\r\n </i>\r\n </a>\r\n <ul ngbDropdownMenu aria-labelledby=\"li-dd-dropdown\" class=\"hci-li-dd-ul dropdown-menu {{ulClass}}\" (click)=\"close()\">\r\n <ng-container #containerRef></ng-container>\r\n </ul>\r\n </li>\r\n `\r\n})\r\nexport class LiDdNavComponent extends NavComponent {\r\n\r\n @ViewChild(\"dropdown\", {static: true}) dropdown: NgbDropdown;\r\n\r\n @Input() liClass: string = null;\r\n @Input() href: string = null;\r\n @Input() aClass: string = \"nav-link\";\r\n @Input() spanClass: string = null;\r\n @Input() iClass: string = null;\r\n @Input() ulClass: string = \"dropdown-menu\";\r\n @Input() iRight: boolean = false;\r\n @Input() liClick: Function = (() => {});\r\n\r\n private containerRef: ViewContainerRef;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n @ViewChild(\"containerRef\", {read: ViewContainerRef, static: true}) set containerRefSetter(containerRef: ViewContainerRef) {\r\n this.containerRef = containerRef;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.containerRef) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n close(): void {\r\n this.dropdown.close();\r\n }\r\n\r\n getContainer(container: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n getDropdown(): NgbDropdown {\r\n return this.dropdown;\r\n }\r\n\r\n handleLiClick(event: Event) {\r\n this.liClick(this, this.navigationService, event);\r\n }\r\n\r\n setConfig(config) {\r\n this.rootClass = \"nav-item\";\r\n\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (config.liClass) {\r\n this.liClass = config.liClass;\r\n }\r\n if (config.href) {\r\n this.href = config.href;\r\n }\r\n if (config.aClass) {\r\n this.aClass = config.aClass;\r\n }\r\n if (config.spanClass) {\r\n this.spanClass = config.spanClass;\r\n }\r\n if (config.iClass) {\r\n if (this.iClass !== config.iClass) {\r\n this.iClass = undefined;\r\n this.detectChanges();\r\n }\r\n this.iClass = config.iClass;\r\n }\r\n if (config.iRight !== undefined) {\r\n this.iRight = config.iRight;\r\n }\r\n if (config.ulClass) {\r\n this.ulClass = config.ulClass;\r\n }\r\n if (config.liClick) {\r\n this.liClick = config.liClick;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"DivNavComponent\")\r\n@Component({\r\n selector: \"hci-div-nav\",\r\n template: `\r\n <div [id]=\"id + '-div'\" class=\"{{divClass}}\">\r\n <ng-container #containerRef></ng-container>\r\n </div>\r\n `\r\n})\r\nexport class DivNavComponent extends NavComponent {\r\n\r\n @Input() divClass: string = \"nav-container\";\r\n\r\n containerRef: ViewContainerRef;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n @ViewChild(\"containerRef\", {read: ViewContainerRef, static: true}) set containerRefSetter(containerRef: ViewContainerRef) {\r\n this.containerRef = containerRef;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.containerRef) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n getContainer(container?: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n setConfig(config): void {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config): void {\r\n super.updateConfig(config);\r\n\r\n if (config.divClass) {\r\n this.divClass = config.divClass;\r\n }\r\n }\r\n\r\n}\r\n","import {ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Input, Renderer2} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"BrandNavComponent\")\r\n@Component({\r\n selector: \"hci-brand\",\r\n template: `\r\n <div class=\"hci-brand\">\r\n <a *ngIf=\"!href && !route\" \r\n [id]=\"id + '-a'\" class=\"hci-brand-a {{aClass}}\">\r\n <img *ngIf=\"imgSrc && !imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n <span *ngIf=\"title\" class=\"hci-brand-span {{spanClass}}\">\r\n {{title}}\r\n </span>\r\n <img *ngIf=\"imgSrc && imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n </a>\r\n <a *ngIf=\"href\"\r\n [id]=\"id\" [href]=\"href\" class=\"hci-brand-a {{aClass}}\">\r\n <img *ngIf=\"imgSrc && !imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n <span *ngIf=\"title\" class=\"hci-brand-span {{spanClass}}\">\r\n {{title}}\r\n </span>\r\n <img *ngIf=\"imgSrc && imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n </a>\r\n <a *ngIf=\"route\"\r\n [id]=\"id\"\r\n routerLink=\"{{route}}\"\r\n routerLinkActive=\"active-link\"\r\n [queryParams]=\"queryParams\"\r\n queryParamsHandling=\"{{queryParamsHandling}}\"\r\n class=\"hci-brand-a {{aClass}}\">\r\n <img *ngIf=\"imgSrc && !imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n <span *ngIf=\"title\" class=\"hci-brand-span {{spanClass}}\">\r\n {{title}}\r\n </span>\r\n <img *ngIf=\"imgSrc && imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n </a>\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n .hci-brand img {\r\n height: 36px;\r\n }\r\n\r\n `],\r\n})\r\nexport class BrandNavComponent extends NavComponent {\r\n\r\n @Input() href: string;\r\n @Input() route: string;\r\n @Input() queryParams: Object;\r\n @Input() queryParamsHandling: string = \"merge\";\r\n @Input() aClass: string = \"navbar-brand me-0 me-md-2\";\r\n @Input() imgSrc: string;\r\n @Input() altText: string;\r\n @Input() spanClass: string = \"d-none d-md-flex\";\r\n @Input() imgRight: boolean = false;\r\n @Input() aClick: Function = (() => {});\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n handleAClick(event: Event) {\r\n this.aClick(this, this.navigationService, event);\r\n }\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (config.aClass) {\r\n this.aClass = config.aClass;\r\n }\r\n if (config.href) {\r\n this.href = config.href;\r\n }\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n if (config.queryParams) {\r\n this.queryParams = config.queryParams;\r\n }\r\n if (config.queryParamsHandling) {\r\n this.queryParamsHandling = config.queryParamsHandling;\r\n }\r\n if (config.rootClass) {\r\n this.rootClass = config.rootClass;\r\n }\r\n if (config.imgSrc) {\r\n this.imgSrc = config.imgSrc;\r\n }\r\n if (config.altText) {\r\n this.altText = config.altText;\r\n }\r\n if (config.imgRight !== undefined) {\r\n this.imgRight = config.imgRight;\r\n }\r\n if (config.spanClass) {\r\n this.spanClass = config.spanClass;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {LiNavComponent} from \"./li-nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"LiExpNavComponent\")\r\n@Component({\r\n selector: \"hci-li-exp\",\r\n template: `\r\n <div class=\"hci-li-exp {{rootClass}}\" (mouseover)=\"onMouseOver($event)\" (mouseout)=\"onMouseOut($event)\" [class.hover]=\"hover\">\r\n <li [id]=\"id + '-li'\" class=\"hci-li-exp-li {{liClass}}\" (click)=\"handleLiClick($event)\">\r\n <a *ngIf=\"!href && !route\" class=\"hci-li-exp-a {{aClass}}\">\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n </a>\r\n <a *ngIf=\"href\" [href]=\"href\" class=\"hci-li-exp-a {{aClass}}\">\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n </a>\r\n <a *ngIf=\"route\"\r\n routerLink=\"{{route}}\"\r\n routerLinkActive=\"active-link\"\r\n [queryParams]=\"queryParams\"\r\n queryParamsHandling=\"{{queryParamsHandling}}\"\r\n class=\"hci-li-exp-a {{aClass}}\">\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n </a>\r\n </li>\r\n <ul [id]=\"id\" class=\"hci-li-exp-ul {{ulClass}}\" [class.expanded]=\"expanded\" (click)=\"onUlClick($event)\">\r\n <ng-container #containerRef></ng-container>\r\n </ul>\r\n </div>\r\n `\r\n})\r\nexport class LiExpNavComponent extends LiNavComponent {\r\n\r\n @Input() liClass: string = \"nav-item header\";\r\n @Input() ulClass: string;\r\n @Input() hover: boolean = false;\r\n @Input() expandable: boolean = false;\r\n @Input() expanded: boolean = true;\r\n\r\n @ViewChild(\"containerRef\", { read: ViewContainerRef, static: true }) private containerRef: any;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n onMouseOver(event: MouseEvent) {\r\n if (this.hover) {\r\n this.expanded = true;\r\n }\r\n }\r\n\r\n onMouseOut(event: MouseEvent) {\r\n if (this.hover) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n onUlClick(event: MouseEvent) {\r\n if (this.hover && this.expanded) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n handleLiClick(event: MouseEvent) {\r\n if (!this.hover && this.expandable) {\r\n this.expanded = !this.expanded;\r\n } else if (this.hover && this.expanded) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n getContainer(container: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n setConfig(config) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (!config) {\r\n return;\r\n }\r\n\r\n if (config.liClass) {\r\n this.liClass = config.liClass;\r\n }\r\n if (config.ulClass) {\r\n this.ulClass = config.ulClass;\r\n }\r\n if (config.hover !== undefined) {\r\n this.hover = config.hover;\r\n }\r\n if (config.expandable !== undefined) {\r\n this.expandable = config.expandable;\r\n }\r\n if (this.expandable || this.hover) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, isDevMode, Renderer2, SimpleChange, SimpleChanges,\r\n TemplateRef, Type, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentInjector, ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n/**\r\n * <p>\r\n * This component may take a template defined in the parent and display it. Any information it wishes to use must be\r\n * passed with the config.\r\n * </p>\r\n * <p>\r\n * See demo/src/app/template/template.component.ts for an implementation example.\r\n * </p>\r\n *\r\n */\r\n@ComponentType(\"TemplateComponent\")\r\n@Component({\r\n selector: \"hci-template\",\r\n template: `\r\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"config\"></ng-container>\r\n <ng-container #viewContainer></ng-container>\r\n `\r\n})\r\nexport class TemplateComponent extends NavComponent {\r\n\r\n @Input() template: TemplateRef<any>;\r\n @Input() componentType: Type<any> | string;\r\n\r\n component: any;\r\n\r\n @ViewChild(\"viewContainer\", { read: ViewContainerRef, static: false }) private viewContainer: ViewContainerRef;\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n setConfig(config) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n if (!config) {\r\n return;\r\n }\r\n\r\n if (config.template) {\r\n this.template = config.template;\r\n }\r\n if (config.componentType) {\r\n // Only allow component if there is no template\r\n this.componentType = config.componentType;\r\n this.component = ComponentInjector.getComponent(this.resolver, this.viewContainer, this.componentType);\r\n }\r\n\r\n this.setComponentConfig();\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n setComponentConfig() {\r\n if (this.component && this.config) {\r\n let cfgKeys = Object.keys(this.config);\r\n if (isDevMode()) {\r\n console.debug(\"componentConfig: \" + JSON.stringify(cfgKeys));\r\n }\r\n for (let cfgKey of cfgKeys) {\r\n try {\r\n let changes = {};\r\n changes[cfgKey] = new SimpleChange(this.component[cfgKey], this.config[cfgKey], false);\r\n this.component.ngOnChanges(changes);\r\n } catch (e) {}\r\n }\r\n }\r\n }\r\n}\r\n","export class RowGroup {\r\n\r\n rgKey: string;\r\n rgRows: Object[];\r\n rgCount: number = 0;\r\n rgExpanded: boolean = false;\r\n rgPageMin: number;\r\n rgPageMax: number;\r\n\r\n constructor(rgKey: string, firstRow: Object, rgCount: number = 0) {\r\n this.rgKey = rgKey;\r\n this.rgRows = [firstRow];\r\n this.rgCount = rgCount;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n isDevMode,\r\n Optional,\r\n Output,\r\n Renderer2,\r\n TemplateRef,\r\n SimpleChanges\r\n} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subject} from \"rxjs\";\r\n\r\nimport {HciFilterDto, HciSortDto} from \"@huntsman-cancer-institute/hci-ng-grid-dto\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"../nav.component\";\r\nimport {NavigationService} from \"../../services/navigation.service\";\r\nimport {NavigationGlobalService} from \"../../services/navigation-global.service\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\n\r\n/**\r\n * The search list controller renders as a header to one or more search lists. Only one search list can be shown at a time.\r\n * The controller features the ability to handle filtering and sorting. Without the controller, the search list can exist,\r\n * but it can only handle paging internally.\r\n */\r\n@ComponentType(\"SearchListControllerComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-search-list-controller\",\r\n exportAs: \"searchListControllerComponent\",\r\n styles: [\r\n `\r\n select {\r\n padding: .25em;\r\n padding-right: 0em;\r\n outline-offset: -1px;\r\n border: 0;\r\n color: #8A9499;\r\n font-size: 0.8rem;\r\n background-color: white;\r\n }\r\n\r\n .closeable {\r\n }\r\n\r\n .search-box {\r\n border: none;\r\n border-right: 0.1px solid #5B6266;\r\n padding-left: .5rem !important;\r\n color: var(--grey-darkest);\r\n font-size: 0.8rem;\r\n }\r\n\r\n .search-options {\r\n /*width: 65vw;*/\r\n border-radius: 10px;\r\n }\r\n\r\n /* ------- BTN GRAD BLUE 1 STYLES ------- */\r\n .search-button:enabled {\r\n width: 30%;\r\n min-height: 2rem;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n margin: 0;\r\n color: var(--white-lightest);\r\n border: 1px solid var(--bluewarm-dark);\r\n }\r\n\r\n .search-button:hover {\r\n background: linear-gradient(0deg, var(--bluewarm-meddark) 0%, var(--bluewarm-dark) 100%);\r\n color: var(--white-lightest);\r\n border: 1px solid var(--bluewarm-darker);\r\n }\r\n\r\n .search-button:disabled {\r\n width: 30%;\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n border: 1px solid var(--bluewarm-dark);\r\n color: var(--white-lightest);\r\n }\r\n /* ------- BTN GRAD BLUE 1 STYLES ------- */\r\n\r\n .global-search {\r\n align-items: center;\r\n width: 100%;\r\n border-radius: 2px;\r\n border: 0.04em solid var(--greywarm-dark);\r\n }\r\n\r\n .tab-title-class {\r\n display: flex;\r\n height: 50px;\r\n background: lightgray;\r\n }\r\n\r\n .tab-pane {\r\n width: min-content !important;\r\n }\r\n\r\n .search-content-body {\r\n\r\n }\r\n\r\n .basic-search {\r\n\r\n }\r\n\r\n .advanced-search {\r\n\r\n }\r\n\r\n .search-options.expanded {\r\n height: fit-content;\r\n }\r\n\r\n .classification-header {\r\n\r\n }\r\n\r\n .button {\r\n\r\n }\r\n\r\n .alignBtn {\r\n\r\n }\r\n\r\n .advancedSearch-alignBtn {\r\n\r\n }\r\n\r\n .divider {\r\n\r\n }\r\n\r\n .advancedSearch-scroll {\r\n\r\n }\r\n\r\n .backButton .fa-angle-double-left {\r\n color: white;\r\n }\r\n\r\n .svg-inline--fas fa-angle-double-left {\r\n color: white;\r\n }\r\n\r\n .sort-item {\r\n display: flex;\r\n color: black;\r\n }\r\n\r\n .sort-icon {\r\n width: 1.5rem;\r\n }\r\n\r\n .sort-text:hover {\r\n cursor: pointer;\r\n }\r\n\r\n .hci-grey-darkest {\r\n color: var(--grey-darkest) !important;\r\n }\r\n\r\n .textarea-search-box {\r\n align-content: center;\r\n width: 100%;\r\n min-height: 30px;\r\n }\r\n\r\n .multiline-search-button {\r\n height: 100%;\r\n max-width: 3rem;\r\n min-width: 3rem;\r\n }\r\n\r\n .filter-sorting-panel {\r\n margin-top: 30px;\r\n }\r\n\r\n\r\n .disabled-button {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n border: 1px solid var(--bluewarm-dark);\r\n color: var(--white-lightest);\r\n }\r\n\r\n .nav-container {\r\n display: flex !important;\r\n flex-wrap: nowrap;\r\n }\r\n\r\n .no-user-select-text{\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n `\r\n ],\r\n template:\r\n `\r\n <div id=\"search-title\" class=\"d-flex flex-column\">\r\n <div *ngIf=\"showTitle\" class=\"d-flex ps-2 hci-grey-darkest\">\r\n <div *ngIf=\"showBackButton\" class=\"me-auto ms-1 backButton\">\r\n <button (click)=\"backButtonClicked()\" aria-label=\"hci-ng-sidebar-back-button\">\r\n <i class=\"fas fa-angle-double-left\"></i>\r\n </button>\r\n </div>\r\n {{title}}\r\n <div class=\"d-flex flex-row ms-auto\">\r\n <div *ngIf=\"buttonTemplate\"><ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container></div>\r\n <div class=\"ms-auto me-2\" (click)=\"toggleShowOptions($event)\">\r\n <i class=\"fas fa-filter\"></i>\r\n </div>\r\n </div>\r\n <div class=\"search-options\" [class.expanded]=\"showOptions\" [ngStyle]=\"{'width': (searchOptionsWidth !== '') ? searchOptionsWidth : 'auto'}\">\r\n <div class=\"flex-grow-1\">\r\n <div *ngIf=\"showToggleOptions\">\r\n <div class=\"card-header-component\">\r\n <div style=\"margin-left: auto\">\r\n <button class=\"card-header-button btn closeable\" (click)=\"toggleShowOptions($event)\" aria-label=\"hci-ng-sidebar-toggle-options\">\r\n <i class=\"fas fa-times\" card-header-text></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"disableLocalFiltering; else display\">\r\n <nav ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeTab\" class = \"nav-container\">\r\n <ng-container ngbNavItem [ngbNavItem]=\"1\" class=\"tab-title-class\"\r\n *ngIf=\"filterByAllowedFields.length > 0\">\r\n <a ngbNavLink class =\"flex-grow-1\">BASIC SEARCH</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search\">\r\n <div class=\"classification-header\">\r\n {{this.basicSearchHeader}}\r\n </div>\r\n <div class=\"row search-content-body\">\r\n <ng-container *ngFor=\"let filter of boundFilters; index as i\">\r\n <div class=\"col-6\">\r\n <div *ngIf=\"getFieldType(filter.field) === 'input' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input matInput [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\"/>\r\n </mat-form-field>\r\n </div>\r\n\r\n<!-- Double check if the textarea needed in Basic Search-->\r\n<!-- <div *ngIf=\"getFieldType(filter.field) === 'textarea' \">-->\r\n<!-- <mat-form-field appearance=\"none\">-->\r\n<!-- <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>-->\r\n<!-- <textarea [ngModel]=\"globalSearch\" class= \"search-box\" (keyup)=\"doGlobalSearch($event)\"-->\r\n<!-- style=\"background-color: #f2f2f2\"></textarea>-->\r\n<!-- </mat-form-field>-->\r\n<!-- </div>-->\r\n\r\n <div *ngIf=\"getFieldType(filter.field) === 'dropdown' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <mat-select [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\">\r\n\r\n <div\r\n *ngIf=\"fields[i] && fields[i].values && fields[i].values[0].display;else display_raw_value\">\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value.id\">{{value.display}}</mat-option>\r\n </div>\r\n <ng-template #display_raw_value>\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value\">{{value}}</mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(filter.field) === 'date' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\" matInput [matDatepicker]=\"myPicker\"\r\n placeholder=\"date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"myPicker\">\r\n <mat-icon fontSet=\"fa\" fontIcon=\"fa-calendar-alt fa-lg\"></mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker #myPicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"search-msg-holder\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n <button riRippleEffect class = \"ri-btn-cancel\" [ngClass]=\"{'ri-btn-cancel-dirty': this.changed}\" [disabled] =\"!this.changed\" (click)=\"setupFilters(false)\" aria-label=\"hci-ng-sidebar-clear-basic-search-filters\">\r\n CLEAR\r\n </button>\r\n <button riRippleEffect class=\"ri-btn-save\" [ngClass]=\"{ 'ri-btn-save-dirty': this.changed}\"\r\n [disabled]=\"!this.changed \" (click)=\"applyFilters($event)\" aria-label=\"hci-ng-sidebar-apply-basic-filter-search\">\r\n SEARCH\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container ngbNavItem [ngbNavItem]=\"2\" class=\"tab-title-class\"\r\n *ngIf=\"advancedSearchFields.length > 0\">\r\n <a ngbNavLink class =\"flex-grow-1\">ADVANCED SEARCH</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"advancedSearch-scroll\" id=\"advancedSearch-scroll-panel\">\r\n <div class=\"advancedSearch-panel\">\r\n <div *ngFor=\"let param of this.advancedSearch; index as j\">\r\n <div [ngClass]=\"{'advanced-search': !this.hasAdvancedSearchVerticalScrollbar, 'advanced-search-scrolled': this.hasAdvancedSearchVerticalScrollbar}\">\r\n <div class=\"advanced-search-classification-header\">\r\n {{param.header}}\r\n </div>\r\n <div class=\"row advanced-search-content-body\">\r\n <ng-container>\r\n <div *ngFor=\"let field of this.param.fields; index as k\">\r\n <div class=\"col-5\">\r\n <div *ngIf=\"getFieldType(field.field) === 'input' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(field.field)}}</mat-label>\r\n <input matInput [ngModel]=\"getFilterForField(field.field).value\"\r\n (ngModelChange)=\"setFilter($event, getFilterForField(field.field))\"\r\n (keydown)=\"applyAdvancedSearchFilters($event)\"/>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(field.field) === 'checkbox' \">\r\n <mat-checkbox class=\"checkboxes\"\r\n [(ngModel)]=\"getFilterForField(field.field).value\">\r\n {{getFieldDisplay(field.field)}}\r\n </mat-checkbox>\r\n </div>\r\n <div *ngIf=\"getFieldType(field.field) === 'dropdown' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(field.field)}}</mat-label>\r\n <mat-select [ngModel]=\"getFilterForField(field.field).value\"\r\n (ngModelChange)=\"setFilter($event, getFilterForField(field.field))\"\r\n (keydown)=\"applyAdvancedSearchFilters($event)\">\r\n <div *ngIf=\"this.field.valueURL;else display_raw_value\">\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of this.field.values\"\r\n [value]=\"value.id\">{{value.display}}</mat-option>\r\n </div>\r\n <ng-template #display_raw_value>\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of this.field.values\"\r\n [value]=\"value\">{{value}}</mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(field.field) === 'date' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(field.field)}}</mat-label>\r\n <input [ngModel]=\"getFilterForField(field.field).value\"\r\n (ngModelChange)=\"setFilter($event, getFilterForField(field.field))\"\r\n (keydown)=\"applyAdvancedSearchFilters($event)\" matInput\r\n [matDatepicker]=\"myPicker\" placeholder=\"date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"myPicker\">\r\n <mat-icon fontSet=\"fa\" fontIcon=\"fa-calendar-alt fa-lg\"></mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker #myPicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"search-msg-holder\">\r\n <div id=\"advanced-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n <button riRippleEffect class = \"ri-btn-cancel\" [ngClass]=\"{'ri-btn-cancel-dirty': this.changed}\" [disabled]=\"!this.changed\" (click)=\"setupFilters(false)\" aria-label=\"hci-ng-sidebar-clear-advance-search-filters\">\r\n CLEAR\r\n </button>\r\n <button riRippleEffect class = \"ri-btn-save\" [ngClass] =\"{'ri-btn-save-dirty': this.changed}\"\r\n [disabled]=\"!this.changed\" (click)=\"applyAdvancedSearchFilters($event)\" aria-label=\"hci-ng-sidebar-apply-advance-filter-search\">\r\n SEARCH\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n\r\n\r\n <ng-container ngbNavItem [ngbNavItem]=\"3\" class=\"tab-title-class\"\r\n *ngIf=\"searchSortingOptions.length>0\">\r\n <a ngbNavLink class =\"flex-grow-1\" >SORTING</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search\" >\r\n <div class=\"classification-header\">\r\n {{this.basicSearchHeader}}\r\n </div>\r\n <div class=\"row sidebar-filter\">\r\n <ng-container *ngFor=\"let searchSortItem of searchSortingOptions\">\r\n <div class=\"col-6 sort-item\" [ngStyle]=\"getCustomStyles('col-6 sort-item')\">\r\n <div class=\"sort-icon\" [ngStyle]=\"getCustomStyles('sort-icon')\">\r\n <div *ngIf=\"currentSearchSorting.value==searchSortItem.value && currentSearchSorting.isAsc\"\r\n [ngClass]=\"{'sort-arrow':true}\">\r\n <i class=\"fas fa-arrow-circle-up fa-lg\"></i>\r\n </div>\r\n <div *ngIf=\"currentSearchSorting.value==searchSortItem.value && !currentSearchSorting.isAsc\"\r\n [ngClass]=\"{'sort-arrow':true}\">\r\n <i class=\"fas fa-arrow-circle-down fa-lg\"></i>\r\n </div>\r\n </div>\r\n <div class=\"sort-text no-user-select-text\" (click)=\"onSearchSortClicked($event, searchSortItem)\" [ngStyle]=\"getCustomStyles('sort-text')\">\r\n {{searchSortItem.display}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"search-msg-holder\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n </ng-container>\r\n </nav>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n\r\n <ng-template #display>\r\n <nav ngbNav #nav1=\"ngbNav\" [(activeId)]=\"activeTab1\" [ngStyle]=\"getCustomStyles('nav')\">\r\n <ng-container ngbNavItem [ngbNavItem]=\"1\" class=\"tab-title-class\" *ngIf=\"filterByAllowedFields.length > 0\">\r\n <a ngbNavLink>FILTER</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search sidebar-filter filter-sorting-panel\" [ngStyle]=\"getCustomStyles('basic-search sidebar-filter filter-sorting-panel')\">\r\n <div class=\"row search-content-body\" [ngStyle]=\"getCustomStyles('row search-content-body')\">\r\n <ng-container *ngFor=\"let filter of boundFilters; index as i\">\r\n <div class=\"col-6\" [ngStyle]=\"getCustomStyles('col-6')\">\r\n <div *ngIf=\"getFieldType(filter.field) === 'input' \">\r\n <mat-form-field appearance=\"none\" [ngStyle]=\"getCustomStyles('mat-form-field')\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input matInput [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\"/>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(filter.field) === 'dropdown' \">\r\n <mat-form-field appearance=\"none\" [ngStyle]=\"getCustomStyles('mat-form-field')\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <mat-select [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\">\r\n\r\n <div\r\n *ngIf=\"fields[i] && fields[i].values && fields[i].values[0].display;else display_raw_value\">\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value.id\">{{value.display}}</mat-option>\r\n </div>\r\n <ng-template #display_raw_value>\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value\">{{value}}</mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(filter.field) === 'date' \">\r\n <mat-form-field appearance=\"none\" [ngStyle]=\"getCustomStyles('mat-form-field')\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\" matInput [matDatepicker]=\"myPicker\"\r\n placeholder=\"mm/dd/yyyy\">\r\n <mat-datepicker-toggle matSuffix [for]=\"myPicker\">\r\n <mat-icon fontSet=\"fas\" fontIcon=\"fa-calendar-alt fa-lg\"></mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker #myPicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"search-msg-holder\" [ngStyle]=\"getCustomStyles('search-msg-holder')\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width sidebar-filter\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n <ng-container *ngTemplateOutlet=\"buttonRowTemplate\">\r\n </ng-container>\r\n <button riRippleEffect class=\"ri-btn-cancel ri-btn-cancel-dirty\" (click)=\"setupFilters(true)\" aria-label=\"hci-ng-sidebar-filter-reset\">\r\n RESET\r\n </button>\r\n <button riRippleEffect class=\"ri-btn-save\" [ngClass]=\"{'ri-btn-save-dirty': this.changed}\"\r\n [disabled]=\"!this.changed \" (click)=\"applyFilters()\" aria-label=\"hci-ng-sidebar-filter-apply-filter\">\r\n FILTER\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container ngbNavItem [ngbNavItem]=\"2\" class=\"tab-title-class\" *ngIf=\"sortByAllowedFields.length > 0\">\r\n <a ngbNavLink>SORTING</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search sidebar-filter filter-sorting-panel\" [ngStyle]=\"getCustomStyles('basic-search sidebar-filter filter-sorting-panel')\">\r\n <div class=\"row search-content-body\">\r\n <ng-container *ngFor=\"let sortField of sortByAllowedFields\">\r\n <div class=\"col-6 sort-item\" [ngStyle]=\"getCustomStyles('col-6 sort-item')\">\r\n <div class=\"sort-icon\" [ngStyle]=\"getCustomStyles('sort-icon')\">\r\n <div *ngIf=\"isSort(sortField) && isSortAsc(sortField)\"\r\n [ngClass]=\"{'sort-arrow':isFirstSort(sortField)}\">\r\n <i class=\"fas fa-arrow-circle-up fa-lg\"></i>\r\n </div>\r\n <div *ngIf=\"isSort(sortField) && !isSortAsc(sortField)\"\r\n [ngClass]=\"{'sort-arrow':isFirstSort(sortField)}\">\r\n <i class=\"fas fa-arrow-circle-down fa-lg\"></i>\r\n </div>\r\n </div>\r\n <div class=\"sort-text\" (click)=\"setSort($event, sortField)\" [ngStyle]=\"getCustomStyles('sort-text')\">\r\n {{getFieldDisplay(sortField)}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"search-msg-holder\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width sidebar-filter\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n </ng-container>\r\n </nav>\r\n <div [ngbNavOutlet]=\"nav1\"></div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-1 global-search\" *ngIf=\"inputMultiline === false\">\r\n <input [disabled] = \"!quickSearchEnabled\" [ngModel]=\"globalSearch\" class=\"search-box\" (keyup)=\"doGlobalSearch($event)\" [placeholder]=\"globalSearchPlaceholder\" aria-label=\"quick-search-options\"/>\r\n <select *ngIf=\"showQuickSearchOptions\" [(ngModel)]=\"selectedSearchType\" (change)=\"selectSearchType()\"\r\n id=\"search-identifier\" style=\"width: 100%; border-radius: 0px; border-color: black; \">\r\n <option *ngFor=\"let searchType of searchTypeArray\"\r\n [value]=\"searchType\">\r\n {{searchType}}\r\n </option>\r\n </select>\r\n <button riRippleEffect class=\"pl-1 pr-1 search-button\" style=\"height: 100%\" [disabled] = \"!quickSearchEnabled\" [ngClass] = \"{'disabled-button':!quickSearchEnabled}\" (click)=\"searchButtonClicked()\" aria-label=\"hci-ng-sidebar-quick-search\">\r\n <i class=\"fas fa-search\"></i>\r\n </button>\r\n </div>\r\n <div class=\"d-flex mb-1 global-search\" *ngIf=\"inputMultiline === true\">\r\n <textarea aria-label=\"globalSearch\" [disabled] = \"!quickSearchEnabled\" [ngModel]=\"globalSearch\" class=\"search-box textarea-search-box\"\r\n [ngStyle]=\"getCustomStyles('search-box textarea-search-box')\" (keyup)=\"doGlobalSearch($event)\" [placeholder]=\"globalSearchPlaceholder\"></textarea>\r\n <select *ngIf=\"showQuickSearchOptions\" [(ngModel)]=\"selectedSearchType\" (change)=\"selectSearchType()\"\r\n id=\"search-identifier\" style=\"width: 100%; border-radius: 0px; border-color: black; \">\r\n <option *ngFor=\"let searchType of searchTypeArray\"\r\n [value]=\"searchType\">\r\n {{searchType}}\r\n </option>\r\n </select>\r\n <button riRippleEffect aria-label=\"searchButton\" class=\"ps-1 pe-1 search-button multiline-search-button\" [ngStyle]=\"getCustomStyles('search-button multiline-search-button')\" [disabled] = \"!quickSearchEnabled\" [ngClass] = \"{'disabled-button':!quickSearchEnabled}\" (click)=\"searchButtonClicked()\" aria-label=\"hci-ng-sidebar-quick-search\">\r\n <i class=\"fas fa-search\"></i>\r\n </button>\r\n </div>\r\n <div class=\"d-flex x-auto\" *ngIf=\"hasValidFilters()\">\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let filter of filters\">\r\n <ng-container *ngIf=\"filter.valid\">\r\n <div (click)=\"clearFilter(filter)\" class=\"d-flex pill\">\r\n <div class=\"me-2\">\r\n {{filter.field}}\r\n </div>\r\n <div class=\"close-icon\">\r\n <i class=\"fas fa-times-circle fa-xs\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"searchLists.length > 1\" class=\"d-flex x-hidden list-toggle\">\r\n <mat-button-toggle-group [ngModel]=\"selectedSearchList\" (ngModelChange)=\"setSelectedSearchList($event)\">\r\n <mat-button-toggle *ngFor=\"let searchList of searchLists\" mat-raised-button-toggle color=\"primary\"\r\n [value]=\"searchList\">\r\n {{searchList}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n `\r\n }\r\n)\r\nexport class SearchListControllerComponent extends NavComponent {\r\n @Input() showTitle: boolean = true;\r\n @Input() buttonTemplate: TemplateRef<any>;\r\n @Input() inputMultiline: boolean = false;\r\n @Input() searchOptionsWidth: string = \"\";\r\n @Input() fields: any[] = [];\r\n @Input() customStyles: any = {};\r\n @Input() basicSearch: any = {};\r\n @Input() advancedSearch: any = {};\r\n @Input() filterByAllowedFields: string[] = [];\r\n @Input() quickSearchFields: string[] = [];\r\n @Input() advancedSearchFields: string[] = [];\r\n @Input() sortByAllowedFields: string[] = [];\r\n @Input() sorts: HciSortDto[] = [];\r\n @Input() showQuickSearchOptions: boolean = false;\r\n @Input() showAdvancedSearchOptions: boolean = false;\r\n @Input() searchTypeArray: string[] = [];\r\n @Input() searchType: string = \"\";\r\n @Input() searchTypeSelected: string = \"\";\r\n @Input() basicSearchHeader: string = \"\";\r\n @Input() globalSearchPlaceholder: string = \"\";\r\n @Input() globalSearchValidator: any | string = \"\";\r\n @Input() buttonRowTemplate: TemplateRef<any> = null;\r\n @Input() searchSortingOptions: any[] = [];\r\n @Input() labelText: string = \"\";\r\n @Output() searchListChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n activeTab = 1;\r\n\r\n activeTab1 = 1;\r\n\r\n boundFilters: HciFilterDto[] = [];\r\n boundAdvancedSearchFilters: HciFilterDto[] = [];\r\n updatedAdvanceSearchFilters: HciFilterDto[] = [];\r\n\r\n filtersSubject: Subject<HciFilterDto[]> = new BehaviorSubject<HciFilterDto[]>([]);\r\n advancedSearchFiltersSubject: Subject<HciFilterDto[]> = new BehaviorSubject<HciFilterDto[]>([]);\r\n sortsSubject: Subject<HciSortDto[]> = new BehaviorSubject<HciSortDto[]>([]);\r\n\r\n globalSearch: string = \"\";\r\n\r\n showOptions: boolean = false;\r\n showBackButton: boolean = false;\r\n searchLists: string[] = [];\r\n selectedSearchList: string;\r\n selectedSearchListSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n searchStringSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n backButtonSubject: Subject<any> = new BehaviorSubject<any>(undefined);\r\n advancedSearchStringSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n selectedSearchType: string;\r\n selectedSearchTypeSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n performedSearchSubject: Subject<string> = new Subject<string>();\r\n performedBasicSearchSubject: Subject<string> = new Subject<string>();\r\n performedAdvancedSearchSubject: Subject<string> = new Subject<string>();\r\n disableLocalFiltering = false;\r\n advancedSearchAllowFilter = false;\r\n\r\n allowSearchSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n searchAllowedSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n allowToggleSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n toggleShowSubject$: Subject<boolean> = new BehaviorSubject<any>(undefined);\r\n cogWheelClickedSubject$: Subject<boolean> = new BehaviorSubject<any>(undefined);\r\n changed: boolean = false;\r\n allowSearch: boolean = true;\r\n allowToggle: boolean = true;\r\n showToggleOptions: boolean = true;\r\n\r\n quickSearchEnabled: boolean = true;\r\n\r\n searchSortingSelectionChangeSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n currentSearchSorting = {\"value\":undefined, \"display\":undefined, \"isAsc\":true};\r\n\r\n getCustomStyles(styles: string): any {\r\n let customStyleObject: any = \"\";\r\n for (let style of styles.split(\" \")) {\r\n let styleObject = this.customStyles[style];\r\n if (styleObject) {\r\n customStyleObject = Object.assign({}, customStyleObject, styleObject);\r\n }\r\n }\r\n\r\n return customStyleObject;\r\n }\r\n\r\n constructor(\r\n elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n @Optional() navigationService: NavigationService,\r\n private http: HttpClient,\r\n changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n if (!navigationService) {\r\n this.navigationService = new NavigationService(navigationGlobalService);\r\n }\r\n\r\n if (this.navigationService.getId() === undefined) {\r\n this.isRoot = true;\r\n }\r\n }\r\n\r\n /**\r\n * Set data only when the component has fully initialized and is rendered.\r\n */\r\n checkInitialized() {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.postInit();\r\n }\r\n }\r\n\r\n setButtonRowTemplate(buttonRowTemplate){\r\n this.buttonRowTemplate = buttonRowTemplate;\r\n }\r\n\r\n doGlobalSearch(event: KeyboardEvent): void {\r\n let searchString: string = ((<HTMLInputElement>event.target).value).trim();\r\n if (event.keyCode === 13) {\r\n // Send a message with search-text\r\n console.debug(\"In SearchListController enter was detected\");\r\n this.globalSearch = searchString;\r\n this.searchStringSubject.next(this.getSearchString(searchString));\r\n this.searchButtonClicked();\r\n return;\r\n }\r\n\r\n if (this.disableLocalFiltering === false) {\r\n if (this.globalSearch !== searchString) {\r\n if (!searchString || searchString.length === 0) {\r\n this.filtersSubject.next([]);\r\n } else {\r\n let filterField: string;\r\n for (let field of this.filterByAllowedFields) {\r\n filterField = (filterField) ? filterField + \" or \" + field : field;\r\n }\r\n this.filtersSubject.next([new HciFilterDto(filterField, \"string\", this.getSearchString(searchString), undefined, \"L\", true)]);\r\n }\r\n }\r\n }\r\n this.globalSearch = searchString;\r\n }\r\n\r\n searchButtonClicked() {\r\n\r\n // Validation Check: if invalid, do not search.\r\n if (this.globalSearchValidator && this.isInvalid()) {\r\n return;\r\n }\r\n\r\n this.subscriptions.add(this.allowSearchSubject$.subscribe(val => {\r\n if (val === \"allowSearch\") {\r\n this.allowSearch = true;\r\n } else {\r\n if (val === \"preventSearch\") {\r\n this.allowSearch = false;\r\n }\r\n }\r\n }));\r\n\r\n this.searchAllowedSubject$.next(this.allowSearch);\r\n\r\n if (this.allowSearch) {\r\n if (this.globalSearch) {\r\n this.searchStringSubject.next(this.getSearchString(this.globalSearch));\r\n if (this.globalSearch.length === 0) {\r\n this.filtersSubject.next([]);\r\n } else {\r\n let filterField: string;\r\n if (this.quickSearchFields.length > 0) {\r\n for (let field of this.quickSearchFields) {\r\n filterField = (filterField) ? filterField + \" or \" + field : field;\r\n }\r\n } else {\r\n for (let field of this.filterByAllowedFields) {\r\n filterField = (filterField) ? filterField + \" or \" + field : field;\r\n }\r\n\r\n }\r\n\r\n this.filtersSubject.next([new HciFilterDto(filterField, \"string\", this.getSearchString(this.globalSearch), undefined, \"L\", true)]);\r\n }\r\n }\r\n this.selectedSearchTypeSubject.next(this.selectedSearchType);\r\n this.performedSearchSubject.next(\"searchPerformed\");\r\n } else {\r\n this.filtersSubject.next([]);\r\n }\r\n }\r\n\r\n setSelectedSearchList(selectedSearchList: string): void {\r\n this.selectedSearchList = selectedSearchList;\r\n this.selectedSearchListSubject.next(this.selectedSearchList);\r\n this.searchListChange.emit(selectedSearchList);\r\n }\r\n\r\n selectSearchType() {\r\n console.debug(\"selectSearchType\");\r\n console.debug(this.selectedSearchType);\r\n this.selectedSearchTypeSubject.next(this.selectedSearchType);\r\n }\r\n\r\n addSearchList(title: string): void {\r\n if (isDevMode()) {\r\n console.debug(\"SearchListControllerComponent.addSearchList: \" + title);\r\n }\r\n\r\n if (title && this.searchLists.indexOf(title) === -1) {\r\n this.searchLists.push(title);\r\n }\r\n\r\n if (this.searchLists.length === 1) {\r\n this.selectedSearchList = title;\r\n this.selectedSearchListSubject.next(this.selectedSearchList);\r\n }\r\n }\r\n\r\n enableQuickSearch(enabled: boolean = true){\r\n this.quickSearchEnabled = enabled;\r\n }\r\n\r\n\r\n /**\r\n * Updates the config with options and re-fetches data.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfig\");\r\n }\r\n\r\n if (config) {\r\n this.config = Object.assign({}, this.config, config);\r\n\r\n if (config.filterByAllowedFields) {\r\n this.filterByAllowedFields = config.filterByAllowedFields;\r\n }\r\n if (config.quickSearchFields) {\r\n this.quickSearchFields = config.quickSearchFields;\r\n }\r\n if (config.advancedSearchFields) {\r\n this.advancedSearchFields = config.advancedSearchFields;\r\n }\r\n if (config.sortByAllowedFields) {\r\n this.sortByAllowedFields = config.sortByAllowedFields;\r\n }\r\n if (config.showQuickSearchOptions) {\r\n this.showQuickSearchOptions = config.showQuickSearchOptions;\r\n }\r\n if (config.inputMultiline) {\r\n this.inputMultiline = config.inputMultiline;\r\n }\r\n if (config.searchOptionsWidth) {\r\n this.searchOptionsWidth = config.searchOptionsWidth;\r\n }\r\n if (config.searchTypeArray) {\r\n this.searchTypeArray = config.searchTypeArray;\r\n if (config.searchType) {\r\n this.selectedSearchType = this.searchTypeArray[this.searchTypeArray.findIndex(x => x === config.searchType)];\r\n } else {\r\n this.selectedSearchType = this.searchTypeArray[0];\r\n }\r\n }\r\n if (config.disableLocalFiltering) {\r\n this.disableLocalFiltering = config.disableLocalFiltering;\r\n }\r\n if (config.advancedSearchAllowFilter) {\r\n this.advancedSearchAllowFilter = config.advancedSearchAllowFilter;\r\n }\r\n if (config.selectedSearchString) {\r\n this.globalSearch = config.selectedSearchString;\r\n }\r\n if (config.sorts) {\r\n this.sorts = config.sorts;\r\n }\r\n if (config.searchListChange) {\r\n this.searchListChange = config.searchListChange;\r\n }\r\n if (config.showTitle != null) {\r\n this.showTitle = config.showTitle;\r\n }\r\n if (config.buttonTemplate) {\r\n this.buttonTemplate = config.buttonTemplate;\r\n }\r\n if (config.showBackButton != null) {\r\n this.showBackButton = config.showBackButton;\r\n }\r\n if (config.basicSearchHeader != null) {\r\n this.basicSearchHeader = config.basicSearchHeader;\r\n }\r\n if (config.globalSearchPlaceholder) {\r\n this.globalSearchPlaceholder = config.globalSearchPlaceholder;\r\n }\r\n if (config.globalSearchValidator) {\r\n this.globalSearchValidator = config.globalSearchValidator;\r\n }\r\n if (config.customStyles) {\r\n this.customStyles = config.customStyles;\r\n }\r\n\r\n if (config.fields != null) {\r\n this.fields = config.fields;\r\n if (this.fields) {\r\n for (let field of this.fields) {\r\n if (field.valueURL && !field.values) {\r\n // We found a value URL for the field and will populate the values now\r\n this.getValuesFromURL(field);\r\n }\r\n }\r\n }\r\n }\r\n if (config.advancedSearch != null) {\r\n this.advancedSearch = config.advancedSearch;\r\n if (this.advancedSearch != null) {\r\n var i;\r\n for (i = 0; i < this.advancedSearch.length; i++) {\r\n var j;\r\n for (j = 0; j < this.advancedSearch[i].fields.length; j++) {\r\n if (this.advancedSearch[i].fields[j].valueURL && !this.advancedSearch[i].fields[j].values) {\r\n this.getValuesFromURL(this.advancedSearch[i].fields[j]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(config.searchSortingOptions){\r\n this.searchSortingOptions = config.searchSortingOptions;\r\n }\r\n\r\n if(config.initialSearchSortingSelection){\r\n this.currentSearchSorting = config.initialSearchSortingSelection;\r\n }\r\n }\r\n if (this.sortByAllowedFields.length > 0 && this.sorts.length === 0) {\r\n this.sorts.push(new HciSortDto(this.sortByAllowedFields[0]));\r\n }\r\n console.log('anotherSorting Field:', this.searchSortingOptions);\r\n this.setupFilters();\r\n super.updateConfig(config);\r\n }\r\n\r\n /**\r\n * Return the value of the objects after making a http call to the valueURL of the field\r\n *\r\n * @param {any} field\r\n * @returns {string[]}\r\n */\r\n getValuesFromURL(field: any) {\r\n let url: string;\r\n url = field.valueURL;\r\n this.http.get(url)\r\n .subscribe(\r\n data => {\r\n console.debug(\"values coming back from\" + field.valueURL);\r\n let values: any[] = JSON.parse(JSON.stringify(data));\r\n console.debug(values);\r\n if (values && values.length > 0) {\r\n field.values = values;\r\n //Sort the values of the drop down lists befinre\r\n values.sort((a, b) => {\r\n if (a.display < b.display) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n },\r\n error => {\r\n console.error(\"Error while getting values for URL\" + this.getFieldDisplay(field));\r\n console.error(error);\r\n }, () => {\r\n });\r\n }\r\n\r\n /**\r\n * Return the display property of the field if it exists, otherwise, try converting camel case to words.\r\n *\r\n * @param {string} fieldName\r\n * @returns {string}\r\n */\r\n\r\n\r\n getFieldDisplay(fieldName: string): string {\r\n //this.basicSearch.fields\r\n for (let field of this.fields) {\r\n if (field.field === fieldName) {\r\n return field.display;\r\n }\r\n }\r\n //advancedSearch field display\r\n let i;\r\n for (i = 0; i < this.advancedSearch.length; i++) {\r\n let j;\r\n for (j = 0; j < this.advancedSearch[i].fields.length; j++) {\r\n if (this.advancedSearch[i].fields[j].field === fieldName) {\r\n return this.advancedSearch[i].fields[j].display;\r\n }\r\n }\r\n }\r\n\r\n let display: string = fieldName.replace(/([A-Z])/g, \" $1\");\r\n return display.charAt(0).toUpperCase() + display.slice(1);\r\n }\r\n\r\n /**\r\n * Return the type property of the field if it exists. Defaults to input\r\n *\r\n * @param {string} fieldName\r\n * @returns {string}\r\n */\r\n getFieldType(fieldName: string): string {\r\n //this.basicSearch.fields\r\n for (let field of this.fields) {\r\n if (field.field === fieldName) {\r\n return field.type;\r\n }\r\n }\r\n\r\n let i;\r\n for (i = 0; i < this.advancedSearch.length; i++) {\r\n let j;\r\n for (j = 0; j < this.advancedSearch[i].fields.length; j++) {\r\n if (this.advancedSearch[i].fields[j].field === fieldName) {\r\n return this.advancedSearch[i].fields[j].type;\r\n }\r\n }\r\n }\r\n return \"input\";\r\n }\r\n\r\n /**\r\n * Create filters based upon available fields for filtering.\r\n */\r\n setupFilters(apply: boolean = false): void {\r\n this.boundFilters = [];\r\n this.boundAdvancedSearchFilters = [];\r\n\r\n for (let filterField of this.filterByAllowedFields) {\r\n this.boundFilters.push(new HciFilterDto(filterField, \"string\", undefined, undefined, \"L\", false));\r\n }\r\n for (let filterField of this.advancedSearchFields) {\r\n this.boundAdvancedSearchFilters.push(new HciFilterDto(filterField, \"string\", undefined, undefined, \"L\", false));\r\n }\r\n if (apply) {\r\n this.applyFilters();\r\n this.applyAdvancedSearchFilters();\r\n }\r\n this.changed = false;\r\n }\r\n\r\n\r\n /**\r\n * Return true if at least one filter is valid.\r\n *\r\n * @returns {boolean}\r\n */\r\n hasValidFilters(): boolean {\r\n for (let filter of this.boundFilters) {\r\n if (filter.valid) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the value of a filter.\r\n *\r\n * @param {string} value\r\n * @param {HciFilterDto} filter\r\n */\r\n setFilter(value: string, filter: HciFilterDto): void {\r\n filter.value = value;\r\n if (value) {\r\n this.changed = true;\r\n } else {\r\n this.changed = false;\r\n if (!this.disableLocalFiltering) {\r\n for (let fl of this.boundFilters) {\r\n if (fl.value) {\r\n this.changed = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set valid filters to valid and call data.\r\n */\r\n applyFilters(event?: KeyboardEvent): void {\r\n if (event && event.keyCode !== 13 && event.type && event.type !== \"click\") {\r\n return;\r\n }\r\n\r\n for (let filter of this.boundFilters) {\r\n if (filter.value instanceof Date) {\r\n filter.valid = true;\r\n } else if (filter.value && filter.value.length > 0) {\r\n filter.valid = true;\r\n } else {\r\n filter.valid = false;\r\n }\r\n }\r\n\r\n this.globalSearch = \"\";\r\n this.filtersSubject.next(this.boundFilters);\r\n //Setting a flag on buttonClick event.\r\n if (event && (event.keyCode === 13 || event.type === \"click\")) {\r\n this.performedBasicSearchSubject.next(\"basicSearchClicked\");\r\n }\r\n this.changed = true;\r\n }\r\n\r\n\r\n /**\r\n * Set valid advanced search filters to valid and call data.\r\n */\r\n\r\n applyAdvancedSearchFilters(event?: KeyboardEvent): void {\r\n this.updatedAdvanceSearchFilters = [];\r\n if (event && event.keyCode !== 13 && event.type && event.type !== \"click\") {\r\n return;\r\n }\r\n\r\n for (let filter of this.boundAdvancedSearchFilters) {\r\n filter.valid = (filter.value && filter.value.length > 0);\r\n }\r\n\r\n this.updatedAdvanceSearchFilters = this.boundAdvancedSearchFilters;\r\n\r\n this.globalSearch = \"\";\r\n if (this.advancedSearchAllowFilter) {\r\n this.filtersSubject.next(this.updatedAdvanceSearchFilters);\r\n } else {\r\n this.filtersSubject.next([]);\r\n }\r\n this.advancedSearchFiltersSubject.next(this.updatedAdvanceSearchFilters);\r\n\r\n if (event && (event.keyCode === 13 || event.type === \"click\")) {\r\n this.performedAdvancedSearchSubject.next(\"advancedSearchClicked\");\r\n }\r\n\r\n this.changed = true;\r\n }\r\n\r\n\r\n /**\r\n * Clear filter fields and make invalid.\r\n *\r\n * @param {HciFilterDto} filter\r\n */\r\n clearFilter(filter: HciFilterDto): void {\r\n for (let i = 0; i < this.boundFilters.length; i++) {\r\n if (this.boundFilters[i].field === filter.field) {\r\n this.boundFilters[i].setValue(undefined);\r\n this.boundFilters[i].setValid(false);\r\n break;\r\n }\r\n }\r\n\r\n this.filtersSubject.next(this.boundFilters);\r\n }\r\n\r\n onSearchSortClicked($event: MouseEvent, searchSortItem: any){\r\n if(this.currentSearchSorting.value === searchSortItem.value){\r\n this.currentSearchSorting.isAsc = !this.currentSearchSorting.isAsc;\r\n }else {\r\n this.currentSearchSorting = Object.assign({}, searchSortItem);\r\n this.currentSearchSorting.isAsc = true;\r\n }\r\n this.searchSortingSelectionChangeSubject$.next(this.currentSearchSorting);\r\n }\r\n\r\n /**\r\n * TODO: If sort in group, reset group data, not overall.\r\n *\r\n * @param {MouseEvent} event\r\n * @param {string} field\r\n */\r\n setSort(event: MouseEvent, field: string): void {\r\n if (this.sorts && this.sorts.length === 1 && this.sorts[0].field === field) {\r\n // Regular behavior\r\n } else if (this.sorts && this.sorts.length === 1 && !event.ctrlKey && this.sorts[0].field !== field) {\r\n this.sorts = [];\r\n } else if (!event.ctrlKey) {\r\n this.sorts = [];\r\n }\r\n\r\n if (this.sorts.length === 0) {\r\n this.sorts.push(new HciSortDto(field));\r\n } else {\r\n let exists: boolean = false;\r\n for (let sort of this.sorts) {\r\n if (sort.field === field) {\r\n sort.asc = !sort.asc;\r\n exists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!exists) {\r\n this.sorts.push(new HciSortDto(field));\r\n }\r\n }\r\n this.sortsSubject.next(this.sorts);\r\n }\r\n\r\n /**\r\n * Return true if the sort field is used.\r\n *\r\n * @param sortField\r\n * @returns {boolean}\r\n */\r\n isSort(sortField): boolean {\r\n for (let sort of this.sorts) {\r\n if (sort.field === sortField) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Return true if the sort field is ascending.\r\n *\r\n * @param sortField\r\n * @returns {boolean}\r\n */\r\n isSortAsc(sortField): boolean {\r\n for (let sort of this.sorts) {\r\n if (sort.field === sortField) {\r\n return sort.asc;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Return true if the field is the first sort field.\r\n *\r\n * @param sortField\r\n * @returns {boolean}\r\n */\r\n isFirstSort(sortField): boolean {\r\n if (!this.sorts || this.sorts.length === 0) {\r\n return false;\r\n } else {\r\n return this.sorts[0].field === sortField;\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the options popout.\r\n *\r\n * @param {MouseEvent} event\r\n */\r\n toggleShowOptions(event: MouseEvent): void {\r\n this.cogWheelClickedSubject$.next(true);\r\n this.subscriptions.add(this.allowToggleSubject$.subscribe(val => {\r\n if (val === \"allowToggle\") {\r\n this.allowToggle = true;\r\n this.showToggleOptions = true;\r\n } else {\r\n if (val === \"preventToggle\") {\r\n this.allowToggle = false;\r\n this.showToggleOptions = false;\r\n }\r\n }\r\n }));\r\n\r\n if (this.showOptions && this.elementRef.nativeElement.querySelector(\".search-options\").contains(event.target)\r\n && (!(this.elementRef.nativeElement.querySelector(\"button.card-header-button.btn.closeable\").contains(event.target)))) {\r\n return;\r\n }\r\n let title: HTMLElement = this.elementRef.nativeElement.querySelector(\"#search-title\");\r\n\r\n let options: HTMLElement = title.querySelector(\".search-options\");\r\n\r\n this.renderer.setStyle(options, \"left\", (title.offsetLeft + title.offsetWidth) + \"px\");\r\n if (!options.closest(\".dropdown-menu\")) {\r\n this.renderer.setStyle(options, \"top\", title.getBoundingClientRect().top + \"px\");\r\n }\r\n\r\n this.showOptions = !this.showOptions;\r\n }\r\n\r\n /**\r\n * This function would match a HciFilterDto by comparing a provided field-name\r\n */\r\n getFilterForField(fieldName: string) {\r\n return this.boundAdvancedSearchFilters.find(x => x.field === fieldName);\r\n }\r\n\r\n /**\r\n * Listener for back button\r\n */\r\n\r\n backButtonClicked() {\r\n this.backButtonSubject.next(this.backButtonSubject);\r\n }\r\n\r\n /**\r\n * Listen for document clicks.\r\n *\r\n * @param {MouseEvent} event\r\n * @param {HTMLElement} target\r\n */\r\n @HostListener(\"document:click\", [\"$event\", \"$event.target\"])\r\n documentClick(event: MouseEvent, target: HTMLElement) {\r\n if (this.allowToggle) {\r\n try {\r\n if (target.parentElement.getAttribute(\"class\").includes(\"closeable\")) {\r\n this.showOptions = false;\r\n }\r\n\r\n this.toggleShowSubject$.next(this.showOptions);\r\n } catch (error) {\r\n }\r\n }\r\n }\r\n\r\n isInvalid(): boolean {\r\n let invalid = false;\r\n if (this.globalSearchValidator) {\r\n let searchString = this.getSearchString(this.globalSearch);\r\n let globalSearchStrList: string[] = searchString.split(\",\");\r\n\r\n if (typeof this.globalSearchValidator === \"string\") {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if(!globalSearchStr.match(this.globalSearchValidator)) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n } else if (typeof this.globalSearchValidator === \"object\") {\r\n if (this.globalSearchValidator.required && globalSearchStrList.length === 0) {\r\n invalid = true;\r\n }\r\n if (this.globalSearchValidator.minRange && !isNaN(Number(this.globalSearchValidator.minRange))) {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if((!globalSearchStr && Number(this.globalSearchValidator.minRange) > 0)\r\n || (globalSearchStr && globalSearchStr.length < Number(this.globalSearchValidator.minRange))) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (this.globalSearchValidator.maxRange && !isNaN(Number(this.globalSearchValidator.maxRange))) {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if(globalSearchStr && globalSearchStr.length > Number(this.globalSearchValidator.maxRange)) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (this.globalSearchValidator.pattern) {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if (!globalSearchStr.match(this.globalSearchValidator.pattern)) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n invalid = true;\r\n }\r\n }\r\n return invalid;\r\n }\r\n\r\n getSearchString(searchString: string): string {\r\n searchString = searchString.replace(/\\n/g, \",\");\r\n if (searchString.length > 0) {\r\n let strList = searchString.split(\",\");\r\n searchString = \"\";\r\n for (let str of strList) {\r\n str = str.trim();\r\n searchString = searchString ? (str ? searchString + \",\" + str : searchString) : str;\r\n }\r\n }\r\n\r\n return searchString;\r\n }\r\n\r\n get hasAdvancedSearchVerticalScrollbar(): boolean {\r\n const divPanel = document.getElementById(\"advancedSearch-scroll-panel\");\r\n return divPanel.scrollHeight > divPanel.clientHeight;\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n isDevMode,\r\n Optional,\r\n Output,\r\n QueryList,\r\n Renderer2,\r\n SimpleChange,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Observable, of, Subject} from \"rxjs\";\r\nimport {delay, finalize} from \"rxjs/operators\";\r\nimport {NgbDropdown} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {HciDataDto, HciFilterDto, HciGridDto, HciGroupingDto, HciPagingDto, HciSortDto} from \"@huntsman-cancer-institute/hci-ng-grid-dto\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"../nav.component\";\r\nimport {NavigationService} from \"../../services/navigation.service\";\r\nimport {RowGroup} from \"./row-group\";\r\nimport {NavigationGlobalService} from \"../../services/navigation-global.service\";\r\nimport {SearchListControllerComponent} from \"./search-list-controller.component\";\r\n\r\n/**\r\n * Shows a list of items that can be grouped or not grouped. The data can be generated from an array, or from an external\r\n * data call using jpa-services.\r\n */\r\n@ComponentType(\"SearchListComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-search-list\",\r\n styles: [\r\n `\r\n .results-count {\r\n background-color: var(--bluewarm-lighter);\r\n color: var(--grey-darkest);\r\n font-size: 17.3px;\r\n padding-left: 18px;\r\n box-shadow: 0 1px 10px 3px var(--greycool-meddarker);\r\n z-index: 1;\r\n }\r\n\r\n .format-bottom-padding {\r\n padding-bottom: 25px;\r\n }\r\n\r\n :host::ng-deep div[id^='row-']:nth-child(even) {\r\n background-color: var(--white-medium) !important;\r\n }\r\n\r\n :host::ng-deep div[id^='row-']:nth-child(odd) {\r\n background-color: var(--white-lightest) !important;\r\n }\r\n\r\n :host::ng-deep div[id^='row-'] {\r\n border: 0 !important;\r\n }\r\n\r\n :host::ng-deep div.row-parent.active {\r\n color: white !important;\r\n background-color: var(--bluewarmvivid-medlight) !important;\r\n }\r\n\r\n :host::ng-deep .ri-sidebar-cell {\r\n background-color: transparent !important;\r\n }\r\n `\r\n ],\r\n template:\r\n `\r\n <div\r\n *ngIf=\"showResultsCount && searchResultMessage\"\r\n class=\"results-count\"\r\n [ngClass]=\"{ 'format-bottom-padding': this.searchResultMessage === '' }\"\r\n >\r\n {{ this.searchResultMessage }}\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!showResultsCount || !searchResultMessage\"\r\n class=\"results-count\"\r\n >\r\n </div>\r\n\r\n <div class=\"d-flex scrollable\">\r\n <div id=\"no-results-found\"></div>\r\n <div id=\"search-title\" class=\"d-flex flex-column\">\r\n <div class=\"d-flex ps-3\">\r\n </div>\r\n </div>\r\n <div id=\"result-list\">\r\n <div class=\"d-flex flex-column\" [class.y-hidden]=\"selectedRowGroup\">\r\n <hci-busy [busySubjects]=\"loadingSubjects\" parentSelector=\".scrollable\" [icon]=\"busyIcon\"></hci-busy>\r\n <!-- No grouping -->\r\n <ng-container *ngIf=\"!grouping.fields || grouping.fields.length === 0\">\r\n <ng-container *ngFor=\"let rowGroup of viewData\">\r\n <ng-container *ngIf=\"route\">\r\n <div #rowParent\r\n [id]=\"getRowId(rowGroup.rgRows[0])\"\r\n class=\"row-parent nav-item\"\r\n [routerLink]=\"route(rowGroup, rowGroup.rgRows[0])\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{changeDetection: rowRefresh}\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, rowGroup.rgRows[0])\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: rowGroup.rgRows[0]}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!route\">\r\n <div #rowParent\r\n [id]=\"getRowId(rowGroup.rgRows[0])\"\r\n class=\"row-parent nav-item\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, rowGroup.rgRows[0])\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: rowGroup.rgRows[0]}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouping with inline expansion -->\r\n <ng-container *ngIf=\"grouping.fields && grouping.fields.length > 0 && !selectedRowGroup\">\r\n <ng-container *ngFor=\"let rowGroup of viewData; let i = index;\">\r\n <div [id]=\"getRowGroupId(rowGroup)\"\r\n class=\"group-parent nav-item group {{groupClass}}\"\r\n (click)=\"onGroupClick($event, cmpt, rowGroup)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"groupTemplate; context: {rowGroup: rowGroup, cmpt: cmpt}\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"rowGroup.rgExpanded\">\r\n <div class=\"nav-container\" (click)=\"onGroupClick($event, cmpt, rowGroup)\">\r\n <ng-container *ngFor=\"let row of rowGroup.rgRows\">\r\n <ng-container *ngIf=\"route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n [routerLink]=\"route(rowGroup, row)\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{changeDetection: rowRefresh}\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouping with separate individual expansion -->\r\n <div *ngIf=\"grouping.fields && grouping.fields.length > 0 && selectedRowGroup\"\r\n #groupSelectedParent\r\n class=\"group-selected-parent flex-column {{groupClass}}\">\r\n <div [id]=\"getRowGroupId(selectedRowGroup)\"\r\n class=\"group-parent nav-item group active\"\r\n (click)=\"onGroupClick($event, cmpt, selectedRowGroup)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"groupSelectedTemplate; context: {rowGroup: selectedRowGroup, cmpt: cmpt}\"></ng-container>\r\n </div>\r\n\r\n <div #selectedRowGroupContainer id=\"selected-group-container\" class=\"d-flex flex-column y-auto\">\r\n <div id=\"innerRowGroupContainer\" class=\"d-flex flex-column\">\r\n <ng-container *ngFor=\"let row of selectedRowGroup.rgRows\">\r\n <ng-container *ngIf=\"route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n [routerLink]=\"route(rowGroup, row)\"\r\n routerLinkActive=\"active\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Paging footer -->\r\n <div *ngIf=\"paging.pageSize > 0\" class=\"d-flex flex-shrink-0 paging-footer justify-content-between ps-3 pe-3\"\r\n style=\"min-height: 1rem; align-items: center;\">\r\n <ng-container *ngIf=\"!selectedRowGroup\">\r\n <div (click)=\"doPageFirst()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i\r\n class=\"fas fa-fast-backward fa-xs\"></i></div>\r\n <div (click)=\"doPagePrevious()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i\r\n class=\"fas fa-backward fa-xs\"></i></div>\r\n <div style=\"font-size: 0.8rem;\">{{paging.page + 1}} of {{paging.numPages}}</div>\r\n <div (click)=\"doPageNext()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\">\r\n <i\r\n class=\"fas fa-forward fa-xs\"></i></div>\r\n <div (click)=\"doPageLast()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\">\r\n <i\r\n class=\"fas fa-fast-forward fa-xs\"></i></div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Default template for a group -->\r\n <ng-template #defaultGroupTemplate let-rowGroup=\"rowGroup\">\r\n <div class=\"d-flex flex-grow-1 ps-2\" style=\"align-items: center;\">\r\n <div class=\"font-weight-bold me-auto\">{{getGroupDisplay(rowGroup)}}</div>\r\n <ng-container class=\"d-flex me-1\" style=\"align-items: center;\">\r\n <div *ngIf=\"rowGroup.rgExpanded === true; else plusTemplate\">\r\n <i class=\"fas fa-minus fa-sm me-1\"></i>\r\n </div>\r\n <ng-template #plusTemplate>\r\n <div>\r\n <i class=\"fas fa-plus fa-sm me-1\"></i>\r\n </div>\r\n </ng-template>\r\n ({{rowGroup.rgCount}})\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Default template for an individual selected group -->\r\n <ng-template #defaultGroupSelectedTemplate let-rowGroup=\"rowGroup\">\r\n <div class=\"d-flex flex-grow-1 ps-2\" style=\"align-items: center;\">\r\n <div class=\"me-3\">\r\n <i class=\"fas fa-level-up-alt\" data-fa-transform=\"flip-h\"></i>\r\n </div>\r\n <div class=\"font-weight-bold me-auto\">{{getGroupDisplay(rowGroup)}}</div>\r\n </div>\r\n </ng-template>\r\n `\r\n }\r\n)\r\nexport class SearchListComponent extends NavComponent {\r\n\r\n searchResultMessage = \"\";\r\n\r\n // The data that is actually rendered.\r\n viewData: RowGroup[];\r\n\r\n // A reference to the search list controller if applicable.\r\n @Input() controller: SearchListControllerComponent;\r\n\r\n // An array of data.\r\n @Input(\"data\") boundData: Object[];\r\n\r\n // A subject that represents an array of data.\r\n @Input(\"dataSubject\") dataSubject: BehaviorSubject<Object[]>;\r\n\r\n // A function which takes in a HciGridDto and returns a HciDataDto which wraps an array of data.\r\n @Input(\"dataCall\") externalDataCall: (dto: HciGridDto) => Observable<HciDataDto>;\r\n\r\n // An array of subjects with booleans to control the hci-busy overlaying the search-list.\r\n @Input() loadingSubjects: Subject<boolean>[];\r\n\r\n // An array of booleans to control the hci-busy overlaying the search-list.\r\n @Input() loading: boolean[] = [false];\r\n\r\n // If clicking a row changes a route, this function specifies the route to use.\r\n @Input() route: (rowGroup: any, row: any) => any[];\r\n\r\n // Expand the selected row group as its own screen, or show rows under selected row groups in the same view.\r\n @Input() inlineExpand: boolean = false;\r\n\r\n // Without any other metadata for what a row is, provide the field to be used for the id.\r\n // This is actually the field that has the (defined) rowId -- whatever it is under different\r\n // structures: idPatient, idMedicalEvent etc\r\n @Input() rowId: any;\r\n\r\n // Css class applied to the row group parent.\r\n @Input() groupClass: string = \"\";\r\n\r\n // Css class applied to the row parent.\r\n @Input() rowClass: string = \"\";\r\n\r\n // A template for how to display row group info if using the default template. e.g. \"lastName, firstName\" field names get replaced with values.\r\n @Input() groupDisplay: string;\r\n\r\n // TODO: Reimplement\r\n @Input() closeOthers: boolean = true;\r\n\r\n // The list of fields to group by.\r\n @Input() groupingFields: string[] = [];\r\n\r\n // delimiter for getGroupDisplay\r\n @Input() delimiter: string = \", \";\r\n\r\n // TODO: Reimplement if we want users to be able to control grouping.\r\n @Input() groupByAllowedFields: string[] = [];\r\n\r\n // The page size of row groups or rows if no grouping.\r\n @Input() pageSize: number;\r\n\r\n // The page size of rows in a selected group.\r\n @Input() groupPageSize: number = 50;\r\n\r\n // The number of pages of rows to cache internally before an external call is made.\r\n @Input() groupCacheNumPages: number;\r\n\r\n // A reference to a parent dropdown if applicable.\r\n @Input() dropdown: NgbDropdown;\r\n\r\n //Which icon to use for the busy spinner\r\n @Input() busyIcon: string = \"hci fa-core fa-spin\";\r\n\r\n @Input() showResultsCount: boolean = false;\r\n\r\n // If no onGroupClick function is provided, this is used. The overriding function should still call this.\r\n defaultGroupClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup) => void = (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup) => {\r\n cmpt.setGroupExpanded(event, rowGroup);\r\n\r\n this.groupClick.emit({\r\n event: event,\r\n rowGroup: rowGroup\r\n });\r\n };\r\n\r\n @Input() onGroupClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup) => void;\r\n\r\n // If no onRowClick function is provided, this is used. The overriding function should still call this.\r\n defaultRowClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup, row: any) => void = (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup, row: any) => {\r\n if (this.dropdown) {\r\n this.dropdown.close();\r\n }\r\n\r\n this.selectedRow = row;\r\n\r\n this.rowClick.emit({\r\n event: event,\r\n row: row,\r\n rowGroup: rowGroup\r\n });\r\n\r\n event.stopPropagation();\r\n };\r\n @Input() onRowClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup, row: any) => void;\r\n\r\n @Input() groupTemplate: TemplateRef<any>;\r\n @Input() groupSelectedTemplate: TemplateRef<any>;\r\n @Input() itemTemplate: TemplateRef<any>;\r\n\r\n @Input() onGroupClose: Function;\r\n\r\n @Output() groupClick: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() rowClick: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() dataChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @ViewChild(\"defaultGroupTemplate\", {read: TemplateRef, static: true}) defaultGroupTemplate: TemplateRef<any>;\r\n @ViewChild(\"defaultGroupSelectedTemplate\", {\r\n read: TemplateRef,\r\n static: true\r\n }) defaultGroupSelectedTemplate: TemplateRef<any>;\r\n\r\n selectedRow: any;\r\n selectedRowGroup: RowGroup;\r\n selectedRowGroupContainer: HTMLElement;\r\n innerRowGroupContainer: HTMLElement;\r\n\r\n // Grid DTO info needed to build external data requests.\r\n sorts: HciSortDto[] = [];\r\n filters: HciFilterDto[] = [];\r\n paging: HciPagingDto = new HciPagingDto(0, -1);\r\n grouping: HciGroupingDto = new HciGroupingDto([]);\r\n\r\n //globalRowGroupMap: Map<string, number> = new Map<string, number>();\r\n groupedDataSet = [];\r\n\r\n pagingSubject: Subject<HciPagingDto> = new BehaviorSubject<HciPagingDto>(this.paging);\r\n\r\n // A dummy number that increments based on selection changes. Forces routerLinkActive to recheck.\r\n rowRefresh: number = 0;\r\n\r\n busy: boolean = false;\r\n\r\n lastScrollTop: number = -1;\r\n lastScrollPosition: number = 1;\r\n setScrollTop: boolean = false;\r\n\r\n cmpt: SearchListComponent = this;\r\n\r\n lastEvent: any;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n @Optional() navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n if (!navigationService) {\r\n this.navigationService = new NavigationService(navigationGlobalService);\r\n }\r\n\r\n if (this.navigationService.getId() === undefined) {\r\n this.isRoot = true;\r\n this.setConfig({});\r\n }\r\n }\r\n\r\n /**\r\n * Return the id for the row group based upon the group key or if undefined, the first row's id. e.g. \"row-group-bob-smith\"\r\n *\r\n * @param {RowGroup} rowGroup\r\n * @returns {string}\r\n */\r\n getRowGroupId(rowGroup: RowGroup): string {\r\n if (rowGroup.rgKey) {\r\n return \"row-group-\" + rowGroup.rgKey;\r\n } else {\r\n let rowId: string = this.getRowId(rowGroup.rgRows[0]);\r\n return rowId.replace(\"row-\", \"row-group-\");\r\n }\r\n }\r\n\r\n /**\r\n * Return the row id. e.g. \"row-1\".\r\n *\r\n * @param row\r\n * @returns {string}\r\n */\r\n getRowId(row: any): string {\r\n if (this.rowId) {\r\n return \"row-\" + <string><any>row[this.rowId];\r\n } else {\r\n return \"row-undefined\";\r\n }\r\n }\r\n\r\n /**\r\n * On init, listen for loading subjects and listen for page changes.\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].subscribe((busy: boolean) => {\r\n this.busy = busy;\r\n });\r\n }\r\n\r\n this.pagingSubject.subscribe((paging: HciPagingDto) => {\r\n this.paging = paging;\r\n this.setData();\r\n });\r\n }\r\n\r\n /**\r\n * Called when inputs change.\r\n *\r\n * @param {SimpleChanges} changes\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n super.ngOnChanges(changes);\r\n if (changes[\"groupingFields\"]) {\r\n let change: SimpleChange = <SimpleChange>changes[\"groupingFields\"];\r\n if (change.currentValue) {\r\n this.grouping.setFields(change.currentValue);\r\n } else {\r\n this.grouping.setFields([]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set data only when the component has fully initialized and is rendered.\r\n */\r\n checkInitialized() {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.postInit();\r\n\r\n if (this.dataSubject) {\r\n //May as well make it spin while processing, as well as loading. Otherwise it looks frozen\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(true);\r\n }\r\n\r\n this.dataSubject\r\n .pipe(delay(0))\r\n .subscribe((data: Object[]) => {\r\n this.boundData = data;\r\n this.setResultMessage(this.boundData);\r\n this.setData();\r\n\r\n //Now done loading\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(false);\r\n }\r\n });\r\n } else {\r\n this.setData();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Upon new rowParent being set, add any classes if rowClass is defined.\r\n *\r\n * @param {QueryList<ElementRef>} rowParents\r\n */\r\n @ViewChildren(\"rowParent\", {read: ElementRef}) set rowParents(rowParents: QueryList<ElementRef>) {\r\n if (rowParents && this.rowClass) {\r\n rowParents.forEach((e: ElementRef) => {\r\n let classes: string[] = this.rowClass.split(\" \");\r\n for (let className of classes) {\r\n this.renderer.addClass(e.nativeElement, className);\r\n }\r\n });\r\n this.rowRefresh += 1;\r\n }\r\n }\r\n\r\n postInit(): void {\r\n if (isDevMode()) {\r\n console.debug(\"SearchListComponent.postInit: \" + this.id);\r\n }\r\n\r\n if (this.getParent()) {\r\n this.controller = <SearchListControllerComponent>this.getParent().getComponentByType(\"SearchListControllerComponent\");\r\n }\r\n\r\n if (this.controller) {\r\n if (isDevMode()) {\r\n console.debug(\"SearchListComponent: using controller\");\r\n }\r\n\r\n this.controller.addSearchList(this.title);\r\n\r\n this.controller.filtersSubject.subscribe((filters: HciFilterDto[]) => {\r\n this.filters = filters;\r\n this.setData();\r\n this.resetPaging();\r\n });\r\n\r\n this.controller.sortsSubject.subscribe((sorts: HciSortDto[]) => {\r\n this.sorts = sorts;\r\n this.setData();\r\n });\r\n\r\n this.controller.selectedSearchListSubject.subscribe((title: string) => {\r\n if (isDevMode()) {\r\n console.debug(\"selectedSearchListSubject.subscribe: \" + this.title + \", \" + title);\r\n }\r\n\r\n let visible: boolean = true;\r\n\r\n if (this.title && title && this.title !== title) {\r\n visible = false;\r\n }\r\n\r\n if (visible) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"flex\");\r\n } else {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"none\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This function would reset paging and fires\r\n */\r\n resetPaging() {\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n\r\n /**\r\n * Updates the config with options and re-fetches data.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfig\");\r\n }\r\n\r\n if (config) {\r\n this.config = Object.assign({}, this.config, config);\r\n\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n if (config.groupByAllowedFields) {\r\n this.groupByAllowedFields = config.groupByAllowedFields;\r\n }\r\n if (config.sorts) {\r\n this.sorts = config.sorts;\r\n }\r\n if (config.groupingFields) {\r\n this.groupingFields = config.groupingFields;\r\n this.grouping.setFields(config.groupingFields);\r\n }\r\n if (config.pageSize) {\r\n this.pageSize = config.pageSize;\r\n this.paging.setPageSize(config.pageSize);\r\n }\r\n if (config.groupDisplay) {\r\n this.groupDisplay = config.groupDisplay;\r\n }\r\n if (config.delimiter) {\r\n this.delimiter = config.delimiter;\r\n }\r\n if (config.closeOthers !== undefined) {\r\n this.closeOthers = config.closeOthers;\r\n }\r\n if (config.groupTemplate) {\r\n this.groupTemplate = config.groupTemplate;\r\n this.groupSelectedTemplate = config.groupTemplate;\r\n }\r\n if (config.groupSelectedTemplate) {\r\n this.groupSelectedTemplate = config.groupSelectedTemplate;\r\n }\r\n if (config.itemTemplate) {\r\n this.itemTemplate = config.itemTemplate;\r\n }\r\n if (config.data) {\r\n this.boundData = config.data;\r\n this.setResultMessage(this.boundData);\r\n }\r\n if (config.dataSubject) {\r\n this.dataSubject = config.dataSubject;\r\n }\r\n if (config.dataCall) {\r\n this.externalDataCall = config.dataCall;\r\n }\r\n if (config.onGroupClick) {\r\n this.onGroupClick = config.onGroupClick;\r\n }\r\n if (config.inlineExpand !== undefined) {\r\n this.inlineExpand = config.inlineExpand;\r\n }\r\n if (config.groupClass) {\r\n this.groupClass = config.groupClass;\r\n }\r\n if (config.rowClass) {\r\n this.rowClass = config.rowClass;\r\n }\r\n if (config.rowId) {\r\n this.rowId = config.rowId;\r\n }\r\n if (config.onGroupClick) {\r\n this.onGroupClick = config.onGroupClick;\r\n }\r\n if (config.onRowClick) {\r\n this.onRowClick = config.onRowClick;\r\n }\r\n if (config.loadingSubjects) {\r\n this.loadingSubjects = config.loadingSubjects;\r\n }\r\n if (config.groupPageSize) {\r\n this.groupPageSize = config.groupPageSize;\r\n }\r\n if (config.groupCacheNumPages) {\r\n if (config.groupCacheNumPages >= 2) {\r\n this.groupCacheNumPages = config.groupCacheNumPages;\r\n } else {\r\n console.warn(\"groupCacheNumPages must be 2 or more.\");\r\n }\r\n }\r\n if (config.onGroupClose) {\r\n this.onGroupClose = config.onGroupClose;\r\n }\r\n if (config.busyIcon) {\r\n this.busyIcon = config.busyIcon;\r\n }\r\n\r\n if (config.showResultsCount) {\r\n this.showResultsCount = config.showResultsCount;\r\n }\r\n }\r\n\r\n if (!this.onGroupClick) {\r\n this.onGroupClick = this.defaultGroupClick;\r\n }\r\n if (!this.onRowClick) {\r\n this.onRowClick = this.defaultRowClick;\r\n }\r\n\r\n if (!this.itemTemplate) {\r\n console.warn(\"SearchListComponent: An itemTemplate must be provided!\");\r\n }\r\n\r\n if (!this.groupTemplate) {\r\n this.groupTemplate = this.defaultGroupTemplate;\r\n }\r\n if (!this.groupSelectedTemplate) {\r\n this.groupSelectedTemplate = this.defaultGroupSelectedTemplate;\r\n }\r\n\r\n if (this.externalDataCall) {\r\n this.loadingSubjects = [new BehaviorSubject<boolean>(false)];\r\n }\r\n\r\n\r\n super.updateConfig(config);\r\n\r\n this.setData();\r\n }\r\n\r\n /**\r\n * Generates the data if an array, calls the data if external call.\r\n */\r\n setData(data?: Object[]): void {\r\n if (isDevMode()) {\r\n console.debug(\"setData\");\r\n }\r\n\r\n if (data) {\r\n this.boundData = data;\r\n this.setResultMessage(this.boundData);\r\n }\r\n\r\n this.selectedRowGroup = undefined;\r\n this.selectedRowGroupContainer = undefined;\r\n\r\n if (this.externalDataCall) {\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n\r\n this.externalDataCall(new HciGridDto(this.filters, this.sorts, this.paging, new HciGroupingDto(this.grouping.fields, this.grouping.fields && this.grouping.fields.length > 0)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.generateData(externalData);\r\n });\r\n }\r\n } else {\r\n this.generateData();\r\n }\r\n }\r\n\r\n /**\r\n * Generates the data array that the interface uses to render (regardless of source).\r\n *\r\n * @param {HciDataDto} externalData\r\n */\r\n generateData(externalData?: HciDataDto): void {\r\n if (isDevMode()) {\r\n console.debug(\"generateData\");\r\n console.debug(externalData);\r\n }\r\n\r\n if (externalData) {\r\n this.boundData = externalData.data;\r\n this.setResultMessage(this.boundData);\r\n this.paging.setDataSize(externalData.gridDto.paging.dataSize);\r\n\r\n // Create row groups.\r\n this.viewData = [];\r\n let rowGroup: RowGroup;\r\n\r\n for (let i = 0; i < this.boundData.length; i++) {\r\n rowGroup = new RowGroup(undefined, this.boundData[i], (externalData.dataCounts && externalData.dataCounts !== null) ? externalData.dataCounts[i] : 0);\r\n\r\n if (this.grouping.fields.length > 0) {\r\n for (let groupingField of this.grouping.fields) {\r\n rowGroup[groupingField] = this.boundData[i][groupingField];\r\n }\r\n }\r\n\r\n this.viewData.push(rowGroup);\r\n }\r\n } else {\r\n // Create and populate row groups.\r\n this.populateFromBoundData();\r\n }\r\n\r\n this.detectChanges();\r\n\r\n this.dataChange.emit(Object.assign({type: \"none\"}, this.lastEvent, {\r\n paging: this.paging,\r\n nViewData: this.viewData.length\r\n }));\r\n }\r\n\r\n /**\r\n * Generates the data if the data is an array (not external).\r\n */\r\n populateFromBoundData(): void {\r\n if (isDevMode()) {\r\n console.debug(\"populateFromBoundData\");\r\n console.debug(this.boundData);\r\n }\r\n\r\n if (!this.boundData) {\r\n this.viewData = [];\r\n this.paging.setPage(0);\r\n return;\r\n }\r\n\r\n if (this.boundData.length === 0) {\r\n console.debug(\"Bound Data length found as 0\");\r\n this.paging.setPage(0);\r\n this.paging.setNumPages(1);\r\n this.paging.setDataSize(0);\r\n }\r\n\r\n let preparedData = [];\r\n this.groupedDataSet = [];\r\n\r\n let rowGroupMap: Map<string, number> = new Map<string, number>();\r\n\r\n let doRowGrouping: boolean = this.grouping.fields && this.grouping.fields.length > 0;\r\n for (let row of this.boundData) {\r\n let groupKey: string;\r\n if (doRowGrouping) {\r\n for (let field of this.grouping.fields) {\r\n groupKey = (groupKey) ? groupKey + \":\" + row[field] : row[field];\r\n }\r\n }\r\n\r\n if (this.filters && this.filters.length > 0) {\r\n let include: boolean = true;\r\n\r\n for (let filter of this.filters) {\r\n if (!filter.valid) {\r\n continue;\r\n } else if (this.controller.advancedSearch && this.controller.advancedSearch.length > 0 && !this.controller.advancedSearchAllowFilter) {\r\n // Advanced search does not auto filter by default\r\n continue;\r\n } else {\r\n let filterValues = filter.getValue().split(\",\");\r\n let filterFields = filter.getField().split(\" or \");\r\n\r\n let innerInclude: boolean = false;\r\n for (let field of filterFields) {\r\n if (row[field] && typeof row[field] == \"number\") {\r\n for (let value of filterValues) {\r\n if (row[field] == value) {\r\n innerInclude = true;\r\n break;\r\n }\r\n }\r\n } else if (row[field] && row[field] instanceof Date || filter.getDataType() == \"date\") {\r\n for (let value of filterValues) {\r\n if (value instanceof Date) {\r\n if ((new Date(row[field])).getTime() == (new Date(value)).getTime()) {\r\n innerInclude = true;\r\n break;\r\n }\r\n }\r\n }\r\n } else if (row[field] && typeof row[field] == \"string\") {\r\n // Check if it is multiple search strings\r\n for (let value of filterValues) {\r\n if (typeof value == \"string\") {\r\n if (row[field].toLowerCase().indexOf(value.toLowerCase()) !== -1) {\r\n innerInclude = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (innerInclude) {\r\n break;\r\n }\r\n }\r\n\r\n if (!innerInclude) {\r\n include = false;\r\n }\r\n\r\n }\r\n\r\n if(include) {\r\n break;\r\n }\r\n }\r\n\r\n if (!include) {\r\n continue;\r\n }\r\n }\r\n\r\n if (doRowGrouping) {\r\n if (rowGroupMap.get(groupKey) >= 0) {\r\n preparedData[rowGroupMap.get(groupKey)].rgRows.push(row);\r\n } else {\r\n rowGroupMap.set(groupKey, preparedData.length);\r\n\r\n let rowGroup: RowGroup = new RowGroup(groupKey, row);\r\n for (let field of this.grouping.fields) {\r\n rowGroup[field] = row[field];\r\n }\r\n\r\n preparedData.push(rowGroup);\r\n }\r\n } else {\r\n preparedData.push(new RowGroup(groupKey, row));\r\n }\r\n\r\n //this.globalRowGroupMap = rowGroupMap;\r\n }\r\n\r\n if (this.sorts.length > 0) {\r\n preparedData.sort((a: RowGroup, b: RowGroup) => {\r\n let v: number = 0;\r\n\r\n for (let sort of this.sorts) {\r\n if (this.isSortFieldGroupField(sort.getField())) {\r\n if (sort.getAsc()) {\r\n if (a[sort.getField()] < b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] > b[sort.getField()]) {\r\n v = 1;\r\n }\r\n } else {\r\n if (a[sort.getField()] > b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] < b[sort.getField()]) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n } else if (this.grouping.getFields().length === 0) {\r\n if (sort.getAsc()) {\r\n if (a.rgRows[0][sort.getField()] < b.rgRows[0][sort.getField()]) {\r\n v = -1;\r\n } else if (a.rgRows[0][sort.getField()] > b.rgRows[0][sort.getField()]) {\r\n v = 1;\r\n }\r\n } else {\r\n if (a.rgRows[0][sort.getField()] > b.rgRows[0][sort.getField()]) {\r\n v = -1;\r\n } else if (a.rgRows[0][sort.getField()] < b.rgRows[0][sort.getField()]) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n }\r\n }\r\n\r\n return v;\r\n });\r\n\r\n if (this.grouping.getFields().length > 0) {\r\n for (let rowGroup of preparedData) {\r\n rowGroup.rgRows.sort((a: Object, b: Object) => {\r\n let v: number = 0;\r\n\r\n for (let sort of this.sorts) {\r\n if (!this.isSortFieldGroupField(sort.getField())) {\r\n if (sort.getAsc()) {\r\n if (a[sort.getField()] < b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] > b[sort.getField()]) {\r\n v = 1;\r\n }\r\n } else {\r\n if (a[sort.getField()] > b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] < b[sort.getField()]) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n }\r\n }\r\n\r\n return v;\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.paging.setDataSize(preparedData.length);\r\n\r\n this.groupedDataSet = preparedData;\r\n\r\n if (this.paging.getPageSize() > 0) {\r\n this.viewData = [];\r\n for (var i = this.paging.getPage() * this.paging.getPageSize(); i < Math.min(preparedData.length, (this.paging.getPage() + 1) * this.paging.getPageSize()); i++) {\r\n this.viewData.push(preparedData[i]);\r\n }\r\n } else {\r\n this.paging.setDataSize(preparedData.length);\r\n this.viewData = preparedData;\r\n }\r\n\r\n for (let rowGroup of this.viewData) {\r\n rowGroup.rgCount = rowGroup.rgRows.length;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Return true if the sort field is a grouping field.\r\n *\r\n * @param sortField\r\n */\r\n isSortFieldGroupField(sortField: string): boolean {\r\n if (!this.grouping || !this.grouping.fields || this.grouping.fields.length === 0) {\r\n return false;\r\n }\r\n\r\n for (let groupField of this.grouping.fields) {\r\n if (sortField === groupField) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Select a group of data. Call the first page of data upon expanding. If already expanded, close and go back to the\r\n * list of groups.\r\n *\r\n * @param {RowGroup} rowGroup\r\n */\r\n setGroupExpanded(event: MouseEvent, rowGroup: RowGroup) {\r\n if (isDevMode()) {\r\n console.debug(\"setGroupExpanded: \" + rowGroup.rgExpanded);\r\n }\r\n\r\n if (this.externalDataCall && !rowGroup.rgExpanded) {\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n\r\n let groupFilters: HciFilterDto[] = this.filters.slice();\r\n for (let groupField of this.grouping.fields) {\r\n groupFilters.push(new HciFilterDto(groupField, \"string\", rowGroup[groupField], undefined, \"E\", true));\r\n }\r\n\r\n rowGroup.rgPageMin = 0;\r\n rowGroup.rgPageMax = 0;\r\n\r\n this.externalDataCall(new HciGridDto(groupFilters, this.sorts, new HciPagingDto(0, this.groupPageSize), new HciGroupingDto(this.grouping.fields, false)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n rowGroup.rgRows = externalData.data;\r\n\r\n if (!this.inlineExpand) {\r\n this.selectedRowGroup = rowGroup;\r\n }\r\n\r\n this.detectChanges();\r\n });\r\n }\r\n } else if (!rowGroup.rgExpanded) {\r\n rowGroup.rgPageMin = 0;\r\n rowGroup.rgPageMax = 0;\r\n if (!this.inlineExpand) {\r\n this.selectedRowGroup = rowGroup;\r\n }\r\n }\r\n\r\n if (rowGroup.rgExpanded) {\r\n if (this.inlineExpand) {\r\n let groupSelectedParent: HTMLElement;\r\n if (event) {\r\n groupSelectedParent = <HTMLElement>(<HTMLElement>event.target).closest(\".group-parent\");\r\n } else {\r\n groupSelectedParent = <HTMLElement><unknown>document.getElementById(this.getRowGroupId(rowGroup));\r\n //groupSelectedParent.click();\r\n }\r\n this.renderer.removeClass(groupSelectedParent, \"active\");\r\n }\r\n\r\n of(null).pipe(delay(250)).subscribe(() => {\r\n this.selectedRowGroup = undefined;\r\n this.selectedRowGroupContainer = undefined;\r\n });\r\n\r\n if (this.onGroupClose) {\r\n this.onGroupClose();\r\n }\r\n } else if (!rowGroup.rgExpanded && this.inlineExpand) {\r\n let groupSelectedParent: HTMLElement;\r\n if (event) {\r\n groupSelectedParent = <HTMLElement>(<HTMLElement>event.target).closest(\".group-parent\");\r\n } else {\r\n groupSelectedParent = <HTMLElement><unknown>document.getElementById(this.getRowGroupId(rowGroup));\r\n //groupSelectedParent.click();\r\n }\r\n this.renderer.addClass(groupSelectedParent, \"active\");\r\n }\r\n\r\n if (isDevMode() && !this.inlineExpand) {\r\n console.debug(\"this.selectedRowGroup\");\r\n console.debug(this.selectedRowGroup);\r\n }\r\n\r\n rowGroup.rgExpanded = !rowGroup.rgExpanded;\r\n\r\n this.detectChanges();\r\n }\r\n\r\n /**\r\n * Add the scroll listener to the group container.\r\n */\r\n addGroupScrollListener(): void {\r\n this.removeGroupScrollListener();\r\n\r\n this.lastScrollTop = -1;\r\n\r\n if (this.selectedRowGroup && this.selectedRowGroup.rgCount !== this.selectedRowGroup.rgRows.length) {\r\n this.selectedRowGroupContainer = this.elementRef.nativeElement.querySelector(\"#selected-group-container\");\r\n this.selectedRowGroupContainer.addEventListener(\"scroll\", this.onGroupScroll.bind(this), true);\r\n }\r\n }\r\n\r\n /**\r\n * Remove the scroll listener from the group container.\r\n */\r\n removeGroupScrollListener(): void {\r\n if (this.selectedRowGroupContainer) {\r\n this.selectedRowGroupContainer.removeEventListener(\"scroll\", this.onGroupScroll.bind(this));\r\n }\r\n }\r\n\r\n /**\r\n * Listen for the scroll event, determine if the scroll hit the top or bottom of the container.\r\n *\r\n * @param {Event} event\r\n */\r\n onGroupScroll(event: Event): void {\r\n if (!this.busy) {\r\n let newScrollTop: number = Math.round(this.selectedRowGroupContainer.scrollTop);\r\n let scrollPosition: number = 1;\r\n if (newScrollTop === 0 && scrollPosition !== 0) {\r\n scrollPosition = 0;\r\n } else if (scrollPosition !== 2 && Math.abs(this.selectedRowGroupContainer.scrollHeight - (newScrollTop + this.selectedRowGroupContainer.offsetHeight)) < 3) {\r\n scrollPosition = 2;\r\n } else {\r\n scrollPosition = 1;\r\n }\r\n\r\n if (this.lastScrollPosition !== scrollPosition && this.lastScrollPosition === 1) {\r\n if (scrollPosition === 0) {\r\n this.groupPreviousPage();\r\n } else if (scrollPosition === 2) {\r\n this.groupNextPage();\r\n }\r\n }\r\n\r\n this.lastScrollTop = newScrollTop;\r\n this.lastScrollPosition = scrollPosition;\r\n }\r\n }\r\n\r\n /**\r\n * When scrolling hits the top, load the previous page of group data.\r\n */\r\n groupPreviousPage(): void {\r\n if (this.selectedRowGroup.rgPageMin === 0) {\r\n console.warn(\"First page already loaded.\");\r\n return;\r\n }\r\n\r\n this.removeGroupScrollListener();\r\n\r\n let groupFilters: HciFilterDto[] = this.filters.slice();\r\n for (let groupField of this.grouping.fields) {\r\n groupFilters.push(new HciFilterDto(groupField, \"string\", this.selectedRowGroup[groupField], undefined, \"E\", true));\r\n }\r\n\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n this.externalDataCall(new HciGridDto(groupFilters, this.sorts, new HciPagingDto(this.selectedRowGroup.rgPageMin - 1, this.groupPageSize), new HciGroupingDto(this.grouping.fields, false)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n\r\n of(undefined).pipe(delay(50)).subscribe(() => {\r\n if (this.selectedRowGroupContainer.scrollTop === 0) {\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"scrollTop\", \"1\");\r\n }\r\n });\r\n\r\n this.addGroupScrollListener();\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.selectedRowGroup.rgRows = externalData.data.concat(this.selectedRowGroup.rgRows);\r\n this.selectedRowGroup.rgPageMin -= 1;\r\n\r\n if (this.groupCacheNumPages && this.selectedRowGroup.rgPageMax - this.selectedRowGroup.rgPageMin >= this.groupCacheNumPages) {\r\n this.selectedRowGroup.rgRows.splice(this.groupCacheNumPages * this.groupPageSize);\r\n this.selectedRowGroup.rgPageMax -= 1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * When scrolling hits the bottom, load the next page of group data.\r\n */\r\n groupNextPage(): void {\r\n if ((this.selectedRowGroup.rgPageMax + 1) * this.groupPageSize >= this.selectedRowGroup.rgCount) {\r\n console.warn(\"All rows already loaded\");\r\n return;\r\n }\r\n\r\n this.removeGroupScrollListener();\r\n\r\n let groupFilters: HciFilterDto[] = this.filters.slice();\r\n for (let groupField of this.grouping.fields) {\r\n groupFilters.push(new HciFilterDto(groupField, \"string\", this.selectedRowGroup[groupField], undefined, \"E\", true));\r\n }\r\n\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n this.externalDataCall(new HciGridDto(groupFilters, this.sorts, new HciPagingDto(this.selectedRowGroup.rgPageMax + 1, this.groupPageSize), new HciGroupingDto(this.grouping.fields, false)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n\r\n of(undefined).pipe(delay(50)).subscribe(() => {\r\n if (this.selectedRowGroupContainer.scrollTop === 0) {\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"scrollTop\", \"1\");\r\n }\r\n });\r\n\r\n this.addGroupScrollListener();\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.selectedRowGroup.rgRows = this.selectedRowGroup.rgRows.concat(externalData.data);\r\n this.selectedRowGroup.rgPageMax += 1;\r\n\r\n if (this.groupCacheNumPages && this.selectedRowGroup.rgPageMax - this.selectedRowGroup.rgPageMin >= this.groupCacheNumPages) {\r\n this.selectedRowGroup.rgRows.splice(0, this.groupPageSize);\r\n this.selectedRowGroup.rgPageMin += 1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Go to the first page.\r\n */\r\n public doPageFirst(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n\r\n /**\r\n * Go to the previous page.\r\n */\r\n public doPagePrevious(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() > 0) {\r\n this.paging.setPage(this.paging.getPage() - 1);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the next page.\r\n */\r\n public doPageNext(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() < this.paging.getNumPages() - 1) {\r\n this.paging.setPage(this.paging.getPage() + 1);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the last page.\r\n */\r\n public doPageLast(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(this.paging.getNumPages() - 1);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n\r\n /**\r\n * After page turns, check if the page has the row that need to be highlighted\r\n */\r\n private checkActiveRowId(): void {\r\n //if a row is selected, and rowId field is specified (usually configured by config)\r\n if (this.selectedRow && this.rowId) {\r\n let id = this.selectedRow[this.rowId];\r\n if (id) {\r\n this.activateRowById(id);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Concat group by fields to comma delimited words\r\n * or delimiter delimited words if the deliminator has its default value set.\r\n *\r\n * @param {RowGroup} rowGroup\r\n * @returns {string}\r\n */\r\n getGroupDisplay(rowGroup: RowGroup): string {\r\n let display: string;\r\n\r\n if (this.groupDisplay) {\r\n display = this.groupDisplay;\r\n for (let field of this.grouping.fields) {\r\n display = display.replace(field, rowGroup[field]);\r\n }\r\n } else {\r\n for (let field of this.grouping.fields) {\r\n if (rowGroup[field] !== null && rowGroup[field] !== \"\") {\r\n display = (display) ? display + this.delimiter + rowGroup[field] : rowGroup[field];\r\n }\r\n }\r\n }\r\n\r\n return display;\r\n }\r\n\r\n /**\r\n * Sets the selectedRowGroupContainer element.\r\n *\r\n * @param {ElementRef} selectedRowGroupContainer\r\n */\r\n @ViewChild(\"selectedRowGroupContainer\", {\r\n read: ElementRef,\r\n static: false\r\n }) set selectedRowGroupContainerSetter(selectedRowGroupContainer: ElementRef) {\r\n if (this.selectedRowGroupContainer && this.setScrollTop) {\r\n this.selectedRowGroupContainer.scrollTop = (<HTMLElement>this.selectedRowGroupContainer.querySelector(\"#innerRowGroupContainer\")).offsetHeight;\r\n this.setScrollTop = false;\r\n }\r\n\r\n if (!this.selectedRowGroupContainer && selectedRowGroupContainer) {\r\n this.selectedRowGroupContainer = selectedRowGroupContainer.nativeElement;\r\n\r\n let groupSelectedParent: HTMLElement = <HTMLElement>this.selectedRowGroupContainer.closest(\".group-selected-parent\");\r\n this.renderer.setStyle(groupSelectedParent, \"display\", \"flex\");\r\n\r\n of(null).pipe(delay(50)).subscribe(() => {\r\n this.renderer.addClass(groupSelectedParent, \"active\");\r\n this.innerRowGroupContainer = this.selectedRowGroupContainer.querySelector(\"#innerRowGroupContainer\");\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"height\", this.innerRowGroupContainer.offsetHeight + \"px\");\r\n this.renderer.setStyle(this.innerRowGroupContainer, \"min-height\", (this.innerRowGroupContainer.offsetHeight + 30) + \"px\");\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"scrollTop\", \"1\");\r\n\r\n this.addGroupScrollListener();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Allow a custom row click function to control deselection.\r\n */\r\n deselectAllRows(): void {\r\n let es: HTMLElement[] = this.elementRef.nativeElement.querySelectorAll(\".row-parent\");\r\n for (let e of es) {\r\n this.renderer.removeClass(e, \"active\");\r\n }\r\n }\r\n\r\n /**\r\n * Allow a custom group click function to control deselection.\r\n */\r\n deselectAllGroups(): void {\r\n let es: HTMLElement[] = this.elementRef.nativeElement.querySelectorAll(\".group-parent\");\r\n for (let e of es) {\r\n this.renderer.removeClass(e, \"active\");\r\n }\r\n }\r\n\r\n /**\r\n * Allow a custom row click function to select a row.\r\n *\r\n * @param {string} id\r\n */\r\n activateRowById(id: string): void {\r\n let e: HTMLElement = this.elementRef.nativeElement.querySelector(\"#row-\" + id);\r\n if (e) {\r\n this.renderer.addClass(e, \"active\");\r\n }\r\n }\r\n\r\n activateGroupById(id: string): void {\r\n let e: HTMLElement = this.elementRef.nativeElement.querySelector(\"#row-group-\" + id);\r\n if (e) {\r\n this.renderer.addClass(e, \"active\");\r\n }\r\n }\r\n\r\n /**\r\n * This function will return whether a particular group is expanded or collapsed\r\n * @param rowGroup\r\n */\r\n getGroupExpandedIndicator(rowGroup: RowGroup) {\r\n if (rowGroup.rgExpanded === true) {\r\n return \"minus\";\r\n } else {\r\n return \"plus\";\r\n }\r\n }\r\n\r\n //TODo : Handle the case where the user uses a custom groupTemplate\r\n /**\r\n * This function will cause SearchListComponent to navigate to a page and highlight the given group item, or\r\n * the row (in-case of non-grouped list)\r\n * This\r\n * @param groupId : This should contain a string to uniquely identify a particular group-display\r\n * @param rowId : This is the actual rowId for the row to be selected.\r\n */\r\n navigateToPageContainingElement(groupId: string, rowId: string) {\r\n\r\n //Introducing the additional check below to address CCRUI-1163.\r\n if (!this.boundData || this.boundData.length === 0) {\r\n return;\r\n }\r\n // Check if grouped\r\n let rowGrouped: boolean = this.grouping.fields && this.grouping.fields.length > 0;\r\n\r\n if (rowGrouped) {\r\n this.groupedDataSet.forEach((rowGroup, index) => {\r\n let groupDisplay = this.getGroupDisplay(rowGroup);\r\n if (groupDisplay.includes(groupId)) {\r\n //Set the page to the index\r\n if (!this.busy) {\r\n let page = Math.floor(index / this.paging.getPageSize());\r\n if (this.paging.getNumPages() - 1 >= page) {\r\n this.paging.setPage(page);\r\n this.pagingSubject.next(this.paging);\r\n //this.defaultGroupClick(null, this, rowGroup);\r\n let groupSelectedParent = <HTMLElement><unknown>document.getElementById(this.getRowGroupId(rowGroup));\r\n groupSelectedParent.click();\r\n this.deselectAllRows();\r\n this.activateRowById(rowId.replace(\"row-\", \"\"));\r\n }\r\n }\r\n }\r\n });\r\n } else {\r\n this.boundData.forEach((row, index) => {\r\n if (this.getRowId(row) === rowId) {\r\n if (!this.busy) {\r\n let page = Math.floor(index / this.paging.getPageSize());\r\n if (this.paging.getNumPages() - 1 >= page) {\r\n this.paging.setPage(page);\r\n this.pagingSubject.next(this.paging);\r\n this.activateRowById(rowId.replace(\"row-\", \"\"));\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n private setResultMessage(data: Object[]) {\r\n if (this.showResultsCount && data && data.length > 0) {\r\n this.searchResultMessage = data.length + \" result(s)\";\r\n } else {\r\n this.searchResultMessage = \"\";\r\n }\r\n }\r\n}\r\n","import {Directive, ElementRef, HostListener, Input, isDevMode, OnInit, Renderer2} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, interval, Subject} from \"rxjs\";\r\nimport {takeWhile} from \"rxjs/operators\";\r\n\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n/**\r\n * This directive allows you to auto calculate a property such as margin-top or top based on heights of other components.\r\n * Using [topMargin]=\"['header', 'sub-header']\" [topMarginStyle]=\"'margin-top'\" means that the margin-top of the component\r\n * with this directive placed on it will be equal to the height of the header plus sub-header. The header and sub-header\r\n * and ids.\r\n *\r\n * @since 7.0.0\r\n */\r\n@Directive({\r\n selector: \"[topMargin]\"\r\n})\r\nexport class TopMarginDirective implements OnInit {\r\n\r\n @Input() topMargin: string[];\r\n @Input() topMarginStyle: string = \"margin-top\";\r\n @Input() topMarginDefault: number = 0;\r\n @Input() topMarginStyleAppend: string = \"px\";\r\n @Input() topMarginOffset: number = 0;\r\n @Input() topMarginTarget: string;\r\n\r\n private targetsFound: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n private heightSubject: Subject<number> = new Subject<number>();\r\n\r\n constructor(private navigationGlobalService: NavigationGlobalService,\r\n private el: ElementRef,\r\n private renderer: Renderer2) {}\r\n\r\n ngOnInit() {\r\n if (isDevMode()) {\r\n console.debug(\"TopMarginDirective.ngOnInit: \" + this.topMargin + \", \" + this.topMarginStyle);\r\n }\r\n\r\n this.heightSubject.subscribe((height: number) => {\r\n this.setHeight(height);\r\n });\r\n\r\n this.targetsFound.subscribe((targetsFound: boolean) => {\r\n if (targetsFound) {\r\n this.getHeight();\r\n }\r\n });\r\n\r\n this.navigationGlobalService.getNotificationEventSubject().subscribe((event: boolean) => {\r\n this.findTargets();\r\n });\r\n\r\n this.heightSubject.next(this.topMarginDefault);\r\n\r\n this.findTargets();\r\n }\r\n\r\n /**\r\n * Sets the style to the sum of the heights.\r\n *\r\n * @param {number} height\r\n */\r\n setHeight(height: number): void {\r\n if (isDevMode()) {\r\n console.debug(\"TopMarginDirective.setHeight: \" + height);\r\n }\r\n if (this.topMarginTarget) {\r\n let el: HTMLElement = this.el.nativeElement.querySelector(\"#\" + this.topMarginTarget);\r\n\r\n if (el) {\r\n this.renderer.setStyle(el, this.topMarginStyle, height + this.topMarginStyleAppend);\r\n } else {\r\n el = this.el.nativeElement.querySelector(\".\" + this.topMarginTarget);\r\n if (el) {\r\n this.renderer.setStyle(el, this.topMarginStyle, height + this.topMarginStyleAppend);\r\n } else if (isDevMode()) {\r\n console.warn(\"TopMarginDirective.setHeight: Could not find id or class target: \" + this.topMarginTarget);\r\n }\r\n }\r\n } else {\r\n this.renderer.setStyle(this.el.nativeElement, this.topMarginStyle, height + this.topMarginStyleAppend);\r\n }\r\n }\r\n\r\n /**\r\n * Loops until the DOM is fully created.\r\n */\r\n findTargets(): void {\r\n let count: number = 0;\r\n this.targetsFound.next(false);\r\n interval(50)\r\n .pipe(takeWhile(() => !this.targetsFound.getValue() || count === 1000))\r\n .subscribe(() => {\r\n let exists: boolean = true;\r\n for (let target of this.topMargin) {\r\n if (!document.querySelector(\"#\" + target)) {\r\n exists = false;\r\n break;\r\n }\r\n }\r\n if (exists) {\r\n this.targetsFound.next(true);\r\n }\r\n count = count + 1;\r\n });\r\n }\r\n\r\n /**\r\n * Finds the sum of the heights based on the components passed in.\r\n */\r\n getHeight() {\r\n if (isDevMode()) {\r\n console.debug(\"TopMarginDirective.getHeight\");\r\n }\r\n\r\n if (this.topMargin && this.targetsFound) {\r\n let x: number = this.topMarginOffset;\r\n for (let target of this.topMargin) {\r\n let e: HTMLElement = <HTMLElement>document.querySelector(\"#\" + target);\r\n if (e) {\r\n let o: number = 0;\r\n if (e.offsetHeight.toString().match(\"[a-z]\")) {\r\n o = +e.offsetHeight.toString().replace(\"px\", \"\").replace(\"rem\", \"\").replace(\"em\", \"\");\r\n } else {\r\n o = +e.offsetHeight.toString();\r\n }\r\n x = +x + o;\r\n }\r\n }\r\n\r\n this.heightSubject.next(x);\r\n }\r\n }\r\n\r\n @HostListener(\"window:resize\", [\"$event\"])\r\n private windowResize(event) {\r\n this.getHeight();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, HostBinding, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NavigationService} from \"../services/navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n/**\r\n * A component intended to provide a common, configurable application header. This component expects to be used with a\r\n * ViewChild pattern. See the demo application and associated documentation for examples and details.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"hci-app-header\",\r\n template: `\r\n <nav [id]=\"id + '-nav'\"\r\n class=\"navbar navbar-expand-md navbar-dark {{ navbarClasses ? ' ' + navbarClasses : '' }}\"\r\n [style.display]=\"hidden ? 'none' : 'flex'\">\r\n <div id=\"leftHeaderContainer\" class=\"me-auto left-header\">\r\n <ng-container #leftContainer></ng-container>\r\n </div>\r\n <div id=\"rightHeaderContainer\" class=\"d-none d-md-flex right-header\">\r\n <ng-container #rightContainer></ng-container>\r\n </div>\r\n </nav>\r\n `,\r\n providers: [\r\n NavigationService\r\n ]\r\n})\r\nexport class AppHeaderComponent extends NavComponent {\r\n\r\n @HostBinding(\"class\") @Input(\"class\") classList: String = \"\";\r\n\r\n @Input() hidden: boolean = false;\r\n @Input() navbarClasses: string;\r\n\r\n navigationGlobalService: NavigationGlobalService;\r\n\r\n leftContainer: ViewContainerRef;\r\n rightContainer: ViewContainerRef;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n\r\n this.isRoot = true;\r\n this.navigationGlobalService = navigationGlobalService;\r\n this.containerSet.add(\"rightContainer\");\r\n\r\n if(this.classList.length > 0) {\r\n this.classList += \" flex-shrink-0\";\r\n }else {\r\n this.classList = \"flex-shrink-0\";\r\n }\r\n }\r\n\r\n @ViewChild(\"leftContainer\", {read: ViewContainerRef, static: true}) set leftContainerSetter(leftContainer: ViewContainerRef) {\r\n this.leftContainer = leftContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n @ViewChild(\"rightContainer\", {read: ViewContainerRef, static: true}) set rightContainerSetter(rightContainer: ViewContainerRef) {\r\n this.rightContainer = rightContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.leftContainer && this.rightContainer) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n\r\n if (this.leftContainer) {\r\n this.leftContainer.clear();\r\n }\r\n if (this.rightContainer) {\r\n this.rightContainer.clear();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getContainer(containerName?: string): ViewContainerRef {\r\n if (containerName === undefined || containerName === \"default\") {\r\n return this.leftContainer;\r\n } else {\r\n return this.rightContainer;\r\n }\r\n }\r\n\r\n setConfig(config: any) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config: any) {\r\n if (config.navbarClasses) {\r\n this.navbarClasses = config.navbarClasses;\r\n }\r\n if (config.hidden !== undefined) {\r\n this.hidden = config.hidden;\r\n }\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, HostBinding, Input, Renderer2, ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NavigationService} from \"../services/navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n\r\n/**\r\n * A component to provide an application wide fixed footer exposing application name, version, a navigation element to a\r\n * feedback form and a navigation element to contact information.\r\n * <p>\r\n * This component expects bootstrap 4.x styling to be applied.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"hci-app-footer\",\r\n template: `\r\n <div class=\"hci-app-footer {{ footerClasses ? ' ' + footerClasses : '' }}\">\r\n <div id=\"footer-left-container\" class=\"ms-3\">\r\n <ng-container #leftContainer></ng-container>\r\n </div>\r\n <div id=\"footer-middle-container\" class=\"ms-auto me-auto\">\r\n <ng-container #middleContainer></ng-container>\r\n </div>\r\n <div id=\"footer-right-container\" class=\"me-3\">\r\n <ng-container #rightContainer></ng-container>\r\n </div>\r\n </div>\r\n `,\r\n providers: [\r\n NavigationService\r\n ]\r\n})\r\nexport class AppFooterComponent extends NavComponent {\r\n\r\n @HostBinding(\"class\") classList: String = \"flex-shrink-0\";\r\n\r\n @Input() footerClasses: string = \"d-none d-md-flex\";\r\n\r\n navigationGlobalService: NavigationGlobalService;\r\n\r\n leftContainer: ViewContainerRef;\r\n middleContainer: ViewContainerRef;\r\n rightContainer: ViewContainerRef;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n this.isRoot = true;\r\n this.navigationGlobalService = navigationGlobalService;\r\n this.containerSet.add(\"container\");\r\n }\r\n\r\n @ViewChild(\"leftContainer\", {read: ViewContainerRef, static: true}) set leftContainerSetter(leftContainer: ViewContainerRef) {\r\n this.leftContainer = leftContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n @ViewChild(\"middleContainer\", {read: ViewContainerRef, static: true}) set middleContainerSetter(middleContainer: ViewContainerRef) {\r\n this.middleContainer = middleContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n @ViewChild(\"rightContainer\", {read: ViewContainerRef, static: true}) set rightContainerSetter(rightContainer: ViewContainerRef) {\r\n this.rightContainer = rightContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.leftContainer && this.middleContainer && this.rightContainer) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n\r\n if (this.leftContainer) {\r\n this.leftContainer.clear();\r\n }\r\n if (this.middleContainer) {\r\n this.middleContainer.clear();\r\n }\r\n if (this.rightContainer) {\r\n this.rightContainer.clear();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getContainer(containerName?: string): ViewContainerRef {\r\n if (containerName === undefined || containerName === \"default\") {\r\n return this.middleContainer;\r\n } else if (containerName === \"leftContainer\") {\r\n return this.leftContainer;\r\n } else {\r\n return this.rightContainer;\r\n }\r\n }\r\n\r\n updateConfig(config) {\r\n if (config.navbarClasses) {\r\n this.footerClasses = config.footerClasses;\r\n }\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NavigationService} from \"../services/navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n/**\r\n * TODO\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component(\r\n {\r\n selector: \"hci-sidebar\",\r\n template:\r\n `\r\n <div\r\n id=\"hci-sidebar-div\"\r\n class=\"hci-sidebar {{sidebarClasses}}\"\r\n [class.expanded]=\"sidebarExpanded\"\r\n [style.width.px]=\"sidebarSize\"\r\n >\r\n <div id=\"topSidebarContainer\" class=\"top-sidebar-container d-flex\">\r\n <ng-content></ng-content>\r\n <ng-container #topContainer></ng-container>\r\n\r\n <ng-container>\r\n <div class=\"bottom-of-sidebar mt-auto p-2\"></div>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"draggable\"\r\n class=\"sidebar-splitter\"\r\n [style.left.px]=\"sidebarSize\"\r\n [style.font-size.px]=\"sidebarFontSize\"\r\n [style.width.px]=\"sidebarSplitterWidth\"\r\n (mousedown)=\"mouseDown($event)\"\r\n (dblclick)=\"negateSidebarExpanded()\"\r\n style=\"box-shadow: 1px 0 10px 1px var(--greycool-meddarker);\"\r\n >\r\n <i\r\n class=\"fas fa-2xl fa-grip-lines-vertical splitter-icon\"\r\n style=\"padding-left: 5px; width: 7.5px;\"\r\n >\r\n </i>\r\n </div>\r\n `,\r\n providers: [\r\n NavigationService\r\n ]\r\n }\r\n)\r\nexport class SidebarComponent extends NavComponent {\r\n\r\n @Input() hidden: boolean = false;\r\n @Input() output: string = \"padding-left\";\r\n @Input() sidebarClasses: string = \"\";\r\n @Input() showCollapse: boolean = true;\r\n @Input() draggable: boolean = true;\r\n @Input() sidebarSplitterWidth: number = 6;\r\n @Input() collapsedSize: number = 160;\r\n @Input() minWidth: number = 160;\r\n @Input() maxWidth: number = 400;\r\n @Input() sidebarSize: number = 220;\r\n @Input() sidebarFontSize: number = 20;\r\n @Input() sidebarExpanded: boolean = true;\r\n\r\n @Output() sidebarSizeChange = new EventEmitter<number>();\r\n\r\n topContainer: ViewContainerRef;\r\n\r\n navigationGlobalService: NavigationGlobalService;\r\n\r\n private dragging: boolean = false;\r\n private sidebarSizeMemory: number = 220;\r\n\r\n constructor(\r\n elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n this.isRoot = true;\r\n this.navigationGlobalService = navigationGlobalService;\r\n }\r\n\r\n @ViewChild(\"topContainer\",\r\n {\r\n read: ViewContainerRef,\r\n static: true\r\n }\r\n ) set topContainerSetter(topContainer: ViewContainerRef) {\r\n this.topContainer = topContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.topContainer) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.hideSidebarShadow();\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n getContainer(container?: string): ViewContainerRef {\r\n return this.topContainer;\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n this.topContainer.clear();\r\n }\r\n\r\n setConfig(config: any) {\r\n super.setConfig(config);\r\n\r\n this.updateConfig(config);\r\n\r\n this.navigationService.setRootComponent(this.id, this);\r\n }\r\n\r\n updateConfig(config) {\r\n if (config.sidebarClasses) {\r\n this.sidebarClasses = config.sidebarClasses;\r\n }\r\n if (config.sidebarExpanded !== undefined) {\r\n this.sidebarExpanded = config.sidebarExpanded;\r\n }\r\n if (config.draggable !== undefined) {\r\n this.draggable = config.draggable;\r\n }\r\n if (config.showCollapse !== undefined) {\r\n this.showCollapse = config.showCollapse;\r\n }\r\n if (config.sidebarSplitterWidth) {\r\n this.sidebarSplitterWidth = config.sidebarSplitterWidth;\r\n }\r\n if (config.sidebarSize) {\r\n this.sidebarSizeMemory = config.sidebarSize;\r\n this.sidebarSize = config.sidebarSize;\r\n }\r\n if (config.collapsedSize) {\r\n this.collapsedSize = config.collapsedSize;\r\n }\r\n if (config.minWidth) {\r\n this.minWidth = config.minWidth;\r\n }\r\n if (config.maxWidth) {\r\n this.maxWidth = config.maxWidth;\r\n }\r\n if (config.hidden !== undefined) {\r\n this.setHidden(config.hidden);\r\n }\r\n\r\n // If we don't show the splitter, then set its width to 0.\r\n if (!this.draggable) {\r\n this.sidebarSplitterWidth = 0;\r\n }\r\n\r\n this.setSidebarExpanded(this.sidebarExpanded);\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n setHidden(hidden: boolean) {\r\n this.hidden = hidden;\r\n\r\n this.renderer.removeClass(this.elementRef.nativeElement, \"hide\");\r\n if (this.hidden) {\r\n this.renderer.addClass(this.elementRef.nativeElement, \"hide\");\r\n }\r\n }\r\n\r\n negateSidebarExpanded() {\r\n this.setSidebarExpanded(!this.sidebarExpanded);\r\n this.hideSidebarShadow();\r\n }\r\n\r\n hideSidebarShadow() {\r\n this.renderer.removeClass(this.elementRef.nativeElement.querySelector(\"#hci-sidebar-div\"), \"hide-shadow\");\r\n if (this.draggable && this.sidebarExpanded) {\r\n this.renderer.addClass(this.elementRef.nativeElement.querySelector(\"#hci-sidebar-div\"), \"hide-shadow\");\r\n }\r\n }\r\n\r\n setSidebarExpanded(sidebarExpanded) {\r\n this.sidebarExpanded = sidebarExpanded;\r\n\r\n if (this.sidebarExpanded) {\r\n this.setSidebarSize(this.sidebarSizeMemory);\r\n } else {\r\n this.sidebarSizeMemory = this.sidebarSize;\r\n this.setSidebarSize(this.collapsedSize);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the sidebar width and notifies listeners about the change. The size change emit can happen in different ways.\r\n * You can directly adjust the parent style which means the parent doesn't need to know anything about the sidebar.\r\n * Or a parent can listen to the sidebar change, and it would have to have its own behavior to deal with that.\r\n *\r\n * @param sidebarSize\r\n */\r\n setSidebarSize(sidebarSize: number) {\r\n this.sidebarSize = sidebarSize;\r\n\r\n if (this.output !== \"padding-left\") {\r\n this.sidebarSizeChange.emit(this.sidebarSize);\r\n }\r\n }\r\n\r\n mouseDown(event: MouseEvent) {\r\n if (this.sidebarExpanded && this.draggable) {\r\n this.dragging = true;\r\n }\r\n }\r\n\r\n @HostListener(\"document:mousemove\", [\"$event\"])\r\n mouseMove(event: MouseEvent) {\r\n if (this.dragging) {\r\n this.setSidebarSize(Math.min(this.maxWidth, Math.max(this.minWidth, event.clientX)));\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener(\"document:mouseup\", [\"$event\"])\r\n mouseUp(event: MouseEvent) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n }\r\n }\r\n}\r\n","import {\r\n Component, Input, TemplateRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\nimport {SearchListControllerComponent} from \"../search-list/search-list-controller.component\";\r\n\r\n/**\r\n * The search tree controller renders as a header to one or more search trees. Only one search tree can be shown at a time.\r\n * The controller features the ability to handle filtering and sorting. Without the controller, the search list can exist,\r\n * but it can only handle paging internally.\r\n */\r\n@ComponentType(\"SearchTreeControllerComponent\")\r\n@Component({\r\n selector: \"hci-search-tree-controller\",\r\n exportAs: \"searchTreeControllerComponent\",\r\n styles: [`\r\n .sidebar-container {\r\n background-color: #E7E7E7;\r\n color: #fff ;\r\n box-shadow: none;\r\n z-index: 1000;\r\n padding-top: 3px;\r\n margin-left: -8px;\r\n margin-right: -8px;\r\n padding-bottom: 32px;\r\n }\r\n\r\n `],\r\n template: `\r\n <div *ngIf=\"!hideElements\" id=\"search-title\" class=\"d-flex flex-column\">\r\n <div *ngIf=\"showTitle\" class=\"d-flex\">\r\n {{title}}\r\n <div class=\"d-flex flex-row ms-auto\">\r\n <div *ngIf=\"buttonTemplate\"><ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container></div>\r\n <a (click)=\"toggleShowOptions($event)\"><i class=\"fas fa-filter\"></i></a>\r\n </div>\r\n <div class=\"search-options\" [class.expanded]=\"showOptions\" *ngIf=\"filterByAllowedFields.length > 0 && sortByAllowedFields.length > 0\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\">\r\n <li ngbNavItem *ngIf=\"filterByAllowedFields.length > 1\">\r\n <a ngbNavLink > Filtering </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"d-flex flex-column\">\r\n <ng-container *ngFor=\"let filter of boundFilters\">\r\n <div class=\"d-flex m-1\" style=\"align-items: center;\">\r\n <div style=\"flex: 0 0 40%;\">{{getFieldDisplay(filter.field)}}</div>\r\n <input [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\"\r\n style=\"flex: 1 1 60%;\" aria-label=\"hci-ng-search-tree-controller-filter\"/>\r\n </div>\r\n </ng-container>\r\n <div class=\"d-flex flex-grow-1 m-1\">\r\n <button (click)=\"applyFilters()\" class=\"ms-auto me-1\"><i class=\"fas fa-check-circle\"></i></button>\r\n <button (click)=\"setupFilters(true)\" class=\"me-0\"><i class=\"fas fa-times-circle\"></i></button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem *ngIf=\"sortByAllowedFields.length > 0\">\r\n <a ngbNavLink > Sorting </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"d-flex flex-column\">\r\n <ng-container *ngFor=\"let sortField of sortByAllowedFields\">\r\n <div class=\"d-flex m-2\" style=\"align-items: center;\" (click)=\"setSort($event, sortField)\">\r\n <div style=\"width: 1.5rem;\">\r\n <div *ngIf=\"isSort(sortField) && isSortAsc(sortField)\" [style.color]=\"isFirstSort(sortField) ? 'green' : 'inherit'\">\r\n <i class=\"fas fa-arrow-circle-up fa-lg\"></i>\r\n </div>\r\n <div *ngIf=\"isSort(sortField) && !isSortAsc(sortField)\" [style.color]=\"isFirstSort(sortField) ? 'green' : 'inherit'\">\r\n <i class=\"fas fa-arrow-circle-down fa-lg\"></i>\r\n </div>\r\n </div>\r\n {{getFieldDisplay(sortField)}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\" ></div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-1 global-search\" style=\"align-items: center;\">\r\n <input [ngModel]=\"globalSearch\" (keyup)=\"doGlobalSearch($event)\" class=\"ms-2\" placeholder=\"Search\" aria-label=\"hci-ng-search-tree-controller-global-search\"/>\r\n <div class=\"ms-1 me-1\">\r\n <i class=\"fas fa-search\"></i>\r\n </div>\r\n </div>\r\n <div class=\"d-flex p-1 x-auto\" *ngIf=\"hasValidFilters()\">\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let filter of filters\">\r\n <ng-container *ngIf=\"filter.valid\">\r\n <div (click)=\"clearFilter(filter)\" class=\"d-flex pill\">\r\n <div class=\"me-2\">\r\n {{filter.field}}\r\n </div>\r\n <div class=\"close-icon\">\r\n <i class=\"fas fa-times-circle fa-xs\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"searchLists.length > 1\" class=\"d-flex x-hidden list-toggle\">\r\n <mat-button-toggle-group [ngModel]=\"selectedSearchList\" (ngModelChange)=\"setSelectedSearchList($event)\">\r\n <mat-button-toggle *ngFor=\"let searchList of searchLists\" mat-raised-button-toggle color=\"primary\" [value]=\"searchList\">\r\n {{searchList}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideElements\" class=\"sidebar-container\">\r\n <div id=\"search-title\" class=\"d-flex flex-column pt-1\">\r\n <div *ngIf=\"showTitle\" class=\"d-flex ps-3\">\r\n {{title}}\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class SearchTreeControllerComponent extends SearchListControllerComponent {\r\n\r\n @Input() buttonTemplate: TemplateRef<any>;\r\n @Input() hideElements: boolean = false;\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (config.buttonTemplate) {\r\n this.buttonTemplate = config.buttonTemplate;\r\n }\r\n if (config.hideElements) {\r\n this.hideElements = config.hideElements;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, Input,\r\n isDevMode, Optional, Output, QueryList, Renderer2, SimpleChange, SimpleChanges, TemplateRef, ViewChild, ViewChildren\r\n} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Observable, of, Subject} from \"rxjs\";\r\nimport {delay, finalize} from \"rxjs/operators\";\r\nimport {NgbDropdown} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {HciDataDto, HciFilterDto, HciGridDto, HciGroupingDto, HciPagingDto, HciSortDto} from \"@huntsman-cancer-institute/hci-ng-grid-dto\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"../nav.component\";\r\nimport {NavigationService} from \"../../services/navigation.service\";\r\nimport {NavigationGlobalService} from \"../../services/navigation-global.service\";\r\nimport {SearchTreeControllerComponent} from \"./search-tree-controller.component\";\r\nimport {TreeComponent, ITreeOptions, TreeModel} from \"@huntsman-cancer-institute/angular-tree-component\";\r\nimport {ITreeNode} from \"@huntsman-cancer-institute/angular-tree-component/lib/defs/api\";\r\n\r\n\r\n@ComponentType(\"SearchTreeComponent\")\r\n@Component({\r\n selector: \"hci-search-tree\",\r\n template: `\r\n <div class=\"d-flex scrollable treeBox\">\r\n <div class=\"d-flex flex-column treeBox\">\r\n <hci-busy [busySubjects]=\"loadingSubjects\" parentSelector=\".scrollable\" [icon]=\"busyIcon\"></hci-busy>\r\n <tree-root #searchTreeControl [nodes]=\"viewData\" [options]=\"searchTreeOptions\" (activate)=\"onNodeClick($event)\" (updateData)=\"onUpdateData($event)\"\r\n (moveNode)=\"onMoveNode($event)\" class=\"searchTree\">\r\n <ng-template #treeNodeTemplate let-node let-index=\"index\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {node: node}\"> </ng-container>\r\n </ng-template>\r\n </tree-root>\r\n </div>\r\n </div>\r\n\r\n <!-- Paging footer -->\r\n <div *ngIf=\"paging.pageSize > 0\" class=\"d-flex flex-shrink-0 paging-footer justify-content-between ps-3 pe-3\" style=\"min-height: 1rem; align-items: center;\">\r\n <ng-container *ngIf=\"!selectedRowGroup\">\r\n <div (click)=\"doPageFirst()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i class=\"fas fa-fast-backward fa-xs\"></i></div>\r\n <div (click)=\"doPagePrevious()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i class=\"fas fa-backward fa-xs\"></i></div>\r\n <div style=\"font-size: 0.8rem;\">{{paging.page + 1}} of {{paging.numPages}}</div>\r\n <div (click)=\"doPageNext()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\"><i class=\"fas fa-forward fa-xs\"></i></div>\r\n <div (click)=\"doPageLast()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\"><i class=\"fas fa-fast-forward fa-xs\"></i></div>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #defaultTemplate let-data=\"node.data\">\r\n <span>{{ data.name }}</span>\r\n </ng-template>\r\n `,\r\n styles: [`\r\n :host {\r\n min-height: 0px;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n flex-shrink: 1;\r\n }\r\n\r\n .treeBox {\r\n min-height: 0px;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n flex-shrink: 1;\r\n }\r\n\r\n .searchTree {\r\n height: 100%;\r\n }\r\n `]\r\n})\r\nexport class SearchTreeComponent extends NavComponent {\r\n\r\n @ViewChild(\"searchTreeControl\", {static: false}) treeComponent: TreeComponent;\r\n @ViewChild(\"defaultTemplate\", {read: TemplateRef, static: true}) defaultTemplate: TemplateRef<any>;\r\n\r\n // The data that is actually rendered.\r\n viewData: any[];\r\n\r\n // A reference to the search list controller if applicable.\r\n @Input() controller: SearchTreeControllerComponent;\r\n\r\n // An array of data.\r\n @Input(\"data\") boundData: Object[];\r\n\r\n // A subject that represents an array of data.\r\n @Input(\"dataSubject\") dataSubject: BehaviorSubject<Object[]>;\r\n\r\n // A function which takes in a HciGridDto and returns a HciDataDto which wraps an array of data.\r\n @Input(\"dataCall\") externalDataCall: (dto: HciGridDto) => Observable<HciDataDto>;\r\n\r\n @Input(\"searchTreeOptions\") searchTreeOptions: any;\r\n\r\n @Input() itemTemplate: TemplateRef<any>;\r\n\r\n // An array of subjects with booleans to control the hci-busy overlaying the search-list.\r\n @Input() loadingSubjects: Subject<boolean>[];\r\n\r\n // An array of booleans to control the hci-busy overlaying the search-list.\r\n @Input() loading: boolean[] = [false];\r\n\r\n // If clicking a row changes a route, this function specifies the route to use.\r\n @Input() route: (rowGroup: any, row: any) => any[];\r\n\r\n // The page size of row groups or rows if no grouping.\r\n @Input() pageSize: number;\r\n\r\n // A reference to a parent dropdown if applicable.\r\n @Input() dropdown: NgbDropdown;\r\n\r\n //Which icon to use for the busy spinner\r\n @Input() busyIcon: string = \"fas fa-sync fa-spin\";\r\n //Either an array of node ids for expanding or a string 'all' for expanding whole tree\r\n @Input() expandTreeNodeIDs: string | any[];\r\n\r\n @Input() onClick: (cmpt: SearchTreeComponent, tree: TreeComponent, event: any) => void;\r\n\r\n @Input() onNodeMoved: (cmpt: SearchTreeComponent, tree: TreeComponent, event: any) => void;\r\n\r\n @Input() onDataUpdate: (cmpt: SearchTreeComponent, tree: TreeComponent, event: any) => void;\r\n\r\n @Output() nodeSelected: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() dataChange: EventEmitter<any> = new EventEmitter<any>();\r\n \r\n @Input() sortChildren: boolean = true;\r\n\r\n\r\n // Grid DTO info needed to build external data requests.\r\n sorts: HciSortDto[] = [];\r\n filters: HciFilterDto[] = [];\r\n paging: HciPagingDto = new HciPagingDto(0, -1);\r\n pagingSubject: Subject<HciPagingDto> = new BehaviorSubject<HciPagingDto>(this.paging);\r\n\r\n defaultSearchTreeOptions: ITreeOptions = {\r\n idField: \"id\",\r\n displayField: \"name\",\r\n childrenField: \"children\",\r\n useVirtualScroll: true,\r\n nodeHeight: 22\r\n };\r\n\r\n // A dummy number that increments based on selection changes. Forces routerLinkActive to recheck.\r\n rowRefresh: number = 0;\r\n\r\n busy: boolean = false;\r\n\r\n lastScrollTop: number = -1;\r\n lastScrollPosition: number = 1;\r\n setScrollTop: boolean = false;\r\n\r\n cmpt: SearchTreeComponent = this;\r\n\r\n lastEvent: any;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n @Optional() navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n if (!navigationService) {\r\n this.navigationService = new NavigationService(navigationGlobalService);\r\n }\r\n\r\n if (this.navigationService.getId() === undefined) {\r\n this.isRoot = true;\r\n this.setConfig({});\r\n }\r\n }\r\n\r\n /**\r\n * On init, listen for loading subjects and listen for page changes.\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].subscribe((busy: boolean) => {\r\n this.busy = busy;\r\n });\r\n }\r\n\r\n this.pagingSubject.subscribe((paging: HciPagingDto) => {\r\n this.paging = paging;\r\n this.setData();\r\n });\r\n }\r\n\r\n /**\r\n * Called when inputs change.\r\n *\r\n * @param {SimpleChanges} changes\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n super.ngOnChanges(changes);\r\n\r\n this.refreshTree();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n if (this.treeComponent.treeModel && this.expandTreeNodeIDs ) {\r\n setTimeout(() => {\r\n let treeModel: TreeModel = this.treeComponent.treeModel;\r\n if(Array.isArray(this.expandTreeNodeIDs)) {\r\n for(let nodeId of this.expandTreeNodeIDs) {\r\n let node: ITreeNode = treeModel.getNodeById(nodeId);\r\n if(node) {\r\n node.expand();\r\n }\r\n }\r\n } else if(typeof this.expandTreeNodeIDs === \"string\"\r\n && this.expandTreeNodeIDs === \"all\") {\r\n treeModel.expandAll();\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Set data only when the component has fully initialized and is rendered.\r\n */\r\n checkInitialized() {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.postInit();\r\n\r\n if (this.dataSubject) {\r\n //May as well make it spin while processing, as well as loading. Otherwise it looks frozen\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(true);\r\n }\r\n\r\n this.dataSubject\r\n .pipe(delay(0))\r\n .subscribe((data: Object[]) => {\r\n this.boundData = data;\r\n this.setData();\r\n\r\n //Now done loading\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(false);\r\n }\r\n });\r\n } else {\r\n this.setData();\r\n }\r\n }\r\n }\r\n\r\n postInit(): void {\r\n if (isDevMode()) {\r\n console.debug(\"SearchTreeComponent.postInit: \" + this.id);\r\n }\r\n\r\n if (this.getParent()) {\r\n this.controller = <SearchTreeControllerComponent>this.getParent().getComponentByType(\"SearchTreeControllerComponent\");\r\n }\r\n\r\n if (this.controller) {\r\n if (isDevMode()) {\r\n console.debug(\"SearchTreeComponent: using controller\");\r\n }\r\n\r\n this.controller.addSearchList(this.title);\r\n\r\n this.controller.filtersSubject.subscribe((filters: HciFilterDto[]) => {\r\n this.filters = filters;\r\n this.setData();\r\n this.resetPaging();\r\n });\r\n\r\n this.controller.sortsSubject.subscribe((sorts: HciSortDto[]) => {\r\n this.sorts = sorts;\r\n this.setData();\r\n });\r\n\r\n this.controller.selectedSearchListSubject.subscribe((title: string) => {\r\n if (isDevMode()) {\r\n console.debug(\"selectedSearchListSubject.subscribe: \" + this.title + \", \" + title);\r\n }\r\n\r\n let visible: boolean = true;\r\n\r\n if (this.title && title && this.title !== title) {\r\n visible = false;\r\n }\r\n\r\n if (visible) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"flex\");\r\n } else {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"none\");\r\n }\r\n\r\n this.refreshTree();\r\n });\r\n\r\n this.refreshTree();\r\n }\r\n }\r\n\r\n /**\r\n * This function would reset paging and fires\r\n */\r\n resetPaging(){\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n\r\n /**\r\n * Updates the config with options and re-fetches data.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfig\");\r\n }\r\n\r\n if (config) {\r\n this.config = Object.assign({}, this.config, config);\r\n\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n if (config.pageSize) {\r\n this.pageSize = config.pageSize;\r\n this.paging.setPageSize(config.pageSize);\r\n }\r\n if (config.data) {\r\n this.boundData = config.data;\r\n }\r\n if (config.dataSubject) {\r\n this.dataSubject = config.dataSubject;\r\n }\r\n if (config.dataCall) {\r\n this.externalDataCall = config.dataCall;\r\n }\r\n if (config.searchTreeOptions) {\r\n this.searchTreeOptions = config.searchTreeOptions;\r\n } else {\r\n this.searchTreeOptions = this.defaultSearchTreeOptions;\r\n }\r\n if (config.itemTemplate) {\r\n this.itemTemplate = config.itemTemplate;\r\n }\r\n if (!this.itemTemplate) {\r\n this.itemTemplate = this.defaultTemplate;\r\n }\r\n\r\n if (config.loadingSubjects) {\r\n this.loadingSubjects = config.loadingSubjects;\r\n }\r\n if (config.onClick) {\r\n this.onClick = config.onClick;\r\n }\r\n if (config.onNodeMoved) {\r\n this.onNodeMoved = config.onNodeMoved;\r\n }\r\n if(config.onDataUpdate) {\r\n this.onDataUpdate = config.onDataUpdate;\r\n }\r\n if(config.expandTreeNodeIDs) {\r\n this.expandTreeNodeIDs = config.expandTreeNodeIDs;\r\n }\r\n }\r\n\r\n if (this.externalDataCall) {\r\n this.loadingSubjects = [new BehaviorSubject<boolean>(false)];\r\n }\r\n\r\n super.updateConfig(config);\r\n\r\n this.setData();\r\n }\r\n\r\n /**\r\n * Generates the data if an array, calls the data if external call.\r\n */\r\n setData(data?: Object[]): void {\r\n if (isDevMode()) {\r\n console.debug(\"setData\");\r\n }\r\n\r\n if (data) {\r\n this.boundData = data;\r\n }\r\n\r\n\r\n if (this.externalDataCall) {\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n\r\n this.externalDataCall(new HciGridDto(this.filters, this.sorts, this.paging, new HciGroupingDto()))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.generateData(externalData);\r\n });\r\n }\r\n } else {\r\n this.generateData();\r\n }\r\n }\r\n\r\n /**\r\n * Generates the data array that the interface uses to render (regardless of source).\r\n *\r\n * @param {HciDataDto} externalData\r\n */\r\n generateData(externalData?: HciDataDto): void {\r\n if (isDevMode()) {\r\n console.debug(\"generateData\");\r\n console.debug(externalData);\r\n }\r\n\r\n if (externalData) {\r\n this.boundData = externalData.data;\r\n this.paging.setDataSize(externalData.gridDto.paging.dataSize);\r\n\r\n // Create row groups.\r\n this.viewData = [];\r\n\r\n for (let i = 0; i < this.boundData.length; i++) {\r\n this.viewData.push(this.boundData[i]);\r\n }\r\n } else {\r\n // Create and populate row groups.\r\n this.populateFromBoundData();\r\n }\r\n\r\n this.detectChanges();\r\n this.dataChange.emit(Object.assign({type: \"none\"}, this.lastEvent, {paging: this.paging, nViewData: this.viewData.length}));\r\n }\r\n\r\n /**\r\n * Generates the data if the data is an array (not external).\r\n */\r\n populateFromBoundData(): void {\r\n\r\n if (isDevMode()) {\r\n console.debug(\"populateFromBoundData\");\r\n console.debug(this.boundData);\r\n }\r\n\r\n if (!this.boundData) {\r\n this.viewData = [];\r\n this.paging.setPage(0);\r\n return;\r\n }\r\n\r\n if (this.boundData.length === 0) {\r\n console.debug(\"Bound Data length found as 0\");\r\n this.paging.setPage(0);\r\n this.paging.setNumPages(1);\r\n this.paging.setDataSize(0);\r\n }\r\n\r\n let preparedData = this.filterTreeIncludeChildren(this.boundData);\r\n\r\n if (this.sorts.length > 0) {\r\n this.sortData(preparedData);\r\n }\r\n\r\n this.paging.setDataSize(preparedData.length);\r\n\r\n\r\n if (this.paging.getPageSize() > 0) {\r\n this.viewData = [];\r\n for (var i = this.paging.getPage() * this.paging.getPageSize(); i < Math.min(preparedData.length, (this.paging.getPage() + 1) * this.paging.getPageSize()); i++) {\r\n this.viewData.push(preparedData[i]);\r\n }\r\n } else {\r\n this.paging.setDataSize(preparedData.length);\r\n this.viewData = preparedData;\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"Filtered Tree Data:\");\r\n console.debug(this.viewData);\r\n }\r\n\r\n this.refreshTree();\r\n }\r\n \r\n sortData(data: any) {\r\n data.sort((a: any, b: any) => {\r\n let v: number = 0;\r\n\r\n for (let sort of this.sorts) {\r\n if (sort.getAsc()) {\r\n if (this.upper(a[sort.getField()]) < this.upper(b[sort.getField()])) {\r\n v = -1;\r\n } else if (this.upper(a[sort.getField()]) > this.upper(b[sort.getField()])) {\r\n v = 1;\r\n }\r\n } else {\r\n if (this.upper(a[sort.getField()]) > this.upper(b[sort.getField()])) {\r\n v = -1;\r\n } else if (this.upper(a[sort.getField()]) < this.upper(b[sort.getField()])) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n }\r\n\r\n return v;\r\n });\r\n \r\n //Sort children\r\n if (this.sortChildren) {\r\n for (let child of data) {\r\n if (child[this.searchTreeOptions.childrenField]) {\r\n this.sortData(child[this.searchTreeOptions.childrenField]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n upper(value: Object) {\r\n if (value && value != null) {\r\n return value.toString().toUpperCase();\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n refreshTree () {\r\n this.treeComponent.treeModel.update();\r\n this.treeComponent.sizeChanged();\r\n }\r\n\r\n /**\r\n * Recursive tree search. It will include children nodes if a parent node matches the search string.\r\n *\r\n * @param {any[]} data\r\n * @returns {any[]}\r\n */\r\n filterTreeIncludeChildren(data: any[]): any[] {\r\n if (isDevMode()) {\r\n console.debug(\"filterTreeIncludeChildren\");\r\n }\r\n let filteredData: any[] = [];\r\n for (let child of data) {\r\n if (this.includeNode(child)) {\r\n filteredData.push(child);\r\n }\r\n else {\r\n if (child[this.searchTreeOptions.childrenField]) {\r\n let filteredChildren = this.filterTreeIncludeChildren(child[this.searchTreeOptions.childrenField]);\r\n if (filteredChildren.length > 0) {\r\n //Copy the node and replace its children with the filtered children\r\n let node: any = Object.assign({}, child);\r\n node[this.searchTreeOptions.childrenField] = filteredChildren;\r\n filteredData.push(node);\r\n }\r\n }\r\n }\r\n }\r\n return filteredData;\r\n }\r\n\r\n\r\n includeNode(row: any): boolean {\r\n let include: boolean = true;\r\n\r\n if (this.filters && this.filters.length > 0) {\r\n\r\n for (let filter of this.filters) {\r\n if (!filter.valid || !filter.getValue() || filter.getValue() === \"\") {\r\n continue;\r\n }\r\n\r\n if (filter.getField().indexOf(\" or \") !== -1) {\r\n let innerInclude: boolean = false;\r\n\r\n for (let field of filter.getField().split(\" or \")) {\r\n if (row[field] && row[field].toLowerCase().indexOf(filter.getValue().toLowerCase()) !== -1) {\r\n innerInclude = true;\r\n }\r\n }\r\n\r\n if (!innerInclude) {\r\n include = false;\r\n }\r\n } else {\r\n if (!row[filter.field]) {\r\n include = false;\r\n break;\r\n } else if (row[filter.field].toLowerCase().indexOf(filter.getValue().toLowerCase()) === -1) {\r\n include = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return include;\r\n }\r\n onUpdateData(event: any): void {\r\n if (this.onDataUpdate) {\r\n this.onDataUpdate(this, this.treeComponent, event);\r\n }\r\n }\r\n\r\n onMoveNode(event: any): void {\r\n if (this.onNodeMoved) {\r\n this.onNodeMoved(this, this.treeComponent, event);\r\n }\r\n }\r\n\r\n onNodeClick(event: any): void {\r\n if (this.onClick) {\r\n this.onClick(this, this.treeComponent, event);\r\n }\r\n\r\n if (this.treeComponent.treeModel.activeNodes.length > 0) {\r\n this.nodeSelected.emit({\r\n event: event,\r\n id: this.treeComponent.treeModel.activeNodes[0].data.id,\r\n node: this.treeComponent.treeModel.activeNodes[0]\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Go to the first page.\r\n */\r\n public doPageFirst(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n\r\n /**\r\n * Go to the previous page.\r\n */\r\n public doPagePrevious(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() > 0) {\r\n this.paging.setPage(this.paging.getPage() - 1);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the next page.\r\n */\r\n public doPageNext(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() < this.paging.getNumPages() - 1) {\r\n this.paging.setPage(this.paging.getPage() + 1);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the last page.\r\n */\r\n public doPageLast(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(this.paging.getNumPages() - 1);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n\r\n\r\n //TODo : Handle the case where the user uses a custom groupTemplate\r\n /**\r\n * This function will cause SearchListComponent to navigate to a page and highlight the given group item, or\r\n * the row (in-case of non-grouped list)\r\n * This\r\n * @param groupId : This should contain a string to uniquely identify a particular group-display\r\n * @param rowId : This is the actual rowId for the row to be selected.\r\n */\r\n navigateToPageContainingElement(id: any){\r\n\r\n if (this.boundData.length === 0) {\r\n return;\r\n }\r\n\r\n this.boundData.forEach((row, index) => {\r\n if (row[\"id\"] === id) {\r\n if (!this.busy) {\r\n let page = Math.floor(index / this.paging.getPageSize());\r\n if (this.paging.getNumPages() - 1 >= page) {\r\n this.paging.setPage(page);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {RouterModule} from \"@angular/router\";\r\nimport {MatButtonToggleModule} from \"@angular/material/button-toggle\";\r\nimport {MatLegacyInputModule as MatInputModule} from \"@angular/material/legacy-input\";\r\nimport {MatIconModule} from \"@angular/material/icon\";\r\nimport {MatLegacyButtonModule as MatButtonModule} from \"@angular/material/legacy-button\";\r\nimport {MatLegacyRadioModule as MatRadioModule} from \"@angular/material/legacy-radio\";\r\nimport {TreeModule} from \"@huntsman-cancer-institute/angular-tree-component\";\r\nimport {MatDatepickerModule} from \"@angular/material/datepicker\";\r\nimport {MatLegacySelectModule as MatSelectModule} from \"@angular/material/legacy-select\";\r\nimport {NgbModule, NgbNavModule} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {MiscModule} from \"@huntsman-cancer-institute/misc\";\r\nimport {UlNavComponent} from \"./components/ul-nav.component\";\r\nimport {LiNavComponent} from \"./components/li-nav.component\";\r\nimport {LiDdNavComponent} from \"./components/li-dd-nav.component\";\r\nimport {DivNavComponent} from \"./components/div-nav.component\";\r\nimport {BrandNavComponent} from \"./components/brand-nav.component\";\r\nimport {LiExpNavComponent} from \"./components/li-exp-nav.component\";\r\nimport {BadgeComponent} from \"./components/badge.component\";\r\nimport {TemplateComponent} from \"./components/template.component\";\r\nimport {SearchListComponent} from \"./components/search-list/search-list.component\";\r\nimport {NavigationGlobalService} from \"./services/navigation-global.service\";\r\nimport {TopMarginDirective} from \"./directives/top-margin.directive\";\r\nimport {AppHeaderComponent} from \"./impl/app-header.component\";\r\nimport {AppFooterComponent} from \"./impl/app-footer.component\";\r\nimport {SidebarComponent} from \"./impl/sidebar.component\";\r\nimport {SearchListControllerComponent} from \"./components/search-list/search-list-controller.component\";\r\nimport {SearchTreeComponent} from \"./components/search-tree/search-tree.component\";\r\nimport {SearchTreeControllerComponent} from \"./components/search-tree/search-tree-controller.component\";\r\nimport { MatNativeDateModule } from \"@angular/material/core\";\r\nimport { MatLegacyCheckboxModule as MatCheckboxModule } from '@angular/material/legacy-checkbox';\r\nimport {NavComponent} from \"./components/nav.component\";\r\nimport {RIRippleEffectDirective} from './directives/ri-ripple-effect.directive';\r\n\r\n\r\n/**\r\n * The main @huntsman-cancer-institute/navigation module. The module exports all components that an implementation might use\r\n * and the forRoot() provides a global service for an implementing application.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n RouterModule,\r\n MiscModule,\r\n NgbModule,\r\n MatButtonModule,\r\n MatButtonToggleModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n\t MatCheckboxModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n TreeModule,\r\n NgbNavModule\r\n ],\r\n providers: [\r\n MatDatepickerModule,\r\n ],\r\n declarations: [\r\n NavComponent,\r\n AppHeaderComponent,\r\n AppFooterComponent,\r\n SidebarComponent,\r\n UlNavComponent,\r\n LiNavComponent,\r\n LiDdNavComponent,\r\n DivNavComponent,\r\n BrandNavComponent,\r\n LiExpNavComponent,\r\n BadgeComponent,\r\n TemplateComponent,\r\n SearchListControllerComponent,\r\n SearchListComponent,\r\n SearchTreeControllerComponent,\r\n SearchTreeComponent,\r\n TopMarginDirective,\r\n RIRippleEffectDirective\r\n ],\r\n exports: [\r\n AppHeaderComponent,\r\n AppFooterComponent,\r\n SidebarComponent,\r\n UlNavComponent,\r\n LiNavComponent,\r\n LiDdNavComponent,\r\n BrandNavComponent,\r\n LiExpNavComponent,\r\n DivNavComponent,\r\n BadgeComponent,\r\n TemplateComponent,\r\n SearchListControllerComponent,\r\n SearchListComponent,\r\n SearchTreeControllerComponent,\r\n SearchTreeComponent,\r\n TopMarginDirective,\r\n RIRippleEffectDirective\r\n ]\r\n})\r\nexport class NavigationModule {\r\n static forRoot(): ModuleWithProviders<NavigationModule> {\r\n return {\r\n providers: [\r\n NavigationGlobalService\r\n ],\r\n ngModule: NavigationModule\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * A barrel file for the navigation package.\r\n *\r\n * @since 1.0.0\r\n */\r\n\r\nexport {NavigationModule} from \"./navigation.module\";\r\n\r\nexport {NavigationService} from \"./services/navigation.service\";\r\nexport {NavigationGlobalService} from \"./services/navigation-global.service\";\r\n\r\nexport {AppHeaderComponent} from \"./impl/app-header.component\";\r\nexport {AppFooterComponent} from \"./impl/app-footer.component\";\r\nexport {SidebarComponent} from \"./impl/sidebar.component\";\r\n\r\nexport {NavComponent} from \"./components/nav.component\";\r\nexport {UlNavComponent} from \"./components/ul-nav.component\";\r\nexport {LiNavComponent} from \"./components/li-nav.component\";\r\nexport {LiDdNavComponent} from \"./components/li-dd-nav.component\";\r\nexport {DivNavComponent} from \"./components/div-nav.component\";\r\nexport {BrandNavComponent} from \"./components/brand-nav.component\";\r\nexport {LiExpNavComponent} from \"./components/li-exp-nav.component\";\r\nexport {TemplateComponent} from \"./components/template.component\";\r\nexport {SearchListControllerComponent} from \"./components/search-list/search-list-controller.component\";\r\nexport {SearchListComponent} from \"./components/search-list/search-list.component\";\r\nexport {SearchTreeControllerComponent} from \"./components/search-tree/search-tree-controller.component\";\r\nexport {SearchTreeComponent} from \"./components/search-tree/search-tree.component\";\r\nexport {RowGroup} from \"./components/search-list/row-group\";\r\n\r\nexport {BadgeComponent} from \"./components/badge.component\";\r\nexport {TopMarginDirective} from \"./directives/top-margin.directive\";\r\nexport {RIRippleEffectDirective} from \"./directives/ri-ripple-effect.directive\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.NavigationGlobalService","i1.NavigationService","__decorate","i2","i3","i4.BadgeComponent","i5.RIRippleEffectDirective","__metadata","i2.NavigationService","i4","i6","i15.RIRippleEffectDirective","i5","i1","MatButtonModule","MatInputModule","MatCheckboxModule","MatRadioModule","MatSelectModule"],"mappings":"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"}
1
+ {"version":3,"file":"huntsman-cancer-institute-navigation.mjs","sources":["../../../projects/navigation/src/services/navigation-global.service.ts","../../../projects/navigation/src/services/navigation.service.ts","../../../projects/navigation/src/components/nav.component.ts","../../../projects/navigation/src/components/ul-nav.component.ts","../../../projects/navigation/src/components/badge.component.ts","../../../projects/navigation/src/directives/ri-ripple-effect.directive.ts","../../../projects/navigation/src/components/li-nav.component.ts","../../../projects/navigation/src/components/li-dd-nav.component.ts","../../../projects/navigation/src/components/div-nav.component.ts","../../../projects/navigation/src/components/brand-nav.component.ts","../../../projects/navigation/src/components/li-exp-nav.component.ts","../../../projects/navigation/src/components/template.component.ts","../../../projects/navigation/src/components/search-list/row-group.ts","../../../projects/navigation/src/components/search-list/search-list-controller.component.ts","../../../projects/navigation/src/components/search-list/search-list.component.ts","../../../projects/navigation/src/directives/top-margin.directive.ts","../../../projects/navigation/src/impl/app-header.component.ts","../../../projects/navigation/src/impl/app-footer.component.ts","../../../projects/navigation/src/impl/sidebar.component.ts","../../../projects/navigation/src/components/search-tree/search-tree-controller.component.ts","../../../projects/navigation/src/components/search-tree/search-tree.component.ts","../../../projects/navigation/src/navigation.module.ts","../../../projects/navigation/src/index.ts","../../../projects/navigation/src/huntsman-cancer-institute-navigation.ts"],"sourcesContent":["import {Injectable, isDevMode} from \"@angular/core\";\r\n\r\nimport {Subject} from \"rxjs\";\r\n\r\nimport {NavigationService} from \"./navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\n\r\n/**\r\n * A singleton service that when a navigation component is instantiated, will register itself and its service with\r\n * this global service. That way any navigation component or service can be referenced from anywhere in the\r\n * implementing application.\r\n */\r\n@Injectable()\r\nexport class NavigationGlobalService {\r\n\r\n uniqueId: number = 0;\r\n\r\n serviceMap: Map<string, NavigationService> = new Map<string, NavigationService>();\r\n componentMap: Map<string, NavComponent> = new Map<string, NavComponent>();\r\n\r\n notificationEvent: Subject<boolean> = new Subject<boolean>();\r\n\r\n getNavigationComponent(id: string): NavComponent {\r\n return this.componentMap.get(id);\r\n }\r\n\r\n getNavigationService(id: string): NavigationService {\r\n return this.serviceMap.get(id);\r\n }\r\n\r\n /**\r\n * For a root navigation component to call when first instantiated. Stores a reference of that component and service\r\n * in a map that is referenced by id.\r\n *\r\n * @param {string} id\r\n * @param {NavComponent} navComponent\r\n * @param {NavigationService} navigationService\r\n */\r\n register(id: string, navComponent: NavComponent, navigationService: NavigationService) {\r\n if (isDevMode()) {\r\n console.info(\"NavigationGlobalService.register: \" + id);\r\n }\r\n\r\n if (id) {\r\n this.componentMap.set(id, navComponent);\r\n this.serviceMap.set(id, navigationService);\r\n }\r\n }\r\n\r\n getNotificationEventSubject(): Subject<boolean> {\r\n return this.notificationEvent;\r\n }\r\n\r\n /**\r\n * Currently, a simple way for navigation components to be made aware of potential changes external to itself.\r\n */\r\n pushNotificationEvent(): void {\r\n this.notificationEvent.next(true);\r\n }\r\n}\r\n","import {Injectable, isDevMode, Type} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subject} from \"rxjs\";\r\n\r\nimport {RoleEntity} from \"@huntsman-cancer-institute/user\";\r\n\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"./navigation-global.service\";\r\n\r\n/**\r\n * This service manages injected components and handles events between components.\r\n */\r\n@Injectable()\r\nexport class NavigationService {\r\n\r\n private id: string;\r\n private idNavComponent: number = -1;\r\n\r\n private registeredComponents: Map<string, NavComponent> = new Map<string, NavComponent>();\r\n private eventMap: Map<string, Subject<string>> = new Map<string, Subject<string>>();\r\n private userRoles: BehaviorSubject<RoleEntity[]> = new BehaviorSubject<RoleEntity[]>([]);\r\n\r\n constructor(private navigationGlobalService: NavigationGlobalService) {}\r\n\r\n setRootComponent(id: string, navComponent: NavComponent): void {\r\n this.id = id;\r\n this.navigationGlobalService.register(id, navComponent, this);\r\n }\r\n\r\n getId(): string {\r\n return this.id;\r\n }\r\n\r\n getIdNavComponent(): string {\r\n this.idNavComponent++;\r\n return \"nav-component-\" + this.idNavComponent;\r\n }\r\n\r\n insertAfter(id: string, config: any) {\r\n this.registeredComponents.get(id).getParent().insertAfter(id, config);\r\n }\r\n\r\n insertBefore(id: string, config: any) {\r\n this.registeredComponents.get(id).getParent().insertBefore(id, config);\r\n }\r\n\r\n setUserRoles(userRoles: RoleEntity[]) {\r\n this.userRoles.next(userRoles);\r\n }\r\n\r\n getUserRoles(): BehaviorSubject<RoleEntity[]> {\r\n return this.userRoles;\r\n }\r\n\r\n registerEvent(event: string) {\r\n this.eventMap.set(event, new Subject<string>());\r\n }\r\n\r\n emitEvent(event: string, value: string) {\r\n this.eventMap.get(event).next(value);\r\n }\r\n\r\n getEvent(event: string): Subject<string> {\r\n return this.eventMap.get(event);\r\n }\r\n\r\n registerComponent(id: string, component: NavComponent) {\r\n if (id !== undefined) {\r\n this.registeredComponents.set(id, component);\r\n if (isDevMode()) {\r\n console.debug(\"registerComponent: \" + id + \" \" + component.typeName);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Return a component by its id.\r\n *\r\n * @param {string} id\r\n * @returns {NavComponent}\r\n */\r\n getComponent(id: string): NavComponent {\r\n return this.registeredComponents.get(id);\r\n }\r\n\r\n /**\r\n * Return a component by its type.\r\n *\r\n * @param {string} type\r\n * @returns {NavComponent}\r\n */\r\n getComponentByType(type: string): NavComponent {\r\n if (isDevMode()) {\r\n console.debug(\"getComponentByType: \" + type);\r\n }\r\n\r\n for (let navComponent of this.registeredComponents.values()) {\r\n if (type === navComponent.typeName) {\r\n return navComponent;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n Input,\r\n isDevMode,\r\n Renderer2,\r\n SimpleChange,\r\n Type,\r\n ViewContainerRef,\r\n ViewRef,\r\n OnInit,\r\n AfterViewInit,\r\n OnChanges,\r\n OnDestroy,\r\n Component\r\n} from \"@angular/core\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\nimport {RoleEntity} from \"@huntsman-cancer-institute/user\";\r\nimport {ComponentInjector} from \"@huntsman-cancer-institute/utils\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n/**\r\n * This is the base class that all navigation components extend from. This includes other standalone modules such\r\n * as a header or sidebar. It contains common properties, configuration tools, and functions to add/insert other\r\n * NavComponents.\r\n * The config property is any object that contains a list of properties that specifies configuration options. Common\r\n * properties include id, title, rootClass and roleName. Extending classes may have their own properties such as extra\r\n * css classes.\r\n */\r\n@Component(\r\n {\r\n template:\r\n `\r\n `,\r\n selector: \"hci-nav\"\r\n }\r\n)\r\nexport class NavComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\r\n\r\n @Input() config: any = {\r\n rendered: true\r\n };\r\n @Input(\"navId\") id: string;\r\n @Input() isRoot: boolean = false;\r\n @Input() type: Type<any> | string;\r\n @Input() title: string;\r\n @Input() rootClass: string;\r\n @Input() roleName: string;\r\n @Input() authenticatedKey: string = \"AUTHC\";\r\n @Input() notAuthenticatedKey: string = \"NOT_AUTHC\";\r\n @Input(\"children\") inputChildren: any[] = [];\r\n @Input() isCCR: boolean = false;\r\n /**\r\n * An array of all component instances of children. It is important to note that we try to render everything in the\r\n * children array. However, if roles are not met, some children may not be rendered so no component instance will\r\n * exist for them.\r\n */\r\n children: NavComponent[] = [];\r\n\r\n typeName: string;\r\n\r\n elementRef: ElementRef;\r\n renderer: Renderer2;\r\n resolver: ComponentFactoryResolver;\r\n navigationService: NavigationService;\r\n changeDetectorRef: ChangeDetectorRef;\r\n\r\n afterViewInit: boolean = false;\r\n initialized: boolean = false;\r\n\r\n /**\r\n * A set of container names. Some components may not define a container while others just have\r\n * one (a \"default\" container).\r\n */\r\n containerSet: Set<string> = new Set<string>();\r\n\r\n /**\r\n * A map of IDs to the corresponding viewRef. When we dynamically inject a new component, we first pull the created\r\n * ComponentRef and from there its ViewRef. We need the ViewRef to determine the component's position in the\r\n * ViewContainerRef. With a set of ViewRefs, we can detach them from the container and re-add them in a different order\r\n * based on the component's sortOrder (which is based on the position in the children array. This map provides the\r\n * component to view relationship.\r\n */\r\n private viewRefMap: Map<string, ViewRef> = new Map<string, ViewRef>();\r\n\r\n /**\r\n * A reference to the parent component. When a child is added, a reference to the parent is automatically set.\r\n */\r\n private parent: NavComponent;\r\n\r\n subscriptions: Subscription = new Subscription();\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n this.elementRef = elementRef;\r\n this.renderer = renderer;\r\n this.resolver = resolver;\r\n this.navigationService = navigationService;\r\n this.changeDetectorRef = changeDetectorRef;\r\n\r\n this.containerSet.add(\"default\");\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.isRoot) {\r\n this.subscriptions.add(this.navigationService.getUserRoles().subscribe((userRoles: RoleEntity[]) => {\r\n if (isDevMode()) {\r\n console.debug(\"User Roles changed. Refresh children.\");\r\n }\r\n this.refreshChildren();\r\n }));\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.ngAfterViewInit\");\r\n }\r\n\r\n this.afterViewInit = true;\r\n this.checkInitialized();\r\n }\r\n\r\n /**\r\n * If config is bound by input, reset the config when it changes. An important note, if anything in the config was\r\n * updated by updateConfig only, then those options will be lost.\r\n *\r\n * @param {{[p: string]: SimpleChange}} changes\r\n */\r\n ngOnChanges(changes: { [propName: string]: SimpleChange }): void {\r\n if (isDevMode()) {\r\n console.debug(\"ngOnChanges:\");\r\n console.debug(changes);\r\n }\r\n\r\n for (let change of Object.keys(changes)) {\r\n if (change !== \"config\") {\r\n this[change] = changes[change].currentValue;\r\n\r\n if (change === \"inputChildren\") {\r\n this.config[\"children\"] = changes[change].currentValue;\r\n } else {\r\n this.config[change] = changes[change].currentValue;\r\n }\r\n }\r\n }\r\n\r\n if (changes[\"config\"]) {\r\n this.setConfig(this.config);\r\n }\r\n\r\n if (changes[\"id\"]) {\r\n this.setId();\r\n }\r\n if (changes[\"rootClass\"]) {\r\n this.setRootClass();\r\n }\r\n if (changes[\"inputChildren\"]) {\r\n this.setChildren();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.changeDetectorRef) {\r\n this.changeDetectorRef.detach();\r\n }\r\n\r\n this.subscriptions.unsubscribe();\r\n }\r\n\r\n checkInitialized(): void {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.detectChanges();\r\n this.postInit();\r\n }\r\n }\r\n\r\n postInit(): void {\r\n }\r\n\r\n getNavigationService() {\r\n return this.navigationService;\r\n }\r\n\r\n /**\r\n * Remove all children.\r\n */\r\n clear(): void {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.clear\");\r\n }\r\n\r\n for (let i = 0; i < this.children.length; i++) {\r\n this.remove(this.children[i], i);\r\n }\r\n\r\n this.children = [];\r\n }\r\n\r\n refresh() {\r\n let isRendered: boolean = false;\r\n if (this.config.rendered !== undefined) {\r\n isRendered = this.config.rendered;\r\n }\r\n }\r\n\r\n /**\r\n * Checks children and sees if there is a change in rendering status. If a permission goes away, a component that\r\n * is currently rendered might need to be removed. Recursively move through the tree of children.\r\n */\r\n refreshChildren() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (this.config.children) {\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n if (isDevMode()) {\r\n console.debug(\"refreshChildren: \" + i);\r\n }\r\n\r\n let render = this.canRender(this.config.children[i]);\r\n\r\n let isRendered: boolean = false;\r\n if (this.config.children[i].rendered !== undefined) {\r\n isRendered = this.config.children[i].rendered;\r\n }\r\n\r\n if (render && !isRendered) {\r\n this.add(this.config.children[i], i);\r\n } else if (!render && isRendered) {\r\n this.remove(this.config.children[i], i);\r\n }\r\n }\r\n }\r\n\r\n // Recursively check children\r\n for (let component of this.children) {\r\n component.refreshChildren();\r\n }\r\n\r\n this.sortContainers();\r\n\r\n this.detectChanges();\r\n }\r\n\r\n /**\r\n * Using the sortOrder property of each component, detach each ViewRef from the container, and re-attach based\r\n * on the sortOrder.\r\n */\r\n sortContainers() {\r\n if (this.config.children === undefined || !this.initialized) {\r\n return;\r\n }\r\n\r\n // Sort the children. It doesn't matter that this list may contain children in multiple containers.\r\n let sortedChildren = this.config.children.sort((a: any, b: any) => {\r\n if (a.sortOrder < b.sortOrder) {\r\n return -1;\r\n } else if (a.sortOrder > b.sortOrder) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n for (let containerName of this.containerSet) {\r\n let container: ViewContainerRef = this.getContainer(containerName);\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < sortedChildren.length; i++) {\r\n if (!sortedChildren[i].id) {\r\n continue;\r\n } else if (sortedChildren[i].container !== containerName) {\r\n // Children is a list possibly spanning multiple containers. Skip if not on the current container.\r\n continue;\r\n }\r\n\r\n if (this.viewRefMap.get(sortedChildren[i].id)) {\r\n if (isDevMode()) {\r\n console.debug(\"sortChildren: i: \" + i + \", id: \" + sortedChildren[i].id + \", destroyed: \" + this.viewRefMap.get(sortedChildren[i].id).destroyed);\r\n }\r\n\r\n if (!this.viewRefMap.get(sortedChildren[i].id).destroyed) {\r\n container.insert(this.viewRefMap.get(sortedChildren[i].id));\r\n } else {\r\n this.viewRefMap.delete(sortedChildren[i].id);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove a component by id from its parent container.\r\n *\r\n * @param componentConfig\r\n * @param {number} index\r\n */\r\n remove(componentConfig: any, index: number) {\r\n if (!this.config.children || !this.config.children[index]) {\r\n console.warn(\"NavComponent: Child \" + index + \" does not exist on \" + this.config.id);\r\n return;\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.remove: \" + componentConfig.id);\r\n }\r\n if (componentConfig.children) {\r\n for (let i = 0; i < componentConfig.children.length; i++) {\r\n let renderedChild: NavComponent = this.getChild(componentConfig.children[i].id);\r\n if (renderedChild) {\r\n renderedChild.remove(componentConfig.children[i], i);\r\n }\r\n }\r\n }\r\n\r\n let container: ViewContainerRef;\r\n\r\n if (componentConfig.container) {\r\n container = this.getContainer(componentConfig.container);\r\n } else {\r\n container = this.getContainer();\r\n }\r\n if (this.viewRefMap.get(componentConfig.id)) {\r\n container.remove(container.indexOf(this.viewRefMap.get(componentConfig.id)));\r\n this.viewRefMap.delete(componentConfig.id);\r\n }\r\n componentConfig.rendered = false;\r\n this.config.children[index].rendered = false;\r\n\r\n this.removeChild(componentConfig.id);\r\n }\r\n\r\n removeById(id: any): void {\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.removeById: \" + id);\r\n }\r\n\r\n for (let i = 0; i < this.children.length; i++) {\r\n if (this.children[i].id == id) {\r\n this.remove(this.children[i], i);\r\n\r\n return;\r\n }\r\n }\r\n\r\n throw new Error(\"removeById: ID \" + id + \" not found.\");\r\n }\r\n\r\n /**\r\n * Checks to see if the component can be rendered based on user roles. A role can be any string, but there are hardcoded\r\n * roles NOT_AUTHC and AUTHC. If no roleName is specified, the component is always rendered. If the roleName is\r\n * NOT_AUTHC, the component will only be rendered if there is no authenticated user. If the roleName is AUTHC, the\r\n * component will be rendered if the user is authenticated. If the roleName is any string and matches a user's role,\r\n * then the component will be rendered.\r\n *\r\n * @param componentConfig\r\n * @returns {boolean}\r\n */\r\n canRender(componentConfig: any): boolean {\r\n let render: boolean = true;\r\n\r\n if (componentConfig.roleName) {\r\n render = false;\r\n let userRoles: RoleEntity[] = this.navigationService.getUserRoles().getValue();\r\n\r\n if (componentConfig.roleName === this.notAuthenticatedKey && !userRoles) {\r\n render = true;\r\n } else if (componentConfig.roleName === this.authenticatedKey && userRoles) {\r\n render = true;\r\n } else if (userRoles && userRoles.length > 0) {\r\n render = userRoles.some((role: RoleEntity) => {\r\n return role.RoleName === componentConfig.roleName;\r\n });\r\n }\r\n }\r\n\r\n return render;\r\n }\r\n\r\n getChild(id: string): NavComponent {\r\n for (let i = 0; i < this.children.length; i++) {\r\n if (this.children[i].id === id) {\r\n return this.children[i];\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n removeChild(id: string) {\r\n for (let i = 0; i < this.children.length; i++) {\r\n if (this.children[i].id === id) {\r\n this.children.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n getId(): string {\r\n return this.id;\r\n }\r\n\r\n /**\r\n * If no index is specified, add the component to the children. In all cases, see if the component can be rendered.\r\n * If so, call addComponent to handle the injection.\r\n *\r\n * @param componentConfig\r\n * @param index\r\n */\r\n add(componentConfig: any, index?: number) {\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.add: \" + index);\r\n }\r\n\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n if (index === undefined) {\r\n if (this.config.children) {\r\n index = this.config.children.length;\r\n } else {\r\n index = 0;\r\n this.config.children = [];\r\n }\r\n\r\n this.config.children.push(componentConfig);\r\n }\r\n\r\n if (this.canRender(componentConfig)) {\r\n this.addComponent(componentConfig, index);\r\n }\r\n }\r\n\r\n /**\r\n * Injects the component described by the configuration object in to the view and creates an instance of the component.\r\n * If no container is specified, inject in to the \"default\" container.\r\n *\r\n * @param componentConfig\r\n * @param index\r\n */\r\n addComponent(componentConfig: any, index: number) {\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n\r\n if (componentConfig.container === undefined) {\r\n componentConfig.container = \"default\";\r\n }\r\n let container: ViewContainerRef = this.getContainer(componentConfig.container);\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.addComponent: to: \" + componentConfig.container);\r\n }\r\n\r\n let componentRef = ComponentInjector.getComponentRef(this.resolver, container, componentConfig.type);\r\n let componentInstance = <NavComponent>componentRef.instance;\r\n\r\n this.config.children[index].rendered = true;\r\n componentConfig.rendered = true;\r\n\r\n let id: string = componentConfig.id;\r\n if (!id) {\r\n id = this.navigationService.getIdNavComponent();\r\n componentConfig.id = id;\r\n }\r\n\r\n componentInstance.setParent(this);\r\n (<NavComponent>componentInstance).setConfig(componentConfig);\r\n this.children.push(componentInstance);\r\n this.viewRefMap.set(componentConfig.id, componentRef.hostView);\r\n //this.navigationService.registerComponent(componentConfig.id, componentInstance);\r\n }\r\n\r\n insertAfter(id: string, componentConfig: any) {\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n\r\n let index: number = undefined;\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n if (this.config.children[i].id === id) {\r\n index = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (index <= this.config.children.length - 1) {\r\n componentConfig.sortOrder = index;\r\n for (let i = index + 1; i < this.config.children.length; i++) {\r\n this.config.children[i].sortOrder = this.config.children[i].sortOrder + 1;\r\n }\r\n this.config.children.splice(index, 0, componentConfig);\r\n } else {\r\n index = this.config.children.length;\r\n componentConfig.sortOrder = index;\r\n this.config.children.push(componentConfig);\r\n }\r\n\r\n if (this.canRender(componentConfig)) {\r\n this.addComponent(componentConfig, index);\r\n }\r\n\r\n this.sortContainers();\r\n }\r\n\r\n insertBefore(id: string, componentConfig: any) {\r\n if (componentConfig.type === undefined) {\r\n throw new Error(\"The component must specify a 'type' (e.g. UlNavComponent).\");\r\n }\r\n\r\n let index: number = undefined;\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n if (this.config.children[i].id === id) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index <= this.config.children.length - 1) {\r\n for (let i = index; i < this.config.children.length; i++) {\r\n this.config.children[i].sortOrder = this.config.children[i].sortOrder + 1;\r\n }\r\n componentConfig.sortOrder = index;\r\n this.config.children.splice(index, 0, componentConfig);\r\n } else {\r\n index = this.config.children.length;\r\n componentConfig.sortOrder = index;\r\n this.config.children.push(componentConfig);\r\n }\r\n\r\n if (this.canRender(componentConfig)) {\r\n this.addComponent(componentConfig, index);\r\n }\r\n\r\n this.sortContainers();\r\n }\r\n\r\n /**\r\n * A function to be extended by other classes. This class and something like a LiNavComponent don't have any containers\r\n * so components can't be added to them. In other cases, the UlNavComponent has a single container so it can always\r\n * return that container regardless of the containerName requested (should be \"default\"). Any component should have\r\n * a container that is the \"default\". For example, a header component might have a container for the left components\r\n * and a container for the right components. The left container can just be called \"default\" and the right container\r\n * could be called \"rightContainer\". If a child component doesn't specify a container, it will be added to the default.\r\n *\r\n * @param container\r\n * @returns {undefined}\r\n */\r\n getContainer(container?: string): ViewContainerRef {\r\n return undefined;\r\n }\r\n\r\n getComponent(id: string): NavComponent {\r\n return this.navigationService.getComponent(id);\r\n }\r\n\r\n getComponentByType(type: string): NavComponent {\r\n return this.navigationService.getComponentByType(type);\r\n }\r\n\r\n public setParent(parent: NavComponent) {\r\n this.parent = parent;\r\n }\r\n\r\n public getParent(): NavComponent {\r\n return this.parent;\r\n }\r\n\r\n public setTitle(title: string) {\r\n this.title = title;\r\n }\r\n\r\n setConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"setConfig: \" + this.initialized);\r\n }\r\n\r\n if (config) {\r\n if (config.rendered === undefined) {\r\n config.rendered = true;\r\n }\r\n\r\n this.config = config;\r\n if (this.initialized) {\r\n this.updateConfig(this.config);\r\n }\r\n } else {\r\n this.config = {\r\n rendered: true\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * A function to be extended by other classes. The children should call super.updateConfig(config). This sets the\r\n * common properties of the NavComponent.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (config.type) {\r\n this.type = config.type;\r\n }\r\n if (this.type) {\r\n if (typeof this.type === \"string\") {\r\n this.typeName = this.type;\r\n }\r\n // The componentType decorator was created for uglification. Use it!\r\n else if (this.type[\"componentType\"]) {\r\n this.typeName = this.type[\"componentType\"];\r\n }\r\n else {\r\n this.typeName = (<Type<any>>this.type).name;\r\n }\r\n }\r\n\r\n if (config.id) {\r\n this.id = config.id;\r\n } else if (!this.id) {\r\n this.id = this.navigationService.getIdNavComponent();\r\n }\r\n this.setId();\r\n\r\n if (this.isRoot) {\r\n this.navigationService.setRootComponent(this.id, this);\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.updateConfig: \" + this.id + \": \" + this.initialized);\r\n }\r\n\r\n if (config.authenticatedKey) {\r\n this.authenticatedKey = config.authenticatedKey;\r\n }\r\n if (config.notAuthenticatedKey) {\r\n this.notAuthenticatedKey = config.notAuthenticatedKey;\r\n }\r\n if (config.roleName) {\r\n this.roleName = config.roleName;\r\n }\r\n if (config.title) {\r\n this.title = config.title;\r\n }\r\n if (config.rootClass) {\r\n this.rootClass = config.rootClass;\r\n this.setRootClass();\r\n }\r\n if (config.children) {\r\n this.inputChildren = config.children;\r\n this.setChildren();\r\n }\r\n\r\n this.detectChanges();\r\n\r\n if (isDevMode()) {\r\n console.debug(\"NavComponent.updateConfig: \" + (this.constructor.name) + \", \" + this.id + \", \" + this.navigationService.getId());\r\n }\r\n }\r\n\r\n setId(): void {\r\n this.navigationService.registerComponent(this.id, this);\r\n this.renderer.setAttribute(this.elementRef.nativeElement, \"id\", this.id);\r\n }\r\n\r\n setRootClass(): void {\r\n if (this.rootClass) {\r\n let classes: string[] = this.rootClass.split(\" \");\r\n for (let rootClass of classes) {\r\n this.renderer.addClass(this.elementRef.nativeElement, rootClass);\r\n }\r\n }\r\n }\r\n\r\n setChildren(): void {\r\n if (this.initialized) {\r\n this.clear();\r\n }\r\n for (let i = 0; i < this.config.children.length; i++) {\r\n this.config.children[i].sortOrder = i;\r\n this.add(this.config.children[i], i);\r\n }\r\n }\r\n\r\n detectChanges(): void {\r\n if (!(<ViewRef>this.changeDetectorRef).destroyed) {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"UlNavComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-ul\",\r\n template:\r\n `\r\n <ul [id]=\"id + '-ul'\" class=\"hci-ul {{ulClass}}\">\r\n <ng-container #containerRef></ng-container>\r\n </ul>\r\n `,\r\n styles: [\r\n `\r\n .hci-dic-ul-class {\r\n color: var(--white-lightest);\r\n background-color: var(--bluewarm-dark);\r\n }\r\n `\r\n ]\r\n }\r\n)\r\nexport class UlNavComponent extends NavComponent {\r\n\r\n @Input() ulClass: string = \"nav-container\";\r\n\r\n containerRef: ViewContainerRef;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(\r\n elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n @ViewChild(\"containerRef\", {\r\n read: ViewContainerRef,\r\n static: true\r\n }) set containerRefSetter(containerRef: ViewContainerRef) {\r\n this.containerRef = containerRef;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.containerRef) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n getContainer(container?: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n setConfig(config): void {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config): void {\r\n super.updateConfig(config);\r\n\r\n if (config.ulClass) {\r\n this.ulClass = config.ulClass;\r\n }\r\n }\r\n}\r\n","import {Component, Input, SimpleChanges} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subscription} from \"rxjs\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\n@ComponentType(\"BadgeComponent\")\r\n@Component({\r\n selector: \"hci-badge\",\r\n template: `\r\n <div class=\"hci-badge\" [class.spinner]=\"loading\">{{(loading) ? \"|\" : ((count > 0) ? count : \"\")}}</div>\r\n `\r\n})\r\nexport class BadgeComponent {\r\n\r\n public count: number;\r\n public loading: boolean = false;\r\n\r\n @Input() countSubject: BehaviorSubject<number>;\r\n @Input() countLoading: BehaviorSubject<boolean>;\r\n\r\n public countSubscription: Subscription;\r\n public countLoadingSubscription: Subscription;\r\n\r\n ngOnDestroy() {\r\n if (this.countSubscription) {\r\n this.countSubscription.unsubscribe();\r\n }\r\n if (this.countLoadingSubscription) {\r\n this.countLoadingSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"countSubject\"]) {\r\n if (this.countSubscription) {\r\n this.countSubscription.unsubscribe();\r\n }\r\n\r\n if (this.countSubject) {\r\n this.countSubscription = this.countSubject.subscribe((count: number) => {\r\n this.count = count;\r\n });\r\n }\r\n }\r\n if (changes[\"countLoading\"]) {\r\n if (this.countLoadingSubscription) {\r\n this.countLoadingSubscription.unsubscribe();\r\n }\r\n\r\n if (this.countLoading) {\r\n this.countLoadingSubscription = this.countLoading.subscribe((loading: boolean) => {\r\n this.loading = loading;\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import {Directive, ElementRef, Renderer2, HostListener, Input} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[riRippleEffect]'\r\n})\r\nexport class RIRippleEffectDirective {\r\n\r\n @Input()\r\n hostClass: string = 'ri-ripple-host';\r\n @Input()\r\n rippleClass: string = 'ri-ripple-effect-container';\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {\r\n const hostElement = this.el.nativeElement;\r\n this.renderer.addClass(hostElement, this.hostClass);\r\n }\r\n\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n const hostElement = this.el.nativeElement;\r\n\r\n const ripple = this.renderer.createElement('span');\r\n this.renderer.addClass(ripple, this.rippleClass);\r\n\r\n this.renderer.appendChild(hostElement, ripple);\r\n\r\n const styles = getComputedStyle(ripple);\r\n const animationDuration = styles.getPropertyValue(\"animation-duration\");\r\n const animationDurationInMs = Number(animationDuration.substr(0,animationDuration.length-1))*1000;\r\n const rect = hostElement.getBoundingClientRect();\r\n const left = event.pageX - rect.left;\r\n const top = event.pageY - rect.top;\r\n\r\n this.renderer.setStyle(ripple, 'left', `${left}px`);\r\n this.renderer.setStyle(ripple, 'top', `${top}px`);\r\n\r\n setTimeout(() => {\r\n this.renderer.removeChild(hostElement, ripple);\r\n }, animationDurationInMs); // Matching the jQuery animation duration\r\n }\r\n}\r\n","import {ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Input, Renderer2} from \"@angular/core\";\r\nimport {Subject} from \"rxjs\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"LiNavComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-li\",\r\n template:\r\n `\r\n <ng-container>\r\n <li [id]=\"id + '-li'\" class=\"hci-li {{liClass}}\" (click)=\"handleLiClick($event)\">\r\n <a *ngIf=\"!href && !route\" class=\"hci-li-a {{aClass}}\">\r\n <i *ngIf=\"!imgSrc && iClass && !iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && !iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <span riRippleEffect class=\"hci-li-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"!imgSrc && iClass && iRight\" class=\"hci-li-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n </a>\r\n\r\n <a *ngIf=\"href\" [href]=\"href\" [target]=\"target\" class=\"hci-li-a {{aClass}}\">\r\n <i *ngIf=\"!imgSrc && iClass && !iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && !iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <span class=\"hci-li-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"!imgSrc && iClass && iRight\" class=\"hci-li-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\" />\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n </a>\r\n\r\n <a *ngIf=\"route\"\r\n routerLink=\"{{route}}\"\r\n routerLinkActive=\"active-link\"\r\n [queryParams]=\"queryParams\"\r\n queryParamsHandling=\"{{queryParamsHandling}}\"\r\n class=\"hci-li-a {{aClass}}\">\r\n <i *ngIf=\"!imgSrc && iClass && !iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && !iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\"/>\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <span class=\"{{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"!imgSrc && iClass && iRight\" class=\"hci-li-i\">\r\n <span [class]=\"iClass\"></span>\r\n {{iText}}\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n <i *ngIf=\"imgSrc && iRight\" class=\"hci-li-i-img\">\r\n <img src=\"{{imgSrc}}\" [class]=\"iClass\" [class.hci-li-img]=\"true\" [alt]=\"altText\"/>\r\n <hci-badge *ngIf=\"badgeCount\" [countSubject]=\"badgeCount\" [countLoading]=\"badgeLoading\"></hci-badge>\r\n </i>\r\n </a>\r\n </li>\r\n\r\n <p class=\"{{showValueClass}}\" *ngIf=\"showValueFlag\">\r\n {{showValue}}\r\n </p>\r\n </ng-container>\r\n `,\r\n styles: [\r\n `\r\n .hci-dic-li-l {\r\n float: left;\r\n border: 0 var(--greywarm-meddark) !important;\r\n padding: 0;\r\n margin: 0;\r\n }\r\n\r\n .hci-dic-li-r {\r\n float: right;\r\n border: 0 var(--greywarm-meddark) !important;\r\n padding-right: 10px;\r\n margin: 0;\r\n }\r\n\r\n /* ------- BTN GRAD BLUE 1 STYLES DICTIONARY BUTTON SHOW ALL ------- */\r\n .hci-dic-span-1 {\r\n color: var(--white-lightest);\r\n border-radius: 5px;\r\n padding-right: 5px;\r\n padding-left: 2px !important;\r\n padding-top: 3px;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n }\r\n\r\n /* ------- BTN GRAD BLUE 1 STYLES DICTIONARY BUTTON SHOW ALL ACTIVE ------- */\r\n .hci-dic-span-3 {\r\n color: var(--white-lightest);\r\n border-radius: 5px;\r\n padding-right: 5px;\r\n padding-left: 2px !important;\r\n padding-top: 3px;\r\n background: linear-gradient(0deg, var(--bluewarm-meddark) 0%, var(--bluewarm-dark) 100%);\r\n }\r\n\r\n #filterReadOnly {\r\n float: left;\r\n }\r\n\r\n .hci-dic-show-value {\r\n padding-left: 10px;\r\n padding-top: 3px;\r\n font-size: 15px !important;\r\n float: left;\r\n }\r\n `\r\n ]\r\n }\r\n)\r\nexport class LiNavComponent extends NavComponent {\r\n\r\n @Input() liClass: string = \"nav-item\";\r\n @Input() href: string;\r\n @Input() target: string;\r\n @Input() route: string;\r\n @Input() queryParams: Object;\r\n @Input() queryParamsHandling: string = \"merge\";\r\n @Input() aClass: string = \"nav-link\";\r\n @Input() spanClass: string;\r\n @Input() iClass: string;\r\n @Input() imgSrc: string;\r\n @Input() altText: string;\r\n @Input() iText: string;\r\n @Input() iRight: boolean = false;\r\n @Input() badgeCount: Subject<number>;\r\n @Input() badgeLoading: Subject<boolean>;\r\n @Input() showValueFlag: boolean = false;\r\n @Input() showValue: string = \"\";\r\n @Input() showValueClass: string = \"\";\r\n\r\n @Input() liClick: Function = () => {\r\n }\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n handleLiClick(event: Event) {\r\n this.liClick(this, this.navigationService, event);\r\n }\r\n\r\n setConfig(config) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n if (!config) {\r\n return;\r\n }\r\n\r\n if (config.liClass) {\r\n this.liClass = config.liClass;\r\n }\r\n\r\n if (config.href) {\r\n this.href = config.href;\r\n }\r\n\r\n if (config.target) {\r\n this.target = config.target;\r\n }\r\n\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n\r\n if (config.queryParams) {\r\n this.queryParams = config.queryParams;\r\n }\r\n\r\n if (config.queryParamsHandling) {\r\n this.queryParamsHandling = config.queryParamsHandling;\r\n }\r\n\r\n if (config.aClass) {\r\n this.aClass = config.aClass;\r\n }\r\n\r\n if (config.spanClass) {\r\n this.spanClass = config.spanClass;\r\n }\r\n\r\n if (config.iClass) {\r\n if (this.iClass !== config.iClass) {\r\n this.iClass = undefined;\r\n this.detectChanges();\r\n }\r\n\r\n this.iClass = config.iClass;\r\n }\r\n\r\n if (config.imgSrc) {\r\n this.imgSrc = config.imgSrc;\r\n }\r\n\r\n if (config.altText) {\r\n this.altText = config.altText;\r\n }\r\n\r\n if (config.iText) {\r\n this.iText = config.iText;\r\n }\r\n\r\n if (config.iRight !== undefined) {\r\n this.iRight = config.iRight;\r\n }\r\n\r\n if (config.liClick) {\r\n this.liClick = config.liClick;\r\n }\r\n\r\n if (config.badgeCount) {\r\n this.badgeCount = config.badgeCount;\r\n }\r\n\r\n if (config.badgeLoading) {\r\n this.badgeLoading = config.badgeLoading;\r\n }\r\n\r\n if (config.showValueFlag) {\r\n this.showValueFlag = config.showValueFlag;\r\n }\r\n\r\n if (config.showValue) {\r\n this.showValue = config.showValue;\r\n }\r\n\r\n if (config.showValueClass) {\r\n this.showValueClass = config.showValueClass;\r\n }\r\n\r\n super.updateConfig(config);\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NgbDropdown} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"LiDdNavComponent\")\r\n@Component({\r\n selector: \"hci-li-dd\",\r\n template: `\r\n <li [id]=\"id + '-li'\" class=\"hci-li-dd-li dropdown {{liClass}}\" (click)=\"handleLiClick($event)\" ngbDropdown #dropdown=\"ngbDropdown\" [autoClose]=\"true\">\r\n <a id=\"li-dd-dropdown\" class=\"hci-li-dd-a dropdown-toggle {{aClass}}\" ngbDropdownToggle>\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-dd-i\">\r\n <span [class]=\"iClass\"></span>\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-dd-i\">\r\n <span [class]=\"iClass\"></span>\r\n </i>\r\n </a>\r\n <ul ngbDropdownMenu aria-labelledby=\"li-dd-dropdown\" class=\"hci-li-dd-ul dropdown-menu {{ulClass}}\" (click)=\"close()\">\r\n <ng-container #containerRef></ng-container>\r\n </ul>\r\n </li>\r\n `\r\n})\r\nexport class LiDdNavComponent extends NavComponent {\r\n\r\n @ViewChild(\"dropdown\", {static: true}) dropdown: NgbDropdown;\r\n\r\n @Input() liClass: string = null;\r\n @Input() href: string = null;\r\n @Input() aClass: string = \"nav-link\";\r\n @Input() spanClass: string = null;\r\n @Input() iClass: string = null;\r\n @Input() ulClass: string = \"dropdown-menu\";\r\n @Input() iRight: boolean = false;\r\n @Input() liClick: Function = (() => {});\r\n\r\n private containerRef: ViewContainerRef;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n @ViewChild(\"containerRef\", {read: ViewContainerRef, static: true}) set containerRefSetter(containerRef: ViewContainerRef) {\r\n this.containerRef = containerRef;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.containerRef) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n close(): void {\r\n this.dropdown.close();\r\n }\r\n\r\n getContainer(container: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n getDropdown(): NgbDropdown {\r\n return this.dropdown;\r\n }\r\n\r\n handleLiClick(event: Event) {\r\n this.liClick(this, this.navigationService, event);\r\n }\r\n\r\n setConfig(config) {\r\n this.rootClass = \"nav-item\";\r\n\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (config.liClass) {\r\n this.liClass = config.liClass;\r\n }\r\n if (config.href) {\r\n this.href = config.href;\r\n }\r\n if (config.aClass) {\r\n this.aClass = config.aClass;\r\n }\r\n if (config.spanClass) {\r\n this.spanClass = config.spanClass;\r\n }\r\n if (config.iClass) {\r\n if (this.iClass !== config.iClass) {\r\n this.iClass = undefined;\r\n this.detectChanges();\r\n }\r\n this.iClass = config.iClass;\r\n }\r\n if (config.iRight !== undefined) {\r\n this.iRight = config.iRight;\r\n }\r\n if (config.ulClass) {\r\n this.ulClass = config.ulClass;\r\n }\r\n if (config.liClick) {\r\n this.liClick = config.liClick;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"DivNavComponent\")\r\n@Component({\r\n selector: \"hci-div-nav\",\r\n template: `\r\n <div [id]=\"id + '-div'\" class=\"{{divClass}}\">\r\n <ng-container #containerRef></ng-container>\r\n </div>\r\n `\r\n})\r\nexport class DivNavComponent extends NavComponent {\r\n\r\n @Input() divClass: string = \"nav-container\";\r\n\r\n containerRef: ViewContainerRef;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n @ViewChild(\"containerRef\", {read: ViewContainerRef, static: true}) set containerRefSetter(containerRef: ViewContainerRef) {\r\n this.containerRef = containerRef;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.containerRef) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n getContainer(container?: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n setConfig(config): void {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config): void {\r\n super.updateConfig(config);\r\n\r\n if (config.divClass) {\r\n this.divClass = config.divClass;\r\n }\r\n }\r\n\r\n}\r\n","import {ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Input, Renderer2} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"BrandNavComponent\")\r\n@Component({\r\n selector: \"hci-brand\",\r\n template: `\r\n <div class=\"hci-brand\">\r\n <a *ngIf=\"!href && !route\" \r\n [id]=\"id + '-a'\" class=\"hci-brand-a {{aClass}}\">\r\n <img *ngIf=\"imgSrc && !imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n <span *ngIf=\"title\" class=\"hci-brand-span {{spanClass}}\">\r\n {{title}}\r\n </span>\r\n <img *ngIf=\"imgSrc && imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n </a>\r\n <a *ngIf=\"href\"\r\n [id]=\"id\" [href]=\"href\" class=\"hci-brand-a {{aClass}}\">\r\n <img *ngIf=\"imgSrc && !imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n <span *ngIf=\"title\" class=\"hci-brand-span {{spanClass}}\">\r\n {{title}}\r\n </span>\r\n <img *ngIf=\"imgSrc && imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n </a>\r\n <a *ngIf=\"route\"\r\n [id]=\"id\"\r\n routerLink=\"{{route}}\"\r\n routerLinkActive=\"active-link\"\r\n [queryParams]=\"queryParams\"\r\n queryParamsHandling=\"{{queryParamsHandling}}\"\r\n class=\"hci-brand-a {{aClass}}\">\r\n <img *ngIf=\"imgSrc && !imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n <span *ngIf=\"title\" class=\"hci-brand-span {{spanClass}}\">\r\n {{title}}\r\n </span>\r\n <img *ngIf=\"imgSrc && imgRight\" [src]=\"imgSrc\" [alt]=\"altText\" />\r\n </a>\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n .hci-brand img {\r\n height: 36px;\r\n }\r\n\r\n `],\r\n})\r\nexport class BrandNavComponent extends NavComponent {\r\n\r\n @Input() href: string;\r\n @Input() route: string;\r\n @Input() queryParams: Object;\r\n @Input() queryParamsHandling: string = \"merge\";\r\n @Input() aClass: string = \"navbar-brand me-0 me-md-2\";\r\n @Input() imgSrc: string;\r\n @Input() altText: string;\r\n @Input() spanClass: string = \"d-none d-md-flex\";\r\n @Input() imgRight: boolean = false;\r\n @Input() aClick: Function = (() => {});\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n handleAClick(event: Event) {\r\n this.aClick(this, this.navigationService, event);\r\n }\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (config.aClass) {\r\n this.aClass = config.aClass;\r\n }\r\n if (config.href) {\r\n this.href = config.href;\r\n }\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n if (config.queryParams) {\r\n this.queryParams = config.queryParams;\r\n }\r\n if (config.queryParamsHandling) {\r\n this.queryParamsHandling = config.queryParamsHandling;\r\n }\r\n if (config.rootClass) {\r\n this.rootClass = config.rootClass;\r\n }\r\n if (config.imgSrc) {\r\n this.imgSrc = config.imgSrc;\r\n }\r\n if (config.altText) {\r\n this.altText = config.altText;\r\n }\r\n if (config.imgRight !== undefined) {\r\n this.imgRight = config.imgRight;\r\n }\r\n if (config.spanClass) {\r\n this.spanClass = config.spanClass;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {LiNavComponent} from \"./li-nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n@ComponentType(\"LiExpNavComponent\")\r\n@Component({\r\n selector: \"hci-li-exp\",\r\n template: `\r\n <div class=\"hci-li-exp {{rootClass}}\" (mouseover)=\"onMouseOver($event)\" (mouseout)=\"onMouseOut($event)\" [class.hover]=\"hover\">\r\n <li [id]=\"id + '-li'\" class=\"hci-li-exp-li {{liClass}}\" (click)=\"handleLiClick($event)\">\r\n <a *ngIf=\"!href && !route\" class=\"hci-li-exp-a {{aClass}}\">\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n </a>\r\n <a *ngIf=\"href\" [href]=\"href\" class=\"hci-li-exp-a {{aClass}}\">\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n </a>\r\n <a *ngIf=\"route\"\r\n routerLink=\"{{route}}\"\r\n routerLinkActive=\"active-link\"\r\n [queryParams]=\"queryParams\"\r\n queryParamsHandling=\"{{queryParamsHandling}}\"\r\n class=\"hci-li-exp-a {{aClass}}\">\r\n <i *ngIf=\"iClass && !iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n <span class=\"hci-li-exp-span {{spanClass}}\">{{title}}</span>\r\n <i *ngIf=\"iClass && iRight\" class=\"hci-li-exp-i\">\r\n <span class=\"{{iClass}}\"></span>\r\n {{iText}}\r\n </i>\r\n </a>\r\n </li>\r\n <ul [id]=\"id\" class=\"hci-li-exp-ul {{ulClass}}\" [class.expanded]=\"expanded\" (click)=\"onUlClick($event)\">\r\n <ng-container #containerRef></ng-container>\r\n </ul>\r\n </div>\r\n `\r\n})\r\nexport class LiExpNavComponent extends LiNavComponent {\r\n\r\n @Input() liClass: string = \"nav-item header\";\r\n @Input() ulClass: string;\r\n @Input() hover: boolean = false;\r\n @Input() expandable: boolean = false;\r\n @Input() expanded: boolean = true;\r\n\r\n @ViewChild(\"containerRef\", { read: ViewContainerRef, static: true }) private containerRef: any;\r\n\r\n private container: NavComponent[] = [];\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n onMouseOver(event: MouseEvent) {\r\n if (this.hover) {\r\n this.expanded = true;\r\n }\r\n }\r\n\r\n onMouseOut(event: MouseEvent) {\r\n if (this.hover) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n onUlClick(event: MouseEvent) {\r\n if (this.hover && this.expanded) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n handleLiClick(event: MouseEvent) {\r\n if (!this.hover && this.expandable) {\r\n this.expanded = !this.expanded;\r\n } else if (this.hover && this.expanded) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n getContainer(container: string): ViewContainerRef {\r\n return this.containerRef;\r\n }\r\n\r\n setConfig(config) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (!config) {\r\n return;\r\n }\r\n\r\n if (config.liClass) {\r\n this.liClass = config.liClass;\r\n }\r\n if (config.ulClass) {\r\n this.ulClass = config.ulClass;\r\n }\r\n if (config.hover !== undefined) {\r\n this.hover = config.hover;\r\n }\r\n if (config.expandable !== undefined) {\r\n this.expandable = config.expandable;\r\n }\r\n if (this.expandable || this.hover) {\r\n this.expanded = false;\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, Input, isDevMode, Renderer2, SimpleChange, SimpleChanges,\r\n TemplateRef, Type, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentInjector, ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"./nav.component\";\r\nimport {NavigationService} from \"../services/navigation.service\";\r\n\r\n/**\r\n * <p>\r\n * This component may take a template defined in the parent and display it. Any information it wishes to use must be\r\n * passed with the config.\r\n * </p>\r\n * <p>\r\n * See demo/src/app/template/template.component.ts for an implementation example.\r\n * </p>\r\n *\r\n */\r\n@ComponentType(\"TemplateComponent\")\r\n@Component({\r\n selector: \"hci-template\",\r\n template: `\r\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"config\"></ng-container>\r\n <ng-container #viewContainer></ng-container>\r\n `\r\n})\r\nexport class TemplateComponent extends NavComponent {\r\n\r\n @Input() template: TemplateRef<any>;\r\n @Input() componentType: Type<any> | string;\r\n\r\n component: any;\r\n\r\n @ViewChild(\"viewContainer\", { read: ViewContainerRef, static: false }) private viewContainer: ViewContainerRef;\r\n\r\n constructor(elementRef: ElementRef, renderer: Renderer2, resolver: ComponentFactoryResolver, navigationService: NavigationService, changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n }\r\n\r\n setConfig(config) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config) {\r\n if (!config) {\r\n return;\r\n }\r\n\r\n if (config.template) {\r\n this.template = config.template;\r\n }\r\n if (config.componentType) {\r\n // Only allow component if there is no template\r\n this.componentType = config.componentType;\r\n this.component = ComponentInjector.getComponent(this.resolver, this.viewContainer, this.componentType);\r\n }\r\n\r\n this.setComponentConfig();\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n setComponentConfig() {\r\n if (this.component && this.config) {\r\n let cfgKeys = Object.keys(this.config);\r\n if (isDevMode()) {\r\n console.debug(\"componentConfig: \" + JSON.stringify(cfgKeys));\r\n }\r\n for (let cfgKey of cfgKeys) {\r\n try {\r\n let changes = {};\r\n changes[cfgKey] = new SimpleChange(this.component[cfgKey], this.config[cfgKey], false);\r\n this.component.ngOnChanges(changes);\r\n } catch (e) {}\r\n }\r\n }\r\n }\r\n}\r\n","export class RowGroup {\r\n\r\n rgKey: string;\r\n rgRows: Object[];\r\n rgCount: number = 0;\r\n rgExpanded: boolean = false;\r\n rgPageMin: number;\r\n rgPageMax: number;\r\n\r\n constructor(rgKey: string, firstRow: Object, rgCount: number = 0) {\r\n this.rgKey = rgKey;\r\n this.rgRows = [firstRow];\r\n this.rgCount = rgCount;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n isDevMode,\r\n Optional,\r\n Output,\r\n Renderer2,\r\n TemplateRef,\r\n SimpleChanges\r\n} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subject} from \"rxjs\";\r\n\r\nimport {HciFilterDto, HciSortDto} from \"@huntsman-cancer-institute/hci-ng-grid-dto\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"../nav.component\";\r\nimport {NavigationService} from \"../../services/navigation.service\";\r\nimport {NavigationGlobalService} from \"../../services/navigation-global.service\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\n\r\n/**\r\n * The search list controller renders as a header to one or more search lists. Only one search list can be shown at a time.\r\n * The controller features the ability to handle filtering and sorting. Without the controller, the search list can exist,\r\n * but it can only handle paging internally.\r\n */\r\n@ComponentType(\"SearchListControllerComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-search-list-controller\",\r\n exportAs: \"searchListControllerComponent\",\r\n styles: [\r\n `\r\n select {\r\n padding: .25em;\r\n padding-right: 0em;\r\n outline-offset: -1px;\r\n border: 0;\r\n color: #8A9499;\r\n font-size: 0.8rem;\r\n background-color: white;\r\n }\r\n\r\n .closeable {\r\n }\r\n\r\n .search-box {\r\n border: none;\r\n border-right: 0.1px solid #5B6266;\r\n padding-left: .5rem !important;\r\n color: var(--grey-darkest);\r\n font-size: 0.8rem;\r\n }\r\n\r\n .search-options {\r\n border-radius: 10px;\r\n }\r\n\r\n /* ------- BTN GRAD BLUE 2 STYLES ------- */\r\n .search-button:enabled {\r\n width: 30%;\r\n min-height: 2rem;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n margin: 0;\r\n color: var(--white-lightest);\r\n border: 1px solid var(--bluewarm-dark);\r\n }\r\n\r\n .search-button:hover {\r\n background: linear-gradient(0deg, var(--bluewarm-meddark) 0%, var(--bluewarm-dark) 100%);\r\n color: var(--white-lightest);\r\n border: 1px solid var(--bluewarm-darker);\r\n }\r\n\r\n .search-button:disabled {\r\n width: 30%;\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n border: 1px solid var(--bluewarm-dark);\r\n color: var(--white-lightest);\r\n }\r\n /* ------- BTN GRAD BLUE 2 STYLES ------- */\r\n\r\n .global-search {\r\n align-items: center;\r\n width: 100%;\r\n border-radius: 2px;\r\n border: 0.04em solid var(--greywarm-dark);\r\n }\r\n\r\n .tab-title-class {\r\n display: flex;\r\n height: 50px;\r\n background: lightgray;\r\n }\r\n\r\n .tab-pane {\r\n width: min-content !important;\r\n }\r\n\r\n .search-options.expanded {\r\n height: fit-content;\r\n }\r\n\r\n .backButton .fa-angle-double-left {\r\n color: white;\r\n }\r\n\r\n .svg-inline--fas fa-angle-double-left {\r\n color: white;\r\n }\r\n\r\n .sort-item {\r\n display: flex;\r\n color: black;\r\n }\r\n\r\n .sort-icon {\r\n width: 1.5rem;\r\n }\r\n\r\n .sort-text:hover {\r\n cursor: pointer;\r\n }\r\n\r\n .hci-search-list-controller-color {\r\n color: var(--white-lightest) !important;\r\n }\r\n\r\n .textarea-search-box {\r\n align-content: center;\r\n width: 100%;\r\n min-height: 30px;\r\n }\r\n\r\n .multiline-search-button {\r\n height: 100%;\r\n max-width: 3rem;\r\n min-width: 3rem;\r\n }\r\n\r\n .filter-sorting-panel {\r\n margin-top: 30px;\r\n }\r\n\r\n\r\n .disabled-button {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n background: linear-gradient(0deg, var(--bluewarm-dark) 30%, var(--bluewarm-meddark) 100%);\r\n border: 1px solid var(--bluewarm-dark);\r\n color: var(--white-lightest);\r\n }\r\n\r\n .nav-container {\r\n display: flex !important;\r\n flex-wrap: nowrap;\r\n }\r\n\r\n .no-user-select-text{\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n `\r\n ],\r\n template:\r\n `\r\n <div id=\"search-title\" class=\"d-flex flex-column\">\r\n <div *ngIf=\"showTitle\" class=\"d-flex ps-2 hci-search-list-controller-color\">\r\n <div *ngIf=\"showBackButton\" class=\"me-auto ms-1 backButton\">\r\n <button (click)=\"backButtonClicked()\" aria-label=\"hci-ng-sidebar-back-button\">\r\n <i class=\"fas fa-angle-double-left\"></i>\r\n </button>\r\n </div>\r\n {{title}}\r\n <div class=\"d-flex flex-row ms-auto\">\r\n <div *ngIf=\"buttonTemplate\"><ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container></div>\r\n <div class=\"ms-auto me-2\" (click)=\"toggleShowOptions($event)\">\r\n <i class=\"fas fa-filter\"></i>\r\n </div>\r\n </div>\r\n <div class=\"search-options\" [class.expanded]=\"showOptions\" [ngStyle]=\"{'width': (searchOptionsWidth !== '') ? searchOptionsWidth : 'auto'}\">\r\n <div class=\"flex-grow-1\">\r\n <div *ngIf=\"showToggleOptions\">\r\n <div class=\"card-header-component\">\r\n <div style=\"margin-left: auto\">\r\n <button class=\"card-header-button btn closeable\" (click)=\"toggleShowOptions($event)\" aria-label=\"hci-ng-sidebar-toggle-options\">\r\n <i class=\"fas fa-times\" card-header-text></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"disableLocalFiltering; else display\">\r\n <nav ngbNav #nav=\"ngbNav\" [(activeId)]=\"activeTab\" class = \"nav-container\">\r\n <ng-container ngbNavItem [ngbNavItem]=\"1\" class=\"tab-title-class\"\r\n *ngIf=\"filterByAllowedFields.length > 0\">\r\n <a ngbNavLink class =\"flex-grow-1\">BASIC SEARCH</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search\">\r\n <div class=\"classification-header\">\r\n {{this.basicSearchHeader}}\r\n </div>\r\n <div class=\"row search-content-body\">\r\n <ng-container *ngFor=\"let filter of boundFilters; index as i\">\r\n <div class=\"col-6\">\r\n <div *ngIf=\"getFieldType(filter.field) === 'input' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input matInput [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\"/>\r\n </mat-form-field>\r\n </div>\r\n\r\n<!-- Double check if the textarea needed in Basic Search-->\r\n<!-- <div *ngIf=\"getFieldType(filter.field) === 'textarea' \">-->\r\n<!-- <mat-form-field appearance=\"none\">-->\r\n<!-- <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>-->\r\n<!-- <textarea [ngModel]=\"globalSearch\" class= \"search-box\" (keyup)=\"doGlobalSearch($event)\"-->\r\n<!-- style=\"background-color: #f2f2f2\"></textarea>-->\r\n<!-- </mat-form-field>-->\r\n<!-- </div>-->\r\n\r\n <div *ngIf=\"getFieldType(filter.field) === 'dropdown' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <mat-select [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\">\r\n\r\n <div\r\n *ngIf=\"fields[i] && fields[i].values && fields[i].values[0].display;else display_raw_value\">\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value.id\">{{value.display}}</mat-option>\r\n </div>\r\n <ng-template #display_raw_value>\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value\">{{value}}</mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(filter.field) === 'date' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\" matInput [matDatepicker]=\"myPicker\"\r\n placeholder=\"date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"myPicker\">\r\n <mat-icon fontSet=\"fa\" fontIcon=\"fa-calendar-alt fa-lg\"></mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker #myPicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"search-msg-holder\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n <button riRippleEffect class = \"ri-btn-cancel\" [ngClass]=\"{'ri-btn-cancel-dirty': this.changed}\" [disabled] =\"!this.changed\" (click)=\"setupFilters(false)\" aria-label=\"hci-ng-sidebar-clear-basic-search-filters\">\r\n CLEAR\r\n </button>\r\n <button riRippleEffect class=\"ri-btn-save\" [ngClass]=\"{ 'ri-btn-save-dirty': this.changed}\"\r\n [disabled]=\"!this.changed \" (click)=\"applyFilters($event)\" aria-label=\"hci-ng-sidebar-apply-basic-filter-search\">\r\n SEARCH\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container ngbNavItem [ngbNavItem]=\"2\" class=\"tab-title-class\"\r\n *ngIf=\"advancedSearchFields.length > 0\">\r\n <a ngbNavLink class =\"flex-grow-1\">ADVANCED SEARCH</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"advancedSearch-scroll\" id=\"advancedSearch-scroll-panel\">\r\n <div class=\"advancedSearch-panel\">\r\n <div *ngFor=\"let param of this.advancedSearch; index as j\">\r\n <div [ngClass]=\"{'advanced-search': !this.hasAdvancedSearchVerticalScrollbar, 'advanced-search-scrolled': this.hasAdvancedSearchVerticalScrollbar}\">\r\n <div class=\"advanced-search-classification-header\">\r\n {{param.header}}\r\n </div>\r\n <div class=\"row advanced-search-content-body\">\r\n <ng-container>\r\n <div *ngFor=\"let field of this.param.fields; index as k\">\r\n <div class=\"col-5\">\r\n <div *ngIf=\"getFieldType(field.field) === 'input' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(field.field)}}</mat-label>\r\n <input matInput [ngModel]=\"getFilterForField(field.field).value\"\r\n (ngModelChange)=\"setFilter($event, getFilterForField(field.field))\"\r\n (keydown)=\"applyAdvancedSearchFilters($event)\"/>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(field.field) === 'checkbox' \">\r\n <mat-checkbox class=\"checkboxes\"\r\n [(ngModel)]=\"getFilterForField(field.field).value\">\r\n {{getFieldDisplay(field.field)}}\r\n </mat-checkbox>\r\n </div>\r\n <div *ngIf=\"getFieldType(field.field) === 'dropdown' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(field.field)}}</mat-label>\r\n <mat-select [ngModel]=\"getFilterForField(field.field).value\"\r\n (ngModelChange)=\"setFilter($event, getFilterForField(field.field))\"\r\n (keydown)=\"applyAdvancedSearchFilters($event)\">\r\n <div *ngIf=\"this.field.valueURL;else display_raw_value\">\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of this.field.values\"\r\n [value]=\"value.id\">{{value.display}}</mat-option>\r\n </div>\r\n <ng-template #display_raw_value>\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of this.field.values\"\r\n [value]=\"value\">{{value}}</mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(field.field) === 'date' \">\r\n <mat-form-field appearance=\"none\">\r\n <mat-label>{{getFieldDisplay(field.field)}}</mat-label>\r\n <input [ngModel]=\"getFilterForField(field.field).value\"\r\n (ngModelChange)=\"setFilter($event, getFilterForField(field.field))\"\r\n (keydown)=\"applyAdvancedSearchFilters($event)\" matInput\r\n [matDatepicker]=\"myPicker\" placeholder=\"date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"myPicker\">\r\n <mat-icon fontSet=\"fa\" fontIcon=\"fa-calendar-alt fa-lg\"></mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker #myPicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"search-msg-holder\">\r\n <div id=\"advanced-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n <button riRippleEffect class = \"ri-btn-cancel\" [ngClass]=\"{'ri-btn-cancel-dirty': this.changed}\" [disabled]=\"!this.changed\" (click)=\"setupFilters(false)\" aria-label=\"hci-ng-sidebar-clear-advance-search-filters\">\r\n CLEAR\r\n </button>\r\n <button riRippleEffect class = \"ri-btn-save\" [ngClass] =\"{'ri-btn-save-dirty': this.changed}\"\r\n [disabled]=\"!this.changed\" (click)=\"applyAdvancedSearchFilters($event)\" aria-label=\"hci-ng-sidebar-apply-advance-filter-search\">\r\n SEARCH\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n\r\n\r\n <ng-container ngbNavItem [ngbNavItem]=\"3\" class=\"tab-title-class\"\r\n *ngIf=\"searchSortingOptions.length>0\">\r\n <a ngbNavLink class =\"flex-grow-1\" >SORTING</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search\" >\r\n <div class=\"classification-header\">\r\n {{this.basicSearchHeader}}\r\n </div>\r\n <div class=\"row sidebar-filter\">\r\n <ng-container *ngFor=\"let searchSortItem of searchSortingOptions\">\r\n <div class=\"col-6 sort-item\" [ngStyle]=\"getCustomStyles('col-6 sort-item')\">\r\n <div class=\"sort-icon\" [ngStyle]=\"getCustomStyles('sort-icon')\">\r\n <div *ngIf=\"currentSearchSorting.value==searchSortItem.value && currentSearchSorting.isAsc\"\r\n [ngClass]=\"{'sort-arrow':true}\">\r\n <i class=\"fas fa-arrow-circle-up fa-lg\"></i>\r\n </div>\r\n <div *ngIf=\"currentSearchSorting.value==searchSortItem.value && !currentSearchSorting.isAsc\"\r\n [ngClass]=\"{'sort-arrow':true}\">\r\n <i class=\"fas fa-arrow-circle-down fa-lg\"></i>\r\n </div>\r\n </div>\r\n <div class=\"sort-text no-user-select-text\" (click)=\"onSearchSortClicked($event, searchSortItem)\" [ngStyle]=\"getCustomStyles('sort-text')\">\r\n {{searchSortItem.display}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"search-msg-holder\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n </ng-container>\r\n </nav>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n\r\n <ng-template #display>\r\n <nav ngbNav #nav1=\"ngbNav\" [(activeId)]=\"activeTab1\" [ngStyle]=\"getCustomStyles('nav')\">\r\n <ng-container ngbNavItem [ngbNavItem]=\"1\" class=\"tab-title-class\" *ngIf=\"filterByAllowedFields.length > 0\">\r\n <a ngbNavLink>FILTER</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search sidebar-filter filter-sorting-panel\" [ngStyle]=\"getCustomStyles('basic-search sidebar-filter filter-sorting-panel')\">\r\n <div class=\"row search-content-body\" [ngStyle]=\"getCustomStyles('row search-content-body')\">\r\n <ng-container *ngFor=\"let filter of boundFilters; index as i\">\r\n <div class=\"col-6\" [ngStyle]=\"getCustomStyles('col-6')\">\r\n <div *ngIf=\"getFieldType(filter.field) === 'input' \">\r\n <mat-form-field appearance=\"none\" [ngStyle]=\"getCustomStyles('mat-form-field')\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input matInput [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\"/>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(filter.field) === 'dropdown' \">\r\n <mat-form-field appearance=\"none\" [ngStyle]=\"getCustomStyles('mat-form-field')\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <mat-select [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\">\r\n\r\n <div\r\n *ngIf=\"fields[i] && fields[i].values && fields[i].values[0].display;else display_raw_value\">\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value.id\">{{value.display}}</mat-option>\r\n </div>\r\n <ng-template #display_raw_value>\r\n <mat-option>None</mat-option>\r\n <mat-option *ngFor=\"let value of fields[i].values\"\r\n [value]=\"value\">{{value}}</mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"getFieldType(filter.field) === 'date' \">\r\n <mat-form-field appearance=\"none\" [ngStyle]=\"getCustomStyles('mat-form-field')\">\r\n <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>\r\n <input [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\" matInput [matDatepicker]=\"myPicker\"\r\n placeholder=\"mm/dd/yyyy\">\r\n <mat-datepicker-toggle matSuffix [for]=\"myPicker\">\r\n <mat-icon fontSet=\"fas\" fontIcon=\"fa-calendar-alt fa-lg\"></mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker #myPicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"search-msg-holder\" [ngStyle]=\"getCustomStyles('search-msg-holder')\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width sidebar-filter\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n <ng-container *ngTemplateOutlet=\"buttonRowTemplate\">\r\n </ng-container>\r\n <button riRippleEffect class=\"ri-btn-cancel ri-btn-cancel-dirty\" (click)=\"setupFilters(true)\" aria-label=\"hci-ng-sidebar-filter-reset\">\r\n RESET\r\n </button>\r\n <button riRippleEffect class=\"ri-btn-save\" [ngClass]=\"{'ri-btn-save-dirty': this.changed}\"\r\n [disabled]=\"!this.changed \" (click)=\"applyFilters()\" aria-label=\"hci-ng-sidebar-filter-apply-filter\">\r\n FILTER\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container ngbNavItem [ngbNavItem]=\"2\" class=\"tab-title-class\" *ngIf=\"sortByAllowedFields.length > 0\">\r\n <a ngbNavLink>SORTING</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"basic-search sidebar-filter filter-sorting-panel\" [ngStyle]=\"getCustomStyles('basic-search sidebar-filter filter-sorting-panel')\">\r\n <div class=\"row search-content-body\">\r\n <ng-container *ngFor=\"let sortField of sortByAllowedFields\">\r\n <div class=\"col-6 sort-item\" [ngStyle]=\"getCustomStyles('col-6 sort-item')\">\r\n <div class=\"sort-icon\" [ngStyle]=\"getCustomStyles('sort-icon')\">\r\n <div *ngIf=\"isSort(sortField) && isSortAsc(sortField)\"\r\n [ngClass]=\"{'sort-arrow':isFirstSort(sortField)}\">\r\n <i class=\"fas fa-arrow-circle-up fa-lg\"></i>\r\n </div>\r\n <div *ngIf=\"isSort(sortField) && !isSortAsc(sortField)\"\r\n [ngClass]=\"{'sort-arrow':isFirstSort(sortField)}\">\r\n <i class=\"fas fa-arrow-circle-down fa-lg\"></i>\r\n </div>\r\n </div>\r\n <div class=\"sort-text\" (click)=\"setSort($event, sortField)\" [ngStyle]=\"getCustomStyles('sort-text')\">\r\n {{getFieldDisplay(sortField)}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"search-msg-holder\">\r\n <div id=\"basic-search-msg-holder\"></div>\r\n </div>\r\n\r\n <div class=\"ri-modal-footer ri-full-width sidebar-filter\">\r\n <div class=\"ri-modal-header-right-container ri-full-width\">\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n </ng-container>\r\n </nav>\r\n <div [ngbNavOutlet]=\"nav1\"></div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-1 global-search\" *ngIf=\"inputMultiline === false\">\r\n <input [disabled] = \"!quickSearchEnabled\" [ngModel]=\"globalSearch\" class=\"search-box\" (keyup)=\"doGlobalSearch($event)\" [placeholder]=\"globalSearchPlaceholder\" aria-label=\"quick-search-options\"/>\r\n <select *ngIf=\"showQuickSearchOptions\" [(ngModel)]=\"selectedSearchType\" (change)=\"selectSearchType()\"\r\n id=\"search-identifier\" style=\"width: 100%; border-radius: 0px; border-color: black; \">\r\n <option *ngFor=\"let searchType of searchTypeArray\"\r\n [value]=\"searchType\">\r\n {{searchType}}\r\n </option>\r\n </select>\r\n <button riRippleEffect class=\"pl-1 pr-1 search-button\" style=\"height: 100%\" [disabled] = \"!quickSearchEnabled\" [ngClass] = \"{'disabled-button':!quickSearchEnabled}\" (click)=\"searchButtonClicked()\" aria-label=\"hci-ng-sidebar-quick-search\">\r\n <i class=\"fas fa-search\"></i>\r\n </button>\r\n </div>\r\n <div class=\"d-flex mb-1 global-search\" *ngIf=\"inputMultiline === true\">\r\n <textarea aria-label=\"globalSearch\" [disabled] = \"!quickSearchEnabled\" [ngModel]=\"globalSearch\" class=\"search-box textarea-search-box\"\r\n [ngStyle]=\"getCustomStyles('search-box textarea-search-box')\" (keyup)=\"doGlobalSearch($event)\" [placeholder]=\"globalSearchPlaceholder\"></textarea>\r\n <select *ngIf=\"showQuickSearchOptions\" [(ngModel)]=\"selectedSearchType\" (change)=\"selectSearchType()\"\r\n id=\"search-identifier\" style=\"width: 100%; border-radius: 0px; border-color: black; \">\r\n <option *ngFor=\"let searchType of searchTypeArray\"\r\n [value]=\"searchType\">\r\n {{searchType}}\r\n </option>\r\n </select>\r\n <button riRippleEffect aria-label=\"searchButton\" class=\"ps-1 pe-1 search-button multiline-search-button\" [ngStyle]=\"getCustomStyles('search-button multiline-search-button')\" [disabled] = \"!quickSearchEnabled\" [ngClass] = \"{'disabled-button':!quickSearchEnabled}\" (click)=\"searchButtonClicked()\" aria-label=\"hci-ng-sidebar-quick-search\">\r\n <i class=\"fas fa-search\"></i>\r\n </button>\r\n </div>\r\n <div class=\"d-flex x-auto\" *ngIf=\"hasValidFilters()\">\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let filter of filters\">\r\n <ng-container *ngIf=\"filter.valid\">\r\n <div (click)=\"clearFilter(filter)\" class=\"d-flex pill\">\r\n <div class=\"me-2\">\r\n {{filter.field}}\r\n </div>\r\n <div class=\"close-icon\">\r\n <i class=\"fas fa-times-circle fa-xs\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"searchLists.length > 1\" class=\"d-flex x-hidden list-toggle\">\r\n <mat-button-toggle-group [ngModel]=\"selectedSearchList\" (ngModelChange)=\"setSelectedSearchList($event)\">\r\n <mat-button-toggle *ngFor=\"let searchList of searchLists\" mat-raised-button-toggle color=\"primary\"\r\n [value]=\"searchList\">\r\n {{searchList}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n `\r\n }\r\n)\r\nexport class SearchListControllerComponent extends NavComponent {\r\n @Input() showTitle: boolean = true;\r\n @Input() buttonTemplate: TemplateRef<any>;\r\n @Input() inputMultiline: boolean = false;\r\n @Input() searchOptionsWidth: string = \"\";\r\n @Input() fields: any[] = [];\r\n @Input() customStyles: any = {};\r\n @Input() basicSearch: any = {};\r\n @Input() advancedSearch: any = {};\r\n @Input() filterByAllowedFields: string[] = [];\r\n @Input() quickSearchFields: string[] = [];\r\n @Input() advancedSearchFields: string[] = [];\r\n @Input() sortByAllowedFields: string[] = [];\r\n @Input() sorts: HciSortDto[] = [];\r\n @Input() showQuickSearchOptions: boolean = false;\r\n @Input() showAdvancedSearchOptions: boolean = false;\r\n @Input() searchTypeArray: string[] = [];\r\n @Input() searchType: string = \"\";\r\n @Input() searchTypeSelected: string = \"\";\r\n @Input() basicSearchHeader: string = \"\";\r\n @Input() globalSearchPlaceholder: string = \"\";\r\n @Input() globalSearchValidator: any | string = \"\";\r\n @Input() buttonRowTemplate: TemplateRef<any> = null;\r\n @Input() searchSortingOptions: any[] = [];\r\n @Input() labelText: string = \"\";\r\n @Output() searchListChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n activeTab = 1;\r\n\r\n activeTab1 = 1;\r\n\r\n boundFilters: HciFilterDto[] = [];\r\n boundAdvancedSearchFilters: HciFilterDto[] = [];\r\n updatedAdvanceSearchFilters: HciFilterDto[] = [];\r\n\r\n filtersSubject: Subject<HciFilterDto[]> = new BehaviorSubject<HciFilterDto[]>([]);\r\n advancedSearchFiltersSubject: Subject<HciFilterDto[]> = new BehaviorSubject<HciFilterDto[]>([]);\r\n sortsSubject: Subject<HciSortDto[]> = new BehaviorSubject<HciSortDto[]>([]);\r\n\r\n globalSearch: string = \"\";\r\n\r\n showOptions: boolean = false;\r\n showBackButton: boolean = false;\r\n searchLists: string[] = [];\r\n selectedSearchList: string;\r\n selectedSearchListSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n searchStringSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n backButtonSubject: Subject<any> = new BehaviorSubject<any>(undefined);\r\n advancedSearchStringSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n selectedSearchType: string;\r\n selectedSearchTypeSubject: Subject<string> = new BehaviorSubject<string>(undefined);\r\n performedSearchSubject: Subject<string> = new Subject<string>();\r\n performedBasicSearchSubject: Subject<string> = new Subject<string>();\r\n performedAdvancedSearchSubject: Subject<string> = new Subject<string>();\r\n disableLocalFiltering = false;\r\n advancedSearchAllowFilter = false;\r\n\r\n allowSearchSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n searchAllowedSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n allowToggleSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n toggleShowSubject$: Subject<boolean> = new BehaviorSubject<any>(undefined);\r\n cogWheelClickedSubject$: Subject<boolean> = new BehaviorSubject<any>(undefined);\r\n changed: boolean = false;\r\n allowSearch: boolean = true;\r\n allowToggle: boolean = true;\r\n showToggleOptions: boolean = true;\r\n\r\n quickSearchEnabled: boolean = true;\r\n\r\n searchSortingSelectionChangeSubject$: Subject<any> = new BehaviorSubject<any>(undefined);\r\n currentSearchSorting = {\"value\":undefined, \"display\":undefined, \"isAsc\":true};\r\n\r\n getCustomStyles(styles: string): any {\r\n let customStyleObject: any = \"\";\r\n for (let style of styles.split(\" \")) {\r\n let styleObject = this.customStyles[style];\r\n if (styleObject) {\r\n customStyleObject = Object.assign({}, customStyleObject, styleObject);\r\n }\r\n }\r\n\r\n return customStyleObject;\r\n }\r\n\r\n constructor(\r\n elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n @Optional() navigationService: NavigationService,\r\n private http: HttpClient,\r\n changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n if (!navigationService) {\r\n this.navigationService = new NavigationService(navigationGlobalService);\r\n }\r\n\r\n if (this.navigationService.getId() === undefined) {\r\n this.isRoot = true;\r\n }\r\n }\r\n\r\n /**\r\n * Set data only when the component has fully initialized and is rendered.\r\n */\r\n checkInitialized() {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.postInit();\r\n }\r\n }\r\n\r\n setButtonRowTemplate(buttonRowTemplate){\r\n this.buttonRowTemplate = buttonRowTemplate;\r\n }\r\n\r\n doGlobalSearch(event: KeyboardEvent): void {\r\n let searchString: string = ((<HTMLInputElement>event.target).value).trim();\r\n if (event.keyCode === 13) {\r\n // Send a message with search-text\r\n console.debug(\"In SearchListController enter was detected\");\r\n this.globalSearch = searchString;\r\n this.searchStringSubject.next(this.getSearchString(searchString));\r\n this.searchButtonClicked();\r\n return;\r\n }\r\n\r\n if (this.disableLocalFiltering === false) {\r\n if (this.globalSearch !== searchString) {\r\n if (!searchString || searchString.length === 0) {\r\n this.filtersSubject.next([]);\r\n } else {\r\n let filterField: string;\r\n for (let field of this.filterByAllowedFields) {\r\n filterField = (filterField) ? filterField + \" or \" + field : field;\r\n }\r\n this.filtersSubject.next([new HciFilterDto(filterField, \"string\", this.getSearchString(searchString), undefined, \"L\", true)]);\r\n }\r\n }\r\n }\r\n this.globalSearch = searchString;\r\n }\r\n\r\n searchButtonClicked() {\r\n\r\n // Validation Check: if invalid, do not search.\r\n if (this.globalSearchValidator && this.isInvalid()) {\r\n return;\r\n }\r\n\r\n this.subscriptions.add(this.allowSearchSubject$.subscribe(val => {\r\n if (val === \"allowSearch\") {\r\n this.allowSearch = true;\r\n } else {\r\n if (val === \"preventSearch\") {\r\n this.allowSearch = false;\r\n }\r\n }\r\n }));\r\n\r\n this.searchAllowedSubject$.next(this.allowSearch);\r\n\r\n if (this.allowSearch) {\r\n if (this.globalSearch) {\r\n this.searchStringSubject.next(this.getSearchString(this.globalSearch));\r\n if (this.globalSearch.length === 0) {\r\n this.filtersSubject.next([]);\r\n } else {\r\n let filterField: string;\r\n if (this.quickSearchFields.length > 0) {\r\n for (let field of this.quickSearchFields) {\r\n filterField = (filterField) ? filterField + \" or \" + field : field;\r\n }\r\n } else {\r\n for (let field of this.filterByAllowedFields) {\r\n filterField = (filterField) ? filterField + \" or \" + field : field;\r\n }\r\n\r\n }\r\n\r\n this.filtersSubject.next([new HciFilterDto(filterField, \"string\", this.getSearchString(this.globalSearch), undefined, \"L\", true)]);\r\n }\r\n }\r\n this.selectedSearchTypeSubject.next(this.selectedSearchType);\r\n this.performedSearchSubject.next(\"searchPerformed\");\r\n } else {\r\n this.filtersSubject.next([]);\r\n }\r\n }\r\n\r\n setSelectedSearchList(selectedSearchList: string): void {\r\n this.selectedSearchList = selectedSearchList;\r\n this.selectedSearchListSubject.next(this.selectedSearchList);\r\n this.searchListChange.emit(selectedSearchList);\r\n }\r\n\r\n selectSearchType() {\r\n console.debug(\"selectSearchType\");\r\n console.debug(this.selectedSearchType);\r\n this.selectedSearchTypeSubject.next(this.selectedSearchType);\r\n }\r\n\r\n addSearchList(title: string): void {\r\n if (isDevMode()) {\r\n console.debug(\"SearchListControllerComponent.addSearchList: \" + title);\r\n }\r\n\r\n if (title && this.searchLists.indexOf(title) === -1) {\r\n this.searchLists.push(title);\r\n }\r\n\r\n if (this.searchLists.length === 1) {\r\n this.selectedSearchList = title;\r\n this.selectedSearchListSubject.next(this.selectedSearchList);\r\n }\r\n }\r\n\r\n enableQuickSearch(enabled: boolean = true){\r\n this.quickSearchEnabled = enabled;\r\n }\r\n\r\n\r\n /**\r\n * Updates the config with options and re-fetches data.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfig\");\r\n }\r\n\r\n if (config) {\r\n this.config = Object.assign({}, this.config, config);\r\n\r\n if (config.filterByAllowedFields) {\r\n this.filterByAllowedFields = config.filterByAllowedFields;\r\n }\r\n if (config.quickSearchFields) {\r\n this.quickSearchFields = config.quickSearchFields;\r\n }\r\n if (config.advancedSearchFields) {\r\n this.advancedSearchFields = config.advancedSearchFields;\r\n }\r\n if (config.sortByAllowedFields) {\r\n this.sortByAllowedFields = config.sortByAllowedFields;\r\n }\r\n if (config.showQuickSearchOptions) {\r\n this.showQuickSearchOptions = config.showQuickSearchOptions;\r\n }\r\n if (config.inputMultiline) {\r\n this.inputMultiline = config.inputMultiline;\r\n }\r\n if (config.searchOptionsWidth) {\r\n this.searchOptionsWidth = config.searchOptionsWidth;\r\n }\r\n if (config.searchTypeArray) {\r\n this.searchTypeArray = config.searchTypeArray;\r\n if (config.searchType) {\r\n this.selectedSearchType = this.searchTypeArray[this.searchTypeArray.findIndex(x => x === config.searchType)];\r\n } else {\r\n this.selectedSearchType = this.searchTypeArray[0];\r\n }\r\n }\r\n if (config.disableLocalFiltering) {\r\n this.disableLocalFiltering = config.disableLocalFiltering;\r\n }\r\n if (config.advancedSearchAllowFilter) {\r\n this.advancedSearchAllowFilter = config.advancedSearchAllowFilter;\r\n }\r\n if (config.selectedSearchString) {\r\n this.globalSearch = config.selectedSearchString;\r\n }\r\n if (config.sorts) {\r\n this.sorts = config.sorts;\r\n }\r\n if (config.searchListChange) {\r\n this.searchListChange = config.searchListChange;\r\n }\r\n if (config.showTitle != null) {\r\n this.showTitle = config.showTitle;\r\n }\r\n if (config.buttonTemplate) {\r\n this.buttonTemplate = config.buttonTemplate;\r\n }\r\n if (config.showBackButton != null) {\r\n this.showBackButton = config.showBackButton;\r\n }\r\n if (config.basicSearchHeader != null) {\r\n this.basicSearchHeader = config.basicSearchHeader;\r\n }\r\n if (config.globalSearchPlaceholder) {\r\n this.globalSearchPlaceholder = config.globalSearchPlaceholder;\r\n }\r\n if (config.globalSearchValidator) {\r\n this.globalSearchValidator = config.globalSearchValidator;\r\n }\r\n if (config.customStyles) {\r\n this.customStyles = config.customStyles;\r\n }\r\n\r\n if (config.fields != null) {\r\n this.fields = config.fields;\r\n if (this.fields) {\r\n for (let field of this.fields) {\r\n if (field.valueURL && !field.values) {\r\n // We found a value URL for the field and will populate the values now\r\n this.getValuesFromURL(field);\r\n }\r\n }\r\n }\r\n }\r\n if (config.advancedSearch != null) {\r\n this.advancedSearch = config.advancedSearch;\r\n if (this.advancedSearch != null) {\r\n var i;\r\n for (i = 0; i < this.advancedSearch.length; i++) {\r\n var j;\r\n for (j = 0; j < this.advancedSearch[i].fields.length; j++) {\r\n if (this.advancedSearch[i].fields[j].valueURL && !this.advancedSearch[i].fields[j].values) {\r\n this.getValuesFromURL(this.advancedSearch[i].fields[j]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(config.searchSortingOptions){\r\n this.searchSortingOptions = config.searchSortingOptions;\r\n }\r\n\r\n if(config.initialSearchSortingSelection){\r\n this.currentSearchSorting = config.initialSearchSortingSelection;\r\n }\r\n }\r\n if (this.sortByAllowedFields.length > 0 && this.sorts.length === 0) {\r\n this.sorts.push(new HciSortDto(this.sortByAllowedFields[0]));\r\n }\r\n console.log('anotherSorting Field:', this.searchSortingOptions);\r\n this.setupFilters();\r\n super.updateConfig(config);\r\n }\r\n\r\n /**\r\n * Return the value of the objects after making a http call to the valueURL of the field\r\n *\r\n * @param {any} field\r\n * @returns {string[]}\r\n */\r\n getValuesFromURL(field: any) {\r\n let url: string;\r\n url = field.valueURL;\r\n this.http.get(url)\r\n .subscribe(\r\n data => {\r\n console.debug(\"values coming back from\" + field.valueURL);\r\n let values: any[] = JSON.parse(JSON.stringify(data));\r\n console.debug(values);\r\n if (values && values.length > 0) {\r\n field.values = values;\r\n //Sort the values of the drop down lists befinre\r\n values.sort((a, b) => {\r\n if (a.display < b.display) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n },\r\n error => {\r\n console.error(\"Error while getting values for URL\" + this.getFieldDisplay(field));\r\n console.error(error);\r\n }, () => {\r\n });\r\n }\r\n\r\n /**\r\n * Return the display property of the field if it exists, otherwise, try converting camel case to words.\r\n *\r\n * @param {string} fieldName\r\n * @returns {string}\r\n */\r\n\r\n\r\n getFieldDisplay(fieldName: string): string {\r\n //this.basicSearch.fields\r\n for (let field of this.fields) {\r\n if (field.field === fieldName) {\r\n return field.display;\r\n }\r\n }\r\n //advancedSearch field display\r\n let i;\r\n for (i = 0; i < this.advancedSearch.length; i++) {\r\n let j;\r\n for (j = 0; j < this.advancedSearch[i].fields.length; j++) {\r\n if (this.advancedSearch[i].fields[j].field === fieldName) {\r\n return this.advancedSearch[i].fields[j].display;\r\n }\r\n }\r\n }\r\n\r\n let display: string = fieldName.replace(/([A-Z])/g, \" $1\");\r\n return display.charAt(0).toUpperCase() + display.slice(1);\r\n }\r\n\r\n /**\r\n * Return the type property of the field if it exists. Defaults to input\r\n *\r\n * @param {string} fieldName\r\n * @returns {string}\r\n */\r\n getFieldType(fieldName: string): string {\r\n //this.basicSearch.fields\r\n for (let field of this.fields) {\r\n if (field.field === fieldName) {\r\n return field.type;\r\n }\r\n }\r\n\r\n let i;\r\n for (i = 0; i < this.advancedSearch.length; i++) {\r\n let j;\r\n for (j = 0; j < this.advancedSearch[i].fields.length; j++) {\r\n if (this.advancedSearch[i].fields[j].field === fieldName) {\r\n return this.advancedSearch[i].fields[j].type;\r\n }\r\n }\r\n }\r\n return \"input\";\r\n }\r\n\r\n getFields(){\r\n return this.fields;\r\n }\r\n\r\n setFields(fields){\r\n this.fields = fields;\r\n }\r\n\r\n getField(fieldName:string){\r\n return this.fields.find(x=>x.field == fieldName);\r\n }\r\n\r\n /**\r\n * Create filters based upon available fields for filtering.\r\n */\r\n setupFilters(apply: boolean = false): void {\r\n this.boundFilters = [];\r\n this.boundAdvancedSearchFilters = [];\r\n\r\n for (let filterField of this.filterByAllowedFields) {\r\n this.boundFilters.push(new HciFilterDto(filterField, \"string\", undefined, undefined, \"L\", false));\r\n }\r\n for (let filterField of this.advancedSearchFields) {\r\n this.boundAdvancedSearchFilters.push(new HciFilterDto(filterField, \"string\", undefined, undefined, \"L\", false));\r\n }\r\n if (apply) {\r\n this.applyFilters();\r\n this.applyAdvancedSearchFilters();\r\n }\r\n this.changed = false;\r\n }\r\n\r\n\r\n /**\r\n * Return true if at least one filter is valid.\r\n *\r\n * @returns {boolean}\r\n */\r\n hasValidFilters(): boolean {\r\n for (let filter of this.boundFilters) {\r\n if (filter.valid) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the value of a filter.\r\n *\r\n * @param {string} value\r\n * @param {HciFilterDto} filter\r\n */\r\n setFilter(value: string, filter: HciFilterDto): void {\r\n filter.value = value;\r\n if (value) {\r\n this.changed = true;\r\n } else {\r\n this.changed = false;\r\n if (!this.disableLocalFiltering) {\r\n for (let fl of this.boundFilters) {\r\n if (fl.value) {\r\n this.changed = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set valid filters to valid and call data.\r\n */\r\n applyFilters(event?: KeyboardEvent): void {\r\n if (event && event.keyCode !== 13 && event.type && event.type !== \"click\") {\r\n return;\r\n }\r\n\r\n for (let filter of this.boundFilters) {\r\n if (filter.value instanceof Date) {\r\n filter.valid = true;\r\n } else if (filter.value && filter.value.length > 0) {\r\n filter.valid = true;\r\n } else {\r\n filter.valid = false;\r\n }\r\n }\r\n\r\n this.globalSearch = \"\";\r\n this.filtersSubject.next(this.boundFilters);\r\n //Setting a flag on buttonClick event.\r\n if (event && (event.keyCode === 13 || event.type === \"click\")) {\r\n this.performedBasicSearchSubject.next(\"basicSearchClicked\");\r\n }\r\n this.changed = true;\r\n }\r\n\r\n\r\n /**\r\n * Set valid advanced search filters to valid and call data.\r\n */\r\n\r\n applyAdvancedSearchFilters(event?: KeyboardEvent): void {\r\n this.updatedAdvanceSearchFilters = [];\r\n if (event && event.keyCode !== 13 && event.type && event.type !== \"click\") {\r\n return;\r\n }\r\n\r\n for (let filter of this.boundAdvancedSearchFilters) {\r\n filter.valid = (filter.value && filter.value.length > 0);\r\n }\r\n\r\n this.updatedAdvanceSearchFilters = this.boundAdvancedSearchFilters;\r\n\r\n this.globalSearch = \"\";\r\n if (this.advancedSearchAllowFilter) {\r\n this.filtersSubject.next(this.updatedAdvanceSearchFilters);\r\n } else {\r\n this.filtersSubject.next([]);\r\n }\r\n this.advancedSearchFiltersSubject.next(this.updatedAdvanceSearchFilters);\r\n\r\n if (event && (event.keyCode === 13 || event.type === \"click\")) {\r\n this.performedAdvancedSearchSubject.next(\"advancedSearchClicked\");\r\n }\r\n\r\n this.changed = true;\r\n }\r\n\r\n\r\n /**\r\n * Clear filter fields and make invalid.\r\n *\r\n * @param {HciFilterDto} filter\r\n */\r\n clearFilter(filter: HciFilterDto): void {\r\n for (let i = 0; i < this.boundFilters.length; i++) {\r\n if (this.boundFilters[i].field === filter.field) {\r\n this.boundFilters[i].setValue(undefined);\r\n this.boundFilters[i].setValid(false);\r\n break;\r\n }\r\n }\r\n\r\n this.filtersSubject.next(this.boundFilters);\r\n }\r\n\r\n onSearchSortClicked($event: MouseEvent, searchSortItem: any){\r\n if(this.currentSearchSorting.value === searchSortItem.value){\r\n this.currentSearchSorting.isAsc = !this.currentSearchSorting.isAsc;\r\n }else {\r\n this.currentSearchSorting = Object.assign({}, searchSortItem);\r\n this.currentSearchSorting.isAsc = true;\r\n }\r\n this.searchSortingSelectionChangeSubject$.next(this.currentSearchSorting);\r\n }\r\n\r\n /**\r\n * TODO: If sort in group, reset group data, not overall.\r\n *\r\n * @param {MouseEvent} event\r\n * @param {string} field\r\n */\r\n setSort(event: MouseEvent, field: string): void {\r\n if (this.sorts && this.sorts.length === 1 && this.sorts[0].field === field) {\r\n // Regular behavior\r\n } else if (this.sorts && this.sorts.length === 1 && !event.ctrlKey && this.sorts[0].field !== field) {\r\n this.sorts = [];\r\n } else if (!event.ctrlKey) {\r\n this.sorts = [];\r\n }\r\n\r\n if (this.sorts.length === 0) {\r\n this.sorts.push(new HciSortDto(field));\r\n } else {\r\n let exists: boolean = false;\r\n for (let sort of this.sorts) {\r\n if (sort.field === field) {\r\n sort.asc = !sort.asc;\r\n exists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!exists) {\r\n this.sorts.push(new HciSortDto(field));\r\n }\r\n }\r\n this.sortsSubject.next(this.sorts);\r\n }\r\n\r\n /**\r\n * Return true if the sort field is used.\r\n *\r\n * @param sortField\r\n * @returns {boolean}\r\n */\r\n isSort(sortField): boolean {\r\n for (let sort of this.sorts) {\r\n if (sort.field === sortField) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Return true if the sort field is ascending.\r\n *\r\n * @param sortField\r\n * @returns {boolean}\r\n */\r\n isSortAsc(sortField): boolean {\r\n for (let sort of this.sorts) {\r\n if (sort.field === sortField) {\r\n return sort.asc;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Return true if the field is the first sort field.\r\n *\r\n * @param sortField\r\n * @returns {boolean}\r\n */\r\n isFirstSort(sortField): boolean {\r\n if (!this.sorts || this.sorts.length === 0) {\r\n return false;\r\n } else {\r\n return this.sorts[0].field === sortField;\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the options popout.\r\n *\r\n * @param {MouseEvent} event\r\n */\r\n toggleShowOptions(event: MouseEvent): void {\r\n this.cogWheelClickedSubject$.next(true);\r\n this.subscriptions.add(this.allowToggleSubject$.subscribe(val => {\r\n if (val === \"allowToggle\") {\r\n this.allowToggle = true;\r\n this.showToggleOptions = true;\r\n } else {\r\n if (val === \"preventToggle\") {\r\n this.allowToggle = false;\r\n this.showToggleOptions = false;\r\n }\r\n }\r\n }));\r\n\r\n if (this.showOptions && this.elementRef.nativeElement.querySelector(\".search-options\").contains(event.target)\r\n && (!(this.elementRef.nativeElement.querySelector(\"button.card-header-button.btn.closeable\").contains(event.target)))) {\r\n return;\r\n }\r\n let title: HTMLElement = this.elementRef.nativeElement.querySelector(\"#search-title\");\r\n\r\n let options: HTMLElement = title.querySelector(\".search-options\");\r\n\r\n this.renderer.setStyle(options, \"left\", (title.offsetLeft + title.offsetWidth) + \"px\");\r\n if (!options.closest(\".dropdown-menu\")) {\r\n this.renderer.setStyle(options, \"top\", title.getBoundingClientRect().top + \"px\");\r\n }\r\n\r\n this.showOptions = !this.showOptions;\r\n }\r\n\r\n /**\r\n * This function would match a HciFilterDto by comparing a provided field-name\r\n */\r\n getFilterForField(fieldName: string) {\r\n return this.boundAdvancedSearchFilters.find(x => x.field === fieldName);\r\n }\r\n\r\n getBasicFilterForField(fieldName: string){\r\n return this.boundFilters.find(x => x.field === fieldName);\r\n }\r\n\r\n /**\r\n * Listener for back button\r\n */\r\n\r\n backButtonClicked() {\r\n this.backButtonSubject.next(this.backButtonSubject);\r\n }\r\n\r\n /**\r\n * Listen for document clicks.\r\n *\r\n * @param {MouseEvent} event\r\n * @param {HTMLElement} target\r\n */\r\n @HostListener(\"document:click\", [\"$event\", \"$event.target\"])\r\n documentClick(event: MouseEvent, target: HTMLElement) {\r\n if (this.allowToggle) {\r\n try {\r\n if (target.parentElement.getAttribute(\"class\").includes(\"closeable\")) {\r\n this.showOptions = false;\r\n }\r\n\r\n this.toggleShowSubject$.next(this.showOptions);\r\n } catch (error) {\r\n }\r\n }\r\n }\r\n\r\n isInvalid(): boolean {\r\n let invalid = false;\r\n if (this.globalSearchValidator) {\r\n let searchString = this.getSearchString(this.globalSearch);\r\n let globalSearchStrList: string[] = searchString.split(\",\");\r\n\r\n if (typeof this.globalSearchValidator === \"string\") {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if(!globalSearchStr.match(this.globalSearchValidator)) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n } else if (typeof this.globalSearchValidator === \"object\") {\r\n if (this.globalSearchValidator.required && globalSearchStrList.length === 0) {\r\n invalid = true;\r\n }\r\n if (this.globalSearchValidator.minRange && !isNaN(Number(this.globalSearchValidator.minRange))) {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if((!globalSearchStr && Number(this.globalSearchValidator.minRange) > 0)\r\n || (globalSearchStr && globalSearchStr.length < Number(this.globalSearchValidator.minRange))) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (this.globalSearchValidator.maxRange && !isNaN(Number(this.globalSearchValidator.maxRange))) {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if(globalSearchStr && globalSearchStr.length > Number(this.globalSearchValidator.maxRange)) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (this.globalSearchValidator.pattern) {\r\n for (let globalSearchStr of globalSearchStrList) {\r\n if (!globalSearchStr.match(this.globalSearchValidator.pattern)) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n invalid = true;\r\n }\r\n }\r\n return invalid;\r\n }\r\n\r\n getSearchString(searchString: string): string {\r\n searchString = searchString.replace(/\\n/g, \",\");\r\n if (searchString.length > 0) {\r\n let strList = searchString.split(\",\");\r\n searchString = \"\";\r\n for (let str of strList) {\r\n str = str.trim();\r\n searchString = searchString ? (str ? searchString + \",\" + str : searchString) : str;\r\n }\r\n }\r\n\r\n return searchString;\r\n }\r\n\r\n get hasAdvancedSearchVerticalScrollbar(): boolean {\r\n const divPanel = document.getElementById(\"advancedSearch-scroll-panel\");\r\n return divPanel.scrollHeight > divPanel.clientHeight;\r\n }\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n isDevMode,\r\n Optional,\r\n Output,\r\n QueryList,\r\n Renderer2,\r\n SimpleChange,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Observable, of, Subject} from \"rxjs\";\r\nimport {delay, finalize} from \"rxjs/operators\";\r\nimport {NgbDropdown} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {HciDataDto, HciFilterDto, HciGridDto, HciGroupingDto, HciPagingDto, HciSortDto} from \"@huntsman-cancer-institute/hci-ng-grid-dto\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"../nav.component\";\r\nimport {NavigationService} from \"../../services/navigation.service\";\r\nimport {RowGroup} from \"./row-group\";\r\nimport {NavigationGlobalService} from \"../../services/navigation-global.service\";\r\nimport {SearchListControllerComponent} from \"./search-list-controller.component\";\r\n\r\n/**\r\n * Shows a list of items that can be grouped or not grouped. The data can be generated from an array, or from an external\r\n * data call using jpa-services.\r\n */\r\n@ComponentType(\"SearchListComponent\")\r\n@Component(\r\n {\r\n selector: \"hci-search-list\",\r\n styles: [\r\n `\r\n .results-count {\r\n background-color: var(--bluewarm-dark);\r\n color: var(--white-lightest);\r\n font-size: 17.3px;\r\n padding-left: 18px;\r\n box-shadow: 0 1px 10px 3px var(--greycool-meddarker);\r\n z-index: 1;\r\n }\r\n\r\n .format-bottom-padding {\r\n padding-bottom: 25px;\r\n }\r\n\r\n :host::ng-deep div[id^='row-']:nth-child(even) {\r\n background-color: var(--white-medium) !important;\r\n }\r\n\r\n :host::ng-deep div[id^='row-']:nth-child(odd) {\r\n background-color: var(--white-lightest) !important;\r\n }\r\n\r\n :host::ng-deep div[id^='row-'] {\r\n border: 0 !important;\r\n }\r\n\r\n :host::ng-deep div.row-parent.active {\r\n color: white !important;\r\n background-color: var(--bluewarmvivid-medlight) !important;\r\n }\r\n\r\n :host::ng-deep .ri-sidebar-cell {\r\n background-color: transparent !important;\r\n }\r\n `\r\n ],\r\n template:\r\n `\r\n <div\r\n *ngIf=\"showResultsCount && searchResultMessage\"\r\n class=\"results-count\"\r\n [ngClass]=\"{ 'format-bottom-padding': this.searchResultMessage === '' }\"\r\n >\r\n {{ this.searchResultMessage }}\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!showResultsCount || !searchResultMessage\"\r\n class=\"results-count\"\r\n >\r\n </div>\r\n\r\n <div class=\"d-flex scrollable\">\r\n <div id=\"no-results-found\"></div>\r\n <div id=\"search-title\" class=\"d-flex flex-column\">\r\n <div class=\"d-flex ps-3\">\r\n </div>\r\n </div>\r\n <div id=\"result-list\">\r\n <div class=\"d-flex flex-column\" [class.y-hidden]=\"selectedRowGroup\">\r\n <hci-busy [busySubjects]=\"loadingSubjects\" parentSelector=\".scrollable\" [icon]=\"busyIcon\"></hci-busy>\r\n <!-- No grouping -->\r\n <ng-container *ngIf=\"!grouping.fields || grouping.fields.length === 0\">\r\n <ng-container *ngFor=\"let rowGroup of viewData\">\r\n <ng-container *ngIf=\"route\">\r\n <div #rowParent\r\n [id]=\"getRowId(rowGroup.rgRows[0])\"\r\n class=\"row-parent nav-item\"\r\n [routerLink]=\"route(rowGroup, rowGroup.rgRows[0])\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{changeDetection: rowRefresh}\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, rowGroup.rgRows[0])\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: rowGroup.rgRows[0]}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!route\">\r\n <div #rowParent\r\n [id]=\"getRowId(rowGroup.rgRows[0])\"\r\n class=\"row-parent nav-item\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, rowGroup.rgRows[0])\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: rowGroup.rgRows[0]}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouping with inline expansion -->\r\n <ng-container *ngIf=\"grouping.fields && grouping.fields.length > 0 && !selectedRowGroup\">\r\n <ng-container *ngFor=\"let rowGroup of viewData; let i = index;\">\r\n <div [id]=\"getRowGroupId(rowGroup)\"\r\n class=\"group-parent nav-item group {{groupClass}}\"\r\n (click)=\"onGroupClick($event, cmpt, rowGroup)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"groupTemplate; context: {rowGroup: rowGroup, cmpt: cmpt}\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"rowGroup.rgExpanded\">\r\n <div class=\"nav-container\" (click)=\"onGroupClick($event, cmpt, rowGroup)\">\r\n <ng-container *ngFor=\"let row of rowGroup.rgRows\">\r\n <ng-container *ngIf=\"route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n [routerLink]=\"route(rowGroup, row)\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{changeDetection: rowRefresh}\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Grouping with separate individual expansion -->\r\n <div *ngIf=\"grouping.fields && grouping.fields.length > 0 && selectedRowGroup\"\r\n #groupSelectedParent\r\n class=\"group-selected-parent flex-column {{groupClass}}\">\r\n <div [id]=\"getRowGroupId(selectedRowGroup)\"\r\n class=\"group-parent nav-item group active\"\r\n (click)=\"onGroupClick($event, cmpt, selectedRowGroup)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"groupSelectedTemplate; context: {rowGroup: selectedRowGroup, cmpt: cmpt}\"></ng-container>\r\n </div>\r\n\r\n <div #selectedRowGroupContainer id=\"selected-group-container\" class=\"d-flex flex-column y-auto\">\r\n <div id=\"innerRowGroupContainer\" class=\"d-flex flex-column\">\r\n <ng-container *ngFor=\"let row of selectedRowGroup.rgRows\">\r\n <ng-container *ngIf=\"route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n [routerLink]=\"route(rowGroup, row)\"\r\n routerLinkActive=\"active\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!route\">\r\n <div #rowParent\r\n [id]=\"getRowId(row)\"\r\n class=\"row-parent nav-item\"\r\n (click)=\"onRowClick($event, cmpt, rowGroup, row)\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {row: row}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Paging footer -->\r\n <div *ngIf=\"paging.pageSize > 0\" class=\"d-flex flex-shrink-0 paging-footer justify-content-between ps-3 pe-3\"\r\n style=\"min-height: 1rem; align-items: center;\">\r\n <ng-container *ngIf=\"!selectedRowGroup\">\r\n <div (click)=\"doPageFirst()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i\r\n class=\"fas fa-fast-backward fa-xs\"></i></div>\r\n <div (click)=\"doPagePrevious()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i\r\n class=\"fas fa-backward fa-xs\"></i></div>\r\n <div style=\"font-size: 0.8rem;\">{{paging.page + 1}} of {{paging.numPages}}</div>\r\n <div (click)=\"doPageNext()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\">\r\n <i\r\n class=\"fas fa-forward fa-xs\"></i></div>\r\n <div (click)=\"doPageLast()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\">\r\n <i\r\n class=\"fas fa-fast-forward fa-xs\"></i></div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Default template for a group -->\r\n <ng-template #defaultGroupTemplate let-rowGroup=\"rowGroup\">\r\n <div class=\"d-flex flex-grow-1 ps-2\" style=\"align-items: center;\">\r\n <div class=\"font-weight-bold me-auto\">{{getGroupDisplay(rowGroup)}}</div>\r\n <ng-container class=\"d-flex me-1\" style=\"align-items: center;\">\r\n <div *ngIf=\"rowGroup.rgExpanded === true; else plusTemplate\">\r\n <i class=\"fas fa-minus fa-sm me-1\"></i>\r\n </div>\r\n <ng-template #plusTemplate>\r\n <div>\r\n <i class=\"fas fa-plus fa-sm me-1\"></i>\r\n </div>\r\n </ng-template>\r\n ({{rowGroup.rgCount}})\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Default template for an individual selected group -->\r\n <ng-template #defaultGroupSelectedTemplate let-rowGroup=\"rowGroup\">\r\n <div class=\"d-flex flex-grow-1 ps-2\" style=\"align-items: center;\">\r\n <div class=\"me-3\">\r\n <i class=\"fas fa-level-up-alt\" data-fa-transform=\"flip-h\"></i>\r\n </div>\r\n <div class=\"font-weight-bold me-auto\">{{getGroupDisplay(rowGroup)}}</div>\r\n </div>\r\n </ng-template>\r\n `\r\n }\r\n)\r\nexport class SearchListComponent extends NavComponent {\r\n\r\n searchResultMessage = \"\";\r\n\r\n // The data that is actually rendered.\r\n viewData: RowGroup[];\r\n preparedData: any[] =[];\r\n\r\n // A reference to the search list controller if applicable.\r\n @Input() controller: SearchListControllerComponent;\r\n\r\n // An array of data.\r\n @Input(\"data\") boundData: Object[];\r\n\r\n // A subject that represents an array of data.\r\n @Input(\"dataSubject\") dataSubject: BehaviorSubject<Object[]>;\r\n\r\n // A function which takes in a HciGridDto and returns a HciDataDto which wraps an array of data.\r\n @Input(\"dataCall\") externalDataCall: (dto: HciGridDto) => Observable<HciDataDto>;\r\n\r\n // An array of subjects with booleans to control the hci-busy overlaying the search-list.\r\n @Input() loadingSubjects: Subject<boolean>[];\r\n\r\n // An array of booleans to control the hci-busy overlaying the search-list.\r\n @Input() loading: boolean[] = [false];\r\n\r\n // If clicking a row changes a route, this function specifies the route to use.\r\n @Input() route: (rowGroup: any, row: any) => any[];\r\n\r\n // Expand the selected row group as its own screen, or show rows under selected row groups in the same view.\r\n @Input() inlineExpand: boolean = false;\r\n\r\n // Without any other metadata for what a row is, provide the field to be used for the id.\r\n // This is actually the field that has the (defined) rowId -- whatever it is under different\r\n // structures: idPatient, idMedicalEvent etc\r\n @Input() rowId: any;\r\n\r\n // Css class applied to the row group parent.\r\n @Input() groupClass: string = \"\";\r\n\r\n // Css class applied to the row parent.\r\n @Input() rowClass: string = \"\";\r\n\r\n // A template for how to display row group info if using the default template. e.g. \"lastName, firstName\" field names get replaced with values.\r\n @Input() groupDisplay: string;\r\n\r\n // TODO: Reimplement\r\n @Input() closeOthers: boolean = true;\r\n\r\n // The list of fields to group by.\r\n @Input() groupingFields: string[] = [];\r\n\r\n // delimiter for getGroupDisplay\r\n @Input() delimiter: string = \", \";\r\n\r\n // TODO: Reimplement if we want users to be able to control grouping.\r\n @Input() groupByAllowedFields: string[] = [];\r\n\r\n // The page size of row groups or rows if no grouping.\r\n @Input() pageSize: number;\r\n\r\n // The page size of rows in a selected group.\r\n @Input() groupPageSize: number = 50;\r\n\r\n // The number of pages of rows to cache internally before an external call is made.\r\n @Input() groupCacheNumPages: number;\r\n\r\n // A reference to a parent dropdown if applicable.\r\n @Input() dropdown: NgbDropdown;\r\n\r\n //Which icon to use for the busy spinner\r\n @Input() busyIcon: string = \"hci fa-core fa-spin\";\r\n\r\n @Input() showResultsCount: boolean = false;\r\n\r\n // If no onGroupClick function is provided, this is used. The overriding function should still call this.\r\n defaultGroupClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup) => void = (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup) => {\r\n cmpt.setGroupExpanded(event, rowGroup);\r\n\r\n this.groupClick.emit({\r\n event: event,\r\n rowGroup: rowGroup\r\n });\r\n };\r\n\r\n @Input() onGroupClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup) => void;\r\n\r\n // If no onRowClick function is provided, this is used. The overriding function should still call this.\r\n defaultRowClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup, row: any) => void = (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup, row: any) => {\r\n if (this.dropdown) {\r\n this.dropdown.close();\r\n }\r\n\r\n this.selectedRow = row;\r\n\r\n this.rowClick.emit({\r\n event: event,\r\n row: row,\r\n rowGroup: rowGroup\r\n });\r\n\r\n event.stopPropagation();\r\n };\r\n @Input() onRowClick: (event: MouseEvent, cmpt: SearchListComponent, rowGroup: RowGroup, row: any) => void;\r\n\r\n @Input() groupTemplate: TemplateRef<any>;\r\n @Input() groupSelectedTemplate: TemplateRef<any>;\r\n @Input() itemTemplate: TemplateRef<any>;\r\n\r\n @Input() onGroupClose: Function;\r\n\r\n @Output() groupClick: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() rowClick: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() dataChange: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() afterFilterEvent: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @ViewChild(\"defaultGroupTemplate\", {read: TemplateRef, static: true}) defaultGroupTemplate: TemplateRef<any>;\r\n @ViewChild(\"defaultGroupSelectedTemplate\", {\r\n read: TemplateRef,\r\n static: true\r\n }) defaultGroupSelectedTemplate: TemplateRef<any>;\r\n\r\n selectedRow: any;\r\n selectedRowGroup: RowGroup;\r\n selectedRowGroupContainer: HTMLElement;\r\n innerRowGroupContainer: HTMLElement;\r\n\r\n // Grid DTO info needed to build external data requests.\r\n sorts: HciSortDto[] = [];\r\n filters: HciFilterDto[] = [];\r\n paging: HciPagingDto = new HciPagingDto(0, -1);\r\n grouping: HciGroupingDto = new HciGroupingDto([]);\r\n\r\n //globalRowGroupMap: Map<string, number> = new Map<string, number>();\r\n groupedDataSet = [];\r\n\r\n pagingSubject: Subject<HciPagingDto> = new BehaviorSubject<HciPagingDto>(this.paging);\r\n\r\n // A dummy number that increments based on selection changes. Forces routerLinkActive to recheck.\r\n rowRefresh: number = 0;\r\n\r\n busy: boolean = false;\r\n\r\n lastScrollTop: number = -1;\r\n lastScrollPosition: number = 1;\r\n setScrollTop: boolean = false;\r\n\r\n cmpt: SearchListComponent = this;\r\n\r\n lastEvent: any;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n @Optional() navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n if (!navigationService) {\r\n this.navigationService = new NavigationService(navigationGlobalService);\r\n }\r\n\r\n if (this.navigationService.getId() === undefined) {\r\n this.isRoot = true;\r\n this.setConfig({});\r\n }\r\n }\r\n\r\n /**\r\n * Return the id for the row group based upon the group key or if undefined, the first row's id. e.g. \"row-group-bob-smith\"\r\n *\r\n * @param {RowGroup} rowGroup\r\n * @returns {string}\r\n */\r\n getRowGroupId(rowGroup: RowGroup): string {\r\n if (rowGroup.rgKey) {\r\n return \"row-group-\" + rowGroup.rgKey;\r\n } else {\r\n let rowId: string = this.getRowId(rowGroup.rgRows[0]);\r\n return rowId.replace(\"row-\", \"row-group-\");\r\n }\r\n }\r\n\r\n /**\r\n * Return the row id. e.g. \"row-1\".\r\n *\r\n * @param row\r\n * @returns {string}\r\n */\r\n getRowId(row: any): string {\r\n if (this.rowId) {\r\n return \"row-\" + <string><any>row[this.rowId];\r\n } else {\r\n return \"row-undefined\";\r\n }\r\n }\r\n\r\n getViewData(): RowGroup[]{\r\n return this.viewData;\r\n }\r\n\r\n getPreparedData(): RowGroup[]{\r\n return this.preparedData;\r\n }\r\n\r\n /**\r\n * On init, listen for loading subjects and listen for page changes.\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].subscribe((busy: boolean) => {\r\n this.busy = busy;\r\n });\r\n }\r\n\r\n this.pagingSubject.subscribe((paging: HciPagingDto) => {\r\n this.paging = paging;\r\n this.setData();\r\n });\r\n }\r\n\r\n /**\r\n * Called when inputs change.\r\n *\r\n * @param {SimpleChanges} changes\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n super.ngOnChanges(changes);\r\n if (changes[\"groupingFields\"]) {\r\n let change: SimpleChange = <SimpleChange>changes[\"groupingFields\"];\r\n if (change.currentValue) {\r\n this.grouping.setFields(change.currentValue);\r\n } else {\r\n this.grouping.setFields([]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set data only when the component has fully initialized and is rendered.\r\n */\r\n checkInitialized() {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.postInit();\r\n\r\n if (this.dataSubject) {\r\n //May as well make it spin while processing, as well as loading. Otherwise it looks frozen\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(true);\r\n }\r\n\r\n this.dataSubject\r\n .pipe(delay(0))\r\n .subscribe((data: Object[]) => {\r\n this.boundData = data;\r\n this.setResultMessage(this.boundData);\r\n this.setData();\r\n\r\n //Now done loading\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(false);\r\n }\r\n });\r\n } else {\r\n this.setData();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Upon new rowParent being set, add any classes if rowClass is defined.\r\n *\r\n * @param {QueryList<ElementRef>} rowParents\r\n */\r\n @ViewChildren(\"rowParent\", {read: ElementRef}) set rowParents(rowParents: QueryList<ElementRef>) {\r\n if (rowParents && this.rowClass) {\r\n rowParents.forEach((e: ElementRef) => {\r\n let classes: string[] = this.rowClass.split(\" \");\r\n for (let className of classes) {\r\n this.renderer.addClass(e.nativeElement, className);\r\n }\r\n });\r\n this.rowRefresh += 1;\r\n }\r\n }\r\n\r\n postInit(): void {\r\n if (isDevMode()) {\r\n console.debug(\"SearchListComponent.postInit: \" + this.id);\r\n }\r\n\r\n if (this.getParent()) {\r\n this.controller = <SearchListControllerComponent>this.getParent().getComponentByType(\"SearchListControllerComponent\");\r\n }\r\n\r\n if (this.controller) {\r\n if (isDevMode()) {\r\n console.debug(\"SearchListComponent: using controller\");\r\n }\r\n\r\n this.controller.addSearchList(this.title);\r\n\r\n this.controller.filtersSubject.subscribe((filters: HciFilterDto[]) => {\r\n this.filters = filters;\r\n this.setData();\r\n this.resetPaging();\r\n this.afterFilterEvent.emit(this.preparedData);\r\n });\r\n\r\n this.controller.sortsSubject.subscribe((sorts: HciSortDto[]) => {\r\n this.sorts = sorts;\r\n this.setData();\r\n });\r\n\r\n this.controller.selectedSearchListSubject.subscribe((title: string) => {\r\n if (isDevMode()) {\r\n console.debug(\"selectedSearchListSubject.subscribe: \" + this.title + \", \" + title);\r\n }\r\n\r\n let visible: boolean = true;\r\n\r\n if (this.title && title && this.title !== title) {\r\n visible = false;\r\n }\r\n\r\n if (visible) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"flex\");\r\n } else {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"none\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This function would reset paging and fires\r\n */\r\n resetPaging() {\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n\r\n /**\r\n * Updates the config with options and re-fetches data.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfig\");\r\n }\r\n\r\n if (config) {\r\n this.config = Object.assign({}, this.config, config);\r\n\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n if (config.groupByAllowedFields) {\r\n this.groupByAllowedFields = config.groupByAllowedFields;\r\n }\r\n if (config.sorts) {\r\n this.sorts = config.sorts;\r\n }\r\n if (config.groupingFields) {\r\n this.groupingFields = config.groupingFields;\r\n this.grouping.setFields(config.groupingFields);\r\n }\r\n if (config.pageSize) {\r\n this.pageSize = config.pageSize;\r\n this.paging.setPageSize(config.pageSize);\r\n }\r\n if (config.groupDisplay) {\r\n this.groupDisplay = config.groupDisplay;\r\n }\r\n if (config.delimiter) {\r\n this.delimiter = config.delimiter;\r\n }\r\n if (config.closeOthers !== undefined) {\r\n this.closeOthers = config.closeOthers;\r\n }\r\n if (config.groupTemplate) {\r\n this.groupTemplate = config.groupTemplate;\r\n this.groupSelectedTemplate = config.groupTemplate;\r\n }\r\n if (config.groupSelectedTemplate) {\r\n this.groupSelectedTemplate = config.groupSelectedTemplate;\r\n }\r\n if (config.itemTemplate) {\r\n this.itemTemplate = config.itemTemplate;\r\n }\r\n if (config.data) {\r\n this.boundData = config.data;\r\n this.setResultMessage(this.boundData);\r\n }\r\n if (config.dataSubject) {\r\n this.dataSubject = config.dataSubject;\r\n }\r\n if (config.dataCall) {\r\n this.externalDataCall = config.dataCall;\r\n }\r\n if (config.onGroupClick) {\r\n this.onGroupClick = config.onGroupClick;\r\n }\r\n if (config.inlineExpand !== undefined) {\r\n this.inlineExpand = config.inlineExpand;\r\n }\r\n if (config.groupClass) {\r\n this.groupClass = config.groupClass;\r\n }\r\n if (config.rowClass) {\r\n this.rowClass = config.rowClass;\r\n }\r\n if (config.rowId) {\r\n this.rowId = config.rowId;\r\n }\r\n if (config.onGroupClick) {\r\n this.onGroupClick = config.onGroupClick;\r\n }\r\n if (config.onRowClick) {\r\n this.onRowClick = config.onRowClick;\r\n }\r\n if (config.loadingSubjects) {\r\n this.loadingSubjects = config.loadingSubjects;\r\n }\r\n if (config.groupPageSize) {\r\n this.groupPageSize = config.groupPageSize;\r\n }\r\n if (config.groupCacheNumPages) {\r\n if (config.groupCacheNumPages >= 2) {\r\n this.groupCacheNumPages = config.groupCacheNumPages;\r\n } else {\r\n console.warn(\"groupCacheNumPages must be 2 or more.\");\r\n }\r\n }\r\n if (config.onGroupClose) {\r\n this.onGroupClose = config.onGroupClose;\r\n }\r\n if (config.busyIcon) {\r\n this.busyIcon = config.busyIcon;\r\n }\r\n\r\n if (config.showResultsCount) {\r\n this.showResultsCount = config.showResultsCount;\r\n }\r\n }\r\n\r\n if (!this.onGroupClick) {\r\n this.onGroupClick = this.defaultGroupClick;\r\n }\r\n if (!this.onRowClick) {\r\n this.onRowClick = this.defaultRowClick;\r\n }\r\n\r\n if (!this.itemTemplate) {\r\n console.warn(\"SearchListComponent: An itemTemplate must be provided!\");\r\n }\r\n\r\n if (!this.groupTemplate) {\r\n this.groupTemplate = this.defaultGroupTemplate;\r\n }\r\n if (!this.groupSelectedTemplate) {\r\n this.groupSelectedTemplate = this.defaultGroupSelectedTemplate;\r\n }\r\n\r\n if (this.externalDataCall) {\r\n this.loadingSubjects = [new BehaviorSubject<boolean>(false)];\r\n }\r\n\r\n\r\n super.updateConfig(config);\r\n\r\n this.setData();\r\n }\r\n\r\n /**\r\n * Generates the data if an array, calls the data if external call.\r\n */\r\n setData(data?: Object[]): void {\r\n if (isDevMode()) {\r\n console.debug(\"setData\");\r\n }\r\n\r\n if (data) {\r\n this.boundData = data;\r\n this.setResultMessage(this.boundData);\r\n }\r\n\r\n this.selectedRowGroup = undefined;\r\n this.selectedRowGroupContainer = undefined;\r\n\r\n if (this.externalDataCall) {\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n\r\n this.externalDataCall(new HciGridDto(this.filters, this.sorts, this.paging, new HciGroupingDto(this.grouping.fields, this.grouping.fields && this.grouping.fields.length > 0)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.generateData(externalData);\r\n });\r\n }\r\n } else {\r\n this.generateData();\r\n }\r\n }\r\n\r\n /**\r\n * Generates the data array that the interface uses to render (regardless of source).\r\n *\r\n * @param {HciDataDto} externalData\r\n */\r\n generateData(externalData?: HciDataDto): void {\r\n if (isDevMode()) {\r\n console.debug(\"generateData\");\r\n console.debug(externalData);\r\n }\r\n\r\n if (externalData) {\r\n this.boundData = externalData.data;\r\n this.setResultMessage(this.boundData);\r\n this.paging.setDataSize(externalData.gridDto.paging.dataSize);\r\n\r\n // Create row groups.\r\n this.viewData = [];\r\n let rowGroup: RowGroup;\r\n\r\n for (let i = 0; i < this.boundData.length; i++) {\r\n rowGroup = new RowGroup(undefined, this.boundData[i], (externalData.dataCounts && externalData.dataCounts !== null) ? externalData.dataCounts[i] : 0);\r\n\r\n if (this.grouping.fields.length > 0) {\r\n for (let groupingField of this.grouping.fields) {\r\n rowGroup[groupingField] = this.boundData[i][groupingField];\r\n }\r\n }\r\n\r\n this.viewData.push(rowGroup);\r\n }\r\n } else {\r\n // Create and populate row groups.\r\n this.populateFromBoundData();\r\n }\r\n\r\n this.detectChanges();\r\n\r\n this.dataChange.emit(Object.assign({type: \"none\"}, this.lastEvent, {\r\n paging: this.paging,\r\n nViewData: this.viewData.length\r\n }));\r\n }\r\n\r\n /**\r\n * Generates the data if the data is an array (not external).\r\n */\r\n populateFromBoundData(): void {\r\n if (isDevMode()) {\r\n console.debug(\"populateFromBoundData\");\r\n console.debug(this.boundData);\r\n }\r\n\r\n if (!this.boundData) {\r\n this.viewData = [];\r\n this.paging.setPage(0);\r\n return;\r\n }\r\n\r\n if (this.boundData.length === 0) {\r\n console.debug(\"Bound Data length found as 0\");\r\n this.paging.setPage(0);\r\n this.paging.setNumPages(1);\r\n this.paging.setDataSize(0);\r\n }\r\n\r\n //let preparedData = [];\r\n this.preparedData = [];\r\n this.groupedDataSet = [];\r\n\r\n let rowGroupMap: Map<string, number> = new Map<string, number>();\r\n\r\n let doRowGrouping: boolean = this.grouping.fields && this.grouping.fields.length > 0;\r\n for (let row of this.boundData) {\r\n let groupKey: string;\r\n if (doRowGrouping) {\r\n for (let field of this.grouping.fields) {\r\n groupKey = (groupKey) ? groupKey + \":\" + row[field] : row[field];\r\n }\r\n }\r\n\r\n if (this.filters && this.filters.length > 0) {\r\n let include: boolean = true;\r\n\r\n for (let filter of this.filters) {\r\n if (!filter.valid) {\r\n continue;\r\n } else if (this.controller.advancedSearch && this.controller.advancedSearch.length > 0 && !this.controller.advancedSearchAllowFilter) {\r\n // Advanced search does not auto filter by default\r\n continue;\r\n } else {\r\n let filterValues = filter.getValue().split(\",\");\r\n let filterFields = filter.getField().split(\" or \");\r\n\r\n let innerInclude: boolean = false;\r\n for (let field of filterFields) {\r\n if (row[field] && typeof row[field] == \"number\") {\r\n for (let value of filterValues) {\r\n if (row[field] == value) {\r\n innerInclude = true;\r\n break;\r\n }\r\n }\r\n } else if (row[field] && row[field] instanceof Date || filter.getDataType() == \"date\") {\r\n for (let value of filterValues) {\r\n if (value instanceof Date) {\r\n if ((new Date(row[field])).getTime() == (new Date(value)).getTime()) {\r\n innerInclude = true;\r\n break;\r\n }\r\n }\r\n }\r\n } else if (row[field] && typeof row[field] == \"string\") {\r\n // Check if it is multiple search strings\r\n for (let value of filterValues) {\r\n if (typeof value == \"string\") {\r\n if (row[field].toLowerCase().indexOf(value.toLowerCase()) !== -1) {\r\n innerInclude = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (innerInclude) {\r\n break;\r\n }\r\n }\r\n\r\n if (!innerInclude) {\r\n include = false;\r\n }\r\n\r\n }\r\n\r\n if(!include) {\r\n break;\r\n }\r\n }\r\n\r\n if (!include) {\r\n continue;\r\n }\r\n }\r\n\r\n if (doRowGrouping) {\r\n if (rowGroupMap.get(groupKey) >= 0) {\r\n this.preparedData[rowGroupMap.get(groupKey)].rgRows.push(row);\r\n } else {\r\n rowGroupMap.set(groupKey, this.preparedData.length);\r\n\r\n let rowGroup: RowGroup = new RowGroup(groupKey, row);\r\n for (let field of this.grouping.fields) {\r\n rowGroup[field] = row[field];\r\n }\r\n\r\n this.preparedData.push(rowGroup);\r\n }\r\n } else {\r\n this.preparedData.push(new RowGroup(groupKey, row));\r\n }\r\n\r\n //this.globalRowGroupMap = rowGroupMap;\r\n }\r\n\r\n if (this.sorts.length > 0) {\r\n this.preparedData.sort((a: RowGroup, b: RowGroup) => {\r\n let v: number = 0;\r\n\r\n for (let sort of this.sorts) {\r\n if (this.isSortFieldGroupField(sort.getField())) {\r\n if (sort.getAsc()) {\r\n if (a[sort.getField()] < b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] > b[sort.getField()]) {\r\n v = 1;\r\n }\r\n } else {\r\n if (a[sort.getField()] > b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] < b[sort.getField()]) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n } else if (this.grouping.getFields().length === 0) {\r\n if (sort.getAsc()) {\r\n if (a.rgRows[0][sort.getField()] < b.rgRows[0][sort.getField()]) {\r\n v = -1;\r\n } else if (a.rgRows[0][sort.getField()] > b.rgRows[0][sort.getField()]) {\r\n v = 1;\r\n }\r\n } else {\r\n if (a.rgRows[0][sort.getField()] > b.rgRows[0][sort.getField()]) {\r\n v = -1;\r\n } else if (a.rgRows[0][sort.getField()] < b.rgRows[0][sort.getField()]) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n }\r\n }\r\n\r\n return v;\r\n });\r\n\r\n if (this.grouping.getFields().length > 0) {\r\n for (let rowGroup of this.preparedData) {\r\n rowGroup.rgRows.sort((a: Object, b: Object) => {\r\n let v: number = 0;\r\n\r\n for (let sort of this.sorts) {\r\n if (!this.isSortFieldGroupField(sort.getField())) {\r\n if (sort.getAsc()) {\r\n if (a[sort.getField()] < b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] > b[sort.getField()]) {\r\n v = 1;\r\n }\r\n } else {\r\n if (a[sort.getField()] > b[sort.getField()]) {\r\n v = -1;\r\n } else if (a[sort.getField()] < b[sort.getField()]) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n }\r\n }\r\n\r\n return v;\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.paging.setDataSize(this.preparedData.length);\r\n\r\n this.groupedDataSet = this.preparedData;\r\n\r\n if (this.paging.getPageSize() > 0) {\r\n this.viewData = [];\r\n for (var i = this.paging.getPage() * this.paging.getPageSize(); i < Math.min(this.preparedData.length, (this.paging.getPage() + 1) * this.paging.getPageSize()); i++) {\r\n this.viewData.push(this.preparedData[i]);\r\n }\r\n } else {\r\n this.paging.setDataSize(this.preparedData.length);\r\n this.viewData = this.preparedData;\r\n }\r\n\r\n for (let rowGroup of this.viewData) {\r\n rowGroup.rgCount = rowGroup.rgRows.length;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Return true if the sort field is a grouping field.\r\n *\r\n * @param sortField\r\n */\r\n isSortFieldGroupField(sortField: string): boolean {\r\n if (!this.grouping || !this.grouping.fields || this.grouping.fields.length === 0) {\r\n return false;\r\n }\r\n\r\n for (let groupField of this.grouping.fields) {\r\n if (sortField === groupField) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Select a group of data. Call the first page of data upon expanding. If already expanded, close and go back to the\r\n * list of groups.\r\n *\r\n * @param {RowGroup} rowGroup\r\n */\r\n setGroupExpanded(event: MouseEvent, rowGroup: RowGroup) {\r\n if (isDevMode()) {\r\n console.debug(\"setGroupExpanded: \" + rowGroup.rgExpanded);\r\n }\r\n\r\n if (this.externalDataCall && !rowGroup.rgExpanded) {\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n\r\n let groupFilters: HciFilterDto[] = this.filters.slice();\r\n for (let groupField of this.grouping.fields) {\r\n groupFilters.push(new HciFilterDto(groupField, \"string\", rowGroup[groupField], undefined, \"E\", true));\r\n }\r\n\r\n rowGroup.rgPageMin = 0;\r\n rowGroup.rgPageMax = 0;\r\n\r\n this.externalDataCall(new HciGridDto(groupFilters, this.sorts, new HciPagingDto(0, this.groupPageSize), new HciGroupingDto(this.grouping.fields, false)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n rowGroup.rgRows = externalData.data;\r\n\r\n if (!this.inlineExpand) {\r\n this.selectedRowGroup = rowGroup;\r\n }\r\n\r\n this.detectChanges();\r\n });\r\n }\r\n } else if (!rowGroup.rgExpanded) {\r\n rowGroup.rgPageMin = 0;\r\n rowGroup.rgPageMax = 0;\r\n if (!this.inlineExpand) {\r\n this.selectedRowGroup = rowGroup;\r\n }\r\n }\r\n\r\n if (rowGroup.rgExpanded) {\r\n if (this.inlineExpand) {\r\n let groupSelectedParent: HTMLElement;\r\n if (event) {\r\n groupSelectedParent = <HTMLElement>(<HTMLElement>event.target).closest(\".group-parent\");\r\n } else {\r\n groupSelectedParent = <HTMLElement><unknown>document.getElementById(this.getRowGroupId(rowGroup));\r\n //groupSelectedParent.click();\r\n }\r\n this.renderer.removeClass(groupSelectedParent, \"active\");\r\n }\r\n\r\n of(null).pipe(delay(250)).subscribe(() => {\r\n this.selectedRowGroup = undefined;\r\n this.selectedRowGroupContainer = undefined;\r\n });\r\n\r\n if (this.onGroupClose) {\r\n this.onGroupClose();\r\n }\r\n } else if (!rowGroup.rgExpanded && this.inlineExpand) {\r\n let groupSelectedParent: HTMLElement;\r\n if (event) {\r\n groupSelectedParent = <HTMLElement>(<HTMLElement>event.target).closest(\".group-parent\");\r\n } else {\r\n groupSelectedParent = <HTMLElement><unknown>document.getElementById(this.getRowGroupId(rowGroup));\r\n //groupSelectedParent.click();\r\n }\r\n this.renderer.addClass(groupSelectedParent, \"active\");\r\n }\r\n\r\n if (isDevMode() && !this.inlineExpand) {\r\n console.debug(\"this.selectedRowGroup\");\r\n console.debug(this.selectedRowGroup);\r\n }\r\n\r\n rowGroup.rgExpanded = !rowGroup.rgExpanded;\r\n\r\n this.detectChanges();\r\n }\r\n\r\n /**\r\n * Add the scroll listener to the group container.\r\n */\r\n addGroupScrollListener(): void {\r\n this.removeGroupScrollListener();\r\n\r\n this.lastScrollTop = -1;\r\n\r\n if (this.selectedRowGroup && this.selectedRowGroup.rgCount !== this.selectedRowGroup.rgRows.length) {\r\n this.selectedRowGroupContainer = this.elementRef.nativeElement.querySelector(\"#selected-group-container\");\r\n this.selectedRowGroupContainer.addEventListener(\"scroll\", this.onGroupScroll.bind(this), true);\r\n }\r\n }\r\n\r\n /**\r\n * Remove the scroll listener from the group container.\r\n */\r\n removeGroupScrollListener(): void {\r\n if (this.selectedRowGroupContainer) {\r\n this.selectedRowGroupContainer.removeEventListener(\"scroll\", this.onGroupScroll.bind(this));\r\n }\r\n }\r\n\r\n /**\r\n * Listen for the scroll event, determine if the scroll hit the top or bottom of the container.\r\n *\r\n * @param {Event} event\r\n */\r\n onGroupScroll(event: Event): void {\r\n if (!this.busy) {\r\n let newScrollTop: number = Math.round(this.selectedRowGroupContainer.scrollTop);\r\n let scrollPosition: number = 1;\r\n if (newScrollTop === 0 && scrollPosition !== 0) {\r\n scrollPosition = 0;\r\n } else if (scrollPosition !== 2 && Math.abs(this.selectedRowGroupContainer.scrollHeight - (newScrollTop + this.selectedRowGroupContainer.offsetHeight)) < 3) {\r\n scrollPosition = 2;\r\n } else {\r\n scrollPosition = 1;\r\n }\r\n\r\n if (this.lastScrollPosition !== scrollPosition && this.lastScrollPosition === 1) {\r\n if (scrollPosition === 0) {\r\n this.groupPreviousPage();\r\n } else if (scrollPosition === 2) {\r\n this.groupNextPage();\r\n }\r\n }\r\n\r\n this.lastScrollTop = newScrollTop;\r\n this.lastScrollPosition = scrollPosition;\r\n }\r\n }\r\n\r\n /**\r\n * When scrolling hits the top, load the previous page of group data.\r\n */\r\n groupPreviousPage(): void {\r\n if (this.selectedRowGroup.rgPageMin === 0) {\r\n console.warn(\"First page already loaded.\");\r\n return;\r\n }\r\n\r\n this.removeGroupScrollListener();\r\n\r\n let groupFilters: HciFilterDto[] = this.filters.slice();\r\n for (let groupField of this.grouping.fields) {\r\n groupFilters.push(new HciFilterDto(groupField, \"string\", this.selectedRowGroup[groupField], undefined, \"E\", true));\r\n }\r\n\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n this.externalDataCall(new HciGridDto(groupFilters, this.sorts, new HciPagingDto(this.selectedRowGroup.rgPageMin - 1, this.groupPageSize), new HciGroupingDto(this.grouping.fields, false)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n\r\n of(undefined).pipe(delay(50)).subscribe(() => {\r\n if (this.selectedRowGroupContainer.scrollTop === 0) {\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"scrollTop\", \"1\");\r\n }\r\n });\r\n\r\n this.addGroupScrollListener();\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.selectedRowGroup.rgRows = externalData.data.concat(this.selectedRowGroup.rgRows);\r\n this.selectedRowGroup.rgPageMin -= 1;\r\n\r\n if (this.groupCacheNumPages && this.selectedRowGroup.rgPageMax - this.selectedRowGroup.rgPageMin >= this.groupCacheNumPages) {\r\n this.selectedRowGroup.rgRows.splice(this.groupCacheNumPages * this.groupPageSize);\r\n this.selectedRowGroup.rgPageMax -= 1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * When scrolling hits the bottom, load the next page of group data.\r\n */\r\n groupNextPage(): void {\r\n if ((this.selectedRowGroup.rgPageMax + 1) * this.groupPageSize >= this.selectedRowGroup.rgCount) {\r\n console.warn(\"All rows already loaded\");\r\n return;\r\n }\r\n\r\n this.removeGroupScrollListener();\r\n\r\n let groupFilters: HciFilterDto[] = this.filters.slice();\r\n for (let groupField of this.grouping.fields) {\r\n groupFilters.push(new HciFilterDto(groupField, \"string\", this.selectedRowGroup[groupField], undefined, \"E\", true));\r\n }\r\n\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n this.externalDataCall(new HciGridDto(groupFilters, this.sorts, new HciPagingDto(this.selectedRowGroup.rgPageMax + 1, this.groupPageSize), new HciGroupingDto(this.grouping.fields, false)))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n\r\n of(undefined).pipe(delay(50)).subscribe(() => {\r\n if (this.selectedRowGroupContainer.scrollTop === 0) {\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"scrollTop\", \"1\");\r\n }\r\n });\r\n\r\n this.addGroupScrollListener();\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.selectedRowGroup.rgRows = this.selectedRowGroup.rgRows.concat(externalData.data);\r\n this.selectedRowGroup.rgPageMax += 1;\r\n\r\n if (this.groupCacheNumPages && this.selectedRowGroup.rgPageMax - this.selectedRowGroup.rgPageMin >= this.groupCacheNumPages) {\r\n this.selectedRowGroup.rgRows.splice(0, this.groupPageSize);\r\n this.selectedRowGroup.rgPageMin += 1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Go to the first page.\r\n */\r\n public doPageFirst(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n\r\n /**\r\n * Go to the previous page.\r\n */\r\n public doPagePrevious(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() > 0) {\r\n this.paging.setPage(this.paging.getPage() - 1);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the next page.\r\n */\r\n public doPageNext(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() < this.paging.getNumPages() - 1) {\r\n this.paging.setPage(this.paging.getPage() + 1);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the last page.\r\n */\r\n public doPageLast(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(this.paging.getNumPages() - 1);\r\n this.pagingSubject.next(this.paging);\r\n this.checkActiveRowId();\r\n }\r\n }\r\n\r\n /**\r\n * After page turns, check if the page has the row that need to be highlighted\r\n */\r\n private checkActiveRowId(): void {\r\n //if a row is selected, and rowId field is specified (usually configured by config)\r\n if (this.selectedRow && this.rowId) {\r\n let id = this.selectedRow[this.rowId];\r\n if (id) {\r\n this.activateRowById(id);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Concat group by fields to comma delimited words\r\n * or delimiter delimited words if the deliminator has its default value set.\r\n *\r\n * @param {RowGroup} rowGroup\r\n * @returns {string}\r\n */\r\n getGroupDisplay(rowGroup: RowGroup): string {\r\n let display: string;\r\n\r\n if (this.groupDisplay) {\r\n display = this.groupDisplay;\r\n for (let field of this.grouping.fields) {\r\n display = display.replace(field, rowGroup[field]);\r\n }\r\n } else {\r\n for (let field of this.grouping.fields) {\r\n if (rowGroup[field] !== null && rowGroup[field] !== \"\") {\r\n display = (display) ? display + this.delimiter + rowGroup[field] : rowGroup[field];\r\n }\r\n }\r\n }\r\n\r\n return display;\r\n }\r\n\r\n /**\r\n * Sets the selectedRowGroupContainer element.\r\n *\r\n * @param {ElementRef} selectedRowGroupContainer\r\n */\r\n @ViewChild(\"selectedRowGroupContainer\", {\r\n read: ElementRef,\r\n static: false\r\n }) set selectedRowGroupContainerSetter(selectedRowGroupContainer: ElementRef) {\r\n if (this.selectedRowGroupContainer && this.setScrollTop) {\r\n this.selectedRowGroupContainer.scrollTop = (<HTMLElement>this.selectedRowGroupContainer.querySelector(\"#innerRowGroupContainer\")).offsetHeight;\r\n this.setScrollTop = false;\r\n }\r\n\r\n if (!this.selectedRowGroupContainer && selectedRowGroupContainer) {\r\n this.selectedRowGroupContainer = selectedRowGroupContainer.nativeElement;\r\n\r\n let groupSelectedParent: HTMLElement = <HTMLElement>this.selectedRowGroupContainer.closest(\".group-selected-parent\");\r\n this.renderer.setStyle(groupSelectedParent, \"display\", \"flex\");\r\n\r\n of(null).pipe(delay(50)).subscribe(() => {\r\n this.renderer.addClass(groupSelectedParent, \"active\");\r\n this.innerRowGroupContainer = this.selectedRowGroupContainer.querySelector(\"#innerRowGroupContainer\");\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"height\", this.innerRowGroupContainer.offsetHeight + \"px\");\r\n this.renderer.setStyle(this.innerRowGroupContainer, \"min-height\", (this.innerRowGroupContainer.offsetHeight + 30) + \"px\");\r\n this.renderer.setStyle(this.selectedRowGroupContainer, \"scrollTop\", \"1\");\r\n\r\n this.addGroupScrollListener();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Allow a custom row click function to control deselection.\r\n */\r\n deselectAllRows(): void {\r\n let es: HTMLElement[] = this.elementRef.nativeElement.querySelectorAll(\".row-parent\");\r\n for (let e of es) {\r\n this.renderer.removeClass(e, \"active\");\r\n }\r\n }\r\n\r\n /**\r\n * Allow a custom group click function to control deselection.\r\n */\r\n deselectAllGroups(): void {\r\n let es: HTMLElement[] = this.elementRef.nativeElement.querySelectorAll(\".group-parent\");\r\n for (let e of es) {\r\n this.renderer.removeClass(e, \"active\");\r\n }\r\n }\r\n\r\n isIdInFilteredResults(id:string){\r\n let e: HTMLElement = this.elementRef.nativeElement.querySelector(\"#row-\" + id);\r\n return e?true: false;\r\n }\r\n\r\n /**\r\n * Allow a custom row click function to select a row.\r\n *\r\n * @param {string} id\r\n */\r\n activateRowById(id: string): void {\r\n let e: HTMLElement = this.elementRef.nativeElement.querySelector(\"#row-\" + id);\r\n if (e) {\r\n this.renderer.addClass(e, \"active\");\r\n }\r\n }\r\n\r\n activateGroupById(id: string): void {\r\n let e: HTMLElement = this.elementRef.nativeElement.querySelector(\"#row-group-\" + id);\r\n if (e) {\r\n this.renderer.addClass(e, \"active\");\r\n }\r\n }\r\n\r\n /**\r\n * This function will return whether a particular group is expanded or collapsed\r\n * @param rowGroup\r\n */\r\n getGroupExpandedIndicator(rowGroup: RowGroup) {\r\n if (rowGroup.rgExpanded === true) {\r\n return \"minus\";\r\n } else {\r\n return \"plus\";\r\n }\r\n }\r\n\r\n //TODo : Handle the case where the user uses a custom groupTemplate\r\n /**\r\n * This function will cause SearchListComponent to navigate to a page and highlight the given group item, or\r\n * the row (in-case of non-grouped list)\r\n * This\r\n * @param groupId : This should contain a string to uniquely identify a particular group-display\r\n * @param rowId : This is the actual rowId for the row to be selected.\r\n */\r\n navigateToPageContainingElement(groupId: string, rowId: string) {\r\n\r\n //Introducing the additional check below to address CCRUI-1163.\r\n if (!this.boundData || this.boundData.length === 0) {\r\n return;\r\n }\r\n // Check if grouped\r\n let rowGrouped: boolean = this.grouping.fields && this.grouping.fields.length > 0;\r\n\r\n if (rowGrouped) {\r\n this.groupedDataSet.forEach((rowGroup, index) => {\r\n let groupDisplay = this.getGroupDisplay(rowGroup);\r\n if (groupDisplay.includes(groupId)) {\r\n //Set the page to the index\r\n if (!this.busy) {\r\n let page = Math.floor(index / this.paging.getPageSize());\r\n if (this.paging.getNumPages() - 1 >= page) {\r\n this.paging.setPage(page);\r\n this.pagingSubject.next(this.paging);\r\n //this.defaultGroupClick(null, this, rowGroup);\r\n let groupSelectedParent = <HTMLElement><unknown>document.getElementById(this.getRowGroupId(rowGroup));\r\n groupSelectedParent.click();\r\n this.deselectAllRows();\r\n this.activateRowById(rowId.replace(\"row-\", \"\"));\r\n }\r\n }\r\n }\r\n });\r\n } else {\r\n this.boundData.forEach((row, index) => {\r\n if (this.getRowId(row) === rowId) {\r\n if (!this.busy) {\r\n let page = Math.floor(index / this.paging.getPageSize());\r\n if (this.paging.getNumPages() - 1 >= page) {\r\n this.paging.setPage(page);\r\n this.pagingSubject.next(this.paging);\r\n this.activateRowById(rowId.replace(\"row-\", \"\"));\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n private setResultMessage(data: Object[]) {\r\n if (this.showResultsCount && data && data.length > 0) {\r\n this.searchResultMessage = data.length + \" result(s)\";\r\n } else {\r\n this.searchResultMessage = \"\";\r\n }\r\n }\r\n}\r\n","import {Directive, ElementRef, HostListener, Input, isDevMode, OnInit, Renderer2} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, interval, Subject} from \"rxjs\";\r\nimport {takeWhile} from \"rxjs/operators\";\r\n\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n/**\r\n * This directive allows you to auto calculate a property such as margin-top or top based on heights of other components.\r\n * Using [topMargin]=\"['header', 'sub-header']\" [topMarginStyle]=\"'margin-top'\" means that the margin-top of the component\r\n * with this directive placed on it will be equal to the height of the header plus sub-header. The header and sub-header\r\n * and ids.\r\n *\r\n * @since 7.0.0\r\n */\r\n@Directive({\r\n selector: \"[topMargin]\"\r\n})\r\nexport class TopMarginDirective implements OnInit {\r\n\r\n @Input() topMargin: string[];\r\n @Input() topMarginStyle: string = \"margin-top\";\r\n @Input() topMarginDefault: number = 0;\r\n @Input() topMarginStyleAppend: string = \"px\";\r\n @Input() topMarginOffset: number = 0;\r\n @Input() topMarginTarget: string;\r\n\r\n private targetsFound: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n private heightSubject: Subject<number> = new Subject<number>();\r\n\r\n constructor(private navigationGlobalService: NavigationGlobalService,\r\n private el: ElementRef,\r\n private renderer: Renderer2) {}\r\n\r\n ngOnInit() {\r\n if (isDevMode()) {\r\n console.debug(\"TopMarginDirective.ngOnInit: \" + this.topMargin + \", \" + this.topMarginStyle);\r\n }\r\n\r\n this.heightSubject.subscribe((height: number) => {\r\n this.setHeight(height);\r\n });\r\n\r\n this.targetsFound.subscribe((targetsFound: boolean) => {\r\n if (targetsFound) {\r\n this.getHeight();\r\n }\r\n });\r\n\r\n this.navigationGlobalService.getNotificationEventSubject().subscribe((event: boolean) => {\r\n this.findTargets();\r\n });\r\n\r\n this.heightSubject.next(this.topMarginDefault);\r\n\r\n this.findTargets();\r\n }\r\n\r\n /**\r\n * Sets the style to the sum of the heights.\r\n *\r\n * @param {number} height\r\n */\r\n setHeight(height: number): void {\r\n if (isDevMode()) {\r\n console.debug(\"TopMarginDirective.setHeight: \" + height);\r\n }\r\n if (this.topMarginTarget) {\r\n let el: HTMLElement = this.el.nativeElement.querySelector(\"#\" + this.topMarginTarget);\r\n\r\n if (el) {\r\n this.renderer.setStyle(el, this.topMarginStyle, height + this.topMarginStyleAppend);\r\n } else {\r\n el = this.el.nativeElement.querySelector(\".\" + this.topMarginTarget);\r\n if (el) {\r\n this.renderer.setStyle(el, this.topMarginStyle, height + this.topMarginStyleAppend);\r\n } else if (isDevMode()) {\r\n console.warn(\"TopMarginDirective.setHeight: Could not find id or class target: \" + this.topMarginTarget);\r\n }\r\n }\r\n } else {\r\n this.renderer.setStyle(this.el.nativeElement, this.topMarginStyle, height + this.topMarginStyleAppend);\r\n }\r\n }\r\n\r\n /**\r\n * Loops until the DOM is fully created.\r\n */\r\n findTargets(): void {\r\n let count: number = 0;\r\n this.targetsFound.next(false);\r\n interval(50)\r\n .pipe(takeWhile(() => !this.targetsFound.getValue() || count === 1000))\r\n .subscribe(() => {\r\n let exists: boolean = true;\r\n for (let target of this.topMargin) {\r\n if (!document.querySelector(\"#\" + target)) {\r\n exists = false;\r\n break;\r\n }\r\n }\r\n if (exists) {\r\n this.targetsFound.next(true);\r\n }\r\n count = count + 1;\r\n });\r\n }\r\n\r\n /**\r\n * Finds the sum of the heights based on the components passed in.\r\n */\r\n getHeight() {\r\n if (isDevMode()) {\r\n console.debug(\"TopMarginDirective.getHeight\");\r\n }\r\n\r\n if (this.topMargin && this.targetsFound) {\r\n let x: number = this.topMarginOffset;\r\n for (let target of this.topMargin) {\r\n let e: HTMLElement = <HTMLElement>document.querySelector(\"#\" + target);\r\n if (e) {\r\n let o: number = 0;\r\n if (e.offsetHeight.toString().match(\"[a-z]\")) {\r\n o = +e.offsetHeight.toString().replace(\"px\", \"\").replace(\"rem\", \"\").replace(\"em\", \"\");\r\n } else {\r\n o = +e.offsetHeight.toString();\r\n }\r\n x = +x + o;\r\n }\r\n }\r\n\r\n this.heightSubject.next(x);\r\n }\r\n }\r\n\r\n @HostListener(\"window:resize\", [\"$event\"])\r\n private windowResize(event) {\r\n this.getHeight();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, HostBinding, Input, Renderer2, ViewChild, ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NavigationService} from \"../services/navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n/**\r\n * A component intended to provide a common, configurable application header. This component expects to be used with a\r\n * ViewChild pattern. See the demo application and associated documentation for examples and details.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"hci-app-header\",\r\n template: `\r\n <nav [id]=\"id + '-nav'\"\r\n class=\"navbar navbar-expand-md navbar-dark {{ navbarClasses ? ' ' + navbarClasses : '' }}\"\r\n [style.display]=\"hidden ? 'none' : 'flex'\">\r\n <div id=\"leftHeaderContainer\" class=\"me-auto left-header\">\r\n <ng-container #leftContainer></ng-container>\r\n </div>\r\n <div id=\"rightHeaderContainer\" class=\"d-none d-md-flex right-header\">\r\n <ng-container #rightContainer></ng-container>\r\n </div>\r\n </nav>\r\n `,\r\n providers: [\r\n NavigationService\r\n ]\r\n})\r\nexport class AppHeaderComponent extends NavComponent {\r\n\r\n @HostBinding(\"class\") @Input(\"class\") classList: String = \"\";\r\n\r\n @Input() hidden: boolean = false;\r\n @Input() navbarClasses: string;\r\n\r\n navigationGlobalService: NavigationGlobalService;\r\n\r\n leftContainer: ViewContainerRef;\r\n rightContainer: ViewContainerRef;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n\r\n this.isRoot = true;\r\n this.navigationGlobalService = navigationGlobalService;\r\n this.containerSet.add(\"rightContainer\");\r\n\r\n if(this.classList.length > 0) {\r\n this.classList += \" flex-shrink-0\";\r\n }else {\r\n this.classList = \"flex-shrink-0\";\r\n }\r\n }\r\n\r\n @ViewChild(\"leftContainer\", {read: ViewContainerRef, static: true}) set leftContainerSetter(leftContainer: ViewContainerRef) {\r\n this.leftContainer = leftContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n @ViewChild(\"rightContainer\", {read: ViewContainerRef, static: true}) set rightContainerSetter(rightContainer: ViewContainerRef) {\r\n this.rightContainer = rightContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.leftContainer && this.rightContainer) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n\r\n if (this.leftContainer) {\r\n this.leftContainer.clear();\r\n }\r\n if (this.rightContainer) {\r\n this.rightContainer.clear();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getContainer(containerName?: string): ViewContainerRef {\r\n if (containerName === undefined || containerName === \"default\") {\r\n return this.leftContainer;\r\n } else {\r\n return this.rightContainer;\r\n }\r\n }\r\n\r\n setConfig(config: any) {\r\n super.setConfig(config);\r\n }\r\n\r\n updateConfig(config: any) {\r\n if (config.navbarClasses) {\r\n this.navbarClasses = config.navbarClasses;\r\n }\r\n if (config.hidden !== undefined) {\r\n this.hidden = config.hidden;\r\n }\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ComponentFactoryResolver, ElementRef, HostBinding, Input, Renderer2, ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NavigationService} from \"../services/navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n\r\n/**\r\n * A component to provide an application wide fixed footer exposing application name, version, a navigation element to a\r\n * feedback form and a navigation element to contact information.\r\n * <p>\r\n * This component expects bootstrap 4.x styling to be applied.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"hci-app-footer\",\r\n template: `\r\n <div class=\"hci-app-footer {{ footerClasses ? ' ' + footerClasses : '' }}\">\r\n <div id=\"footer-left-container\" class=\"ms-3\">\r\n <ng-container #leftContainer></ng-container>\r\n </div>\r\n <div id=\"footer-middle-container\" class=\"ms-auto me-auto\">\r\n <ng-container #middleContainer></ng-container>\r\n </div>\r\n <div id=\"footer-right-container\" class=\"me-3\">\r\n <ng-container #rightContainer></ng-container>\r\n </div>\r\n </div>\r\n `,\r\n providers: [\r\n NavigationService\r\n ]\r\n})\r\nexport class AppFooterComponent extends NavComponent {\r\n\r\n @HostBinding(\"class\") classList: String = \"flex-shrink-0\";\r\n\r\n @Input() footerClasses: string = \"d-none d-md-flex\";\r\n\r\n navigationGlobalService: NavigationGlobalService;\r\n\r\n leftContainer: ViewContainerRef;\r\n middleContainer: ViewContainerRef;\r\n rightContainer: ViewContainerRef;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n this.isRoot = true;\r\n this.navigationGlobalService = navigationGlobalService;\r\n this.containerSet.add(\"container\");\r\n }\r\n\r\n @ViewChild(\"leftContainer\", {read: ViewContainerRef, static: true}) set leftContainerSetter(leftContainer: ViewContainerRef) {\r\n this.leftContainer = leftContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n @ViewChild(\"middleContainer\", {read: ViewContainerRef, static: true}) set middleContainerSetter(middleContainer: ViewContainerRef) {\r\n this.middleContainer = middleContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n @ViewChild(\"rightContainer\", {read: ViewContainerRef, static: true}) set rightContainerSetter(rightContainer: ViewContainerRef) {\r\n this.rightContainer = rightContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.leftContainer && this.middleContainer && this.rightContainer) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n\r\n if (this.leftContainer) {\r\n this.leftContainer.clear();\r\n }\r\n if (this.middleContainer) {\r\n this.middleContainer.clear();\r\n }\r\n if (this.rightContainer) {\r\n this.rightContainer.clear();\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getContainer(containerName?: string): ViewContainerRef {\r\n if (containerName === undefined || containerName === \"default\") {\r\n return this.middleContainer;\r\n } else if (containerName === \"leftContainer\") {\r\n return this.leftContainer;\r\n } else {\r\n return this.rightContainer;\r\n }\r\n }\r\n\r\n updateConfig(config) {\r\n if (config.navbarClasses) {\r\n this.footerClasses = config.footerClasses;\r\n }\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\n\r\nimport {NavigationService} from \"../services/navigation.service\";\r\nimport {NavComponent} from \"../components/nav.component\";\r\nimport {NavigationGlobalService} from \"../services/navigation-global.service\";\r\n\r\n/**\r\n * TODO\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component(\r\n {\r\n selector: \"hci-sidebar\",\r\n template:\r\n `\r\n <div\r\n id=\"hci-sidebar-div\"\r\n class=\"hci-sidebar {{sidebarClasses}}\"\r\n [class.expanded]=\"sidebarExpanded\"\r\n [style.width.px]=\"sidebarSize\"\r\n >\r\n <div id=\"topSidebarContainer\" class=\"top-sidebar-container d-flex\">\r\n <ng-content></ng-content>\r\n <ng-container #topContainer></ng-container>\r\n\r\n <ng-container>\r\n <div class=\"bottom-of-sidebar mt-auto p-2\"></div>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"draggable\"\r\n class=\"sidebar-splitter\"\r\n [style.left.px]=\"sidebarSize\"\r\n [style.font-size.px]=\"sidebarFontSize\"\r\n [style.width.px]=\"sidebarSplitterWidth\"\r\n (mousedown)=\"mouseDown($event)\"\r\n (dblclick)=\"negateSidebarExpanded()\"\r\n style=\"box-shadow: 1px 0 10px 1px var(--greycool-meddarker);\"\r\n >\r\n <i\r\n class=\"fas fa-2xl fa-grip-lines-vertical splitter-icon\"\r\n style=\"padding-left: 5px; width: 7.5px;\"\r\n >\r\n </i>\r\n </div>\r\n `,\r\n providers: [\r\n NavigationService\r\n ]\r\n }\r\n)\r\nexport class SidebarComponent extends NavComponent {\r\n\r\n @Input() hidden: boolean = false;\r\n @Input() output: string = \"padding-left\";\r\n @Input() sidebarClasses: string = \"\";\r\n @Input() showCollapse: boolean = true;\r\n @Input() draggable: boolean = true;\r\n @Input() sidebarSplitterWidth: number = 6;\r\n @Input() collapsedSize: number = 160;\r\n @Input() minWidth: number = 160;\r\n @Input() maxWidth: number = 400;\r\n @Input() sidebarSize: number = 220;\r\n @Input() sidebarFontSize: number = 20;\r\n @Input() sidebarExpanded: boolean = true;\r\n\r\n @Output() sidebarSizeChange = new EventEmitter<number>();\r\n\r\n topContainer: ViewContainerRef;\r\n\r\n navigationGlobalService: NavigationGlobalService;\r\n\r\n private dragging: boolean = false;\r\n private sidebarSizeMemory: number = 220;\r\n\r\n constructor(\r\n elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n this.isRoot = true;\r\n this.navigationGlobalService = navigationGlobalService;\r\n }\r\n\r\n @ViewChild(\"topContainer\",\r\n {\r\n read: ViewContainerRef,\r\n static: true\r\n }\r\n ) set topContainerSetter(topContainer: ViewContainerRef) {\r\n this.topContainer = topContainer;\r\n this.checkInitialized();\r\n }\r\n\r\n checkInitialized() {\r\n if (this.afterViewInit && this.topContainer) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.hideSidebarShadow();\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n getContainer(container?: string): ViewContainerRef {\r\n return this.topContainer;\r\n }\r\n\r\n clear() {\r\n super.clear();\r\n this.topContainer.clear();\r\n }\r\n\r\n setConfig(config: any) {\r\n super.setConfig(config);\r\n\r\n this.updateConfig(config);\r\n\r\n this.navigationService.setRootComponent(this.id, this);\r\n }\r\n\r\n updateConfig(config) {\r\n if (config.sidebarClasses) {\r\n this.sidebarClasses = config.sidebarClasses;\r\n }\r\n if (config.sidebarExpanded !== undefined) {\r\n this.sidebarExpanded = config.sidebarExpanded;\r\n }\r\n if (config.draggable !== undefined) {\r\n this.draggable = config.draggable;\r\n }\r\n if (config.showCollapse !== undefined) {\r\n this.showCollapse = config.showCollapse;\r\n }\r\n if (config.sidebarSplitterWidth) {\r\n this.sidebarSplitterWidth = config.sidebarSplitterWidth;\r\n }\r\n if (config.sidebarSize) {\r\n this.sidebarSizeMemory = config.sidebarSize;\r\n this.sidebarSize = config.sidebarSize;\r\n }\r\n if (config.collapsedSize) {\r\n this.collapsedSize = config.collapsedSize;\r\n }\r\n if (config.minWidth) {\r\n this.minWidth = config.minWidth;\r\n }\r\n if (config.maxWidth) {\r\n this.maxWidth = config.maxWidth;\r\n }\r\n if (config.hidden !== undefined) {\r\n this.setHidden(config.hidden);\r\n }\r\n\r\n // If we don't show the splitter, then set its width to 0.\r\n if (!this.draggable) {\r\n this.sidebarSplitterWidth = 0;\r\n }\r\n\r\n this.setSidebarExpanded(this.sidebarExpanded);\r\n\r\n super.updateConfig(config);\r\n }\r\n\r\n setHidden(hidden: boolean) {\r\n this.hidden = hidden;\r\n\r\n this.renderer.removeClass(this.elementRef.nativeElement, \"hide\");\r\n if (this.hidden) {\r\n this.renderer.addClass(this.elementRef.nativeElement, \"hide\");\r\n }\r\n }\r\n\r\n negateSidebarExpanded() {\r\n this.setSidebarExpanded(!this.sidebarExpanded);\r\n this.hideSidebarShadow();\r\n }\r\n\r\n hideSidebarShadow() {\r\n this.renderer.removeClass(this.elementRef.nativeElement.querySelector(\"#hci-sidebar-div\"), \"hide-shadow\");\r\n if (this.draggable && this.sidebarExpanded) {\r\n this.renderer.addClass(this.elementRef.nativeElement.querySelector(\"#hci-sidebar-div\"), \"hide-shadow\");\r\n }\r\n }\r\n\r\n setSidebarExpanded(sidebarExpanded) {\r\n this.sidebarExpanded = sidebarExpanded;\r\n\r\n if (this.sidebarExpanded) {\r\n this.setSidebarSize(this.sidebarSizeMemory);\r\n } else {\r\n this.sidebarSizeMemory = this.sidebarSize;\r\n this.setSidebarSize(this.collapsedSize);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the sidebar width and notifies listeners about the change. The size change emit can happen in different ways.\r\n * You can directly adjust the parent style which means the parent doesn't need to know anything about the sidebar.\r\n * Or a parent can listen to the sidebar change, and it would have to have its own behavior to deal with that.\r\n *\r\n * @param sidebarSize\r\n */\r\n setSidebarSize(sidebarSize: number) {\r\n this.sidebarSize = sidebarSize;\r\n\r\n if (this.output !== \"padding-left\") {\r\n this.sidebarSizeChange.emit(this.sidebarSize);\r\n }\r\n }\r\n\r\n mouseDown(event: MouseEvent) {\r\n if (this.sidebarExpanded && this.draggable) {\r\n this.dragging = true;\r\n }\r\n }\r\n\r\n @HostListener(\"document:mousemove\", [\"$event\"])\r\n mouseMove(event: MouseEvent) {\r\n if (this.dragging) {\r\n this.setSidebarSize(Math.min(this.maxWidth, Math.max(this.minWidth, event.clientX)));\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener(\"document:mouseup\", [\"$event\"])\r\n mouseUp(event: MouseEvent) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n }\r\n }\r\n}\r\n","import {\r\n Component, Input, TemplateRef\r\n} from \"@angular/core\";\r\n\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\nimport {SearchListControllerComponent} from \"../search-list/search-list-controller.component\";\r\n\r\n/**\r\n * The search tree controller renders as a header to one or more search trees. Only one search tree can be shown at a time.\r\n * The controller features the ability to handle filtering and sorting. Without the controller, the search list can exist,\r\n * but it can only handle paging internally.\r\n */\r\n@ComponentType(\"SearchTreeControllerComponent\")\r\n@Component({\r\n selector: \"hci-search-tree-controller\",\r\n exportAs: \"searchTreeControllerComponent\",\r\n styles: [`\r\n .sidebar-container {\r\n background-color: #E7E7E7;\r\n color: #fff ;\r\n box-shadow: none;\r\n z-index: 1000;\r\n padding-top: 3px;\r\n margin-left: -8px;\r\n margin-right: -8px;\r\n padding-bottom: 32px;\r\n }\r\n\r\n `],\r\n template: `\r\n <div *ngIf=\"!hideElements\" id=\"search-title\" class=\"d-flex flex-column\">\r\n <div *ngIf=\"showTitle\" class=\"d-flex\">\r\n {{title}}\r\n <div class=\"d-flex flex-row ms-auto\">\r\n <div *ngIf=\"buttonTemplate\"><ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container></div>\r\n <a (click)=\"toggleShowOptions($event)\"><i class=\"fas fa-filter\"></i></a>\r\n </div>\r\n <div class=\"search-options\" [class.expanded]=\"showOptions\" *ngIf=\"filterByAllowedFields.length > 0 && sortByAllowedFields.length > 0\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav-tabs\">\r\n <li ngbNavItem *ngIf=\"filterByAllowedFields.length > 1\">\r\n <a ngbNavLink > Filtering </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"d-flex flex-column\">\r\n <ng-container *ngFor=\"let filter of boundFilters\">\r\n <div class=\"d-flex m-1\" style=\"align-items: center;\">\r\n <div style=\"flex: 0 0 40%;\">{{getFieldDisplay(filter.field)}}</div>\r\n <input [ngModel]=\"filter.value\"\r\n (ngModelChange)=\"setFilter($event, filter)\"\r\n (keydown)=\"applyFilters($event)\"\r\n style=\"flex: 1 1 60%;\" aria-label=\"hci-ng-search-tree-controller-filter\"/>\r\n </div>\r\n </ng-container>\r\n <div class=\"d-flex flex-grow-1 m-1\">\r\n <button (click)=\"applyFilters()\" class=\"ms-auto me-1\"><i class=\"fas fa-check-circle\"></i></button>\r\n <button (click)=\"setupFilters(true)\" class=\"me-0\"><i class=\"fas fa-times-circle\"></i></button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem *ngIf=\"sortByAllowedFields.length > 0\">\r\n <a ngbNavLink > Sorting </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"d-flex flex-column\">\r\n <ng-container *ngFor=\"let sortField of sortByAllowedFields\">\r\n <div class=\"d-flex m-2\" style=\"align-items: center;\" (click)=\"setSort($event, sortField)\">\r\n <div style=\"width: 1.5rem;\">\r\n <div *ngIf=\"isSort(sortField) && isSortAsc(sortField)\" [style.color]=\"isFirstSort(sortField) ? 'green' : 'inherit'\">\r\n <i class=\"fas fa-arrow-circle-up fa-lg\"></i>\r\n </div>\r\n <div *ngIf=\"isSort(sortField) && !isSortAsc(sortField)\" [style.color]=\"isFirstSort(sortField) ? 'green' : 'inherit'\">\r\n <i class=\"fas fa-arrow-circle-down fa-lg\"></i>\r\n </div>\r\n </div>\r\n {{getFieldDisplay(sortField)}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\" ></div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-1 global-search\" style=\"align-items: center;\">\r\n <input [ngModel]=\"globalSearch\" (keyup)=\"doGlobalSearch($event)\" class=\"ms-2\" placeholder=\"Search\" aria-label=\"hci-ng-search-tree-controller-global-search\"/>\r\n <div class=\"ms-1 me-1\">\r\n <i class=\"fas fa-search\"></i>\r\n </div>\r\n </div>\r\n <div class=\"d-flex p-1 x-auto\" *ngIf=\"hasValidFilters()\">\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let filter of filters\">\r\n <ng-container *ngIf=\"filter.valid\">\r\n <div (click)=\"clearFilter(filter)\" class=\"d-flex pill\">\r\n <div class=\"me-2\">\r\n {{filter.field}}\r\n </div>\r\n <div class=\"close-icon\">\r\n <i class=\"fas fa-times-circle fa-xs\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"searchLists.length > 1\" class=\"d-flex x-hidden list-toggle\">\r\n <mat-button-toggle-group [ngModel]=\"selectedSearchList\" (ngModelChange)=\"setSelectedSearchList($event)\">\r\n <mat-button-toggle *ngFor=\"let searchList of searchLists\" mat-raised-button-toggle color=\"primary\" [value]=\"searchList\">\r\n {{searchList}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideElements\" class=\"sidebar-container\">\r\n <div id=\"search-title\" class=\"d-flex flex-column pt-1\">\r\n <div *ngIf=\"showTitle\" class=\"d-flex ps-3\">\r\n {{title}}\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class SearchTreeControllerComponent extends SearchListControllerComponent {\r\n\r\n @Input() buttonTemplate: TemplateRef<any>;\r\n @Input() hideElements: boolean = false;\r\n\r\n updateConfig(config) {\r\n super.updateConfig(config);\r\n\r\n if (config.buttonTemplate) {\r\n this.buttonTemplate = config.buttonTemplate;\r\n }\r\n if (config.hideElements) {\r\n this.hideElements = config.hideElements;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, Input,\r\n isDevMode, Optional, Output, QueryList, Renderer2, SimpleChange, SimpleChanges, TemplateRef, ViewChild, ViewChildren\r\n} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Observable, of, Subject} from \"rxjs\";\r\nimport {delay, finalize} from \"rxjs/operators\";\r\nimport {NgbDropdown} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {HciDataDto, HciFilterDto, HciGridDto, HciGroupingDto, HciPagingDto, HciSortDto} from \"@huntsman-cancer-institute/hci-ng-grid-dto\";\r\nimport {ComponentType} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {NavComponent} from \"../nav.component\";\r\nimport {NavigationService} from \"../../services/navigation.service\";\r\nimport {NavigationGlobalService} from \"../../services/navigation-global.service\";\r\nimport {SearchTreeControllerComponent} from \"./search-tree-controller.component\";\r\nimport {TreeComponent, ITreeOptions, TreeModel} from \"@huntsman-cancer-institute/angular-tree-component\";\r\nimport {ITreeNode} from \"@huntsman-cancer-institute/angular-tree-component/lib/defs/api\";\r\n\r\n\r\n@ComponentType(\"SearchTreeComponent\")\r\n@Component({\r\n selector: \"hci-search-tree\",\r\n template: `\r\n <div class=\"d-flex scrollable treeBox\">\r\n <div class=\"d-flex flex-column treeBox\">\r\n <hci-busy [busySubjects]=\"loadingSubjects\" parentSelector=\".scrollable\" [icon]=\"busyIcon\"></hci-busy>\r\n <tree-root #searchTreeControl [nodes]=\"viewData\" [options]=\"searchTreeOptions\" (activate)=\"onNodeClick($event)\" (updateData)=\"onUpdateData($event)\"\r\n (moveNode)=\"onMoveNode($event)\" class=\"searchTree\">\r\n <ng-template #treeNodeTemplate let-node let-index=\"index\">\r\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {node: node}\"> </ng-container>\r\n </ng-template>\r\n </tree-root>\r\n </div>\r\n </div>\r\n\r\n <!-- Paging footer -->\r\n <div *ngIf=\"paging.pageSize > 0\" class=\"d-flex flex-shrink-0 paging-footer justify-content-between ps-3 pe-3\" style=\"min-height: 1rem; align-items: center;\">\r\n <ng-container *ngIf=\"!selectedRowGroup\">\r\n <div (click)=\"doPageFirst()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i class=\"fas fa-fast-backward fa-xs\"></i></div>\r\n <div (click)=\"doPagePrevious()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === 0\"><i class=\"fas fa-backward fa-xs\"></i></div>\r\n <div style=\"font-size: 0.8rem;\">{{paging.page + 1}} of {{paging.numPages}}</div>\r\n <div (click)=\"doPageNext()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\"><i class=\"fas fa-forward fa-xs\"></i></div>\r\n <div (click)=\"doPageLast()\" class=\"d-flex mt-1 mb-1\" [class.disabled]=\"paging.page === paging.numPages - 1\"><i class=\"fas fa-fast-forward fa-xs\"></i></div>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-template #defaultTemplate let-data=\"node.data\">\r\n <span>{{ data.name }}</span>\r\n </ng-template>\r\n `,\r\n styles: [`\r\n :host {\r\n min-height: 0px;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n flex-shrink: 1;\r\n }\r\n\r\n .treeBox {\r\n min-height: 0px;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n flex-shrink: 1;\r\n }\r\n\r\n .searchTree {\r\n height: 100%;\r\n }\r\n `]\r\n})\r\nexport class SearchTreeComponent extends NavComponent {\r\n\r\n @ViewChild(\"searchTreeControl\", {static: false}) treeComponent: TreeComponent;\r\n @ViewChild(\"defaultTemplate\", {read: TemplateRef, static: true}) defaultTemplate: TemplateRef<any>;\r\n\r\n // The data that is actually rendered.\r\n viewData: any[];\r\n\r\n // A reference to the search list controller if applicable.\r\n @Input() controller: SearchTreeControllerComponent;\r\n\r\n // An array of data.\r\n @Input(\"data\") boundData: Object[];\r\n\r\n // A subject that represents an array of data.\r\n @Input(\"dataSubject\") dataSubject: BehaviorSubject<Object[]>;\r\n\r\n // A function which takes in a HciGridDto and returns a HciDataDto which wraps an array of data.\r\n @Input(\"dataCall\") externalDataCall: (dto: HciGridDto) => Observable<HciDataDto>;\r\n\r\n @Input(\"searchTreeOptions\") searchTreeOptions: any;\r\n\r\n @Input() itemTemplate: TemplateRef<any>;\r\n\r\n // An array of subjects with booleans to control the hci-busy overlaying the search-list.\r\n @Input() loadingSubjects: Subject<boolean>[];\r\n\r\n // An array of booleans to control the hci-busy overlaying the search-list.\r\n @Input() loading: boolean[] = [false];\r\n\r\n // If clicking a row changes a route, this function specifies the route to use.\r\n @Input() route: (rowGroup: any, row: any) => any[];\r\n\r\n // The page size of row groups or rows if no grouping.\r\n @Input() pageSize: number;\r\n\r\n // A reference to a parent dropdown if applicable.\r\n @Input() dropdown: NgbDropdown;\r\n\r\n //Which icon to use for the busy spinner\r\n @Input() busyIcon: string = \"fas fa-sync fa-spin\";\r\n //Either an array of node ids for expanding or a string 'all' for expanding whole tree\r\n @Input() expandTreeNodeIDs: string | any[];\r\n\r\n @Input() onClick: (cmpt: SearchTreeComponent, tree: TreeComponent, event: any) => void;\r\n\r\n @Input() onNodeMoved: (cmpt: SearchTreeComponent, tree: TreeComponent, event: any) => void;\r\n\r\n @Input() onDataUpdate: (cmpt: SearchTreeComponent, tree: TreeComponent, event: any) => void;\r\n\r\n @Output() nodeSelected: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() dataChange: EventEmitter<any> = new EventEmitter<any>();\r\n \r\n @Input() sortChildren: boolean = true;\r\n\r\n\r\n // Grid DTO info needed to build external data requests.\r\n sorts: HciSortDto[] = [];\r\n filters: HciFilterDto[] = [];\r\n paging: HciPagingDto = new HciPagingDto(0, -1);\r\n pagingSubject: Subject<HciPagingDto> = new BehaviorSubject<HciPagingDto>(this.paging);\r\n\r\n defaultSearchTreeOptions: ITreeOptions = {\r\n idField: \"id\",\r\n displayField: \"name\",\r\n childrenField: \"children\",\r\n useVirtualScroll: true,\r\n nodeHeight: 22\r\n };\r\n\r\n // A dummy number that increments based on selection changes. Forces routerLinkActive to recheck.\r\n rowRefresh: number = 0;\r\n\r\n busy: boolean = false;\r\n\r\n lastScrollTop: number = -1;\r\n lastScrollPosition: number = 1;\r\n setScrollTop: boolean = false;\r\n\r\n cmpt: SearchTreeComponent = this;\r\n\r\n lastEvent: any;\r\n\r\n constructor(elementRef: ElementRef,\r\n renderer: Renderer2,\r\n resolver: ComponentFactoryResolver,\r\n navigationGlobalService: NavigationGlobalService,\r\n @Optional() navigationService: NavigationService,\r\n changeDetectorRef: ChangeDetectorRef) {\r\n super(elementRef, renderer, resolver, navigationService, changeDetectorRef);\r\n\r\n if (!navigationService) {\r\n this.navigationService = new NavigationService(navigationGlobalService);\r\n }\r\n\r\n if (this.navigationService.getId() === undefined) {\r\n this.isRoot = true;\r\n this.setConfig({});\r\n }\r\n }\r\n\r\n /**\r\n * On init, listen for loading subjects and listen for page changes.\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].subscribe((busy: boolean) => {\r\n this.busy = busy;\r\n });\r\n }\r\n\r\n this.pagingSubject.subscribe((paging: HciPagingDto) => {\r\n this.paging = paging;\r\n this.setData();\r\n });\r\n }\r\n\r\n /**\r\n * Called when inputs change.\r\n *\r\n * @param {SimpleChanges} changes\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n super.ngOnChanges(changes);\r\n\r\n this.refreshTree();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n if (this.treeComponent.treeModel && this.expandTreeNodeIDs ) {\r\n setTimeout(() => {\r\n let treeModel: TreeModel = this.treeComponent.treeModel;\r\n if(Array.isArray(this.expandTreeNodeIDs)) {\r\n for(let nodeId of this.expandTreeNodeIDs) {\r\n let node: ITreeNode = treeModel.getNodeById(nodeId);\r\n if(node) {\r\n node.expand();\r\n }\r\n }\r\n } else if(typeof this.expandTreeNodeIDs === \"string\"\r\n && this.expandTreeNodeIDs === \"all\") {\r\n treeModel.expandAll();\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Set data only when the component has fully initialized and is rendered.\r\n */\r\n checkInitialized() {\r\n if (this.afterViewInit) {\r\n this.initialized = true;\r\n this.updateConfig(this.config);\r\n this.postInit();\r\n\r\n if (this.dataSubject) {\r\n //May as well make it spin while processing, as well as loading. Otherwise it looks frozen\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(true);\r\n }\r\n\r\n this.dataSubject\r\n .pipe(delay(0))\r\n .subscribe((data: Object[]) => {\r\n this.boundData = data;\r\n this.setData();\r\n\r\n //Now done loading\r\n if (this.loadingSubjects) {\r\n this.loadingSubjects[0].next(false);\r\n }\r\n });\r\n } else {\r\n this.setData();\r\n }\r\n }\r\n }\r\n\r\n postInit(): void {\r\n if (isDevMode()) {\r\n console.debug(\"SearchTreeComponent.postInit: \" + this.id);\r\n }\r\n\r\n if (this.getParent()) {\r\n this.controller = <SearchTreeControllerComponent>this.getParent().getComponentByType(\"SearchTreeControllerComponent\");\r\n }\r\n\r\n if (this.controller) {\r\n if (isDevMode()) {\r\n console.debug(\"SearchTreeComponent: using controller\");\r\n }\r\n\r\n this.controller.addSearchList(this.title);\r\n\r\n this.controller.filtersSubject.subscribe((filters: HciFilterDto[]) => {\r\n this.filters = filters;\r\n this.setData();\r\n this.resetPaging();\r\n });\r\n\r\n this.controller.sortsSubject.subscribe((sorts: HciSortDto[]) => {\r\n this.sorts = sorts;\r\n this.setData();\r\n });\r\n\r\n this.controller.selectedSearchListSubject.subscribe((title: string) => {\r\n if (isDevMode()) {\r\n console.debug(\"selectedSearchListSubject.subscribe: \" + this.title + \", \" + title);\r\n }\r\n\r\n let visible: boolean = true;\r\n\r\n if (this.title && title && this.title !== title) {\r\n visible = false;\r\n }\r\n\r\n if (visible) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"flex\");\r\n } else {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"display\", \"none\");\r\n }\r\n\r\n this.refreshTree();\r\n });\r\n\r\n this.refreshTree();\r\n }\r\n }\r\n\r\n /**\r\n * This function would reset paging and fires\r\n */\r\n resetPaging(){\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n\r\n /**\r\n * Updates the config with options and re-fetches data.\r\n *\r\n * @param config\r\n */\r\n updateConfig(config) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfig\");\r\n }\r\n\r\n if (config) {\r\n this.config = Object.assign({}, this.config, config);\r\n\r\n if (config.route) {\r\n this.route = config.route;\r\n }\r\n if (config.pageSize) {\r\n this.pageSize = config.pageSize;\r\n this.paging.setPageSize(config.pageSize);\r\n }\r\n if (config.data) {\r\n this.boundData = config.data;\r\n }\r\n if (config.dataSubject) {\r\n this.dataSubject = config.dataSubject;\r\n }\r\n if (config.dataCall) {\r\n this.externalDataCall = config.dataCall;\r\n }\r\n if (config.searchTreeOptions) {\r\n this.searchTreeOptions = config.searchTreeOptions;\r\n } else {\r\n this.searchTreeOptions = this.defaultSearchTreeOptions;\r\n }\r\n if (config.itemTemplate) {\r\n this.itemTemplate = config.itemTemplate;\r\n }\r\n if (!this.itemTemplate) {\r\n this.itemTemplate = this.defaultTemplate;\r\n }\r\n\r\n if (config.loadingSubjects) {\r\n this.loadingSubjects = config.loadingSubjects;\r\n }\r\n if (config.onClick) {\r\n this.onClick = config.onClick;\r\n }\r\n if (config.onNodeMoved) {\r\n this.onNodeMoved = config.onNodeMoved;\r\n }\r\n if(config.onDataUpdate) {\r\n this.onDataUpdate = config.onDataUpdate;\r\n }\r\n if(config.expandTreeNodeIDs) {\r\n this.expandTreeNodeIDs = config.expandTreeNodeIDs;\r\n }\r\n }\r\n\r\n if (this.externalDataCall) {\r\n this.loadingSubjects = [new BehaviorSubject<boolean>(false)];\r\n }\r\n\r\n super.updateConfig(config);\r\n\r\n this.setData();\r\n }\r\n\r\n /**\r\n * Generates the data if an array, calls the data if external call.\r\n */\r\n setData(data?: Object[]): void {\r\n if (isDevMode()) {\r\n console.debug(\"setData\");\r\n }\r\n\r\n if (data) {\r\n this.boundData = data;\r\n }\r\n\r\n\r\n if (this.externalDataCall) {\r\n if (!this.busy) {\r\n this.busy = true;\r\n this.loadingSubjects[0].next(true);\r\n\r\n this.externalDataCall(new HciGridDto(this.filters, this.sorts, this.paging, new HciGroupingDto()))\r\n .pipe(finalize(() => {\r\n this.loadingSubjects[0].next(false);\r\n this.busy = false;\r\n }))\r\n .subscribe((externalData: HciDataDto) => {\r\n this.generateData(externalData);\r\n });\r\n }\r\n } else {\r\n this.generateData();\r\n }\r\n }\r\n\r\n /**\r\n * Generates the data array that the interface uses to render (regardless of source).\r\n *\r\n * @param {HciDataDto} externalData\r\n */\r\n generateData(externalData?: HciDataDto): void {\r\n if (isDevMode()) {\r\n console.debug(\"generateData\");\r\n console.debug(externalData);\r\n }\r\n\r\n if (externalData) {\r\n this.boundData = externalData.data;\r\n this.paging.setDataSize(externalData.gridDto.paging.dataSize);\r\n\r\n // Create row groups.\r\n this.viewData = [];\r\n\r\n for (let i = 0; i < this.boundData.length; i++) {\r\n this.viewData.push(this.boundData[i]);\r\n }\r\n } else {\r\n // Create and populate row groups.\r\n this.populateFromBoundData();\r\n }\r\n\r\n this.detectChanges();\r\n this.dataChange.emit(Object.assign({type: \"none\"}, this.lastEvent, {paging: this.paging, nViewData: this.viewData.length}));\r\n }\r\n\r\n /**\r\n * Generates the data if the data is an array (not external).\r\n */\r\n populateFromBoundData(): void {\r\n\r\n if (isDevMode()) {\r\n console.debug(\"populateFromBoundData\");\r\n console.debug(this.boundData);\r\n }\r\n\r\n if (!this.boundData) {\r\n this.viewData = [];\r\n this.paging.setPage(0);\r\n return;\r\n }\r\n\r\n if (this.boundData.length === 0) {\r\n console.debug(\"Bound Data length found as 0\");\r\n this.paging.setPage(0);\r\n this.paging.setNumPages(1);\r\n this.paging.setDataSize(0);\r\n }\r\n\r\n let preparedData = this.filterTreeIncludeChildren(this.boundData);\r\n\r\n if (this.sorts.length > 0) {\r\n this.sortData(preparedData);\r\n }\r\n\r\n this.paging.setDataSize(preparedData.length);\r\n\r\n\r\n if (this.paging.getPageSize() > 0) {\r\n this.viewData = [];\r\n for (var i = this.paging.getPage() * this.paging.getPageSize(); i < Math.min(preparedData.length, (this.paging.getPage() + 1) * this.paging.getPageSize()); i++) {\r\n this.viewData.push(preparedData[i]);\r\n }\r\n } else {\r\n this.paging.setDataSize(preparedData.length);\r\n this.viewData = preparedData;\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(\"Filtered Tree Data:\");\r\n console.debug(this.viewData);\r\n }\r\n\r\n this.refreshTree();\r\n }\r\n \r\n sortData(data: any) {\r\n data.sort((a: any, b: any) => {\r\n let v: number = 0;\r\n\r\n for (let sort of this.sorts) {\r\n if (sort.getAsc()) {\r\n if (this.upper(a[sort.getField()]) < this.upper(b[sort.getField()])) {\r\n v = -1;\r\n } else if (this.upper(a[sort.getField()]) > this.upper(b[sort.getField()])) {\r\n v = 1;\r\n }\r\n } else {\r\n if (this.upper(a[sort.getField()]) > this.upper(b[sort.getField()])) {\r\n v = -1;\r\n } else if (this.upper(a[sort.getField()]) < this.upper(b[sort.getField()])) {\r\n v = 1;\r\n }\r\n }\r\n\r\n if (v != 0) {\r\n return v;\r\n }\r\n }\r\n\r\n return v;\r\n });\r\n \r\n //Sort children\r\n if (this.sortChildren) {\r\n for (let child of data) {\r\n if (child[this.searchTreeOptions.childrenField]) {\r\n this.sortData(child[this.searchTreeOptions.childrenField]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n upper(value: Object) {\r\n if (value && value != null) {\r\n return value.toString().toUpperCase();\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n refreshTree () {\r\n this.treeComponent.treeModel.update();\r\n this.treeComponent.sizeChanged();\r\n }\r\n\r\n /**\r\n * Recursive tree search. It will include children nodes if a parent node matches the search string.\r\n *\r\n * @param {any[]} data\r\n * @returns {any[]}\r\n */\r\n filterTreeIncludeChildren(data: any[]): any[] {\r\n if (isDevMode()) {\r\n console.debug(\"filterTreeIncludeChildren\");\r\n }\r\n let filteredData: any[] = [];\r\n for (let child of data) {\r\n if (this.includeNode(child)) {\r\n filteredData.push(child);\r\n }\r\n else {\r\n if (child[this.searchTreeOptions.childrenField]) {\r\n let filteredChildren = this.filterTreeIncludeChildren(child[this.searchTreeOptions.childrenField]);\r\n if (filteredChildren.length > 0) {\r\n //Copy the node and replace its children with the filtered children\r\n let node: any = Object.assign({}, child);\r\n node[this.searchTreeOptions.childrenField] = filteredChildren;\r\n filteredData.push(node);\r\n }\r\n }\r\n }\r\n }\r\n return filteredData;\r\n }\r\n\r\n\r\n includeNode(row: any): boolean {\r\n let include: boolean = true;\r\n\r\n if (this.filters && this.filters.length > 0) {\r\n\r\n for (let filter of this.filters) {\r\n if (!filter.valid || !filter.getValue() || filter.getValue() === \"\") {\r\n continue;\r\n }\r\n\r\n if (filter.getField().indexOf(\" or \") !== -1) {\r\n let innerInclude: boolean = false;\r\n\r\n for (let field of filter.getField().split(\" or \")) {\r\n if (row[field] && row[field].toLowerCase().indexOf(filter.getValue().toLowerCase()) !== -1) {\r\n innerInclude = true;\r\n }\r\n }\r\n\r\n if (!innerInclude) {\r\n include = false;\r\n }\r\n } else {\r\n if (!row[filter.field]) {\r\n include = false;\r\n break;\r\n } else if (row[filter.field].toLowerCase().indexOf(filter.getValue().toLowerCase()) === -1) {\r\n include = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return include;\r\n }\r\n onUpdateData(event: any): void {\r\n if (this.onDataUpdate) {\r\n this.onDataUpdate(this, this.treeComponent, event);\r\n }\r\n }\r\n\r\n onMoveNode(event: any): void {\r\n if (this.onNodeMoved) {\r\n this.onNodeMoved(this, this.treeComponent, event);\r\n }\r\n }\r\n\r\n onNodeClick(event: any): void {\r\n if (this.onClick) {\r\n this.onClick(this, this.treeComponent, event);\r\n }\r\n\r\n if (this.treeComponent.treeModel.activeNodes.length > 0) {\r\n this.nodeSelected.emit({\r\n event: event,\r\n id: this.treeComponent.treeModel.activeNodes[0].data.id,\r\n node: this.treeComponent.treeModel.activeNodes[0]\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Go to the first page.\r\n */\r\n public doPageFirst(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(0);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n\r\n /**\r\n * Go to the previous page.\r\n */\r\n public doPagePrevious(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() > 0) {\r\n this.paging.setPage(this.paging.getPage() - 1);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the next page.\r\n */\r\n public doPageNext(): void {\r\n if (!this.busy) {\r\n if (this.paging.getPage() < this.paging.getNumPages() - 1) {\r\n this.paging.setPage(this.paging.getPage() + 1);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Go to the last page.\r\n */\r\n public doPageLast(): void {\r\n if (!this.busy) {\r\n this.paging.setPage(this.paging.getNumPages() - 1);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n\r\n\r\n //TODo : Handle the case where the user uses a custom groupTemplate\r\n /**\r\n * This function will cause SearchListComponent to navigate to a page and highlight the given group item, or\r\n * the row (in-case of non-grouped list)\r\n * This\r\n * @param groupId : This should contain a string to uniquely identify a particular group-display\r\n * @param rowId : This is the actual rowId for the row to be selected.\r\n */\r\n navigateToPageContainingElement(id: any){\r\n\r\n if (this.boundData.length === 0) {\r\n return;\r\n }\r\n\r\n this.boundData.forEach((row, index) => {\r\n if (row[\"id\"] === id) {\r\n if (!this.busy) {\r\n let page = Math.floor(index / this.paging.getPageSize());\r\n if (this.paging.getNumPages() - 1 >= page) {\r\n this.paging.setPage(page);\r\n this.pagingSubject.next(this.paging);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {RouterModule} from \"@angular/router\";\r\nimport {MatButtonToggleModule} from \"@angular/material/button-toggle\";\r\nimport {MatLegacyInputModule as MatInputModule} from \"@angular/material/legacy-input\";\r\nimport {MatIconModule} from \"@angular/material/icon\";\r\nimport {MatLegacyButtonModule as MatButtonModule} from \"@angular/material/legacy-button\";\r\nimport {MatLegacyRadioModule as MatRadioModule} from \"@angular/material/legacy-radio\";\r\nimport {TreeModule} from \"@huntsman-cancer-institute/angular-tree-component\";\r\nimport {MatDatepickerModule} from \"@angular/material/datepicker\";\r\nimport {MatLegacySelectModule as MatSelectModule} from \"@angular/material/legacy-select\";\r\nimport {NgbModule, NgbNavModule} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {MiscModule} from \"@huntsman-cancer-institute/misc\";\r\nimport {UlNavComponent} from \"./components/ul-nav.component\";\r\nimport {LiNavComponent} from \"./components/li-nav.component\";\r\nimport {LiDdNavComponent} from \"./components/li-dd-nav.component\";\r\nimport {DivNavComponent} from \"./components/div-nav.component\";\r\nimport {BrandNavComponent} from \"./components/brand-nav.component\";\r\nimport {LiExpNavComponent} from \"./components/li-exp-nav.component\";\r\nimport {BadgeComponent} from \"./components/badge.component\";\r\nimport {TemplateComponent} from \"./components/template.component\";\r\nimport {SearchListComponent} from \"./components/search-list/search-list.component\";\r\nimport {NavigationGlobalService} from \"./services/navigation-global.service\";\r\nimport {TopMarginDirective} from \"./directives/top-margin.directive\";\r\nimport {AppHeaderComponent} from \"./impl/app-header.component\";\r\nimport {AppFooterComponent} from \"./impl/app-footer.component\";\r\nimport {SidebarComponent} from \"./impl/sidebar.component\";\r\nimport {SearchListControllerComponent} from \"./components/search-list/search-list-controller.component\";\r\nimport {SearchTreeComponent} from \"./components/search-tree/search-tree.component\";\r\nimport {SearchTreeControllerComponent} from \"./components/search-tree/search-tree-controller.component\";\r\nimport { MatNativeDateModule } from \"@angular/material/core\";\r\nimport { MatLegacyCheckboxModule as MatCheckboxModule } from '@angular/material/legacy-checkbox';\r\nimport {NavComponent} from \"./components/nav.component\";\r\nimport {RIRippleEffectDirective} from './directives/ri-ripple-effect.directive';\r\n\r\n\r\n/**\r\n * The main @huntsman-cancer-institute/navigation module. The module exports all components that an implementation might use\r\n * and the forRoot() provides a global service for an implementing application.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n RouterModule,\r\n MiscModule,\r\n NgbModule,\r\n MatButtonModule,\r\n MatButtonToggleModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n\t MatCheckboxModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n TreeModule,\r\n NgbNavModule\r\n ],\r\n providers: [\r\n MatDatepickerModule,\r\n ],\r\n declarations: [\r\n NavComponent,\r\n AppHeaderComponent,\r\n AppFooterComponent,\r\n SidebarComponent,\r\n UlNavComponent,\r\n LiNavComponent,\r\n LiDdNavComponent,\r\n DivNavComponent,\r\n BrandNavComponent,\r\n LiExpNavComponent,\r\n BadgeComponent,\r\n TemplateComponent,\r\n SearchListControllerComponent,\r\n SearchListComponent,\r\n SearchTreeControllerComponent,\r\n SearchTreeComponent,\r\n TopMarginDirective,\r\n RIRippleEffectDirective\r\n ],\r\n exports: [\r\n AppHeaderComponent,\r\n AppFooterComponent,\r\n SidebarComponent,\r\n UlNavComponent,\r\n LiNavComponent,\r\n LiDdNavComponent,\r\n BrandNavComponent,\r\n LiExpNavComponent,\r\n DivNavComponent,\r\n BadgeComponent,\r\n TemplateComponent,\r\n SearchListControllerComponent,\r\n SearchListComponent,\r\n SearchTreeControllerComponent,\r\n SearchTreeComponent,\r\n TopMarginDirective,\r\n RIRippleEffectDirective\r\n ]\r\n})\r\nexport class NavigationModule {\r\n static forRoot(): ModuleWithProviders<NavigationModule> {\r\n return {\r\n providers: [\r\n NavigationGlobalService\r\n ],\r\n ngModule: NavigationModule\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * A barrel file for the navigation package.\r\n *\r\n * @since 1.0.0\r\n */\r\n\r\nexport {NavigationModule} from \"./navigation.module\";\r\n\r\nexport {NavigationService} from \"./services/navigation.service\";\r\nexport {NavigationGlobalService} from \"./services/navigation-global.service\";\r\n\r\nexport {AppHeaderComponent} from \"./impl/app-header.component\";\r\nexport {AppFooterComponent} from \"./impl/app-footer.component\";\r\nexport {SidebarComponent} from \"./impl/sidebar.component\";\r\n\r\nexport {NavComponent} from \"./components/nav.component\";\r\nexport {UlNavComponent} from \"./components/ul-nav.component\";\r\nexport {LiNavComponent} from \"./components/li-nav.component\";\r\nexport {LiDdNavComponent} from \"./components/li-dd-nav.component\";\r\nexport {DivNavComponent} from \"./components/div-nav.component\";\r\nexport {BrandNavComponent} from \"./components/brand-nav.component\";\r\nexport {LiExpNavComponent} from \"./components/li-exp-nav.component\";\r\nexport {TemplateComponent} from \"./components/template.component\";\r\nexport {SearchListControllerComponent} from \"./components/search-list/search-list-controller.component\";\r\nexport {SearchListComponent} from \"./components/search-list/search-list.component\";\r\nexport {SearchTreeControllerComponent} from \"./components/search-tree/search-tree-controller.component\";\r\nexport {SearchTreeComponent} from \"./components/search-tree/search-tree.component\";\r\nexport {RowGroup} from \"./components/search-list/row-group\";\r\n\r\nexport {BadgeComponent} from \"./components/badge.component\";\r\nexport {TopMarginDirective} from \"./directives/top-margin.directive\";\r\nexport {RIRippleEffectDirective} from \"./directives/ri-ripple-effect.directive\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.NavigationGlobalService","i1.NavigationService","__decorate","i2","i3","i4.BadgeComponent","i5.RIRippleEffectDirective","__metadata","i2.NavigationService","i4","i6","i15.RIRippleEffectDirective","i5","i1","MatButtonModule","MatInputModule","MatCheckboxModule","MatRadioModule","MatSelectModule"],"mappings":"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"}