diff options
28 files changed, 211 insertions, 216 deletions
diff --git a/jest.config.ts b/jest.config.ts index 5add44d..c0ce5cc 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -92,15 +92,13 @@ const config = { /** Module Path Aliases */ '^@i18n/(.*)$': '<rootDir>/src/i18n/$1', '^@assets/(.*)$': '<rootDir>/src/assets/$1', - '^@config/(.*)$': '<rootDir>/src/config/$1', '^@content/(.*)$': '<rootDir>/src/content/$1', '^@components/(.*)$': '<rootDir>/src/components/$1', - '^@hooks/(.*)$': '<rootDir>/src/hooks/$1', '^@pages/(.*)$': '<rootDir>/src/pages/$1', '^@services/(.*)$': '<rootDir>/src/services/$1', '^@styles/(.*)$': '<rootDir>/src/styles/$1', - '^@utils/(.*)$': '<rootDir>/src/utils/$1', '^@ts/(.*)$': '<rootDir>/src/ts/$1', + '^@utils/(.*)$': '<rootDir>/src/utils/$1', }, // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader diff --git a/src/components/Branding/Branding.tsx b/src/components/Branding/Branding.tsx index efb3a49..adefbca 100644 --- a/src/components/Branding/Branding.tsx +++ b/src/components/Branding/Branding.tsx @@ -1,5 +1,5 @@ import photo from '@assets/images/armand-philippot.jpg'; -import { config } from '@config/website'; +import { settings } from '@utils/config'; import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; @@ -18,12 +18,12 @@ const Branding: BrandingReturn = ({ isHome = false }) => { const schemaJsonLd: WithContext<Person> = { '@context': 'https://schema.org', '@type': 'Person', - '@id': `${config.url}/#branding`, - name: config.name, - url: config.url, - jobTitle: config.baseline, + '@id': `${settings.url}/#branding`, + name: settings.name, + url: settings.url, + jobTitle: settings.baseline, image: photo.src, - subjectOf: { '@id': `${config.url}` }, + subjectOf: { '@id': `${settings.url}` }, }; return ( @@ -45,7 +45,7 @@ const Branding: BrandingReturn = ({ isHome = false }) => { description: 'Branding: branding name picture.', }, { - brandingName: config.name, + brandingName: settings.name, } )} layout="responsive" @@ -57,10 +57,10 @@ const Branding: BrandingReturn = ({ isHome = false }) => { </div> <TitleTag className={styles.name}> <Link href="/"> - <a className={styles.link}>{config.name}</a> + <a className={styles.link}>{settings.name}</a> </Link> </TitleTag> - <p className={styles.job}>{config.baseline}</p> + <p className={styles.job}>{settings.baseline}</p> </div> </> ); diff --git a/src/components/Breadcrumb/Breadcrumb.tsx b/src/components/Breadcrumb/Breadcrumb.tsx index 30179be..914a175 100644 --- a/src/components/Breadcrumb/Breadcrumb.tsx +++ b/src/components/Breadcrumb/Breadcrumb.tsx @@ -1,4 +1,4 @@ -import { config } from '@config/website'; +import { settings } from '@utils/config'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; @@ -71,7 +71,7 @@ const Breadcrumb = ({ pageTitle }: { pageTitle: string }) => { defaultMessage: 'Home', description: 'Breadcrumb: Home item', }), - item: config.url, + item: settings.url, }; items.push(homepage); @@ -84,7 +84,7 @@ const Breadcrumb = ({ pageTitle }: { pageTitle: string }) => { defaultMessage: 'Blog', description: 'Breadcrumb: Blog item', }), - item: `${config.url}/blog`, + item: `${settings.url}/blog`, }; items.push(blog); @@ -98,7 +98,7 @@ const Breadcrumb = ({ pageTitle }: { pageTitle: string }) => { defaultMessage: 'Projects', description: 'Breadcrumb: Projects item', }), - item: `${config.url}/projets`, + item: `${settings.url}/projets`, }; items.push(blog); @@ -108,7 +108,7 @@ const Breadcrumb = ({ pageTitle }: { pageTitle: string }) => { '@type': 'ListItem', position: items.length + 1, name: pageTitle, - item: `${config.url}${router.asPath}`, + item: `${settings.url}${router.asPath}`, }; items.push(currentPage); @@ -119,7 +119,7 @@ const Breadcrumb = ({ pageTitle }: { pageTitle: string }) => { const schemaJsonLd: WithContext<BreadcrumbList> = { '@context': 'https://schema.org', '@type': 'BreadcrumbList', - '@id': `${config.url}/#breadcrumb`, + '@id': `${settings.url}/#breadcrumb`, itemListElement: getElementsSchema(), }; diff --git a/src/components/Comment/Comment.tsx b/src/components/Comment/Comment.tsx index e95a378..4835f8c 100644 --- a/src/components/Comment/Comment.tsx +++ b/src/components/Comment/Comment.tsx @@ -1,7 +1,7 @@ import { Button } from '@components/Buttons'; import CommentForm from '@components/CommentForm/CommentForm'; -import { config } from '@config/website'; import { Comment as CommentData } from '@ts/types/comments'; +import { settings } from '@utils/config'; import { getFormattedDate } from '@utils/helpers/format'; import Head from 'next/head'; import Image from 'next/image'; @@ -23,7 +23,7 @@ const Comment = ({ }) => { const intl = useIntl(); const router = useRouter(); - const locale = router.locale ? router.locale : config.locales.defaultLocale; + const locale = router.locale ? router.locale : settings.locales.defaultLocale; const [isReply, setIsReply] = useState<boolean>(false); const firstFieldRef = useRef<HTMLInputElement>(null); @@ -146,12 +146,12 @@ const Comment = ({ const schemaJsonLd: WithContext<CommentSchema> = { '@context': 'https://schema.org', - '@id': `${config.url}/#comment-${comment.commentId}`, + '@id': `${settings.url}/#comment-${comment.commentId}`, '@type': 'Comment', parentItem: isNested - ? { '@id': `${config.url}/#comment-${comment.parentDatabaseId}` } + ? { '@id': `${settings.url}/#comment-${comment.parentDatabaseId}` } : undefined, - about: { '@type': 'Article', '@id': `${config.url}/#article` }, + about: { '@type': 'Article', '@id': `${settings.url}/#article` }, author: { '@type': 'Person', name: comment.author.name, diff --git a/src/components/Copyright/Copyright.tsx b/src/components/Copyright/Copyright.tsx index 9a57f9c..7ea3829 100644 --- a/src/components/Copyright/Copyright.tsx +++ b/src/components/Copyright/Copyright.tsx @@ -1,14 +1,14 @@ import { CopyrightIcon } from '@components/Icons'; -import { config } from '@config/website'; +import { settings } from '@utils/config'; import styles from './Copyright.module.scss'; const Copyright = () => { return ( <p className={styles.wrapper}> - <span>{config.name}</span> + <span>{settings.name}</span> <CopyrightIcon /> <span> - {config.copyright.startYear} - {config.copyright.endYear} + {settings.copyright.startYear} - {settings.copyright.endYear} </span> </p> ); diff --git a/src/components/Layouts/Layout.tsx b/src/components/Layouts/Layout.tsx index b479ef3..d074b68 100644 --- a/src/components/Layouts/Layout.tsx +++ b/src/components/Layouts/Layout.tsx @@ -2,7 +2,7 @@ import Footer from '@components/Footer/Footer'; import Header from '@components/Header/Header'; import Main from '@components/Main/Main'; import Breadcrumb from '@components/Breadcrumb/Breadcrumb'; -import { config } from '@config/website'; +import { settings } from '@utils/config'; import Head from 'next/head'; import { useRouter } from 'next/router'; import { ReactElement, ReactNode, useEffect, useRef } from 'react'; @@ -26,19 +26,19 @@ const Layout = ({ const schemaJsonLd: WithContext<WebSite> = { '@context': 'https://schema.org', - '@id': `${config.url}`, + '@id': `${settings.url}`, '@type': 'WebSite', - name: config.name, - description: config.baseline, - url: config.url, - author: { '@id': `${config.url}/#branding` }, - copyrightYear: Number(config.copyright.startYear), - creator: { '@id': `${config.url}/#branding` }, - editor: { '@id': `${config.url}/#branding` }, - inLanguage: config.locales.defaultLocale, + name: settings.name, + description: settings.baseline, + url: settings.url, + author: { '@id': `${settings.url}/#branding` }, + copyrightYear: Number(settings.copyright.startYear), + creator: { '@id': `${settings.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, + inLanguage: settings.locales.defaultLocale, potentialAction: { '@type': 'SearchAction', - target: `${config.url}/recherche?s={query}`, + target: `${settings.url}/recherche?s={query}`, query: 'required', }, }; @@ -46,14 +46,14 @@ const Layout = ({ return ( <> <Head> - <meta property="og:site_name" content={config.name} /> + <meta property="og:site_name" content={settings.name} /> <meta property="og:locale" - content={`${config.locales.defaultLocale}_${config.locales.defaultCountry}`} + content={`${settings.locales.defaultLocale}_${settings.locales.defaultCountry}`} /> <meta property="twitter:card" content="summary" /> - <meta property="twitter:site" content={config.twitterId} /> - <meta property="twitter:creator" content={config.twitterId} /> + <meta property="twitter:site" content={settings.twitterId} /> + <meta property="twitter:creator" content={settings.twitterId} /> <meta name="theme-color" content="#14578a" @@ -68,19 +68,19 @@ const Layout = ({ rel="alternate" href="/feed.xml" type="application/rss+xml" - title={`${config.name}'s RSS feed`} + title={`${settings.name}'s RSS feed`} /> <link rel="alternate" href="/atom.xml" type="application/atom+xml" - title={`${config.name}'s Atom feed`} + title={`${settings.name}'s Atom feed`} /> <link rel="alternate" href="/feed.json" type="application/feed+json" - title={`${config.name}'s Json feed`} + title={`${settings.name}'s Json feed`} /> <link rel="icon" href="/favicon.ico" sizes="any" /> <link rel="icon" href="/icon.svg" type="image/svg+xml" /> diff --git a/src/components/MDX/CodeBlock/CodeBlock.tsx b/src/components/MDX/CodeBlock/CodeBlock.tsx index 59386af..8311999 100644 --- a/src/components/MDX/CodeBlock/CodeBlock.tsx +++ b/src/components/MDX/CodeBlock/CodeBlock.tsx @@ -1,4 +1,4 @@ -import { config } from '@config/website'; +import { settings } from '@utils/config'; import { translateCopyButton } from '@utils/helpers/prism'; import { useRouter } from 'next/router'; import Prism from 'prismjs'; @@ -18,7 +18,7 @@ const CodeBlock = ({ ); const intl = useIntl(); const router = useRouter(); - const locale = router.locale ? router.locale : config.locales.defaultLocale; + const locale = router.locale ? router.locale : settings.locales.defaultLocale; useEffect(() => { Prism.highlightAll(); diff --git a/src/components/PostMeta/PostMeta.tsx b/src/components/PostMeta/PostMeta.tsx index 86e4e71..b951c44 100644 --- a/src/components/PostMeta/PostMeta.tsx +++ b/src/components/PostMeta/PostMeta.tsx @@ -1,5 +1,5 @@ -import { config } from '@config/website'; import { ArticleMeta } from '@ts/types/articles'; +import { settings } from '@utils/config'; import { getFormattedDate } from '@utils/helpers/format'; import Link from 'next/link'; import { useRouter } from 'next/router'; @@ -28,7 +28,7 @@ const PostMeta = ({ } = meta; const intl = useIntl(); const router = useRouter(); - const locale = router.locale ? router.locale : config.locales.defaultLocale; + const locale = router.locale ? router.locale : settings.locales.defaultLocale; const isThematic = () => router.asPath.includes('/thematique/'); const isArticle = () => router.asPath.includes('/article/'); diff --git a/src/components/PostPreview/PostPreview.tsx b/src/components/PostPreview/PostPreview.tsx index 72ba638..0be9709 100644 --- a/src/components/PostPreview/PostPreview.tsx +++ b/src/components/PostPreview/PostPreview.tsx @@ -1,9 +1,9 @@ import { ButtonLink } from '@components/Buttons'; import { ArrowIcon } from '@components/Icons'; import PostMeta from '@components/PostMeta/PostMeta'; -import { config } from '@config/website'; import { TitleLevel } from '@ts/types/app'; import { ArticleMeta, ArticlePreview } from '@ts/types/articles'; +import { settings } from '@utils/config'; import Image from 'next/image'; import Head from 'next/head'; import Link from 'next/link'; @@ -49,18 +49,18 @@ const PostPreview = ({ name: title, description: intro, articleBody: intro, - author: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, commentCount: commentCount ? commentCount : 0, copyrightYear: publicationDate.getFullYear(), - creator: { '@id': `${config.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), - editor: { '@id': `${config.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, image: featuredImage?.sourceUrl, - inLanguage: config.locales.defaultLocale, - isBasedOn: `${config.url}/article/${slug}`, - isPartOf: { '@id': `${config.url}/blog` }, + inLanguage: settings.locales.defaultLocale, + isBasedOn: `${settings.url}/article/${slug}`, + isPartOf: { '@id': `${settings.url}/blog` }, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', thumbnailUrl: featuredImage?.sourceUrl, }; diff --git a/src/components/ProjectSummary/ProjectSummary.tsx b/src/components/ProjectSummary/ProjectSummary.tsx index f2d73b6..03c9b87 100644 --- a/src/components/ProjectSummary/ProjectSummary.tsx +++ b/src/components/ProjectSummary/ProjectSummary.tsx @@ -1,11 +1,10 @@ import GithubIcon from '@assets/images/social-media/github.svg'; import GitlabIcon from '@assets/images/social-media/gitlab.svg'; -import { config } from '@config/website'; import { ProjectMeta } from '@ts/types/app'; +import { settings } from '@utils/config'; import { getFormattedDate } from '@utils/helpers/format'; import { slugify } from '@utils/helpers/slugify'; import useGithubApi from '@utils/hooks/useGithubApi'; -import IntlMessageFormat from 'intl-messageformat'; import Image from 'next/image'; import { useRouter } from 'next/router'; import { useIntl } from 'react-intl'; @@ -13,7 +12,6 @@ import styles from './ProjectSummary.module.scss'; const ProjectSummary = ({ id, - title, meta, }: { id: string; @@ -23,7 +21,7 @@ const ProjectSummary = ({ const { hasCover, license, repos, technologies } = meta; const intl = useIntl(); const router = useRouter(); - const locale = router.locale ? router.locale : config.locales.defaultLocale; + const locale = router.locale ? router.locale : settings.locales.defaultLocale; const { data } = useGithubApi(repos?.github ? repos.github : ''); return ( diff --git a/src/components/Widgets/RecentPosts/RecentPosts.tsx b/src/components/Widgets/RecentPosts/RecentPosts.tsx index 08ce7e4..1507edf 100644 --- a/src/components/Widgets/RecentPosts/RecentPosts.tsx +++ b/src/components/Widgets/RecentPosts/RecentPosts.tsx @@ -1,7 +1,7 @@ import Spinner from '@components/Spinner/Spinner'; -import { config } from '@config/website'; import { getPublishedPosts } from '@services/graphql/queries'; import { ArticlePreview } from '@ts/types/articles'; +import { settings } from '@utils/config'; import { getFormattedDate } from '@utils/helpers/format'; import Image from 'next/image'; import Link from 'next/link'; @@ -16,7 +16,7 @@ const RecentPosts = () => { getPublishedPosts({ first: 3 }) ); const router = useRouter(); - const locale = router.locale ? router.locale : config.locales.defaultLocale; + const locale = router.locale ? router.locale : settings.locales.defaultLocale; const getPost = (post: ArticlePreview) => { return ( diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 079dead..d5b2e86 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -1,8 +1,8 @@ import { getLayout } from '@components/Layouts/Layout'; import PostHeader from '@components/PostHeader/PostHeader'; -import { config } from '@config/website'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; +import { settings } from '@utils/config'; import { getIntlInstance, loadTranslation } from '@utils/helpers/i18n'; import { GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -17,7 +17,7 @@ const Error404: NextPageWithLayout = () => { defaultMessage: 'Error 404: Page not found - {websiteName}', description: '404Page: SEO - Page title', }, - { websiteName: config.name } + { websiteName: settings.name } ); const pageDescription = intl.formatMessage({ defaultMessage: 'Page not found.', diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index ec97ff7..7c6142c 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,5 +1,5 @@ -import { config } from '@config/website'; import { AppPropsWithLayout } from '@ts/types/app'; +import { settings } from '@utils/config'; import { ThemeProvider } from 'next-themes'; import { useRouter } from 'next/router'; import { IntlProvider } from 'react-intl'; @@ -7,7 +7,7 @@ import '../styles/globals.scss'; const MyApp = ({ Component, pageProps }: AppPropsWithLayout) => { const { locale, defaultLocale } = useRouter(); - const appLocale: string = locale || config.locales.defaultLocale; + const appLocale: string = locale || settings.locales.defaultLocale; const getLayout = Component.getLayout ?? ((page) => page); return ( diff --git a/src/pages/article/[slug].tsx b/src/pages/article/[slug].tsx index 8668a66..dc2c76a 100644 --- a/src/pages/article/[slug].tsx +++ b/src/pages/article/[slug].tsx @@ -5,11 +5,11 @@ import PostFooter from '@components/PostFooter/PostFooter'; import PostHeader from '@components/PostHeader/PostHeader'; import Sidebar from '@components/Sidebar/Sidebar'; import { Sharing, ToC } from '@components/Widgets'; -import { config } from '@config/website'; import { getAllPostsSlug, getPostBySlug } from '@services/graphql/queries'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; import { ArticleMeta, ArticleProps } from '@ts/types/articles'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { addPrismClasses, translateCopyButton } from '@utils/helpers/prism'; import { GetStaticPaths, GetStaticProps, GetStaticPropsContext } from 'next'; @@ -48,8 +48,8 @@ const SingleArticle: NextPageWithLayout<ArticleProps> = ({ post }) => { const intl = useIntl(); const router = useRouter(); - const locale = router.locale ? router.locale : config.locales.defaultLocale; - const articleUrl = `${config.url}${router.asPath}`; + const locale = router.locale ? router.locale : settings.locales.defaultLocale; + const articleUrl = `${settings.url}${router.asPath}`; useEffect(() => { addPrismClasses(); @@ -63,21 +63,21 @@ const SingleArticle: NextPageWithLayout<ArticleProps> = ({ post }) => { const webpageSchema: WebPage = { '@id': `${articleUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, lastReviewed: dates.update, name: seo.title, description: seo.metaDesc, - reviewedBy: { '@id': `${config.url}/#branding` }, + reviewedBy: { '@id': `${settings.url}/#branding` }, url: `${articleUrl}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; const blogSchema: Blog = { - '@id': `${config.url}/#blog`, + '@id': `${settings.url}/#blog`, '@type': 'Blog', - blogPost: { '@id': `${config.url}/#article` }, + blogPost: { '@id': `${settings.url}/#article` }, isPartOf: { '@id': `${articleUrl}`, }, @@ -88,24 +88,24 @@ const SingleArticle: NextPageWithLayout<ArticleProps> = ({ post }) => { const updateDate = new Date(dates.update); const blogPostSchema: BlogPosting = { - '@id': `${config.url}/#article`, + '@id': `${settings.url}/#article`, '@type': 'BlogPosting', name: title, description: intro, articleBody: content, - author: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, commentCount: comments.length, copyrightYear: publicationDate.getFullYear(), - creator: { '@id': `${config.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), discussionUrl: `${articleUrl}/#comments`, - editor: { '@id': `${config.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, image: featuredImage?.sourceUrl, - inLanguage: config.locales.defaultLocale, + inLanguage: settings.locales.defaultLocale, isPartOf: { - '@id': `${config.url}/blog`, + '@id': `${settings.url}/blog`, }, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${articleUrl}` }, diff --git a/src/pages/blog/index.tsx b/src/pages/blog/index.tsx index 9a86d9f..c0d99e9 100644 --- a/src/pages/blog/index.tsx +++ b/src/pages/blog/index.tsx @@ -6,11 +6,11 @@ import PostsList from '@components/PostsList/PostsList'; import Sidebar from '@components/Sidebar/Sidebar'; import Spinner from '@components/Spinner/Spinner'; import { ThematicsList, TopicsList } from '@components/Widgets'; -import { config } from '@config/website'; import { getPublishedPosts } from '@services/graphql/queries'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; import { BlogPageProps, PostsList as PostsListData } from '@ts/types/blog'; +import { settings } from '@utils/config'; import { getIntlInstance, loadTranslation } from '@utils/helpers/i18n'; import { GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -29,9 +29,9 @@ const Blog: NextPageWithLayout<BlogPageProps> = ({ fallback }) => { if (previousData && !previousData.posts) return null; return pageIndex === 0 - ? { first: config.postsPerPage } + ? { first: settings.postsPerPage } : { - first: config.postsPerPage, + first: settings.postsPerPage, after: previousData.pageInfo.endCursor, }; }; @@ -48,13 +48,13 @@ const Blog: NextPageWithLayout<BlogPageProps> = ({ fallback }) => { }, [data]); const [loadedPostsCount, setLoadedPostsCount] = useState<number>( - config.postsPerPage + settings.postsPerPage ); useEffect(() => { if (data && data.length > 0) { const newCount = - config.postsPerPage + + settings.postsPerPage + data[0].pageInfo.total - data[data.length - 1].pageInfo.total; setLoadedPostsCount(newCount); @@ -91,7 +91,7 @@ const Blog: NextPageWithLayout<BlogPageProps> = ({ fallback }) => { defaultMessage: 'Blog: development, open source - {websiteName}', description: 'BlogPage: SEO - Page title', }, - { websiteName: config.name } + { websiteName: settings.name } ); const pageDescription = intl.formatMessage( { @@ -99,31 +99,31 @@ const Blog: NextPageWithLayout<BlogPageProps> = ({ fallback }) => { "Discover {websiteName}'s writings. He talks about web development, Linux and open source mostly.", description: 'BlogPage: SEO - Meta description', }, - { websiteName: config.name } + { websiteName: settings.name } ); - const pageUrl = `${config.url}${router.asPath}`; + const pageUrl = `${settings.url}${router.asPath}`; const webpageSchema: WebPage = { '@id': `${pageUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: pageTitle, description: pageDescription, - inLanguage: config.locales.defaultLocale, - reviewedBy: { '@id': `${config.url}/#branding` }, - url: `${config.url}`, + inLanguage: settings.locales.defaultLocale, + reviewedBy: { '@id': `${settings.url}/#branding` }, + url: `${settings.url}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; const blogSchema: BlogSchema = { - '@id': `${config.url}/#blog`, + '@id': `${settings.url}/#blog`, '@type': 'Blog', - author: { '@id': `${config.url}/#branding` }, - creator: { '@id': `${config.url}/#branding` }, - editor: { '@id': `${config.url}/#branding` }, - inLanguage: config.locales.defaultLocale, + author: { '@id': `${settings.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${pageUrl}` }, }; @@ -213,7 +213,7 @@ export const getStaticProps: GetStaticProps = async ( defaultMessage: 'Blog', description: 'BlogPage: breadcrumb item', }); - const data = await getPublishedPosts({ first: config.postsPerPage }); + const data = await getPublishedPosts({ first: settings.postsPerPage }); const { locale } = context; const translation = await loadTranslation(locale); diff --git a/src/pages/contact.tsx b/src/pages/contact.tsx index 489135d..e410afa 100644 --- a/src/pages/contact.tsx +++ b/src/pages/contact.tsx @@ -4,10 +4,10 @@ import { getLayout } from '@components/Layouts/Layout'; import PostHeader from '@components/PostHeader/PostHeader'; import Sidebar from '@components/Sidebar/Sidebar'; import { SocialMedia } from '@components/Widgets'; -import { config } from '@config/website'; import { sendMail } from '@services/graphql/mutations'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; +import { settings } from '@utils/config'; import { getIntlInstance, loadTranslation } from '@utils/helpers/i18n'; import { GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -68,7 +68,7 @@ const ContactPage: NextPageWithLayout = () => { defaultMessage: 'Contact form - {websiteName}', description: 'ContactPage: SEO - Page title', }, - { websiteName: config.name } + { websiteName: settings.name } ); const pageDescription = intl.formatMessage( { @@ -76,9 +76,9 @@ const ContactPage: NextPageWithLayout = () => { "Contact {websiteName} through its website. All you need to do it's to fill the contact form.", description: 'ContactPage: SEO - Meta description', }, - { websiteName: config.name } + { websiteName: settings.name } ); - const pageUrl = `${config.url}${router.asPath}`; + const pageUrl = `${settings.url}${router.asPath}`; const title = intl.formatMessage({ defaultMessage: 'Contact', description: 'ContactPage: page title', @@ -91,25 +91,25 @@ const ContactPage: NextPageWithLayout = () => { const webpageSchema: WebPage = { '@id': `${pageUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: pageTitle, description: pageDescription, - reviewedBy: { '@id': `${config.url}/#branding` }, + reviewedBy: { '@id': `${settings.url}/#branding` }, url: `${pageUrl}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; const contactSchema: ContactPageSchema = { - '@id': `${config.url}/#contact`, + '@id': `${settings.url}/#contact`, '@type': 'ContactPage', name: title, description: intro, - author: { '@id': `${config.url}/#branding` }, - creator: { '@id': `${config.url}/#branding` }, - editor: { '@id': `${config.url}/#branding` }, - inLanguage: config.locales.defaultLocale, + author: { '@id': `${settings.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${pageUrl}` }, }; diff --git a/src/pages/cv.tsx b/src/pages/cv.tsx index c3686de..311d0ce 100644 --- a/src/pages/cv.tsx +++ b/src/pages/cv.tsx @@ -2,11 +2,11 @@ import { getLayout } from '@components/Layouts/Layout'; import PostHeader from '@components/PostHeader/PostHeader'; import Sidebar from '@components/Sidebar/Sidebar'; import { CVPreview, SocialMedia, ToC } from '@components/Widgets'; -import { config } from '@config/website'; import CVContent, { intro, meta, pdf, image } from '@content/pages/cv.mdx'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; import { ArticleMeta } from '@ts/types/articles'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -25,13 +25,13 @@ const CV: NextPageWithLayout = () => { const pageMeta: ArticleMeta = { dates, }; - const pageUrl = `${config.url}${router.asPath}`; + const pageUrl = `${settings.url}${router.asPath}`; const pageTitle = intl.formatMessage( { defaultMessage: 'CV Front-end developer - {websiteName}', description: 'CVPage: SEO - Page title', }, - { websiteName: config.name } + { websiteName: settings.name } ); const pageDescription = intl.formatMessage( { @@ -39,19 +39,19 @@ const CV: NextPageWithLayout = () => { 'Discover the curriculum of {websiteName}, front-end developer located in France: skills, experiences and training.', description: 'CVPage: SEO - Meta description', }, - { websiteName: config.name } + { websiteName: settings.name } ); const webpageSchema: WebPage = { '@id': `${pageUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: pageTitle, description: pageDescription, - reviewedBy: { '@id': `${config.url}/#branding` }, + reviewedBy: { '@id': `${settings.url}/#branding` }, url: `${pageUrl}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; @@ -59,18 +59,18 @@ const CV: NextPageWithLayout = () => { const updateDate = new Date(dates.update); const cvSchema: AboutPage = { - '@id': `${config.url}/#cv`, + '@id': `${settings.url}/#cv`, '@type': 'AboutPage', name: pageTitle, description: intro, - author: { '@id': `${config.url}/#branding` }, - creator: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), - editor: { '@id': `${config.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, image, - inLanguage: config.locales.defaultLocale, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', thumbnailUrl: image, mainEntityOfPage: { '@id': `${pageUrl}` }, @@ -86,7 +86,7 @@ const CV: NextPageWithLayout = () => { defaultMessage: "{name}'s CV", description: 'CVPage: page title', }, - { name: config.name } + { name: settings.name } ); return ( diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 41a4603..0fe1a4f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -2,10 +2,10 @@ import FeedIcon from '@assets/images/icon-feed.svg'; import { ButtonLink } from '@components/Buttons'; import { ContactIcon } from '@components/Icons'; import Layout from '@components/Layouts/Layout'; -import { config } from '@config/website'; import HomePageContent from '@content/pages/homepage.mdx'; import styles from '@styles/pages/Home.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -122,7 +122,7 @@ const Home: NextPageWithLayout = () => { defaultMessage: '{websiteName} | Front-end developer: WordPress/React', description: 'HomePage: SEO - Page title', }, - { websiteName: config.name } + { websiteName: settings.name } ); const pageDescription = intl.formatMessage( { @@ -130,22 +130,22 @@ const Home: NextPageWithLayout = () => { '{websiteName} is a front-end developer located in France. He codes and he writes mostly about web development and open-source.', description: 'HomePage: SEO - Meta description', }, - { websiteName: config.name } + { websiteName: settings.name } ); const webpageSchema: WebPage = { - '@id': `${config.url}/#home`, + '@id': `${settings.url}/#home`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: pageTitle, description: pageDescription, - author: { '@id': `${config.url}/#branding` }, - creator: { '@id': `${config.url}/#branding` }, - editor: { '@id': `${config.url}/#branding` }, - inLanguage: config.locales.defaultLocale, + author: { '@id': `${settings.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', - reviewedBy: { '@id': `${config.url}/#branding` }, - url: `${config.url}`, + reviewedBy: { '@id': `${settings.url}/#branding` }, + url: `${settings.url}`, }; const schemaJsonLd: Graph = { @@ -159,7 +159,7 @@ const Home: NextPageWithLayout = () => { <title>{pageTitle}</title> <meta name="description" content={pageDescription} /> <meta property="og:type" content="website" /> - <meta property="og:url" content={`${config.url}`} /> + <meta property="og:url" content={`${settings.url}`} /> <meta property="og:title" content={pageTitle} /> <meta property="og:description" content={pageDescription} /> <script diff --git a/src/pages/mentions-legales.tsx b/src/pages/mentions-legales.tsx index 0ec92a2..b1dca02 100644 --- a/src/pages/mentions-legales.tsx +++ b/src/pages/mentions-legales.tsx @@ -2,7 +2,6 @@ import { getLayout } from '@components/Layouts/Layout'; import PostHeader from '@components/PostHeader/PostHeader'; import Sidebar from '@components/Sidebar/Sidebar'; import { ToC } from '@components/Widgets'; -import { config } from '@config/website'; import LegalNoticeContent, { intro, meta, @@ -10,6 +9,7 @@ import LegalNoticeContent, { import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; import { ArticleMeta } from '@ts/types/articles'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -33,16 +33,16 @@ const LegalNotice: NextPageWithLayout = () => { defaultMessage: 'Legal notice - {websiteName}', description: 'LegalNoticePage: SEO - Page title', }, - { websiteName: config.name } + { websiteName: settings.name } ); const pageDescription = intl.formatMessage( { defaultMessage: "Discover the legal notice of {websiteName}'s website.", description: 'LegalNoticePage: SEO - Meta description', }, - { websiteName: config.name } + { websiteName: settings.name } ); - const pageUrl = `${config.url}${router.asPath}`; + const pageUrl = `${settings.url}${router.asPath}`; const title = intl.formatMessage({ defaultMessage: 'Legal notice', description: 'LegalNoticePage: page title', @@ -53,31 +53,31 @@ const LegalNotice: NextPageWithLayout = () => { const webpageSchema: WebPage = { '@id': `${pageUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: pageTitle, description: pageDescription, - inLanguage: config.locales.defaultLocale, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', - reviewedBy: { '@id': `${config.url}/#branding` }, + reviewedBy: { '@id': `${settings.url}/#branding` }, url: `${pageUrl}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; const articleSchema: Article = { - '@id': `${config.url}/#legal-notice`, + '@id': `${settings.url}/#legal-notice`, '@type': 'Article', name: title, description: intro, - author: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, copyrightYear: publicationDate.getFullYear(), - creator: { '@id': `${config.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), - editor: { '@id': `${config.url}/#branding` }, - inLanguage: config.locales.defaultLocale, + editor: { '@id': `${settings.url}/#branding` }, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${pageUrl}` }, }; diff --git a/src/pages/projet/[slug].tsx b/src/pages/projet/[slug].tsx index f44d810..f96da0e 100644 --- a/src/pages/projet/[slug].tsx +++ b/src/pages/projet/[slug].tsx @@ -4,13 +4,13 @@ import PostHeader from '@components/PostHeader/PostHeader'; import ProjectSummary from '@components/ProjectSummary/ProjectSummary'; import Sidebar from '@components/Sidebar/Sidebar'; import { Sharing, ToC } from '@components/Widgets'; -import { config } from '@config/website'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout, Project as ProjectData, ProjectProps, } from '@ts/types/app'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { getAllProjectsFilename, @@ -30,7 +30,7 @@ const Project: NextPageWithLayout<ProjectProps> = ({ project: ProjectData; }) => { const router = useRouter(); - const projectUrl = `${config.url}${router.asPath}`; + const projectUrl = `${settings.url}${router.asPath}`; const { id, intro, meta, title, seo } = project; const dates = { publication: meta.publishedOn, @@ -50,14 +50,14 @@ const Project: NextPageWithLayout<ProjectProps> = ({ const webpageSchema: WebPage = { '@id': `${projectUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: seo.title, description: seo.description, - inLanguage: config.locales.defaultLocale, - reviewedBy: { '@id': `${config.url}/#branding` }, - url: `${config.url}`, + inLanguage: settings.locales.defaultLocale, + reviewedBy: { '@id': `${settings.url}/#branding` }, + url: `${settings.url}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; @@ -65,20 +65,20 @@ const Project: NextPageWithLayout<ProjectProps> = ({ const updateDate = new Date(dates.update); const articleSchema: Article = { - '@id': `${config.url}/project`, + '@id': `${settings.url}/project`, '@type': 'Article', name: title, description: intro, - author: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, copyrightYear: publicationDate.getFullYear(), - creator: { '@id': `${config.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), - editor: { '@id': `${config.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, thumbnailUrl: meta.hasCover ? `/projects/${id}.jpg` : '', image: meta.hasCover ? `/projects/${id}.jpg` : '', - inLanguage: config.locales.defaultLocale, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${projectUrl}` }, }; diff --git a/src/pages/projets.tsx b/src/pages/projets.tsx index da4523c..48e55e5 100644 --- a/src/pages/projets.tsx +++ b/src/pages/projets.tsx @@ -1,10 +1,10 @@ import { getLayout } from '@components/Layouts/Layout'; import PostHeader from '@components/PostHeader/PostHeader'; import ProjectsList from '@components/ProjectsList/ProjectsList'; -import { config } from '@config/website'; import PageContent, { meta } from '@content/pages/projects.mdx'; import styles from '@styles/pages/Projects.module.scss'; import { Project } from '@ts/types/app'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { getSortedProjects } from '@utils/helpers/projects'; import { GetStaticProps, GetStaticPropsContext } from 'next'; @@ -22,13 +22,13 @@ const Projects = ({ projects }: { projects: Project[] }) => { const publicationDate = new Date(dates.publication); const updateDate = new Date(dates.update); const router = useRouter(); - const pageUrl = `${config.url}${router.asPath}`; + const pageUrl = `${settings.url}${router.asPath}`; const pageTitle = intl.formatMessage( { defaultMessage: 'Projects: open-source makings - {websiteName}', description: 'ProjectsPage: SEO - Page title', }, - { websiteName: config.name } + { websiteName: settings.name } ); const pageDescription = intl.formatMessage( { @@ -36,37 +36,37 @@ const Projects = ({ projects }: { projects: Project[] }) => { 'Discover {websiteName} projects. Mostly related to web development and open source.', description: 'ProjectsPage: SEO - Meta description', }, - { websiteName: config.name } + { websiteName: settings.name } ); const webpageSchema: WebPage = { '@id': `${pageUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: pageTitle, description: pageDescription, - inLanguage: config.locales.defaultLocale, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', - reviewedBy: { '@id': `${config.url}/#branding` }, + reviewedBy: { '@id': `${settings.url}/#branding` }, url: `${pageUrl}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; const articleSchema: Article = { - '@id': `${config.url}/#projects`, + '@id': `${settings.url}/#projects`, '@type': 'Article', name: meta.title, description: pageDescription, - author: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, copyrightYear: publicationDate.getFullYear(), - creator: { '@id': `${config.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), - editor: { '@id': `${config.url}/#branding` }, - inLanguage: config.locales.defaultLocale, + editor: { '@id': `${settings.url}/#branding` }, + inLanguage: settings.locales.defaultLocale, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${pageUrl}` }, }; diff --git a/src/pages/recherche/index.tsx b/src/pages/recherche/index.tsx index 857b114..8e4033b 100644 --- a/src/pages/recherche/index.tsx +++ b/src/pages/recherche/index.tsx @@ -6,11 +6,11 @@ import PostsList from '@components/PostsList/PostsList'; import Sidebar from '@components/Sidebar/Sidebar'; import Spinner from '@components/Spinner/Spinner'; import { ThematicsList, TopicsList } from '@components/Widgets'; -import { config } from '@config/website'; import { getPublishedPosts } from '@services/graphql/queries'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; import { PostsList as PostsListData } from '@ts/types/blog'; +import { settings } from '@utils/config'; import { getIntlInstance, loadTranslation } from '@utils/helpers/i18n'; import { GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -37,9 +37,9 @@ const Search: NextPageWithLayout = () => { if (previousData && !previousData.posts) return null; return pageIndex === 0 - ? { first: config.postsPerPage, searchQuery: query } + ? { first: settings.postsPerPage, searchQuery: query } : { - first: config.postsPerPage, + first: settings.postsPerPage, after: previousData.pageInfo.endCursor, searchQuery: query, }; @@ -56,13 +56,13 @@ const Search: NextPageWithLayout = () => { }, [data]); const [loadedPostsCount, setLoadedPostsCount] = useState<number>( - config.postsPerPage + settings.postsPerPage ); useEffect(() => { if (data && data.length > 0) { const newCount = - config.postsPerPage + + settings.postsPerPage + data[0].pageInfo.total - data[data.length - 1].pageInfo.total; setLoadedPostsCount(newCount); @@ -102,11 +102,11 @@ const Search: NextPageWithLayout = () => { defaultMessage: 'Search for a post on {websiteName}', description: 'SearchPage: meta description without query', }, - { websiteName: config.name } + { websiteName: settings.name } ); const head = { - title: `${title} | ${config.name}`, + title: `${title} | ${settings.name}`, description, }; diff --git a/src/pages/sujet/[slug].tsx b/src/pages/sujet/[slug].tsx index 87a86a2..3ccacbb 100644 --- a/src/pages/sujet/[slug].tsx +++ b/src/pages/sujet/[slug].tsx @@ -3,12 +3,12 @@ import PostHeader from '@components/PostHeader/PostHeader'; import PostPreview from '@components/PostPreview/PostPreview'; import Sidebar from '@components/Sidebar/Sidebar'; import { RelatedThematics, ToC, TopicsList } from '@components/Widgets'; -import { config } from '@config/website'; import { getAllTopicsSlug, getTopicBySlug } from '@services/graphql/queries'; import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; import { ArticleMeta } from '@ts/types/articles'; import { TopicProps, ThematicPreview } from '@ts/types/taxonomies'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { GetStaticPaths, GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -51,19 +51,19 @@ const Topic: NextPageWithLayout<TopicProps> = ({ topic }) => { results: topic.posts.length, website: topic.officialWebsite, }; - const topicUrl = `${config.url}${router.asPath}`; + const topicUrl = `${settings.url}${router.asPath}`; const webpageSchema: WebPage = { '@id': `${topicUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: topic.seo.title, description: topic.seo.metaDesc, - inLanguage: config.locales.defaultLocale, - reviewedBy: { '@id': `${config.url}/#branding` }, - url: `${config.url}`, + inLanguage: settings.locales.defaultLocale, + reviewedBy: { '@id': `${settings.url}/#branding` }, + url: `${settings.url}`, isPartOf: { - '@id': `${config.url}`, + '@id': `${settings.url}`, }, }; @@ -71,24 +71,24 @@ const Topic: NextPageWithLayout<TopicProps> = ({ topic }) => { const updateDate = new Date(topic.dates.update); const articleSchema: Article = { - '@id': `${config.url}/topic`, + '@id': `${settings.url}/topic`, '@type': 'Article', name: topic.title, description: topic.intro, - author: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, copyrightYear: publicationDate.getFullYear(), - creator: { '@id': `${config.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), - editor: { '@id': `${config.url}/#branding` }, + editor: { '@id': `${settings.url}/#branding` }, thumbnailUrl: topic.featuredImage?.sourceUrl, image: topic.featuredImage?.sourceUrl, - inLanguage: config.locales.defaultLocale, - isPartOf: { '@id': `${config.url}/blog` }, + inLanguage: settings.locales.defaultLocale, + isPartOf: { '@id': `${settings.url}/blog` }, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${topicUrl}` }, - subjectOf: { '@id': `${config.url}/blog` }, + subjectOf: { '@id': `${settings.url}/blog` }, }; const schemaJsonLd: Graph = { diff --git a/src/pages/thematique/[slug].tsx b/src/pages/thematique/[slug].tsx index 61019fd..dbef25b 100644 --- a/src/pages/thematique/[slug].tsx +++ b/src/pages/thematique/[slug].tsx @@ -3,7 +3,6 @@ import PostHeader from '@components/PostHeader/PostHeader'; import PostPreview from '@components/PostPreview/PostPreview'; import Sidebar from '@components/Sidebar/Sidebar'; import { RelatedTopics, ThematicsList, ToC } from '@components/Widgets'; -import { config } from '@config/website'; import { getAllThematicsSlug, getThematicBySlug, @@ -12,6 +11,7 @@ import styles from '@styles/pages/Page.module.scss'; import { NextPageWithLayout } from '@ts/types/app'; import { ArticleMeta } from '@ts/types/articles'; import { TopicPreview, ThematicProps } from '@ts/types/taxonomies'; +import { settings } from '@utils/config'; import { loadTranslation } from '@utils/helpers/i18n'; import { GetStaticPaths, GetStaticProps, GetStaticPropsContext } from 'next'; import Head from 'next/head'; @@ -53,39 +53,39 @@ const Thematic: NextPageWithLayout<ThematicProps> = ({ thematic }) => { dates: thematic.dates, results: thematic.posts.length, }; - const thematicUrl = `${config.url}${router.asPath}`; + const thematicUrl = `${settings.url}${router.asPath}`; const webpageSchema: WebPage = { '@id': `${thematicUrl}`, '@type': 'WebPage', - breadcrumb: { '@id': `${config.url}/#breadcrumb` }, + breadcrumb: { '@id': `${settings.url}/#breadcrumb` }, name: thematic.seo.title, description: thematic.seo.metaDesc, - inLanguage: config.locales.defaultLocale, - reviewedBy: { '@id': `${config.url}/#branding` }, - url: `${config.url}`, + inLanguage: settings.locales.defaultLocale, + reviewedBy: { '@id': `${settings.url}/#branding` }, + url: `${settings.url}`, }; const publicationDate = new Date(thematic.dates.publication); const updateDate = new Date(thematic.dates.update); const articleSchema: Article = { - '@id': `${config.url}/thematic`, + '@id': `${settings.url}/thematic`, '@type': 'Article', name: thematic.title, description: thematic.intro, - author: { '@id': `${config.url}/#branding` }, + author: { '@id': `${settings.url}/#branding` }, copyrightYear: publicationDate.getFullYear(), - creator: { '@id': `${config.url}/#branding` }, + creator: { '@id': `${settings.url}/#branding` }, dateCreated: publicationDate.toISOString(), dateModified: updateDate.toISOString(), datePublished: publicationDate.toISOString(), - editor: { '@id': `${config.url}/#branding` }, - inLanguage: config.locales.defaultLocale, - isPartOf: { '@id': `${config.url}/blog` }, + editor: { '@id': `${settings.url}/#branding` }, + inLanguage: settings.locales.defaultLocale, + isPartOf: { '@id': `${settings.url}/blog` }, license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr', mainEntityOfPage: { '@id': `${thematicUrl}` }, - subjectOf: { '@id': `${config.url}/blog` }, + subjectOf: { '@id': `${settings.url}/blog` }, }; const schemaJsonLd: Graph = { diff --git a/src/config/website.ts b/src/utils/config.ts index 81c493f..1c227cc 100644 --- a/src/config/website.ts +++ b/src/utils/config.ts @@ -1,4 +1,4 @@ -export const config = { +export const settings = { name: 'Armand Philippot', baseline: 'Front-end developer', copyright: { diff --git a/src/utils/helpers/i18n.ts b/src/utils/helpers/i18n.ts index 16c83f4..c4734ad 100644 --- a/src/utils/helpers/i18n.ts +++ b/src/utils/helpers/i18n.ts @@ -1,11 +1,11 @@ -import { config } from '@config/website'; import { createIntl, createIntlCache, IntlShape } from '@formatjs/intl'; +import { settings } from '@utils/config'; import { readFile } from 'fs/promises'; import path from 'path'; type Messages = { [key: string]: string }; -export const defaultLocale = config.locales.defaultLocale; +export const defaultLocale = settings.locales.defaultLocale; /** * Load the translation for the provided locale. diff --git a/src/utils/helpers/rss.ts b/src/utils/helpers/rss.ts index 7806f7c..55b009a 100644 --- a/src/utils/helpers/rss.ts +++ b/src/utils/helpers/rss.ts @@ -1,7 +1,7 @@ -import { config } from '@config/website'; import { getPublishedPosts } from '@services/graphql/queries'; import { ArticlePreview } from '@ts/types/articles'; import { PostsList } from '@ts/types/blog'; +import { settings } from '@utils/config'; import { Feed } from 'feed'; const getAllPosts = async (): Promise<ArticlePreview[]> => { @@ -22,12 +22,12 @@ const getAllPosts = async (): Promise<ArticlePreview[]> => { export const generateFeed = async () => { const websiteUrl = process.env.FRONTEND_URL ? process.env.FRONTEND_URL : ''; const author = { - name: config.name, + name: settings.name, email: process.env.AUTHOR_EMAIL, link: websiteUrl, }; - const copyright = `${config.name} CC BY SA ${config.copyright.startYear} - ${config.copyright.endYear}`; - const title = `${config.name} | ${config.baseline}`; + const copyright = `${settings.name} CC BY SA ${settings.copyright.startYear} - ${settings.copyright.endYear}`; + const title = `${settings.name} | ${settings.baseline}`; const feed = new Feed({ author, @@ -39,7 +39,7 @@ export const generateFeed = async () => { }, generator: 'Feed & NextJS', id: websiteUrl, - language: config.locales.defaultLocale, + language: settings.locales.defaultLocale, link: websiteUrl, title, }); diff --git a/tsconfig.json b/tsconfig.json index 187d157..dac9026 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,6 @@ "paths": { "@i18n/*": ["src/i18n/*"], "@assets/*": ["src/assets/*"], - "@config/*": ["src/config/*"], "@content/*": ["src/content/*"], "@components/*": ["src/components/*"], "@pages/*": ["src/pages/*"], |
