Merge branch 'master' of https://git.loafle.net/ucap-web/next-ucap-messenger
This commit is contained in:
commit
6f4c450b33
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -298,6 +298,7 @@ export class OrganizationComponent
|
|||||||
this.isVisible
|
this.isVisible
|
||||||
) {
|
) {
|
||||||
this.isInitList = true;
|
this.isInitList = true;
|
||||||
|
this.vsDeptUser.refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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%;
|
||||||
|
@ -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%;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
|
@ -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;
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
@ -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"
|
||||||
>
|
>
|
||||||
|
@ -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;
|
||||||
|
@ -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 = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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]),
|
||||||
|
@ -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]),
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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%;
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user