Skip to content

Commit

Permalink
Merge pull request #116 from PyConColombia/issue-115
Browse files Browse the repository at this point in the history
#115 Crear vista base para patrocinadores
  • Loading branch information
arendondiosa committed May 26, 2024
2 parents 2764c00 + 89dd9f9 commit 915d8e1
Show file tree
Hide file tree
Showing 7 changed files with 276 additions and 31 deletions.
145 changes: 145 additions & 0 deletions src/app/[lang]/sponsors/[uniquepage]/Sponsors.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
'use client';

import React from 'react';
import PropTypes from 'prop-types';
import Image from 'next/image';
import Container from 'react-bootstrap/Container';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faCircle, faGlobe } from '@fortawesome/free-solid-svg-icons';
import {
faXTwitter,
faLinkedinIn,
faGithubAlt,
faFacebook,
faGitlab
} from '@fortawesome/free-brands-svg-icons';

const Sponsors = ({ level, sponsor, lang }) => {
const labels = {
diamond: 'Diamante',
platinum: 'Platinum',
gold: 'Gold',
silver_plus: 'Silver+',
silver: 'Silver',
bronze: 'Bronze'
};

return (
<section id="keynote" className="sponsor">
<div className="keynote-bg sponsor-bg">
<Container>
<Row className="justify-content-center">
<Col xs={12}>
<div className="image-wrapper">
<Image
className={`img-sponsor`}
src={`/images/sponsor/${sponsor.image}`}
alt={sponsor.name}
width={300}
height={300}
/>
<div className="badge-wrapper">
<span className={`badge ${level}`}>{labels[level]}</span>
</div>
</div>
</Col>
</Row>
<Row className="justify-content-center">
<Col xs={12} md={3}>
<div className={`social-icons`}>
{sponsor.facebook && (
<a
href={`https://www.facebook.com/${sponsor.facebook}`}
target="_blank"
rel="noreferrer">
<div className="fa-stack">
<FontAwesomeIcon className="fa-stack-2x" icon={faCircle} color="white" />
<FontAwesomeIcon className="social-icon fa-stack-1x" icon={faFacebook} />
</div>
</a>
)}
{sponsor.twitter && (
<a
href={`https://twitter.com/${sponsor.twitter}`}
target="_blank"
rel="noreferrer"
className="">
<div className="fa-stack">
<FontAwesomeIcon className="fa-stack-2x" icon={faCircle} color="white" />
<FontAwesomeIcon className="social-icon fa-stack-1x" icon={faXTwitter} />
</div>
</a>
)}
{sponsor.linkedin && (
<a
href={`https://www.linkedin.com/in/${sponsor.linkedin}`}
target="_blank"
rel="noreferrer">
<div className="fa-stack">
<FontAwesomeIcon className="fa-stack-2x" icon={faCircle} color="white" />
<FontAwesomeIcon className="social-icon fa-stack-1x" icon={faLinkedinIn} />
</div>
</a>
)}
{sponsor.github && (
<a href={`https://github.com/${sponsor.github}`} target="_blank" rel="noreferrer">
<div className="fa-stack">
<FontAwesomeIcon className="fa-stack-2x" icon={faCircle} color="white" />
<FontAwesomeIcon className="social-icon fa-stack-1x" icon={faGithubAlt} />
</div>
</a>
)}
{sponsor.gitlab && (
<a href={`https://gitlab.com/${sponsor.gitlab}`} target="_blank" rel="noreferrer">
<div className="fa-stack">
<FontAwesomeIcon className="fa-stack-2x" icon={faCircle} color="white" />
<FontAwesomeIcon className="social-icon fa-stack-1x" icon={faGitlab} />
</div>
</a>
)}
{sponsor.website && (
<a href={sponsor.website} target="_blank" rel="noreferrer">
<div className="fa-stack">
<FontAwesomeIcon className="fa-stack-2x" icon={faCircle} color="white" />
<FontAwesomeIcon className="social-icon fa-stack-1x" icon={faGlobe} />
</div>
</a>
)}
</div>
</Col>
</Row>
<Row className="justify-content-center">
<Col xs={12} md={10}>
<div className="">
{sponsor.description ? <p>{sponsor.description[lang]}</p> : null}
</div>
</Col>
<Col xs={12} md={10}>
<div className="button-wrapper">
<Button
variant="primary"
href={`${sponsor.url}`}
target="_blank"
className="button-submit">
Know more
</Button>
</div>
</Col>
</Row>
</Container>
</div>
</section>
);
};

Sponsors.propTypes = {
sponsor: PropTypes.object,
talks: PropTypes.array,
lang: PropTypes.string
};

export default Sponsors;
82 changes: 82 additions & 0 deletions src/app/[lang]/sponsors/[uniquepage]/page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import React from 'react';
import propTypes from 'prop-types';
import { notFound } from 'next/navigation';

