<template> <modal :buttons="false" ref="dialog" @open="onOpen" @close="onClose" style="width:98%" dialogClass="ads-dialog"> <template slot="title"> Channel Ads for <user :character="character">{{character.name}}</user> </template> <div class="row ad-viewer" ref="pageBody"> <template v-for="message in messages"> <h3>#{{message.channelName}} <span class="message-time">{{formatTime(message.datePosted)}}</span></h3> <div class="border-bottom"> <bbcode :text="message.message"></bbcode> </div> </template> </div> </modal> </template> <script lang="ts"> import * as _ from 'lodash'; import { Component, Hook, Prop, Watch } from '@f-list/vue-ts'; import CustomDialog from '../../components/custom_dialog'; import Modal from '../../components/Modal.vue'; import { Character } from '../../fchat/interfaces'; import { AdCachedPosting } from '../../learn/ad-cache'; import core from '../core'; import {formatTime} from '../common'; import UserView from '../UserView.vue'; import { BBCodeView } from '../../bbcode/view'; @Component({ components: {modal: Modal, user: UserView, bbcode: BBCodeView(core.bbCodeParser)} }) export default class AdView extends CustomDialog { @Prop({required: true}) readonly character!: Character; messages: AdCachedPosting[] = []; formatTime = formatTime; @Watch('character') onNameUpdate(): void { this.update(); } @Hook('mounted') onMounted(): void { this.update(); } update(): void { if (!this.character) { this.messages = []; return; } const cache = core.cache.adCache.get(this.character.name); this.messages = ((cache) ? _.takeRight(cache.posts, 10).reverse() : []) as AdCachedPosting[]; } async onOpen(): Promise<void> { // empty return; } async onClose(): Promise<void> { // empty return; } } </script>