Skip to content

Commit

Permalink
#97 Agregar filtro de tags
Browse files Browse the repository at this point in the history
  • Loading branch information
arendondiosa committed May 12, 2024
1 parent e5390ed commit 3afb3ce
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 11 deletions.
6 changes: 3 additions & 3 deletions src/app/[lang]/talks/[uniquepage]/Talk.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ const Talk = ({ talk, lang }) => {
</Col>
<Col xs={12}>
{talk.tags.map((tag) => (
<span key={tag} className={`badge default ${tag}`}>
{tag}
</span>
<Link key={tag} href={`/${lang}/talks/tags/${tag}`}>
<span className={`badge default ${tag}`}>{tag}</span>
</Link>
))}
</Col>
</Row>
Expand Down
6 changes: 3 additions & 3 deletions src/app/[lang]/talks/components/Card.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ const Card = ({ talkData, index, lang, langMapping }) => {
</Col>
<Col xs={12}>
{talkData.tags.map((tag) => (
<span key={tag} className={`badge default ${tag}`}>
{tag}
</span>
<Link key={tag} href={`/${lang}/talks/tags/${tag}`}>
<span className={`badge default ${tag}`}>{tag}</span>
</Link>
))}
</Col>
<Col xs={12}>
Expand Down
38 changes: 35 additions & 3 deletions src/app/[lang]/talks/components/Talks.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
'use client';

import React from 'react';
import React, { useState, useEffect } from 'react';
import propTypes from 'prop-types';
import Container from 'react-bootstrap/Container';
import Form from 'react-bootstrap/Form';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';

Expand All @@ -11,16 +12,47 @@ import Title from '@/app/[lang]/talks/components/Title';

import { useI18n } from '@/contexts/I18nContext';

const Talks = ({ lang, talksList }) => {
const Talks = ({ lang, talksList, defaultTag, allTags }) => {
const i18nDictionary = useI18n();
const [tagFilter, setTagFilter] = useState(defaultTag || 'all');
const [talks, setTalks] = useState(talksList);

useEffect(() => {
if (tagFilter === 'all') {
setTalks(talksList);
} else {
setTalks(talksList.filter((talk) => talk.tags.includes(tagFilter)));
}
}, [tagFilter, talksList]);

return (
<section id="keynotes">
<div className="keynotes-bg">
<Title content={i18nDictionary?.sections?.talks} />
<Container>
<Row className="justify-content-center">
{talksList.map((talk, index) => (
<Col xs={12} md={4}>
<Form.Group controlId="formBasicSelect">
<Form.Label>Filter</Form.Label>
<Form.Control
as="select"
value={tagFilter}
onChange={(e) => {
setTagFilter(e.target.value);
}}>
<option value="all">All</option>
{allTags &&
allTags.map((tag) => (
<option key={tag} value={tag}>
{tag}
</option>
))}
</Form.Control>
</Form.Group>
</Col>
</Row>
<Row className="justify-content-center">
{talks.map((talk, index) => (
<Col xs={12} md={6} key={talk.id}>
<Card
talkData={talk}
Expand Down
15 changes: 14 additions & 1 deletion src/app/[lang]/talks/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,21 @@ export async function generateMetadata({ params: { lang } }, parent) {
};
}

const getAllTags = () => {
const tags = [];

talksList.forEach((talk) => {
talk.tags.forEach((tag) => {
if (!tags.includes(tag)) {
tags.push(tag);
}
});
});
return tags;
};

const Page = ({ params: { lang } }) => {
return <Talks lang={lang} talksList={talksList} />;
return <Talks lang={lang} talksList={talksList} allTags={getAllTags()} />;
};

Page.propTypes = {
Expand Down
2 changes: 1 addition & 1 deletion src/app/[lang]/talks/tags/[uniquepage]/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const UniquePage = ({ params: { uniquepage, lang } }) => {
notFound();
}

return <Talks talksList={talks} lang={lang} />;
return <Talks talksList={talks} lang={lang} defaultTag={uniquepage} />;
};

UniquePage.propTypes = {
Expand Down

0 comments on commit 3afb3ce

Please sign in to comment.