From a7465aaf2e438e88d1b7710dd58d48dcea717d1a Mon Sep 17 00:00:00 2001 From: Jori Lallo Date: Mon, 3 Jul 2017 12:29:20 -0500 Subject: [PATCH] Include collaborator count and limit frontend to last 5 --- frontend/components/AuthorInfo/AuthorInfo.js | 3 ++- server/presenters/document.js | 22 +++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/frontend/components/AuthorInfo/AuthorInfo.js b/frontend/components/AuthorInfo/AuthorInfo.js index 597ec1b9..1d5beb6e 100644 --- a/frontend/components/AuthorInfo/AuthorInfo.js +++ b/frontend/components/AuthorInfo/AuthorInfo.js @@ -3,6 +3,7 @@ import React, { Component } from 'react'; import styled from 'styled-components'; import type { User } from 'types'; import { Flex } from 'reflexbox'; +import _ from 'lodash'; const Container = styled(Flex)` justify-content: space-between; @@ -19,7 +20,7 @@ class AuthorInfo extends Component { render() { const { collaborators, views } = this.props; - const users = collaborators.map((user, index, arr) => ( + const users = _.takeRight(collaborators, 5).map((user, index, arr) => ( {user.name} {arr.length > 1 && (index < arr.length - 1 ? ',' : 'and')} diff --git a/server/presenters/document.js b/server/presenters/document.js index b6024a7e..8fa79a18 100644 --- a/server/presenters/document.js +++ b/server/presenters/document.js @@ -1,9 +1,16 @@ -import { Collection, Star, User, View } from '../models'; +// @flow +import { Collection, Star, User, View, Document } from '../models'; import presentUser from './user'; import presentCollection from './collection'; import _ from 'lodash'; -async function present(ctx, document, options) { +type Options = { + includeCollection?: boolean, + includeCollaborators?: boolean, + includeViews?: boolean, +}; + +async function present(ctx: Object, document: Document, options: Options) { options = { includeCollection: true, includeCollaborators: true, @@ -13,7 +20,7 @@ async function present(ctx, document, options) { ctx.cache.set(document.id, document); const userId = ctx.state.user.id; - const data = { + let data = { id: document.id, url: document.getUrl(), private: document.private, @@ -23,6 +30,7 @@ async function present(ctx, document, options) { preview: document.preview, createdAt: document.createdAt, createdBy: undefined, + starred: false, updatedAt: document.updatedAt, updatedBy: undefined, team: document.teamId, @@ -34,12 +42,14 @@ async function present(ctx, document, options) { }); if (options.includeViews) { + // $FlowIssue not found in object literal? data.views = await View.sum('count', { where: { documentId: document.id }, }); } if (options.includeCollection) { + // $FlowIssue not found in object literal? data.collection = await ctx.cache.get(document.atlasId, async () => { const collection = options.collection || @@ -54,13 +64,15 @@ async function present(ctx, document, options) { if (options.includeCollaborators) { // This could be further optimized by using ctx.cache - data.collaborators = await User.findAll({ + data['collaborators'] = await User.findAll({ where: { id: { - $in: _.takeRight(document.collaboratorIds, 7) || [], + $in: _.takeRight(document.collaboratorIds, 10) || [], }, }, }).map(user => presentUser(ctx, user)); + // $FlowIssue not found in object literal? + data.collaboratorCount = document.collaboratorIds.length; } const createdBy = await ctx.cache.get(