Big bang/webgune berria (#18)

* chore: netlify deployments plugina kentzen du

* chore: Strapi berria instalatzen du

* feat: astro instalatzen du

* chore: cypress instalatzen du

* feat: back eta front konektatzen ditu

* feat: server side rendering egiten du

* chore: Strapin enterprise edition flagak kentzen ditu

* feat: euskara sartzen du

* chore: Strapi bertsioa igotzen du

* feat: preview modua sortzen du ingurune bariableen bidez

* aurreko commitarekin doa

* fix: cypress konpontzen du

* chore: Strapi bertsioa igotzen du

* feat: ekintza back-ean sortzen du

* feat: zikloa eta erakundea sortzen ditu

* feat: erakundeen kudeaketa hobetzen du

* chore: pnpm erabiltzen du

* feat: Strapi bertsioa igotzen du

* ekintza sortzen du eta zerbitzuak eguneratzen ditu

* chore: graphql erabiltzen du populazioa ekiditeko

* chore: collection erabiltzen du ekintzetarako

* chore: bertsioak igotzen ditu

* chore: Astro bertsioa igotzen du

* chore: Strapi bertsioa igotzen du

* feat: home-a hasten du

* feat: zig zag separadorea sortzen du

* feat: zig zaga doitzen du

* feat: heroa doitzen du

* feat: agenda sortzen du

* feat: agenda eta izan labazkide atalak konektatzen ditu

* feat: home-aren edukia sortzen du

* chore: app.js sartzen du WTF

* feat: header-a sortzen du

* feat: card-a hobetzen du

* feat: footer-a sortzen du

* feat: ekintzen zerrenda erakusten du

* feat: zikloaren bista sortzen du

* fix: header-aren estekak konpontzen ditu

* chore: remove unused code

* chore: components directorioa kentzen du

* chore: typescript konfigurazioa hobetzen du

* chore: views path-a sortzen du

* feat: zikloaren deskribapena erakusten du

* feat: ekintzaren bista sortzen du

* feat: zig zag marra erakusten du

* ignore: comment

* feat: hitzordua erakusten du

* feat: zikloa erakusten du

* feat: Waveko erroreak errepasatzen ditu

* feat: Wave birpasatzen du

* feat: zerrendan irudia erakusten du

* feat: karga optimizatzen du

* feat: irudien formatuak kontuan hartzen ditu

* feat: zikloan ekintza irudiak erakusten ditu

* feat: ekintza zerrenda atontzen du

* feat: header-eko estekak markatzen ditu

* feat: irudi estela erakusten du

* feat: responsive-a hobetzen du

* feat: orri basikoa sortzen du

* feat: hasiera responsive egiten du

* feat: overflow konpontzen du

* feat: bug-a uzten du LOL

* feat: irudi estela mugikorrean aktibatzen du

* feat: orri basikoa eta ekintza mugikorrean jartzen ditu

* feat: mugikor menua sortzen du

* feat: mugikor menua amaitzen du

* feat: build estatikoa sortzen du

* feat: sitemap-a sortzen du

* feat: rss feed-a sortzen du

* chore: ingurune aldagaiak sortzen ditu

* chore: public-proxy komandoa sortzen du

* feat: irudiak webp formatuan jartzen ditu

* fix: irudiak erakusten ditu ekintzen zerrendan

* feat: ekintza zerrendaren irudia animatzen du

* refactor: extract functions

* fix: animazioa konpontzen du

* feat: irudi estela hobetzen du

* chore: prerender aldagaiak kentzen ditu

* chore: SASS warning-ak kentzen ditu

* feat: ziklo eta ekintzetan H1 ezartzen du

* feat: slideshow-a sortzen du

* feat: ekintzak hitzorduan oinarrituta filtratzen ditu

* feat: hitzorduen arabera filtratzen du eta moment kentzen du

* feat: titulua aldatzen du

* feat: menua eguneratzen du

* feat: parte hartun deskribapena sortzen du

* feat: Cloudinary konfiguratzen du

* fix: cloudinary konfigurazioa konpontzen du

* feat: erositako fonteak jartzen ditu
This commit is contained in:
Aitor Urrutia
2025-08-29 19:43:56 +02:00
committed by GitHub
parent 67110a4821
commit 93fb0c9b40
325 changed files with 23452 additions and 26547 deletions

View File

@@ -1,18 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { NotFound } from '../views/NotFound';
const NotFoundPage: React.FC<PageProps> = ({ location }) => {
return (
<>
<SEO title="Ez dugu orria topatu" location={location} />
<NotFound />
</>
);
};
export default NotFoundPage;

View File

@@ -0,0 +1,16 @@
---
import OrriBasikoaView from "views/orriBasikoa/OrriBasikoa.astro";
import { getCollection } from "astro:content";
export async function getStaticPaths() {
const orriBasikoak = await getCollection("orriBasikoak");
return orriBasikoak.map((orriBasikoa) => ({
params: { orriBasikoa: orriBasikoa.data.slug },
props: { orriBasikoa: orriBasikoa.data },
}));
}
const { orriBasikoa } = Astro.props;
---
<OrriBasikoaView orriBasikoa={orriBasikoa} />

View File

@@ -1,55 +0,0 @@
import React from 'react';
import { graphql, PageProps } from 'gatsby';
import { SEO } from '../../../components/SEO';
import { EkintzaContent } from '../../../domain/ekintza/EkintzaContent';
import { Ekintza } from '../../../views/Ekintza/Ekintza';
import { NotFound } from '../../../views/NotFound';
interface QueryData {
strapiEkintza: EkintzaContent;
}
const EkintzaPage: React.FC<PageProps<QueryData>> = ({ location, data }) => {
const content = data.strapiEkintza;
// TODO testeatu eta produkzioan jarri
if (process.env.NODE_ENV === 'production') {
return <NotFound />;
}
return (
<>
<SEO title={content.izenburua} location={location} />
<Ekintza content={content} />
</>
);
};
export const query = graphql`
fragment Ekintza on StrapiEkintza {
slug
izenburua
titularra
deskribapena
hitzordua
zikloa {
slug
izena
}
kartela {
alternativeText
formats
}
}
query ($slug: String) {
strapiEkintza(slug: { eq: $slug }) {
...Ekintza
}
}
`;
export default EkintzaPage;

View File

@@ -1,56 +0,0 @@
import React from 'react';
import { graphql, PageProps } from 'gatsby';
import { SEO } from '../../components/SEO';
import { BiziContent } from '../../domain/bizi/BiziContent';
import { EkintzaContent } from '../../domain/ekintza/EkintzaContent';
import { ZikloaContent } from '../../domain/zikloa/ZikloaContent';
import { Bizi } from '../../views/Bizi';
import { NotFound } from '../../views/NotFound';
interface QueryData {
strapiBizi: BiziContent;
allStrapiEkintza: { nodes: EkintzaContent[] };
allStrapiZikloa: { nodes: ZikloaContent[] };
}
const BiziPage: React.FC<PageProps<QueryData>> = ({ location, data }) => {
const content = data.strapiBizi;
const ekintzak = data.allStrapiEkintza.nodes;
const zikloak = data.allStrapiZikloa.nodes;
// TODO testeatu eta produkzioan jarri
if (process.env.NODE_ENV === 'production') {
return <NotFound />;
}
return (
<>
<SEO title={content.izenburua} location={location} />
<Bizi content={content} ekintzak={ekintzak} zikloak={zikloak} />
</>
);
};
export const query = graphql`
{
strapiBizi {
deskribapena
izenburua
}
allStrapiEkintza(sort: { hitzordua: ASC }) {
nodes {
...Ekintza
}
}
allStrapiZikloa {
nodes {
...Zikloa
}
}
}
`;
export default BiziPage;

View File

@@ -1,48 +0,0 @@
import React from 'react';
import { graphql, PageProps } from 'gatsby';
import { SEO } from '../../../components/SEO';
import { ZikloaContent } from '../../../domain/zikloa/ZikloaContent';
import { NotFound } from '../../../views/NotFound';
import { Zikloa } from '../../../views/Zikloa/Zikloa';
interface QueryData {
strapiZikloa: ZikloaContent;
}
const ZikloaPage: React.FC<PageProps<QueryData>> = ({ location, data }) => {
const content = data.strapiZikloa;
// TODO testeatu eta produkzioan jarri
if (process.env.NODE_ENV === 'production') {
return <NotFound />;
}
return (
<>
<SEO title={content.izena} location={location} />
<Zikloa content={content} />
</>
);
};
export const query = graphql`
fragment Zikloa on StrapiZikloa {
slug
izena
deskribapena
ekintzak {
...Ekintza
}
}
query ($slug: String) {
strapiZikloa(slug: { eq: $slug }) {
...Zikloa
}
}
`;
export default ZikloaPage;

View File

@@ -0,0 +1,16 @@
---
import { getCollection } from "astro:content";
import EkintzaView from "views/ekintza/Ekintza.astro";
export async function getStaticPaths() {
const ekintzak = await getCollection("ekintzak");
return ekintzak.map((ekintza) => ({
params: { ekintza: ekintza.data.slug },
props: { ekintza: ekintza.data },
}));
}
const { ekintza } = Astro.props;
---
<EkintzaView ekintza={ekintza} />

View File

@@ -0,0 +1,10 @@
---
import { getCollection } from "astro:content";
import { type Ekintza } from "models/Ekintza";
import Ekintzak from "views/ekintzak/Ekintzak.astro";
const ekintzakCollection = await getCollection("ekintzak");
const ekintzak: Ekintza[] = ekintzakCollection.map(({ data }) => data);
---
<Ekintzak ekintzak={ekintzak} />

View File

@@ -0,0 +1,51 @@
---
import { getCollection } from "astro:content";
import { type Ekintza } from "models/Ekintza";
import Hasiera from "views/hasiera/Hasiera.astro";
const response = await fetch(`${import.meta.env.STRAPI_URL}/graphql`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
query: `
query {
hasiera {
izenburua
izanLabazkide {
izenburua
deskribapena
url {
label
url
}
}
parteHartu {
izenburua
deskribapena
parteHartzea {
ikonoa
izenburua
deskribapena
email
}
}
mosaikoa (pagination: {
limit: 60
}) {
alternativeText
formats
}
}
}
`,
}),
});
const json = await response.json();
const { hasiera } = json.data;
const ekintzakCollection = await getCollection("ekintzak");
const ekintzak: Ekintza[] = ekintzakCollection.map(({ data }) => data);
---
<Hasiera hasiera={hasiera} ekintzak={ekintzak} />

