Skip to content

Commit

Permalink
Charge uniquement les stats sur la page des espaces de travail
Browse files Browse the repository at this point in the history
  • Loading branch information
ggrossetie committed May 5, 2023
1 parent e78a7a0 commit 1f7f07f
Show file tree
Hide file tree
Showing 6 changed files with 192 additions and 8 deletions.
2 changes: 1 addition & 1 deletion front/src/components/workspace/WorkspaceItem.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ export default function WorkspaceItem ({ workspace }) {
{workspaceTitle}
{workspace.personal && <>
<Field className={styles.field} label="Articles">
<span>{workspace.articles.length}</span>
<span>{workspace.articlesCount}</span>
</Field>
</>}
{!workspace.personal && <>
Expand Down
7 changes: 4 additions & 3 deletions front/src/components/workspace/Workspaces.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@ query getWorkspace($workspaceId: ID!) {
}
}

query getArticles {
query getUserStats {
user {
articles {
_id
stats {
myArticlesCount
contributedArticlesCount
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions front/src/components/workspace/Workspaces.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import Field from '../../components/Field.jsx'
import Button from '../../components/Button.jsx'
import WorkspaceItem from '../../components/workspace/WorkspaceItem.jsx'
import { useGraphQL } from '../../helpers/graphQL.js'
import { getWorkspaces, getArticles } from './Workspaces.graphql'
import { getWorkspaces, getUserStats } from './Workspaces.graphql'
import CreateWorkspace from '../../components/workspace/CreateWorkspace.jsx'

export default function Workspaces () {
Expand All @@ -24,7 +24,6 @@ export default function Workspaces () {
_id: activeUser._id,
personal: true,
members: [],
articles: []
})
const currentWorkspaces = useSelector((state) => state.workspaces)
const handleCreateCancel = useCallback(() => setCreating(false), [creating])
Expand All @@ -33,7 +32,8 @@ export default function Workspaces () {
useEffect(() => {
(async () => {
try {
const getArticlesResponse = await runQuery({ query: getArticles })
const getUserStatsResponse = await runQuery({ query: getUserStats })
const userStats = getUserStatsResponse.user.stats
setPersonalWorkspace({
_id: activeUser._id,
personal: true,
Expand All @@ -42,7 +42,7 @@ export default function Workspaces () {
createdAt: activeUser.createdAt,
updatedAt: activeUser.updatedAt,
members: [],
articles: getArticlesResponse.user.articles
articlesCount: userStats.myArticlesCount + userStats.contributedArticlesCount
})
} catch (err) {
alert(err)
Expand Down
166 changes: 166 additions & 0 deletions graphql/data/20230505-tag-color-hex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
const colours = {
'aliceblue': '#f0f8ff',
'antiquewhite': '#faebd7',
'aqua': '#00ffff',
'aquamarine': '#7fffd4',
'azure': '#f0ffff',
'beige': '#f5f5dc',
'bisque': '#ffe4c4',
'black': '#000000',
'blanchedalmond': '#ffebcd',
'blue': '#0000ff',
'blueviolet': '#8a2be2',
'brown': '#a52a2a',
'burlywood': '#deb887',
'cadetblue': '#5f9ea0',
'chartreuse': '#7fff00',
'chocolate': '#d2691e',
'coral': '#ff7f50',
'cornflowerblue': '#6495ed',
'cornsilk': '#fff8dc',
'crimson': '#dc143c',
'cyan': '#00ffff',
'darkblue': '#00008b',
'darkcyan': '#008b8b',
'darkgoldenrod': '#b8860b',
'darkgray': '#a9a9a9',
'darkgreen': '#006400',
'darkkhaki': '#bdb76b',
'darkmagenta': '#8b008b',
'darkolivegreen': '#556b2f',
'darkorange': '#ff8c00',
'darkorchid': '#9932cc',
'darkred': '#8b0000',
'darksalmon': '#e9967a',
'darkseagreen': '#8fbc8f',
'darkslateblue': '#483d8b',
'darkslategray': '#2f4f4f',
'darkturquoise': '#00ced1',
'darkviolet': '#9400d3',
'deeppink': '#ff1493',
'deepskyblue': '#00bfff',
'dimgray': '#696969',
'dodgerblue': '#1e90ff',
'firebrick': '#b22222',
'floralwhite': '#fffaf0',
'forestgreen': '#228b22',
'fuchsia': '#ff00ff',
'gainsboro': '#dcdcdc',
'ghostwhite': '#f8f8ff',
'gold': '#ffd700',
'goldenrod': '#daa520',
'gray': '#808080',
'green': '#008000',
'greenyellow': '#adff2f',
'honeydew': '#f0fff0',
'hotpink': '#ff69b4',
'indianred ': '#cd5c5c',
'indigo': '#4b0082',
'ivory': '#fffff0',
'khaki': '#f0e68c',
'lavender': '#e6e6fa',
'lavenderblush': '#fff0f5',
'lawngreen': '#7cfc00',
'lemonchiffon': '#fffacd',
'lightblue': '#add8e6',
'lightcoral': '#f08080',
'lightcyan': '#e0ffff',
'lightgoldenrodyellow': '#fafad2',
'lightgrey': '#d3d3d3',
'lightgreen': '#90ee90',
'lightpink': '#ffb6c1',
'lightsalmon': '#ffa07a',
'lightseagreen': '#20b2aa',
'lightskyblue': '#87cefa',
'lightslategray': '#778899',
'lightsteelblue': '#b0c4de',
'lightyellow': '#ffffe0',
'lime': '#00ff00',
'limegreen': '#32cd32',
'linen': '#faf0e6',
'magenta': '#ff00ff',
'maroon': '#800000',
'mediumaquamarine': '#66cdaa',
'mediumblue': '#0000cd',
'mediumorchid': '#ba55d3',
'mediumpurple': '#9370d8',
'mediumseagreen': '#3cb371',
'mediumslateblue': '#7b68ee',
'mediumspringgreen': '#00fa9a',
'mediumturquoise': '#48d1cc',
'mediumvioletred': '#c71585',
'midnightblue': '#191970',
'mintcream': '#f5fffa',
'mistyrose': '#ffe4e1',
'moccasin': '#ffe4b5',
'navajowhite': '#ffdead',
'navy': '#000080',
'oldlace': '#fdf5e6',
'olive': '#808000',
'olivedrab': '#6b8e23',
'orange': '#ffa500',
'orangered': '#ff4500',
'orchid': '#da70d6',
'palegoldenrod': '#eee8aa',
'palegreen': '#98fb98',
'paleturquoise': '#afeeee',
'palevioletred': '#d87093',
'papayawhip': '#ffefd5',
'peachpuff': '#ffdab9',
'peru': '#cd853f',
'pink': '#ffc0cb',
'plum': '#dda0dd',
'powderblue': '#b0e0e6',
'purple': '#800080',
'rebeccapurple': '#663399',
'red': '#ff0000',
'rosybrown': '#bc8f8f',
'royalblue': '#4169e1',
'saddlebrown': '#8b4513',
'salmon': '#fa8072',
'sandybrown': '#f4a460',
'seagreen': '#2e8b57',
'seashell': '#fff5ee',
'sienna': '#a0522d',
'silver': '#c0c0c0',
'skyblue': '#87ceeb',
'slateblue': '#6a5acd',
'slategray': '#708090',
'snow': '#fffafa',
'springgreen': '#00ff7f',
'steelblue': '#4682b4',
'tan': '#d2b48c',
'teal': '#008080',
'thistle': '#d8bfd8',
'tomato': '#ff6347',
'turquoise': '#40e0d0',
'violet': '#ee82ee',
'wheat': '#f5deb3',
'white': '#ffffff',
'whitesmoke': '#f5f5f5',
'yellow': '#ffff00',
'yellowgreen': '#9acd32'
}

const conn = Mongo()
const session = conn.startSession()

session.startTransaction()

const cursor = db.tags.find({})
while (cursor.hasNext()) {
const tag = cursor.next()
if (tag.color && tag.color.charAt(0) !== '#') {
db.tags.updateOne(
{ _id: tag._id },
{
$set: {
color: colours[tag.color] || '#eee',
},
},
{ upsert: false }
)
}
}

session.commitTransaction()
10 changes: 10 additions & 0 deletions graphql/resolvers/userResolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const User = require('../models/user')
const isUser = require('../policies/isUser')
const isAdmin = require('../policies/isAdmin')
const Workspace = require('../models/workspace')
const Article = require('../models/article')

module.exports = {
Mutation: {
Expand Down Expand Up @@ -131,6 +132,7 @@ module.exports = {
return thisUser.save()
},
},

Query: {
//Only available for admins
async users (_, args, { user }) {
Expand Down Expand Up @@ -210,6 +212,14 @@ module.exports = {
user.acquintances = user.acquintances.filter((u) => !u.equals(contact))
await user.save()
return user.populate('acquintances').execPopulate()
},

async stats (user) {
const contributedArticlesCount = (await Article.find({ contributors: { $elemMatch: { user: user._id } } })).length
return {
myArticlesCount: user.articles.length,
contributedArticlesCount
}
}
},
}
7 changes: 7 additions & 0 deletions graphql/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ input UserFilter {
email: String!
}
type UserStats {
myArticlesCount: Int
contributedArticlesCount: Int
}
type User {
_id: ID
displayName: String
Expand All @@ -48,6 +53,8 @@ type User {
addContact(userId: ID!): User
removeContact(userId: ID!): User
stats: UserStats
}
type UserPermission {
Expand Down

0 comments on commit 1f7f07f

Please sign in to comment.