assets-navigator/asset-selector/asset-selector-node.component.ts
                OnInit
    
| selector | c8y-asset-selector-node | 
            
| imports | 
                            NgIf
                            NgStyle
                            NgClass
                                IconDirective
                                C8yTranslateDirective
                            CollapseDirective
                            NgFor
                            C8yTranslatePipe
                 | 
            
| templateUrl | ./asset-selector-node.component.html | 
            
                        Properties | 
                
                        Methods | 
                
                        Inputs | 
                
                        Outputs | 
                
| active | 
                        Type :         GroupNode
                     | 
                
| 
                         Sets the active node.  | 
                
| disabled | 
                        Type :         boolean
                     | 
                
                        Default value : false
                     | 
                
| handleNextMillerViewColumn | 
                        Type :         function
                     | 
                
| 
                         A function that should verify the need to add a column when a node is clicked.  | 
                
| index | 
                        Type :         any
                     | 
                
| 
                         Used only for miller-view, displays the column level for the current node. E.g if the index is one, this will be second column.  | 
                
| multi | 
                        Type :         boolean
                     | 
                
                        Default value : false
                     | 
                
| 
                         Can the user select multiple assets.  | 
                
| node | 
                        Type :         GroupNode
                     | 
                
| 
                         The current node.  | 
                
| preselected | 
                        Type :     IIdentified | IIdentified[]
                     | 
                
                        Default value : []
                     | 
                
| 
                         All preselected items.  | 
                
| rootNode | 
                        Type :         GroupNode
                     | 
                
| 
                         Root node. Node found at the top of the hierarchy.  | 
                
| showPath | 
                        Type :         boolean
                     | 
                
                        Default value : false
                     | 
                
| 
                         Should the path be shown.  | 
                
| view | 
                        Type :     "tree" | "miller"
                     | 
                
                        Default value : 'tree'
                     | 
                
| 
                         The current path to the node.  | 
                
| isLoadingState | 
                        Type :     EventEmitter<boolean>
                     | 
                
| 
                         Event, which indicates whether the loading of the node has completed.  | 
                
| onDeselect | 
                        Type :     EventEmitter<literal type>
                     | 
                
| 
                         Event that emits when a node is deselected.  | 
                
| onSelect | 
                        Type :     EventEmitter<IManagedObject>
                     | 
                
| 
                         Event that emits when a node is selected.  | 
                
| click | 
click()
                 | 
            
| 
                         Opens a node. 
                            Returns :          
                void
                         | 
            
| isActive | 
isActive()
                 | 
            
| 
                         
                            Returns :          
                boolean
                         | 
            
| isSelected | 
isSelected()
                 | 
            
| 
                         
                            Returns :          
                boolean
                         | 
            
| millerViewClick | ||||||||
millerViewClick(node: GroupNode)
                 | 
            ||||||||
| 
                         Handles clicks on a item in Miller View. 
                                Parameters :
                                
                                 
                        
 
                            Returns :          
                            void
                         | 
            
| selected | ||||||||
selected(node: GroupNode)
                 | 
            ||||||||
| 
                         Selects the node and emits a change on the parent component. 
                                Parameters :
                                
                                 
                        
 
                            Returns :          
                            void
                         | 
            
| setupBreadcrumbsAndLevel | ||||||
setupBreadcrumbsAndLevel(node: GroupNode)
                 | 
            ||||||
| 
                             
                                Parameters :
                                
                                 
                        
 
                            Returns :          
                            void
                         | 
            
| breadcrumb | 
                        Type :         string
                     | 
                
| isLoading | 
                        Default value : false
                     | 
                
| 
                     sets the   | 
            
| isNodeSelectable | 
                        Default value : true
                     | 
                
<!-- Hierarchy tree -->
<div
  class="c8y-asset-selector__item"
  [ngStyle]="{
    'margin-left': level > 1 ? 16 + 'px' : '0'
  }"
  *ngIf="view === 'tree'"
  [attr.role]="view === 'tree' ? 'tree' : 'list'"
  [ngClass]="{
    'c8y-asset-selector__item--more': node?.icon === 'plus',
    'c8y-asset-selector__item--start': level === 0
  }"
