src/app/group/group.component.ts

Implements

OnInit

Metadata

Relationships

Used by

Depends on

Index

Properties
Methods

Constructor

constructor(sasService: SasService, helperService: HelperService, router: Router, location: Location, route: ActivatedRoute)
Parameters :
Name Type Optional
sasService SasService No
helperService HelperService No
router Router No
location Location No
route ActivatedRoute No

Methods

Public groupListOnFilter
groupListOnFilter()
Returns : void
Public groupOnClick
groupOnClick(group: any)
Parameters :
Name Type Optional
group any No
Returns : void
ngOnInit
ngOnInit()
Returns : void

Properties

Public groupDesc
Type : string
Default value : ''
Public groupMemberCount
Type : number | undefined
Public groupMembers
Type : Array<any> | undefined
Public groupName
Type : string
Default value : ''
Public groups
Type : Array<any> | undefined
Public groupSearch
Type : string
Default value : ''
Public groupUri
Type : string
Default value : ''
Public isViya
Type : boolean
Default value : false
Public loading
Type : boolean
Default value : false
Public paramPresent
Type : boolean
Default value : false
Public paramURI
Type : string
Default value : ''
Public sasjsConfig
Type : SASjsConfig
Default value : new SASjsConfig()
Public serverType
Type : string
ServerType
Type : unknown
Default value : ServerType
import { Location } from '@angular/common'
import { Component, OnInit, ViewEncapsulation } from '@angular/core'
import { ActivatedRoute, Router } from '@angular/router'
import { SASjsConfig } from '@sasjs/adapter'
import { ServerType } from '@sasjs/utils/types/serverType'
import { HelperService } from '../services/helper.service'
import { SasService } from '../services/sas.service'
import { globals } from '../_globals'
import { RequestWrapperResponse } from '../models/request-wrapper/RequestWrapperResponse'

@Component({
  selector: 'app-group',
  templateUrl: './group.component.html',
  styleUrls: ['./group.component.scss'],
  host: {
    class: 'content-container'
  },
  encapsulation: ViewEncapsulation.None,
  standalone: false
})
export class GroupComponent implements OnInit {
  public groups: Array<any> | undefined
  public groupSearch: string = ''
  public groupMembers: Array<any> | undefined
  public groupMemberCount: number | undefined
  public paramPresent: boolean = false
  public paramURI: string = ''
  public groupUri: string = ''
  public groupName: string = ''
  public groupDesc: string = ''
  public sasjsConfig: SASjsConfig = new SASjsConfig()
  public isViya: boolean = false
  public loading: boolean = false
  public serverType: string

  ServerType = ServerType

  constructor(
    private sasService: SasService,
    private helperService: HelperService,
    private router: Router,
    private location: Location,
    private route: ActivatedRoute
  ) {
    this.sasjsConfig = this.sasService.getSasjsConfig()
    this.serverType = this.sasService.getServerType()

    if (this.sasjsConfig.serverType === 'SASVIYA') {
      this.isViya = true
    }
  }

