스티커 레이어 초안 작성.
This commit is contained in:
parent
47ff1d3e4a
commit
3b1a077ef9
@ -160,6 +160,15 @@
|
|||||||
class="file-drop-zone"
|
class="file-drop-zone"
|
||||||
></ucap-file-upload-queue>
|
></ucap-file-upload-queue>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="sticker-selector-container">
|
||||||
|
<ucap-sticker-selector
|
||||||
|
*ngIf="isShowStickerSelector"
|
||||||
|
class="sticer-selector-zone"
|
||||||
|
></ucap-sticker-selector>
|
||||||
|
<div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- / CHAT CONTENT -->
|
<!-- / CHAT CONTENT -->
|
||||||
|
|
||||||
@ -171,6 +180,7 @@
|
|||||||
[fileUploadQueue]="fileUploadQueue"
|
[fileUploadQueue]="fileUploadQueue"
|
||||||
(send)="onSendMessage($event)"
|
(send)="onSendMessage($event)"
|
||||||
(sendFiles)="onFileSelected($event)"
|
(sendFiles)="onFileSelected($event)"
|
||||||
|
(toggleStickerSelector)="onShowToggleStickerSelector($event)"
|
||||||
></ucap-chat-form>
|
></ucap-chat-form>
|
||||||
<!-- / REPLY FORM -->
|
<!-- / REPLY FORM -->
|
||||||
</div>
|
</div>
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: #ffffff !important;
|
background-color: #ffffff !important;
|
||||||
border-bottom: 1px solid #dddddd;
|
border-bottom: 1px solid #dddddd;
|
||||||
box-shadow: 0 3px 6px rgba(0,0,0,.16);
|
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);
|
||||||
.chat-header {
|
.chat-header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -95,9 +95,25 @@
|
|||||||
|
|
||||||
.file-drop-zone {
|
.file-drop-zone {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
padding:10px 10px 0 10px;
|
padding: 10px 10px 0 10px;
|
||||||
background-color: rgb(54, 54, 54, 0.8);
|
background-color: rgb(54, 54, 54, 0.8);
|
||||||
bottom:0
|
bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sticker-selector-container {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: transparent;
|
||||||
|
|
||||||
|
.sticer-selector-zone {
|
||||||
|
position: absolute;
|
||||||
|
padding: 10px 10px 0 10px;
|
||||||
|
background-color: rgb(54, 54, 54, 0.8);
|
||||||
|
bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,6 +147,8 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
|||||||
/** Timer 대화방의 대화 삭제를 위한 interval */
|
/** Timer 대화방의 대화 삭제를 위한 interval */
|
||||||
interval: any;
|
interval: any;
|
||||||
|
|
||||||
|
isShowStickerSelector = false;
|
||||||
|
|
||||||
snackBarPreviewEvent: MatSnackBarRef<SimpleSnackBar>;
|
snackBarPreviewEvent: MatSnackBarRef<SimpleSnackBar>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -484,6 +486,10 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onShowToggleStickerSelector() {
|
||||||
|
this.isShowStickerSelector = !this.isShowStickerSelector;
|
||||||
|
}
|
||||||
|
|
||||||
async onFileViewer(fileInfo: FileEventJson) {
|
async onFileViewer(fileInfo: FileEventJson) {
|
||||||
const result = await this.dialogService.open<
|
const result = await this.dialogService.open<
|
||||||
FileViewerDialogComponent,
|
FileViewerDialogComponent,
|
||||||
|
171
projects/ucap-webmessenger-core/src/lib/utils/sticker.util.ts
Normal file
171
projects/ucap-webmessenger-core/src/lib/utils/sticker.util.ts
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
export interface StickerInfo {
|
||||||
|
index: string;
|
||||||
|
title: string;
|
||||||
|
iconPath: string;
|
||||||
|
iconPathOn: string;
|
||||||
|
useYn: boolean;
|
||||||
|
fileInfos: StickerFilesInfo[];
|
||||||
|
}
|
||||||
|
export interface StickerFilesInfo {
|
||||||
|
index: string;
|
||||||
|
path: string;
|
||||||
|
}
|
||||||
|
const StickerMap: StickerInfo[] = [
|
||||||
|
{
|
||||||
|
index: '00',
|
||||||
|
title: 'History',
|
||||||
|
iconPath: 'sticker_cate00.png',
|
||||||
|
iconPathOn: 'sticker_cate00_f.png',
|
||||||
|
useYn: true,
|
||||||
|
fileInfos: []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
index: '01',
|
||||||
|
title: '꼼므',
|
||||||
|
iconPath: 'sticker_cate01.png',
|
||||||
|
iconPathOn: 'sticker_cate01_f.png',
|
||||||
|
useYn: true,
|
||||||
|
fileInfos: [
|
||||||
|
{ index: '01_01', path: 'sticker_s_01_01.png' },
|
||||||
|
{ index: '01_02', path: 'sticker_s_01_02.png' },
|
||||||
|
{ index: '01_03', path: 'sticker_s_01_03.png' },
|
||||||
|
{ index: '01_04', path: 'sticker_s_01_04.png' },
|
||||||
|
{ index: '01_05', path: 'sticker_s_01_05.png' },
|
||||||
|
{ index: '01_06', path: 'sticker_s_01_06.png' },
|
||||||
|
{ index: '01_07', path: 'sticker_s_01_07.png' },
|
||||||
|
{ index: '01_08', path: 'sticker_s_01_08.png' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
index: '02',
|
||||||
|
title: '까미',
|
||||||
|
iconPath: 'sticker_cate02.png',
|
||||||
|
iconPathOn: 'sticker_cate02_f.png',
|
||||||
|
useYn: true,
|
||||||
|
fileInfos: [
|
||||||
|
{ index: '02_02', path: 'sticker_s_02_02.png' },
|
||||||
|
{ index: '02_03', path: 'sticker_s_02_03.png' },
|
||||||
|
{ index: '02_04', path: 'sticker_s_02_04.png' },
|
||||||
|
{ index: '02_05', path: 'sticker_s_02_05.png' },
|
||||||
|
{ index: '02_06', path: 'sticker_s_02_06.png' },
|
||||||
|
{ index: '02_07', path: 'sticker_s_02_07.png' },
|
||||||
|
{ index: '02_08', path: 'sticker_s_02_08.png' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
index: '03',
|
||||||
|
title: '왈도',
|
||||||
|
iconPath: 'sticker_cate03.png',
|
||||||
|
iconPathOn: 'sticker_cate03_f.png',
|
||||||
|
useYn: true,
|
||||||
|
fileInfos: [
|
||||||
|
{ index: '03_01', path: 'sticker_s_03_01.png' },
|
||||||
|
{ index: '03_02', path: 'sticker_s_03_02.png' },
|
||||||
|
{ index: '03_03', path: 'sticker_s_03_03.png' },
|
||||||
|
{ index: '03_04', path: 'sticker_s_03_04.png' },
|
||||||
|
{ index: '03_05', path: 'sticker_s_03_05.png' },
|
||||||
|
{ index: '03_06', path: 'sticker_s_03_06.png' },
|
||||||
|
{ index: '03_07', path: 'sticker_s_03_07.png' },
|
||||||
|
{ index: '03_08', path: 'sticker_s_03_08.png' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
index: '04',
|
||||||
|
title: '웅쓰',
|
||||||
|
iconPath: 'sticker_cate04.png',
|
||||||
|
iconPathOn: 'sticker_cate04_f.png',
|
||||||
|
useYn: true,
|
||||||
|
fileInfos: [
|
||||||
|
{ index: '04_01', path: 'sticker_s_04_01.png' },
|
||||||
|
{ index: '04_02', path: 'sticker_s_04_02.png' },
|
||||||
|
{ index: '04_03', path: 'sticker_s_04_03.png' },
|
||||||
|
{ index: '04_04', path: 'sticker_s_04_04.png' },
|
||||||
|
{ index: '04_05', path: 'sticker_s_04_05.png' },
|
||||||
|
{ index: '04_06', path: 'sticker_s_04_06.png' },
|
||||||
|
{ index: '04_07', path: 'sticker_s_04_07.png' },
|
||||||
|
{ index: '04_08', path: 'sticker_s_04_08.png' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
index: '05',
|
||||||
|
title: '말풍선',
|
||||||
|
iconPath: 'sticker_cate05.png',
|
||||||
|
iconPathOn: 'sticker_cate05_f.png',
|
||||||
|
useYn: true,
|
||||||
|
fileInfos: [
|
||||||
|
{ index: '05_01', path: 'sticker_s_05_01.png' },
|
||||||
|
{ index: '05_02', path: 'sticker_s_05_02.png' },
|
||||||
|
{ index: '05_03', path: 'sticker_s_05_03.png' },
|
||||||
|
{ index: '05_04', path: 'sticker_s_05_04.png' },
|
||||||
|
{ index: '05_05', path: 'sticker_s_05_05.png' },
|
||||||
|
{ index: '05_06', path: 'sticker_s_05_06.png' },
|
||||||
|
{ index: '05_07', path: 'sticker_s_05_07.png' },
|
||||||
|
{ index: '05_08', path: 'sticker_s_05_08.png' },
|
||||||
|
{ index: '05_09', path: 'sticker_s_05_09.png' },
|
||||||
|
{ index: '05_10', path: 'sticker_s_05_10.png' },
|
||||||
|
{ index: '05_11', path: 'sticker_s_05_11.png' },
|
||||||
|
{ index: '05_12', path: 'sticker_s_05_12.png' },
|
||||||
|
{ index: '05_13', path: 'sticker_s_05_13.png' },
|
||||||
|
{ index: '05_14', path: 'sticker_s_05_14.png' },
|
||||||
|
{ index: '05_15', path: 'sticker_s_05_15.png' },
|
||||||
|
{ index: '05_16', path: 'sticker_s_05_16.png' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
index: '12',
|
||||||
|
title: '황소',
|
||||||
|
iconPath: 'sticker_cate12.png',
|
||||||
|
iconPathOn: 'sticker_cate12_f.png',
|
||||||
|
useYn: true,
|
||||||
|
fileInfos: [
|
||||||
|
{ index: '12_01', path: 'sticker_s_12_01.gif' },
|
||||||
|
{ index: '12_02', path: 'sticker_s_12_02.gif' },
|
||||||
|
{ index: '12_03', path: 'sticker_s_12_03.gif' },
|
||||||
|
{ index: '12_04', path: 'sticker_s_12_04.gif' },
|
||||||
|
{ index: '12_05', path: 'sticker_s_12_05.gif' },
|
||||||
|
{ index: '12_06', path: 'sticker_s_12_06.gif' },
|
||||||
|
{ index: '12_07', path: 'sticker_s_12_07.gif' },
|
||||||
|
{ index: '12_08', path: 'sticker_s_12_08.gif' },
|
||||||
|
{ index: '12_09', path: 'sticker_s_12_09.gif' },
|
||||||
|
{ index: '12_10', path: 'sticker_s_12_10.gif' },
|
||||||
|
{ index: '12_11', path: 'sticker_s_12_11.gif' },
|
||||||
|
{ index: '12_12', path: 'sticker_s_12_12.gif' },
|
||||||
|
{ index: '12_13', path: 'sticker_s_12_13.gif' },
|
||||||
|
{ index: '12_14', path: 'sticker_s_12_14.gif' },
|
||||||
|
{ index: '12_15', path: 'sticker_s_12_15.gif' },
|
||||||
|
{ index: '12_16', path: 'sticker_s_12_16.gif' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const ActiveAndOrdering: string[] = ['00', '01', '02', '03', '04', '05'];
|
||||||
|
|
||||||
|
export class StickerUtil {
|
||||||
|
static getStickerInfoList(): StickerInfo[] {
|
||||||
|
const rtnStickerList: StickerInfo[] = [];
|
||||||
|
|
||||||
|
ActiveAndOrdering.forEach(idx => {
|
||||||
|
const stickerInfos: StickerInfo[] = StickerMap.filter(
|
||||||
|
sticker => sticker.index === idx && sticker.useYn
|
||||||
|
);
|
||||||
|
if (!!stickerInfos && stickerInfos.length > 0) {
|
||||||
|
rtnStickerList.push(stickerInfos[0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return rtnStickerList;
|
||||||
|
}
|
||||||
|
|
||||||
|
static getStickerInfoSub(index: string): StickerFilesInfo[] {
|
||||||
|
const stickerFilesList: StickerFilesInfo[] = [];
|
||||||
|
const stickerInfos: StickerInfo[] = StickerMap.filter(
|
||||||
|
sticker => sticker.index === index && sticker.useYn
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!!stickerInfos && stickerInfos.length > 0) {
|
||||||
|
stickerFilesList.concat(stickerInfos[0].fileInfos);
|
||||||
|
}
|
||||||
|
|
||||||
|
return stickerFilesList;
|
||||||
|
}
|
||||||
|
}
|
@ -22,6 +22,7 @@ export * from './lib/types/video-conference-type.type';
|
|||||||
|
|
||||||
export * from './lib/utils/file.util';
|
export * from './lib/utils/file.util';
|
||||||
export * from './lib/utils/mime.util';
|
export * from './lib/utils/mime.util';
|
||||||
|
export * from './lib/utils/sticker.util';
|
||||||
export * from './lib/utils/string.util';
|
export * from './lib/utils/string.util';
|
||||||
|
|
||||||
export * from './lib/config/host.config';
|
export * from './lib/config/host.config';
|
||||||
|
@ -16,13 +16,17 @@
|
|||||||
(change)="onChangeFileInput()"
|
(change)="onChangeFileInput()"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<button mat-icon-button class="material-icons">
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
class="material-icons"
|
||||||
|
(click)="onClickStickerSelector()"
|
||||||
|
>
|
||||||
<mat-icon>sentiment_satisfied_alt</mat-icon>
|
<mat-icon>sentiment_satisfied_alt</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button mat-icon-button class="material-icons">
|
<!-- <button mat-icon-button class="material-icons">
|
||||||
<mat-icon>g_translate</mat-icon>
|
<mat-icon>g_translate</mat-icon>
|
||||||
</button>
|
</button> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form
|
<form
|
||||||
|
@ -26,6 +26,9 @@ export class FormComponent implements OnInit {
|
|||||||
@Output()
|
@Output()
|
||||||
sendFiles = new EventEmitter<FileUploadItem[]>();
|
sendFiles = new EventEmitter<FileUploadItem[]>();
|
||||||
|
|
||||||
|
@Output()
|
||||||
|
toggleStickerSelector = new EventEmitter<void>();
|
||||||
|
|
||||||
@ViewChild('replyForm', { static: false })
|
@ViewChild('replyForm', { static: false })
|
||||||
replyForm: NgForm;
|
replyForm: NgForm;
|
||||||
|
|
||||||
@ -67,4 +70,8 @@ export class FormComponent implements OnInit {
|
|||||||
|
|
||||||
this.fileInput.nativeElement.value = '';
|
this.fileInput.nativeElement.value = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onClickStickerSelector() {
|
||||||
|
this.toggleStickerSelector.emit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
<p>sticker-selector works!</p>
|
||||||
|
<p *ngFor="let stickerInfo of stickerInfoList">
|
||||||
|
{{ stickerInfo.title }}
|
||||||
|
</p>
|
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { StickerSelectorComponent } from './sticker-selector.component';
|
||||||
|
|
||||||
|
describe('StickerSelectorComponent', () => {
|
||||||
|
let component: StickerSelectorComponent;
|
||||||
|
let fixture: ComponentFixture<StickerSelectorComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ StickerSelectorComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(StickerSelectorComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,22 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import {
|
||||||
|
StickerInfo,
|
||||||
|
StickerFilesInfo,
|
||||||
|
StickerUtil
|
||||||
|
} from '@ucap-webmessenger/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ucap-sticker-selector',
|
||||||
|
templateUrl: './sticker-selector.component.html',
|
||||||
|
styleUrls: ['./sticker-selector.component.scss']
|
||||||
|
})
|
||||||
|
export class StickerSelectorComponent implements OnInit {
|
||||||
|
stickerInfoList: StickerInfo[] = [];
|
||||||
|
stickerFileInfoList: StickerFilesInfo[] = [];
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.stickerInfoList = StickerUtil.getStickerInfoList();
|
||||||
|
}
|
||||||
|
}
|
@ -47,12 +47,14 @@ import {
|
|||||||
} from './pipes/dates.pipe';
|
} from './pipes/dates.pipe';
|
||||||
import { SecondsToMinutesPipe } from './pipes/seconds-to-minutes.pipe';
|
import { SecondsToMinutesPipe } from './pipes/seconds-to-minutes.pipe';
|
||||||
import { LinkyPipe } from './pipes/linky.pipe';
|
import { LinkyPipe } from './pipes/linky.pipe';
|
||||||
|
import { StickerSelectorComponent } from './components/sticker-selector.component';
|
||||||
|
|
||||||
const COMPONENTS = [
|
const COMPONENTS = [
|
||||||
FileUploadQueueComponent,
|
FileUploadQueueComponent,
|
||||||
FloatActionButtonComponent,
|
FloatActionButtonComponent,
|
||||||
FileViewerComponent,
|
FileViewerComponent,
|
||||||
ExpansionPanelComponent,
|
ExpansionPanelComponent,
|
||||||
|
StickerSelectorComponent,
|
||||||
|
|
||||||
BinaryViewerComponent,
|
BinaryViewerComponent,
|
||||||
DocumentViewerComponent,
|
DocumentViewerComponent,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user