+ className={styles['container'] + "rounded-lg mx-2 lg:mx-0 mt-5 lg:mt-0 p-5 mb-5 shadow-sm" +
+ " bg-white" +
+ " dark:bg-gray-800"}>
Derniers articles publiés
diff --git a/apps/website/components/layout/layout.module.scss b/apps/website/components/layout/layout.module.scss
index 76fd24c..69603f2 100644
--- a/apps/website/components/layout/layout.module.scss
+++ b/apps/website/components/layout/layout.module.scss
@@ -11,7 +11,7 @@
.app-content {
position: relative;
- padding-top: 75.5px;
+ padding-top: 58px;
min-height: calc(100vh - 189px);
}
}
@@ -64,7 +64,7 @@
@media (min-width: 1024px) {
.app-container:not(.without-footer) {
.app-content {
- padding-top: 135px;
+ padding-top: 131px;
min-height: calc(100vh - 181px);
}
}
diff --git a/apps/website/components/seo-config/seo-config.tsx b/apps/website/components/seo-config/seo-config.tsx
index 7a90880..b259a9e 100644
--- a/apps/website/components/seo-config/seo-config.tsx
+++ b/apps/website/components/seo-config/seo-config.tsx
@@ -53,6 +53,7 @@ export const SeoConfig = ({metaDescription = null, lang = null, meta = [], metaT
return (
{title}
+
{
+ const categorySlug = !delve(item, 'attributes', null) ? delve(item, 'category.data.attributes.slug', '') : delve(item, 'attributes.category.data.attributes.slug', '');
+ return '/blog/' + categorySlug;
+}
+export const getPostUrl = (item): string => {
+ const categorySlug = !delve(item, 'attributes', null) ? delve(item, 'category.data.attributes.slug', '') : delve(item, 'attributes.category.data.attributes.slug', '');
+ const postSlug = !delve(item, 'attributes', null) ? delve(item, 'slug', '') : delve(item, 'attributes.slug', '');
+ return '/blog/' + categorySlug + '/' + postSlug;
+}
+
+export const getStrapiImage = (item, format: ImageFormatType = 'default') => {
+ const image = !delve(item, 'attributes', null) ? delve(item, 'image.data.attributes', {}) : delve(item, 'attributes.image.data.attributes', {});
+ console.log(item, image);
+ switch (format) {
+ case "default":
+ return environment.strapiUrl + delve(image, "url", "/images/default.png");
+ case "medium":
+ return environment.strapiUrl + delve(image, "formats.medium.url", "/images/default.png");
+ case "small":
+ return environment.strapiUrl + delve(image, "formats.small.url", "/images/default.png");
+ case "thumbnail":
+ return environment.strapiUrl + delve(image, "formats.thumbnail.url", "/images/default.png");
+ default:
+ return environment.strapiUrl + delve(image, "url", "/images/default.png");
+ }
+}
+export const getStrapiImageSize = (item, format: ImageFormatType = 'default'): [number, number] => {
+ const image = delve(item, 'attributes.image.data.attributes', {});
+ switch (format) {
+ case "default":
+ return [delve(image, "width", 100), delve(image, "height", 100)];
+ case "medium":
+ return [delve(image, "formats.medium.width", 100), delve(image, "formats.medium.height", 100)];
+ case "small":
+ return [delve(image, "formats.small.width", 100), delve(image, "formats.small.height", 100)];
+ case "thumbnail":
+ return [delve(image, "formats.thumbnail.width", 100), delve(image, "formats.thumbnail.height", 100)];
+ default:
+ return [delve(image, "width", 100), delve(image, "height", 100)];
+ }
+}
diff --git a/apps/website/pages/_app.tsx b/apps/website/pages/_app.tsx
index 2aef0ef..c087e69 100644
--- a/apps/website/pages/_app.tsx
+++ b/apps/website/pages/_app.tsx
@@ -2,9 +2,21 @@ import App, {AppProps} from 'next/app';
import {SessionProvider} from "next-auth/react";
import {config, library} from "@fortawesome/fontawesome-svg-core";
import '@fortawesome/fontawesome-svg-core/styles.css';
-import {faBagShopping, faRightToBracket, faUserPlus} from "@fortawesome/free-solid-svg-icons";
+import {
+ faBagShopping,
+ faChalkboardUser,
+ faGraduationCap,
+ faGuitar,
+ faLinesLeaning,
+ faRightToBracket,
+ faScrewdriverWrench,
+ faTabletScreenButton,
+ faUserPlus
+} from "@fortawesome/free-solid-svg-icons";
import axios from "axios";
import delve from 'dlv';
+import {ThemeProvider} from "next-themes";
+
import {wrapper} from "../store/store";
import {environment} from "../environments/environment";
@@ -15,6 +27,12 @@ config.autoAddCss = false;
library.add(faRightToBracket);
library.add(faUserPlus);
library.add(faBagShopping);
+library.add(faTabletScreenButton);
+library.add(faGraduationCap);
+library.add(faChalkboardUser);
+library.add(faLinesLeaning);
+library.add(faGuitar);
+library.add(faScrewdriverWrench);
interface CustomAppProps extends AppProps {
menuHeader: object[],
@@ -37,7 +55,10 @@ const CustomApp = ({Component, pageProps: {session, ...pageProps}, menuFooter, m
pageProps = {...pageProps, menuFooter, menuHeader, seo};
return (
-
+
+
+
);
}
diff --git a/apps/website/pages/blog/[category_slug]/[post_slug].tsx b/apps/website/pages/blog/[category_slug]/[post_slug].tsx
index 14c01b9..3c83dba 100644
--- a/apps/website/pages/blog/[category_slug]/[post_slug].tsx
+++ b/apps/website/pages/blog/[category_slug]/[post_slug].tsx
@@ -12,7 +12,7 @@ import CardBlogDetails from "../../../components/card-blog-details/card-blog-det
export async function getServerSideProps(context) {
const categories = await axios.get(`${environment.strapiApiUrl}/categories?populate=deep`);
- const lastPublished = await axios.get(`${environment.strapiApiUrl}/articles?populate=deep&_sort=date:DESC`);
+ const lastPublished = await axios.get(`${environment.strapiApiUrl}/articles?populate=deep&sort=publishedAt:DESC`);
const post = await axios.get(`${environment.strapiApiUrl}/articles?populate=deep&filters[slug]=${context.params.post_slug}`);
if (!delve(post, "data.data.0.attributes", null)) {
diff --git a/apps/website/pages/blog/[category_slug]/index.tsx b/apps/website/pages/blog/[category_slug]/index.tsx
index df716ac..3f25420 100644
--- a/apps/website/pages/blog/[category_slug]/index.tsx
+++ b/apps/website/pages/blog/[category_slug]/index.tsx
@@ -16,8 +16,8 @@ export async function getServerSideProps(context) {
const {query} = context;
const categories = await axios.get(`${environment.strapiApiUrl}/categories?populate=deep`);
const category = await axios.get(`${environment.strapiApiUrl}/categories?populate=deep&filters[slug]=${context.params.category_slug}`);
- const lastPublished = await axios.get(`${environment.strapiApiUrl}/articles?populate=deep&_sort=date:DESC`);
- let postsUrl = `${environment.strapiApiUrl}/articles?populate=deep&_sort=date:DESC&filters[category][slug][$contains]=${context.params.category_slug}`;
+ const lastPublished = await axios.get(`${environment.strapiApiUrl}/articles?populate=deep&_sort=date:DESC&sort=publishedAt:DESC`);
+ let postsUrl = `${environment.strapiApiUrl}/articles?populate=deep&sort=publishedAt:DESC&filters[category][slug][$contains]=${context.params.category_slug}`;
if (query && query.page) {
postsUrl += `$pagination[page]=${query.page}`;
}
diff --git a/apps/website/pages/blog/index.tsx b/apps/website/pages/blog/index.tsx
index 1a5c703..756b585 100644
--- a/apps/website/pages/blog/index.tsx
+++ b/apps/website/pages/blog/index.tsx
@@ -9,19 +9,28 @@ import styles from "./index.module.scss";
import BlogSearch from "../../components/blog-search/blog-search";
import {environment} from "../../environments/environment";
import CardBlog from "../../components/card-blog/card-blog";
+import BlogPagination from "../../components/blog-pagination/blog-pagination";
export async function getServerSideProps(context) {
- const categories = await axios.get(`${environment.strapiApiUrl}/categories?populate=deep`)
- const posts = await axios.get(`${environment.strapiApiUrl}/articles?populate=deep&_sort=date:DESC`)
+ const {query} = context;
+
+ let postsUrl = `${environment.strapiApiUrl}/articles?populate=deep&sort=publishedAt:DESC`;
+ if (query && query.page) {
+ postsUrl += `$pagination[page]=${query.page}`;
+ }
+
+ const categories = await axios.get(`${environment.strapiApiUrl}/categories?populate=deep`);
+ const posts = await axios.get(postsUrl);
return {
props: {
categories: delve(categories, 'data.data', []),
lastPublished: delve(posts, 'data.data', []),
+ paginator: delve(posts, 'data.meta', []),
}
}
}
-export function Blog({menuHeader, menuFooter, seo, categories, lastPublished}) {
+export function Blog({menuHeader, menuFooter, seo, categories, lastPublished, paginator}) {
return (
<>
@@ -32,6 +41,10 @@ export function Blog({menuHeader, menuFooter, seo, categories, lastPublished}) {
{lastPublished.map((post, index: number) => (
))
}
+
+ {lastPublished.length > 0 && ()}