diff --git a/app/components/DocumentViews.tsx b/app/components/DocumentViews.tsx index 15377291c..21e1c025f 100644 --- a/app/components/DocumentViews.tsx +++ b/app/components/DocumentViews.tsx @@ -1,3 +1,4 @@ +import { compact } from "lodash"; import sortBy from "lodash/sortBy"; import { observer } from "mobx-react"; import * as React from "react"; @@ -31,10 +32,10 @@ function DocumentViews({ document, isOpen }: Props) { const documentViews = views.inDocument(document.id); const sortedViews = sortBy( documentViews, - (view) => !presentIds.includes(view.user.id) + (view) => !presentIds.includes(view.userId) ); const users = React.useMemo( - () => sortedViews.map((v) => v.user), + () => compact(sortedViews.map((v) => v.user)), [sortedViews] ); @@ -45,7 +46,7 @@ function DocumentViews({ document, isOpen }: Props) { aria-label={t("Viewers")} items={users} renderItem={(model: User) => { - const view = documentViews.find((v) => v.user.id === model.id); + const view = documentViews.find((v) => v.userId === model.id); const isPresent = presentIds.includes(model.id); const isEditing = editingIds.includes(model.id); const subtitle = isPresent diff --git a/app/models/View.ts b/app/models/View.ts index a10890f44..42efb0abc 100644 --- a/app/models/View.ts +++ b/app/models/View.ts @@ -16,8 +16,10 @@ class View extends Model { @observable count: number; + userId: string; + @Relation(() => User) - user: User; + user?: User; @action touch() { diff --git a/app/scenes/Document/components/DocumentMeta.tsx b/app/scenes/Document/components/DocumentMeta.tsx index 1a1dbee28..941f2adb6 100644 --- a/app/scenes/Document/components/DocumentMeta.tsx +++ b/app/scenes/Document/components/DocumentMeta.tsx @@ -35,7 +35,7 @@ function TitleDocumentMeta({ const match = useRouteMatch(); const documentViews = useObserver(() => views.inDocument(document.id)); const totalViewers = documentViews.length; - const onlyYou = totalViewers === 1 && documentViews[0].user.id; + const onlyYou = totalViewers === 1 && documentViews[0].userId; const viewsLoadedOnMount = React.useRef(totalViewers > 0); const Wrapper = viewsLoadedOnMount.current ? React.Fragment : Fade; diff --git a/app/stores/ViewsStore.ts b/app/stores/ViewsStore.ts index a11b84f41..9f6effa59 100644 --- a/app/stores/ViewsStore.ts +++ b/app/stores/ViewsStore.ts @@ -29,7 +29,7 @@ export default class ViewsStore extends Store { touch(documentId: string, userId: string) { const view = find( this.orderedData, - (view) => view.documentId === documentId && view.user.id === userId + (view) => view.documentId === documentId && view.userId === userId ); if (!view) { return; diff --git a/server/presenters/view.ts b/server/presenters/view.ts index e97caf6d5..a1fbb78a0 100644 --- a/server/presenters/view.ts +++ b/server/presenters/view.ts @@ -8,6 +8,7 @@ export default function presentView(view: View) { count: view.count, firstViewedAt: view.createdAt, lastViewedAt: view.updatedAt, + userId: view.userId, user: presentUser(view.user), }; }