Merge branch 'master' of https://git.loafle.net/ucap-web/next-ucap-messenger
This commit is contained in:
		
						commit
						e5147eea43
					
				@ -17,7 +17,7 @@ import {
 | 
				
			|||||||
  CreateChatDialogData,
 | 
					  CreateChatDialogData,
 | 
				
			||||||
  CreateChatDialogResult
 | 
					  CreateChatDialogResult
 | 
				
			||||||
} from '@app/layouts/messenger/dialogs/chat/create-chat.dialog.component';
 | 
					} from '@app/layouts/messenger/dialogs/chat/create-chat.dialog.component';
 | 
				
			||||||
import { Subscription, of, Observable } from 'rxjs';
 | 
					import { Subscription, Observable } from 'rxjs';
 | 
				
			||||||
import { Store, select } from '@ngrx/store';
 | 
					import { Store, select } from '@ngrx/store';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as AppStore from '@app/store';
 | 
					import * as AppStore from '@app/store';
 | 
				
			||||||
@ -35,9 +35,8 @@ import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
 | 
				
			|||||||
import { OpenProfileOptions } from '@ucap-webmessenger/protocol-buddy';
 | 
					import { OpenProfileOptions } from '@ucap-webmessenger/protocol-buddy';
 | 
				
			||||||
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
 | 
					import { SessionStorageService } from '@ucap-webmessenger/web-storage';
 | 
				
			||||||
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
 | 
					import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
 | 
				
			||||||
import { MessageApiService, MessageType } from '@ucap-webmessenger/api-message';
 | 
					import { MessageType } from '@ucap-webmessenger/api-message';
 | 
				
			||||||
import { DeviceType } from '@ucap-webmessenger/core';
 | 
					import { tap } from 'rxjs/operators';
 | 
				
			||||||
import { map, catchError, tap } from 'rxjs/operators';
 | 
					 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  MessageWriteDialogComponent,
 | 
					  MessageWriteDialogComponent,
 | 
				
			||||||
  MessageWriteDialogResult,
 | 
					  MessageWriteDialogResult,
 | 
				
			||||||
