This commit is contained in:
병준 박 2019-11-05 13:49:14 +09:00
commit fd4561f965
14 changed files with 287 additions and 97 deletions

View File

@ -6,16 +6,22 @@
</button> </button>
</div>--> </div>-->
<!-- <div class="logo">로고</div> --> <!-- <div class="logo">로고</div> -->
<mat-tab-group mat-stretch-tabs animationDuration="0ms" class="global-menu"> <mat-tab-group
<mat-tab> mat-stretch-tabs
animationDuration="0ms"
(selectedTabChange)="onSelectedTabChange($event)"
class="global-menu"
>
<mat-tab [aria-label]="MainMenu.Group">
<ng-template mat-tab-label> <ng-template mat-tab-label>
<mat-icon>group</mat-icon> <mat-icon>group</mat-icon>
</ng-template> </ng-template>
<app-layout-chat-left-sidenav-group <app-layout-chat-left-sidenav-group
class="left-group-side" class="left-group-side"
(newGroupAndMember)="onClickNewGroupAndMember($event)"
></app-layout-chat-left-sidenav-group> ></app-layout-chat-left-sidenav-group>
</mat-tab> </mat-tab>
<mat-tab> <mat-tab [aria-label]="MainMenu.Chat">
<ng-template mat-tab-label> <ng-template mat-tab-label>
<mat-icon <mat-icon
[matBadgeHidden]="(badgeChatUnReadCount$ | async) <= 0" [matBadgeHidden]="(badgeChatUnReadCount$ | async) <= 0"
@ -28,7 +34,7 @@
</ng-template> </ng-template>
<app-layout-chat-left-sidenav-chat></app-layout-chat-left-sidenav-chat> <app-layout-chat-left-sidenav-chat></app-layout-chat-left-sidenav-chat>
</mat-tab> </mat-tab>
<mat-tab> <mat-tab [aria-label]="MainMenu.Organization">
<ng-template mat-tab-label> <ng-template mat-tab-label>
<mat-icon>device_hub</mat-icon> <mat-icon>device_hub</mat-icon>
</ng-template> </ng-template>
@ -39,7 +45,7 @@
class="organization-side" class="organization-side"
></app-layout-chat-left-sidenav-organization> ></app-layout-chat-left-sidenav-organization>
</mat-tab> </mat-tab>
<mat-tab> <mat-tab [aria-label]="MainMenu.Call">
<ng-template mat-tab-label> <ng-template mat-tab-label>
<mat-icon>phone</mat-icon> <mat-icon>phone</mat-icon>
</ng-template> </ng-template>
@ -47,6 +53,7 @@
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>
<ucap-float-action-button <ucap-float-action-button
*ngIf="fabButtonShow"
[fabButtons]="fabButtons" [fabButtons]="fabButtons"
(buttonClick)="onClickFab($event)" (buttonClick)="onClickFab($event)"
></ucap-float-action-button> ></ucap-float-action-button>

View File

