feat: menua eguneratzen du (#10)

* feat: menua eguneratzen du

* ignore: komentarioa
This commit is contained in:
Aitor Urrutia
2023-12-19 19:15:31 +01:00
committed by GitHub
parent 8e76a416d9
commit cbdfd68d67
10 changed files with 159 additions and 361 deletions

View File

@@ -20,46 +20,12 @@
"type": "text", "type": "text",
"required": true "required": true
}, },
"edariBeroak": { "menua": {
"displayName": "edaria", "type": "dynamiczone",
"type": "component", "components": [
"repeatable": true, "kafetegia.produktu-taldea",
"component": "kafetegia.edaria" "kafetegia.izenburua"
}, ]
"infusioEkologikoak": {
"type": "component",
"repeatable": true,
"component": "kafetegia.edaria"
},
"edariHotzak": {
"type": "component",
"repeatable": true,
"component": "kafetegia.edaria"
},
"pikatzekoak": {
"type": "component",
"repeatable": true,
"component": "kafetegia.edaria"
},
"gozoak": {
"type": "component",
"repeatable": true,
"component": "kafetegia.edaria"
},
"anizkoJogurta": {
"type": "component",
"repeatable": false,
"component": "kafetegia.edaria"
},
"tostadak": {
"type": "component",
"repeatable": true,
"component": "kafetegia.edaria"
},
"konboak": {
"type": "component",
"repeatable": true,
"component": "kafetegia.edaria"
} }
} }
} }

View File

@@ -0,0 +1,15 @@
{
"collectionName": "components_kafetegia_izenburuas",
"info": {
"displayName": "Izenburua",
"icon": "strikeThrough",
"description": ""
},
"options": {},
"attributes": {
"izenburuBalioa": {
"type": "string",
"required": true
}
}
}

View File

@@ -0,0 +1,19 @@
{
"collectionName": "components_kafetegia_produktu_taldeas",
"info": {
"displayName": "Produktu taldea"
},
"options": {},
"attributes": {
"izenburua": {
"type": "string"
},
"produktuak": {
"displayName": "produktuak",
"type": "component",
"repeatable": true,
"component": "kafetegia.edaria",
"required": true
}
}
}

View File

