aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/hooks/use-settings.tsx
blob: a45e934ddebf4dc0a1f526928469f6cea78038b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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;