  ngOnInit() {
    globals.viewer.currentSelection = 'view/usernav/groups'
    if (this.route.snapshot.params['uri'] !== undefined) {
      this.paramPresent = true
      this.paramURI = this.route.snapshot.params['uri']
    }
    if (globals.usernav.groupList && !this.paramPresent) {
      this.groups = globals.usernav.groupList
      this.groupSearch = globals.usernav.groupSearch
    } else {
      if (globals.usernav.groupList === undefined) {
        this.loading = true
        if (this.isViya) {
          fetch(this.sasjsConfig.serverUrl + '/identities/groups?limit=2000', {
            headers: {
              Accept: 'application/json'
            }
          })
            .then((res: any) => {
              return res.text()
            })
            .then((res: any) => {
              let jsonRes = JSON.parse(res)
              let groups = jsonRes.items.map((group: any) => {
                return {
                  GROUPURI: group.id,
                  GROUPNAME: group.name,
                  GROUPDESC: group.description
                }
              })
              this.loading = false
              this.groups = groups
              globals.usernav.groupList = groups
            })
        } else {
          this.sasService
            .request('public/getgroups', null)
            .then((res: RequestWrapperResponse) => {
              this.loading = false
              this.groups = res.adapterResponse.groups
              globals.usernav.groupList = res.adapterResponse.groups
            })
        }
      } else {
        this.groups = globals.usernav.groupList
        this.groupSearch = globals.usernav.groupSearch
      }
      if (this.paramPresent) {
        this.loading = true

        if (this.isViya) {
          fetch(
            this.sasjsConfig.serverUrl +
              '/identities/groups/' +
              this.paramURI +
              '/members?limit=2000',
            {
              headers: {
                Accept: 'application/json'
              }
            }
          )
            .then((res: any) => {
              return res.text()
            })
            .then((res: any) => {
              let jsonRes = JSON.parse(res)
              this.loading = false
              let groupMembers = jsonRes.items.map((member: any) => {
                return {
                  MEMBERNAME: member.name,
                  MEMBERID: member.id
                }
              })
              this.groupMembers = groupMembers
              this.groupMemberCount = groupMembers.length
              this.groupUri = this.paramURI
              this.groupName = this.paramURI
            })
        } else {
          let data = { iwant: [{ groupid: this.paramURI }] }
          this.sasService
            .request('usernav/usermembersbygroup', data)
            .then((res: RequestWrapperResponse) => {
              this.groupMembers = res.adapterResponse.sasmembers
              this.groupMemberCount = res.adapterResponse.sasmembers.length
              if (res.adapterResponse.sasmembers[0] !== undefined) {
                this.loading = false
                this.groupUri =
                  res.adapterResponse.sasmembers[0].URIMEM || this.paramURI
                this.groupName = res.adapterResponse.sasmembers[0].GROUPNAME
                this.groupDesc = res.adapterResponse.sasmembers[0].GROUPDESC

                if (!this.groupName) {
                  this.groupName = this.paramURI
                }
              }
            })
        }
      }
    }
  }

  public groupListOnFilter() {
    this.helperService.libraryOnFilter(
      this.groups,
      this.groupSearch,
      'GROUPNAME'
    )
    globals.usernav.groupSearch = this.groupSearch
  }

  public groupOnClick(group: any) {
    this.loading = true
    let url = this.router.url

    if (this.paramPresent) {
      this.location.replaceState(
        url.slice(0, url.lastIndexOf('/')) + '/' + encodeURI(group.GROUPURI)
      )
    } else {
      this.location.replaceState(url + '/' + encodeURI(group.GROUPURI))
    }
    if (this.isViya) {
      fetch(
        this.sasjsConfig.serverUrl +
          '/identities/groups/' +
          group.GROUPURI +
          '/members?limit=2000',
        {
          headers: {
            Accept: 'application/json'
          }
        }
      )
        .then((res: any) => {
          return res.text()
        })
        .then((res: any) => {
          let jsonRes = JSON.parse(res)
          this.loading = false
          this.groupUri = group.GROUPURI
          this.groupName = group.GROUPNAME
          this.groupDesc = group.GROUPDESC
          let groupMembers = jsonRes.items.map((member: any) => {
            return {
              MEMBERNAME: member.name,
              MEMBERID: member.id
            }
          })
          this.groupMembers = groupMembers
          this.groupMemberCount = groupMembers.length
        })
    } else {
      let data = { iwant: [{ groupid: group.GROUPURI }] }

      this.sasService
        .request('usernav/usermembersbygroup', data)
        .then((res: RequestWrapperResponse) => {
          this.loading = false
          this.groupUri = group.GROUPURI
          this.groupName = group.GROUPNAME
          this.groupDesc = group.GROUPDESC
          this.groupMembers = res.adapterResponse.sasmembers
          this.groupMemberCount = res.adapterResponse.sasmembers.length
        })
    }
  }
}
<app-sidebar class="sidebar-height">
  <clr-tree>
    @if (groups) {
      <clr-tree-node class="search-node">
        <div class="tree-search-wrapper">
          <input
            appStealFocus
            clrInput
            #searchLibTreeInput
            placeholder="Filter by Groups"
            name="input"
            [(ngModel)]="groupSearch"
            (keyup)="groupListOnFilter()"
            autocomplete="off"
          />
          @if (searchLibTreeInput.value.length < 1) {
            <clr-icon shape="search"></clr-icon>
          }
          @if (searchLibTreeInput.value.length > 0) {
            <clr-icon
              (click)="groupSearch = ''; groupListOnFilter()"
              shape="times"
            ></clr-icon>
          }
        </div>
      </clr-tree-node>
    }

    @for (group of groups; track group) {
      @if (!group['hidden']) {
        <clr-tree-node
          (click)="groupOnClick(group)"
          [class.active]="group.GROUPURI === groupUri"
        >
          <p class="m-0 cursor-pointer list-padding">
            <clr-icon shape="users"></clr-icon>
            {{ group.GROUPNAME }}
          </p>
        </clr-tree-node>
      }
    }
  </clr-tree>
