0522 sync

This commit is contained in:
Park Byung Eun 2020-05-22 18:48:03 +09:00
parent 344a105583
commit 886d545ccb
18 changed files with 1530 additions and 36 deletions

View File

@ -5,21 +5,7 @@
<ng-container *ngIf="isMe; then isMine; else other"></ng-container> <ng-container *ngIf="isMe; then isMine; else other"></ng-container>
<ng-template #isMine> <ng-template #isMine>
<div class="user-profile-info"> <div class="user-profile-info">
<!--[[ 대화상대 프로필-->
<!-- 모바일이 온라인일 경우 + mobile-ing -->
<!--
<div class="user-profile-thumb mobile-ing">
<span class="presence">온라인</span>
<div class="profileImage">
<img
src="https://material.angular.io/assets/img/examples/shiba2.jpg"
style="width: 122px; height: 122px;"
/>
</div>
</div>-->
<!--]]-->
<!--[[ 내프로필-->
<div class="user-profile-thumb"> <div class="user-profile-thumb">
<span class="presence">온라인</span> <span class="presence">온라인</span>
<div class="profileImage"> <div class="profileImage">
@ -34,7 +20,6 @@
</button> </button>
</div> </div>
</div> </div>
<!--]]-->
<div class="userInfo"> <div class="userInfo">
<div class="user-n-g"> <div class="user-n-g">
@ -81,24 +66,10 @@
</button> </button>
</div> </div>
</ng-template> </ng-template>
<!-- + 대회상대 프로필-->
<ng-template #other> <ng-template #other>
<div class="user-profile-info"> <div class="user-profile-info">
<!--[[ 대화상대 프로필-->
<!-- 모바일이 온라인일 경우 + mobile-ing -->
<!--
<div class="user-profile-thumb mobile-ing">
<span class="presence">온라인</span>
<div class="profileImage">
<img
src="https://material.angular.io/assets/img/examples/shiba2.jpg"
style="width: 122px; height: 122px;"
/>
</div>
</div>-->
<!--]]-->
<!--[[ 내프로필-->
<div class="user-profile-thumb"> <div class="user-profile-thumb">
<span class="presence">온라인</span> <span class="presence">온라인</span>
<div class="profileImage"> <div class="profileImage">
@ -108,7 +79,7 @@
/> />
</div> </div>
</div> </div>
<!--]]-->
<div class="userInfo"> <div class="userInfo">
<div class="user-n-g"> <div class="user-n-g">
@ -116,9 +87,7 @@
<div class="grade">{{ userInfo?.grade }}</div> <div class="grade">{{ userInfo?.grade }}</div>
</div> </div>
<div class="deptName">({{ userInfo?.nameEn }})</div> <div class="deptName">({{ userInfo?.nameEn }})</div>
<!-- + 대화상대 프로필 추가 -->
<!-- -->
<div class="nickName"> <div class="nickName">
<div class="nickName-info">닉네임 미설정</div> <div class="nickName-info">닉네임 미설정</div>
<button <button

View File

@ -0,0 +1,24 @@
프로필 메뉴
전체보기
bulkinfo 연동
접속된 동료만 보기
온/오프라인 보기
infoUser$ = createEffect(() =>
this.actions$.pipe(
ofType(infoUser),
map((action) => action.req),
exhaustMap((req) =>
this.infoProtocolService.user(req).pipe(
map((res: UserResponse) => {
return infoUserSuccess({
res
});
}),
catchError((error) => of(infoUserFailure({ error })))
)
)
)
);

View File

@ -0,0 +1,23 @@
groups
SENDER_SEQ: "770074"
SSVC_TYPE: 5
SVC_TYPE: 82
isActive: true
name: "testsssss"
seq: 16
userSeqs: [737239, 737243],
SENDER_SEQ: "770074"
SSVC_TYPE: 5
SVC_TYPE: 82
isActive: true
name: "그룹생성테스트수ㅡ정"
seq: 24
userSeqs: (2) [677713, 737237],
SENDER_SEQ: "770074"
SSVC_TYPE: 5
SVC_TYPE: 82
isActive: true
name: "그룹테스트2"
seq: 23
userSeqs: (3) [701307, 677714, 3627]

View File

