changing of status message is implemented
This commit is contained in:
parent
99f7fa9767
commit
993003ef60
|
@ -335,41 +335,55 @@
|
||||||
<button mat-menu-item (click)="onClickStatusBusy($event, 1)">
|
<button mat-menu-item (click)="onClickStatusBusy($event, 1)">
|
||||||
<span class="presence pcOther"> </span>
|
<span class="presence pcOther"> </span>
|
||||||
<ucap-inline-edit-input
|
<ucap-inline-edit-input
|
||||||
#statusMessage1
|
|
||||||
(click)="$event.stopPropagation()"
|
(click)="$event.stopPropagation()"
|
||||||
|
(apply)="onApplyStatusMessage(1, statusMessage1.value)"
|
||||||
>
|
>
|
||||||
<span ucapInlineEditInput="view">{{ loginRes?.statusMessage1 }}</span>
|
<span ucapInlineEditInput="view">{{ loginRes?.statusMessage1 }}</span>
|
||||||
<span ucapInlineEditInput="edit"><input matInput type="text"/></span>
|
<span ucapInlineEditInput="edit"
|
||||||
|
><input
|
||||||
|
matInput
|
||||||
|
#statusMessage1
|
||||||
|
type="text"
|
||||||
|
[value]="loginRes?.statusMessage1"
|
||||||
|
/></span>
|
||||||
</ucap-inline-edit-input>
|
</ucap-inline-edit-input>
|
||||||
<!-- {{ loginRes?.statusMessage1 }} -->
|
|
||||||
</button>
|
</button>
|
||||||
<!-- <button
|
|
||||||
mat-menu-item
|
|
||||||
class="edit"
|
|
||||||
(click)="$event.stopPropagation(); statusMessage1.editMode = true"
|
|
||||||
></button> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="setting">
|
<div class="setting">
|
||||||
<button mat-menu-item (click)="onClickStatusBusy($event, 2)">
|
<button mat-menu-item (click)="onClickStatusBusy($event, 2)">
|
||||||
<span class="presence pcOther"> </span>
|
<span class="presence pcOther"> </span>
|
||||||
{{ loginRes?.statusMessage2 }}
|
<ucap-inline-edit-input
|
||||||
|
(click)="$event.stopPropagation()"
|
||||||
|
(apply)="onApplyStatusMessage(2, statusMessage2.value)"
|
||||||
|
>
|
||||||
|
<span ucapInlineEditInput="view">{{ loginRes?.statusMessage2 }}</span>
|
||||||
|
<span ucapInlineEditInput="edit"
|
||||||
|
><input
|
||||||
|
matInput
|
||||||
|
#statusMessage2
|
||||||
|
type="text"
|
||||||
|
[value]="loginRes?.statusMessage2"
|
||||||
|
/></span>
|
||||||
|
</ucap-inline-edit-input>
|
||||||
</button>
|
</button>
|
||||||
<button
|
|
||||||
mat-menu-item
|
|
||||||
class="edit"
|
|
||||||
(click)="onClickChangeStatusBusy($event, 2)"
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="setting">
|
<div class="setting">
|
||||||
<button mat-menu-item (click)="onClickStatusBusy($event, 3)">
|
<button mat-menu-item (click)="onClickStatusBusy($event, 3)">
|
||||||
<span class="presence pcOther"> </span>
|
<span class="presence pcOther"> </span>
|
||||||
{{ loginRes?.statusMessage3 }}
|
<ucap-inline-edit-input
|
||||||
|
(click)="$event.stopPropagation()"
|
||||||
|
(apply)="onApplyStatusMessage(3, statusMessage3.value)"
|
||||||
|
>
|
||||||
|
<span ucapInlineEditInput="view">{{ loginRes?.statusMessage3 }}</span>
|
||||||
|
<span ucapInlineEditInput="edit"
|
||||||
|
><input
|
||||||
|
matInput
|
||||||
|
#statusMessage3
|
||||||
|
type="text"
|
||||||
|
[value]="loginRes?.statusMessage3"
|
||||||
|
/></span>
|
||||||
|
</ucap-inline-edit-input>
|
||||||
</button>
|
</button>
|
||||||
<button
|
|
||||||
mat-menu-item
|
|
||||||
class="edit"
|
|
||||||
(click)="onClickChangeStatusBusy($event, 3)"
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
|
|
||||||
|
@ -377,28 +391,11 @@
|
||||||
<div mat-menu-item (click)="$event.stopPropagation()">
|
<div mat-menu-item (click)="$event.stopPropagation()">
|
||||||
{{ 'presence.settingOfAwayTime' | translate }}
|
{{ 'presence.settingOfAwayTime' | translate }}
|
||||||
</div>
|
</div>
|
||||||
<div mat-menu-item>
|
<mat-radio-group aria-label="Select an option" [value]="myIdleCheckTime">
|
||||||
<mat-radio-button
|
<div mat-menu-item *ngFor="let awayTime of awayTimeList">
|
||||||
value="10"
|
<mat-radio-button [value]="awayTime" (change)="onChangeAwayTime($event)">
|
||||||
[checked]="myIdleCheckTime === 10"
|
{{ awayTime }}{{ 'common.units.minute' | translate }}</mat-radio-button
|
||||||
(change)="onChangeAwayTime($event)"
|
>
|
||||||
>10{{ 'common.units.minute' | translate }}</mat-radio-button
|
</div>
|
||||||
>
|
</mat-radio-group>
|
||||||
</div>
|
|
||||||
<div mat-menu-item>
|
|
||||||
<mat-radio-button
|
|
||||||
value="20"
|
|
||||||
[checked]="myIdleCheckTime === 20"
|
|
||||||
(change)="onChangeAwayTime($event)"
|
|
||||||
>20{{ 'common.units.minute' | translate }}</mat-radio-button
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<div mat-menu-item>
|
|
||||||
<mat-radio-button
|
|
||||||
value="30"
|
|
||||||
[checked]="myIdleCheckTime === 30"
|
|
||||||
(change)="onChangeAwayTime($event)"
|
|
||||||
>30{{ 'common.units.minute' | translate }}</mat-radio-button
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
|
|
|
@ -60,6 +60,7 @@ import { DOCUMENT } from '@angular/common';
|
||||||
import { MatMenu, MatRadioChange } from '@angular/material';
|
import { MatMenu, MatRadioChange } from '@angular/material';
|
||||||
import { StatusCode, StatusType } from '@ucap-webmessenger/core';
|
import { StatusCode, StatusType } from '@ucap-webmessenger/core';
|
||||||
import { StatusInfo } from '@ucap-webmessenger/protocol-status';
|
import { StatusInfo } from '@ucap-webmessenger/protocol-status';
|
||||||
|
import { UserInfoUpdateType } from '@ucap-webmessenger/protocol-info';
|
||||||
|
|
||||||
const zoomFactors = [60, 70, 85, 100, 120, 145, 170, 200];
|
const zoomFactors = [60, 70, 85, 100, 120, 145, 170, 200];
|
||||||
|
|
||||||
|
@ -95,6 +96,8 @@ export class TopBarComponent implements OnInit, OnDestroy {
|
||||||
WebLinkType = WebLinkType;
|
WebLinkType = WebLinkType;
|
||||||
StatusCode = StatusCode;
|
StatusCode = StatusCode;
|
||||||
|
|
||||||
|
readonly awayTimeList = [10, 20, 30];
|
||||||
|
|
||||||
@ViewChild('profileMenu', { static: true })
|
@ViewChild('profileMenu', { static: true })
|
||||||
profileMenu: MatMenu;
|
profileMenu: MatMenu;
|
||||||
|
|
||||||
|
@ -169,12 +172,19 @@ export class TopBarComponent implements OnInit, OnDestroy {
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
if (!!this.loginResSubscription) {
|
if (!!this.loginResSubscription) {
|
||||||
this.loginResSubscription.unsubscribe();
|
this.loginResSubscription.unsubscribe();
|
||||||
|
this.loginResSubscription = undefined;
|
||||||
}
|
}
|
||||||
if (!!this.myStatusSubscription) {
|
if (!!this.myStatusSubscription) {
|
||||||
this.myStatusSubscription.unsubscribe();
|
this.myStatusSubscription.unsubscribe();
|
||||||
|
this.myStatusSubscription = undefined;
|
||||||
}
|
}
|
||||||
if (!!this.myIdleCheckTimeSubscription) {
|
if (!!this.myIdleCheckTimeSubscription) {
|
||||||
this.myIdleCheckTimeSubscription.unsubscribe();
|
this.myIdleCheckTimeSubscription.unsubscribe();
|
||||||
|
this.myIdleCheckTimeSubscription = undefined;
|
||||||
|
}
|
||||||
|
if (!!this.zoomSubscription) {
|
||||||
|
this.zoomSubscription.unsubscribe();
|
||||||
|
this.zoomSubscription = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,6 +462,32 @@ export class TopBarComponent implements OnInit, OnDestroy {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onApplyStatusMessage(index: number, statusMessage: string) {
|
||||||
|
this.logger.debug('StatusMessage', index, statusMessage);
|
||||||
|
|
||||||
|
let updateType: UserInfoUpdateType;
|
||||||
|
switch (index) {
|
||||||
|
case 1:
|
||||||
|
updateType = UserInfoUpdateType.StatusMessage1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
updateType = UserInfoUpdateType.StatusMessage2;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
updateType = UserInfoUpdateType.StatusMessage3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.store.dispatch(
|
||||||
|
AuthenticationStore.infoUser({
|
||||||
|
req: { type: updateType, info: statusMessage }
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
onClickChangeStatusBusy(event: Event, index: number) {
|
onClickChangeStatusBusy(event: Event, index: number) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {
|
||||||
UserPasswordSetRequest,
|
UserPasswordSetRequest,
|
||||||
UserPasswordSetResponse
|
UserPasswordSetResponse
|
||||||
} from '@ucap-webmessenger/protocol-service';
|
} from '@ucap-webmessenger/protocol-service';
|
||||||
|
import { UserRequest, UserResponse } from '@ucap-webmessenger/protocol-info';
|
||||||
|
|
||||||
export const webLogin = createAction(
|
export const webLogin = createAction(
|
||||||
'[Account::Authentication] Web Login',
|
'[Account::Authentication] Web Login',
|
||||||
|
@ -122,3 +123,20 @@ export const updateLoginRes = createAction(
|
||||||
loginRes: LoginResponse;
|
loginRes: LoginResponse;
|
||||||
}>()
|
}>()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const infoUser = createAction(
|
||||||
|
'[Account::Authentication] Info User',
|
||||||
|
props<{ req: UserRequest }>()
|
||||||
|
);
|
||||||
|
|
||||||
|
export const infoUserSuccess = createAction(
|
||||||
|
'[Account::Authentication] Info User Success',
|
||||||
|
props<{
|
||||||
|
res: UserResponse;
|
||||||
|
}>()
|
||||||
|
);
|
||||||
|
|
||||||
|
export const infoUserFailure = createAction(
|
||||||
|
'[Account::Authentication] Info User Failure',
|
||||||
|
props<{ error: any }>()
|
||||||
|
);
|
||||||
|
|
|
@ -41,7 +41,10 @@ import {
|
||||||
logoutInitialize,
|
logoutInitialize,
|
||||||
userPasswordSet,
|
userPasswordSet,
|
||||||
userPasswordSetSuccess,
|
userPasswordSetSuccess,
|
||||||
userPasswordSetFailure
|
userPasswordSetFailure,
|
||||||
|
infoUser,
|
||||||
|
infoUserSuccess,
|
||||||
|
infoUserFailure
|
||||||
} from './actions';
|
} from './actions';
|
||||||
import {
|
import {
|
||||||
LoginInfo,
|
LoginInfo,
|
||||||
|
@ -77,6 +80,10 @@ import { DaesangUrlInfoResponse } from '@ucap-webmessenger/api-external';
|
||||||
import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
|
import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
|
||||||
import { DaesangCipherService, WebLinkType } from '@ucap-webmessenger/daesang';
|
import { DaesangCipherService, WebLinkType } from '@ucap-webmessenger/daesang';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
import {
|
||||||
|
InfoProtocolService,
|
||||||
|
UserResponse
|
||||||
|
} from '@ucap-webmessenger/protocol-info';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class Effects {
|
export class Effects {
|
||||||
|
@ -482,6 +489,23 @@ export class Effects {
|
||||||
{ dispatch: false }
|
{ dispatch: false }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
infoUser$ = createEffect(() =>
|
||||||
|
this.actions$.pipe(
|
||||||
|
ofType(infoUser),
|
||||||
|
map(action => action.req),
|
||||||
|
exhaustMap(req =>
|
||||||
|
this.infoProtocolService.user(req).pipe(
|
||||||
|
map((res: UserResponse) => {
|
||||||
|
return infoUserSuccess({
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
catchError(error => of(infoUserFailure({ error })))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private actions$: Actions,
|
private actions$: Actions,
|
||||||
private ngZone: NgZone,
|
private ngZone: NgZone,
|
||||||
|
@ -493,6 +517,7 @@ export class Effects {
|
||||||
private appAuthenticationService: AppAuthenticationService,
|
private appAuthenticationService: AppAuthenticationService,
|
||||||
private protocolService: ProtocolService,
|
private protocolService: ProtocolService,
|
||||||
private authenticationProtocolService: AuthenticationProtocolService,
|
private authenticationProtocolService: AuthenticationProtocolService,
|
||||||
|
private infoProtocolService: InfoProtocolService,
|
||||||
private serviceProtocolService: ServiceProtocolService,
|
private serviceProtocolService: ServiceProtocolService,
|
||||||
private translateService: TranslateService,
|
private translateService: TranslateService,
|
||||||
private dialogService: DialogService,
|
private dialogService: DialogService,
|
||||||
|
|
|
@ -6,8 +6,10 @@ import {
|
||||||
initialLoginFailCount,
|
initialLoginFailCount,
|
||||||
logout,
|
logout,
|
||||||
logoutInitialize,
|
logoutInitialize,
|
||||||
updateLoginRes
|
updateLoginRes,
|
||||||
|
infoUserSuccess
|
||||||
} from './actions';
|
} from './actions';
|
||||||
|
import { UserInfoUpdateType } from '@ucap-webmessenger/protocol-info';
|
||||||
|
|
||||||
export const reducer = createReducer(
|
export const reducer = createReducer(
|
||||||
initialState,
|
initialState,
|
||||||
|
@ -39,6 +41,57 @@ export const reducer = createReducer(
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
on(infoUserSuccess, (state, action) => {
|
||||||
|
let loginRes = {
|
||||||
|
...state.loginRes
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (action.res.type) {
|
||||||
|
case UserInfoUpdateType.Image:
|
||||||
|
loginRes = {
|
||||||
|
...loginRes
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case UserInfoUpdateType.Intro:
|
||||||
|
loginRes = {
|
||||||
|
...loginRes
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case UserInfoUpdateType.TelephoneVisible:
|
||||||
|
loginRes = {
|
||||||
|
...loginRes
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case UserInfoUpdateType.StatusMessage1:
|
||||||
|
loginRes = {
|
||||||
|
...loginRes,
|
||||||
|
statusMessage1: action.res.info
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case UserInfoUpdateType.StatusMessage2:
|
||||||
|
loginRes = {
|
||||||
|
...loginRes,
|
||||||
|
statusMessage2: action.res.info
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case UserInfoUpdateType.StatusMessage3:
|
||||||
|
loginRes = {
|
||||||
|
...loginRes,
|
||||||
|
statusMessage3: action.res.info
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
loginRes: {
|
||||||
|
...loginRes
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
|
||||||
on(logoutInitialize, (state, action) => {
|
on(logoutInitialize, (state, action) => {
|
||||||
return {
|
return {
|
||||||
...initialState
|
...initialState
|
||||||
|
|
|
@ -4,7 +4,13 @@ export enum UserInfoUpdateType {
|
||||||
// R: 인트로소개
|
// R: 인트로소개
|
||||||
Intro = 'R',
|
Intro = 'R',
|
||||||
// T: 전화보이기여부
|
// T: 전화보이기여부
|
||||||
TelephoneVisible = 'T'
|
TelephoneVisible = 'T',
|
||||||
|
/** StatusMessage1 */
|
||||||
|
StatusMessage1 = 'S1',
|
||||||
|
/** StatusMessage2 */
|
||||||
|
StatusMessage2 = 'S2',
|
||||||
|
/** StatusMessage3 */
|
||||||
|
StatusMessage3 = 'S3'
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum TelephoneVisibleType {
|
export enum TelephoneVisibleType {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit, Output, EventEmitter } from '@angular/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ucap-inline-edit-input',
|
selector: 'ucap-inline-edit-input',
|
||||||
|
@ -6,6 +6,9 @@ import { Component, OnInit } from '@angular/core';
|
||||||
styleUrls: ['./inline-edit-input.component.scss']
|
styleUrls: ['./inline-edit-input.component.scss']
|
||||||
})
|
})
|
||||||
export class InlineEditInputComponent implements OnInit {
|
export class InlineEditInputComponent implements OnInit {
|
||||||
|
@Output()
|
||||||
|
apply = new EventEmitter<void>();
|
||||||
|
|
||||||
get editMode() {
|
get editMode() {
|
||||||
return this._editMode;
|
return this._editMode;
|
||||||
}
|
}
|
||||||
|
@ -29,5 +32,6 @@ export class InlineEditInputComponent implements OnInit {
|
||||||
|
|
||||||
onClickApply(event: Event) {
|
onClickApply(event: Event) {
|
||||||
this.editMode = false;
|
this.editMode = false;
|
||||||
|
this.apply.emit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user