Skip to content

Commit 42d88ce

Browse files
authored
Merge pull request #244 from juddisjudd/main
fix(DisplayMembers): improve member sorting and update prettier-plugin
2 parents 0a9ee13 + ad94019 commit 42d88ce

File tree

3 files changed

+60
-33
lines changed

3 files changed

+60
-33
lines changed

components/DisplayMembers.tsx

+43-19
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState, useEffect } from 'react'
1+
import { useState, useEffect } from 'react';
22
import MemberLink from './MemberLink';
33

44
interface GithubMember {
@@ -16,55 +16,79 @@ const cacheKey = 'overextendedMembers';
1616
const cacheExpiry = 24 * 60 * 60 * 1000;
1717

1818
const sponsor = {
19-
thelindat: `thelindat`,
20-
LukeWasTakenn: `lukewastaken`,
21-
DokaDoka: `dokadoka`,
19+
thelindat: 'thelindat',
20+
LukeWasTakenn: 'lukewastaken',
21+
DokaDoka: 'dokadoka',
22+
juddisjudd: 'ohitsjudd',
2223
jag3dagster: `jag3dagster`,
23-
}
24+
};
25+
26+
const priorityOrder = ['thelindat', 'LukeWasTakenn'];
2427

2528
async function FetchMembers() {
2629
const raw = localStorage.getItem(cacheKey);
2730
const members: MemberData = raw ? JSON.parse(raw) : {};
2831
const isCacheExpired = members.timestamp ? new Date().getTime() - members.timestamp > cacheExpiry : true;
2932

30-
if (!isCacheExpired) return members;
31-
32-
const headers = {}
33+
if (!isCacheExpired) {
34+
console.log('Using cached members data:', members.data);
35+
return members;
36+
}
3337

38+
const headers: Record<string, string> = {};
3439
if (members.etag) headers['If-None-Match'] = members.etag;
3540

36-
const response = await fetch(`https://api.github.com/orgs/overextended/members`, {
37-
headers: headers
38-
})
41+
const response = await fetch(`https://api.github.com/orgs/overextended/members`, { headers });
3942

4043
if (response.status === 304) return members;
4144

4245
members.data = await response.json();
4346
members.etag = response.headers.get('ETag');
4447
members.timestamp = new Date().getTime();
4548

49+
members.data = [
50+
...priorityOrder
51+
.map((login) => {
52+
const foundMember = members.data.find((member) => member.login === login);
53+
if (!foundMember) {
54+
console.warn(`Member ${login} not found in API response`);
55+
}
56+
return foundMember;
57+
})
58+
.filter((member): member is GithubMember => !!member),
59+
...members.data.filter((member) => !priorityOrder.includes(member.login)),
60+
];
61+
62+
console.log('Sorted members data:', members.data);
63+
4664
localStorage.setItem(cacheKey, JSON.stringify(members));
47-
console.log(`fetched data and set cache (etag ${members.etag})`, members.timestamp)
48-
65+
console.log(`Fetched, sorted, and cached data (etag ${members.etag})`, members.timestamp);
66+
4967
return members;
5068
}
5169

5270
const DisplayMembers = () => {
53-
const [members, setMembers] = useState(null);
71+
const [members, setMembers] = useState<MemberData | null>(null);
5472

5573
useEffect(() => {
56-
(async() => setMembers(await FetchMembers()))()
57-
}, [])
74+
(async () => setMembers(await FetchMembers()))();
75+
}, []);
5876

5977
return (
6078
<>
6179
{members?.data && (
62-
<div className='grid md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-4 grid-cols-1 mt-4 gap-16 place-items-center'>
63-
{members.data.map((member) => MemberLink({ image: member.avatar_url, name: member.name ?? member.login, sponsor: sponsor[member.login] }))}
80+
<div className="mt-4 grid grid-cols-1 place-items-center gap-16 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-4">
81+
{members.data.map((member) =>
82+
MemberLink({
83+
image: member.avatar_url,
84+
name: member.login,
85+
sponsor: sponsor[member.login],
86+
})
87+
)}
6488
</div>
6589
)}
6690
</>
67-
)
91+
);
6892
};
6993

7094
export default DisplayMembers;

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"@types/node": "18.11.10",
3434
"autoprefixer": "^10.4.19",
3535
"postcss": "^8.4.38",
36-
"prettier-plugin-tailwindcss": "^0.3.0",
36+
"prettier-plugin-tailwindcss": "^0.6.11",
3737
"tailwindcss": "^3.4.4",
3838
"typescript": "^4.9.5"
3939
},

pnpm-lock.yaml

+16-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)