OG Image jartzen du (#7)

* feat: og image sartzen du sanferminetan

* feat: SEO konponentea sortzen du

* refactor: orri guztietan SEO konponentea erabiltzen du

* feat: focus hobetzen du

* feat: favicon aldatzen du

* feat: koloreak aldatzen ditu
This commit is contained in:
Aitor Urrutia
2023-07-03 19:13:17 +02:00
committed by GitHub
parent 89436522b2
commit de10cfc551
16 changed files with 119 additions and 64 deletions

9
front/index.d.ts vendored Normal file
View File

@@ -0,0 +1,9 @@
declare module '*.png' {
const value: string;
export default value;
}
declare module '*.jpeg' {
const value: string;
export default value;
}

View File

@@ -2,7 +2,7 @@
<defs> <defs>
<style> <style>
.cls-1 { .cls-1 {
fill: #510DFB; fill: #191919;
} }
</style> </style>
</defs> </defs>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,9 +1,9 @@
import React from 'react'; import React from 'react';
import { Link } from 'gatsby';
import styled, { css } from 'styled-components'; import styled, { css } from 'styled-components';
import { rem } from 'polished'; import { rem } from 'polished';
import { size } from '../../ui/theme'; import { size } from '../../ui/theme';
import { AtalaName } from './Gainburua'; import { AtalaName } from './Gainburua';
import { GainburuLink } from './GainburuLink';
interface Props { interface Props {
atala?: AtalaName; atala?: AtalaName;
@@ -14,13 +14,13 @@ export const DesktopNabigazioa: React.FC<Props> = ({ atala }) => {
<Nabigazioa> <Nabigazioa>
<EstekaZerrenda> <EstekaZerrenda>
<Esteka aktiboa={atala === 'hasiera'}> <Esteka aktiboa={atala === 'hasiera'}>
<Link to="/">Laba gara</Link> <GainburuLink to="/">Laba gara</GainburuLink>
</Esteka> </Esteka>
<Esteka aktiboa={atala === 'sanferminak'}> <Esteka aktiboa={atala === 'sanferminak'}>
<Link to="/sanferminak">Sanferminak</Link> <GainburuLink to="/sanferminak">Sanferminak</GainburuLink>
</Esteka> </Esteka>
<Esteka aktiboa={atala === 'kafetegia'}> <Esteka aktiboa={atala === 'kafetegia'}>
<Link to="/kafetegia">Dastatu Laba</Link> <GainburuLink to="/kafetegia">Dastatu Laba</GainburuLink>
</Esteka> </Esteka>
</EstekaZerrenda> </EstekaZerrenda>
</Nabigazioa> </Nabigazioa>

View File

@@ -0,0 +1,8 @@
import { Link } from 'gatsby';
import styled from 'styled-components';
export const GainburuLink = styled(Link)`
&:focus {
outline: 3px solid var(--hover-color);
}
`;

View File

@@ -1,5 +1,4 @@
import React from 'react'; import React from 'react';
import { Link } from 'gatsby';
import { rem } from 'polished'; import { rem } from 'polished';
import styled from 'styled-components'; import styled from 'styled-components';
@@ -13,6 +12,7 @@ import { MugikorNabigazioa } from './MugikorNabigazioa';
import MediaQuery from 'react-responsive'; import MediaQuery from 'react-responsive';
import { KontaktuDatuak } from './KontaktuDatuak'; import { KontaktuDatuak } from './KontaktuDatuak';
import Gezia from '../../assets/gezia.svg'; import Gezia from '../../assets/gezia.svg';
import { GainburuLink } from './GainburuLink';
export type AtalaName = 'hasiera' | 'kafetegia' | 'sanferminak'; export type AtalaName = 'hasiera' | 'kafetegia' | 'sanferminak';
@@ -27,7 +27,6 @@ export const Gainburua: React.FC<Props> = ({
izenburua, izenburua,
deskribapena, deskribapena,
atala, atala,
onClick,
}) => { }) => {
return ( return (
<Wrapper atala={atala}> <Wrapper atala={atala}>
@@ -38,11 +37,11 @@ export const Gainburua: React.FC<Props> = ({
<MugikorNabigazioa /> <MugikorNabigazioa />
</MenuWrapper> </MenuWrapper>
<MugikorLogoWrapper> <MugikorLogoWrapper>
<Link to="/"> <GainburuLink to="/">
<LogoWrapper> <LogoWrapper>
<Logo title="Laba gara" atala={atala} /> <Logo title="Laba gara" atala={atala} />
</LogoWrapper> </LogoWrapper>
</Link> </GainburuLink>
</MugikorLogoWrapper> </MugikorLogoWrapper>
</MugikorWrapper> </MugikorWrapper>
</Container> </Container>
@@ -50,11 +49,11 @@ export const Gainburua: React.FC<Props> = ({
<MediaQuery minWidth={breakpoints.tablet}> <MediaQuery minWidth={breakpoints.tablet}>
<GainburuWrapper> <GainburuWrapper>
<Link to="/"> <GainburuLink to="/">
<LogoWrapper> <LogoWrapper>
<Logo title="Laba gara" atala={atala} /> <Logo title="Laba gara" atala={atala} />
</LogoWrapper> </LogoWrapper>
</Link> </GainburuLink>
<KontaktuDatuak /> <KontaktuDatuak />
</GainburuWrapper> </GainburuWrapper>
@@ -71,7 +70,9 @@ export const Gainburua: React.FC<Props> = ({
</IzenburuWrapper> </IzenburuWrapper>
<GeziaWrapper> <GeziaWrapper>
<GeziaLogo atala={atala} onClick={onClick} /> <GainburuLink to="#edukia">
<GeziaLogo atala={atala} />
</GainburuLink>
</GeziaWrapper> </GeziaWrapper>
</Container> </Container>
</Nagusia> </Nagusia>
@@ -233,11 +234,11 @@ const Izenburua = styled.h1`
function getAtalaBackground(atala?: AtalaName) { function getAtalaBackground(atala?: AtalaName) {
if (atala === 'sanferminak') { if (atala === 'sanferminak') {
return colors.morea; return colors.gorria;
} }
if (atala === 'hasiera') { if (atala === 'hasiera') {
return colors.gorria; return colors.morea;
} }
if (atala === 'kafetegia') { if (atala === 'kafetegia') {

View File

@@ -4,6 +4,7 @@ import styled from 'styled-components';
import { font, size } from '../../ui/theme'; import { font, size } from '../../ui/theme';
import InstagramLogo from '../../assets/instagram.svg'; import InstagramLogo from '../../assets/instagram.svg';
import TwitterLogo from '../../assets/twitter.svg'; import TwitterLogo from '../../assets/twitter.svg';
import { GainburuLink } from './GainburuLink';
/** /**
* ERREPIKATUA * ERREPIKATUA
@@ -22,23 +23,23 @@ export const KontaktuDatuak: React.FC = () => {
<SareSozialak> <SareSozialak>
<SareSoziala> <SareSoziala>
<a <GainburuLink
tabIndex={0} tabIndex={0}
aria-label="Laba Twitterren" aria-label="Laba Twitterren"
href="https://twitter.com/labasarea/" to="https://twitter.com/labasarea/"
> >
<Twitter title="Laba Twitterren" /> <Twitter title="Laba Twitterren" />
</a> </GainburuLink>
</SareSoziala> </SareSoziala>
<SareSoziala> <SareSoziala>
<a <GainburuLink
tabIndex={0} tabIndex={0}
aria-label="Laba Instagramen" aria-label="Laba Instagramen"
href="https://www.instagram.com/labasarea/" to="https://www.instagram.com/labasarea/"
> >
<Instagram role="link" title="Laba Instagramen" /> <Instagram role="link" title="Laba Instagramen" />
</a> </GainburuLink>
</SareSoziala> </SareSoziala>
</SareSozialak> </SareSozialak>
</Kontaktua> </Kontaktua>

View File

@@ -26,4 +26,8 @@ const Esteka = styled(Link)`
&:hover { &:hover {
color: ${colors.morea}; color: ${colors.morea};
} }
&:focus {
outline: 2px solid ${colors.morea};
}
`; `;

View File

@@ -0,0 +1,24 @@
import { PageProps } from 'gatsby';
import React from 'react';
import { Helmet } from 'react-helmet';
import ogImagePath from '../images/og-image.jpeg';
interface Props {
title: string;
description?: string;
location: PageProps['location'];
}
export const SEO: React.VFC<Props> = ({ title, description, location }) => (
<Helmet title={`${title} | Laba`} htmlAttributes={{ lang: 'eu' }}>
{description && <meta name="description" content={description} />}
<meta
name="og:image"
content={`${location.protocol}//${location.host}${ogImagePath}`}
/>
<meta name="og:image:height" content="500" />
<meta name="og:image:width" content="1500" />
</Helmet>
);

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

View File

@@ -1,13 +1,29 @@
import React from 'react'; import React from 'react';
import { Link } from 'gatsby'; import { Link } from 'gatsby';
import { GlobalStyles } from '../ui/GlobalStyles';
import { Gainburua } from '../components/Gainburua';
import { Container } from '../components/Container';
import { Helmet } from 'react-helmet';
const NotFoundPage: React.VFC = () => { const NotFoundPage: React.VFC = () => {
return ( return (
<main> <>
<h1>Ez dugu orria topatu</h1> <Helmet
<br /> title={`Ez dugu orria topatu | Laba`}
<Link to="/">Hasierara bueltatu</Link> htmlAttributes={{ lang: 'eu' }}
</main> />
<GlobalStyles />
<Gainburua />
<Container>
<main>
<h1>Ez dugu orria topatu</h1>
<br />
<Link to="/">Hasierara bueltatu</Link>
</main>
</Container>
</>
); );
}; };

View File

@@ -2,7 +2,6 @@ import { graphql, navigate, PageProps, useStaticQuery } from 'gatsby';
import React from 'react'; import React from 'react';
import { GlobalStyles } from '../ui/GlobalStyles'; import { GlobalStyles } from '../ui/GlobalStyles';
import { Helmet } from 'react-helmet';
import { Gainburua } from '../components/Gainburua'; import { Gainburua } from '../components/Gainburua';
import styled from 'styled-components'; import styled from 'styled-components';
import { colors, font, fontWeight, size } from '../ui/theme'; import { colors, font, fontWeight, size } from '../ui/theme';
@@ -11,6 +10,7 @@ import { rem } from 'polished';
import Gezia from '../assets/gezia.svg'; import Gezia from '../assets/gezia.svg';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import { Oina } from '../components/Oina'; import { Oina } from '../components/Oina';
import { SEO } from '../components/SEO';
interface DataProps { interface DataProps {
strapiHasiera: { strapiHasiera: {
@@ -20,7 +20,7 @@ interface DataProps {
}; };
} }
const IndexPage: React.VFC<PageProps> = () => { const IndexPage: React.VFC<PageProps> = ({ location }) => {
const { strapiHasiera } = useStaticQuery<DataProps>(graphql` const { strapiHasiera } = useStaticQuery<DataProps>(graphql`
{ {
strapiHasiera { strapiHasiera {
@@ -33,12 +33,11 @@ const IndexPage: React.VFC<PageProps> = () => {
return ( return (
<> <>
<Helmet <SEO
title={`${strapiHasiera.izenburua} | Laba`} title={strapiHasiera.izenburua}
htmlAttributes={{ lang: 'eu' }} description={strapiHasiera.deskribapena}
> location={location}
<meta name="description" content={strapiHasiera.deskribapena} /> />
</Helmet>
<GlobalStyles /> <GlobalStyles />
@@ -96,6 +95,11 @@ const Botoia = styled.a`
&:hover { &:hover {
color: ${colors.morea}; color: ${colors.morea};
} }
&:focus {
border: 2px solid ${colors.zuria};
outline: 3px solid ${colors.morea};
}
`; `;
const GeziaLogo = styled(Gezia)` const GeziaLogo = styled(Gezia)`

View File

@@ -2,7 +2,6 @@ import { PageProps, navigate } from 'gatsby';
import React from 'react'; import React from 'react';
import { GlobalStyles } from '../ui/GlobalStyles'; import { GlobalStyles } from '../ui/GlobalStyles';
import { Helmet } from 'react-helmet';
import { Gainburua } from '../components/Gainburua'; import { Gainburua } from '../components/Gainburua';
import { Container } from '../components/Container'; import { Container } from '../components/Container';
import styled from 'styled-components'; import styled from 'styled-components';
@@ -15,8 +14,9 @@ import { Produktua } from '../domain/models/Produktua';
import { useKafetegiaData } from '../viewQueries/useKafetegiaData'; 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';
const Kafetegia: React.VFC<PageProps> = () => { const Kafetegia: React.VFC<PageProps> = ({ location }) => {
const { const {
izenburua, izenburua,
deskribapena, deskribapena,
@@ -32,9 +32,7 @@ const Kafetegia: React.VFC<PageProps> = () => {
return ( return (
<> <>
<Helmet title={`${izenburua} | Laba`} htmlAttributes={{ lang: 'eu' }}> <SEO title={izenburua} description={deskribapena} location={location} />
<meta name="description" content={deskribapena} />
</Helmet>
<GlobalStyles /> <GlobalStyles />

View File

@@ -2,7 +2,6 @@ import { graphql, PageProps, useStaticQuery } from 'gatsby';
import React from 'react'; import React from 'react';
import { GlobalStyles } from '../ui/GlobalStyles'; import { GlobalStyles } from '../ui/GlobalStyles';
import { Helmet } from 'react-helmet';
import { Container } from '../components/Container'; import { Container } from '../components/Container';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import styled from 'styled-components'; import styled from 'styled-components';
@@ -10,6 +9,7 @@ import { font, fontWeight, size } from '../ui/theme';
import { rem } from 'polished'; import { rem } from 'polished';
import { Gainburua } from '../components/Gainburua'; import { Gainburua } from '../components/Gainburua';
import { Oina } from '../components/Oina'; import { Oina } from '../components/Oina';
import { SEO } from '../components/SEO';
interface DataProps { interface DataProps {
strapiLegeOharra: { strapiLegeOharra: {
@@ -18,7 +18,7 @@ interface DataProps {
}; };
} }
const LegeOharra: React.VFC<PageProps> = () => { const LegeOharra: React.VFC<PageProps> = ({ location }) => {
const { strapiLegeOharra } = useStaticQuery<DataProps>(graphql` const { strapiLegeOharra } = useStaticQuery<DataProps>(graphql`
{ {
strapiLegeOharra { strapiLegeOharra {
@@ -30,10 +30,7 @@ const LegeOharra: React.VFC<PageProps> = () => {
return ( return (
<> <>
<Helmet <SEO title={strapiLegeOharra.izenburua} location={location} />
title={`${strapiLegeOharra.izenburua} | Laba`}
htmlAttributes={{ lang: 'eu' }}
/>
<GlobalStyles /> <GlobalStyles />

View File

@@ -3,7 +3,6 @@ import React from 'react';
import { GlobalStyles } from '../ui/GlobalStyles'; import { GlobalStyles } from '../ui/GlobalStyles';
import remarkGfm from 'remark-gfm'; import remarkGfm from 'remark-gfm';
import { Helmet } from 'react-helmet';
import { Container } from '../components/Container'; import { Container } from '../components/Container';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import styled from 'styled-components'; import styled from 'styled-components';
@@ -11,6 +10,7 @@ import { colors, font, fontWeight, size } from '../ui/theme';
import { rem } from 'polished'; import { rem } from 'polished';
import { Gainburua } from '../components/Gainburua'; import { Gainburua } from '../components/Gainburua';
import { Oina } from '../components/Oina'; import { Oina } from '../components/Oina';
import { SEO } from '../components/SEO';
interface DataProps { interface DataProps {
strapiPribatutasunPolitika: { strapiPribatutasunPolitika: {
@@ -19,7 +19,7 @@ interface DataProps {
}; };
} }
const PribatutasunPolitika: React.VFC<PageProps> = () => { const PribatutasunPolitika: React.VFC<PageProps> = ({ location }) => {
const { strapiPribatutasunPolitika } = useStaticQuery<DataProps>(graphql` const { strapiPribatutasunPolitika } = useStaticQuery<DataProps>(graphql`
{ {
strapiPribatutasunPolitika { strapiPribatutasunPolitika {
@@ -31,10 +31,7 @@ const PribatutasunPolitika: React.VFC<PageProps> = () => {
return ( return (
<> <>
<Helmet <SEO title={strapiPribatutasunPolitika.izenburua} location={location} />
title={`${strapiPribatutasunPolitika.izenburua} | Laba`}
htmlAttributes={{ lang: 'eu' }}
/>
<GlobalStyles /> <GlobalStyles />

View File

@@ -2,7 +2,6 @@ import { graphql, navigate, PageProps, useStaticQuery } from 'gatsby';
import React from 'react'; import React from 'react';
import { GlobalStyles } from '../ui/GlobalStyles'; import { GlobalStyles } from '../ui/GlobalStyles';
import { Helmet } from 'react-helmet';
import { Gainburua } from '../components/Gainburua'; import { Gainburua } from '../components/Gainburua';
import styled from 'styled-components'; import styled from 'styled-components';
import { colors, font, fontWeight, media, size } from '../ui/theme'; import { colors, font, fontWeight, media, size } from '../ui/theme';
@@ -12,6 +11,7 @@ import ReactMarkdown from 'react-markdown';
import { Oina } from '../components/Oina'; import { Oina } from '../components/Oina';
import { SFEgunaEdukia } from '../components/SFEgunaEdukia'; import { SFEgunaEdukia } from '../components/SFEgunaEdukia';
import { datesUtils } from '../utils/dateUtils'; import { datesUtils } from '../utils/dateUtils';
import { SEO } from '../components/SEO';
export interface SFEguna { export interface SFEguna {
id: string; id: string;
@@ -34,7 +34,7 @@ interface DataProps {
}; };
} }
const IndexPage: React.VFC<PageProps> = () => { const IndexPage: React.VFC<PageProps> = ({ location }) => {
const { strapiSanferminak } = useStaticQuery<DataProps>(graphql` const { strapiSanferminak } = useStaticQuery<DataProps>(graphql`
{ {
strapiSanferminak { strapiSanferminak {
@@ -58,18 +58,14 @@ const IndexPage: React.VFC<PageProps> = () => {
return ( return (
<> <>
<Helmet
title={`${strapiSanferminak.datu_orokorrak.izenburua} | Laba`}
htmlAttributes={{ lang: 'eu' }}
>
<meta
name="description"
content={strapiSanferminak.datu_orokorrak.deskribapena}
/>
</Helmet>
<GlobalStyles /> <GlobalStyles />
<SEO
location={location}
title={strapiSanferminak.datu_orokorrak.izenburua}
description={strapiSanferminak.datu_orokorrak.izenburua}
/>
<Gainburua <Gainburua
atala="sanferminak" atala="sanferminak"
izenburua={strapiSanferminak.datu_orokorrak.izenburua} izenburua={strapiSanferminak.datu_orokorrak.izenburua}
@@ -123,7 +119,7 @@ const SFEgunaElementua = styled.li`
background-color: ${colors.beltza}; background-color: ${colors.beltza};
} }
33% { 33% {
background-color: ${colors.morea}; background-color: ${colors.gorria};
} }
66% { 66% {
background-color: ${colors.beltza}; background-color: ${colors.beltza};

View File

@@ -23,5 +23,5 @@
/* Module Resolution Options */ /* Module Resolution Options */
"allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
}, },
"include": ["./src/**/*"] "include": ["./src/**/*", "./index.d.ts"]
} }