import sponsorsList from '@/data/sponsors.json';
import en from '@/data/dictionaries/en.json';
import es from '@/data/dictionaries/es.json';
import Sponsors from './Sponsors';

export async function generateStaticParams() {
const allPages = [];

for (const level in sponsorsList) {
for (const sponsor in sponsorsList[level]) {
if (sponsor.id) {
allPages.push({ uniquepage: sponsor.id.toString(), level });
}
}
}

return allPages;
}

export async function generateMetadata({ params: { uniquepage, lang } }, parent) {
const dataLang = lang === 'en' ? en : es;
const dataSection = dataLang?.sections;
const speakersData = dataSection.sponsors;
let sponsorName = uniquepage;
let sponsorDescription = '';

for (const level in sponsorsList) {
for (const sponsor in sponsorsList[level]) {
const data = sponsorsList[level][sponsor];
if (data.id && data.id.toString() === uniquepage) {
sponsorName = data.name;
sponsorDescription = level;
break;
}
}
}

return {
title: `${sponsorName} - ${speakersData.title}`,
description: sponsorDescription,
openGraph: {
title: sponsorName,
description: sponsorDescription
}
};
}

const Sponsor = ({ params: { uniquepage, lang } }) => {
let sponsorData = null;
let sponsorLevel = null;

for (const level in sponsorsList) {
for (const sponsor in sponsorsList[level]) {
const data = sponsorsList[level][sponsor];
if (data.id && data.id.toString() === uniquepage) {
sponsorData = data;
sponsorLevel = level;
break;
}
}
}

if (!sponsorData) {
console.info('sponsor not found');
notFound();
}

return <Sponsors level={sponsorLevel} sponsor={sponsorData} lang={lang} />;
};

Sponsor.propTypes = {
params: propTypes.shape({
uniquepage: propTypes.string,
lang: propTypes.string
})
};

export default Sponsor;
4 changes: 2 additions & 2 deletions src/app/[lang]/sponsors/components/Sponsor.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Link from 'next/link';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';

