You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<template> <v-card class="elevation-0"> <v-card-title> <v-list-item class="grow ps-0"> <v-list-item-avatar> <v-icon large> {{ mdiAccountCircle }} </v-icon> </v-list-item-avatar>
<v-list-item-content> <v-list-item-title>{{ comment.username }}</v-list-item-title> <v-list-item-subtitle> {{ comment.createdAt | dateParse('YYYY-MM-DDTHH:mm:ss') | dateFormat('DD/MM/YYYY HH:mm') }} </v-list-item-subtitle> </v-list-item-content>
<v-row align="center" justify="end" > <v-menu v-if="comment.user == userId" bottom left > <template #activator="{ on, attrs }"> <v-btn icon v-bind="attrs" v-on="on" > <v-icon>{{ mdiDotsVertical }}</v-icon> </v-btn> </template>
<v-list> <v-list-item> <v-list-item-title @click="showEdit=true" > Edit </v-list-item-title> </v-list-item> <v-list-item> <v-list-item-title @click="$emit('delete-comment', comment)" > Delete </v-list-item-title> </v-list-item> </v-list> </v-menu> </v-row> </v-list-item> </v-card-title>
<v-card-text class="body-1"> <span v-if="!showEdit"> {{ comment.text }} </span> <v-form v-else v-model="valid" > <v-row> <v-textarea v-model="editText" auto-grow rows="1" solo :rules="commentRules" /> </v-row> <v-row justify="end"> <v-btn text class="text-capitalize" @click="cancel" > Cancel </v-btn> <v-btn :disabled="!valid" color="primary" class="text-capitalize" @click="updateComment(editText)" > Update </v-btn> </v-row> </v-form> </v-card-text> <v-divider /> </v-card> </template>
<script lang="ts"> import Vue from 'vue' import { mdiAccountCircle, mdiDotsVertical } from '@mdi/js' import VueFilterDateFormat from '@vuejs-community/vue-filter-date-format' import VueFilterDateParse from '@vuejs-community/vue-filter-date-parse' Vue.use(VueFilterDateFormat) Vue.use(VueFilterDateParse)
export default Vue.extend({ props: { comment: { required: true, type: Object }, userId: { required: true, type: Number } },
data() { return { showEdit: false, editText: this.comment.text, commentRules: [ (v: string) => !!v.trim() || 'Comment is required' ], valid: false, mdiAccountCircle, mdiDotsVertical } },
methods: { updateComment(newText: string) { this.showEdit = false const comment = {...this.comment, text:newText } this.$emit('update-comment', comment) }, cancel() { this.showEdit = false this.editText = this.comment.text } } }) </script>
|