Merge branch 'master' of http://10.81.13.221:6990/Web/next-ucap-messenger
This commit is contained in:
commit
44def4db5f
|
@ -33,6 +33,7 @@
|
||||||
width: 70px;
|
width: 70px;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .organization-side {
|
::ng-deep .organization-side {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
height: 280px;
|
height: 280px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
|
border-bottom: none;
|
||||||
.mat-tab-label {
|
.mat-tab-label {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
|
@ -92,11 +94,15 @@
|
||||||
.mat-tab-label-content {
|
.mat-tab-label-content {
|
||||||
.icon-item {
|
.icon-item {
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
/*svg {
|
|
||||||
stroke: #ef4c73;
|
|
||||||
fill: #ef4c73;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::ng-deep .ps {
|
||||||
|
.ps-content {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-search {
|
.list-search {
|
||||||
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
|
|
|
@ -16,13 +16,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::ng-deep .ps {
|
|
||||||
.ps-content {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-result {
|
.search-result {
|
||||||
height: calc(100% - 130px);
|
height: calc(100% - 130px);
|
||||||
|
@ -52,7 +45,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-item-frame{
|
.list-item-frame {
|
||||||
width:100%;
|
width: 100%;
|
||||||
height:100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -886,13 +886,17 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!!result && !!result.choice && result.choice) {
|
if (!!result && !!result.choice && result.choice) {
|
||||||
const userSeqs: number[] = [];
|
const userSeqs: number[] = this.userInfoList.map(
|
||||||
|
userInfo => userInfo.seq
|
||||||
|
);
|
||||||
if (
|
if (
|
||||||
!!result.selectedUserList &&
|
!!result.selectedUserList &&
|
||||||
result.selectedUserList.length > 0
|
result.selectedUserList.length > 0
|
||||||
) {
|
) {
|
||||||
result.selectedUserList.map(user => {
|
result.selectedUserList.forEach(user => {
|
||||||
userSeqs.push(user.seq);
|
if (userSeqs.indexOf(user.seq) < 0) {
|
||||||
|
userSeqs.push(user.seq);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,4 +9,11 @@
|
||||||
span{
|
span{
|
||||||
margin-left:auto;
|
margin-left:auto;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
::ng-deep .mat-tab-labels {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
border-bottom: 2px solid #dddddd;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
justify-content: space-around;
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
<div fxLayout="column" class="album-box">
|
<div fxLayout="column" class="rightDrawer-albumbox">
|
||||||
<div>
|
<div>
|
||||||
<mat-tab-group (selectedIndexChange)="onSelectedIndexChange($event)">
|
<mat-tab-group (selectedIndexChange)="onSelectedIndexChange($event)">
|
||||||
<mat-tab label="Image"></mat-tab>
|
<mat-tab label="Image"></mat-tab>
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
<div class="search-list">
|
<div class="search-list">
|
||||||
<perfect-scrollbar>
|
<perfect-scrollbar class="album-scrollbar">
|
||||||
<div
|
<div
|
||||||
*ngFor="let fileInfo of filteredList"
|
*ngFor="let fileInfo of filteredList"
|
||||||
class="img-item"
|
class="img-item"
|
||||||
|
|
|
@ -13,25 +13,23 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.album-box {
|
::ng-deep .rightDrawer-albumbox {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
.mat-tab-labels {
|
||||||
.search-list {
|
.mat-tab-label {
|
||||||
overflow: auto;
|
width: 50%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .mat-tab-label{
|
|
||||||
width:50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.select-filebox{
|
.select-filebox{
|
||||||
display:flex;
|
display:flex;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
margin:10px;
|
margin:10px;
|
||||||
padding:10px;
|
padding:10px;
|
||||||
border:1px solid #cccccc;
|
border:1px solid #cccccc;
|
||||||
|
border-radius: 4px;
|
||||||
.select-file{
|
.select-file{
|
||||||
color: #212121;
|
color: #212121;
|
||||||
border-bottom: 1px dotted #dddddd;
|
border-bottom: 1px dotted #dddddd;
|
||||||
|
@ -66,6 +64,7 @@
|
||||||
height: calc(100% - 450px);
|
height: calc(100% - 450px);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
.img-item {
|
.img-item {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
margin-bottom:10px;
|
margin-bottom:10px;
|
||||||
|
@ -99,6 +98,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::ng-deep .album-scrollbar{
|
||||||
|
.ps{
|
||||||
|
.ps-content{
|
||||||
|
display:flex;
|
||||||
|
flex-flow: wrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.preview-image,
|
.preview-image,
|
||||||
.preview-video{
|
.preview-video{
|
||||||
max-height: 140px;
|
max-height: 140px;
|
||||||
|
|
|
@ -123,56 +123,58 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
<div fxFlex="0 0 auto" class="table-box">
|
<div fxFlex="0 0 auto" class="table-box">
|
||||||
<table mat-table [dataSource]="dataSource" matSort>
|
<perfect-scrollbar class="album-scrollbar">
|
||||||
<ng-container matColumnDef="check">
|
<table mat-table [dataSource]="dataSource" matSort>
|
||||||
<th mat-header-cell *matHeaderCellDef>
|
<ng-container matColumnDef="check">
|
||||||
<mat-checkbox
|
<th mat-header-cell *matHeaderCellDef>
|
||||||
#checkboxAll
|
<mat-checkbox
|
||||||
[checked]="getCheckAllUser()"
|
#checkboxAll
|
||||||
(change)="onCheckAllkUser(checkboxAll.checked)"
|
[checked]="getCheckAllUser()"
|
||||||
(click)="$event.stopPropagation()"
|
(change)="onCheckAllkUser(checkboxAll.checked)"
|
||||||
>
|
(click)="$event.stopPropagation()"
|
||||||
</mat-checkbox>
|
>
|
||||||
</th>
|
</mat-checkbox>
|
||||||
<td mat-cell *matCellDef="let element">
|
</th>
|
||||||
<mat-checkbox
|
<td mat-cell *matCellDef="let element">
|
||||||
#checkbox
|
<mat-checkbox
|
||||||
[checked]="getCheckUser(element)"
|
#checkbox
|
||||||
(change)="onCheckUser(checkbox.checked, element)"
|
[checked]="getCheckUser(element)"
|
||||||
(click)="$event.stopPropagation()"
|
(change)="onCheckUser(checkbox.checked, element)"
|
||||||
>
|
(click)="$event.stopPropagation()"
|
||||||
</mat-checkbox>
|
>
|
||||||
</td>
|
</mat-checkbox>
|
||||||
</ng-container>
|
</td>
|
||||||
<ng-container matColumnDef="name">
|
</ng-container>
|
||||||
<th mat-header-cell *matHeaderCellDef mat-sort-header class="infos">
|
<ng-container matColumnDef="name">
|
||||||
Name
|
<th mat-header-cell *matHeaderCellDef mat-sort-header class="infos">
|
||||||
</th>
|
Name
|
||||||
<td mat-cell *matCellDef="let element" class="file-info">
|
</th>
|
||||||
<div class="file-name">
|
<td mat-cell *matCellDef="let element" class="file-info">
|
||||||
{{ element.info.name }}
|
<div class="file-name">
|
||||||
</div>
|
{{ element.info.name }}
|
||||||
<div class="download-period text-accent-color">
|
</div>
|
||||||
<!--{{ element.info.size | ucapBytes }}-->
|
<div class="download-period text-accent-color">
|
||||||
{{ element.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }} ~
|
<!--{{ element.info.size | ucapBytes }}-->
|
||||||
2020.01.23
|
{{ element.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }} ~
|
||||||
</div>
|
2020.01.23
|
||||||
</td>
|
</div>
|
||||||
</ng-container>
|
</td>
|
||||||
<ng-container matColumnDef="sendDate" class="date">
|
</ng-container>
|
||||||
<th mat-header-cell *matHeaderCellDef mat-sort-header>sendDate</th>
|
<ng-container matColumnDef="sendDate" class="date">
|
||||||
<td mat-cell *matCellDef="let element">
|
<th mat-header-cell *matHeaderCellDef mat-sort-header>sendDate</th>
|
||||||
<!--{{ element.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }}-->
|
<td mat-cell *matCellDef="let element">
|
||||||
{{ element.info.size | ucapBytes }}
|
<!--{{ element.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }}-->
|
||||||
</td>
|
{{ element.info.size | ucapBytes }}
|
||||||
</ng-container>
|
</td>
|
||||||
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
|
</ng-container>
|
||||||
<tr
|
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
|
||||||
mat-row
|
<tr
|
||||||
*matRowDef="let row; columns: displayedColumns"
|
mat-row
|
||||||
(click)="onClickRow(row)"
|
*matRowDef="let row; columns: displayedColumns"
|
||||||
></tr>
|
(click)="onClickRow(row)"
|
||||||
</table>
|
></tr>
|
||||||
|
</table>
|
||||||
|
</perfect-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-fix">
|
<div class="footer-fix">
|
||||||
<mat-paginator
|
<mat-paginator
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.rightDrawer-filebox {
|
::ng-deep .rightDrawer-filebox {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: calc(100% - 60px);
|
height: calc(100% - 60px);
|
||||||
.rightDrawer-tab {
|
.rightDrawer-tab {
|
||||||
|
@ -23,16 +23,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .mat-tab-label {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.select-filebox {
|
.select-filebox {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
border: 1px solid #cccccc;
|
border: 1px solid #cccccc;
|
||||||
|
border-radius: 4px;
|
||||||
.select-flie {
|
.select-flie {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row;
|
flex-flow: row;
|
||||||
|
@ -114,7 +111,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.table-box {
|
.table-box {
|
||||||
height: calc(100% - 450px);
|
height: calc(100% - 440px);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
.mat-paginator-container {
|
.mat-paginator-container {
|
||||||
|
|
|
@ -1,3 +1,48 @@
|
||||||
div.message-box {
|
.list-search {
|
||||||
width: 600px;
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
height: 60px;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
border-bottom: 1px solid #dddddd;
|
||||||
|
.searchbox {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::ng-deep .searchbox {
|
||||||
|
.mat-form-field {
|
||||||
|
display: block;
|
||||||
|
.mat-form-field-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
height: 100%;
|
||||||
|
.mat-form-field-flex {
|
||||||
|
height: 59px;
|
||||||
|
padding: 0 10px 0 20px;
|
||||||
|
align-items: center;
|
||||||
|
.mat-form-field-infix {
|
||||||
|
width: 90%;
|
||||||
|
font-size: 14px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.mat-form-field-suffix {
|
||||||
|
.mat-icon {
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.mat-form-field-appearance-legacy {
|
||||||
|
.mat-form-field-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.mat-form-field-underline {
|
||||||
|
bottom: 0;
|
||||||
|
background-color: unset !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ import {
|
||||||
OnInit,
|
OnInit,
|
||||||
OnDestroy,
|
OnDestroy,
|
||||||
Output,
|
Output,
|
||||||
EventEmitter,
|
EventEmitter
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
import { Store, select } from '@ngrx/store';
|
import { Store, select } from '@ngrx/store';
|
||||||
|
@ -21,13 +21,13 @@ import { DialogService } from '@ucap-webmessenger/ui';
|
||||||
import {
|
import {
|
||||||
SelectGroupDialogComponent,
|
SelectGroupDialogComponent,
|
||||||
SelectGroupDialogResult,
|
SelectGroupDialogResult,
|
||||||
SelectGroupDialogData,
|
SelectGroupDialogData
|
||||||
} from '../../dialogs/group/select-group.dialog.component';
|
} from '../../dialogs/group/select-group.dialog.component';
|
||||||
import { GroupDetailData } from '@ucap-webmessenger/protocol-sync';
|
import { GroupDetailData } from '@ucap-webmessenger/protocol-sync';
|
||||||
import {
|
import {
|
||||||
CreateChatDialogComponent,
|
CreateChatDialogComponent,
|
||||||
CreateChatDialogResult,
|
CreateChatDialogResult,
|
||||||
CreateChatDialogData,
|
CreateChatDialogData
|
||||||
} from '../../dialogs/chat/create-chat.dialog.component';
|
} from '../../dialogs/chat/create-chat.dialog.component';
|
||||||
import { UserSelectDialogType } from '@app/types';
|
import { UserSelectDialogType } from '@app/types';
|
||||||
import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
|
import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
|
||||||
|
@ -36,7 +36,7 @@ import { KEY_LOGIN_RES_INFO } from '@app/types/login-res-info.type';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-layout-chat-right-drawer-room-user-list',
|
selector: 'app-layout-chat-right-drawer-room-user-list',
|
||||||
templateUrl: './room-user-list.component.html',
|
templateUrl: './room-user-list.component.html',
|
||||||
styleUrls: ['./room-user-list.component.scss'],
|
styleUrls: ['./room-user-list.component.scss']
|
||||||
})
|
})
|
||||||
export class RoomUserListComponent implements OnInit, OnDestroy {
|
export class RoomUserListComponent implements OnInit, OnDestroy {
|
||||||
@Output()
|
@Output()
|
||||||
|
@ -105,15 +105,19 @@ export class RoomUserListComponent implements OnInit, OnDestroy {
|
||||||
title: 'Edit Chat Member',
|
title: 'Edit Chat Member',
|
||||||
curRoomUser: this.userInfoList.filter(
|
curRoomUser: this.userInfoList.filter(
|
||||||
user => user.seq !== this.loginRes.userSeq
|
user => user.seq !== this.loginRes.userSeq
|
||||||
),
|
)
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!!result && !!result.choice && result.choice) {
|
if (!!result && !!result.choice && result.choice) {
|
||||||
const userSeqs: number[] = [];
|
const userSeqs: number[] = this.userInfoList.map(
|
||||||
|
userInfo => userInfo.seq
|
||||||
|
);
|
||||||
if (!!result.selectedUserList && result.selectedUserList.length > 0) {
|
if (!!result.selectedUserList && result.selectedUserList.length > 0) {
|
||||||
result.selectedUserList.map(user => {
|
result.selectedUserList.forEach(user => {
|
||||||
userSeqs.push(user.seq);
|
if (userSeqs.indexOf(user.seq) < 0) {
|
||||||
|
userSeqs.push(user.seq);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,8 +129,8 @@ export class RoomUserListComponent implements OnInit, OnDestroy {
|
||||||
RoomStore.inviteOrOpen({
|
RoomStore.inviteOrOpen({
|
||||||
req: {
|
req: {
|
||||||
divCd: 'Invite',
|
divCd: 'Invite',
|
||||||
userSeqs,
|
userSeqs
|
||||||
},
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -141,8 +145,8 @@ export class RoomUserListComponent implements OnInit, OnDestroy {
|
||||||
>(SelectGroupDialogComponent, {
|
>(SelectGroupDialogComponent, {
|
||||||
width: '600px',
|
width: '600px',
|
||||||
data: {
|
data: {
|
||||||
title: 'Group Select',
|
title: 'Group Select'
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!!result && !!result.choice && result.choice) {
|
if (!!result && !!result.choice && result.choice) {
|
||||||
|
@ -159,7 +163,7 @@ export class RoomUserListComponent implements OnInit, OnDestroy {
|
||||||
this.store.dispatch(
|
this.store.dispatch(
|
||||||
SyncStore.updateGroupMember({
|
SyncStore.updateGroupMember({
|
||||||
oldGroup,
|
oldGroup,
|
||||||
trgtUserSeq,
|
trgtUserSeq
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,9 +70,9 @@
|
||||||
<ucap-group-expansion-panel
|
<ucap-group-expansion-panel
|
||||||
#groupExpansionPanel
|
#groupExpansionPanel
|
||||||
[groupBuddyList]="groupBuddyList$ | async"
|
[groupBuddyList]="groupBuddyList$ | async"
|
||||||
[favoritBuddyList]="favoritBuddyList$ | async"
|
|
||||||
[selectedUserList]="selectedUserList"
|
[selectedUserList]="selectedUserList"
|
||||||
[checkable]="true"
|
[checkable]="true"
|
||||||
|
(checkGroup)="onCheckGroup($event)"
|
||||||
class="group-expansion"
|
class="group-expansion"
|
||||||
>
|
>
|
||||||
<ucap-profile-user-list-item
|
<ucap-profile-user-list-item
|
||||||
|
@ -138,20 +138,6 @@
|
||||||
<mat-icon>chat</mat-icon>
|
<mat-icon>chat</mat-icon>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<div>
|
<div>
|
||||||
<!-- <cdk-virtual-scroll-viewport itemSize="20" style="height: 100%">
|
|
||||||
<ucap-room-list-item
|
|
||||||
*cdkVirtualFor="let room of roomList"
|
|
||||||
[loginRes]="loginRes"
|
|
||||||
[roomInfo]="room"
|
|
||||||
[roomUserInfo]="getRoomUserList(room)"
|
|
||||||
[sessionVerinfo]="sessionVerinfo"
|
|
||||||
[checkable]="getCheckableRoom(room)"
|
|
||||||
[isChecked]="getCheckedRoom(room)"
|
|
||||||
[multiCheckable]="false"
|
|
||||||
(checkRoom)="onCheckRoom($event)"
|
|
||||||
>
|
|
||||||
</ucap-room-list-item>
|
|
||||||
</cdk-virtual-scroll-viewport> -->
|
|
||||||
<ucap-room-list-item
|
<ucap-room-list-item
|
||||||
*ngFor="let room of roomList"
|
*ngFor="let room of roomList"
|
||||||
[loginRes]="loginRes"
|
[loginRes]="loginRes"
|
||||||
|
|
|
@ -376,6 +376,7 @@ export class CreateChatDialogComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 조직도 > 부서원 전체 선택 */
|
||||||
onCheckAllUser(params: {
|
onCheckAllUser(params: {
|
||||||
isChecked: boolean;
|
isChecked: boolean;
|
||||||
userInfos: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[];
|
userInfos: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[];
|
||||||
|
|
|
@ -43,12 +43,14 @@
|
||||||
<ucap-chat-message-box-information
|
<ucap-chat-message-box-information
|
||||||
*ngSwitchCase="EventType.RenameRoom"
|
*ngSwitchCase="EventType.RenameRoom"
|
||||||
[message]="message"
|
[message]="message"
|
||||||
|
class="information-msg"
|
||||||
>
|
>
|
||||||
</ucap-chat-message-box-information>
|
</ucap-chat-message-box-information>
|
||||||
<ucap-chat-message-box-information
|
<ucap-chat-message-box-information
|
||||||
*ngSwitchCase="EventType.GuideForRoomTimerChanged"
|
*ngSwitchCase="EventType.GuideForRoomTimerChanged"
|
||||||
[message]="message"
|
[message]="message"
|
||||||
[senderName]="getUserName(message.senderSeq)"
|
[senderName]="getUserName(message.senderSeq)"
|
||||||
|
class="information-msg"
|
||||||
>
|
>
|
||||||
</ucap-chat-message-box-information>
|
</ucap-chat-message-box-information>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
|
@ -47,27 +47,38 @@
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<ng-container [ngSwitch]="node.nodeType">
|
<ng-container [ngSwitch]="node.nodeType">
|
||||||
<span *ngSwitchCase="NodeType.Profile">내 프로필</span>
|
<span *ngSwitchCase="NodeType.Profile">
|
||||||
<span *ngSwitchCase="NodeType.Favorit"
|
<span class="title-name ellipsis">내 프로필</span>
|
||||||
>즐겨찾기
|
</span>
|
||||||
<span class="text-accent-color number"
|
<span *ngSwitchCase="NodeType.Favorit">
|
||||||
>({{ node.countOfChildren }}명)</span
|
<span class="title-name ellipsis">즐겨찾기</span>
|
||||||
|
<span class="text-accent-color number">
|
||||||
|
({{ node.countOfChildren }}명)</span
|
||||||
></span
|
></span
|
||||||
>
|
>
|
||||||
<span *ngSwitchCase="NodeType.Buddy">
|
<span *ngSwitchCase="NodeType.Buddy">
|
||||||
<span class="title-name ellipsis">{{
|
<span class="title-name ellipsis">{{
|
||||||
node.groupDetail.name
|
node.groupDetail.name
|
||||||
}}</span>
|
}}</span>
|
||||||
<span class="text-accent-color number"
|
<span class="text-accent-color number">
|
||||||
>({{ node.countOfChildren }}명)</span
|
({{ node.countOfChildren }}명)</span
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
|
<mat-checkbox
|
||||||
|
*ngIf="checkable"
|
||||||
|
#checkbox
|
||||||
|
[checked]="getCheckedGroup(node.groupDetail)"
|
||||||
|
(change)="onChangeCheck(checkbox.checked, node.groupDetail)"
|
||||||
|
(click)="$event.stopPropagation()"
|
||||||
|
class="group-check"
|
||||||
|
>
|
||||||
|
</mat-checkbox>
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
aria-label="group menu"
|
aria-label="group menu"
|
||||||
*ngIf="node.nodeType !== NodeType.Profile"
|
*ngIf="node.nodeType !== NodeType.Profile && !checkable"
|
||||||
(click)="onClickMore($event, node.groupDetail)"
|
(click)="onClickMore($event, node.groupDetail)"
|
||||||
class="group-menu"
|
class="group-menu"
|
||||||
>
|
>
|
||||||
|
|
|
@ -64,6 +64,11 @@
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
.group-check {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
.group-menu {
|
.group-menu {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
|
|
|
@ -108,6 +108,8 @@ export class ExpansionPanelComponent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.groupList = list;
|
||||||
|
|
||||||
this.buddyNodes = [];
|
this.buddyNodes = [];
|
||||||
|
|
||||||
for (const item of list) {
|
for (const item of list) {
|
||||||
|
@ -179,6 +181,8 @@ export class ExpansionPanelComponent
|
||||||
treeFlattener: MatTreeFlattener<GroupNode, FlatNode>;
|
treeFlattener: MatTreeFlattener<GroupNode, FlatNode>;
|
||||||
dataSource: VirtualScrollTreeFlatDataSource<GroupNode, FlatNode>;
|
dataSource: VirtualScrollTreeFlatDataSource<GroupNode, FlatNode>;
|
||||||
|
|
||||||
|
groupList: { group: GroupDetailData; buddyList: UserInfo[] }[];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private changeDetectorRef: ChangeDetectorRef,
|
private changeDetectorRef: ChangeDetectorRef,
|
||||||
private logger: NGXLogger
|
private logger: NGXLogger
|
||||||
|
@ -237,30 +241,34 @@ export class ExpansionPanelComponent
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 그룹리스트가 checkable 할 경우 checkbox 의 change 이벤트를 상위 컴포넌트로 전달한다. */
|
/** 그룹리스트가 checkable 할 경우 checkbox 의 change 이벤트를 상위 컴포넌트로 전달한다. */
|
||||||
onChangeCheck(
|
onChangeCheck(value: boolean, group: GroupDetailData, nodeType: NodeType) {
|
||||||
value: boolean,
|
const groupInfos = this.groupList.filter(
|
||||||
groupBuddyList: { group: GroupDetailData; buddyList: UserInfo[] }
|
groupInfo => groupInfo.group.seq === group.seq
|
||||||
) {
|
);
|
||||||
this.checkGroup.emit({
|
|
||||||
isChecked: value,
|
if (groupInfos.length > 0) {
|
||||||
groupBuddyList
|
this.checkGroup.emit({
|
||||||
});
|
isChecked: value,
|
||||||
|
groupBuddyList: groupInfos[0]
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 그룹리스트가 checkable 할 경우 checkbox 의 isChecked 를 관장하며, 하위 부서원들의 전체선택여부를 판단한다. */
|
/** 그룹리스트가 checkable 할 경우 checkbox 의 isChecked 를 관장하며, 하위 부서원들의 전체선택여부를 판단한다. */
|
||||||
getCheckedGroup(groupBuddy: {
|
getCheckedGroup(group: GroupDetailData) {
|
||||||
group: GroupDetailData;
|
if (!group || group === undefined) {
|
||||||
buddyList: UserInfo[];
|
|
||||||
}) {
|
|
||||||
if (groupBuddy.buddyList.length === 0) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (group.userSeqs.length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!!this.selectedUserList && this.selectedUserList.length > 0) {
|
if (!!this.selectedUserList && this.selectedUserList.length > 0) {
|
||||||
let allExist = true;
|
let allExist = true;
|
||||||
groupBuddy.buddyList.some(groupUser => {
|
group.userSeqs.some(seq => {
|
||||||
if (
|
if (
|
||||||
this.selectedUserList.filter(item => item.seq === groupUser.seq)
|
this.selectedUserList.filter(item => item.seq === seq).length === 0
|
||||||
.length === 0
|
|
||||||
) {
|
) {
|
||||||
allExist = false;
|
allExist = false;
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user