diff --git a/components/notification/NotificationGroupedFollow.vue b/components/notification/NotificationGroupedFollow.vue index 138f05e4..d0cfa4c5 100644 --- a/components/notification/NotificationGroupedFollow.vue +++ b/components/notification/NotificationGroupedFollow.vue @@ -5,7 +5,11 @@ const { items } = defineProps<{ items: GroupedNotifications }>() -const count = computed(() => items.items.length) +const maxVisibleFollows = 5 +const follows = computed(() => items.items) +const visibleFollows = computed(() => follows.value.slice(0, maxVisibleFollows)) +const count = computed(() => follows.value.length) +const countPlus = computed(() => Math.max(count.value - maxVisibleFollows, 0)) const isExpanded = ref(false) const lang = computed(() => { return (count.value > 1 || count.value === 0) ? undefined : items.items[0].status?.language @@ -17,16 +21,29 @@ const lang = computed(() => { <div flex items-center top-0 left-2 pt-2 px-3> <div :class="count > 1 ? 'i-ri-group-line' : 'i-ri-user-3-line'" me-3 color-blue text-xl aria-hidden="true" /> <template v-if="count > 1"> + <AccountHoverWrapper + :account="follows[0].account" + > + <NuxtLink :to="getAccountRoute(follows[0].account)"> + <AccountDisplayName + :account="follows[0].account" + text-primary font-bold line-clamp-1 ws-pre-wrap break-all hover:underline + /> + </NuxtLink> + </AccountHoverWrapper> + {{ $t('notification.and') }} <CommonLocalizedNumber - keypath="notification.followed_you_count" - :count="count" + keypath="notification.others" + :count="count - 1" + text-primary font-bold line-clamp-1 ws-pre-wrap break-all /> + {{ $t('notification.followed_you') }} </template> <template v-else-if="count === 1"> - <NuxtLink :to="getAccountRoute(items.items[0].account)"> + <NuxtLink :to="getAccountRoute(follows[0].account)"> <AccountDisplayName - :account="items.items[0].account" - text-primary me-1 font-bold line-clamp-1 ws-pre-wrap break-all + :account="follows[0].account" + text-primary me-1 font-bold line-clamp-1 ws-pre-wrap break-all hover:underline /> </NuxtLink> <span me-1 ws-nowrap> @@ -35,22 +52,38 @@ const lang = computed(() => { </template> </div> <div pb-2 ps8> - <div v-if="isExpanded"> - <AccountCard - v-for="item in items.items" - :key="item.id" - :account="item.account" - p3 - /> - </div> - <div v-else flex="~ wrap gap-1.75" p4> + <div + v-if="!isExpanded && count > 1" + flex="~ wrap gap-1.75" p4 items-center cursor-pointer + @click="isExpanded = !isExpanded" + > <AccountHoverWrapper - v-for="item in items.items" - :key="item.id" - :account="item.account" + v-for="follow in visibleFollows" + :key="follow.id" + :account="follow.account" > - <NuxtLink :to="getAccountRoute(item.account)"> - <AccountAvatar :account="item.account" w-12 h-12 /> + <NuxtLink :to="getAccountRoute(follow.account)"> + <AccountAvatar :account="follow.account" w-12 h-12 /> + </NuxtLink> + </AccountHoverWrapper> + <div flex="~ 1" items-center> + <span v-if="countPlus > 0" ps-2 text="base lg">+{{ countPlus }}</span> + <div i-ri:arrow-down-s-line mx-1 text-secondary text-xl aria-hidden="true" /> + </div> + </div> + <div v-else> + <div v-if="count > 1" flex p-4 pb-2 cursor-pointer @click="isExpanded = !isExpanded"> + <div i-ri:arrow-up-s-line ms-2 text-secondary text-xl aria-hidden="true" /> + <span ps-2 text-base>Hide</span> + </div> + <AccountHoverWrapper + v-for="follow in follows" + :key="follow.id" + :account="follow.account" + > + <NuxtLink :to="getAccountRoute(follow.account)" flex gap-4 px-4 py-2> + <AccountAvatar :account="follow.account" w-12 h-12 /> + <StatusAccountDetails :account="follow.account" /> </NuxtLink> </AccountHoverWrapper> </div> diff --git a/locales/en.json b/locales/en.json index 20520aa0..eb1a3443 100644 --- a/locales/en.json +++ b/locales/en.json @@ -334,10 +334,12 @@ "zen_mode": "Zen Mode" }, "notification": { + "and": "and", "favourited_post": "favorited your post", "followed_you": "followed you", "followed_you_count": "{0} people followed you|{0} person followed you|{0} people followed you", "missing_type": "MISSING notification.type:", + "others": "{0} others|{0} other|{0} others", "reblogged_post": "boosted your post", "reported": "{0} reported {1}", "request_to_follow": "requested to follow you",