mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-12 23:35:58 +00:00
* calculate distance between current user and queried user * fix query for unset location * use database to calculate distance * rename distance to distance to me, 100% calculation done in DB * distanceToMe tests * lint fixes * remove comments * Show user teaser popover with badges, Desktop * Refactor UserTeaser and add mobile popover support * Avoid click propagation (WIP) * Prevent event propagation * Adjust alignment and font sizes * More spacing for statistics * Add distance, simplify user link * Refactor location info into own component * Add tests for UserTeaserPopup * Refactor and test LocationInfo * Query distanceToMe, rename distance to distanceToMe * Update test * Improve tests for UserTeaser, WIP * Fix tests * DistanceToMe on User instead of Location * Revert "DistanceToMe on User instead of Location" This reverts commit 96c9db00a44cd120e47bfe9534d3e066a194744c. * Fix notifications * Refactor UserTeaser and fix location info * Fix group member crash * Show 0 distance * Fit in popover on small screens * Allow access to profile on desktop * Revert backend changes * Load user teaser popover data only when needed * Fix type mismatch * Refactor for clarity and accessibility * Litte refactorings and improvements * Fix popover test * Adapt and fix tests * Fix tests and bugs * Add placeholder * cypress: adapt user teaser locator to changes * Remove delays and scrolling * Disable popovers in notification list and fix layout * Remove flickering * Make overlay catch all pointer events on touch devices * Re-add attribute for E2E test * Fix test, return to mouseover * fix snapshot --------- Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de> Co-authored-by: Wolfgang Huß <wolle.huss@pjannto.com> Co-authored-by: mahula <lenzmath@posteo.de>
101 lines
2.2 KiB
Vue
101 lines
2.2 KiB
Vue
<template>
|
|
<article :class="{ '--read': notification.read, notification: true }">
|
|
<client-only>
|
|
<user-teaser
|
|
:user="isGroup ? notification.relatedUser : from.author"
|
|
:date-time="from.createdAt"
|
|
:show-popover="false"
|
|
/>
|
|
</client-only>
|
|
<p class="description">{{ $t(`notifications.reason.${notification.reason}`) }}</p>
|
|
<nuxt-link
|
|
class="link"
|
|
:to="{ name: isGroup ? 'groups-id-slug' : 'post-id-slug', params, ...hashParam }"
|
|
@click.native="$emit('read')"
|
|
>
|
|
<base-card wideContent>
|
|
<h2 class="title">{{ from.title || from.groupName || from.post.title }}</h2>
|
|
<p>
|
|
<strong v-if="isComment" class="comment">{{ $t(`notifications.comment`) }}:</strong>
|
|
{{ from.contentExcerpt | removeHtml }}
|
|
<strong v-if="isGroup" class="comment">{{ $t(`notifications.group`) }}:</strong>
|
|
{{ from.descriptionExcerpt | removeHtml }}
|
|
</p>
|
|
</base-card>
|
|
</nuxt-link>
|
|
</article>
|
|
</template>
|
|
|
|
<script>
|
|
import UserTeaser from '~/components/UserTeaser/UserTeaser'
|
|
|
|
export default {
|
|
name: 'Notification',
|
|
components: {
|
|
UserTeaser,
|
|
},
|
|
props: {
|
|
notification: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
},
|
|
computed: {
|
|
from() {
|
|
return this.notification.from
|
|
},
|
|
isComment() {
|
|
return this.from.__typename === 'Comment'
|
|
},
|
|
isGroup() {
|
|
return this.from.__typename === 'Group'
|
|
},
|
|
params() {
|
|
const target = this.isComment ? this.from.post : this.from
|
|
return {
|
|
id: target.id,
|
|
slug: target.slug,
|
|
}
|
|
},
|
|
hashParam() {
|
|
return this.isComment ? { hash: `#commentId-${this.from.id}` } : {}
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.notification {
|
|
margin-bottom: $space-base;
|
|
|
|
&:first-of-type {
|
|
margin-top: $space-x-small;
|
|
}
|
|
|
|
&.--read {
|
|
opacity: $opacity-disabled;
|
|
}
|
|
|
|
> .description {
|
|
margin-bottom: $space-x-small;
|
|
}
|
|
|
|
> .link {
|
|
display: block;
|
|
color: $text-color-base;
|
|
|
|
&:hover {
|
|
color: $color-primary;
|
|
}
|
|
}
|
|
|
|
.user-teaser {
|
|
margin-bottom: $space-x-small;
|
|
}
|
|
|
|
.comment {
|
|
font-weight: $font-weight-bold;
|
|
}
|
|
}
|
|
</style>
|