>
  <div
    class="c8y-asset-selector__node"
    title="{{ breadcrumb | translate }}"
    *ngIf="node && !node.root && !node.hidden"
    [attr.role]="view === 'tree' ? 'treeitem' : 'listitem'"
    [ngClass]="{ 'c8y-asset-selector__node--open': node?.open }"
  >
    <!-- expand button -->
    <div class="c8y-asset-selector__node__btn-spacer">
      <button
        class="collapse-btn btn-dot"
        [title]="expandTitle | translate"
        [attr.aria-expanded]="node.open"
        (click)="click()"
        *ngIf="node.isGroup() || node.hasChildDevices()"
      >
        <i c8yIcon="angle-right"></i>
      </button>
    </div>
    <div
      class="d-flex a-i-center p-t-4 p-b-4"
      *ngIf="node.toString() !== 'LoadMoreNode' && isNodeSelectable"
    >
      <label [ngClass]="{ 'c8y-checkbox': multi, 'c8y-radio': !multi }">
        <input
          id="nodeLabel"
          [type]="multi ? 'checkbox' : 'radio'"
          (change)="selected(node)"
          [checked]="isSelected()"
          [disabled]="disabled || !node.groupsSelectable && node.isGroup()"
        />
        <span></span>
        <span
          class="sr-only"
          for="nodeLabel"
          translate
        >
          Node label
        </span>
      </label>
    </div>
    <!-- group button -->
    <button
      class="c8y-asset-selector__btn text-truncate"
      [attr.aria-expanded]="!node.open"
      *ngIf="node.isGroup() || node.hasChildDevices()"
      (click)="click()"
    >
      <i
        class="c8y-icon c8y-icon-duocolor m-r-4 text-16"
        [c8yIcon]="node.icon"
        [title]="'Smart group' | translate"
        *ngIf="node.icon === 'c8y-group-smart'"
      ></i>
      <i
        class="c8y-icon c8y-icon-duocolor m-r-4 text-16"
        [c8yIcon]="node.icon"
        [title]="'Group' | translate"
        *ngIf="node.icon !== 'c8y-group-smart'"
      ></i>
      <span title="{{ breadcrumb }}">
        {{ node.translateLabel ? (node.label | translate) : node.label }}
        <!-- use just for search results to display the path -->
        <p
          class="text-truncate"
          *ngIf="showPath"
        >
          <small
            class="text-muted"
            title="{{ breadcrumb }}"
          >
            <em>{{ breadcrumb }}</em>
          </small>
        </p>
        <!-- up to here -->
      </span>
    </button>
    <!-- not a group button -->
    <button
      class="flex-grow"
      title="{{ breadcrumb }}"
      type="button"
      *ngIf="!node.isGroup() && !node.hasChildDevices()"
      [ngClass]="{
        'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',
        'c8y-asset-selector__btn text-truncate': node.icon != 'plus'
      }"
      (click)="selected(node)"
    >
      <i
        class="c8y-icon c8y-icon-duocolor m-r-4 text-16"
        [c8yIcon]="node.icon"
        [title]="'Smart group' | translate"
        *ngIf="node.icon === 'c8y-group-smart'"
      ></i>
      <i
        class="c8y-icon m-r-4"
        [c8yIcon]="node.icon"
        [title]="'Group' | translate"
        *ngIf="node.icon !== 'c8y-group-smart'"
        [ngClass]="{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }"
      ></i>
      <span title="{{ breadcrumb }}">
        {{ node.translateLabel ? (node.label | translate) : node.label }}
        <!-- use just for search results to display the path -->
        <p
          class="text-truncate text-muted small"
          *ngIf="showPath"
        >
          <em>{{ breadcrumb }}</em>
        </p>
        <!-- up to here -->
      </span>
    </button>
  </div>
  <div
    class="collapse"
    *ngIf="node.countChildren()"
    [collapse]="!node.open"
    [isAnimated]="true"
    [attr.role]="'group'"
  >
    <c8y-asset-selector-node
      *ngFor="let childNode of node.children"
      [node]="childNode"
      [preselected]="preselected || []"
      [disabled]="disabled"
      [multi]="multi"
      [active]="active"
      [attr.role]="view === 'tree' ? 'treeitem' : 'listitem'"
      (onSelect)="onSelect.emit($event)"
      (onDeselect)="onDeselect.emit($event)"
    ></c8y-asset-selector-node>
  </div>
</div>
<!-- Miller columns -->
<div *ngIf="view === 'miller'">
  <div
    class="miller-column__item bg-inherit"
    title="{{ breadcrumb | translate }}"
    *ngIf="node && !node.root && !node.hidden && node !== rootNode"
    [ngClass]="{
      active: isActive(),
      'miller-column__item--more': node.toString() === 'LoadMoreNode'
    }"
  >
    <div
      class="m-l-4 m-r-4 miller-column__item__checkbox"
      *ngIf="node.toString() !== 'LoadMoreNode'"
    >
      <label [ngClass]="{ 'c8y-radio': !multi, 'c8y-checkbox': multi }">
        <input
          id="nodeLabel2"
          [type]="multi ? 'checkbox' : 'radio'"
          (change)="selected(node)"
          [checked]="isSelected()"
          [disabled]="disabled || !node.groupsSelectable && node.isGroup()"
        />
        <span></span>
        <span
          class="sr-only"
          for="nodeLabel2"
          translate
        >
          Node label
        </span>
      </label>
    </div>
    <button
      title="{{ breadcrumb | translate }}"
      type="button"
      [ngClass]="{
        'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':
          node.toString() === 'LoadMoreNode',
        'miller-column__item__btn': node.toString() !== 'LoadMoreNode',
        'btn-pending': node.loading && node.toString() === 'LoadMoreNode'
      }"
      (click)="millerViewClick(node)"
    >
      <i
        class="c8y-icon m-r-4"
        [c8yIcon]="node.icon"
        [ngClass]="{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }"
      ></i>
      <div class="text-left text-truncate">
        <p
          class="text-truncate"
          title="{{ node.translateLabel ? (node.label | translate) : node.label }}"
        >
          {{ node.translateLabel ? (node.label | translate) : node.label }}
        </p>
        <!-- use just for search results to display the path -->
        <small
          class="text-muted text-truncate"
          title="{{ breadcrumb }}"
          *ngIf="showPath"
        >
          <em>{{ breadcrumb }}</em>
        </small>
        <!-- up to here -->
      </div>
      <span
        class="p-l-4 m-l-auto"
        *ngIf="node.isGroup() || node.hasChildDevices()"
      >
        <i c8yIcon="angle-right"></i>
      </span>
    </button>
  </div>
  <div
    role="list"
    *ngIf="node"
    [ngClass]="{ hidden: node !== rootNode }"
  >
    <c8y-asset-selector-node
      role="listitem"
      *ngFor="let childNode of node.children"
      [node]="childNode"
      [rootNode]="rootNode"
      [preselected]="preselected || []"
      [multi]="multi"
      [view]="view"
      [index]="index"
      [active]="active"
      [disabled]="disabled"
      [handleNextMillerViewColumn]="handleNextMillerViewColumn"
      (onSelect)="onSelect.emit($event)"
      (onDeselect)="onDeselect.emit($event)"
    ></c8y-asset-selector-node>
  </div>
</div>