</app-sidebar>

<div class="content-area">
  @if (loading) {
    <div class="loadingSpinner">
      <span class="spinner"> Loading... </span>
    </div>
  }
  @if (groupMembers && !loading) {
    <div>
      @if (serverType !== ServerType.SasViya) {
        <div class="clr-row">
          <div class="clr-col-8">
            <table class="table group-info">
              <tbody>
                <tr>
                  <td class="left">
                    <p class="group-info-text">
                      <b>{{ groupName }}</b>
                    </p>
                  </td>
                </tr>
                <tr>
                  <td class="left">
                    <i>{{ groupDesc || 'no description' }}</i>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </div>
      }
      <div class="clr-row">
        <div class="clr-col-8">
          <div class="card group-data">
            @if (serverType !== ServerType.SasViya) {
              <div>
                <h3>MEMBERS ({{ groupMemberCount }})</h3>
                @if (groupMemberCount == 0) {
                  <h5>No Members Present</h5>
                }
                <div class="table-container">
                  @if (groupMemberCount != 0) {
                    <table class="table member-table">
                      <thead>
                        <tr>
                          @if (serverType === ServerType.Sas9) {
                            <td class="width-25"><b>NAME</b></td>
                            <td class="width-25"><b>EMAIL</b></td>
                            <td class="width-25"><b>CREATED</b></td>
                            <td class=""><b>UPDATED</b></td>
                          }
                          @if (serverType === ServerType.Sasjs) {
                            <td class="width-25"><b>ID</b></td>
                            <td class="width-25"><b>DISPLAY NAME</b></td>
                            <td class="width-25"><b>USER NAME</b></td>
                          }
                        </tr>
                      </thead>
                      <tbody>
                        @for (member of groupMembers; track member) {
                          <tr
                            [routerLink]="
                              '/view/usernav/users/' +
                              (member.URIMEM || member.ID)
                            "
                          >
                            @if (serverType === ServerType.Sas9) {
                              <td class="">{{ member.MEMBERNAME }}</td>
                              <td class="">{{ member.EMAIL }}</td>
                              <td class="">{{ member.MEMBERCREATED }}</td>
                              <td class="">{{ member.MEMBERUPDATED }}</td>
                            }
                            @if (serverType === ServerType.Sasjs) {
                              <td class="">{{ member.ID }}</td>
                              <td class="">{{ member.DISPLAYNAME }}</td>
                              <td class="">{{ member.USERNAME }}</td>
                            }
                          </tr>
                        }
                      </tbody>
                    </table>
                  }
                </div>
              </div>
            }
            @if (serverType === ServerType.SasViya) {
              <div>
                <h3>{{ groupName }}</h3>
                @if (groupMemberCount == 0) {
                  <h5>No Members Present</h5>
                }
                <div class="table-container">
                  @if (groupMemberCount != 0) {
                    <table class="table member-table">
                      <thead>
                        <tr>
                          <td>
                            <b>MEMBERS ({{ groupMemberCount }})</b>
                          </td>
                        </tr>
                      </thead>
                      <tbody>
                        @for (member of groupMembers; track member) {
                          <tr
                            [routerLink]="
                              '/view/usernav/users/' + member.MEMBERID
                            "
                          >
                            <td class="">{{ member.MEMBERNAME }}</td>
                          </tr>
                        }
                      </tbody>
                    </table>
                  }
                </div>
              </div>
            }
            <br />
          </div>
        </div>
      </div>
    </div>
  }
</div>

./group.component.scss

Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""