View File

@@ -1,25 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { useHasieraContent } from '../domain/hasiera/hooks/useHasieraContent';
import { Hasiera } from '../views/Hasiera/Hasiera';
const IndexPage: React.FC<PageProps> = ({ location }) => {
const content = useHasieraContent();
return (
<>
<SEO
title={content.izenburua}
description={content.deskribapena}
location={location}
/>
<Hasiera content={content} />
</>
);
};
export default IndexPage;

View File

@@ -1,25 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { useKafetegiaContent } from '../domain/kafetegia/hooks/useKafetegiaContent';
import { Kafetegia } from '../views/Kafetegia';
const KafetegiaPage: React.FC<PageProps> = ({ location }) => {
const content = useKafetegiaContent();
return (
<>
<SEO
title={content.izenburua}
description={content.deskribapena}
location={location}
/>
<Kafetegia content={content} />
</>
);
};
export default KafetegiaPage;

View File

@@ -1,21 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { useLegeOharraContent } from '../domain/basicPage/hooks/useLegeOharraContent';
import { RegularPage } from '../views/RegularPage';
const LegeOharra: React.FC<PageProps> = ({ location }) => {
const content = useLegeOharraContent();
return (
<>
<SEO title={content.izenburua} location={location} />
<RegularPage content={content} />
</>
);
};
export default LegeOharra;

