Skip to content

Commit 1d8c034

Browse files
authored
feat: enhance PartnersList component to support sorting by name and weight
1 parent 134b151 commit 1d8c034

File tree

23 files changed

+58
-25
lines changed

23 files changed

+58
-25
lines changed

apps/site/components/Common/Partners/index.tsx

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Tooltip from '@node-core/ui-components/Common/Tooltip';
44
import * as PartnerLogos from '@node-core/ui-components/Icons/PartnerLogos';
55

66
import { partners } from '#site/next.json.mjs';
7+
import { shuffle } from '#site/util/array';
78

89
import type { Partner, PartnerCategory } from '#site/types';
910
import type { FC } from 'react';
@@ -15,15 +16,45 @@ import style from './index.module.css';
1516
type PartnersListProps = {
1617
size?: 'big' | 'small';
1718
category?: PartnerCategory;
19+
sort?: 'name' | 'weight';
1820
length?: number;
1921
};
2022

21-
const getPartners = async (length?: number, category?: PartnerCategory) => {
23+
const getPartners = async (
24+
length?: number,
25+
category?: PartnerCategory,
26+
sort?: 'name' | 'weight'
27+
) => {
28+
let result: Array<Partner> = [];
29+
2230
const filteredPartners = category
2331
? partners.filter(partner => partner.categories.includes(category))
2432
: partners;
2533

26-
return length ? filteredPartners.slice(0, length) : filteredPartners;
34+
if (sort === 'name') {
35+
filteredPartners.sort((a, b) => a.name.localeCompare(b.name));
36+
result = [...filteredPartners];
37+
}
38+
39+
if (sort === 'weight') {
40+
const weightedPartners = filteredPartners.flatMap(partner => {
41+
const weight = partner.weight ?? 0;
42+
return Array(weight > 0 ? weight : 1).fill(partner);
43+
});
44+
45+
const minutes = 300; // Change every 5 minutes
46+
const seed = Math.floor(Date.now() / (minutes * 1000));
47+
48+
// Create a copy of the array to avoid modifying the original
49+
const shuffled = await shuffle(weightedPartners, seed);
50+
51+
// Remove duplicates while preserving order
52+
const unique = Array.from(new Set(shuffled));
53+
54+
result = [...unique];
55+
}
56+
57+
return length ? result.slice(0, length) : result;
2758
};
2859

2960
const renderSmallPartner = (partner: Partner) => {
@@ -54,13 +85,15 @@ const renderBigPartner = (partner: Partner) => {
5485
const PartnersList: FC<PartnersListProps> = async ({
5586
size = 'small',
5687
category,
88+
sort = 'name',
5789
length,
5890
}) => {
5991
const isSmall = size === 'small';
6092

6193
const partners = await getPartners(
6294
length ?? (isSmall ? 6 : undefined),
63-
category
95+
category,
96+
sort
6497
);
6598

6699
return (

apps/site/pages/en/download/current.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ or the <LinkWithArrow href="https://unofficial-builds.nodejs.org/download/">unof
4545
proudly due to the support of these partners, <Link href="/about/partners">and more</Link>.
4646
</span>
4747
<div className='mt-4'>
48-
<PartnersList size="big" category="infrastructure" length={3} />
48+
<PartnersList size="big" category="infrastructure" length={3} sort="weight" />
4949
</div>
5050
</section>

apps/site/pages/en/download/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ or the <LinkWithArrow href="https://unofficial-builds.nodejs.org/download/">unof
4545
proudly due to the support of these partners, <Link href="/about/partners">and more</Link>.
4646
</span>
4747
<div className='mt-4'>
48-
<PartnersList size="big" category="infrastructure" length={3} />
48+
<PartnersList size="big" category="infrastructure" length={3} sort="weight" />
4949
</div>
5050
</section>

apps/site/pages/en/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ layout: home
2828
</Button>
2929

3030
<div className="flex justify-center xs:mt-3">
31-
<PartnersList />
31+
<PartnersList sort="weight" />
3232
</div>
3333
<span className="text-center text-sm! text-neutral-800 dark:text-neutral-600 text-balance">Node.js is proudly supported by the partners above <Link href="/about/partners">and more</Link>.</span>
3434
</div>

apps/site/pages/fr/download/current.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ Consultez nos binaires <LinkWithArrow href="https://nodejs.org/download/nightly/
4141
</span>
4242

4343
<div className="mt-4">
44-
<PartnersList size="big" category="infrastructure" length={3} />
44+
<PartnersList size="big" category="infrastructure" length={3} sort="weight" />
4545
</div>
4646
</section>

apps/site/pages/fr/download/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ Consultez nos binaires <LinkWithArrow href="https://nodejs.org/download/nightly/
4141
</span>
4242

4343
<div className="mt-4">
44-
<PartnersList size="big" category="infrastructure" length={3} />
44+
<PartnersList size="big" category="infrastructure" length={3} sort="weight" />
4545
</div>
4646
</section>

apps/site/pages/fr/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ layout: home
2828
</Button>
2929

3030
<div className="flex justify-center xs:mt-3">
31-
<PartnersList />
31+
<PartnersList sort="weight" />
3232
</div>
3333

3434
<span className="text-center text-sm! text-neutral-800 dark:text-neutral-600 text-balance">Node.js est fièrement soutenu par les partenaires ci-dessus <Link href="/about/partners">et bien d'autres encore</Link>.</span>

apps/site/pages/id/download/current.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ atau biner <LinkWithArrow href="https://unofficial-builds.nodejs.org/download/">
4343
</span>
4444

4545
<div className="mt-4">
46-
<PartnersList size="big" category="infrastructure" />
46+
<PartnersList size="big" category="infrastructure" sort="weight" />
4747
</div>
4848
</section>

apps/site/pages/id/download/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ atau biner <LinkWithArrow href="https://unofficial-builds.nodejs.org/download/">
4343
</span>
4444

4545
<div className="mt-4">
46-
<PartnersList size="big" category="infrastructure" length={3} />
46+
<PartnersList size="big" category="infrastructure" length={3} sort="weight" />
4747
</div>
4848
</section>

apps/site/pages/id/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ layout: home
3030
</Button>
3131

3232
<div className="flex justify-center xs:mt-3">
33-
<PartnersList />
33+
<PartnersList sort="weight" />
3434
</div>
3535

3636
<span className="text-center text-sm! text-neutral-800 dark:text-neutral-600 text-balance">Node.js dengan bangga didukung oleh para mitra di atas <Link href="/about/partners">dan lainnya</Link>.</span>

0 commit comments

Comments
 (0)