website/src/pages/showcase.tsx (67 lines of code) (raw):
import type { FC } from 'react';
import React from 'react';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Translate, { translate } from '@docusaurus/Translate';
import Layout from '@theme/Layout';
import '../css/showcase.scss';
const Container: FC = (props) => {
const { children } = props;
return (
<div className="hero text--center showcase">
<div className="container">
{children}
</div>
</div>
);
};
const Header: FC = () => (
<div className="header">
<div className="title">
<Translate id="showcase.website.title">Showcase</Translate>
</div>
<div className="tips">
<Translate id="showcase.website.tips.used">This project is used by all these folks</Translate>
<br />
<Translate id="showcase.website.tips.wantUse">Are you using this project? </Translate>
<a
href="https://github.com/apache/apisix/blob/master/powered-by.md"
target="_blank"
rel="noopener noreferrer"
>
<u><Translate id="showcase.website.link.addYourCompany">Add your company</Translate></u>
</a>
</div>
</div>
);
interface UserCardProps {
infoLink: string;
image: string;
caption: string;
}
const UserCard: FC<UserCardProps> = (props) => {
const { infoLink, image, caption } = props;
return (
<div className="user-card">
<a href={infoLink}>
<img className="logo" src={image} alt={caption} />
</a>
</div>
);
};
const Content: FC = () => {
const { siteConfig } = useDocusaurusContext();
const { showcases = [] } = siteConfig.customFields as { showcases: UserCardProps[] };
if (!showcases.length) {
return null;
}
const showcaseList = showcases.map((user) => (
<div className="col col--2 item" key={user.infoLink}>
<UserCard
image={`https://static.apiseven.com/202202/${user.image}`}
caption={user.caption}
infoLink={user.infoLink}
/>
</div>
));
return (
<div className="row content">
{showcaseList}
</div>
);
};
const Showcase: FC = () => (
<Layout title={translate({ message: 'ShowCase' })}>
<Container>
<Header />
<Content />
</Container>
</Layout>
);
export default Showcase;