View File

@@ -1,21 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { usePribatutasunPolitikaContent } from '../domain/basicPage/hooks/usePribatutasunPolitikaContent';
import { RegularPage } from '../views/RegularPage/RegularPage';
const PribatutasunPolitika: React.FC<PageProps> = ({ location }) => {
const content = usePribatutasunPolitikaContent();
return (
<>
<SEO title={content.izenburua} location={location} />
<RegularPage content={content} />
</>
);
};
export default PribatutasunPolitika;

View File

@@ -0,0 +1,31 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
import { marked } from "marked";
import type { Ekintza } from "models/Ekintza";
export async function GET() {
const ekintzak = await getCollection("ekintzak");
return rss({
// `<title>` field in output xml
title: "Laba",
// `<description>` field in output xml
description: "Euskaraz, Iruñea esaten da",
// Pull in your project "site" from the endpoint context
// https://docs.astro.build/en/reference/api-reference/#site
site: import.meta.env.SITE_URL,
// Array of `<item>`s in output xml
// See "Generating items" section for examples using content collections and glob imports
items: ekintzak.map(({ data }: { data: Ekintza }) => ({
title: data.izenburua,
pubDate: new Date(data.createdAt),
description: data.titularra || undefined,
link: `${import.meta.env.SITE_URL}/ekintzak/${data.slug}`,
content: data.deskribapena
? marked.parse(data.deskribapena, { async: false })
: undefined,
})),
// (optional) inject custom xml
customData: `<language>eu</language>`,
});
}

View File

@@ -0,0 +1,16 @@
---
import { getCollection } from "astro:content";
import ZikloaView from "views/zikloa/Zikloa.astro";
export async function getStaticPaths() {
const zikloak = await getCollection("zikloak");
return zikloak.map((zikloa) => ({
params: { zikloa: zikloa.data.slug },
props: { zikloa: zikloa.data },
}));
}
const { zikloa } = Astro.props;
---
<ZikloaView zikloa={zikloa} />