@ -0,0 +1,113 @@
677713
737237
*ngIf="
!editablGroup ||
(!!editablGroup && editablGroup.seq !== node.groupDetail.seq)
"
<span
*ngIf="
!editablGroup ||
(!!editablGroup && editablGroup.seq !== node.groupDetail.seq)
"
class="header-buddy"
>
<span>{{ node.groupDetail.name }}</span>
<span>
{{ node.children?.length }}
</span>
</span>
<span
class="header-buddy"
*ngIf="!!editablGroup && editablGroup.seq === node.groupDetail.seq"
(click)="$event.stopPropagation()"
>
<mat-form-field>
<input
matInput
#groupInput
placeholder=""
[value]="node.groupDetail.name"
/>
<button
mat-button
matSuffix
mat-icon-button
aria-label="Clear"
(click)="groupInput.value = ''"
>
<mat-icon>close</mat-icon>
</button>
<button
mat-button
mat-icon-button
aria-label="Done"
(click)="onEditGroupName(groupInput.value, node.groupDetail)"
>
<mat-icon>done</mat-icon>
</button>
</mat-form-field>
</span>
<!-- 13:10분 그룹이름 수정 코드 -->
<span
*ngIf="
!editablGroup ||
(!!editablGroup && editablGroup.seq !== node.groupDetail.seq)
"
class="header-buddy"
>
<span>{{ node.groupDetail.name }}</span>
<span> ({{ node.children?.length }}) </span>
</span>
<span
class="header-buddy"
*ngIf="!!editablGroup && editablGroup.seq === node.groupDetail.seq"
(click)="$event.stopPropagation()"
>
<ucap-inline-edit-input
[initialMode]="true"
(apply)="
$event.stopPropagation();
onApplyEditGroupName(editGroupInput.value, node.groupDetail)
"
(edit)="$event.stopPropagation()"
(cancel)="
$event.stopPropagation();
editGroupInput.value = node.groupDetail.name;
editablGroup = null
"
class="form-eidt"
>
<span ucapInlineEditInput="view">{{ node.groupDetail.name }}</span>
<span ucapInlineEditInput="edit"
><input
matInput
#editGroupInput
type="text"
[value]="node.groupDetail.name"
(click)="$event.stopPropagation()"
/></span>
</ucap-inline-edit-input>
</span>
<!-- 13:10분 그룹이름 수정 코드 -->
150 + 60
150 + 120
150 + 180
241 - 150 = 91 - 30 = 61
304 - 150 = 154 - 30 = 124
366 - 150 = 216 - 30 = 186
0:
srcTop = 210
dstTop = 241
1:
srcTop = 270
dstTop = 304
2:
srcTop = 330
dstTop = 366

View File

@ -0,0 +1,45 @@
nickname action added : complete
nickname action dispatch test: complete
buddy nickname change confirm: complete
edit inline dialog component
- positionX, positionY, title,
- text, confirm
-
buddy manage dialog
profile list item
- data
- check box
- select list : userInfo
- action
- all checkbox
- remove dispatch
- copy dispatch
- 새그룹명 입력
- 이동할 그룹
- 선택된 유저 리스트
- move dispatch
- 새그룹명 입력
- 이동할 그룹
- 선택된 유저 리스트
- select user dialog
- 기존 유저 선택
ng-container
idx stepper move
profile list item mouseover button event bug fix
1. group buddy remove
const userSeq = 737237 as any;
const idx = buddies.findIndex((b) => b.seq === userSeq);
const userSeq = '737237' as any;
const idx = buddies.findIndex((b) => b.seq === Number(userSeq));

View File

