This commit is contained in:
richard-loafle 2020-02-12 17:25:11 +09:00
commit 6f4c450b33
36 changed files with 239 additions and 433 deletions

View File

@ -554,10 +554,12 @@ ipcMain.on(
if (!err) { if (!err) {
event.returnValue = savePath; event.returnValue = savePath;
} else { } else {
log.info('SaveFile err', err);
event.returnValue = undefined; event.returnValue = undefined;
} }
}); });
} catch (error) { } catch (error) {
log.info('SaveFile error', error);
event.returnValue = undefined; event.returnValue = undefined;
} }
} }

View File

@ -76,13 +76,6 @@
} }
} }
/*::ng-deep .ps {
.ps-content {
position: relative;
width: 100%;
height: 100%;
}
}*/
// perfect-scrollbar right로 2px이동 // perfect-scrollbar right로 2px이동
::ng-deep .ps__rail-y { ::ng-deep .ps__rail-y {
& > .ps__thumb-y { & > .ps__thumb-y {

View File

@ -16,7 +16,9 @@
class="left-side-tabs-contents" class="left-side-tabs-contents"
[style.display]="MainMenu.Chat === currentTabLable ? 'block' : 'none'" [style.display]="MainMenu.Chat === currentTabLable ? 'block' : 'none'"
> >
<app-layout-chat-left-sidenav-chat></app-layout-chat-left-sidenav-chat> <app-layout-chat-left-sidenav-chat
[isVisible]="currentTabLable === MainMenu.Chat"
></app-layout-chat-left-sidenav-chat>
</div> </div>
<div <div
#tabs #tabs

View File

@ -32,10 +32,3 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
/*::ng-deep .cdk-virtual-scroll-orientation-vertical {
.cdk-virtual-scroll-content-wrapper {
width: 100%;
height: 100%;
contain: unset;
}
}*/

View File

@ -37,6 +37,7 @@ import { FormGroup, FormBuilder } from '@angular/forms';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling'; import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { PerfectScrollbarDirective } from 'ngx-perfect-scrollbar'; import { PerfectScrollbarDirective } from 'ngx-perfect-scrollbar';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { VirtualScrollerComponent } from 'ngx-virtual-scroller';
@Component({ @Component({
selector: 'app-layout-chat-left-sidenav-chat', selector: 'app-layout-chat-left-sidenav-chat',
@ -48,8 +49,8 @@ export class ChatComponent implements OnInit, OnDestroy, AfterViewChecked {
@Input() @Input()
isVisible = true; isVisible = true;
@ViewChild('cvsvChatList', { static: false }) @ViewChild('vsChatRoomList', { static: false })
cvsvChatList: CdkVirtualScrollViewport; private vsChatRoomList: VirtualScrollerComponent;
@ViewChild(PerfectScrollbarDirective, { static: false }) @ViewChild(PerfectScrollbarDirective, { static: false })
psDirectiveRef?: PerfectScrollbarDirective; psDirectiveRef?: PerfectScrollbarDirective;
@ -192,14 +193,18 @@ export class ChatComponent implements OnInit, OnDestroy, AfterViewChecked {
ngAfterViewChecked(): void { ngAfterViewChecked(): void {
if ( if (
!!this.cvsvChatList && !!this.vsChatRoomList &&
!!this.roomList && !!this.roomList &&
this.roomList.length > 0 && this.roomList.length > 0 &&
!this.isInitList && !this.isInitList &&
this.isVisible this.isVisible
) { ) {
this.isInitList = true; this.isInitList = true;
this.cvsvChatList.checkViewportSize(); this.vsChatRoomList.refresh();
if (!!this.psDirectiveRef) {
this.psDirectiveRef.update();
}
} }
} }

View File

@ -32,10 +32,7 @@
} }
} }
} }
/*::ng-deep .mat-tab-body-content {
height: 100%;
overflow: unset;
}*/
.mat-menu-item { .mat-menu-item {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -298,6 +298,7 @@ export class OrganizationComponent
this.isVisible this.isVisible
) { ) {
this.isInitList = true; this.isInitList = true;
this.vsDeptUser.refresh();
} }
} }

View File

@ -22,65 +22,5 @@ $tablet-s-width: 768px;
width: 50%; width: 50%;
min-width: 50%; min-width: 50%;
} }
.mat-tab-header-pagination {
display: none;
}
} }
} }
::ng-deep .footer-fix {
position: absolute;
bottom: 0;
min-height: 40px;
width: 100%;
flex-direction: column;
box-sizing: border-box;
display: flex;
border-top: 1px solid #dddddd;
.btn-box {
height: 50px;
padding-bottom: 10px;
width: 100%;
background-color: #ffffff;
button {
margin: 5px;
font-size: 0.9em;
padding: 0 12px;
}
}
.mat-paginator-page-size {
@media screen and (max-width: #{$tablet-s-width}), (max-height: 800px) {
display: none;
}
}
}
/*right-drawer tab 레이아웃
::ng-deep .rightDrawer-tab {
.mat-tab-labels {
display: flex;
width: 100%;
border-bottom: 2px solid #dddddd;
flex: 1 1 auto;
justify-content: space-around;
width: 100%;
padding: 0;
min-width: 0 !important;
.mat-tab-label {
width: 50%;
}
}
.mat-tab-header-pagination.mat-tab-header-pagination-disabled {
display: none !important;
}
.message-tab {
position: relative;
height: 100%;
& > .mat-tab-header {
width: 100%;
.mat-tab-label {
min-width: 33%;
}
}
}*/

