|
3 | 3 | import Hero from '@/components/Hero.svelte'; |
4 | 4 | import IconTextAction from '@/components/IconTextAction.svelte'; |
5 | 5 | import SubscribeBox from '@/components/SubscribeBox.svelte'; |
6 | | - import Badge from '@/components/Badge.svelte'; |
7 | 6 | import ProjectCard from '@/components/Cards/ProjectCard.svelte'; |
8 | | - export let data |
9 | | - const { projects } = data |
| 7 | + import MenuTagsProject from '@/components/MenuTagsProject.svelte'; |
| 8 | + export let data; |
| 9 | + const { projects, tags } = data; |
| 10 | + let activeTags = []; |
| 11 | + let filteredProjects = [...projects]; |
| 12 | +
|
| 13 | + const getFilteredProjects = () => { |
| 14 | + const setToLowerCase = (item = '') => item?.toLowerCase(); |
| 15 | + const areTagsIncluded = (item = '') => activeTags?.includes(item); |
| 16 | +
|
| 17 | + filteredProjects = Boolean(activeTags?.length) |
| 18 | + ? projects.filter(project => project.tags?.map(setToLowerCase).some(areTagsIncluded)) |
| 19 | + : [...projects]; |
| 20 | + } |
| 21 | +
|
| 22 | + const addToFilter = (tag = '') => { |
| 23 | + if (activeTags.includes(tag)) { |
| 24 | + return false; |
| 25 | + } |
| 26 | +
|
| 27 | + tag = tag.toLowerCase(); |
| 28 | + activeTags.push(tag); |
| 29 | + getFilteredProjects(); |
| 30 | + } |
| 31 | +
|
| 32 | + const removeFromFilter = (tag = '') => { |
| 33 | + tag = tag.toLowerCase(); |
| 34 | + activeTags = activeTags.filter(val => val !== tag); |
| 35 | + getFilteredProjects(); |
| 36 | + } |
10 | 37 |
|
11 | 38 | updateMenuSelector({url: '/proyectos'}) |
12 | 39 | </script> |
|
30 | 57 |
|
31 | 58 | <section id="nuestros-proyectos" class="container mx-auto my-12 p-3"> |
32 | 59 | <h1 class="text-4xl font-bold my-3">Conoce nuestros proyectos</h1> |
33 | | - <!-- TODO: Habilitar Badges --> |
34 | | - <!-- <div class="flex gap-4 my-6 flex-wrap"> |
35 | | - <Badge text="Movilidad" color="#F3F3F4"/> |
36 | | - <Badge text="Educación" color="#F2D301"/> |
37 | | - <Badge text="Legislativo" color="#F3F3F4"/> |
38 | | - <Badge text="Datos abiertos" color="#F3F3F4"/> |
39 | | - <Badge text="Código abierto" color="#F3F3F4"/> |
40 | | - </div> --> |
41 | | - <!-- <div class="flex flex-col basis-1/3 md:flex-row columns-3 container my-8 mx-auto gap-20"> --> |
42 | | - <div class="grid grid-cols-1 md:grid-cols-3 container my-8 mx-auto gap-20"> |
43 | | - {#each projects as project} |
| 60 | + <div class="flex gap-4 my-6 flex-wrap"> |
| 61 | + <MenuTagsProject tags={tags} addToFilter={addToFilter} removeFromFilter={removeFromFilter} /> |
| 62 | + </div> |
| 63 | + <div class="grid grid-cols-1 md:grid-cols-3 container my-8 mx-auto gap-20"> |
| 64 | + {#each filteredProjects as project} |
44 | 65 | <div class="my-5"> |
45 | 66 | <ProjectCard |
46 | 67 | title={project.title} |
|
0 commit comments