mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2026-01-15 01:14:39 +00:00
175 lines
5.0 KiB
Vue
175 lines
5.0 KiB
Vue
<template>
|
|
<ds-space :class="{ read: notification.read, notification: true }" margin-bottom="x-small">
|
|
<client-only>
|
|
<ds-space margin-bottom="x-small">
|
|
<hc-user :user="sourceData.triggerer" :date-time="sourceData.createdAt" :trunc="35" />
|
|
</ds-space>
|
|
<ds-text class="reason-text-for-test" color="soft">
|
|
{{ $t(`notifications.reason.${notification.reason}` + sourceData.reasonExtention) }}
|
|
</ds-text>
|
|
</client-only>
|
|
<ds-space margin-bottom="x-small" />
|
|
<nuxt-link class="notification-mention-post" :to="linkTo" @click.native="$emit('read')">
|
|
<ds-space margin-bottom="x-small">
|
|
<ds-card :header="sourceData.title" hover space="x-small" class="notifications-card">
|
|
<ds-space margin-bottom="x-small" />
|
|
<div v-if="sourceData.user">
|
|
<hc-user :user="sourceData.user" :trunc="35" />
|
|
</div>
|
|
<div v-else-if="sourceData.contentExcerpt">
|
|
<span v-if="sourceData.comment" class="text-notification-header">
|
|
{{ $t(`notifications.comment`) }}:
|
|
</span>
|
|
{{ sourceData.contentExcerpt | removeHtml }}
|
|
</div>
|
|
<div v-if="sourceData.report">
|
|
<ds-space margin-bottom="x-small" />
|
|
<span class="text-notification-header">
|
|
{{ $t(`notifications.filedReport.category`) }}:
|
|
</span>
|
|
{{ this.$t('report.reason.category.options.' + sourceData.report.reasonCategory) }}
|
|
<br />
|
|
<span class="text-notification-header">
|
|
{{ $t(`notifications.filedReport.description`) }}:
|
|
</span>
|
|
<span
|
|
v-if="
|
|
sourceData.report.reasonDescription && sourceData.report.reasonDescription !== ''
|
|
"
|
|
>
|
|
{{ sourceData.report.reasonDescription }}
|
|
</span>
|
|
<span v-else>
|
|
—
|
|
</span>
|
|
</div>
|
|
</ds-card>
|
|
</ds-space>
|
|
</nuxt-link>
|
|
</ds-space>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapGetters } from 'vuex'
|
|
import HcUser from '~/components/User/User'
|
|
|
|
export default {
|
|
name: 'Notification',
|
|
components: {
|
|
HcUser,
|
|
},
|
|
props: {
|
|
notification: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
},
|
|
computed: {
|
|
...mapGetters({
|
|
currentUser: 'auth/user',
|
|
}),
|
|
sourceData() {
|
|
const from = this.notification.from
|
|
let triggerer
|
|
const createdAt = this.notification.createdAt
|
|
let title
|
|
let author
|
|
let user = null
|
|
let post = null
|
|
let comment = null
|
|
let contentExcerpt = null
|
|
let report = null
|
|
let reasonExtention = ''
|
|
|
|
if (from.__typename === 'Post') {
|
|
post = from
|
|
triggerer = post.author
|
|
} else if (from.__typename === 'Comment') {
|
|
comment = from
|
|
triggerer = comment.author
|
|
post = comment.post
|
|
} else if (from.__typename === 'Report') {
|
|
report = {
|
|
reasonCategory: from.filed[0].reasonCategory,
|
|
reasonDescription: from.filed[0].reasonDescription,
|
|
}
|
|
triggerer = this.currentUser
|
|
if (from.filed[0].reportedResource.__typename === 'User') {
|
|
user = from.filed[0].reportedResource
|
|
reasonExtention = '.user'
|
|
} else if (from.filed[0].reportedResource.__typename === 'Post') {
|
|
post = from.filed[0].reportedResource
|
|
reasonExtention = '.post'
|
|
} else if (from.filed[0].reportedResource.__typename === 'Comment') {
|
|
comment = from.filed[0].reportedResource
|
|
post = from.filed[0].reportedResource.post
|
|
reasonExtention = '.comment'
|
|
}
|
|
}
|
|
|
|
if (user) {
|
|
title = user.name
|
|
author = user
|
|
} else {
|
|
title = post.title
|
|
if (comment) {
|
|
author = comment.author
|
|
contentExcerpt = comment.contentExcerpt
|
|
} else {
|
|
author = post.author
|
|
contentExcerpt = post.contentExcerpt
|
|
}
|
|
}
|
|
|
|
const data = {
|
|
triggerer,
|
|
createdAt,
|
|
title,
|
|
user,
|
|
post,
|
|
comment,
|
|
contentExcerpt,
|
|
author,
|
|
report,
|
|
reasonExtention,
|
|
}
|
|
return data
|
|
},
|
|
linkTo() {
|
|
const params = this.sourceData.user
|
|
? {
|
|
id: this.sourceData.user.id,
|
|
slug: this.sourceData.user.slug,
|
|
}
|
|
: this.sourceData.post
|
|
? {
|
|
id: this.sourceData.post.id,
|
|
slug: this.sourceData.post.slug,
|
|
}
|
|
: {}
|
|
const hashParam = this.sourceData.comment
|
|
? { hash: `#commentId-${this.sourceData.comment.id}` }
|
|
: {}
|
|
return {
|
|
name: this.sourceData.user ? 'profile-id-slug' : 'post-id-slug',
|
|
params,
|
|
...hashParam,
|
|
}
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.notification.read {
|
|
opacity: $opacity-soft;
|
|
}
|
|
.notifications-card {
|
|
min-width: 500px;
|
|
}
|
|
.text-notification-header {
|
|
font-weight: 700;
|
|
margin-right: 0.1rem;
|
|
}
|
|
</style>
|