View File

@ -100,6 +100,7 @@
</div> </div>
<div class="search-list"> <div class="search-list">
<perfect-scrollbar class="album-scrollbar"> <perfect-scrollbar class="album-scrollbar">
<div class="albumlist-content">
<div <div
*ngFor="let fileInfo of filteredList" *ngFor="let fileInfo of filteredList"
class="img-item" class="img-item"
@ -160,6 +161,7 @@
</dd> </dd>
</dl> </dl>
</div> </div>
</div>
</perfect-scrollbar> </perfect-scrollbar>
</div> </div>
<div <div

View File

@ -115,30 +115,25 @@ $tablet-s-width: 768px;
} }
} }
::ng-deep .album-scrollbar { .albumlist-content {
.ps { display: flex;
.ps-content { flex-flow: wrap;
display: flex; height: auto;
flex-flow: wrap; justify-content: stretch;
height: auto; align-content: space-between;
justify-content: stretch; width: 100%;
align-content: space-between; .img-item {
width: 100%; cursor: pointer;
margin-bottom: 10px;
position: relative;
width: 32%;
margin-right: 2%;
&:nth-child(3n + 0) {
margin-right: 0;
} }
} }
} }
.img-item {
cursor: pointer;
margin-bottom: 10px;
position: relative;
width: 32%;
margin-right: 2%;
&:nth-child(3n + 0) {
margin-right: 0;
}
}
.preview-image, .preview-image,
.preview-video { .preview-video {
max-height: 140px; max-height: 140px;

View File

@ -148,6 +148,32 @@ $tablet-s-width: 768px;
font-size: 1em; font-size: 1em;
} }
} }
.footer-fix {
position: absolute;
bottom: 0;
min-height: 40px;
width: 100%;
flex-direction: column;
box-sizing: border-box;
display: flex;
border-top: 1px solid #dddddd;
.btn-box {
height: 50px;
padding-bottom: 10px;
width: 100%;
background-color: #ffffff;
button {
margin: 5px;
font-size: 0.9em;
padding: 0 12px;
}
}
.mat-paginator-page-size {
@media screen and (max-width: #{$tablet-s-width}), (max-height: 800px) {
display: none;
}
}
}
.mat-paginator-container { .mat-paginator-container {
display: flex; display: flex;

View File

@ -95,27 +95,6 @@
} }
} }
/*::ng-deep .mat-paginator {
.mat-paginator-container {
justify-content: center;
}
.mat-paginator-navigation-first {
order: 1;
}
.mat-paginator-navigation-previous {
order: 2;
}
// override material paginator page switch
.mat-paginator-range-label {
order: 3;
}
.mat-paginator-navigation-next {
order: 4;
}
.mat-paginator-navigation-last {
order: 5;
}
}*/
.mat-form-field-appearance-legacy { .mat-form-field-appearance-legacy {
.mat-form-field-infix { .mat-form-field-infix {
padding: 6px; padding: 6px;

View File

@ -1,131 +1,3 @@
/*.clipboard-frame {
padding: 16px;
height: 100%;
min-width: 500px;
position: relative;
.mat-dialog-container {
position: relative;
}
.mat-card-header {
position: relative;
width: 100%;
border-bottom: 1px solid #dddddd;
margin-bottom: 12px;
.btn-dialog-close {
font-size: 20px;
display: flex;
margin-left: auto;
align-self: flex-start;
color: #444444;
}
}
.mat-card-content {
flex: 0 0 auto;
display: flex;
align-items: flex-start;
height: calc(100% - 100px);
border-bottom: 1px solid #dddddd;
.setting-tab {
position: relative;
width: 100%;
height: 100%;
.title-text {
padding-left: 5px;
}
.mat-tab-group {
flex-direction: row;
.mat-tab-header {
width: 160px;
.mat-tab-labels {
flex-direction: column;
.mat-tab-label {
padding: 0 10px;
align-content: flex-start;
text-align: left;
align-items: self-start;
justify-content: flex-start;
}
}
.mat-ink-bar {
display: none;
}
}
}
}
}
.button-farm {
text-align: right;
position: absolute;
width: 100%;
bottom: 10px;
.mat-primary {
margin-left: 4px;
}
}
}
::ng-deep .clipboard-tab {
.mat-tab-group {
position: relative;
height: 100%;
width: 100%;
.mat-tab-header {
width: 170px;
flex-flow: column;
border-right: 1px solid #dddddd;
.mat-tab-label-container {
.mat-tab-list {
.mat-tab-labels {
border-bottom: 0;
//padding-right: 10px;
.mat-tab-label {
padding: 0 10px;
}
}
}
}
}
.mat-tab-body-wrapper {
.mat-tab-body {
.mat-tab-body-conten {
position: relative;
width: 100%;
height: 100%;
.mat-list-base {
position: relative;
}
}
}
}
}
}
::ng-deep .setting-category {
.mat-list-base {
position: relative;
.mat-list-item {
font-size: 15px;
.mat-tab-header {
border-right: none;
}
}
.mat-divider {
//margin-top: 10px;
}
.mat-subheader {
font-weight: 600;
}
}
}
*/
.clipboard-frame { .clipboard-frame {
padding: 16px; padding: 16px;
height: 100%; height: 100%;

View File

@ -156,7 +156,7 @@
} }
} }
:ng-deep .dialog-creat-chat { /*:ng-deep .dialog-creat-chat {
& > .mat-tab-body-wrapper { & > .mat-tab-body-wrapper {
.mat-tab-body { .mat-tab-body {
height: 380px; height: 380px;
@ -170,8 +170,4 @@
} }
} }
} }
/*::ng-deep .ps-content { */
.cdk-virtual-scroll-viewport {
height: 100%;
}
}*/

View File

@ -16,6 +16,7 @@
<mat-icon>add</mat-icon> <mat-icon>add</mat-icon>
<span class="mat-fab__label">{{ 'group.addNew' | translate }}</span> <span class="mat-fab__label">{{ 'group.addNew' | translate }}</span>
</button> </button>
<div *ngIf="isShowAddGroupField" class="input-groupname-box"> <div *ngIf="isShowAddGroupField" class="input-groupname-box">
<form name="inputForm" [formGroup]="inputForm" novalidate> <form name="inputForm" [formGroup]="inputForm" novalidate>
<mat-form-field <mat-form-field
@ -33,7 +34,6 @@
value="" value=""
formControlName="groupName" formControlName="groupName"
/> />
<button <button
mat-button mat-button
matSuffix matSuffix
@ -43,10 +43,22 @@
> >
<mat-icon>close</mat-icon> <mat-icon>close</mat-icon>
</button> </button>
<mat-hint align="end" <mat-hint align="end"
>{{ inputGroupName.value?.length || 0 }}/20</mat-hint >{{ inputGroupName.value?.length || 0 }}/20</mat-hint
> >
<mat-error
*ngIf="inputForm.get('groupName').hasError('groupNameBanned')"
>
{{
'group.errors.bannedWords'
| translate: { bannedWords: bannedWords.join(',') }
}}
</mat-error>
<mat-error
*ngIf="inputForm.get('groupName').hasError('groupNameSamed')"
>
{{ 'group.errors.sameNameExist' | translate }}
</mat-error>
</mat-form-field> </mat-form-field>
</form> </form>

View File

@ -33,6 +33,7 @@
width: 40px; width: 40px;
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
margin-top: -8px;
} }
.mat-fab__label { .mat-fab__label {
color: #212121; color: #212121;
@ -71,7 +72,3 @@
} }
} }
} }
::ng-deep .mat-mini-fab .mat-button-wrapper {
padding: 0;
}