@@ -67,6 +67,30 @@ export interface KafetegiaEdaria extends Schema.Component {
}; };
} }
export interface KafetegiaIzenburua extends Schema.Component {
collectionName: 'components_kafetegia_izenburuas';
info: {
displayName: 'Izenburua';
icon: 'strikeThrough';
description: '';
};
attributes: {
izenburuBalioa: Attribute.String & Attribute.Required;
};
}
export interface KafetegiaProduktuTaldea extends Schema.Component {
collectionName: 'components_kafetegia_produktu_taldeas';
info: {
displayName: 'Produktu taldea';
};
attributes: {
izenburua: Attribute.String;
produktuak: Attribute.Component<'kafetegia.edaria', true> &
Attribute.Required;
};
}
export interface OrokorraDatuOrokorrak extends Schema.Component { export interface OrokorraDatuOrokorrak extends Schema.Component {
collectionName: 'components_orokorra_datu_orokorraks'; collectionName: 'components_orokorra_datu_orokorraks';
info: { info: {
@@ -97,6 +121,8 @@ declare module '@strapi/types' {
export interface Components { export interface Components {
'kafetegia.alergenoa': KafetegiaAlergenoa; 'kafetegia.alergenoa': KafetegiaAlergenoa;
'kafetegia.edaria': KafetegiaEdaria; 'kafetegia.edaria': KafetegiaEdaria;
'kafetegia.izenburua': KafetegiaIzenburua;
'kafetegia.produktu-taldea': KafetegiaProduktuTaldea;
'orokorra.datu-orokorrak': OrokorraDatuOrokorrak; 'orokorra.datu-orokorrak': OrokorraDatuOrokorrak;
'orokorra.helbidea': OrokorraHelbidea; 'orokorra.helbidea': OrokorraHelbidea;
} }

View File

@@ -724,14 +724,9 @@ export interface ApiKafetegiaKafetegia extends Schema.SingleType {
attributes: { attributes: {
izenburua: Attribute.String & Attribute.Required; izenburua: Attribute.String & Attribute.Required;
deskribapena: Attribute.Text & Attribute.Required; deskribapena: Attribute.Text & Attribute.Required;
edariBeroak: Attribute.Component<'kafetegia.edaria', true>; menua: Attribute.DynamicZone<
infusioEkologikoak: Attribute.Component<'kafetegia.edaria', true>; ['kafetegia.produktu-taldea', 'kafetegia.izenburua']
edariHotzak: Attribute.Component<'kafetegia.edaria', true>; >;
pikatzekoak: Attribute.Component<'kafetegia.edaria', true>;
gozoak: Attribute.Component<'kafetegia.edaria', true>;
anizkoJogurta: Attribute.Component<'kafetegia.edaria'>;
tostadak: Attribute.Component<'kafetegia.edaria', true>;
konboak: Attribute.Component<'kafetegia.edaria', true>;
createdAt: Attribute.DateTime; createdAt: Attribute.DateTime;
updatedAt: Attribute.DateTime; updatedAt: Attribute.DateTime;
publishedAt: Attribute.DateTime; publishedAt: Attribute.DateTime;

View File

@@ -1,2 +1,3 @@
GATSBY_ROOT_URL=https://laba-webgunea.netlify.app GATSBY_ROOT_URL=https://laba-webgunea.netlify.app
API_URL=https://vervet-big-dassie.ngrok-free.app API_URL=https://vervet-big-dassie.ngrok-free.app
STRAPI_GRAPHQL_TOKEN=307442ef6911b9692d6946bf6aac5d910795b56d92063e8a58ace14e31c8ac6ad7b64480ba591689abbad02758da9562e423e1ef1af8b9f303612ffb63f94f567060ea9f690d9d14bce676bdcf985a2a8c95643963ffd6f593490bb4b4ccae51572cbf315e7c823d0f368de2fe113b113986e9943df1a81e6e4228b82cc7cead

View File

@@ -15,20 +15,14 @@ import { useKafetegiaData } from '../viewQueries/useKafetegiaData';
import { AlergenoLegenda } from '../components/AlergenoLegenda'; import { AlergenoLegenda } from '../components/AlergenoLegenda';
import { Oina } from '../components/Oina'; import { Oina } from '../components/Oina';
import { SEO } from '../components/SEO'; import { SEO } from '../components/SEO';
import { produktuaFactory } from '../domain/factories/produktuaFactory';
const Kafetegia: React.VFC<PageProps> = ({ location }) => { const Kafetegia: React.VFC<PageProps> = ({ location }) => {
const { const { izenburua, deskribapena, menua } = useKafetegiaData();
izenburua,
deskribapena, // oraingoz menuak alergenorik ez duenez, ezkutatuko dugu
anizkoJogurta, // TODO modu dinamikoan aldatu balio hau
edariBeroak, const hasAlergenoak = false;
edariHotzak,
infusioEkologikoak,
pikatzekoak,
gozoak,
tostadak,
konboak,
} = useKafetegiaData();
return ( return (
<> <>
@@ -47,80 +41,47 @@ const Kafetegia: React.VFC<PageProps> = ({ location }) => {
<ContentWrapper id="edukia"> <ContentWrapper id="edukia">
<Container> <Container>
<TaldeWrapper> {menua.map(konponentea => {
<IzenburuWrapper> if (
<Marra /> konponentea.konponentea ===
<Izenburua>Edariak</Izenburua> 'StrapiComponentKafetegiaProduktuTaldea'
</IzenburuWrapper> ) {
<ZerrendaWrapper> return (
<ProduktuZerrenda <>
izena="Edari beroak" <ZerrendaWrapper>
produktuZerrenda={edariBeroak} <ProduktuZerrenda
/> izena={konponentea.izenburua}
</ZerrendaWrapper> produktuZerrenda={konponentea.produktuak.map(
<ZerrendaWrapper> produktuaFactory,
<ProduktuZerrenda )}
izena="Infusio ekologikoak" />
produktuZerrenda={infusioEkologikoak} </ZerrendaWrapper>
/> </>
</ZerrendaWrapper> );
<ZerrendaWrapper> }
<ProduktuZerrenda
izena="Edari hotzak"
produktuZerrenda={edariHotzak}
/>
</ZerrendaWrapper>
</TaldeWrapper>
<TaldeWrapper> if (
<IzenburuWrapper> konponentea.konponentea === 'StrapiComponentKafetegiaIzenburua'
<Marra /> ) {
<Izenburua>Jakiak</Izenburua> return (
</IzenburuWrapper> <IzenburuWrapper>
<ZerrendaWrapper> <Marra />
<ProduktuZerrenda <Izenburua>{konponentea.izenburuBalioa}</Izenburua>
izena="Pikatzekoak" </IzenburuWrapper>
produktuZerrenda={pikatzekoak} );
/> }
</ZerrendaWrapper> })}
<ZerrendaWrapper>
<ProduktuZerrenda izena="Tostadak" produktuZerrenda={tostadak} />
</ZerrendaWrapper>
<ZerrendaWrapper>
<ProduktuZerrenda izena="Gozoak" produktuZerrenda={gozoak} />
</ZerrendaWrapper>
<ZerrendaWrapper>
<ProduktuZerrenda
izena="Anizko Jogurta"
produktuZerrenda={[anizkoJogurta]}
/>
</ZerrendaWrapper>
</TaldeWrapper>
</Container>
<KonboWrapper> {hasAlergenoak && (
<Container> <TaldeWrapper>
<IzenburuWrapper> <IzenburuWrapper>
<Marra /> <Marra />
<Izenburua>GOSARI KONBOAK</Izenburua> <Izenburua>Alergenoak</Izenburua>
</IzenburuWrapper> </IzenburuWrapper>
<KonboAzalpena>
11:00ak arte. Gehitu hauetako bat zure tostada, pintxo edo
bizkotxoari.
</KonboAzalpena>
<ProduktuZerrenda produktuZerrenda={konboak} />
</Container>
</KonboWrapper>
<Container> <AlergenoLegenda />
<TaldeWrapper> </TaldeWrapper>
<IzenburuWrapper> )}
<Marra />
<Izenburua>Alergenoak</Izenburua>
</IzenburuWrapper>
<AlergenoLegenda />
</TaldeWrapper>
<OnEgin> <OnEgin>
<p>On egin!</p> <p>On egin!</p>
@@ -133,18 +94,6 @@ const Kafetegia: React.VFC<PageProps> = ({ location }) => {
); );
}; };
const KonboAzalpena = styled.p`
margin-bottom: ${size.base}px;
text-align: right;
`;
const KonboWrapper = styled.div`
background-color: ${colors.horia};
padding-top: ${size.base}px;
padding-bottom: ${size.base}px;
margin-bottom: ${size.large}px;
`;
const OnEgin = styled.div` const OnEgin = styled.div`
text-align: center; text-align: center;
${font.gargantuan()}; ${font.gargantuan()};

View File

@@ -1,14 +1,7 @@
import { Produktua } from '../domain/models/Produktua'; import { MenuKonponentea } from './useKafetegiaData';
export interface KafetegiaData { export interface KafetegiaData {
deskribapena: string; deskribapena: string;
izenburua: string; izenburua: string;
edariBeroak: Produktua[]; menua: MenuKonponentea[];
infusioEkologikoak: Produktua[];
edariHotzak: Produktua[];
pikatzekoak: Produktua[];
gozoak: Produktua[];
anizkoJogurta: Produktua;
tostadak: Produktua[];
konboak: Produktua[];
} }

View File

@@ -1,223 +1,64 @@
import { graphql, useStaticQuery } from 'gatsby'; import { graphql, useStaticQuery } from 'gatsby';
import { ProduktuaDTO } from '../domain/dtos/ProduktuaDTO'; import { ProduktuaDTO } from '../domain/dtos/ProduktuaDTO';
import { produktuaFactory } from '../domain/factories/produktuaFactory';
import { KafetegiaData } from './KafetegiaData'; import { KafetegiaData } from './KafetegiaData';
export type MenuKonponentea =
| {
konponentea: 'StrapiComponentKafetegiaIzenburua';
izenburuBalioa: string;
}
| {
konponentea: 'StrapiComponentKafetegiaProduktuTaldea';
izenburua: string;
produktuak: ProduktuaDTO[];
};
interface DataProps { interface DataProps {
strapiKafetegia: { strapiKafetegia: {
deskribapena: string; deskribapena: string;
izenburua: string; izenburua: string;
edariBeroak: ProduktuaDTO[]; menua: MenuKonponentea[];
infusioEkologikoak: ProduktuaDTO[];
edariHotzak: ProduktuaDTO[];
pikatzekoak: ProduktuaDTO[];
gozoak: ProduktuaDTO[];
anizkoJogurta: ProduktuaDTO;
tostadak: ProduktuaDTO[];
konboak: ProduktuaDTO[];
}; };
} }
export function useKafetegiaData(): KafetegiaData { export function useKafetegiaData(): KafetegiaData {
const { const {
strapiKafetegia: { strapiKafetegia: { izenburua, deskribapena, menua },
izenburua,
deskribapena,
anizkoJogurta,
edariBeroak,
edariHotzak,
infusioEkologikoak,
pikatzekoak,
gozoak,
tostadak,
konboak,
},
} = useStaticQuery<DataProps>(graphql` } = useStaticQuery<DataProps>(graphql`
{ {
strapiKafetegia { strapiKafetegia {
izenburua izenburua
deskribapena deskribapena
anizkoJogurta { menua {
alergenoak { konponentea: __typename
apioa ... on StrapiComponentKafetegiaIzenburua {
arraina izenburuBalioa
arrautzak id
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
} }
beganoa ... on StrapiComponentKafetegiaProduktuTaldea {
ekologikoa izenburua
izena produktuak {
prezioa izena
} prezioa
edariBeroak { beganoa
id ekologikoa
ekologikoa alergenoak {
beganoa apioa
izena arraina
prezioa arrautzak
alergenoak { esnekiak
apioa fruituLehorrak
arraina glutena
arrautzak kakahueteak
esnekiak krustazeoak
fruituLehorrak lupinuak
glutena moluskuak
kakahueteak sesamoa
krustazeoak soja
lupinuak sulfitoak
moluskuak ziapea
sesamoa }
soja }
sulfitoak
ziapea
}
}
edariHotzak {
id
ekologikoa
beganoa
izena
prezioa
alergenoak {
apioa
arraina
arrautzak
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
}
}
infusioEkologikoak {
id
ekologikoa
beganoa
izena
prezioa
alergenoak {
apioa
arraina
arrautzak
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
}
}
pikatzekoak {
id
ekologikoa
beganoa
izena
prezioa
alergenoak {
apioa
arraina
arrautzak
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
}
}
gozoak {
id
ekologikoa
beganoa
izena
prezioa
alergenoak {
apioa
arraina
arrautzak
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
}
}
tostadak {
id
ekologikoa
beganoa
izena
prezioa
alergenoak {
apioa
arraina
arrautzak
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
}
}
konboak {
id
ekologikoa
beganoa
izena
prezioa
alergenoak {
apioa
arraina
arrautzak
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
} }
} }
} }
@@ -227,13 +68,6 @@ export function useKafetegiaData(): KafetegiaData {
return { return {
izenburua, izenburua,
deskribapena, deskribapena,
anizkoJogurta: produktuaFactory(anizkoJogurta), menua,
edariBeroak: edariBeroak.map(produktuaFactory),
edariHotzak: edariHotzak.map(produktuaFactory),
infusioEkologikoak: infusioEkologikoak.map(produktuaFactory),
pikatzekoak: pikatzekoak.map(produktuaFactory),
gozoak: gozoak.map(produktuaFactory),
tostadak: tostadak.map(produktuaFactory),
konboak: konboak.map(produktuaFactory),
}; };
} }