const Sponsor = ({ level, sponsorData }) => {
const Sponsor = ({ level, sponsorData, lang }) => {
const sponsorSize = {
diamond: '12',
platinum: '10',
Expand All @@ -29,7 +29,7 @@ const Sponsor = ({ level, sponsorData }) => {
<Row className="justify-content-center">
<Col xs={sponsorSizeSmall[level]} md={sponsorSize[level]}>
<div className="sponsor-container">
<Link href={sponsorData.url || ''} target="_blank" className="link-sponsor">
<Link href={`/${lang}/sponsors/${sponsorData.id}`} className="link-sponsor">
<Image
className="img-sponsor"
src={`/images/sponsor/${sponsorData.image}`}
Expand Down
4 changes: 2 additions & 2 deletions src/app/[lang]/sponsors/components/SponsorList.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Sponsor from './Sponsor';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';

const SponsorList = ({ level, list }) => {
const SponsorList = ({ level, list, lang }) => {
const labels = {
diamond: 'Diamante',
platinum: 'Platinum',
Expand All @@ -27,7 +27,7 @@ const SponsorList = ({ level, list }) => {
</Row>
<Row>
{list.map((sponsor, index) => (
<Sponsor key={index} level={level} sponsorData={sponsor} />
<Sponsor key={index} level={level} sponsorData={sponsor} lang={lang} />
))}
</Row>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/app/[lang]/sponsors/components/Sponsors.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const Sponsors = ({ lang }) => {
</Col>
<Col xs={12} md={7}>
{Object.keys(sponsorsList).map((level, index) => (
<SponsorList key={index} level={level} list={sponsorsList[level]} />
<SponsorList key={index} level={level} list={sponsorsList[level]} lang={lang} />
))}
</Col>
</Row>
Expand Down
12 changes: 11 additions & 1 deletion src/data/sponsors.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,47 @@
"diamond": [],
"platinum": [
{
"id": "nearsure",
"name": "Nearsure",
"image": "nearsure.svg",
"url": "https://nearsure.com/"
},
{
"id": "neostella",
"name": "Neostella",
"image": "neostella.svg",
"url": "https://www.neostella.com/"
}
],
"gold": [
{
"id": "elastic",
"name": "Elastic",
"image": "elastic.svg",
"url": "https://elastic.co/"
},
{
"id": "loka",
"name": "Loka",
"image": "loka.svg",
"url": "https://loka.com/careers"
"url": "https://loka.com/careers",
"description": {
"en": "What you develop matters. At least we think so. We’re Loka, a Silicon Valley full-stack consultancy known for accelerating AI/ML, DevOps, Big Data, and design projects. Since 2004, we’ve shipped software innovations for all sorts of fascinating startups with lofty missions and an impatience to make an impact. We also help Fortune 500 companies such as Gatorade and BCBS nail their builds, strategies, and deadlines. We count more than 200 certified specialists, technical experts, and PhDs among our teammates—creative Lokals who contribute their brilliance not only to serving our clients but also to mentoring younger colleagues. As an AWS Advanced Tier Partner and one of the world’s first and only AWS Generative AI Competency partners, we’re helping set the pace for the industry—and we enjoy every other Friday off in the process. Between launches, you can find us in LokaLabs, our in-house innovation sandbox where we play with moonshot tech to solve underserved societal challenges. Learn more and check out our openings at loka.com/careers.",
"es": "Lo que desarrollas importa. Al menos, eso creemos nosotros. Somos Loka, una consultora full-stack de Silicon Valley especializada en desarrollo de software. Conocida por acelerar proyectos de IA/ML, DevOps, Big Data y diseño, desde 2004 hemos desarrollado innovaciones de software para todo tipo de startups fascinantes con ambiciosas misiones y una gran determinación por generar un impacto. También colaboramos con empresas Fortune 500 como Gatorade y BCBS para construir sus desarrollos y estrategias, y cumplir con sus deadlines. Contamos con más de 200 especialistas certificados, expertos técnicos y PhDs en nuestro equipo: Lokal's creativos que contribuyen con su brillantez no solo al servicio de nuestros clientes, sino también al desarrollo profesional de colegas más jóvenes. Como AWS Advanced Tier Partner y uno de los primeros y únicos AWS Generative AI Competency partners en el mundo, estamos marcando el ritmo de la industria y, en el proceso, disfrutamos de cada dos viernes libres. Conoce también LokaLabs, nuestro laboratorio in-house de innovación donde jugamos con tecnología innovadora para resolver desafíos sociales. Si quieres saber más de nosotros y ver nuestras vacantes consulta en loka.com/careers."
}
}
],
"silver_plus": [
{
"id": "softserve",
"name": "SoftServe",
"image": "softserve.svg",
"url": "https://career.softserveinc.com/es/about/colombia"
}
],
"silver": [
{
"id": "mercado-libre",
"name": "Mercado Libre",
"image": "mercado-libre.svg",
"url": "https://www.mercadolibre.com/"
Expand Down
58 changes: 33 additions & 25 deletions src/styles/partials/_sponsors.sass
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,6 @@

.card-sponsor
margin: 30px 0
.badge
border: 1px solid variables.$black
border-radius: 60px
color: variables.$main-text-color
font-size: 18px
font-weight: 500
letter-spacing: 5px
padding: 10px 20px
text-transform: uppercase
&.diamond
background-image: linear-gradient(to bottom right, #b9f2ff, #b9f2ff, #b9f2ff)
color: variables.$third-text-color
&.platinum
background-image: linear-gradient(to bottom right, #E5E4E2, #E5E4E2, #E5E4E2)
color: variables.$third-text-color
&.gold
background-image: linear-gradient(to bottom right, #FFDE8C,#E7B12D, #F6C651,)
color: variables.$third-text-color
&.silver, &.silver_plus
background-image: linear-gradient(to bottom right, #E5E4E2, #bbbbbb, #a5a39d)
color: variables.$third-text-color
&.bronze
background-image: linear-gradient(to bottom right, #FF8C8B, #FF7372, #FF7372)
color: variables.$third-text-color

.separator
border-top: 1px solid variables.$black
color: variables.$black
Expand All @@ -60,3 +35,36 @@
.img-sponsor
width: 100%
height: auto

.sponsor
.sponsor-bg
background-color: variables.$quaternary-bg-color
color: variables.$third-text-color

.button-wrapper
margin: 30px 0

.badge
border: 1px solid variables.$black
border-radius: 60px
color: variables.$main-text-color
font-size: 18px
font-weight: 500
letter-spacing: 5px
padding: 10px 20px
text-transform: uppercase
&.diamond
background-image: linear-gradient(to bottom right, #b9f2ff, #b9f2ff, #b9f2ff)
color: variables.$third-text-color
&.platinum
background-image: linear-gradient(to bottom right, #E5E4E2, #E5E4E2, #E5E4E2)
color: variables.$third-text-color
&.gold
background-image: linear-gradient(to bottom right, #FFDE8C,#E7B12D, #F6C651,)
color: variables.$third-text-color
&.silver, &.silver_plus
background-image: linear-gradient(to bottom right, #E5E4E2, #bbbbbb, #a5a39d)
color: variables.$third-text-color
&.bronze
background-image: linear-gradient(to bottom right, #FF8C8B, #FF7372, #FF7372)
color: variables.$third-text-color

0 comments on commit 915d8e1

Please sign in to comment.