Files
pixel.horse/src/ts/components/shared/friends-box/friends-box.ts
T
2019-08-28 21:15:02 -07:00

62 lines
1.9 KiB
TypeScript

import { Component, Output, EventEmitter } from '@angular/core';
import { faCog, faUserFriends, faUserPlus, faUserCog, faCircle } from '../../../client/icons';
import { Model, Friend } from '../../services/model';
import { PonyTownGame } from '../../../client/game';
import { PlayerAction, Action } from '../../../common/interfaces';
import { removeItem } from '../../../common/utils';
import { SettingsService } from '../../services/settingsService';
@Component({
selector: 'friends-box',
templateUrl: 'friends-box.pug',
styleUrls: ['friends-box.scss'],
})
export class FriendsBox {
readonly friendsIcon = faUserFriends;
readonly cogIcon = faCog;
readonly addToPartyIcon = faUserPlus;
readonly userOptionsIcon = faUserCog;
readonly statusIcon = faCircle;
@Output() sendMessage = new EventEmitter<Friend>();
removing?: Friend;
constructor(private settings: SettingsService, private model: Model, private game: PonyTownGame) {
}
get friends() {
return this.model.friends;
}
get hidden() {
return !!this.settings.account.hidden;
}
toggleHidden() {
this.settings.account.hidden = !this.settings.account.hidden;
this.settings.saveAccountSettings(this.settings.account);
}
toggle() {
this.removing = undefined;
}
sendMessageTo(friend: Friend) {
this.sendMessage.emit(friend);
}
inviteToParty(friend: Friend) {
this.game.send(server => server.playerAction(friend.entityId, PlayerAction.InviteToParty, undefined));
}
remove(friend: Friend) {
this.removing = friend;
}
cancelRemove() {
this.removing = undefined;
}
confirmRemove() {
if (this.removing && this.model.friends) {
const { accountId } = this.removing;
this.game.send(server => server.actionParam(Action.RemoveFriend, accountId));
removeItem(this.model.friends, this.removing);
this.removing = undefined;
}
}
setStatus(status: string) {
this.settings.account.hidden = status === 'invisible';
this.settings.saveAccountSettings(this.settings.account);
}
}