View File

@ -5,7 +5,7 @@ import {
MatSelectionList, MatSelectionList,
MatSelectionListChange MatSelectionListChange
} from '@angular/material'; } from '@angular/material';
import { Observable, combineLatest } from 'rxjs'; import { Observable, combineLatest, Subscription } from 'rxjs';
import { Store, select } from '@ngrx/store'; import { Store, select } from '@ngrx/store';
import { map, take } from 'rxjs/operators'; import { map, take } from 'rxjs/operators';
@ -20,8 +20,14 @@ import {
} from '@ucap-webmessenger/ui'; } from '@ucap-webmessenger/ui';
import { GroupDetailData, UserInfo } from '@ucap-webmessenger/protocol-sync'; import { GroupDetailData, UserInfo } from '@ucap-webmessenger/protocol-sync';
import { environment } from '../../../../../environments/environment'; import { environment } from '../../../../../environments/environment';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService, TranslateParser } from '@ngx-translate/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import {
FormGroup,
FormBuilder,
Validators,
ValidatorFn,
AbstractControl
} from '@angular/forms';
import { StringUtil } from '@ucap-webmessenger/core'; import { StringUtil } from '@ucap-webmessenger/core';
export interface SelectGroupDialogData { export interface SelectGroupDialogData {
@ -43,6 +49,10 @@ export class SelectGroupDialogComponent implements OnInit {
groupName: string; groupName: string;
inputForm: FormGroup; inputForm: FormGroup;
bannedWords: string[] = [];
groupListSubscription: Subscription;
groupList: GroupDetailData[];
constructor( constructor(
public dialogRef: MatDialogRef< public dialogRef: MatDialogRef<
SelectGroupDialogData, SelectGroupDialogData,
@ -52,8 +62,34 @@ export class SelectGroupDialogComponent implements OnInit {
private store: Store<any>, private store: Store<any>,
private dialogService: DialogService, private dialogService: DialogService,
private translateService: TranslateService, private translateService: TranslateService,
private translateParser: TranslateParser,
private formBuilder: FormBuilder private formBuilder: FormBuilder
) {} ) {
const banKeys: string[] = [
'group.nameFavorite',
'group.nameMyDept',
'group.nameDefault'
];
const langs = ['ko', 'en'];
langs.forEach(lang => {
this.translateService
.getTranslation(lang)
.pipe(take(1))
.subscribe(
translation => {
banKeys.forEach(banKey => {
this.bannedWords.push(
this.translateParser.getValue(translation, banKey)
);
});
},
error => {},
() => {}
);
});
}
@ViewChild('groups', { static: true }) groups: MatSelectionList; @ViewChild('groups', { static: true }) groups: MatSelectionList;
groupBuddyList$: Observable< groupBuddyList$: Observable<
@ -64,7 +100,15 @@ export class SelectGroupDialogComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.inputForm = this.formBuilder.group({ this.inputForm = this.formBuilder.group({
groupName: ['', [Validators.required, StringUtil.checkSpecialCharacter()]] groupName: [
'',
[
Validators.required,
StringUtil.checkSpecialCharacter(),
this.checkBanWords(),
this.checkSameName()
]
]
}); });
this.groups.selectionChange.subscribe((s: MatSelectionListChange) => { this.groups.selectionChange.subscribe((s: MatSelectionListChange) => {
@ -82,6 +126,8 @@ export class SelectGroupDialogComponent implements OnInit {
) )
]).pipe( ]).pipe(
map(([buddyList, groupList]) => { map(([buddyList, groupList]) => {
this.groupList = groupList;
// sort.. // sort..
if (!!groupList && groupList.length > 0) { if (!!groupList && groupList.length > 0) {
const tempOrderArr: GroupDetailData[] = []; const tempOrderArr: GroupDetailData[] = [];
@ -214,4 +260,31 @@ export class SelectGroupDialogComponent implements OnInit {
} }
return false; return false;
} }
checkBanWords(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
if (!control || !control.value) {
return null;
}
const ban =
-1 < this.bannedWords.indexOf((control.value as string).trim());
return ban ? { groupNameBanned: { value: control.value } } : null;
};
}
checkSameName(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
if (
!control ||
!control.value ||
!this.groupList ||
0 === this.groupList.length
) {
return null;
}
const v = (control.value as string).trim();
const ban = -1 < this.groupList.findIndex(g => g.name === v);
return ban ? { groupNameSamed: { value: control.value } } : null;
};
}
} }

View File

@ -23,10 +23,6 @@
} }
} }
::ng-deep .mat-mini-fab .mat-button-wrapper {
padding: 0;
}
.contents { .contents {
height: 380px; height: 380px;
.message-contents { .message-contents {
@ -46,7 +42,7 @@
} }
} }
::ng-deep .message-container { .message-container {
background-color: #ffffff !important; background-color: #ffffff !important;
.message-info { .message-info {
/*.profile { /*.profile {

View File

@ -151,7 +151,9 @@ export class IntegratedSearchDialogComponent implements OnInit, OnDestroy {
const response = res as DeptUserResponse; const response = res as DeptUserResponse;
// 검색 결과 처리. // 검색 결과 처리.
this.searchUserInfos = searchUserInfos; this.searchUserInfos = searchUserInfos.sort((a, b) =>
a.name < b.name ? -1 : a.name > b.name ? 1 : 0
);
this.totalCount = response.pageTotalCount; this.totalCount = response.pageTotalCount;
this.pageCurrent = response.pageCurrent; this.pageCurrent = response.pageCurrent;

View File

@ -68,6 +68,9 @@
text-align: left; text-align: left;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
&.mat-tab-label-active {
opacity: 1;
}
} }
} }
.mat-ink-bar { .mat-ink-bar {
@ -80,57 +83,3 @@
border-left: 1px solid #dddddd; border-left: 1px solid #dddddd;
} }
} }
/*::ng-deep .setting-tab {
.mat-tab-group {
.mat-tab-header {
width: 160px;
flex-flow: column;
flex: 0 0 auto;
border-right: 1px solid #dddddd;
.mat-tab-label-container {
.mat-tab-list {
.mat-tab-labels {
border-bottom: 0;
//padding-right: 10px;
.mat-tab-label {
padding: 0 10px;
}
}
}
}
}
.mat-tab-body-wrapper {
.mat-tab-body {
.mat-tab-body-conten {
position: relative;
width: 100%;
height: 100%;
.mat-list-base {
position: relative;
}
}
}
}
}
}
::ng-deep .setting-category {
.mat-list-base {
position: relative;
.mat-list-item {
font-size: 15px;
.mat-tab-header {
border-right: none;
}
}
.mat-divider {
//margin-top: 10px;
}
.mat-subheader {
font-weight: 600;
}
}
}
*/

View File

@ -6,6 +6,7 @@
<div class="btn-area"> <div class="btn-area">
<ucap-integrated-search-form <ucap-integrated-search-form
*ngIf="!!loginRes" *ngIf="!!loginRes"
[searchWord]="integratedSearchWord"
(search)="onIntegratedSearch($event)" (search)="onIntegratedSearch($event)"
class="input-lineless integrated-search" class="input-lineless integrated-search"
> >

View File

@ -42,6 +42,7 @@
height: 100%; height: 100%;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
margin-right: 10px;
} }
.app-layout-native-title-bar-link { .app-layout-native-title-bar-link {
@ -54,7 +55,7 @@
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
align-items: center; align-items: center;
height:100%; height: 100%;
.button { .button {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
outline: 0; outline: 0;

View File

@ -125,6 +125,8 @@ export class TopBarComponent implements OnInit, OnDestroy {
@ViewChild('profileMenu', { static: true }) @ViewChild('profileMenu', { static: true })
profileMenu: MatMenu; profileMenu: MatMenu;
integratedSearchWord = '';
constructor( constructor(
private store: Store<any>, private store: Store<any>,
@Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService, @Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService,
@ -570,19 +572,24 @@ export class TopBarComponent implements OnInit, OnDestroy {
); );
} }
onIntegratedSearch(keyword: string) { async onIntegratedSearch(keyword: string) {
if (!keyword || keyword.trim().length === 0) { if (!keyword || keyword.trim().length === 0) {
return; return;
} }
this.dialogService.open< this.integratedSearchWord = keyword;
const result = await this.dialogService.open<
IntegratedSearchDialogComponent, IntegratedSearchDialogComponent,
IntegratedSearchDialogData, IntegratedSearchDialogData,
IntegratedSearchDialogResult IntegratedSearchDialogResult
>(IntegratedSearchDialogComponent, { >(IntegratedSearchDialogComponent, {
data: { data: {
keyword keyword
} },
restoreFocus: false
}); });
this.integratedSearchWord = '';
} }
} }

View File

@ -82,7 +82,7 @@ export const reducer = createReducer(
// tslint:disable-next-line: forin // tslint:disable-next-line: forin
for (const key in state.room.entities) { for (const key in state.room.entities) {
const value = state.room.entities[key]; const value = state.room.entities[key];
unReadCount += value.noReadCnt; unReadCount += isNaN(value.noReadCnt) ? 0 : value.noReadCnt;
} }
action.roomList.map(item => (unReadCount += item.noReadCnt)); action.roomList.map(item => (unReadCount += item.noReadCnt));
@ -304,7 +304,7 @@ export const reducer = createReducer(
for (const key in state.room.entities) { for (const key in state.room.entities) {
if (key !== action.roomSeq) { if (key !== action.roomSeq) {
const value = state.room.entities[key]; const value = state.room.entities[key];
unReadCount += value.noReadCnt; unReadCount += isNaN(value.noReadCnt) ? 0 : value.noReadCnt;
} }
} }
} else { } else {

View File

@ -89,7 +89,7 @@ export const decodeInfoData: ProtocolDecoder<InfoData> = (
finalEventMessage: info[4], finalEventMessage: info[4],
finalEventDate: info[5], finalEventDate: info[5],
joinUserCount: Number(info[6]), joinUserCount: Number(info[6]),
noReadCnt: Number(info[7]), noReadCnt: isNaN(info[7]) ? 0 : Number(info[7]),
receiveAlarm: info[8] !== 'N' ? true : false, receiveAlarm: info[8] !== 'N' ? true : false,
isJoinRoom: info[9] === 'Y' ? true : false, isJoinRoom: info[9] === 'Y' ? true : false,
expiredFileStdSeq: Number(info[10]), expiredFileStdSeq: Number(info[10]),

View File

@ -83,7 +83,7 @@ export const decodeRoomData: ProtocolDecoder<RoomData> = (
finalEventMessage: info[4], finalEventMessage: info[4],
finalEventDate: info[5], finalEventDate: info[5],
joinUserCount: Number(info[6]), joinUserCount: Number(info[6]),
noReadCnt: Number(info[7]), noReadCnt: isNaN(info[7]) ? 0 : Number(info[7]),
receiveAlarm: info[8] !== 'N' ? true : false, receiveAlarm: info[8] !== 'N' ? true : false,
isJoinRoom: info[9] === 'Y' ? true : false, isJoinRoom: info[9] === 'Y' ? true : false,
expiredFileStdSeq: Number(info[10]), expiredFileStdSeq: Number(info[10]),

View File

@ -27,7 +27,6 @@
(click)="onClickStickerSelector()" (click)="onClickStickerSelector()"
matTooltip="{{ 'chat.btnSticker' | translate }}" matTooltip="{{ 'chat.btnSticker' | translate }}"
> >
<!--<mat-icon>sentiment_satisfied_alt</mat-icon>-->
<i class="mid mdi-emoticon-happy-outline"></i> <i class="mid mdi-emoticon-happy-outline"></i>
</button> </button>
@ -37,16 +36,6 @@
(click)="onClickTranslation()" (click)="onClickTranslation()"
matTooltip="{{ 'chat.btnTranslate' | translate }}" matTooltip="{{ 'chat.btnTranslate' | translate }}"
> >
<!--<mat-icon>g_translate</mat-icon>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
>
<path
d="M7.41 9l2.24 2.24-.83 2L6 10.4l-3.3 3.3-1.4-1.42L4.58 9l-.88-.88c-.53-.53-1-1.3-1.3-2.12h2.2c.15.28.33.53.51.7l.89.9.88-.88C7.48 6.1 8 4.84 8 4H0V2h5V0h2v2h5v2h-2c0 1.37-.74 3.15-1.7 4.12L7.4 9zm3.84 8L10 20H8l5-12h2l5 12h-2l-1.25-3h-5.5zm.83-2h3.84L14 10.4 12.08 15z"
/>
</svg>-->
<svg <svg
id="레이어_1" id="레이어_1"
data-name="레이어 1" data-name="레이어 1"
@ -112,24 +101,12 @@
</mat-form-field> </mat-form-field>
<button <button
class="send-message-button bg-accent-darkest" class="send-message-button icon-button bg-accent-darkest"
mat-icon-button mat-icon-button
type="submit" type="submit"
aria-label="Send message" aria-label="Send message"
> >
<svg <i class="mid mid-30 mdi-arrow-up"></i>
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="round"
>
<path d="M12 19V6M5 12l7-7 7 7" />
</svg>
</button> </button>
</form> </form>
</div> </div>

View File

@ -57,23 +57,19 @@ textarea[name='message'] {
padding-top: 0; padding-top: 0;
} }
::ng-deep .send-message-button { .send-message-button {
margin-left: 20px; margin-left: 20px;
line-height: unset;
@media screen and (max-width: #{$tablet-l-width}), (max-height: 800px) { @media screen and (max-width: #{$tablet-l-width}), (max-height: 800px) {
margin-left: 6px; margin-left: 6px;
} }
.mat-button-wrapper {
display: flex;
justify-content: center;
justify-items: center;
}
i { i {
display: inline-block; display: inline-block;
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 50%; border-radius: 50%;
line-height: 40px; line-height: 40px;
font-size: 20px; font-size: 24px;
color: #ffffff; color: #ffffff;
&:hover { &:hover {
opacity: 0.8; opacity: 0.8;

View File

@ -178,6 +178,13 @@ export class MessagesComponent implements OnInit, OnDestroy {
this.loginRes = loginRes; this.loginRes = loginRes;
}); });
this.roomInfoSubscription = this.roomInfo$.subscribe(roomInfo => { this.roomInfoSubscription = this.roomInfo$.subscribe(roomInfo => {
if (
!this.roomInfo ||
(!!this.roomInfo && this.roomInfo.roomSeq !== roomInfo.roomSeq)
) {
this.baseEventSeq = 0;
}
this.roomInfo = roomInfo; this.roomInfo = roomInfo;
this.showMore = false; this.showMore = false;
@ -196,7 +203,6 @@ export class MessagesComponent implements OnInit, OnDestroy {
!this.roomInfo || !this.roomInfo ||
(!!this.roomInfo && this.roomInfo.roomSeq !== roomInfo.roomSeq) (!!this.roomInfo && this.roomInfo.roomSeq !== roomInfo.roomSeq)
) { ) {
this.baseEventSeq = 0;
this.initEventMore(); this.initEventMore();
} }
}); });

View File

@ -49,14 +49,24 @@
</span> </span>
</dt> </dt>
<dd> <dd>
<mat-icon <span
*ngIf="!!message.resType && message.resType === ContentType.Image"
class="icon-img"
><i class="mid mid-18 mdi-image-outline"></i
></span>
<span
*ngIf="!!message.resType && message.resType === ContentType.AttachFile"
class="icon-img"
><i class="mid mid-18 mdi-floppy"></i
></span>
<!--<mat-icon
*ngIf="!!message.resType && message.resType === ContentType.Image" *ngIf="!!message.resType && message.resType === ContentType.Image"
>image</mat-icon >image</mat-icon
> >
<mat-icon <mat-icon
*ngIf="!!message.resType && message.resType === ContentType.AttachFile" *ngIf="!!message.resType && message.resType === ContentType.AttachFile"
>attach_file</mat-icon >attach_file</mat-icon
> >-->
<span class="final-message">{{ message.title }}</span> <span class="final-message">{{ message.title }}</span>
</dd> </dd>
</dl> </dl>

View File

@ -26,8 +26,8 @@
width: 100%; width: 100%;
position: relative; position: relative;
justify-items: center; justify-items: center;
.mat-icon{ .icon-img {
font-size:18px; margin-right: 6px;
} }
.final-message { .final-message {
white-space: nowrap; white-space: nowrap;

View File

@ -91,7 +91,7 @@
} }
} }
::ng-deep .ucap-message-write { .ucap-message-write {
padding: 0; padding: 0;
.add-row { .add-row {
display: flex; display: flex;
@ -100,19 +100,18 @@
margin-bottom: 10px; margin-bottom: 10px;
border-bottom: 1px solid #dddddd; border-bottom: 1px solid #dddddd;
.mat-mini-fab { .mat-mini-fab {
.mat-button-wrapper { .mat-icon {
padding: 0; width: 40px;
.mat-icon { height: 40px;
width: 40px; line-height: 40px;
height: 40px; margin-top: -8px;
line-height: 40px; }
} .mat-fab__label {
.mat-fab__label { color: #212121;
color: #212121; margin-left: 10px;
margin-left: 10px;
}
} }
} }
.receiver-sum { .receiver-sum {
margin-left: auto; margin-left: auto;
} }

View File

@ -1,47 +1,3 @@
/*::ng-deep .mat-list-base {
.theme-select.mat-list-item {
position: relative;
height: 160px;
.mat-list-item-content {
flex-direction: column;
}
}
}
::ng-deep .theme-list {
position: relative;
display: flex;
flex-flow: row;
width: 100%;
margin: 10px;
height: auto !important;
.mat-tab-header {
position: relative;
width: 100% !important;
.mat-tab-labels {
position: relative;
width: 100%;
flex-flow: row !important;
.mat-tab-label {
width: 140px;
height: 120px;
.mat-tab-label-content {
position: relative;
flex-flow: column;
width: 100%;
}
}
}
.mat-ink-bar {
display: none;
}
}
.mat-tab-body-wrapper {
border-left: none;
}
}
*/
.mat-list-item { .mat-list-item {
margin-bottom: 10px; margin-bottom: 10px;
} }
@ -77,6 +33,9 @@
.mat-tab-label { .mat-tab-label {
width: 140px; width: 140px;
height: 120px; height: 120px;
&.mat-tab-label-active {
opacity: 1;
}
.mat-tab-label-content { .mat-tab-label-content {
position: relative; position: relative;
flex-flow: column; flex-flow: column;

View File

@ -54,6 +54,12 @@ mat-icon {
height: 24px; height: 24px;
line-height: 24px; line-height: 24px;
} }
&-30 {
font-size: 30px;
width: 30px;
height: 30px;
line-height: 30px;
}
} }
&:before { &:before {
display: inline-block; display: inline-block;
@ -69,3 +75,6 @@ mat-icon {
opacity: 0.7; opacity: 0.7;
} }
} }
.circle-button {
border-radius: 50%;
}

View File

@ -3,11 +3,19 @@
display: flex; display: flex;
flex-flow: row; flex-flow: row;
align-items: center; align-items: center;
width: 250px; width: 240px;
max-width: 250px; max-width: 240px;
color: #ffffff; color: #ffffff;
font-size: 0.9em; font-size: 0.88rem;
color: #2d3a4a;
background-color: #ffffff;
padding: 4px 10px;
border-radius: 3px;
.icon-img { .icon-img {
flex: 0 0 auto; flex: 0 0 auto;
} }
.mat-form-field {
font-size: 0.88rem;
color: #333333;
}
} }

View File

@ -21,6 +21,7 @@ $tablet-s-width: 768px;
} }
} }
} }
.sticker-item-box { .sticker-item-box {
flex-wrap: wrap; flex-wrap: wrap;
padding: 10px 20px 0; padding: 10px 20px 0;