**Fixed different issues** : - Multiple CSS fixes: font-size, colors, margins, z-index ... - Fixed hover on contributor avatars - Added link to contributors in footer - Made the year in the footer dynamic (2023 --> 2024) - Added name of contributor in "Thank you" section of Contributor page - Added footer in small screens - Made Activity Log Responsive - Fixed bug in "saving issues to DB", title was null everywhere. I needed to implement an "upsert" behaviour to update the existing database on init **To be noted :** There is the following bug on production happening on mobile when you refresh a second time : <img width="1440" alt="Screenshot 2024-04-05 at 01 30 58" src="https://github.com/twentyhq/twenty/assets/102751374/b935b07a-63dc-463d-8dcb-070ad4ef6db0"> It seems to be related to the following issue on mdx : [https://github.com/hashicorp/next-mdx-remote/issues/350](https://github.com/hashicorp/next-mdx-remote/issues/350) I added the following code that fixed this bug for me in development (this needs to be tested in production) : ``` const serialized = await serialize(content, { mdxOptions: { development: process.env.NODE_ENV === 'development', } }) ``` --------- Co-authored-by: Ady Beraud <a.beraud96@gmail.com>
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
export const dynamic = 'force-dynamic';
|
|
|
|
import AvatarGrid from '@/app/_components/contributors/AvatarGrid';
|
|
import { Header } from '@/app/_components/contributors/Header';
|
|
import { Background } from '@/app/_components/oss-friends/Background';
|
|
import { ContentContainer } from '@/app/_components/oss-friends/ContentContainer';
|
|
import { findAll } from '@/database/database';
|
|
import { pullRequestModel, userModel } from '@/database/model';
|
|
|
|
interface Contributor {
|
|
id: string;
|
|
avatarUrl: string;
|
|
}
|
|
|
|
const Contributors = async () => {
|
|
const contributors = await findAll(userModel);
|
|
const pullRequests = await findAll(pullRequestModel);
|
|
|
|
const pullRequestByAuthor = pullRequests.reduce((acc, pr) => {
|
|
acc[pr.authorId] = acc[pr.authorId] ? acc[pr.authorId] + 1 : 1;
|
|
return acc;
|
|
}, {});
|
|
|
|
const fitlerContributors = contributors
|
|
.filter((contributor) => contributor.isEmployee === '0')
|
|
.filter(
|
|
(contributor) =>
|
|
![
|
|
'dependabot',
|
|
'cyborch',
|
|
'emilienchvt',
|
|
'Samox',
|
|
'nimraahmed',
|
|
'gitstart-app',
|
|
].includes(contributor.id),
|
|
)
|
|
.map((contributor) => {
|
|
contributor.pullRequestCount = pullRequestByAuthor[contributor.id] || 0;
|
|
|
|
return contributor;
|
|
})
|
|
.sort((a, b) => b.pullRequestCount - a.pullRequestCount)
|
|
.filter((contributor) => contributor.pullRequestCount > 0);
|
|
|
|
return (
|
|
<>
|
|
<Background />
|
|
<ContentContainer>
|
|
<Header />
|
|
<AvatarGrid users={fitlerContributors as Contributor[]} />
|
|
</ContentContainer>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default Contributors;
|