From 0db6f39f4313c070a3031b287d5d06ccc461f723 Mon Sep 17 00:00:00 2001 From: Apoorv Mishra Date: Sun, 23 Jul 2023 21:31:46 +0530 Subject: [PATCH] Display correct info in hover preview (#5597) --- server/presenters/unfurls/common.ts | 16 ++++++++++++---- server/presenters/unfurls/mention.ts | 11 ++++++----- server/routes/api/urls/urls.ts | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/server/presenters/unfurls/common.ts b/server/presenters/unfurls/common.ts index 78e4e2634..8c572541c 100644 --- a/server/presenters/unfurls/common.ts +++ b/server/presenters/unfurls/common.ts @@ -1,8 +1,7 @@ import { differenceInMinutes, formatDistanceToNowStrict } from "date-fns"; import { t } from "i18next"; -import { head, orderBy } from "lodash"; import { dateLocale } from "@shared/utils/date"; -import { Document, User } from "@server/models"; +import { Document, User, View } from "@server/models"; import { opts } from "@server/utils/i18n"; export const presentLastOnlineInfoFor = (user: User) => { @@ -26,8 +25,17 @@ export const presentLastOnlineInfoFor = (user: User) => { return info; }; -export const presentLastViewedInfoFor = (user: User, document: Document) => { - const lastView = head(orderBy(document.views, ["updatedAt"], ["desc"])); +export const presentLastViewedInfoFor = async ( + user: User, + document: Document +) => { + const lastView = await View.findOne({ + where: { + userId: user.id, + documentId: document.id, + }, + order: [["updatedAt", "DESC"]], + }); const lastViewedAt = lastView ? lastView.updatedAt : undefined; const locale = dateLocale(user.language); diff --git a/server/presenters/unfurls/mention.ts b/server/presenters/unfurls/mention.ts index 3733e8a48..5b95f2dc0 100644 --- a/server/presenters/unfurls/mention.ts +++ b/server/presenters/unfurls/mention.ts @@ -2,16 +2,17 @@ import { Unfurl, UnfurlType } from "@shared/types"; import { Document, User } from "@server/models"; import { presentLastOnlineInfoFor, presentLastViewedInfoFor } from "./common"; -function presentMention( +async function presentMention( user: User, document: Document -): Unfurl { +): Promise> { + const lastOnlineInfo = presentLastOnlineInfoFor(user); + const lastViewedInfo = await presentLastViewedInfoFor(user, document); + return { type: UnfurlType.Mention, title: user.name, - description: `${presentLastOnlineInfoFor( - user - )} • ${presentLastViewedInfoFor(user, document)}`, + description: `${lastOnlineInfo} • ${lastViewedInfo}`, thumbnailUrl: user.avatarUrl, meta: { id: user.id, diff --git a/server/routes/api/urls/urls.ts b/server/routes/api/urls/urls.ts index ef1c1101e..29c5db17b 100644 --- a/server/routes/api/urls/urls.ts +++ b/server/routes/api/urls/urls.ts @@ -42,7 +42,7 @@ router.post( authorize(actor, "read", user); authorize(actor, "read", document); - ctx.body = presentMention(user, document); + ctx.body = await presentMention(user, document); return; }