@ -46,8 +45,7 @@ import {
 | 
				
			|||||||
import {
 | 
					import {
 | 
				
			||||||
  EnvironmentsInfo,
 | 
					  EnvironmentsInfo,
 | 
				
			||||||
  KEY_ENVIRONMENTS_INFO,
 | 
					  KEY_ENVIRONMENTS_INFO,
 | 
				
			||||||
  KEY_VER_INFO,
 | 
					  KEY_VER_INFO
 | 
				
			||||||
  KEY_LOGIN_RES_INFO
 | 
					 | 
				
			||||||
} from '@app/types';
 | 
					} from '@app/types';
 | 
				
			||||||
import { MessageBoxComponent } from './left-sidenav/message.component';
 | 
					import { MessageBoxComponent } from './left-sidenav/message.component';
 | 
				
			||||||
import { environment } from '../../../../environments/environment';
 | 
					import { environment } from '../../../../environments/environment';
 | 
				
			||||||
@ -70,7 +68,7 @@ export enum MainMenu {
 | 
				
			|||||||
export class LeftSideComponent implements OnInit, OnDestroy {
 | 
					export class LeftSideComponent implements OnInit, OnDestroy {
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  openProfile = new EventEmitter<{
 | 
					  openProfile = new EventEmitter<{
 | 
				
			||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
 | 
					    userSeq: number;
 | 
				
			||||||
    openProfileOptions?: OpenProfileOptions;
 | 
					    openProfileOptions?: OpenProfileOptions;
 | 
				
			||||||
  }>();
 | 
					  }>();
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
@ -264,11 +262,11 @@ export class LeftSideComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(params: {
 | 
					  onClickOpenProfile(params: {
 | 
				
			||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
 | 
					    userSeq: number;
 | 
				
			||||||
    openProfileOptions?: OpenProfileOptions;
 | 
					    openProfileOptions?: OpenProfileOptions;
 | 
				
			||||||
  }) {
 | 
					  }) {
 | 
				
			||||||
    this.openProfile.emit({
 | 
					    this.openProfile.emit({
 | 
				
			||||||
      userInfo: params.userInfo,
 | 
					      userSeq: params.userSeq,
 | 
				
			||||||
      openProfileOptions: params.openProfileOptions
 | 
					      openProfileOptions: params.openProfileOptions
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -86,7 +86,7 @@ export class GroupComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
  newGroupAndMember = new EventEmitter();
 | 
					  newGroupAndMember = new EventEmitter();
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  openProfile = new EventEmitter<{
 | 
					  openProfile = new EventEmitter<{
 | 
				
			||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
 | 
					    userSeq: number;
 | 
				
			||||||
    openProfileOptions?: OpenProfileOptions;
 | 
					    openProfileOptions?: OpenProfileOptions;
 | 
				
			||||||
  }>();
 | 
					  }>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -432,7 +432,7 @@ export class GroupComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
    switch (menuType) {
 | 
					    switch (menuType) {
 | 
				
			||||||
      case 'VIEW_PROFILE':
 | 
					      case 'VIEW_PROFILE':
 | 
				
			||||||
        this.openProfile.emit({
 | 
					        this.openProfile.emit({
 | 
				
			||||||
          userInfo,
 | 
					          userSeq: userInfo.seq,
 | 
				
			||||||
          openProfileOptions: {
 | 
					          openProfileOptions: {
 | 
				
			||||||
            useDelBuddybutton:
 | 
					            useDelBuddybutton:
 | 
				
			||||||
              !!group &&
 | 
					              !!group &&
 | 
				
			||||||
@ -570,11 +570,11 @@ export class GroupComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(
 | 
					  onClickOpenProfile(
 | 
				
			||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN,
 | 
					    userSeq: number,
 | 
				
			||||||
    group: GroupDetailData
 | 
					    group: GroupDetailData
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    this.openProfile.emit({
 | 
					    this.openProfile.emit({
 | 
				
			||||||
      userInfo,
 | 
					      userSeq,
 | 
				
			||||||
      openProfileOptions: {
 | 
					      openProfileOptions: {
 | 
				
			||||||
        useDelBuddybutton:
 | 
					        useDelBuddybutton:
 | 
				
			||||||
          !!group &&
 | 
					          !!group &&
 | 
				
			||||||
 | 
				
			|||||||
@ -75,7 +75,6 @@ import {
 | 
				
			|||||||
  CommonApiService,
 | 
					  CommonApiService,
 | 
				
			||||||
  FileTalkSaveRequest,
 | 
					  FileTalkSaveRequest,
 | 
				
			||||||
  FileTalkSaveResponse,
 | 
					  FileTalkSaveResponse,
 | 
				
			||||||
  TranslationReqRequest,
 | 
					 | 
				
			||||||
  TranslationSaveRequest,
 | 
					  TranslationSaveRequest,
 | 
				
			||||||
  TranslationSaveResponse
 | 
					  TranslationSaveResponse
 | 
				
			||||||
} from '@ucap-webmessenger/api-common';
 | 
					} from '@ucap-webmessenger/api-common';
 | 
				
			||||||
@ -117,7 +116,9 @@ import {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
 | 
					export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  openProfile = new EventEmitter<{ userInfo: UserInfo }>();
 | 
					  openProfile = new EventEmitter<{
 | 
				
			||||||
 | 
					    userSeq: number;
 | 
				
			||||||
 | 
					  }>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @ViewChild('chatForm', { static: false })
 | 
					  @ViewChild('chatForm', { static: false })
 | 
				
			||||||
  private chatForm: UCapUiChatFormComponent;
 | 
					  private chatForm: UCapUiChatFormComponent;
 | 
				
			||||||
@ -1322,7 +1323,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(userInfo: UserInfo) {
 | 
					  onClickOpenProfile(userSeq: number) {
 | 
				
			||||||
    if (
 | 
					    if (
 | 
				
			||||||
      this.roomInfo.roomType !== RoomType.Allim &&
 | 
					      this.roomInfo.roomType !== RoomType.Allim &&
 | 
				
			||||||
      this.roomInfo.roomType !== RoomType.Bot &&
 | 
					      this.roomInfo.roomType !== RoomType.Bot &&
 | 
				
			||||||
@ -1330,7 +1331,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
 | 
				
			|||||||
      this.roomInfo.roomType !== RoomType.Allim_Elephant &&
 | 
					      this.roomInfo.roomType !== RoomType.Allim_Elephant &&
 | 
				
			||||||
      this.roomInfo.roomType !== RoomType.Allim_TMS
 | 
					      this.roomInfo.roomType !== RoomType.Allim_TMS
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
      this.openProfile.emit({ userInfo });
 | 
					      this.openProfile.emit({ userSeq });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,5 @@
 | 
				
			|||||||
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
 | 
					import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
 | 
				
			||||||
import { RightDrawer } from '@app/types';
 | 
					import { RightDrawer } from '@app/types';
 | 
				
			||||||
import { UserInfo } from '@ucap-webmessenger/protocol-room';
 | 
					 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
  UserInfoSS,
 | 
					 | 
				
			||||||
  UserInfoF,
 | 
					 | 
				
			||||||
  UserInfoDN
 | 
					 | 
				
			||||||
} from '@ucap-webmessenger/protocol-query';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-layout-messenger-right-drawer',
 | 
					  selector: 'app-layout-messenger-right-drawer',
 | 
				
			||||||
@ -18,7 +12,7 @@ export class RightDrawerComponent implements OnInit {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  openProfile = new EventEmitter<{
 | 
					  openProfile = new EventEmitter<{
 | 
				
			||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
 | 
					    userSeq: number;
 | 
				
			||||||
  }>();
 | 
					  }>();
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  closeRightDrawer = new EventEmitter();
 | 
					  closeRightDrawer = new EventEmitter();
 | 
				
			||||||
@ -29,8 +23,8 @@ export class RightDrawerComponent implements OnInit {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  ngOnInit() {}
 | 
					  ngOnInit() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN) {
 | 
					  onClickOpenProfile(userSeq: number) {
 | 
				
			||||||
    this.openProfile.emit({ userInfo });
 | 
					    this.openProfile.emit({ userSeq });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickClose() {
 | 
					  onClickClose() {
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@
 | 
				
			|||||||
      [presence]="getStatusBulkInfo(userInfo) | async"
 | 
					      [presence]="getStatusBulkInfo(userInfo) | async"
 | 
				
			||||||
      [sessionVerinfo]="sessionVerinfo"
 | 
					      [sessionVerinfo]="sessionVerinfo"
 | 
				
			||||||
      (contextmenu)="onContextMenuRoomUser($event, userInfo)"
 | 
					      (contextmenu)="onContextMenuRoomUser($event, userInfo)"
 | 
				
			||||||
      (openProfile)="onClickOpenProfile($event)"
 | 
					      (openProfile)="onClickOpenProfile(userInfo.seq)"
 | 
				
			||||||
    >
 | 
					    >
 | 
				
			||||||
    </ucap-profile-user-list-item>
 | 
					    </ucap-profile-user-list-item>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -49,7 +49,7 @@ import { MatMenuTrigger, MatDialog } from '@angular/material';
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
export class RoomUserListComponent implements OnInit, OnDestroy {
 | 
					export class RoomUserListComponent implements OnInit, OnDestroy {
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  openProfile = new EventEmitter<UserInfo>();
 | 
					  openProfile = new EventEmitter<number>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @ViewChild('roomUserContextMenuTrigger', { static: true })
 | 
					  @ViewChild('roomUserContextMenuTrigger', { static: true })
 | 
				
			||||||
  roomUserContextMenuTrigger: MatMenuTrigger;
 | 
					  roomUserContextMenuTrigger: MatMenuTrigger;
 | 
				
			||||||
@ -131,8 +131,8 @@ export class RoomUserListComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(userInfo: UserInfo) {
 | 
					  onClickOpenProfile(userSeq: number) {
 | 
				
			||||||
    this.openProfile.emit(userInfo);
 | 
					    this.openProfile.emit(userSeq);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async onClickAddMember() {
 | 
					  async onClickAddMember() {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,120 @@
 | 
				
			|||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  <div class="app-layout-native-title-bar-title">DS Talk</div>
 | 
					  <div class="app-layout-native-title-bar-title">DS Talk</div>
 | 
				
			||||||
  <div class="app-layout-native-title-bar-spacer"></div>
 | 
					  <div class="app-layout-native-title-bar-spacer"></div>
 | 
				
			||||||
 | 
					  <div class="btn-area">
 | 
				
			||||||
    <div *ngIf="!!loginRes" class="app-layout-native-title-bar-link">
 | 
					    <div *ngIf="!!loginRes" class="app-layout-native-title-bar-link">
 | 
				
			||||||
 | 
					      <!--s[추가된 전체 웹링크] weblink-->
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="웹하드"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink webhard">웹하드</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="DSP"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink dsp">DSP</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="SMS"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink sms">SMS</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="화상회의"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink vc">화상회의</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="EP"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink ep">EP</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="S&OM"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink S_OM">S&OM</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="코끼리"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink elephant">코끼리</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="IT서비스"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink it-service">IT</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="개인속보"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink Personal-news">NEWS</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="메일"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink mail">메일</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <button
 | 
				
			||||||
 | 
					        mat-icon-button
 | 
				
			||||||
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
 | 
					        class="button"
 | 
				
			||||||
 | 
					        [matTooltip]="link.title"
 | 
				
			||||||
 | 
					        matTooltip="결제"
 | 
				
			||||||
 | 
					        (click)="onClickWebLink(link)"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <span class="weblink approved">결제</span>
 | 
				
			||||||
 | 
					      </button>
 | 
				
			||||||
 | 
					      <!--E[추가된 전체 웹링크] weblink-->
 | 
				
			||||||
      <button
 | 
					      <button
 | 
				
			||||||
        mat-icon-button
 | 
					        mat-icon-button
 | 
				
			||||||
        *ngFor="let link of weblink"
 | 
					        *ngFor="let link of weblink"
 | 
				
			||||||
@ -24,7 +137,7 @@
 | 
				
			|||||||
          />
 | 
					          />
 | 
				
			||||||
        </svg>
 | 
					        </svg>
 | 
				
			||||||
      </button>
 | 
					      </button>
 | 
				
			||||||
    <span class="stroke-bar"></span>
 | 
					
 | 
				
			||||||
      <button
 | 
					      <button
 | 
				
			||||||
        mat-icon-button
 | 
					        mat-icon-button
 | 
				
			||||||
        *ngFor="let link of weblinkBadgeTypes"
 | 
					        *ngFor="let link of weblinkBadgeTypes"
 | 
				
			||||||
@ -49,9 +162,6 @@
 | 
				
			|||||||
          />
 | 
					          />
 | 
				
			||||||
        </svg>
 | 
					        </svg>
 | 
				
			||||||
      </button>
 | 
					      </button>
 | 
				
			||||||
 | 
					 | 
				
			||||||
    <span class="stroke-bar"></span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <button
 | 
					      <button
 | 
				
			||||||
        *ngIf="updateInfo$ | async as updateInfo"
 | 
					        *ngIf="updateInfo$ | async as updateInfo"
 | 
				
			||||||
        mat-icon-button
 | 
					        mat-icon-button
 | 
				
			||||||
@ -77,7 +187,8 @@
 | 
				
			|||||||
          ></path>
 | 
					          ></path>
 | 
				
			||||||
        </svg>
 | 
					        </svg>
 | 
				
			||||||
      </button>
 | 
					      </button>
 | 
				
			||||||
 | 
					      <span class="stroke-bar"></span>
 | 
				
			||||||
 | 
					      <!--S[삭제예정] 마이프로필 설정을 이동
 | 
				
			||||||
      <button
 | 
					      <button
 | 
				
			||||||
        mat-icon-button
 | 
					        mat-icon-button
 | 
				
			||||||
        class="button app-layout-native-title-bar-setting"
 | 
					        class="button app-layout-native-title-bar-setting"
 | 
				
			||||||
@ -113,7 +224,7 @@
 | 
				
			|||||||
          stroke-width="1.5"
 | 
					          stroke-width="1.5"
 | 
				
			||||||
          stroke-linecap="butt"
 | 
					          stroke-linecap="butt"
 | 
				
			||||||
          stroke-linejoin="round"
 | 
					          stroke-linejoin="round"
 | 
				
			||||||
        alt="환경설정"
 | 
					           matTooltip="환경설정"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
          <circle cx="12" cy="12" r="3"></circle>
 | 
					          <circle cx="12" cy="12" r="3"></circle>
 | 
				
			||||||
          <path
 | 
					          <path
 | 
				
			||||||
@ -138,7 +249,7 @@
 | 
				
			|||||||
          stroke-width="1.5"
 | 
					          stroke-width="1.5"
 | 
				
			||||||
          stroke-linecap="butt"
 | 
					          stroke-linecap="butt"
 | 
				
			||||||
          stroke-linejoin="round"
 | 
					          stroke-linejoin="round"
 | 
				
			||||||
        alt="로그아웃"
 | 
					          matTooltip="로그아웃"
 | 
				
			||||||
          class="stroke-warn-color"
 | 
					          class="stroke-warn-color"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
          <path
 | 
					          <path
 | 
				
			||||||
@ -146,14 +257,13 @@
 | 
				
			|||||||
          />
 | 
					          />
 | 
				
			||||||
        </svg>
 | 
					        </svg>
 | 
				
			||||||
      </button>
 | 
					      </button>
 | 
				
			||||||
 | 
					      E[삭제예정] 마이프로필 설정을 이동-->
 | 
				
			||||||
      <ucap-profile-my-profile-widget
 | 
					      <ucap-profile-my-profile-widget
 | 
				
			||||||
        [profileImageRoot]="sessionVerinfo.profileRoot"
 | 
					        [profileImageRoot]="sessionVerinfo.profileRoot"
 | 
				
			||||||
        [profileImageFile]="getMyProfileImageWidget()"
 | 
					        [profileImageFile]="getMyProfileImageWidget()"
 | 
				
			||||||
        (openProfile)="onClickOpenProfile()"
 | 
					        (openProfile)="onClickOpenProfile()"
 | 
				
			||||||
        class="myprofile"
 | 
					        class="myprofile"
 | 
				
			||||||
      ></ucap-profile-my-profile-widget>
 | 
					      ></ucap-profile-my-profile-widget>
 | 
				
			||||||
    <span class="stroke-bar"></span>
 | 
					 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class="app-layout-native-title-bar-actions">
 | 
					    <div class="app-layout-native-title-bar-actions">
 | 
				
			||||||
      <button
 | 
					      <button
 | 
				
			||||||
@ -248,4 +358,5 @@
 | 
				
			|||||||
        </svg>
 | 
					        </svg>
 | 
				
			||||||
      </button>
 | 
					      </button>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
</mat-toolbar>
 | 
					</mat-toolbar>
 | 
				
			||||||
 | 
				
			|||||||
@ -27,11 +27,15 @@
 | 
				
			|||||||
    .app-layout-native-title-bar-spacer {
 | 
					    .app-layout-native-title-bar-spacer {
 | 
				
			||||||
      flex: 1 1 auto;
 | 
					      flex: 1 1 auto;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    .btn-area {
 | 
				
			||||||
 | 
					      display: flex;
 | 
				
			||||||
 | 
					      margin-left: auto;
 | 
				
			||||||
 | 
					      flex-flow: row;
 | 
				
			||||||
 | 
					      justify-items: center;
 | 
				
			||||||
      .app-layout-native-title-bar-link {
 | 
					      .app-layout-native-title-bar-link {
 | 
				
			||||||
        align-items: center;
 | 
					        align-items: center;
 | 
				
			||||||
        position: relative;
 | 
					        position: relative;
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
        .stroke-bar {
 | 
					        .stroke-bar {
 | 
				
			||||||
          width: 1px;
 | 
					          width: 1px;
 | 
				
			||||||
          height: 20px;
 | 
					          height: 20px;
 | 
				
			||||||
@ -44,19 +48,49 @@
 | 
				
			|||||||
          outline: 0;
 | 
					          outline: 0;
 | 
				
			||||||
          cursor: pointer;
 | 
					          cursor: pointer;
 | 
				
			||||||
          border: none;
 | 
					          border: none;
 | 
				
			||||||
        height: 28px;
 | 
					          height: 30px;
 | 
				
			||||||
        min-width: 28px;
 | 
					          min-width: 30px;
 | 
				
			||||||
        max-width: 28px;
 | 
					          max-width: 30px;
 | 
				
			||||||
        padding: 5px;
 | 
					          padding: 3px;
 | 
				
			||||||
          line-height: 10px;
 | 
					          line-height: 10px;
 | 
				
			||||||
        border-radius: 0;
 | 
					          background-color: #ffffff;
 | 
				
			||||||
        background: transparent;
 | 
					          border-radius: 50%;
 | 
				
			||||||
          transition: background 0.2s linear, color 0.2s linear;
 | 
					          transition: background 0.2s linear, color 0.2s linear;
 | 
				
			||||||
          text-align: center;
 | 
					          text-align: center;
 | 
				
			||||||
          font-size: 10px;
 | 
					          font-size: 10px;
 | 
				
			||||||
          vertical-align: middle;
 | 
					          vertical-align: middle;
 | 
				
			||||||
        margin-left: 10px;
 | 
					          margin-left: 14px;
 | 
				
			||||||
        transform: translateY(-2px);
 | 
					          .weblink {
 | 
				
			||||||
 | 
					            display: inline-flex;
 | 
				
			||||||
 | 
					            line-height: 24px;
 | 
				
			||||||
 | 
					            font-size: 12px;
 | 
				
			||||||
 | 
					            font-weight: bold;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            width: 24px;
 | 
				
			||||||
 | 
					            height: 24px;
 | 
				
			||||||
 | 
					            background-repeat: no-repeat;
 | 
				
			||||||
 | 
					            background-position: 50% 50%;
 | 
				
			||||||
 | 
					            text-indent: -1000000px;
 | 
				
			||||||
 | 
					            justify-content: center;
 | 
				
			||||||
 | 
					            &.dsp {
 | 
				
			||||||
 | 
					              text-indent: 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            &.sms {
 | 
				
			||||||
 | 
					              text-indent: 0;
 | 
				
			||||||
 | 
					              letter-spacing: -1px;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            &.ep,
 | 
				
			||||||
 | 
					            &.it-service {
 | 
				
			||||||
 | 
					              text-indent: 0;
 | 
				
			||||||
 | 
					              font-size: 13px;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            &.S_OM,
 | 
				
			||||||
 | 
					            &.Personal-news {
 | 
				
			||||||
 | 
					              text-indent: 0;
 | 
				
			||||||
 | 
					              font-size: 11px;
 | 
				
			||||||
 | 
					              letter-spacing: -1px;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          &.app-layout-native-title-bar-logout,
 | 
					          &.app-layout-native-title-bar-logout,
 | 
				
			||||||
          &.app-layout-native-title-bar-setting {
 | 
					          &.app-layout-native-title-bar-setting {
 | 
				
			||||||
@ -72,7 +106,6 @@
 | 
				
			|||||||
      .app-layout-native-title-bar-actions {
 | 
					      .app-layout-native-title-bar-actions {
 | 
				
			||||||
        align-items: center;
 | 
					        align-items: center;
 | 
				
			||||||
        position: relative;
 | 
					        position: relative;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        .button {
 | 
					        .button {
 | 
				
			||||||
          -webkit-app-region: no-drag;
 | 
					          -webkit-app-region: no-drag;
 | 
				
			||||||
          outline: 0;
 | 
					          outline: 0;
 | 
				
			||||||
@ -131,4 +164,25 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					@mixin weblink($color) {
 | 
				
			||||||
 | 
					  $color: rgba($color, 0.999);
 | 
				
			||||||
 | 
					  .webhard {
 | 
				
			||||||
 | 
					    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M4.5,4.3L1.7,10v5c0,0.9,0.7,1.7,1.7,1.7h13.3c0.9,0,1.7-0.7,1.7-1.7v-5l-2.9-5.7c-0.3-0.6-0.9-0.9-1.5-0.9H6 C5.4,3.3,4.8,3.7,4.5,4.3z'/%3E%3Cline class='st0' x1='5' y1='13.3' x2='5' y2='13.3'/%3E%3Cline class='st0' x1='8.3' y1='13.3' x2='8.3' y2='13.3'/%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .vc {
 | 
				
			||||||
 | 
					    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-video'%3E%3Cpolygon points='23 7 16 12 23 17 23 7'%3E%3C/polygon%3E%3Crect x='1' y='5' width='15' height='14' rx='2' ry='2'%3E%3C/rect%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .elephant {
 | 
				
			||||||
 | 
					    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='#{$color}' stroke='none' xml:space='preserve'%3E%3Cpath d='M19.1,5c-1,0-2,0.4-2.7,1.1c-1.2-1-2.9-1.5-4.7-1.5c-1.7,0-3.3,0.5-4.5,1.4C6.6,5.3,5.7,5,4.8,5C2.6,5,0.9,6.7,0.9,8.8 c0,1.1,1.1,4.6,2.7,5.7c0.3,0.2,0.7,0.3,1.1,0.3c0.2,0,0.4,0,0.6-0.1c0.5-0.2,0.9-0.4,1.3-0.6c0.6,0.6,1.3,1,2.1,1.4l0.8,1.2 c0.3,0.5,0.5,1.1,0.6,1.7H9.2c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2h0.4c2.5,0,4.6-1.7,5.2-4.1l0.4-1.4c0.7-0.4,1.4-0.8,1.9-1.3 c0.4,0.3,0.9,0.5,1.5,0.8c0.2,0.1,0.4,0.1,0.6,0.1c0.4,0,0.7-0.1,1.1-0.3c1.6-1.1,2.7-4.6,2.7-5.7C22.9,6.7,21.2,5,19.1,5z M5,14.1 c-0.3,0.1-0.7,0.1-1-0.2C2.7,13,1.7,9.8,1.7,8.8c0-1.7,1.4-3.1,3.1-3.1c0.7,0,1.4,0.3,2,0.7C6.4,6.8,6.1,7.1,5.8,7.5 C5.5,7.3,5.1,7.2,4.8,7.2c-1.2,0-2.1,1-2.1,2.1c0,0.6,0.6,2.5,1.5,3.1c0.2,0.1,0.4,0.2,0.6,0.2c0.1,0,0.3,0,0.4-0.1 c0.1,0,0.2-0.1,0.3-0.1c0.2,0.4,0.4,0.8,0.7,1.1C5.8,13.8,5.4,13.9,5,14.1z M5.1,11.8c-0.1,0-0.2,0.1-0.3,0.1 c-0.1,0-0.2,0.1-0.4-0.1c-0.6-0.4-1.2-2-1.2-2.5c0-0.8,0.6-1.4,1.4-1.4C5,7.9,5.2,8,5.4,8.1c-0.3,0.7-0.5,1.4-0.5,2.2 C4.9,10.8,5,11.3,5.1,11.8z M14.7,14.8c-0.1,0-0.2,0.1-0.2,0.2l-0.4,1.6c-0.5,2.1-2.4,3.5-4.5,3.5H9.2c-0.3,0-0.5-0.2-0.5-0.5 c0-0.3,0.2-0.5,0.5-0.5h1.1c0.3,0,0.5-0.2,0.5-0.5c0-0.8-0.2-1.6-0.7-2.3L9.3,15c0-0.1-0.1-0.1-0.2-0.1c-0.8-0.3-1.5-0.8-2.1-1.3 c0,0,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c-0.4-0.4-0.7-0.9-0.9-1.4c0,0,0-0.1,0-0.1c-0.2-0.5-0.3-1-0.3-1.5c0-2.8,2.7-5,6.1-5 s6.1,2.3,6.1,5C17.9,12.2,16.7,13.9,14.7,14.8z M18.2,8.3c0.3-0.2,0.6-0.4,0.9-0.4c0.8,0,1.4,0.6,1.4,1.4c0,0.5-0.5,2.1-1.2,2.5 C19.2,12,19.1,12,19,11.9c-0.2-0.1-0.4-0.2-0.6-0.3c0.1-0.4,0.2-0.9,0.2-1.3C18.6,9.6,18.5,8.9,18.2,8.3z M19.8,13.9 c-0.3,0.2-0.7,0.3-1,0.2c-0.5-0.2-0.9-0.4-1.3-0.7c0.3-0.3,0.5-0.7,0.7-1.1c0.2,0.1,0.4,0.2,0.6,0.3c0.1,0.1,0.3,0.1,0.4,0.1 c0.2,0,0.4-0.1,0.6-0.2c0.9-0.6,1.5-2.5,1.5-3.1c0-1.2-1-2.1-2.1-2.1c-0.5,0-0.9,0.2-1.3,0.4c-0.2-0.4-0.5-0.7-0.9-1.1 c0.6-0.6,1.3-0.9,2.1-0.9c1.7,0,3.1,1.4,3.1,3.1C22.2,9.8,21.1,13,19.8,13.9z'/%3E%3Cpath d='M11.5,16.5h1c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.5h-1c-0.3,0-0.5,0.2-0.5,0.5S11.2,16.5,11.5,16.5z'/%3E%3Cpath d='M13,17.6H11c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5H13c0.3,0,0.5-0.2,0.5-0.5S13.3,17.6,13,17.6z'/%3E%3Cpath d='M17,12.4c0,0.5-0.4,0.8-0.8,0.8c-0.5,0-0.8-0.4-0.8-0.8s0.4-0.8,0.8-0.8C16.7,11.6,17,12,17,12.4z'/%3E%3Cpath d='M8.5,12.4c0,0.5-0.4,0.8-0.8,0.8c-0.5,0-0.8-0.4-0.8-0.8s0.4-0.8,0.8-0.8C8.1,11.6,8.5,12,8.5,12.4z'/%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .mail {
 | 
				
			||||||
 | 
					    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .approved {
 | 
				
			||||||
 | 
					    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z'%3E%3C/path%3E%3Cline x1='16' y1='8' x2='2' y2='22'%3E%3C/line%3E%3Cline x1='17.5' y1='15' x2='9' y2='15'%3E%3C/line%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@include weblink(#425888);
 | 
				
			||||||
 | 
				
			|||||||
@ -16,12 +16,6 @@ import * as MessageStore from '@app/store/messenger/message';
 | 
				
			|||||||
import { Observable, Subscription, of } from 'rxjs';
 | 
					import { Observable, Subscription, of } from 'rxjs';
 | 
				
			||||||
import { UCAP_NATIVE_SERVICE, NativeService } from '@ucap-webmessenger/native';
 | 
					import { UCAP_NATIVE_SERVICE, NativeService } from '@ucap-webmessenger/native';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { UserInfo } from '@ucap-webmessenger/protocol-sync';
 | 
					 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
  UserInfoSS,
 | 
					 | 
				
			||||||
  UserInfoF,
 | 
					 | 
				
			||||||
  UserInfoDN
 | 
					 | 
				
			||||||
} from '@ucap-webmessenger/protocol-query';
 | 
					 | 
				
			||||||
import { StatusProtocolService } from '@ucap-webmessenger/protocol-status';
 | 
					import { StatusProtocolService } from '@ucap-webmessenger/protocol-status';
 | 
				
			||||||
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
 | 
					import { StatusType, StatusCode } from '@ucap-webmessenger/core';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
@ -211,14 +205,17 @@ export class MainPageComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(params: {
 | 
					  onClickOpenProfile(params: {
 | 
				
			||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
 | 
					    userSeq: number;
 | 
				
			||||||
    openProfileOptions?: OpenProfileOptions;
 | 
					    openProfileOptions?: OpenProfileOptions;
 | 
				
			||||||
  }) {
 | 
					  }) {
 | 
				
			||||||
 | 
					    if (!params.userSeq || params.userSeq < 0) {
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    // [GROUP]
 | 
					    // [GROUP]
 | 
				
			||||||
    // this.queryProtocolService
 | 
					    // this.queryProtocolService
 | 
				
			||||||
    //   .dataUser({
 | 
					    //   .dataUser({
 | 
				
			||||||
    //     divCd: 'OPENPROF',
 | 
					    //     divCd: 'OPENPROF',
 | 
				
			||||||
    //     seq: userInfo.seq,
 | 
					    //     seq: params.userSeq,
 | 
				
			||||||
    //     senderCompanyCode: this.loginRes.userInfo.companyCode,
 | 
					    //     senderCompanyCode: this.loginRes.userInfo.companyCode,
 | 
				
			||||||
    //     senderEmployeeType: this.loginRes.userInfo.employeeType
 | 
					    //     senderEmployeeType: this.loginRes.userInfo.employeeType
 | 
				
			||||||
    //   })
 | 
					    //   })
 | 
				
			||||||
@ -244,7 +241,7 @@ export class MainPageComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
    this.daesangProtocolService
 | 
					    this.daesangProtocolService
 | 
				
			||||||
      .dataUserDaesang({
 | 
					      .dataUserDaesang({
 | 
				
			||||||
        divCd: 'OPENPROF',
 | 
					        divCd: 'OPENPROF',
 | 
				
			||||||
        seq: params.userInfo.seq,
 | 
					        seq: params.userSeq,
 | 
				
			||||||
        senderCompanyCode: this.loginRes.userInfo.companyCode,
 | 
					        senderCompanyCode: this.loginRes.userInfo.companyCode,
 | 
				
			||||||
        senderEmployeeType: this.loginRes.userInfo.employeeType
 | 
					        senderEmployeeType: this.loginRes.userInfo.employeeType
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ import { EventType, Info, EventJson } from '@ucap-webmessenger/protocol-event';
 | 
				
			|||||||
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
 | 
					import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
 | 
				
			||||||
import { StatusCode as ApiStatusCode } from '@ucap-webmessenger/api';
 | 
					import { StatusCode as ApiStatusCode } from '@ucap-webmessenger/api';
 | 
				
			||||||
import { StatusCode } from '@ucap-webmessenger/core';
 | 
					import { StatusCode } from '@ucap-webmessenger/core';
 | 
				
			||||||
 | 
					import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-template.page',
 | 
					  selector: 'app-template.page',
 | 
				
			||||||
@ -73,7 +74,8 @@ export const status: StatusBulkInfo = {
 | 
				
			|||||||
  // 단말상태정보(s)
 | 
					  // 단말상태정보(s)
 | 
				
			||||||
  terminalStatus: TerminalStatusInfo.Idle,
 | 
					  terminalStatus: TerminalStatusInfo.Idle,
 | 
				
			||||||
  // 단말상태번호(n)
 | 
					  // 단말상태번호(n)
 | 
				
			||||||
  terminalStatusNumber: TerminalStatusNumber.Idle
 | 
					  terminalStatusNumber: TerminalStatusNumber.Idle,
 | 
				
			||||||
 | 
					  workstatus: WorkStatusType.Work
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
export const buddyData: UserInfo = {
 | 
					export const buddyData: UserInfo = {
 | 
				
			||||||
  seq: 15,
 | 
					  seq: 15,
 | 
				
			||||||
 | 
				
			|||||||
@ -138,7 +138,7 @@ export class Effects {
 | 
				
			|||||||
      map(action => {
 | 
					      map(action => {
 | 
				
			||||||
        const roomInfo = action.roomInfo;
 | 
					        const roomInfo = action.roomInfo;
 | 
				
			||||||
        let requestCount =
 | 
					        let requestCount =
 | 
				
			||||||
          environment.productConfig.CommonSetting.eventRequestDefaultCount;
 | 
					          environment.productConfig.CommonSetting.eventRequestInitCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 여기까지 읽음 처리..
 | 
					        // 여기까지 읽음 처리..
 | 
				
			||||||
        if (!!roomInfo.finalEventSeq && !!roomInfo.lastReadEventSeq) {
 | 
					        if (!!roomInfo.finalEventSeq && !!roomInfo.lastReadEventSeq) {
 | 
				
			||||||
@ -146,11 +146,11 @@ export class Effects {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          // 기존 요청개수보다 요청할 갯수가 적을 경우 기본값.
 | 
					          // 기존 요청개수보다 요청할 갯수가 적을 경우 기본값.
 | 
				
			||||||
          if (
 | 
					          if (
 | 
				
			||||||
            environment.productConfig.CommonSetting.eventRequestDefaultCount >=
 | 
					            environment.productConfig.CommonSetting.eventRequestInitCount >=
 | 
				
			||||||
            requestCount
 | 
					            requestCount
 | 
				
			||||||
          ) {
 | 
					          ) {
 | 
				
			||||||
            requestCount =
 | 
					            requestCount =
 | 
				
			||||||
              environment.productConfig.CommonSetting.eventRequestDefaultCount;
 | 
					              environment.productConfig.CommonSetting.eventRequestInitCount;
 | 
				
			||||||
          } else {
 | 
					          } else {
 | 
				
			||||||
            // 여기까지 읽음 처리를 위한 최대 요청 개수 제한.
 | 
					            // 여기까지 읽음 처리를 위한 최대 요청 개수 제한.
 | 
				
			||||||
            if (
 | 
					            if (
 | 
				
			||||||
 | 
				
			|||||||
@ -75,6 +75,7 @@ export const environment: Environment = {
 | 
				
			|||||||
      maxChatRoomUser: 300,
 | 
					      maxChatRoomUser: 300,
 | 
				
			||||||
      masstextLength: 800,
 | 
					      masstextLength: 800,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      eventRequestInitCount: 15,
 | 
				
			||||||
      eventRequestDefaultCount: 50,
 | 
					      eventRequestDefaultCount: 50,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      readHereShowMinimumEventCount: 10,
 | 
					      readHereShowMinimumEventCount: 10,
 | 
				
			||||||
 | 
				
			|||||||
@ -75,6 +75,7 @@ export const environment: Environment = {
 | 
				
			|||||||
      maxChatRoomUser: 300,
 | 
					      maxChatRoomUser: 300,
 | 
				
			||||||
      masstextLength: 800,
 | 
					      masstextLength: 800,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      eventRequestInitCount: 30,
 | 
				
			||||||
      eventRequestDefaultCount: 50,
 | 
					      eventRequestDefaultCount: 50,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      readHereShowMinimumEventCount: 10,
 | 
					      readHereShowMinimumEventCount: 10,
 | 
				
			||||||
 | 
				
			|||||||
@ -75,6 +75,7 @@ export const environment: Environment = {
 | 
				
			|||||||
      maxChatRoomUser: 300,
 | 
					      maxChatRoomUser: 300,
 | 
				
			||||||
      masstextLength: 800,
 | 
					      masstextLength: 800,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      eventRequestInitCount: 15,
 | 
				
			||||||
      eventRequestDefaultCount: 50,
 | 
					      eventRequestDefaultCount: 50,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      readHereShowMinimumEventCount: 10,
 | 
					      readHereShowMinimumEventCount: 10,
 | 
				
			||||||
 | 
				
			|||||||
@ -75,6 +75,7 @@ export const environment: Environment = {
 | 
				
			|||||||
      maxChatRoomUser: 300,
 | 
					      maxChatRoomUser: 300,
 | 
				
			||||||
      masstextLength: 800,
 | 
					      masstextLength: 800,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      eventRequestInitCount: 15,
 | 
				
			||||||
      eventRequestDefaultCount: 50,
 | 
					      eventRequestDefaultCount: 50,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      readHereShowMinimumEventCount: 10,
 | 
					      readHereShowMinimumEventCount: 10,
 | 
				
			||||||
 | 
				
			|||||||
@ -82,6 +82,8 @@ export interface Environment {
 | 
				
			|||||||
      /** 대용량대화 기준 */
 | 
					      /** 대용량대화 기준 */
 | 
				
			||||||
      masstextLength: number;
 | 
					      masstextLength: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      /** 대화방 초기 로딩 이벤트 갯수 */
 | 
				
			||||||
 | 
					      eventRequestInitCount: number;
 | 
				
			||||||
      /** 대화방 이벤트 조회 개수 */
 | 
					      /** 대화방 이벤트 조회 개수 */
 | 
				
			||||||
      eventRequestDefaultCount: number;
 | 
					      eventRequestDefaultCount: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@ import {
 | 
				
			|||||||
  UserInfoSS,
 | 
					  UserInfoSS,
 | 
				
			||||||
  DataUserResponse
 | 
					  DataUserResponse
 | 
				
			||||||
} from '@ucap-webmessenger/protocol-query';
 | 
					} from '@ucap-webmessenger/protocol-query';
 | 
				
			||||||
 | 
					import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// export interface UserInfoSSForDaesang extends UserInfoSS {
 | 
					// export interface UserInfoSSForDaesang extends UserInfoSS {
 | 
				
			||||||
//   /****** For daesang ******/
 | 
					//   /****** For daesang ******/
 | 
				
			||||||
@ -69,7 +70,7 @@ export const decodeDataUser: ProtocolDecoder<DataUserResponse> = (
 | 
				
			|||||||
      // [daesang]
 | 
					      // [daesang]
 | 
				
			||||||
      companyName: info[29],
 | 
					      companyName: info[29],
 | 
				
			||||||
      responsibilities: info[30],
 | 
					      responsibilities: info[30],
 | 
				
			||||||
      workstatus: info[31],
 | 
					      workstatus: info[31] as WorkStatusType,
 | 
				
			||||||
      job: info[32],
 | 
					      job: info[32],
 | 
				
			||||||
      customerInfo: info[33],
 | 
					      customerInfo: info[33],
 | 
				
			||||||
      workplace: info[34]
 | 
					      workplace: info[34]
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
import { RoleCode } from '@ucap-webmessenger/protocol-authentication';
 | 
					import { RoleCode } from '@ucap-webmessenger/protocol-authentication';
 | 
				
			||||||
import { CallMode } from '@ucap-webmessenger/core';
 | 
					import { CallMode } from '@ucap-webmessenger/core';
 | 
				
			||||||
import { EmployeeType } from '@ucap-webmessenger/protocol-room';
 | 
					import { EmployeeType } from '@ucap-webmessenger/protocol-room';
 | 
				
			||||||
 | 
					import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface UserInfoSS {
 | 
					export interface UserInfoSS {
 | 
				
			||||||
  /** 사용자SEQ */
 | 
					  /** 사용자SEQ */
 | 
				
			||||||
@ -67,7 +68,7 @@ export interface UserInfoSS {
 | 
				
			|||||||
  /** 담당업무 */
 | 
					  /** 담당업무 */
 | 
				
			||||||
  responsibilities?: string;
 | 
					  responsibilities?: string;
 | 
				
			||||||
  /** 업무 상태 */
 | 
					  /** 업무 상태 */
 | 
				
			||||||
  workstatus?: string;
 | 
					  workstatus?: WorkStatusType;
 | 
				
			||||||
  /** SC직무 */
 | 
					  /** SC직무 */
 | 
				
			||||||
  job?: string;
 | 
					  job?: string;
 | 
				
			||||||
  /** 거래처정보 */
 | 
					  /** 거래처정보 */
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ import {
 | 
				
			|||||||
  TerminalStatusInfo,
 | 
					  TerminalStatusInfo,
 | 
				
			||||||
  TerminalStatusNumber
 | 
					  TerminalStatusNumber
 | 
				
			||||||
} from '../types/terminal-status.type';
 | 
					} from '../types/terminal-status.type';
 | 
				
			||||||
 | 
					import { WorkStatusType } from '../types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface StatusBulkInfo extends StatusInfo {
 | 
					export interface StatusBulkInfo extends StatusInfo {
 | 
				
			||||||
  // 사용자SEQ
 | 
					  // 사용자SEQ
 | 
				
			||||||
@ -18,4 +19,7 @@ export interface StatusBulkInfo extends StatusInfo {
 | 
				
			|||||||
  terminalStatus: TerminalStatusInfo;
 | 
					  terminalStatus: TerminalStatusInfo;
 | 
				
			||||||
  /** 단말상태번호(n) */
 | 
					  /** 단말상태번호(n) */
 | 
				
			||||||
  terminalStatusNumber: TerminalStatusNumber;
 | 
					  terminalStatusNumber: TerminalStatusNumber;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 업무상태정보(s) */
 | 
				
			||||||
 | 
					  workstatus: WorkStatusType;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,20 +1,24 @@
 | 
				
			|||||||
import { StatusCode } from '@ucap-webmessenger/core';
 | 
					import { StatusCode } from '@ucap-webmessenger/core';
 | 
				
			||||||
 | 
					import { WorkStatusType } from '../types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface StatusInfo {
 | 
					export interface StatusInfo {
 | 
				
			||||||
  // 사용자SEQ
 | 
					  /** 사용자SEQ */
 | 
				
			||||||
  userSeq: number;
 | 
					  userSeq: number;
 | 
				
			||||||
  // 상태코드(PC)
 | 
					  /** 상태코드(PC) */
 | 
				
			||||||
  pcStatus: StatusCode;
 | 
					  pcStatus: StatusCode;
 | 
				
			||||||
  // 상태코드(통화)
 | 
					  /** 상태코드(통화) */
 | 
				
			||||||
  phoneStatus: StatusCode;
 | 
					  phoneStatus: StatusCode;
 | 
				
			||||||
  // 상태코드(모바일)
 | 
					  /** 상태코드(모바일) */
 | 
				
			||||||
  mobileStatus: StatusCode;
 | 
					  mobileStatus: StatusCode;
 | 
				
			||||||
  // 상태코드(PC화상)
 | 
					  /** 상태코드(PC화상) */
 | 
				
			||||||
  conferenceStatus: StatusCode;
 | 
					  conferenceStatus: StatusCode;
 | 
				
			||||||
  // 상태메시지
 | 
					  /** 상태메시지 */
 | 
				
			||||||
  statusMessage: string;
 | 
					  statusMessage: string;
 | 
				
			||||||
  // 상태코드(Mobile화상)
 | 
					  /** 상태코드(Mobile화상) */
 | 
				
			||||||
  mobileConferenceStatus: StatusCode;
 | 
					  mobileConferenceStatus: StatusCode;
 | 
				
			||||||
  // 상태코드(iMessenger)
 | 
					  /** 상태코드(iMessenger) */
 | 
				
			||||||
  imessengerStatus: StatusCode;
 | 
					  imessengerStatus: StatusCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 업무상태 */
 | 
				
			||||||
 | 
					  workstatus?: WorkStatusType;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ import {
 | 
				
			|||||||
} from '../types/terminal-status.type';
 | 
					} from '../types/terminal-status.type';
 | 
				
			||||||
import { StatusInfo } from '../models/status-info';
 | 
					import { StatusInfo } from '../models/status-info';
 | 
				
			||||||
import { StatusBulkInfo } from '../models/status-bulk-info';
 | 
					import { StatusBulkInfo } from '../models/status-bulk-info';
 | 
				
			||||||
 | 
					import { WorkStatusType } from '../types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface BulkInfoRequest extends ProtocolRequest {
 | 
					export interface BulkInfoRequest extends ProtocolRequest {
 | 
				
			||||||
  /** DivCD(s) */
 | 
					  /** DivCD(s) */
 | 
				
			||||||
@ -72,7 +73,8 @@ export const decodeBulkInfoData: ProtocolDecoder<BulkInfoData> = (
 | 
				
			|||||||
      mobileConferenceStatus: info[6] as StatusCode,
 | 
					      mobileConferenceStatus: info[6] as StatusCode,
 | 
				
			||||||
      imessengerStatus: info[7] as StatusCode,
 | 
					      imessengerStatus: info[7] as StatusCode,
 | 
				
			||||||
      terminalStatus: info[8] as TerminalStatusInfo,
 | 
					      terminalStatus: info[8] as TerminalStatusInfo,
 | 
				
			||||||
      terminalStatusNumber: Number(info[9]) as TerminalStatusNumber
 | 
					      terminalStatusNumber: Number(info[9]) as TerminalStatusNumber,
 | 
				
			||||||
 | 
					      workstatus: info[10] as WorkStatusType
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  return decodeProtocolMessage(message, {
 | 
					  return decodeProtocolMessage(message, {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ import {
 | 
				
			|||||||
} from '@ucap-webmessenger/protocol';
 | 
					} from '@ucap-webmessenger/protocol';
 | 
				
			||||||
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
 | 
					import { StatusType, StatusCode } from '@ucap-webmessenger/core';
 | 
				
			||||||
import { StatusInfo } from '../models/status-info';
 | 
					import { StatusInfo } from '../models/status-info';
 | 
				
			||||||
 | 
					import { WorkStatusType } from '../types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface StatusRequest extends ProtocolRequest {
 | 
					export interface StatusRequest extends ProtocolRequest {
 | 
				
			||||||
  // 상태타입(s)
 | 
					  // 상태타입(s)
 | 
				
			||||||
@ -74,6 +75,7 @@ export const decodeStatusNotification: ProtocolDecoder<StatusNotification> = (
 | 
				
			|||||||
    conferenceStatus: info[4] as StatusCode,
 | 
					    conferenceStatus: info[4] as StatusCode,
 | 
				
			||||||
    statusMessage: info[5],
 | 
					    statusMessage: info[5],
 | 
				
			||||||
    mobileConferenceStatus: info[6] as StatusCode,
 | 
					    mobileConferenceStatus: info[6] as StatusCode,
 | 
				
			||||||
    imessengerStatus: info[7] as StatusCode
 | 
					    imessengerStatus: info[7] as StatusCode,
 | 
				
			||||||
 | 
					    workstatus: info[8] as WorkStatusType
 | 
				
			||||||
  } as StatusNotification);
 | 
					  } as StatusNotification);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					export enum WorkStatusType {
 | 
				
			||||||
 | 
					  /** 근무중 */
 | 
				
			||||||
 | 
					  Work = 'W01',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 휴가 */
 | 
				
			||||||
 | 
					  /** 오전 */
 | 
				
			||||||
 | 
					  VacationAM = 'V01',
 | 
				
			||||||
 | 
					  /** 오후 */
 | 
				
			||||||
 | 
					  VacationPM = 'V02',
 | 
				
			||||||
 | 
					  /** 휴가 */
 | 
				
			||||||
 | 
					  VacationAll = 'V03',
 | 
				
			||||||
 | 
					  /** 휴직 */
 | 
				
			||||||
 | 
					  LeaveOfAbsence = 'V04',
 | 
				
			||||||
 | 
					  /** 장기 리프레쉬 */
 | 
				
			||||||
 | 
					  LongtermRefresh = 'V05'
 | 
				
			||||||
 | 
					  // /** 교육 */
 | 
				
			||||||
 | 
					  // /** 오전교육 */
 | 
				
			||||||
 | 
					  // EducationAm = 'E01',
 | 
				
			||||||
 | 
					  // /** 오후교육 */
 | 
				
			||||||
 | 
					  // EducationPm = 'E02',
 | 
				
			||||||
 | 
					  // /** 종일교육 */
 | 
				
			||||||
 | 
					  // EducationAll = 'E03',
 | 
				
			||||||
 | 
					  // /** 장기교육 */
 | 
				
			||||||
 | 
					  // EducationLongterm = 'E04',
 | 
				
			||||||
 | 
					  // /** 휴직 */
 | 
				
			||||||
 | 
					  // /** 일반휴직 */
 | 
				
			||||||
 | 
					  // LTRNormal = 'R01',
 | 
				
			||||||
 | 
					  // /** 육아휴직 */
 | 
				
			||||||
 | 
					  // LTRBaby = 'R02',
 | 
				
			||||||
 | 
					  // /** 기타휴직 */
 | 
				
			||||||
 | 
					  // LTREtc = 'R03',
 | 
				
			||||||
 | 
					  // /** 일반출장 */
 | 
				
			||||||
 | 
					  // /** 출장 */
 | 
				
			||||||
 | 
					  // BusinessTrip = 'T01',
 | 
				
			||||||
 | 
					  // /** 해외출장 */
 | 
				
			||||||
 | 
					  // BusinessTripOverseas = 'T02',
 | 
				
			||||||
 | 
					  // /** 국내출장 */
 | 
				
			||||||
 | 
					  // BusinessTripLocal = 'T03',
 | 
				
			||||||
 | 
					  // /** 장기출장 */
 | 
				
			||||||
 | 
					  // BusinessLongterm = 'T04',
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -120,7 +120,7 @@
 | 
				
			|||||||
            [base]="profileImageRoot"
 | 
					            [base]="profileImageRoot"
 | 
				
			||||||
            [path]="getUserProfile(message.senderSeq)"
 | 
					            [path]="getUserProfile(message.senderSeq)"
 | 
				
			||||||
            [default]="'assets/images/img_nophoto_50.png'"
 | 
					            [default]="'assets/images/img_nophoto_50.png'"
 | 
				
			||||||
            (click)="onClickOpenProfile($event, getUerInfo(message.senderSeq))"
 | 
					            (click)="onClickOpenProfile($event, message.senderSeq)"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
          <!-- <ucap-ui-imaage
 | 
					          <!-- <ucap-ui-imaage
 | 
				
			||||||
            [style]="'width: 50px; height: 50px;'"
 | 
					            [style]="'width: 50px; height: 50px;'"
 | 
				
			||||||
 | 
				
			|||||||
@ -54,7 +54,7 @@ export class MessagesComponent implements OnInit {
 | 
				
			|||||||
  translationSimpleview = false;
 | 
					  translationSimpleview = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  openProfile = new EventEmitter<UserInfo>();
 | 
					  openProfile = new EventEmitter<number>();
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  moreEvent = new EventEmitter<number>();
 | 
					  moreEvent = new EventEmitter<number>();
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
@ -120,18 +120,6 @@ export class MessagesComponent implements OnInit {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    return '';
 | 
					    return '';
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  getUerInfo(seq: number): UserInfo {
 | 
					 | 
				
			||||||
    if (!this.userInfos) {
 | 
					 | 
				
			||||||
      return null;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const userInfo: UserInfo[] = this.userInfos.filter(
 | 
					 | 
				
			||||||
      user => user.seq === seq
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    if (!!userInfo && userInfo.length > 0) {
 | 
					 | 
				
			||||||
      return userInfo[0];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  getEventSearched(seq: number): boolean {
 | 
					  getEventSearched(seq: number): boolean {
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
      !!this.searchedList &&
 | 
					      !!this.searchedList &&
 | 
				
			||||||
@ -213,11 +201,11 @@ export class MessagesComponent implements OnInit {
 | 
				
			|||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(event: MouseEvent, userInfo: UserInfo) {
 | 
					  onClickOpenProfile(event: MouseEvent, userSeq: number) {
 | 
				
			||||||
    event.preventDefault();
 | 
					    event.preventDefault();
 | 
				
			||||||
    event.stopPropagation();
 | 
					    event.stopPropagation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.openProfile.emit(userInfo);
 | 
					    this.openProfile.emit(userSeq);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickMore(event: any) {
 | 
					  onClickMore(event: any) {
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@
 | 
				
			|||||||
  </span>
 | 
					  </span>
 | 
				
			||||||
  <div class="btn-setting">
 | 
					  <div class="btn-setting">
 | 
				
			||||||
    <span class="presence pcOff"></span>
 | 
					    <span class="presence pcOff"></span>
 | 
				
			||||||
 | 
					    <button>
 | 
				
			||||||
      <svg
 | 
					      <svg
 | 
				
			||||||
        xmlns="http://www.w3.org/2000/svg"
 | 
					        xmlns="http://www.w3.org/2000/svg"
 | 
				
			||||||
        width="18"
 | 
					        width="18"
 | 
				
			||||||
@ -23,5 +24,6 @@
 | 
				
			|||||||
      >
 | 
					      >
 | 
				
			||||||
        <path d="M6 9l6 6 6-6" />
 | 
					        <path d="M6 9l6 6 6-6" />
 | 
				
			||||||
      </svg>
 | 
					      </svg>
 | 
				
			||||||
 | 
					    </button>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,6 @@
 | 
				
			|||||||
  flex-flow: row;
 | 
					  flex-flow: row;
 | 
				
			||||||
  width: 60px;
 | 
					  width: 60px;
 | 
				
			||||||
  height: 30px;
 | 
					  height: 30px;
 | 
				
			||||||
  bottom: 10px;
 | 
					 | 
				
			||||||
  color: #ffffff;
 | 
					  color: #ffffff;
 | 
				
			||||||
  font-size: 11px;
 | 
					  font-size: 11px;
 | 
				
			||||||
  justify-items: flex-end;
 | 
					  justify-items: flex-end;
 | 
				
			||||||
@ -28,6 +27,7 @@
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  .btn-setting {
 | 
					  .btn-setting {
 | 
				
			||||||
    position: absolute;
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
    bottom: 0;
 | 
					    bottom: 0;
 | 
				
			||||||
    display: inline-flex;
 | 
					    display: inline-flex;
 | 
				
			||||||
    justify-items: flex-end;
 | 
					    justify-items: flex-end;
 | 
				
			||||||
@ -36,14 +36,23 @@
 | 
				
			|||||||
      display: inline-block;
 | 
					      display: inline-block;
 | 
				
			||||||
      bottom: 0;
 | 
					      bottom: 0;
 | 
				
			||||||
      width: 10px;
 | 
					      width: 10px;
 | 
				
			||||||
      height: 11px;
 | 
					      height: 10px;
 | 
				
			||||||
      border: 1px solid #ffffff;
 | 
					      border: 1px solid #ffffff;
 | 
				
			||||||
      align-self: flex-end;
 | 
					      align-self: flex-end;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    button {
 | 
				
			||||||
 | 
					      cursor: pointer;
 | 
				
			||||||
 | 
					      width: 20px;
 | 
				
			||||||
 | 
					      height: 100%;
 | 
				
			||||||
 | 
					      align-items: center;
 | 
				
			||||||
 | 
					      background: none;
 | 
				
			||||||
 | 
					      border: none;
 | 
				
			||||||
      svg {
 | 
					      svg {
 | 
				
			||||||
 | 
					        stroke: #ffffff;
 | 
				
			||||||
        &.on {
 | 
					        &.on {
 | 
				
			||||||
          transform: rotate(180deg);
 | 
					          transform: rotate(180deg);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,7 @@ import { FormControl } from '@angular/forms';
 | 
				
			|||||||
import { SmsUtils } from '@ucap-webmessenger/daesang';
 | 
					import { SmsUtils } from '@ucap-webmessenger/daesang';
 | 
				
			||||||
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
 | 
					import { SessionStorageService } from '@ucap-webmessenger/web-storage';
 | 
				
			||||||
import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
 | 
					import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
 | 
				
			||||||
 | 
					import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'ucap-profile-profile',
 | 
					  selector: 'ucap-profile-profile',
 | 
				
			||||||
@ -138,20 +139,20 @@ export class ProfileComponent implements OnInit {
 | 
				
			|||||||
    let workstatus = '';
 | 
					    let workstatus = '';
 | 
				
			||||||
    if (!!userInfo && !!userInfo.workstatus) {
 | 
					    if (!!userInfo && !!userInfo.workstatus) {
 | 
				
			||||||
      switch (userInfo.workstatus) {
 | 
					      switch (userInfo.workstatus) {
 | 
				
			||||||
        case 'V01':
 | 
					        case WorkStatusType.VacationAM:
 | 
				
			||||||
          workstatus = '오전휴가';
 | 
					          workstatus = '오전';
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case 'V02':
 | 
					        case WorkStatusType.VacationPM:
 | 
				
			||||||
          workstatus = '오후휴가';
 | 
					          workstatus = '오후';
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case 'V03':
 | 
					        case WorkStatusType.VacationAll:
 | 
				
			||||||
          workstatus = '종일휴가';
 | 
					          workstatus = '휴가';
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case 'V04':
 | 
					        case WorkStatusType.LeaveOfAbsence:
 | 
				
			||||||
          workstatus = '장기휴가';
 | 
					          workstatus = '휴직';
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case 'V05':
 | 
					        case WorkStatusType.LongtermRefresh:
 | 
				
			||||||
          workstatus = '장기 리프레쉬';
 | 
					          workstatus = '장기';
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@
 | 
				
			|||||||
          [base]="profileImageRoot"
 | 
					          [base]="profileImageRoot"
 | 
				
			||||||
          [path]="userInfo.profileImageFile"
 | 
					          [path]="userInfo.profileImageFile"
 | 
				
			||||||
          [default]="'assets/images/img_nophoto_50.png'"
 | 
					          [default]="'assets/images/img_nophoto_50.png'"
 | 
				
			||||||
          (click)="onClickOpenProfile($event, userInfo)"
 | 
					          (click)="onClickOpenProfile($event, userInfo.seq)"
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <span
 | 
					      <span
 | 
				
			||||||
 | 
				
			|||||||
@ -52,9 +52,7 @@ export class UserListItemComponent implements OnInit {
 | 
				
			|||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
 | 
					    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
 | 
				
			||||||
  }>();
 | 
					  }>();
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  openProfile = new EventEmitter<
 | 
					  openProfile = new EventEmitter<number>();
 | 
				
			||||||
    UserInfo | UserInfoSS | UserInfoF | UserInfoDN
 | 
					 | 
				
			||||||
  >();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PresenceType = PresenceType;
 | 
					  PresenceType = PresenceType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -108,13 +106,10 @@ export class UserListItemComponent implements OnInit {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onClickOpenProfile(
 | 
					  onClickOpenProfile(event: MouseEvent, userSeq: number) {
 | 
				
			||||||
    event: MouseEvent,
 | 
					 | 
				
			||||||
    userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN
 | 
					 | 
				
			||||||
  ) {
 | 
					 | 
				
			||||||
    event.preventDefault();
 | 
					    event.preventDefault();
 | 
				
			||||||
    event.stopPropagation();
 | 
					    event.stopPropagation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.openProfile.emit(userInfo);
 | 
					    this.openProfile.emit(userSeq);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user