This is an automated email from the ASF dual-hosted git repository. visortelle pushed a commit to branch fix-avatars-commmunity-page in repository https://gitbox.apache.org/repos/asf/pulsar-site.git
commit 72427c9c1ff851dc64437d6fce042c10372b92f4 Author: visortelle <[email protected]> AuthorDate: Tue Mar 19 19:41:45 2024 +0400 Fix display wrong avatars on community page --- .../pages/CommunityPage/CommunityPage.tsx | 451 ++++++++++----------- 1 file changed, 214 insertions(+), 237 deletions(-) diff --git a/src/components/pages/CommunityPage/CommunityPage.tsx b/src/components/pages/CommunityPage/CommunityPage.tsx index fedc2ba9e9c8..10b24e860bd5 100644 --- a/src/components/pages/CommunityPage/CommunityPage.tsx +++ b/src/components/pages/CommunityPage/CommunityPage.tsx @@ -14,295 +14,272 @@ import Button from "@site/src/components/ui/Button/Button"; import _ from 'lodash' export default function CommunityPage(): JSX.Element { - const [isShowMorePMC, setIsShowMorePMC] = useState(false); const showMorePMCButton = ( - <Button title={isShowMorePMC ? 'Show less' : 'Show more'} variant="transparentWhite" onClick={() => setIsShowMorePMC(!isShowMorePMC)}/> + <Button title={isShowMorePMC ? 'Show less' : 'Show more'} variant="transparentWhite" onClick={() => setIsShowMorePMC(!isShowMorePMC)} /> ); const [isShowMoreCmtrs, setIsShowMoreCmtrs] = useState(false); const showMoreCmtrsButton = ( - <Button title={isShowMoreCmtrs ? 'Show less' : 'Show more'} variant="transparentWhite" onClick={() => setIsShowMoreCmtrs(!isShowMoreCmtrs)}/> + <Button title={isShowMoreCmtrs ? 'Show less' : 'Show more'} variant="transparentWhite" onClick={() => setIsShowMoreCmtrs(!isShowMoreCmtrs)} /> ); // Shuffle the team members so that the order is different each time the page is loaded const pmcMembers = useMemo(() => _.shuffle(team.pmc), [team.pmc]); const committers = useMemo(() => _.shuffle(team.committers), [team.committers]); - let TeamPMCSets = new Array(Math.ceil(pmcMembers.length/5)); - let teamCtrsSets = new Array(Math.ceil(committers.length/5)); - - let CountTheSet = 0; - let CountTheSets = 0; - pmcMembers.forEach(element => { - CountTheSet++; - if((CountTheSet-1)%5 == 0){ CountTheSets++; } - if(!Array.isArray(TeamPMCSets[CountTheSets])) TeamPMCSets[CountTheSets] = new Array(); - TeamPMCSets[CountTheSets].push(element); - }); + const teamPmcSets = useMemo(() => _.chunk(pmcMembers, 5), [pmcMembers]); + const teamCtrsSets = useMemo(() => _.chunk(committers, 5), [committers]); - CountTheSet = CountTheSets = 0; + return ( + <Layout title={"Community"} description={"Learn about the basics of using Apache Pulsar"} wrapperClassName="LandingPage"> + <section className={s.CommunityHeader}> + <div className={s.CommunityContent}> + <h1>Welcome to the Pulsar Community</h1> + <p className={s.Paragraph}> + The Apache Pulsar community includes people from around the + globe who are developing and using the messaging and streaming + platform for real-time workloads. We welcome contributions + from anyone with a passion for distributed systems. + </p> + </div> + </section> - committers.forEach(element => { - CountTheSet++; - if((CountTheSet-1)%5 == 0){ CountTheSets++; } - if(!Array.isArray(teamCtrsSets[CountTheSets])) teamCtrsSets[CountTheSets] = new Array(); - teamCtrsSets[CountTheSets].push(element); - }); + <section className={s.CommunityAbout}> + <div className={s.CommunityContent}> + <h2>About the Community</h2> - function MemberCard({ member }) { - // require the member to have "GitHub username(s) (user-provided)" field information in Whimsy - // the user can go to Whimsy url https://whimsy.apache.org/roster/committer/__self__ to update the information - // since it's possible to have multiple GitHub usernames, we only take the first one - const githubUsername = member.githubUsername?.[0]; - const href = githubUsername ? ('https://github.com/' + githubUsername) : "#"; - const target = githubUsername ? "_blank" : "_self"; + <div> + <p className={s.SmallParagraph}> + The Pulsar community is composed of members of the Project + Management Committee (PMC), committers, and contributors. + Committers have direct access to the source of a project and + actively evolve the codebase. Contributors improve the project + through submission of patches and suggestions to be reviewed + by the committers. The number of committers and contributors + to the project is unbounded. + </p> - return ( - <a href={href} target={target} key={member.apacheId} className={s.CommunityMembersMember}> - <div> - <div className={s.CommunityMembersMemberPic}> - { githubUsername && ( - <img src={'https://github.com/' + githubUsername + '.png'} alt={githubUsername} /> - )} - </div> - <div className={s.CommunityMembersMemberName}> - <strong>{member.name}</strong><br /> - {githubUsername ? githubUsername : member.apacheId} - </div> - </div> - </a> - ); - } + <div className={s.Slider}> + <BrowserOnly> + {() => ( + <Slider centerMode={window.innerWidth > 800} slidesToShow={2}> + {[ + { + img: useBaseUrl("/img/community-image-6.jpg"), + alt: "Apache Pulsar community photo", + }, + { + img: useBaseUrl("/img/community-image-1.jpg"), + alt: "Apache Pulsar community photo", + }, + { + img: useBaseUrl("/img/community-image-3.jpg"), + alt: "Apache Pulsar community photo", + }, - return ( - <Layout title={"Community"} description={"Learn about the basics of using Apache Pulsar"} wrapperClassName="LandingPage"> - <section className={s.CommunityHeader}> - <div className={s.CommunityContent}> - <h1>Welcome to the Pulsar Community</h1> - <p className={s.Paragraph}> - The Apache Pulsar community includes people from around the - globe who are developing and using the messaging and streaming - platform for real-time workloads. We welcome contributions - from anyone with a passion for distributed systems. - </p> + { + img: useBaseUrl("/img/community-image-2.jpg"), + alt: "Apache Pulsar community photo", + }, + { + img: useBaseUrl("/img/community-image-5.jpg"), + alt: "Apache Pulsar community photo", + }, + { + img: useBaseUrl("/img/community-image-4.jpg"), + alt: "Apache Pulsar community photo", + }, + ].map((slide, i) => ( + <div key={i} className={s.Slide}> + <img className={s.SlideImage} alt={slide.alt} src={slide.img} /> + </div> + ))} + </Slider> + )} + </BrowserOnly> + </div> </div> - </section> - - <section className={s.CommunityAbout}> - <div className={s.CommunityContent}> - <h2>About the Community</h2> + <div className={s.AfterCommunitySlider}> + <div> + <h3> + A successful project requires many people to play many roles. + </h3> + </div> <div> <p className={s.SmallParagraph}> - The Pulsar community is composed of members of the Project - Management Committee (PMC), committers, and contributors. - Committers have direct access to the source of a project and - actively evolve the codebase. Contributors improve the project - through submission of patches and suggestions to be reviewed - by the committers. The number of committers and contributors - to the project is unbounded. + Some write code or documentation, while others are valuable as + testers, submitting patches, and suggestions.<br /> + Get involved today!<br /> + All contributions to the project are greatly appreciated. + </p> + <p className={s.SmallParagraphTop}> + Read the <a href="https://www.apache.org/foundation/policies/conduct" className="secondary-cta" target="_blank" >Apache Code of Conduct</a> and <a href="https://www.apache.org/foundation/policies/conduct#reporting-guidelines" className="secondary-cta" target="_blank" >Reporting Guidelines</a>. </p> - - <div className={s.Slider}> - <BrowserOnly> - {() => ( - <Slider centerMode={window.innerWidth > 800} slidesToShow={2}> - {[ - { - img: useBaseUrl("/img/community-image-6.jpg"), - alt: "Apache Pulsar community photo", - }, - { - img: useBaseUrl("/img/community-image-1.jpg"), - alt: "Apache Pulsar community photo", - }, - { - img: useBaseUrl("/img/community-image-3.jpg"), - alt: "Apache Pulsar community photo", - }, - - { - img: useBaseUrl("/img/community-image-2.jpg"), - alt: "Apache Pulsar community photo", - }, - { - img: useBaseUrl("/img/community-image-5.jpg"), - alt: "Apache Pulsar community photo", - }, - { - img: useBaseUrl("/img/community-image-4.jpg"), - alt: "Apache Pulsar community photo", - }, - ].map((slide, i) => ( - <div key={i} className={s.Slide}> - <img className={s.SlideImage} alt={slide.alt} src={slide.img} /> - </div> - ))} - </Slider> - )} - </BrowserOnly> - </div> - </div> - - <div className={s.AfterCommunitySlider}> - <div> - <h3> - A successful project requires many people to play many roles. - </h3> - </div> - <div> - <p className={s.SmallParagraph}> - Some write code or documentation, while others are valuable as - testers, submitting patches, and suggestions.<br /> - Get involved today!<br /> - All contributions to the project are greatly appreciated. - </p> - <p className={s.SmallParagraphTop}> - Read the <a href="https://www.apache.org/foundation/policies/conduct" className="secondary-cta" target="_blank" >Apache Code of Conduct</a> and <a href="https://www.apache.org/foundation/policies/conduct#reporting-guidelines" className="secondary-cta" target="_blank" >Reporting Guidelines</a>. - </p> - </div> </div> </div> - </section> + </div> + </section> - <section className={s.CommunityDiscussions}> - <div className={s.CommunityDiscussionsBlur} /> - <div className={s.CommunityContent}> - <Section title="Discussions" anchor="section-discussions"> - <p> - Please notice that security-related issues or concerns should not be reported in public channels.<br/> - Please follow the instructions in the <a href={`${useBaseUrl("security")}#security-policy`}>Security Policy</a> to contact the <a href="https://www.apache.org/security/">ASF Security Team</a>.<br/> - <br/> - </p> - <DiscussionPlatforms /> - </Section> - </div> - </section> + <section className={s.CommunityDiscussions}> + <div className={s.CommunityDiscussionsBlur} /> + <div className={s.CommunityContent}> + <Section title="Discussions" anchor="section-discussions"> + <p> + Please notice that security-related issues or concerns should not be reported in public channels.<br /> + Please follow the instructions in the <a href={`${useBaseUrl("security")}#security-policy`}>Security Policy</a> to contact the <a href="https://www.apache.org/security/">ASF Security Team</a>.<br /> + <br /> + </p> + <DiscussionPlatforms /> + </Section> + </div> + </section> - <div className={s.CommunityContribute}> - <div className={s.CommunityContent}> - <Section title="How to Contribute" anchor="section-contribute"> - <HowToContribute /> - </Section> - </div> + <div className={s.CommunityContribute}> + <div className={s.CommunityContent}> + <Section title="How to Contribute" anchor="section-contribute"> + <HowToContribute /> + </Section> </div> + </div> - <div className={s.CommunityProjectGovernance}> - <div className={s.CommunityContent}> - <Section title="Project Governance" anchor="section-governance"> - <ProjectGovernance /> - </Section> - </div> + <div className={s.CommunityProjectGovernance}> + <div className={s.CommunityContent}> + <Section title="Project Governance" anchor="section-governance"> + <ProjectGovernance /> + </Section> </div> + </div> - <div className={s.CommunityMembers}> - <div className={s.CommunityContent}> - <Section anchor="section-community" title="Meet the Community"> - <p className={s.CommunityMembersBig}> - Pulsar community consists of PMC members, committers and contributors. - </p> - <p className={s.CommunityMembersSmall}> - For the complete and up-to-date list, see <a href="https://projects.apache.org/committee.html?pulsar" target="_blank" >Apache Pulsar Committee</a>. - </p> - <br /> - <h4>{pmcMembers.length} PMC members</h4> - <div> - <div className={(isShowMorePMC ? s.CommunityMembersDesktopOpen : s.CommunityMembersDesktop)}> - {(pmcMembers || []).map((member) => ( - <MemberCard key={member.apacheId} member={member} /> - ))} - <div className={s.CommunityMembersShowMore}> - {showMorePMCButton} - <Button title="Go to Github" variant="cleanInvert" href="https://github.com/apache/pulsar" target="_blank" icon={useBaseUrl("/img/gotoi.svg")}/> + <div className={s.CommunityMembers}> + <BrowserOnly> + {() => ( + <div className={s.CommunityContent}> + <Section anchor="section-community" title="Meet the Community"> + <p className={s.CommunityMembersBig}> + Pulsar community consists of PMC members, committers and contributors. + </p> + <p className={s.CommunityMembersSmall}> + For the complete and up-to-date list, see <a href="https://projects.apache.org/committee.html?pulsar" target="_blank" >Apache Pulsar Committee</a>. + </p> + <br /> + <h4>{pmcMembers.length} PMC members</h4> + <div> + <div className={(isShowMorePMC ? s.CommunityMembersDesktopOpen : s.CommunityMembersDesktop)}> + {(pmcMembers || []).map((member) => ( + <MemberCard key={member.apacheId} member={member} /> + ))} + <div className={s.CommunityMembersShowMore}> + {showMorePMCButton} + <Button title="Go to Github" variant="cleanInvert" href="https://github.com/apache/pulsar" target="_blank" icon={useBaseUrl("/img/gotoi.svg")} /> + </div> </div> - </div> - <div className={s.CommunityMembersMobile}> - <div className={s.Slider}> - <BrowserOnly> - {() => ( - <Slider centerMode={window.innerWidth > 800} slidesToShow={1} invertMode={true}> - {TeamPMCSets.map((set, i) => ( - <div key={i} className={s.SlideTeam}> - {set.map((member, i) => ( - <MemberCard key={member.apacheId} member={member} /> - ))} - </div> - ))} - </Slider> - )} - </BrowserOnly> + <div className={s.CommunityMembersMobile}> + <div className={s.Slider}> + <Slider centerMode={window.innerWidth > 800} slidesToShow={1} invertMode={true}> + {teamPmcSets.map((set, i) => ( + <div key={i} className={s.SlideTeam}> + {set.map((member) => ( + <MemberCard key={member.apacheId} member={member} /> + ))} + </div> + ))} + </Slider> + </div> </div> </div> - </div> - <h4>{committers.length} Committers</h4> - <div> - <div className={(isShowMoreCmtrs ? s.CommunityMembersDesktopOpen : s.CommunityMembersDesktop)}> - {(committers || []).map((member,i) => ( - <MemberCard key={member.apacheId} member={member} /> - ))} - <div className={s.CommunityMembersShowMore}> - {showMoreCmtrsButton} - <Button title="Go to Github" variant="cleanInvert" href="https://github.com/apache/pulsar" target="_blank" icon={useBaseUrl("/img/gotoi.svg")}/> + <h4>{committers.length} Committers</h4> + <div> + <div className={(isShowMoreCmtrs ? s.CommunityMembersDesktopOpen : s.CommunityMembersDesktop)}> + {(committers || []).map((member, i) => ( + <MemberCard key={member.apacheId} member={member} /> + ))} + <div className={s.CommunityMembersShowMore}> + {showMoreCmtrsButton} + <Button title="Go to Github" variant="cleanInvert" href="https://github.com/apache/pulsar" target="_blank" icon={useBaseUrl("/img/gotoi.svg")} /> + </div> </div> - </div> - <div className={s.CommunityMembersMobile}> - <div className={s.Slider}> - <BrowserOnly> - {() => ( - <Slider centerMode={window.innerWidth > 800} slidesToShow={1} invertMode={true}> - {teamCtrsSets.map((set, i) => ( - <div key={i} className={s.SlideTeam}> - {set.map((member, i) => ( - <MemberCard key={member.apacheId} member={member} /> - ))} - </div> - ))} - </Slider> - )} - </BrowserOnly> + <div className={s.CommunityMembersMobile}> + <div className={s.Slider}> + <Slider centerMode={window.innerWidth > 800} slidesToShow={1} invertMode={true}> + {teamCtrsSets.map((set, i) => ( + <div key={i} className={s.SlideTeam}> + {set.map((member) => ( + <MemberCard key={member.apacheId} member={member} /> + ))} + </div> + ))} + </Slider> + </div> </div> </div> - </div> - </Section> - </div> - </div> - - <div className={s.CommunityNumbers}> - <div className={s.CommunityNumbersBlur} /> - <div className={s.CommunityContent}> - <div> - <h2>Pulsar trusted community</h2> - <p>Join us and start contributing</p> + </Section> </div> + )} + </BrowserOnly> + </div> + + <div className={s.CommunityNumbers}> + <div className={s.CommunityNumbersBlur} /> + <div className={s.CommunityContent}> + <div> + <h2>Pulsar trusted community</h2> + <p>Join us and start contributing</p> </div> - <div className={s.CommunityContent}> - <div className={s.CommunityNumbersContainer}> + </div> + <div className={s.CommunityContent}> + <div className={s.CommunityNumbersContainer}> {communityNumbers.map((number, i) => ( - <div key={'num'+i}> + <div key={i}> <div className={s.CommunityNumbersBig}>{number.number}{(number.icon) ? <img src={useBaseUrl(number.icon)} /> : null}</div> <strong>{number.title}</strong> {number.linkTitle ? <div className="margin-top--lg"><Button title={number.linkTitle} href={number.link} target='_blank' variant='transparentBlack' /></div> : ''} </div> ))} - </div> </div> </div> + </div> - <div className={s.PromoCallout}> - <div className={s.CommunityContent}> - <div className={s.PromoCalloutContent}> - <div> - <strong>Blog </strong> - Get up-to-date Pulsar insights. - </div> - </div> + <div className={s.PromoCallout}> + <div className={s.CommunityContent}> + <div className={s.PromoCalloutContent}> <div> - <Button title="Explore" variant="transparentBlack" href={`${useBaseUrl("blog")}`} /> + <strong>Blog </strong> + Get up-to-date Pulsar insights. </div> </div> + <div> + <Button title="Explore" variant="transparentBlack" href={`${useBaseUrl("blog")}`} /> + </div> </div> + </div> </Layout> ); }; + +function MemberCard({ member }) { + // require the member to have "GitHub username(s) (user-provided)" field information in Whimsy + // the user can go to Whimsy url https://whimsy.apache.org/roster/committer/__self__ to update the information + // since it's possible to have multiple GitHub usernames, we only take the first one + const githubUsername = member.githubUsername?.[0]; + const href = githubUsername ? ('https://github.com/' + githubUsername) : "#"; + const target = githubUsername ? "_blank" : "_self"; + + return ( + <a href={href} target={target} key={member.apacheId} className={s.CommunityMembersMember}> + <div> + <div className={s.CommunityMembersMemberPic}> + {githubUsername && ( + <img src={'https://github.com/' + githubUsername + '.png'} alt={githubUsername} /> + )} + </div> + <div className={s.CommunityMembersMemberName}> + <strong>{member.name}</strong><br /> + {githubUsername ? githubUsername : member.apacheId} + </div> + </div> + </a> + ); +}