@ -12,13 +12,22 @@ import { Store, select } from '@ngrx/store';
import * as AppStore from '@app/store'; import * as AppStore from '@app/store';
import * as ChatStore from '@app/store/messenger/chat'; import * as ChatStore from '@app/store/messenger/chat';
import * as SyncStore from '@app/store/messenger/sync';
import { UserInfo } from '@ucap-webmessenger/protocol-sync'; import { UserInfo } from '@ucap-webmessenger/protocol-sync';
import { import {
UserInfoSS, UserInfoSS,
UserInfoF, UserInfoF,
UserInfoDN UserInfoDN
} from '@ucap-webmessenger/protocol-query'; } from '@ucap-webmessenger/protocol-query';
import { BuiltinType } from '@angular/compiler'; import { MatTabChangeEvent, MatTabGroup } from '@angular/material';
export enum MainMenu {
Group = 'GROUP',
Chat = 'CAHT',
Organization = 'ORGANIZATION',
Call = 'CALL',
Conversation = 'CONVERSATION'
}
@Component({ @Component({
selector: 'app-layout-messenger-left-side', selector: 'app-layout-messenger-left-side',
@ -33,8 +42,11 @@ export class LeftSideComponent implements OnInit {
selectedUserList: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[] = []; selectedUserList: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[] = [];
/** FAB */ /** FAB */
fabButtonShow = true;
fabButtons: { icon: string; tooltip?: string; divisionType?: string }[]; fabButtons: { icon: string; tooltip?: string; divisionType?: string }[];
MainMenu = MainMenu;
constructor( constructor(
private store: Store<any>, private store: Store<any>,
private dialogService: DialogService, private dialogService: DialogService,
@ -45,18 +57,8 @@ export class LeftSideComponent implements OnInit {
this.badgeChatUnReadCount$ = this.store.pipe( this.badgeChatUnReadCount$ = this.store.pipe(
select(AppStore.MessengerSelector.SyncSelector.selectChatUnreadCount) select(AppStore.MessengerSelector.SyncSelector.selectChatUnreadCount)
); );
this.fabButtons = [
{ this.setFabInitial(MainMenu.Group);
icon: 'timer',
tooltip: 'New Timer Chat',
divisionType: 'NEW_TIMER_CHAT'
},
{
icon: 'chat',
tooltip: 'New Chat',
divisionType: 'NEW_CHAT'
}
];
} }
async onClickNewChat(type: string = 'NORMAL') { async onClickNewChat(type: string = 'NORMAL') {
@ -88,6 +90,89 @@ export class LeftSideComponent implements OnInit {
} }
} }
async onClickNewGroupAndMember() {
const result = await this.dialogService.open<
CreateChatDialogComponent,
CreateChatDialogData,
CreateChatDialogResult
>(CreateChatDialogComponent, {
width: '600px',
data: {
type: UserSelectDialogType.NewGroup,
title: 'New Group'
}
});
if (!!result && !!result.choice && result.choice) {
if (
!!result.selectedUserList &&
result.selectedUserList.length > 0 &&
result.groupName.trim().length > 0
) {
const userSeqs: number[] = [];
result.selectedUserList.map(user => userSeqs.push(user.seq));
this.store.dispatch(
SyncStore.createGroupAndBuddy({
groupName: result.groupName,
trgtUserSeq: userSeqs
})
);
}
}
}
onSelectedTabChange(event: MatTabChangeEvent) {
this.setFabInitial(event.tab.ariaLabel);
}
setFabInitial(type: string) {
switch (type) {
case MainMenu.Group:
{
this.fabButtonShow = true;
this.fabButtons = [
{
icon: 'add',
tooltip: 'New Group Add',
divisionType: 'GROUP_NEW_ADD'
}
];
}
break;
case MainMenu.Chat:
{
this.fabButtonShow = true;
this.fabButtons = [
{
icon: 'timer',
tooltip: 'New Timer Chat',
divisionType: 'CHAT_NEW_TIMER_ADD'
},
{
icon: 'chat',
tooltip: 'New Chat',
divisionType: 'CAHT_NEW_ADD'
}
];
}
break;
// case MainMenu.Organization:
// {
// }
// break;
// case MainMenu.Call:
// {
// }
// break;
default: {
this.fabButtonShow = false;
}
}
}
onCheckAllUser(params: { onCheckAllUser(params: {
isChecked: boolean; isChecked: boolean;
userInfos: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[]; userInfos: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[];
@ -137,12 +222,18 @@ export class LeftSideComponent implements OnInit {
}; };
switch (btn.divisionType) { switch (btn.divisionType) {
case 'NEW_CHAT': case 'GROUP_NEW_ADD':
{
this.onClickNewGroupAndMember();
}
break;
case 'CAHT_NEW_ADD':
{ {
this.onClickNewChat('NORMAL'); this.onClickNewChat('NORMAL');
} }
break; break;
case 'NEW_TIMER_CHAT': case 'CHAT_NEW_TIMER_ADD':
{ {
this.onClickNewChat('TIMER'); this.onClickNewChat('TIMER');
} }

View File

@ -1,7 +1,12 @@
import { StatusProtocolService } from './../../../../../../../ucap-webmessenger-protocol-status/src/lib/services/status-protocol.service';
import { UserSelectDialogType } from './../../../../types/userselect.dialog.type';
import { MatMenuTrigger } from '@angular/material'; import { MatMenuTrigger } from '@angular/material';
import { Component, OnInit, ViewChild, OnDestroy } from '@angular/core'; import {
Component,
OnInit,
ViewChild,
OnDestroy,
EventEmitter,
Output
} from '@angular/core';
import { Observable, combineLatest, Subscription, of } from 'rxjs'; import { Observable, combineLatest, Subscription, of } from 'rxjs';
import { map, tap, catchError, exhaustMap } from 'rxjs/operators'; import { map, tap, catchError, exhaustMap } from 'rxjs/operators';
@ -9,7 +14,6 @@ import { Store, select } from '@ngrx/store';
import * as AppStore from '@app/store'; import * as AppStore from '@app/store';
import * as ChatStore from '@app/store/messenger/chat'; import * as ChatStore from '@app/store/messenger/chat';
import * as QueryStore from '@app/store/messenger/query';
import * as SyncStore from '@app/store/messenger/sync'; import * as SyncStore from '@app/store/messenger/sync';
import * as StatusStore from '@app/store/messenger/status'; import * as StatusStore from '@app/store/messenger/status';
@ -17,12 +21,13 @@ import { NGXLogger } from 'ngx-logger';
import { Company } from '@ucap-webmessenger/api-external'; import { Company } from '@ucap-webmessenger/api-external';
import { SessionStorageService } from '@ucap-webmessenger/web-storage'; import { SessionStorageService } from '@ucap-webmessenger/web-storage';
import { VersionInfo2Response } from '@ucap-webmessenger/api-public'; import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
import { LoginInfo, KEY_LOGIN_INFO } from '@app/types'; import { LoginInfo, KEY_LOGIN_INFO, UserSelectDialogType } from '@app/types';
import { KEY_VER_INFO } from '@app/types/ver-info.type'; import { KEY_VER_INFO } from '@app/types/ver-info.type';
import { ExpansionPanelComponent as GroupExpansionPanelComponent } from '@ucap-webmessenger/ui-group'; import { ExpansionPanelComponent as GroupExpansionPanelComponent } from '@ucap-webmessenger/ui-group';
import { LoginResponse } from '@ucap-webmessenger/protocol-authentication'; import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
import { UserInfo, GroupDetailData } from '@ucap-webmessenger/protocol-sync'; import { UserInfo, GroupDetailData } from '@ucap-webmessenger/protocol-sync';
import { StatusProtocolService } from '@ucap-webmessenger/protocol-status';
import { import {
DeptSearchType, DeptSearchType,
UserInfoSS, UserInfoSS,
@ -59,6 +64,9 @@ import {
animations: ucapAnimations animations: ucapAnimations
}) })
export class GroupComponent implements OnInit, OnDestroy { export class GroupComponent implements OnInit, OnDestroy {
@Output()
newGroupAndMember = new EventEmitter();
@ViewChild('groupExpansionPanel', { static: true }) @ViewChild('groupExpansionPanel', { static: true })
groupExpansionPanel: GroupExpansionPanelComponent; groupExpansionPanel: GroupExpansionPanelComponent;
@ -164,35 +172,7 @@ export class GroupComponent implements OnInit, OnDestroy {
switch (menuType) { switch (menuType) {
case 'GROUP_NEW': case 'GROUP_NEW':
{ {
const result = await this.dialogService.open< this.newGroupAndMember.emit();
CreateChatDialogComponent,
CreateChatDialogData,
CreateChatDialogResult
>(CreateChatDialogComponent, {
width: '600px',
data: {
type: UserSelectDialogType.NewGroup,
title: 'New Group'
}
});
if (!!result && !!result.choice && result.choice) {
if (
!!result.selectedUserList &&
result.selectedUserList.length > 0 &&
result.groupName.trim().length > 0
) {
const userSeqs: number[] = [];
result.selectedUserList.map(user => userSeqs.push(user.seq));
this.store.dispatch(
SyncStore.createGroupAndBuddy({
groupName: result.groupName,
trgtUserSeq: userSeqs
})
);
}
}
} }
break; break;
case 'GROUP_EXPAND_MORE': case 'GROUP_EXPAND_MORE':
@ -361,7 +341,6 @@ export class GroupComponent implements OnInit, OnDestroy {
EditGroupDialogData, EditGroupDialogData,
EditGroupDialogResult EditGroupDialogResult
>(EditGroupDialogComponent, { >(EditGroupDialogComponent, {
data: { data: {
title: 'Group Name Edit', title: 'Group Name Edit',
group group

View File

@ -195,7 +195,8 @@ export class OrganizationComponent implements OnInit, OnDestroy {
/** 전체 체크여부 */ /** 전체 체크여부 */
getCheckedAllUser() { getCheckedAllUser() {
if ( if (
this.selectedDepartmentUserInfoList && !this.selectedDepartmentUserInfoList ||
this.selectedDepartmentUserInfoList.length === 0 ||
this.selectedDepartmentUserInfoList.filter( this.selectedDepartmentUserInfoList.filter(
item => item =>
!( !(
@ -249,7 +250,6 @@ export class OrganizationComponent implements OnInit, OnDestroy {
SelectGroupDialogResult SelectGroupDialogResult
>(SelectGroupDialogComponent, { >(SelectGroupDialogComponent, {
width: '600px', width: '600px',
height: '500px',
data: { data: {
title: 'Group Select' title: 'Group Select'
} }

View File

@ -625,9 +625,6 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
switch (menuType) { switch (menuType) {
case 'ADD_MEMBER': case 'ADD_MEMBER':
{ {
console.log(this.roomInfo);
console.log(this.userInfoList);
const result = await this.dialogService.open< const result = await this.dialogService.open<
CreateChatDialogComponent, CreateChatDialogComponent,
CreateChatDialogData, CreateChatDialogData,
@ -636,39 +633,36 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
width: '600px', width: '600px',
data: { data: {
type: UserSelectDialogType.EditChatMember, type: UserSelectDialogType.EditChatMember,
title: 'Edit Chat Member' title: 'Edit Chat Member',
// , curRoomUser: this.userInfoList.filter(
// curRoomUser: this.userInfoList user => user.seq !== this.loginRes.userSeq
)
} }
}); });
if (!!result && !!result.choice && result.choice) { if (!!result && !!result.choice && result.choice) {
const userSeqs: number[] = []; const userSeqs: number[] = [];
let roomSeq = '';
if ( if (
!!result.selectedUserList && !!result.selectedUserList &&
result.selectedUserList.length > 0 result.selectedUserList.length > 0
) { ) {
result.selectedUserList.map(user => userSeqs.push(user.seq)); result.selectedUserList.map(user => {
userSeqs.push(user.seq);
});
} }
if (!!result.selectedRoom) { if (userSeqs.length > 0) {
roomSeq = result.selectedRoom.roomSeq; // include me
} userSeqs.push(this.loginRes.userSeq);
if (userSeqs.length > 0 || roomSeq.trim().length > 0) { this.store.dispatch(
// this.store.dispatch( RoomStore.inviteOrOpen({
// EventStore.forward({ req: {
// senderSeq: this.loginRes.userSeq, divCd: 'Invite',
// req: { userSeqs
// roomSeq: '-999', }
// eventType: message.type, })
// sentMessage: message.sentMessage );
// },
// trgtUserSeqs: userSeqs,
// trgtRoomSeq: roomSeq
// })
// );
} }
} }
} }

View File

@ -73,7 +73,12 @@
<div *ngIf="searchProcessing"> <div *ngIf="searchProcessing">
<mat-progress-bar mode="indeterminate"></mat-progress-bar> <mat-progress-bar mode="indeterminate"></mat-progress-bar>
</div> </div>
<div class="result-num">검색결과 <span class="text-accent-color">({{ searchUserInfos.length }}명)</span></div> <div class="result-num">
검색결과
<span class="text-accent-color"
>({{ searchUserInfos.length }}명)</span
>
</div>
<ucap-profile-user-list-item <ucap-profile-user-list-item
*ngFor="let userInfo of searchUserInfos" *ngFor="let userInfo of searchUserInfos"
[userInfo]="userInfo" [userInfo]="userInfo"
@ -141,15 +146,17 @@
<mat-chip-list aria-label="User selection"> <mat-chip-list aria-label="User selection">
<mat-chip <mat-chip
*ngFor="let userInfo of selectedUserList" *ngFor="let userInfo of selectedUserList"
color="primary" [selected]="getChipsRemoveYn(userInfo)"
selected
(removed)="onClickDeleteUser(userInfo)" (removed)="onClickDeleteUser(userInfo)"
> >
{{ userInfo.name }} {{ userInfo.name }}
<mat-icon matChipRemove>clear</mat-icon> <mat-icon matChipRemove *ngIf="getChipsRemoveYn(userInfo)"
>clear</mat-icon
>
</mat-chip> </mat-chip>
</mat-chip-list> </mat-chip-list>
</div> </div>
<span>{{ selectedUserList.length }}명</span>
</div> </div>
</mat-card-content> </mat-card-content>
<mat-card-actions class="button-farm flex-row"> <mat-card-actions class="button-farm flex-row">

View File

@ -57,12 +57,22 @@ export interface CreateChatDialogData {
/** CASE :: EventForward */ /** CASE :: EventForward */
ignoreRoom?: RoomInfo[]; ignoreRoom?: RoomInfo[];
/** CASE :: EditCharMember */ /** CASE :: EditCharMember */
curRoomUser?: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[]; curRoomUser?: (
| UserInfo
| UserInfoSS
| UserInfoF
| UserInfoDN
| RoomUserInfo)[];
} }
export interface CreateChatDialogResult { export interface CreateChatDialogResult {
choice: boolean; choice: boolean;
selectedUserList?: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[]; selectedUserList?: (
| UserInfo
| UserInfoSS
| UserInfoF
| UserInfoDN
| RoomUserInfo)[];
selectedRoom?: RoomInfo; selectedRoom?: RoomInfo;
groupName?: string; groupName?: string;
oldGroup?: GroupDetailData; oldGroup?: GroupDetailData;
@ -117,7 +127,12 @@ export class CreateChatDialogComponent implements OnInit, OnDestroy {
roomSubscription: Subscription; roomSubscription: Subscription;
// 수집 데이터 // 수집 데이터
selectedUserList: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[] = []; selectedUserList: (
| UserInfo
| UserInfoSS
| UserInfoF
| UserInfoDN
| RoomUserInfo)[] = [];
isShowSelectedUserList = true; isShowSelectedUserList = true;
selectedRoom: RoomInfo; selectedRoom: RoomInfo;
@ -208,6 +223,10 @@ export class CreateChatDialogComponent implements OnInit, OnDestroy {
this.inputForm = this.formBuilder.group({ this.inputForm = this.formBuilder.group({
groupName: ['', [Validators.required]] groupName: ['', [Validators.required]]
}); });
if (this.data.type === UserSelectDialogType.EditChatMember) {
this.selectedUserList = this.data.curRoomUser;
}
} }
ngOnDestroy(): void { ngOnDestroy(): void {
@ -239,6 +258,21 @@ export class CreateChatDialogComponent implements OnInit, OnDestroy {
} }
} }
getChipsRemoveYn(userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN) {
if (
this.data.type === UserSelectDialogType.EditChatMember &&
!!this.data.curRoomUser &&
this.data.curRoomUser.length > 0
) {
return !(
this.data.curRoomUser.filter(user => user.seq === userInfo.seq).length >
0
);
} else {
return true;
}
}
onSelectedTabChange(tabChangeEvent: MatTabChangeEvent): void { onSelectedTabChange(tabChangeEvent: MatTabChangeEvent): void {
if (tabChangeEvent.index === 2) { if (tabChangeEvent.index === 2) {
this.selectedUserList = []; this.selectedUserList = [];

View File

@ -4,9 +4,12 @@
</div> </div>
<mat-drawer-container class="contents" autosize> <mat-drawer-container class="contents" autosize>
<div class="messages"> <div class="messages">
<app-layout-messenger-intro <!-- <app-layout-messenger-intro
(click)="drawer.toggle()" (click)="drawer.toggle()"
*ngIf="!(this.selectedChat$ | async)" *ngIf="!(this.selectedChat$ | async)"
></app-layout-messenger-intro> -->
<app-layout-messenger-intro
*ngIf="!(this.selectedChat$ | async)"
></app-layout-messenger-intro> ></app-layout-messenger-intro>
<app-layout-messenger-messages <app-layout-messenger-messages
*ngIf="!!(this.selectedChat$ | async)" *ngIf="!!(this.selectedChat$ | async)"
@ -17,7 +20,7 @@
</mat-drawer> </mat-drawer>
</mat-drawer-container> </mat-drawer-container>
<div class="right-side"> <!-- <div class="right-side">
<app-layout-messenger-right-side></app-layout-messenger-right-side> <app-layout-messenger-right-side></app-layout-messenger-right-side>
</div> </div> -->
</div> </div>

View File

@ -8,6 +8,7 @@
width: 380px; width: 380px;
height: 100%; height: 100%;
flex: 0 0 auto; flex: 0 0 auto;
position: relative;
} }
.contents { .contents {
flex: 1 1 auto; flex: 1 1 auto;

View File

@ -15,7 +15,9 @@ import {
ExitRequest, ExitRequest,
ExitResponse, ExitResponse,
Open3Request, Open3Request,
Open3Response Open3Response,
InviteRequest,
InviteResponse
} from '@ucap-webmessenger/protocol-room'; } from '@ucap-webmessenger/protocol-room';
import { ReadNotification } from '@ucap-webmessenger/protocol-event'; import { ReadNotification } from '@ucap-webmessenger/protocol-event';
@ -115,6 +117,19 @@ export const openTimerFailure = createAction(
props<{ error: any }>() props<{ error: any }>()
); );
export const inviteOrOpen = createAction(
'[Messenger::Room] Invite or Open',
props<{ req: OpenRequest }>()
);
export const inviteSuccess = createAction(
'[Messenger::Room] Invite Success',
props<InviteResponse>()
);
export const inviteFailure = createAction(
'[Messenger::Room] Invite Failure',
props<{ error: any }>()
);
export const exit = createAction( export const exit = createAction(
'[Messenger::Room] Exit', '[Messenger::Room] Exit',
props<ExitRequest>() props<ExitRequest>()

View File

@ -30,7 +30,9 @@ import {
UpdateResponse, UpdateResponse,
OpenResponse, OpenResponse,
ExitResponse, ExitResponse,
Open3Response Open3Response,
RoomType,
InviteResponse
} from '@ucap-webmessenger/protocol-room'; } from '@ucap-webmessenger/protocol-room';
import * as ChatStore from '@app/store/messenger/chat'; import * as ChatStore from '@app/store/messenger/chat';
@ -55,7 +57,10 @@ import {
exitFailure, exitFailure,
openTimer, openTimer,
openTimerSuccess, openTimerSuccess,
openTimerFailure openTimerFailure,
inviteOrOpen,
inviteSuccess,
inviteFailure
} from './actions'; } from './actions';
import { SessionStorageService } from '@ucap-webmessenger/web-storage'; import { SessionStorageService } from '@ucap-webmessenger/web-storage';
import { LoginInfo, KEY_LOGIN_INFO } from '@app/types'; import { LoginInfo, KEY_LOGIN_INFO } from '@app/types';
@ -204,6 +209,59 @@ export class Effects {
) )
); );
inviteOrOpen$ = createEffect(() =>
this.actions$.pipe(
ofType(inviteOrOpen),
withLatestFrom(
this.store.pipe(
select((state: any) => state.messenger.room.roomInfo as RoomInfo)
)
),
exhaustMap(([action, roomInfo]) => {
if (roomInfo.roomType === RoomType.Single) {
// Re Open
return this.roomProtocolService.open(action.req).pipe(
map((res: OpenResponse) => {
return openSuccess({ res });
}),
catchError(error => of(openFailure({ error })))
);
} else if (roomInfo.roomType === RoomType.Multi) {
// Invite
return this.roomProtocolService
.invite({
roomSeq: roomInfo.roomSeq,
inviteUserSeqs: action.req.userSeqs
})
.pipe(
map((res: InviteResponse) => {
return inviteSuccess(res);
}),
catchError(error => of(inviteFailure({ error })))
);
} else {
return of(inviteFailure({ error: 'room type is error!!' }));
}
})
)
);
inviteSuccess$ = createEffect(() =>
this.actions$.pipe(
ofType(inviteSuccess),
map(action => {
return ChatStore.selectedRoom({ roomSeq: action.roomSeq });
// const loginInfo = this.sessionStorageService.get<LoginInfo>(
// KEY_LOGIN_INFO
// );
// return info({
// roomSeq: action.roomSeq,
// isDetail: true,
// localeCode: loginInfo.localeCode
// });
})
)
);
exit$ = createEffect(() => exit$ = createEffect(() =>
this.actions$.pipe( this.actions$.pipe(
ofType(exit), ofType(exit),

View File

@ -1,4 +1,4 @@
<div class="list-item"> <div class="list-item" matRipple>
<dl class="item-default"> <dl class="item-default">
<dt> <dt>
<img <img

View File

@ -8,7 +8,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon'; import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input'; import { MatInputModule } from '@angular/material/input';
import { ListItemComponent } from './components/list-item.component'; import { ListItemComponent } from './components/list-item.component';
import { MatBadgeModule, MatCheckboxModule } from '@angular/material'; import { MatBadgeModule, MatCheckboxModule, MatRippleModule } from '@angular/material';
import { UCapUiModule } from '@ucap-webmessenger/ui'; import { UCapUiModule } from '@ucap-webmessenger/ui';
@ -25,6 +25,7 @@ const SERVICES = [];
MatFormFieldModule, MatFormFieldModule,
MatIconModule, MatIconModule,
MatInputModule, MatInputModule,
MatRippleModule,
MatBadgeModule, MatBadgeModule,
MatCheckboxModule, MatCheckboxModule,

View File

@ -1,5 +1,5 @@
.fab-container { .fab-container {
position: fixed; position: absolute;
bottom: 15px; bottom: 15px;
right: 15px; right: 15px;
z-index: 100; z-index: 100;