Merge branch 'master' of http://10.81.13.221:6990/Web/next-ucap-messenger
This commit is contained in:
commit
7eda167067
|
@ -3,7 +3,7 @@ import {
|
||||||
HttpClient,
|
HttpClient,
|
||||||
HttpEventType,
|
HttpEventType,
|
||||||
HttpResponse,
|
HttpResponse,
|
||||||
HttpRequest,
|
HttpRequest
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable, Subject } from 'rxjs';
|
import { Observable, Subject } from 'rxjs';
|
||||||
|
@ -13,60 +13,60 @@ import {
|
||||||
FileProfileSaveRequest,
|
FileProfileSaveRequest,
|
||||||
FileProfileSaveResponse,
|
FileProfileSaveResponse,
|
||||||
encodeFileProfileSave,
|
encodeFileProfileSave,
|
||||||
decodeFileProfileSave,
|
decodeFileProfileSave
|
||||||
} from '../apis/file-profile-save';
|
} from '../apis/file-profile-save';
|
||||||
import {
|
import {
|
||||||
FileTalkDownloadRequest,
|
FileTalkDownloadRequest,
|
||||||
encodeFileTalkDownload,
|
encodeFileTalkDownload,
|
||||||
encodeFormDataFileTalkDownload,
|
encodeFormDataFileTalkDownload
|
||||||
} from '../apis/file-talk-download';
|
} from '../apis/file-talk-download';
|
||||||
import {
|
import {
|
||||||
FileTalkSaveRequest,
|
FileTalkSaveRequest,
|
||||||
FileTalkSaveResponse,
|
FileTalkSaveResponse,
|
||||||
encodeFileTalkSave,
|
encodeFileTalkSave,
|
||||||
decodeFileTalkSave,
|
decodeFileTalkSave
|
||||||
} from '../apis/file-talk-save';
|
} from '../apis/file-talk-save';
|
||||||
import {
|
import {
|
||||||
FileTalkShareRequest,
|
FileTalkShareRequest,
|
||||||
FileTalkShareResponse,
|
FileTalkShareResponse,
|
||||||
encodeFileTalkShare,
|
encodeFileTalkShare,
|
||||||
decodeFileTalkShare,
|
decodeFileTalkShare
|
||||||
} from '../apis/file-talk-share';
|
} from '../apis/file-talk-share';
|
||||||
import {
|
import {
|
||||||
MassTalkDownloadRequest,
|
MassTalkDownloadRequest,
|
||||||
MassTalkDownloadResponse,
|
MassTalkDownloadResponse,
|
||||||
encodeMassTalkDownload,
|
encodeMassTalkDownload,
|
||||||
decodeMassTalkDownload,
|
decodeMassTalkDownload
|
||||||
} from '../apis/mass-talk-download';
|
} from '../apis/mass-talk-download';
|
||||||
import {
|
import {
|
||||||
MassTalkSaveRequest,
|
MassTalkSaveRequest,
|
||||||
MassTalkSaveResponse,
|
MassTalkSaveResponse,
|
||||||
encodeMassTalkSave,
|
encodeMassTalkSave,
|
||||||
decodeMassTalkSave,
|
decodeMassTalkSave
|
||||||
} from '../apis/mass-talk-save';
|
} from '../apis/mass-talk-save';
|
||||||
import {
|
import {
|
||||||
TransMassTalkDownloadRequest,
|
TransMassTalkDownloadRequest,
|
||||||
TransMassTalkDownloadResponse,
|
TransMassTalkDownloadResponse,
|
||||||
encodeTransMassTalkDownload,
|
encodeTransMassTalkDownload,
|
||||||
decodeTransMassTalkDownload,
|
decodeTransMassTalkDownload
|
||||||
} from '../apis/trans-mass-talk-download';
|
} from '../apis/trans-mass-talk-download';
|
||||||
import {
|
import {
|
||||||
TransMassTalkSaveRequest,
|
TransMassTalkSaveRequest,
|
||||||
TransMassTalkSaveResponse,
|
TransMassTalkSaveResponse,
|
||||||
encodeTransMassTalkSave,
|
encodeTransMassTalkSave,
|
||||||
decodeTransMassTalkSave,
|
decodeTransMassTalkSave
|
||||||
} from '../apis/trans-mass-talk-save';
|
} from '../apis/trans-mass-talk-save';
|
||||||
import {
|
import {
|
||||||
TranslationReqRequest,
|
TranslationReqRequest,
|
||||||
TranslationReqResponse,
|
TranslationReqResponse,
|
||||||
encodeTranslationReq,
|
encodeTranslationReq,
|
||||||
decodeTranslationReq,
|
decodeTranslationReq
|
||||||
} from '../apis/translation-req';
|
} from '../apis/translation-req';
|
||||||
import {
|
import {
|
||||||
TranslationSaveRequest,
|
TranslationSaveRequest,
|
||||||
TranslationSaveResponse,
|
TranslationSaveResponse,
|
||||||
encodeTranslationSave,
|
encodeTranslationSave,
|
||||||
decodeTranslationSave,
|
decodeTranslationSave
|
||||||
} from '../apis/translation-save';
|
} from '../apis/translation-save';
|
||||||
|
|
||||||
import { _MODULE_CONFIG } from '../config/token';
|
import { _MODULE_CONFIG } from '../config/token';
|
||||||
|
@ -75,7 +75,7 @@ import { Urls } from '../config/urls';
|
||||||
import { UrlConfig } from '@ucap-webmessenger/core';
|
import { UrlConfig } from '@ucap-webmessenger/core';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root',
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class CommonApiService {
|
export class CommonApiService {
|
||||||
readonly urls: Urls;
|
readonly urls: Urls;
|
||||||
|
@ -99,7 +99,7 @@ export class CommonApiService {
|
||||||
!!fileProfileSaveUrl ? fileProfileSaveUrl : this.urls.fileProfileSave,
|
!!fileProfileSaveUrl ? fileProfileSaveUrl : this.urls.fileProfileSave,
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeFileProfileSave(req),
|
params: encodeFileProfileSave(req)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeFileProfileSave(res)));
|
.pipe(map(res => decodeFileProfileSave(res)));
|
||||||
|
@ -114,7 +114,7 @@ export class CommonApiService {
|
||||||
!!fileTalkDownloadUrl ? fileTalkDownloadUrl : this.urls.fileTalkDownload,
|
!!fileTalkDownloadUrl ? fileTalkDownloadUrl : this.urls.fileTalkDownload,
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeFileTalkDownload(req),
|
params: encodeFileTalkDownload(req)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -186,7 +186,11 @@ export class CommonApiService {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public acceptableExtensionForFileTalk(extensions: string[]): boolean {
|
public acceptableExtensionForFileTalk(
|
||||||
|
extensions: string[]
|
||||||
|
): { accept: boolean; reject: string[] } {
|
||||||
|
let accept = true;
|
||||||
|
const reject: string[] = [];
|
||||||
for (const extension of extensions) {
|
for (const extension of extensions) {
|
||||||
if (
|
if (
|
||||||
-1 ===
|
-1 ===
|
||||||
|
@ -194,10 +198,14 @@ export class CommonApiService {
|
||||||
extension.toLowerCase()
|
extension.toLowerCase()
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
return false;
|
reject.push(extension);
|
||||||
|
accept = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return {
|
||||||
|
accept,
|
||||||
|
reject
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public fileTalkShare(
|
public fileTalkShare(
|
||||||
|
@ -208,7 +216,7 @@ export class CommonApiService {
|
||||||
this.urls.fileTalkShare,
|
this.urls.fileTalkShare,
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeFileTalkShare(req),
|
params: encodeFileTalkShare(req)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeFileTalkShare(res)));
|
.pipe(map(res => decodeFileTalkShare(res)));
|
||||||
|
@ -223,7 +231,7 @@ export class CommonApiService {
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeMassTalkDownload(req),
|
params: encodeMassTalkDownload(req),
|
||||||
responseType: 'text' as 'json',
|
responseType: 'text' as 'json'
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeMassTalkDownload(res)));
|
.pipe(map(res => decodeMassTalkDownload(res)));
|
||||||
|
@ -238,7 +246,7 @@ export class CommonApiService {
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeMassTalkSave(req),
|
params: encodeMassTalkSave(req),
|
||||||
responseType: 'text' as 'json',
|
responseType: 'text' as 'json'
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeMassTalkSave(res)));
|
.pipe(map(res => decodeMassTalkSave(res)));
|
||||||
|
@ -252,7 +260,7 @@ export class CommonApiService {
|
||||||
this.urls.transMassTalkDownload,
|
this.urls.transMassTalkDownload,
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeTransMassTalkDownload(req),
|
params: encodeTransMassTalkDownload(req)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeTransMassTalkDownload(res)));
|
.pipe(map(res => decodeTransMassTalkDownload(res)));
|
||||||
|
@ -266,7 +274,7 @@ export class CommonApiService {
|
||||||
this.urls.transMassTalkSave,
|
this.urls.transMassTalkSave,
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeTransMassTalkSave(req),
|
params: encodeTransMassTalkSave(req)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeTransMassTalkSave(res)));
|
.pipe(map(res => decodeTransMassTalkSave(res)));
|
||||||
|
@ -280,7 +288,7 @@ export class CommonApiService {
|
||||||
this.urls.translationReq,
|
this.urls.translationReq,
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeTranslationReq(req),
|
params: encodeTranslationReq(req)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeTranslationReq(res)));
|
.pipe(map(res => decodeTranslationReq(res)));
|
||||||
|
@ -294,7 +302,7 @@ export class CommonApiService {
|
||||||
this.urls.translationSave,
|
this.urls.translationSave,
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
params: encodeTranslationSave(req),
|
params: encodeTranslationSave(req)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.pipe(map(res => decodeTranslationSave(res)));
|
.pipe(map(res => decodeTranslationSave(res)));
|
||||||
|
|
|
@ -5,21 +5,21 @@
|
||||||
|
|
||||||
::ng-deep .mat-tab-body-wrapper,
|
::ng-deep .mat-tab-body-wrapper,
|
||||||
::ng-deep .mat-tab-body {
|
::ng-deep .mat-tab-body {
|
||||||
height: 0%;
|
height: 100%;
|
||||||
width: 0%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
::ng-deep .mat-tab-header {
|
::ng-deep .mat-tab-header {
|
||||||
border-bottom: none !important;
|
border-bottom: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-side-tabs-body {
|
.left-side-tabs-body {
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
width: calc(100% - 70px);
|
||||||
|
div[id^='tabs'] {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
position: relative;
|
||||||
|
|
||||||
.left-side-tabs-contents {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@
|
||||||
height: 280px;
|
height: 280px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
.mat-tab-label {
|
.mat-tab-label {
|
||||||
|
width: 100%;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
padding: 0 16px;
|
padding: 0 16px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
[roomInfo]="room"
|
[roomInfo]="room"
|
||||||
[roomUserInfo]="getRoomUserList(room)"
|
[roomUserInfo]="getRoomUserList(room)"
|
||||||
[sessionVerinfo]="sessionVerinfo"
|
[sessionVerinfo]="sessionVerinfo"
|
||||||
(click)="onSelectedRoom(room)"
|
(click)="onClickContextMenu('SELECT_ROOM', room)"
|
||||||
(contextmenu)="onContextMenuChat($event, room)"
|
(contextmenu)="onContextMenuChat($event, room)"
|
||||||
>
|
>
|
||||||
</ucap-room-list-item>
|
</ucap-room-list-item>
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
[roomInfo]="room"
|
[roomInfo]="room"
|
||||||
[roomUserInfo]="getRoomUserList(room)"
|
[roomUserInfo]="getRoomUserList(room)"
|
||||||
[sessionVerinfo]="sessionVerinfo"
|
[sessionVerinfo]="sessionVerinfo"
|
||||||
(click)="onSelectedRoom(room)"
|
(click)="onClickContextMenu('SELECT_ROOM', room)"
|
||||||
(contextmenu)="onContextMenuChat($event, room)"
|
(contextmenu)="onContextMenuChat($event, room)"
|
||||||
>
|
>
|
||||||
</ucap-room-list-item>
|
</ucap-room-list-item>
|
||||||
|
@ -121,13 +121,16 @@
|
||||||
(ucapClickOutside)="chatContextMenuTrigger.closeMenu()"
|
(ucapClickOutside)="chatContextMenuTrigger.closeMenu()"
|
||||||
>
|
>
|
||||||
<ng-template matMenuContent let-roomInfo="roomInfo">
|
<ng-template matMenuContent let-roomInfo="roomInfo">
|
||||||
<button mat-menu-item (click)="onSelectedRoom(roomInfo)">
|
<button mat-menu-item (click)="onClickContextMenu('SELECT_ROOM', roomInfo)">
|
||||||
대화방 열기
|
대화방 열기
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item (click)="onClickToggleAlarm(roomInfo)">
|
<button
|
||||||
|
mat-menu-item
|
||||||
|
(click)="onClickContextMenu('TOGGLE_ALARM', roomInfo)"
|
||||||
|
>
|
||||||
대화방 알람 {{ roomInfo.receiveAlarm ? '끄기' : '켜기' }}
|
대화방 알람 {{ roomInfo.receiveAlarm ? '끄기' : '켜기' }}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item (click)="onClickExit(roomInfo)">
|
<button mat-menu-item (click)="onClickContextMenu('EXIT_ROOM', roomInfo)">
|
||||||
대화방 나가기
|
대화방 나가기
|
||||||
</button>
|
</button>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
import { exit } from './../../../../store/messenger/room/actions';
|
import { exit } from './../../../../store/messenger/room/actions';
|
||||||
import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';
|
import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';
|
||||||
import { ucapAnimations } from '@ucap-webmessenger/ui';
|
import {
|
||||||
|
ucapAnimations,
|
||||||
|
DialogService,
|
||||||
|
ConfirmDialogComponent,
|
||||||
|
ConfirmDialogResult,
|
||||||
|
ConfirmDialogData
|
||||||
|
} from '@ucap-webmessenger/ui';
|
||||||
import { NGXLogger } from 'ngx-logger';
|
import { NGXLogger } from 'ngx-logger';
|
||||||
import { Store, select } from '@ngrx/store';
|
import { Store, select } from '@ngrx/store';
|
||||||
import { Subscription, combineLatest, Observable } from 'rxjs';
|
import { Subscription, combineLatest, Observable } from 'rxjs';
|
||||||
|
@ -54,6 +60,7 @@ export class ChatComponent implements OnInit, OnDestroy {
|
||||||
private store: Store<any>,
|
private store: Store<any>,
|
||||||
private formBuilder: FormBuilder,
|
private formBuilder: FormBuilder,
|
||||||
private logger: NGXLogger,
|
private logger: NGXLogger,
|
||||||
|
private dialogService: DialogService,
|
||||||
private sessionStorageService: SessionStorageService
|
private sessionStorageService: SessionStorageService
|
||||||
) {
|
) {
|
||||||
this.sessionVerinfo = this.sessionStorageService.get<VersionInfo2Response>(
|
this.sessionVerinfo = this.sessionStorageService.get<VersionInfo2Response>(
|
||||||
|
@ -194,18 +201,35 @@ export class ChatComponent implements OnInit, OnDestroy {
|
||||||
this.chatContextMenuTrigger.openMenu();
|
this.chatContextMenuTrigger.openMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
onSelectedRoom(roomInfo: RoomInfo) {
|
async onClickContextMenu(type: string, roomInfo: RoomInfo) {
|
||||||
this.store.dispatch(ChatStore.selectedRoom({ roomSeq: roomInfo.roomSeq }));
|
switch (type) {
|
||||||
}
|
case 'SELECT_ROOM':
|
||||||
onClickToggleAlarm(roomInfo: RoomInfo) {
|
|
||||||
this.store.dispatch(RoomStore.updateOnlyAlarm({ roomInfo }));
|
|
||||||
}
|
|
||||||
onClickExit(roomInfo: RoomInfo) {
|
|
||||||
this.store.dispatch(
|
this.store.dispatch(
|
||||||
RoomStore.exit({
|
ChatStore.selectedRoom({ roomSeq: roomInfo.roomSeq })
|
||||||
roomSeq: roomInfo.roomSeq
|
|
||||||
})
|
|
||||||
);
|
);
|
||||||
|
break;
|
||||||
|
case 'TOGGLE_ALARM':
|
||||||
|
this.store.dispatch(RoomStore.updateOnlyAlarm({ roomInfo }));
|
||||||
|
break;
|
||||||
|
case 'EXIT_ROOM':
|
||||||
|
{
|
||||||
|
const result = await this.dialogService.open<
|
||||||
|
ConfirmDialogComponent,
|
||||||
|
ConfirmDialogData,
|
||||||
|
ConfirmDialogResult
|
||||||
|
>(ConfirmDialogComponent, {
|
||||||
|
data: {
|
||||||
|
title: 'Exit Room',
|
||||||
|
html: `대화방을 나가시겠습니까?<br/>나가기를 하면 대화내용 및 대화방 정보가 삭제됩니다.`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!!result && !!result.choice && result.choice) {
|
||||||
|
this.store.dispatch(RoomStore.exit({ roomSeq: roomInfo.roomSeq }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getRoomUserList(roomInfo: RoomInfo): (RoomUserInfo | UserInfoShort)[] {
|
getRoomUserList(roomInfo: RoomInfo): (RoomUserInfo | UserInfoShort)[] {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
[oraganizationList]="departmentInfoList$ | async"
|
[oraganizationList]="departmentInfoList$ | async"
|
||||||
[loginRes]="loginRes"
|
[loginRes]="loginRes"
|
||||||
(selected)="onSelectedOrganization($event)"
|
(selected)="onSelectedOrganization($event)"
|
||||||
|
class="tab-tree-frame"
|
||||||
></ucap-organization-tree>
|
></ucap-organization-tree>
|
||||||
</perfect-scrollbar>
|
</perfect-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -154,3 +154,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
::ng-deep .oraganization-tab{
|
||||||
|
.oraganization-tab-tree,
|
||||||
|
.select-list{
|
||||||
|
.ps{
|
||||||
|
.ps-content{
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -607,6 +607,18 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
this.logger.debug('onFileSelected error', error);
|
this.logger.debug('onFileSelected error', error);
|
||||||
|
this.fileUploadQueue.onUploadComplete();
|
||||||
|
|
||||||
|
this.dialogService.open<
|
||||||
|
AlertDialogComponent,
|
||||||
|
AlertDialogData,
|
||||||
|
AlertDialogResult
|
||||||
|
>(AlertDialogComponent, {
|
||||||
|
data: {
|
||||||
|
title: 'Alert',
|
||||||
|
html: `파일전송에 실패하였습니다.<br/>계속 문제 발생 시 관리자에게 문의하세요.`
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
this.fileUploadQueue.onUploadComplete();
|
this.fileUploadQueue.onUploadComplete();
|
||||||
|
|
|
@ -168,7 +168,12 @@
|
||||||
>
|
>
|
||||||
No
|
No
|
||||||
</button>
|
</button>
|
||||||
<button mat-flat-button (click)="onClickChoice(true)" class="mat-primary">
|
<button
|
||||||
|
mat-flat-button
|
||||||
|
[disabled]="getBtnValid()"
|
||||||
|
(click)="onClickChoice(true)"
|
||||||
|
class="mat-primary"
|
||||||
|
>
|
||||||
Yes
|
Yes
|
||||||
</button>
|
</button>
|
||||||
</mat-card-actions>
|
</mat-card-actions>
|
||||||
|
|
|
@ -15,6 +15,10 @@
|
||||||
height:100% !important;
|
height:100% !important;
|
||||||
border-right: 1px solid #dddddd;
|
border-right: 1px solid #dddddd;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
.tab-tree-frame{
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.select-list {
|
.select-list {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
@ -66,6 +70,7 @@
|
||||||
}
|
}
|
||||||
::ng-deep .mat-dialog-container .mat-tab-body-wrapper {
|
::ng-deep .mat-dialog-container .mat-tab-body-wrapper {
|
||||||
height: 380px;
|
height: 380px;
|
||||||
|
width:100%;
|
||||||
}
|
}
|
||||||
.list-panel{
|
.list-panel{
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
|
|
@ -62,7 +62,8 @@ export interface CreateChatDialogData {
|
||||||
| UserInfoSS
|
| UserInfoSS
|
||||||
| UserInfoF
|
| UserInfoF
|
||||||
| UserInfoDN
|
| UserInfoDN
|
||||||
| RoomUserInfo)[];
|
| RoomUserInfo
|
||||||
|
)[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateChatDialogResult {
|
export interface CreateChatDialogResult {
|
||||||
|
@ -72,7 +73,8 @@ export interface CreateChatDialogResult {
|
||||||
| UserInfoSS
|
| UserInfoSS
|
||||||
| UserInfoF
|
| UserInfoF
|
||||||
| UserInfoDN
|
| UserInfoDN
|
||||||
| RoomUserInfo)[];
|
| RoomUserInfo
|
||||||
|
)[];
|
||||||
selectedRoom?: RoomInfo;
|
selectedRoom?: RoomInfo;
|
||||||
groupName?: string;
|
groupName?: string;
|
||||||
oldGroup?: GroupDetailData;
|
oldGroup?: GroupDetailData;
|
||||||
|
@ -132,7 +134,8 @@ export class CreateChatDialogComponent implements OnInit, OnDestroy {
|
||||||
| UserInfoSS
|
| UserInfoSS
|
||||||
| UserInfoF
|
| UserInfoF
|
||||||
| UserInfoDN
|
| UserInfoDN
|
||||||
| RoomUserInfo)[] = [];
|
| RoomUserInfo
|
||||||
|
)[] = [];
|
||||||
isShowSelectedUserList = true;
|
isShowSelectedUserList = true;
|
||||||
selectedRoom: RoomInfo;
|
selectedRoom: RoomInfo;
|
||||||
|
|
||||||
|
@ -449,6 +452,14 @@ export class CreateChatDialogComponent implements OnInit, OnDestroy {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getBtnValid() {
|
||||||
|
if (this.data.type === UserSelectDialogType.NewGroup) {
|
||||||
|
return this.inputForm.invalid;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** 팝업의 선택 이벤트 전달. */
|
/** 팝업의 선택 이벤트 전달. */
|
||||||
onClickChoice(choice: boolean): void {
|
onClickChoice(choice: boolean): void {
|
||||||
this.dialogRef.close({
|
this.dialogRef.close({
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<mat-card-content>
|
<mat-card-content>
|
||||||
<form name="inputForm" [formGroup]="inputForm" novalidate>
|
<form name="inputForm" [formGroup]="inputForm" novalidate>
|
||||||
<div>
|
<div>
|
||||||
<mat-form-field hintLabel="특수문자는 '-,_'만 사용할 수 있습니다.">
|
<mat-form-field hintLabel="">
|
||||||
<input
|
<input
|
||||||
matInput
|
matInput
|
||||||
#input
|
#input
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
[size]="leftSideComponentWidth"
|
[size]="leftSideComponentWidth"
|
||||||
minSize="300"
|
minSize="300"
|
||||||
maxSize="500"
|
maxSize="500"
|
||||||
|
class="split-area"
|
||||||
>
|
>
|
||||||
<div class="left-side">
|
<div class="left-side">
|
||||||
<app-layout-messenger-left-side
|
<app-layout-messenger-left-side
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
mode="side"
|
mode="side"
|
||||||
position="end"
|
position="end"
|
||||||
(openedChange)="onOpenedChange($event)"
|
(openedChange)="onOpenedChange($event)"
|
||||||
|
class="rightDrawer"
|
||||||
>
|
>
|
||||||
<app-layout-messenger-right-drawer
|
<app-layout-messenger-right-drawer
|
||||||
[selectedRightDrawer]="selectedRightDrawer$ | async"
|
[selectedRightDrawer]="selectedRightDrawer$ | async"
|
||||||
|
|
|
@ -1,29 +1,42 @@
|
||||||
.container {
|
.container {
|
||||||
height: 100%;
|
height:100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row;
|
flex-flow: row;
|
||||||
padding-top: 30px;
|
padding-top: 30px;
|
||||||
border: 3px solid #4f4f4f;
|
border: 3px solid #4f4f4f;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
|
|
||||||
|
.split-area{
|
||||||
|
overflow: hidden;
|
||||||
.left-side {
|
.left-side {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.contents {
|
.contents {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
min-width: 400px;
|
min-width: 400px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.messages {
|
.messages {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
.rightDrawer{
|
||||||
|
width:420px;
|
||||||
|
height: 100%;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.right-side {
|
.right-side {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::ng-deep .mat-drawer-inner-container{
|
||||||
|
overflow: unset !important;
|
||||||
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ ol {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
$lg-red: (
|
$lg-red: (
|
||||||
50: #ffffff,
|
50: #faf3f6,
|
||||||
100: #f8bbd0,
|
100: #f8bbd0,
|
||||||
200: #f48fb1,
|
200: #f48fb1,
|
||||||
300: #f06292,
|
300: #f06292,
|
||||||
|
@ -78,6 +78,39 @@ $lg-red: (
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$daesang: (
|
||||||
|
50: #e0f7fa,
|
||||||
|
100: #b2ebf2,
|
||||||
|
200: #80deea,
|
||||||
|
300: #4dd0e1,
|
||||||
|
400: #26c6da,
|
||||||
|
500: #00bcd4,
|
||||||
|
/*600: #00acc1,*/ 600: #00b6d5,
|
||||||
|
700: #0097a7,
|
||||||
|
800: #00838f,
|
||||||
|
900: #006064,
|
||||||
|
A100: #84ffff,
|
||||||
|
A200: #18ffff,
|
||||||
|
A400: #00e5ff,
|
||||||
|
A700: #00b8d4,
|
||||||
|
contrast: (
|
||||||
|
50: $dark-primary-text,
|
||||||
|
100: $dark-primary-text,
|
||||||
|
200: $dark-primary-text,
|
||||||
|
300: $dark-primary-text,
|
||||||
|
400: $dark-primary-text,
|
||||||
|
500: $light-primary-text,
|
||||||
|
600: $light-primary-text,
|
||||||
|
700: $light-primary-text,
|
||||||
|
800: $light-primary-text,
|
||||||
|
900: $light-primary-text,
|
||||||
|
A100: $dark-primary-text,
|
||||||
|
A200: $dark-primary-text,
|
||||||
|
A400: $dark-primary-text,
|
||||||
|
A700: $dark-primary-text,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
@mixin ucap-material-theme($theme) {
|
@mixin ucap-material-theme($theme) {
|
||||||
@include ucap-core-theme($theme);
|
@include ucap-core-theme($theme);
|
||||||
}
|
}
|
||||||
|
@ -101,10 +134,18 @@ $lg-red: (
|
||||||
background: mat-color($primary);
|
background: mat-color($primary);
|
||||||
color: mat-color($primary, default-contrast);
|
color: mat-color($primary, default-contrast);
|
||||||
}
|
}
|
||||||
|
.bg-accent-darkest {
|
||||||
|
background: mat-color($accent, 900);
|
||||||
|
color: mat-color($primary, default-contrast);
|
||||||
|
}
|
||||||
.bg-accent-dark {
|
.bg-accent-dark {
|
||||||
background: mat-color($accent, 600);
|
background: mat-color($accent, 600);
|
||||||
color: mat-color($primary, default-contrast);
|
color: mat-color($primary, default-contrast);
|
||||||
}
|
}
|
||||||
|
.bg-accent-brightest {
|
||||||
|
background: mat-color($accent, 50);
|
||||||
|
color: mat-color($primary, $dark-primary-text);
|
||||||
|
}
|
||||||
.bg-accent-light {
|
.bg-accent-light {
|
||||||
background: mat-color($accent, 300) !important;
|
background: mat-color($accent, 300) !important;
|
||||||
color: mat-color($primary, default-contrast);
|
color: mat-color($primary, default-contrast);
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
.bubble-main{
|
.bubble-main{
|
||||||
padding:10px;
|
padding:10px;
|
||||||
|
img{
|
||||||
|
height:140px;
|
||||||
|
width:auto;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
<cdk-virtual-scroll-viewport #cvsvOrganization itemSize="48" fxFlexFill>
|
<cdk-virtual-scroll-viewport #cvsvOrganization itemSize="40" fxFlexFill>
|
||||||
<ng-container
|
<ng-container
|
||||||
*cdkVirtualFor="let node of dataSource.expandedData$"
|
*cdkVirtualFor="let node of dataSource.expandedData$"
|
||||||
></ng-container>
|
></ng-container>
|
||||||
|
@ -9,9 +9,9 @@
|
||||||
class="organization-tree"
|
class="organization-tree"
|
||||||
>
|
>
|
||||||
<!-- This is the tree node template for leaf nodes -->
|
<!-- This is the tree node template for leaf nodes -->
|
||||||
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding>
|
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding class="mat-tree-last-node">
|
||||||
<li>
|
<li>
|
||||||
<div class="mat-tree-node" (click)="onClickNode(node)">
|
<div (click)="onClickNode(node)">
|
||||||
{{ node.name }}
|
{{ node.name }}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
class="tree-node-frame"
|
class="tree-node-frame"
|
||||||
>
|
>
|
||||||
<li>
|
<li>
|
||||||
<div class="mat-tree-node" (click)="onClickNode(node)" class="path">
|
<div (click)="onClickNode(node)" class="path">
|
||||||
<span class="horizontal-line"></span>
|
<span class="horizontal-line"></span>
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
|
|
|
@ -6,14 +6,13 @@
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
margin-left: 10px;
|
|
||||||
}
|
}
|
||||||
.organization-tree-node-invisible {
|
.organization-tree-node-invisible {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-node-frame {
|
/*.tree-node-frame {
|
||||||
li {
|
li {
|
||||||
.path {
|
.path {
|
||||||
.horizontal-line {
|
.horizontal-line {
|
||||||
|
@ -33,6 +32,37 @@
|
||||||
box-shadow: 0 1px 4px rgba(32, 33, 36, 0.1);
|
box-shadow: 0 1px 4px rgba(32, 33, 36, 0.1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
.organization-tree{
|
||||||
|
.tree-node-frame {
|
||||||
|
height:40px;
|
||||||
|
min-height:40px;
|
||||||
|
li{
|
||||||
|
display:flex;
|
||||||
|
align-items: center;
|
||||||
|
cursor:pointer;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.mat-tree-last-node{
|
||||||
|
height:30px;
|
||||||
|
min-height:30px;
|
||||||
|
font-size: 13px;
|
||||||
|
li{
|
||||||
|
display:flex;
|
||||||
|
align-items: center;
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
padding-left:10px;
|
||||||
|
cursor:pointer;
|
||||||
|
&:hover {
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 1px 4px rgba(32, 33, 36, 0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ul .tree-node-frame li .path > .horizontal-line {
|
ul .tree-node-frame li .path > .horizontal-line {
|
||||||
|
|
|
@ -107,7 +107,7 @@ $thumbnail-msize: 40px;
|
||||||
display: flex;
|
display: flex;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: calc(100% - 60px);
|
|
||||||
.detail {
|
.detail {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: calc(100% - 80px);
|
width: calc(100% - 80px);
|
||||||
|
|
|
@ -15,6 +15,12 @@ import {
|
||||||
CommonApiService
|
CommonApiService
|
||||||
} from '@ucap-webmessenger/api-common';
|
} from '@ucap-webmessenger/api-common';
|
||||||
import { FileUtil } from '@ucap-webmessenger/core';
|
import { FileUtil } from '@ucap-webmessenger/core';
|
||||||
|
import { DialogService } from '../services/dialog.service';
|
||||||
|
import {
|
||||||
|
AlertDialogComponent,
|
||||||
|
AlertDialogResult,
|
||||||
|
AlertDialogData
|
||||||
|
} from '../dialogs/alert.dialog.component';
|
||||||
|
|
||||||
@Directive({
|
@Directive({
|
||||||
selector: 'input[ucapFileUploadFor], div[ucapFileUploadFor]'
|
selector: 'input[ucapFileUploadFor], div[ucapFileUploadFor]'
|
||||||
|
@ -40,7 +46,8 @@ export class FileUploadForDirective implements AfterViewInit {
|
||||||
constructor(
|
constructor(
|
||||||
private commonApiService: CommonApiService,
|
private commonApiService: CommonApiService,
|
||||||
private elementRef: ElementRef,
|
private elementRef: ElementRef,
|
||||||
private logger: NGXLogger
|
private logger: NGXLogger,
|
||||||
|
private dialogService: DialogService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
ngAfterViewInit(): void {}
|
ngAfterViewInit(): void {}
|
||||||
|
@ -66,11 +73,11 @@ export class FileUploadForDirective implements AfterViewInit {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.fileUploadQueue.isEventInElement(event)) {
|
// if (this.fileUploadQueue.isEventInElement(event)) {
|
||||||
event.dataTransfer.dropEffect = 'copy';
|
// event.dataTransfer.dropEffect = 'copy';
|
||||||
} else {
|
// } else {
|
||||||
event.dataTransfer.dropEffect = 'none';
|
// event.dataTransfer.dropEffect = 'none';
|
||||||
}
|
// }
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,17 +110,32 @@ export class FileUploadForDirective implements AfterViewInit {
|
||||||
}
|
}
|
||||||
const files: FileList = event.dataTransfer.files;
|
const files: FileList = event.dataTransfer.files;
|
||||||
|
|
||||||
if (
|
const checkExt = this.commonApiService.acceptableExtensionForFileTalk(
|
||||||
!this.commonApiService.acceptableExtensionForFileTalk(
|
|
||||||
FileUtil.getExtensions(files)
|
FileUtil.getExtensions(files)
|
||||||
)
|
);
|
||||||
) {
|
if (!checkExt.accept) {
|
||||||
this.logger.debug('window:drop not acceptable');
|
this.logger.debug('window:drop not acceptable');
|
||||||
if (!!this.fileUploadQueue) {
|
if (!!this.fileUploadQueue) {
|
||||||
this.fileUploadQueue.onDragLeave();
|
this.fileUploadQueue.onDragLeave();
|
||||||
}
|
}
|
||||||
this.elementRef.nativeElement.value = '';
|
this.elementRef.nativeElement.value = '';
|
||||||
this.dragOver = false;
|
this.dragOver = false;
|
||||||
|
|
||||||
|
this.dialogService.open<
|
||||||
|
AlertDialogComponent,
|
||||||
|
AlertDialogData,
|
||||||
|
AlertDialogResult
|
||||||
|
>(AlertDialogComponent, {
|
||||||
|
data: {
|
||||||
|
title: 'Alert',
|
||||||
|
html: `지원하지 않는 파일형식입니다.${
|
||||||
|
checkExt.reject.length > 0
|
||||||
|
? '<br/>(' + checkExt.reject.join(',') + ')'
|
||||||
|
: ''
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user