@ -0,0 +1,470 @@
<div fxFlexFill class="profile-container">
<!-- <ucap-organization-profile-01
[authRes]="authRes"
[userInfo]="userInfo"
[profileImageRoot]="versionInfo2Res?.profileRoot"
[isMe]="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq)
"
>
</ucap-organization-profile-01> -->
<div class="ucap-organization-profile-01-container">
<!--Profile -->
<div class="profile-card-box">
<ng-container
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq);
then mineProfile;
else otherProfile
"
></ng-container>
<ng-template #otherProfile>
<div class="user-profile-info">
<div class="user-profile-thumb">
<span
class="presence"
[ngClass]="getPresence(PresenceType.PC)"
[matTooltip]="getPresenceMsg()"
matTooltipPosition="after"
></span>
<div class="profileImage">
<img
src="../../../assets/images/ico/img_nophoto.svg"
style="width: 122px; height: 122px;"
/>
</div>
</div>
<div class="userInfo">
<div class="user-n-g">
<div class="name">{{ userInfo?.name }}</div>
<div class="grade">{{ userInfo?.grade }}</div>
</div>
<div class="deptName">({{ userInfo?.nameEn }})</div>
<div class="nickName">
<div class="nickName-info">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#nicknameInput
matInput
placeholder="닉네임 미설정"
value=""
/>
</mat-form-field>
</div>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onProfileIntro(nicknameInput.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
<div class="address-txt">
{{ userInfo?.intro }}
</div>
</div>
<div class="btn-profile-add">
<button
mat-icon-button
class="btn-star-add"
[ngClass]="[isFavorite ? 'on' : '']"
aria-label="Example icon-button with a heart icon"
*ngIf="!isFavorite"
(click)="onToggleFavorit()"
>
<img
src="../../../assets/images/ico/btn_favorite_w24_s.svg"
alt=""
/>
</button>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
*ngIf="!isBuddy"
>
<img
src="../../../assets/images/ico/btn_group_add_w24.svg"
alt=""
/>
</button>
</div>
</div>
<div class="btn-partner-set">
<button mat-icon-button aria-label="chat">
<img
src="../../../assets/images/ico/btn_lise_chat_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="message">
<img
src="../../../assets/images/ico/btn_list_message_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="mobile">
<img
src="../../../assets/images/ico/btn_list_mobile_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="call">
<img
src="../../../assets/images/ico/btn_list_call_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="vc">
<img src="../../../assets/images/ico/btn_list_vc-a24.<div fxFlexFill class="profile-container">
<div class="ucap-organization-profile-01-container">
<!--Profile -->
<div class="profile-card-box">
<div class="user-profile-info">
<!--[[ 대화상대 프로필-->
<!-- 모바일이 온라인일 경우 + mobile-ing -->
<div class="user-profile-thumb">
<span
class="presence"
[ngClass]="getPresence(PresenceType.PC)"
[matTooltip]="getPresenceMsg()"
matTooltipPosition="after"
></span>
<div class="profileImage" (click)="onProfileImageView()">
<img
src="../../../assets/images/ico/img_nophoto.svg"
style="width: 122px; height: 122px;"
/>
</div>
<!--[[ 내프로필-->
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq)
"
class="btn-profile-ctrl"
>
<button
mat-mini-fab
color="primary"
class="mat-mini36-fab"
(click)="profileImageFileInput.click()"
>
<mat-icon class="material-icons-outlined">camera_alt</mat-icon>
</button>
<input
type="file"
#profileImageFileInput
style="display: none;"
(change)="onChangeFileInput()"
/>
</div>
<!--]]-->
</div>
<!--]]-->
<div class="userInfo">
<div class="user-n-g">
<div class="name">{{ userInfo?.name }}</div>
<div class="grade">{{ userInfo?.grade }}</div>
</div>
<div class="deptName">({{ userInfo?.nameEn }})</div>
<ng-container
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
>
<!-- + 대화상대 프로필 추가 -->
<div class="nickName">
<div class="nickName-info">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#nicknameInput
matInput
placeholder="닉네임 미설정"
value=""
/>
</mat-form-field>
</div>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onChangeNickname(nicknameInput.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
<!--]]-->
</ng-container>
<ng-container
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq);
then mineProfileIntro;
else otherProfileIntro
"
>
</ng-container>
<ng-template #otherProfileIntro>
<div class="address-txt">
{{ userInfo?.intro }}
</div>
</ng-template>
<ng-template #mineProfileIntro>
<div class="my-input inputtype">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#myProfileIntro
matInput
placeholder=""
value="{{ userInfo?.intro }}"
/>
</mat-form-field>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onChangeIntro(myProfileIntro.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
</ng-template>
</div>
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
class="btn-profile-add"
>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
*ngIf="isBuddy"
>
<img
src="../../../assets/images/ico/btn_favorite_w24_s.svg"
alt=""
/>
</button>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
>
<img
src="../../../assets/images/ico/btn_group_add_w24.svg"
alt=""
/>
</button>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
>
<img
src="../../../assets/images/ico/btn_group_add_w24.svg"
alt=""
/>
</button>
</div>
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
class="btn-partner-set"
>
<button mat-icon-button aria-label="chat">
<img
src="../../../assets/images/ico/btn_lise_chat_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="message">
<img
src="../../../assets/images/ico/btn_list_message_a24.svg"
alt=""
/>
</button>
<button
mat-icon-button
aria-label="mobile"
(click)="onSendCall('MOBILE')"
>
<img
src="../../../assets/images/ico/btn_list_mobile_a24.svg"
alt=""
/>
</button>
<button
mat-icon-button
aria-label="call"
(click)="onSendCall('LINE')"
>
<img
src="../../../assets/images/ico/btn_list_call_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="vc">
<img src="../../../assets/images/ico/btn_list_vc-a24.svg" alt="" />
</button>
</div>
</div>
<div class="user-profile-info-list">
<ul>
<li>
<span>{{ 'profile.labels.company' | ucapI18n }}</span>
{{ userInfo?.companyName }}
</li>
<li>
<span>{{ 'profile.labels.department' | ucapI18n }}</span>
{{ userInfo?.deptName }}
</li>
<li>
<span>{{ 'profile.labels.email' | ucapI18n }}</span>
{{ userInfo?.email }}
</li>
<li>
<span>{{ 'profile.labels.linePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.lineNumber }}
</li>
<li>
<span>{{ 'profile.labels.mobilePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.hpNumber }}
</li>
</ul>
</div>
</div>
<!-- //Profile-->
</div>
</div>
svg" alt="" />
</button>
</div>
</ng-template>
<ng-template #mineProfile>
<div class="user-profile-info">
<div class="user-profile-thumb">
<span
class="presence"
[ngClass]="getPresence(PresenceType.PC)"
[matTooltip]="getPresenceMsg()"
matTooltipPosition="after"
>온라인</span
>
<div class="profileImage">
<img
src="../../../assets/images/ico/img_nophoto.svg"
style="width: 122px; height: 122px;"
/>
</div>
<div class="btn-profile-ctrl">
<button
mat-mini-fab
color="primary"
class="mat-mini36-fab"
(click)="profileImageFileInput.click()"
>
<mat-icon class="material-icons-outlined">camera_alt</mat-icon>
</button>
<input
type="file"
#profileImageFileInput
style="display: none;"
(change)="onChangeFileInput()"
/>
</div>
</div>
<div class="userInfo">
<div class="user-n-g">
<div class="name">{{ userInfo?.name }}</div>
<div class="grade">{{ userInfo?.grade }}</div>
</div>
<div class="deptName">({{ userInfo?.nameEn }})</div>
</div>
</div>
<div class="my-input inputtype">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#myProfileIntro
matInput
placeholder=""
value="마곡 사이언스 파크 E14동 9층"
/>
</mat-form-field>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onProfileIntro(myProfileIntro.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
</ng-template>
<div class="user-profile-info-list">
<ul>
<li>
<span>{{ 'profile.labels.company' | ucapI18n }}</span>
{{ userInfo?.companyName }}
</li>
<li>
<span>{{ 'profile.labels.department' | ucapI18n }}</span>
{{ userInfo?.deptName }}
</li>
<li>
<span>{{ 'profile.labels.email' | ucapI18n }}</span>
{{ userInfo?.email }}
</li>
<li>
<span>{{ 'profile.labels.linePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.lineNumber }}
</li>
<li>
<span>{{ 'profile.labels.mobilePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.hpNumber }}
</li>
</ul>
</div>
</div>
<!-- //Profile-->
</div>
</div>

View File

@ -0,0 +1,218 @@
<div class="ucap-organization-profile-01-container">
<!--Profile -->
<div class="profile-card-box">
<div class="user-profile-info">
<div class="user-profile-thumb">
<span
class="presence"
[ngClass]="getPresence(PresenceType.PC)"
[matTooltip]="getPresenceMsg()"
matTooltipPosition="after"
></span>
<div class="profileImage">
<img
src="../../../assets/images/ico/img_nophoto.svg"
style="width: 122px; height: 122px;"
/>
</div>
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq)
"
class="btn-profile-ctrl"
>
<button
mat-mini-fab
color="primary"
class="mat-mini36-fab"
(click)="profileImageFileInput.click()"
>
<mat-icon class="material-icons-outlined">camera_alt</mat-icon>
</button>
<input
type="file"
#profileImageFileInput
style="display: none;"
(change)="onChangeFileInput()"
/>
</div>
</div>
<div class="userInfo">
<div class="user-n-g">
<div class="name">{{ userInfo?.name }}</div>
<div class="grade">{{ userInfo?.grade }}</div>
</div>
<div class="deptName">({{ userInfo?.nameEn }})</div>
<ng-container
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
>
<div class="nickName">
<div class="nickName-info">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#nicknameInput
matInput
placeholder="닉네임 미설정"
value=""
/>
</mat-form-field>
</div>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onProfileIntro(nicknameInput.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
</ng-container>
<ng-container
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq);
then mineProfileIntro;
else otherProfileIntro
"
>
</ng-container>
<ng-template #otherProfileIntro>
<div class="address-txt">
{{ userInfo?.intro }}
</div>
</ng-template>
<ng-template #mineProfileIntro>
<div class="my-input inputtype">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#myProfileIntro
matInput
placeholder=""
value="{{ userInfo?.intro }}"
/>
</mat-form-field>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onProfileIntro(myProfileIntro.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
</ng-template>
</div>
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
class="btn-profile-add"
>
<button
mat-icon-button
class="btn-star-add"
[ngClass]="[isFavorite ? 'on' : '']"
aria-label="Example icon-button with a heart icon"
*ngIf="!isFavorite"
(click)="onToggleFavorit()"
>
<img
src="../../../assets/images/ico/btn_favorite_w24_s.svg"
alt=""
/>
</button>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
*ngIf="!isBuddy"
>
<img
src="../../../assets/images/ico/btn_group_add_w24.svg"
alt=""
/>
</button>
</div>
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
class="btn-partner-set"
>
<button mat-icon-button aria-label="chat">
<img
src="../../../assets/images/ico/btn_lise_chat_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="message">
<img
src="../../../assets/images/ico/btn_list_message_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="mobile">
<img
src="../../../assets/images/ico/btn_list_mobile_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="call">
<img
src="../../../assets/images/ico/btn_list_call_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="vc">
<img src="../../../assets/images/ico/btn_list_vc-a24.svg" alt="" />
</button>
</div>
</div>
<div class="user-profile-info-list">
<ul>
<li>
<span>{{ 'profile.labels.company' | ucapI18n }}</span>
{{ userInfo?.companyName }}
</li>
<li>
<span>{{ 'profile.labels.department' | ucapI18n }}</span>
{{ userInfo?.deptName }}
</li>
<li>
<span>{{ 'profile.labels.email' | ucapI18n }}</span>
{{ userInfo?.email }}
</li>
<li>
<span>{{ 'profile.labels.linePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.lineNumber }}
</li>
<li>
<span>{{ 'profile.labels.mobilePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.hpNumber }}
</li>
</ul>
</div>
</div>
<!-- //Profile-->
</div>
</div>

View File

@ -0,0 +1,242 @@
<div fxFlexFill class="profile-container">
<div class="ucap-organization-profile-01-container">
<!--Profile -->
<div class="profile-card-box">
<div class="user-profile-info">
<!--[[ 대화상대 프로필-->
<!-- 모바일이 온라인일 경우 + mobile-ing -->
<div class="user-profile-thumb">
<span
class="presence"
[ngClass]="getPresence(PresenceType.PC)"
[matTooltip]="getPresenceMsg()"
matTooltipPosition="after"
></span>
<div class="profileImage" (click)="onProfileImageView()">
<img
src="../../../assets/images/ico/img_nophoto.svg"
style="width: 122px; height: 122px;"
/>
</div>
<!--[[ 내프로필-->
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq)
"
class="btn-profile-ctrl"
>
<button
mat-mini-fab
color="primary"
class="mat-mini36-fab"
(click)="profileImageFileInput.click()"
>
<mat-icon class="material-icons-outlined">camera_alt</mat-icon>
</button>
<input
type="file"
#profileImageFileInput
style="display: none;"
(change)="onChangeFileInput()"
/>
</div>
<!--]]-->
</div>
<!--]]-->
<div class="userInfo">
<div class="user-n-g">
<div class="name">{{ userInfo?.name }}</div>
<div class="grade">{{ userInfo?.grade }}</div>
</div>
<div class="deptName">({{ userInfo?.nameEn }})</div>
<ng-container
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
>
<!-- + 대화상대 프로필 추가 -->
<div class="nickName">
<div class="nickName-info">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#nicknameInput
matInput
placeholder="닉네임 미설정"
value=""
/>
</mat-form-field>
</div>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onChangeNickname(nicknameInput.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
<!--]]-->
</ng-container>
<ng-container
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq === String(loginRes.userInfo?.seq);
then mineProfileIntro;
else otherProfileIntro
"
>
</ng-container>
<ng-template #otherProfileIntro>
<div class="address-txt">
{{ userInfo?.intro }}
</div>
</ng-template>
<ng-template #mineProfileIntro>
<div class="my-input inputtype">
<mat-form-field
class="example-full-width my-in-input"
appearance="none"
>
<mat-label></mat-label>
<input
#myProfileIntro
matInput
placeholder=""
value="{{ userInfo?.intro }}"
/>
</mat-form-field>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
(click)="onChangeIntro(myProfileIntro.value)"
>
<mat-icon>create</mat-icon>
</button>
</div>
</ng-template>
</div>
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
class="btn-profile-add"
>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
*ngIf="isBuddy"
>
<img
src="../../../assets/images/ico/btn_favorite_w24_s.svg"
alt=""
/>
</button>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
>
<img
src="../../../assets/images/ico/btn_group_add_w24.svg"
alt=""
/>
</button>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
>
<img
src="../../../assets/images/ico/btn_group_add_w24.svg"
alt=""
/>
</button>
</div>
<div
*ngIf="
!!userInfo &&
!!loginRes &&
userInfo.seq !== String(loginRes.userInfo?.seq)
"
class="btn-partner-set"
>
<button mat-icon-button aria-label="chat">
<img
src="../../../assets/images/ico/btn_lise_chat_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="message">
<img
src="../../../assets/images/ico/btn_list_message_a24.svg"
alt=""
/>
</button>
<button
mat-icon-button
aria-label="mobile"
(click)="onSendCall('MOBILE')"
>
<img
src="../../../assets/images/ico/btn_list_mobile_a24.svg"
alt=""
/>
</button>
<button
mat-icon-button
aria-label="call"
(click)="onSendCall('LINE')"
>
<img
src="../../../assets/images/ico/btn_list_call_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="vc">
<img src="../../../assets/images/ico/btn_list_vc-a24.svg" alt="" />
</button>
</div>
</div>
<div class="user-profile-info-list">
<ul>
<li>
<span>{{ 'profile.labels.company' | ucapI18n }}</span>
{{ userInfo?.companyName }}
</li>
<li>
<span>{{ 'profile.labels.department' | ucapI18n }}</span>
{{ userInfo?.deptName }}
</li>
<li>
<span>{{ 'profile.labels.email' | ucapI18n }}</span>
{{ userInfo?.email }}
</li>
<li>
<span>{{ 'profile.labels.linePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.lineNumber }}
</li>
<li>
<span>{{ 'profile.labels.mobilePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.hpNumber }}
</li>
</ul>
</div>
</div>
<!-- //Profile-->
</div>
</div>

View File

@ -0,0 +1,153 @@
<div class="ucap-organization-profile-01-container">
<!--Profile -->
<div class="profile-card-box">
<div class="user-profile-info">
<ng-container
*ngIf="isMe; then mineProfile; else otherProfile"
></ng-container>
<ng-template #otherProfile>
<!--[[ 대화상대 프로필-->
<!-- 모바일이 온라인일 경우 + mobile-ing -->
<div class="user-profile-thumb mobile-ing">
<span class="presence">온라인</span>
<div class="profileImage">
<img
src="https://material.angular.io/assets/img/examples/shiba2.jpg"
style="width: 122px; height: 122px;"
/>
</div>
</div>
<!--]]-->
</ng-template>
<ng-template #mineProfile>
<!--[[ 내프로필-->
<div class="user-profile-thumb">
<span class="presence">온라인</span>
<div class="profileImage">
<img
src="../../../assets/images/ico/img_nophoto.svg"
style="width: 122px; height: 122px;"
/>
</div>
<div class="btn-profile-ctrl">
<button mat-mini-fab color="primary" class="mat-mini36-fab">
<mat-icon class="material-icons-outlined">camera_alt</mat-icon>
</button>
</div>
</div>
<!--]]-->
</ng-template>
<div class="userInfo">
<div class="user-n-g">
<div class="name">{{ userInfo?.name }}</div>
<div class="grade">{{ userInfo?.grade }}</div>
</div>
<div class="deptName">({{ userInfo?.nameEn }})</div>
<!-- + 대화상대 프로필 추가 -->
<!--
<div class="nickName">
<div class="nickName-info">닉네임 미설정</div>
<button
mat-icon-button
aria-label="icon create"
class="color-white"
>
<mat-icon>create</mat-icon>
</button>
</div>
<div class="address-txt">
마곡 사이언스 파크 E14동 9층
</div>
-->
</div>
<div class="btn-profile-add">
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
>
<img src="../../../assets/images/ico/btn_favorite_w24_s.svg" alt="" />
</button>
<button
mat-icon-button
class="btn-star-add"
aria-label="Example icon-button with a heart icon"
>
<img src="../../../assets/images/ico/btn_group_add_w24.svg" alt="" />
</button>
</div>
</div>
<!-- + 대회상대 프로필-->
<!--
<div class="btn-partner-set">
<button mat-icon-button aria-label="chat">
<img
src="../../../assets/images/ico/btn_lise_chat_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="message">
<img
src="../../../assets/images/ico/btn_list_message_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="mobile">
<img
src="../../../assets/images/ico/btn_list_mobile_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="call">
<img
src="../../../assets/images/ico/btn_list_call_a24.svg"
alt=""
/>
</button>
<button mat-icon-button aria-label="vc">
<img
src="../../../assets/images/ico/btn_list_vc-a24.svg"
alt=""
/>
</button>
</div>
-->
<!-- + 내프로필 -->
<div class="my-input inputtype">
<mat-form-field class="example-full-width my-in-input" appearance="none">
<mat-label></mat-label>
<input matInput placeholder="" value="마곡 사이언스 파크 E14동 9층" />
</mat-form-field>
<button mat-icon-button aria-label="icon create" class="color-white">
<mat-icon>create</mat-icon>
</button>
</div>
<div class="user-profile-info-list">
<ul>
<li>
<span>{{ 'profile.labels.company' | ucapI18n }}</span>
{{ userInfo?.companyName }}
</li>
<li>
<span>{{ 'profile.labels.department' | ucapI18n }}</span>
{{ userInfo?.deptName }}
</li>
<li>
<span>{{ 'profile.labels.email' | ucapI18n }}</span>
{{ userInfo?.email }}
</li>
<li>
<span>{{ 'profile.labels.linePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.lineNumber }}
</li>
<li>
<span>{{ 'profile.labels.mobilePhoneNumber' | ucapI18n }}</span>
{{ userInfo?.hpNumber }}
</li>
</ul>
</div>
</div>
<!-- //Profile-->
</div>

Binary file not shown.

View File

@ -0,0 +1,27 @@
<div class="dialog-container">
<!-- <app-layouts-default-dialog [disableClose]="true" (closed)="onClosed($event)">
<div class="dialog-body" appLayoutsDefaultDialog="body">
</div>
</app-layouts-default-dialog> -->
<ucap-inline-edit-input
[initialMode]="true"
(apply)="
$event.stopPropagation(); onApplyEditGroupName(editGroupInput.value)
"
(edit)="$event.stopPropagation()"
(cancel)="onClosed($event)"
class="form-eidt"
>
<span ucapInlineEditInput="view">{{ data.group.name }}</span>
<span ucapInlineEditInput="edit"
><input
matInput
#editGroupInput
type="text"
[value]="data.group.name"
(click)="$event.stopPropagation()"
/></span>
</ucap-inline-edit-input>
</div>

View File

@ -0,0 +1,14 @@
.dialog-container {
width: 100%;
height: 100%;
overflow: hidden;
.ng-star-inserted {
float: left;
}
mat-dialog-container {
padding: 0px !important;
background: transparent !important;
}
.ucap-edit-group-name-dialog {
}
}

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { EditNameDialogComponent } from './edit-name.dialog.component';
describe('ucap::ui-organization::CreateChatDialogComponent', () => {
let component: EditNameDialogComponent;
let fixture: ComponentFixture<EditNameDialogComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [EditNameDialogComponent]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EditNameDialogComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,130 @@
import { Subject, of } from 'rxjs';
import {
Component,
OnInit,
OnDestroy,
ChangeDetectionStrategy,
Inject
} from '@angular/core';
import { Store } from '@ngrx/store';
import {
MatDialogRef,
MAT_DIALOG_DATA,
MatDialog,
MatDialogConfig
} from '@angular/material/dialog';
import { UserInfo, GroupDetailData } from '@ucap/protocol-sync';
import { UserInfoSS, UserInfoF, UserInfoDN } from '@ucap/protocol-query';
import { UserInfo as RoomUserInfo } from '@ucap/protocol-room';
import { I18nService } from '@ucap/ng-i18n';
import {
AlertDialogComponent,
AlertDialogData,
AlertDialogResult
} from '@ucap/ng-ui';
import { take, map, catchError } from 'rxjs/operators';
import { GroupActions } from '@ucap/ng-store-group';
export type UserInfoTypes =
| UserInfo
| UserInfoSS
| UserInfoF
| UserInfoDN
| RoomUserInfo;
export interface EditNameDialogData {
title: string;
group: GroupDetailData;
left: number;
top: number;
idx: number;
}
export interface EditNameDialogResult {}
@Component({
selector: 'app-dialog-group-edit-name',
templateUrl: './edit-name.dialog.component.html',
styleUrls: ['./edit-name.dialog.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class EditNameDialogComponent implements OnInit, OnDestroy {
constructor(
public dialogRef: MatDialogRef<EditNameDialogData, EditNameDialogResult>,
@Inject(MAT_DIALOG_DATA) public data: EditNameDialogData,
private store: Store<any>,
private i18nService: I18nService,
public dialog: MatDialog
) {}
private ngOnDestroySubject: Subject<void>;
ngOnInit(): void {
const matDialogConfig: MatDialogConfig = new MatDialogConfig();
matDialogConfig.position = {
left: `${this.data.left}px`,
top: `${this.data.top + 50}px`
};
this.dialogRef.updatePosition(matDialogConfig.position);
this.ngOnDestroySubject = new Subject();
}
ngOnDestroy(): void {
if (!!this.ngOnDestroySubject) {
this.ngOnDestroySubject.complete();
}
}
onClosed(event: MouseEvent): void {
this.dialogRef.close();
}
onApplyEditGroupName(groupName: string) {
if (groupName.localeCompare(this.data.group.name) === 0) {
this.dialogRef.close();
return;
}
if (groupName.localeCompare('') === 0) {
const dialogRef = this.dialog.open<
AlertDialogComponent,
AlertDialogData,
AlertDialogResult
>(AlertDialogComponent, {
data: {
title: this.i18nService.t('moreMenu.error.label'),
html: this.i18nService.t('moreMenu.error.requireName')
}
});
dialogRef
.afterClosed()
.pipe(
take(1),
map((result) => {}),
catchError((err) => {
return of(err);
})
)
.subscribe();
return;
}
this.store.dispatch(
GroupActions.update({
req: {
groupSeq: this.data.group.seq,
groupName,
userSeqs: this.data.group.userSeqs
}
})
);
this.dialogRef.close();
}
onCompleteConfirm() {}
}

View File

@ -0,0 +1,42 @@
private async inlineDialog(curValue: string, left: number, top: number): Promise<string> {
const target = this.elementRef.nativeElement.querySelector(
'.mat-tree-node'
);
const rect = target.getBoundingClientRect();
const clickEventY = this.groupMenuEvent.clientY;
const tartgetY = Math.floor((clickEventY - 150) * 0.1) * 10;
const dialogRef = this.dialog.open(EditInlineInputDialogComponent, {
width: rect.width,
height: rect.height,
panelClass: 'ucap-edit-group-name-dialog',
data: {
curValue,
left,
top
}
});
dialogRef
.afterClosed()
.pipe(
take(1),
map((result) => {
if (
!!result &&
result.choice &&
result.curValue.localeCompare(curValue) !== 0
) {
return result.curValue;
}
return '';
}),
catchError((err) => {
return of(err);
})
)
.subscribe();
}