diff --git a/app/awtis/[slug]/page.js b/app/awtis/[slug]/page.js
new file mode 100644
index 0000000..52cb4e1
--- /dev/null
+++ b/app/awtis/[slug]/page.js
@@ -0,0 +1,88 @@
+import {notFound} from 'next/navigation'
+import Box from '@mui/material/Box'
+
+import AwtisDetay from '../../../components/awtis/awtis-detay'
+import {jwennAwtisEpiSlug} from '../../../lib/oki-api'
+import {formatKuveti} from '../../../lib/kuveti'
+
+const apiUrl = process.env.NEXT_PUBLIC_API_URL_ROOT || 'http://localhost:1337'
+const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000'
+
+async function jwennAwtis(slug) {
+ const awtis = await jwennAwtisEpiSlug(slug)
+
+ if (!awtis) {
+ notFound()
+ }
+
+ return awtis
+}
+
+export async function generateMetadata({params}) {
+ const {slug} = params
+ const anAwtis = await jwennAwtis(slug)
+
+ const title = `OKI | ${anAwtis.attributes.alias} - Paroles et Traductions`
+ const description = `${anAwtis.attributes.alias}${anAwtis?.attributes?.biographie ? ` : ${anAwtis?.attributes?.biographie.slice(0, 100)}...` : ''}`
+ const url = `${siteUrl}/awtis/${slug}`
+
+ const {photo} = anAwtis.attributes
+ const kuvetiFormat = formatKuveti(photo)
+
+ return {
+ title,
+ description,
+ openGraph: {
+ title,
+ description,
+ url,
+ siteName: title,
+ images: [
+ {
+ url: `${apiUrl}${kuvetiFormat?.url}`,
+ width: kuvetiFormat?.width,
+ height: kuvetiFormat?.height
+ }
+ ],
+ locale: 'fr_FR',
+ type: 'website'
+ },
+ twitter: {
+ site: '@OrganisationKA',
+ card: 'summary_large_image',
+ title,
+ description,
+ creator: '@OrganisationKA',
+ images: {
+ url: `${apiUrl}${kuvetiFormat?.url}`,
+ alt: `Photo de ${anAwtis.attributes.alias}`,
+ }
+ }
+ }
+}
+
+export default async function AwtisPajSlug({params}) {
+ const {slug} = params
+ const anAwtis = await jwennAwtis(slug)
+
+ const jsonLd = {
+ '@context': 'http://schema.org',
+ '@type': 'Person',
+ name: anAwtis.attributes.alias,
+ url: `${siteUrl}/awtis/${slug}`
+ }
+
+ return (
+ <>
+
+
+
+
+ >
+ )
+}
diff --git a/app/awtis/layout.js b/app/awtis/layout.js
new file mode 100644
index 0000000..353def2
--- /dev/null
+++ b/app/awtis/layout.js
@@ -0,0 +1,7 @@
+export default async function AwtisLayout({children}) {
+ return (
+
+ )
+}
diff --git a/app/awtis/page.js b/app/awtis/page.js
new file mode 100644
index 0000000..cd2c602
--- /dev/null
+++ b/app/awtis/page.js
@@ -0,0 +1,75 @@
+import {notFound} from 'next/navigation'
+import Box from '@mui/material/Box'
+import Container from '@mui/material/Container'
+import Grid from '@mui/material/Unstable_Grid2'
+
+import ChecheAwtis from '../../components/awtis/cheche-awtis'
+import AwtisKat from '../../components/awtis/awtis-kat'
+import Pajinasyon from '../../components/awtis/pajinasyon'
+
+import {jwennAwtisPajinasyon} from '../../lib/oki-api'
+
+export const metadata = {
+ title: 'OKI | Awtis - Liste des artistes',
+ description: 'Liste des artistes ayant une ou plusieurs œuvres présentes sur le site.',
+ openGraph: {
+ title: 'OKI | Awtis - Liste des artistes',
+ description: 'Liste des artistes ayant une ou plusieurs œuvres présentes sur le site.',
+ url: 'https://oki.re/sipote',
+ siteName: 'OKI | Organisation KA Internationale. Paroles et traductions.',
+ images: [
+ {
+ url: 'htts://oki.re/logo-512x512.png',
+ width: 512,
+ height: 512
+ }
+ ],
+ locale: 'fr_FR',
+ type: 'website'
+ },
+ twitter: {
+ site: '@OrganisationKA',
+ card: 'summary_large_image',
+ title: 'OKI | Awtis - Liste des artistes',
+ description: 'Liste des artistes ayant une ou plusieurs œuvres présentes sur le site.',
+ creator: '@OrganisationKA',
+ images: {
+ url: 'https://oki.re/logo-512x512.png',
+ alt: 'OKI Logo',
+ }
+ }
+}
+
+async function jwennDone(paj) {
+ const pajParsed = Array.isArray(paj) ? Number.parseInt(paj[1], 10) : Number.parseInt(paj, 10)
+
+ if (Number.isNaN(pajParsed)) {
+ notFound()
+ }
+
+ const awtisPouChakPaj = await jwennAwtisPajinasyon(pajParsed)
+ const pajTotal = Math.ceil(awtisPouChakPaj.meta.pagination.total / awtisPouChakPaj.meta.pagination.limit)
+
+ if (pajParsed > pajTotal || pajParsed < 1) {
+ notFound()
+ }
+
+ return {pajTotal, awtisPouChakPaj, pajParsed}
+}
+
+export default async function AwitsPaj({searchParams}) {
+ const {paj} = searchParams
+ const {pajTotal, awtisPouChakPaj, pajParsed} = await jwennDone(paj || 1)
+
+ return (
+
+
+
+
+
+ {awtisPouChakPaj.data.map(artiste => )}
+
+
+
+ )
+}
diff --git a/pages/awtis/[slug].js b/pages/awtis/[slug].js
deleted file mode 100644
index b18039b..0000000
--- a/pages/awtis/[slug].js
+++ /dev/null
@@ -1,101 +0,0 @@
-import PropTypes from 'prop-types'
-import {Box} from '@mui/material'
-
-import AwtisDetay from '../../components/awtis/awtis-detay'
-import Footer from '../../components/footer'
-import HeadLayout from '../../components/head-layout'
-import {jwennAwtisEpiSlug} from '../../lib/oki-api'
-
-import Custom404 from '../404'
-import Custom500 from '../500'
-
-export default function SlugAwtis({errorCode, error404, errorMessage, anAwtis}) {
- if (error404) {
- return
- }
-
- if (errorCode) {
- console.log('⚠️ error', errorMessage)
- return
- }
-
- const {attributes} = anAwtis
- const {photo} = attributes
-
- const formatKouveti = () => {
- if (!photo?.data?.attributes) {
- return null
- }
-
- if (photo.data.attributes && photo.data.attributes.formats && photo.data.attributes.formats.large) {
- return photo.data.attributes.formats.large
- }
-
- if (photo.data.attributes && photo.data.attributes.formats && photo.data.attributes.formats.medium) {
- return photo.data.attributes.formats.medium
- }
-
- if (photo.data.attributes && photo.data.attributes.formats && photo.data.attributes.formats.small) {
- return photo.data.attributes.formats.small
- }
-
- return photo.data.attributes
- }
-
- return (
-
-
-
-
-
-
- )
-}
-
-export async function getServerSideProps({query}) {
- const {slug} = query
- let anAwtis
- let error404
- let errorCode
- let errorMessage
-
- try {
- anAwtis = await jwennAwtisEpiSlug(slug)
- } catch (error) {
- errorMessage = error.message
- errorCode = true
- }
-
- if (!anAwtis) {
- error404 = true
- }
-
- return {
- props: {
- error404: error404 || null,
- errorCode: errorCode || null,
- errorMessage: errorMessage || null,
- anAwtis: anAwtis || null
- }
- }
-}
-
-SlugAwtis.defaultProps = {
- anAwtis: null,
- error404: null,
- errorCode: null,
- errorMessage: null,
-}
-
-SlugAwtis.propTypes = {
- error404: PropTypes.bool,
- errorCode: PropTypes.bool,
- errorMessage: PropTypes.string,
- anAwtis: PropTypes.object
-}
diff --git a/pages/awtis/index.js b/pages/awtis/index.js
deleted file mode 100644
index 6fb77cc..0000000
--- a/pages/awtis/index.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import PropTypes from 'prop-types'
-import {Box, Container, Grid} from '@mui/material'
-
-import {jwennAwtisPajinasyon} from '../../lib/oki-api'
-
-import ChecheAwtis from '../../components/awtis/cheche-awtis'
-import AwtisKat from '../../components/awtis/awtis-kat'
-import Pajinasyon from '../../components/awtis/pajinasyon'
-import HeadLayout from '../../components/head-layout'
-import Footer from '../../components/footer'
-
-import Custom404 from '../404'
-import Custom500 from '../500'
-
-export default function Awtis({errorCode, error404, errorMessage, pajTotal, awtisPouChakPaj, paj}) {
- if (error404) {
- return
- }
-
- if (errorCode) {
- console.log('⚠️ error', errorMessage)
- return
- }
-
- return (
-
-
-
-
-
-
- {awtisPouChakPaj.map(artiste => )}
-
-
-
-
-
- )
-}
-
-export async function getServerSideProps({query}) {
- const {paj} = query
- let error404
- let errorCode
- let errorMessage
- let awtisPouChakPaj
-
- const pajParsed = Array.isArray(paj) ? Number.parseInt(paj[1], 10) : Number.parseInt(paj, 10)
-
- try {
- awtisPouChakPaj = await jwennAwtisPajinasyon(pajParsed)
- } catch (error) {
- errorMessage = error.message
- errorCode = true
- }
-
- const pajTotal = Math.ceil(awtisPouChakPaj.meta.pagination.total / awtisPouChakPaj.meta.pagination.limit)
-
- if (pajParsed > pajTotal || pajParsed < 1) {
- error404 = true
- }
-
- return {
- props: {
- error404: error404 || null,
- errorCode: errorCode || null,
- errorMessage: errorMessage || null,
- pajTotal,
- awtisPouChakPaj: awtisPouChakPaj.data,
- paj: pajParsed
- }
- }
-}
-
-Awtis.defaultProps = {
- error404: null,
- errorCode: null,
- errorMessage: null,
-}
-
-Awtis.propTypes = {
- error404: PropTypes.bool,
- errorCode: PropTypes.bool,
- errorMessage: PropTypes.string,
- pajTotal: PropTypes.number.isRequired,
- awtisPouChakPaj: PropTypes.array.isRequired,
- paj: PropTypes.number.isRequired
-}