summaryrefslogtreecommitdiffstats
path: root/src/utils
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-05-02 18:57:29 +0200
committerArmand Philippot <git@armandphilippot.com>2022-05-03 15:22:24 +0200
commit732d0943f8041d76262222a092b014f2557085ef (patch)
tree16f6f76648b479a9591400ab15bb3e9c914f2226 /src/utils
parentca921d7536cfe950b5a7d442977bbf900b48faf4 (diff)
chore: add homepage
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/hooks/use-settings.tsx112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/utils/hooks/use-settings.tsx b/src/utils/hooks/use-settings.tsx
new file mode 100644
index 0000000..a45e934
--- /dev/null
+++ b/src/utils/hooks/use-settings.tsx
@@ -0,0 +1,112 @@
+import photo from '@assets/images/armand-philippot.jpg';
+import { settings } from '@utils/config';
+import { useRouter } from 'next/router';
+
+export type BlogSettings = {
+ /**
+ * The number of posts per page.
+ */
+ postsPerPage: number;
+};
+
+export type CopyrightSettings = {
+ /**
+ * The copyright end year.
+ */
+ end: string;
+ /**
+ * The copyright start year.
+ */
+ start: string;
+};
+
+export type LocaleSettings = {
+ /**
+ * The default locale.
+ */
+ default: string;
+ /**
+ * The supported locales.
+ */
+ supported: string[];
+};
+
+export type PictureSettings = {
+ /**
+ * The picture height.
+ */
+ height: number;
+ /**
+ * The picture url.
+ */
+ src: string;
+ /**
+ * The picture width.
+ */
+ width: number;
+};
+
+export type WebsiteSettings = {
+ /**
+ * The website name.
+ */
+ name: string;
+ /**
+ * The website baseline.
+ */
+ baseline: string;
+ /**
+ * The website copyright dates.
+ */
+ copyright: CopyrightSettings;
+ /**
+ * The website locales.
+ */
+ locales: LocaleSettings;
+ /**
+ * A picture representing the website.
+ */
+ picture: PictureSettings;
+ /**
+ * The website url.
+ */
+ url: string;
+};
+
+export type UseSettingsReturn = {
+ blog: BlogSettings;
+ website: WebsiteSettings;
+};
+
+/**
+ * Retrieve the website and blog settings.
+ *
+ * @returns {UseSettingsReturn} - An object describing settings.
+ */
+const useSettings = (): UseSettingsReturn => {
+ const { baseline, copyright, locales, name, postsPerPage, url } = settings;
+ const router = useRouter();
+ const locale = router.locale || locales.defaultLocale;
+
+ return {
+ blog: {
+ postsPerPage,
+ },
+ website: {
+ baseline: locale.startsWith('en') ? baseline.en : baseline.fr,
+ copyright: {
+ end: copyright.endYear,
+ start: copyright.startYear,
+ },
+ locales: {
+ default: locales.defaultLocale,
+ supported: locales.supported,
+ },
+ name,
+ picture: photo,
+ url,
+ },
+ };
+};
+
+export default useSettings;