diff --git a/frontend/package.json b/frontend/package.json
index e7690c85..f6c0fb2a 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -20,6 +20,7 @@
"@typescript-eslint/parser": "^4.28.1",
"babel-eslint": "^10.1.0",
"classnames": "^2.3.1",
+ "country-flag-icons": "^1.4.11",
"date-fns": "2.22.1",
"eslint": "^7.30.0",
"eslint-config-prettier": "^8.3.0",
@@ -46,6 +47,7 @@
"react": "^17.0.2",
"react-async": "10.0.1",
"react-dom": "17.0.2",
+ "react-icons": "^4.3.1",
"react-intl": "^5.20.6",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
@@ -97,6 +99,7 @@
}
},
"devDependencies": {
- "@formatjs/cli": "^4.2.29"
+ "@formatjs/cli": "^4.2.29",
+ "@types/country-flag-icons": "^1.2.0"
}
}
diff --git a/frontend/public/index.html b/frontend/public/index.html
index c25a4ff8..68172f41 100644
--- a/frontend/public/index.html
+++ b/frontend/public/index.html
@@ -47,10 +47,6 @@
content="/images/favicon/browserconfig.xml"
/>
-
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 0ab9ebf8..7237560f 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -6,11 +6,13 @@ import { AuthProvider, HealthProvider, LocaleProvider } from "context";
import { intl } from "locale";
import { RawIntlProvider } from "react-intl";
+import lightTheme from "./theme/customTheme";
+
function App() {
return (
-
+
diff --git a/frontend/src/components/Flag/Flag.tsx b/frontend/src/components/Flag/Flag.tsx
index a52db3d8..f2322e40 100644
--- a/frontend/src/components/Flag/Flag.tsx
+++ b/frontend/src/components/Flag/Flag.tsx
@@ -1,6 +1,9 @@
import React from "react";
-import cn from "classnames";
+import { Box } from "@chakra-ui/layout";
+import { hasFlag } from "country-flag-icons";
+// @ts-ignore Creating a typing for a subfolder is not easily possible
+import Flags from "country-flag-icons/react/3x2";
export interface FlagProps {
/**
@@ -8,21 +11,21 @@ export interface FlagProps {
*/
className?: string;
/**
- * Country code of flag
+ * Two letter country code of flag
*/
- country: string;
- /**
- * Size of the flag
- */
- size?: string;
+ countryCode: string;
}
-export const Flag: React.FC = ({ className, country, size }) => {
- const classes = [
- `flag-country-${country.toLowerCase()}`,
- {
- [`flag-${size}`]: !!size,
- },
- ];
+export const Flag: React.FC = ({ className, countryCode }) => {
+ countryCode = countryCode.toUpperCase();
- return ;
+ if (hasFlag(countryCode)) {
+ const FlagElement = Flags[countryCode];
+ return (
+
+ );
+ } else {
+ console.error(`No flag for country ${countryCode} found!`);
+
+ return ;
+ }
};
diff --git a/frontend/src/components/LocalePicker.tsx b/frontend/src/components/LocalePicker.tsx
index 0f705af6..f27d49b4 100644
--- a/frontend/src/components/LocalePicker.tsx
+++ b/frontend/src/components/LocalePicker.tsx
@@ -45,13 +45,13 @@ export const LocalePicker: React.FC = ({
+
+
+
);
}
diff --git a/frontend/src/styles/fonts.scss b/frontend/src/styles/fonts.scss
new file mode 100644
index 00000000..0ca1cff6
--- /dev/null
+++ b/frontend/src/styles/fonts.scss
@@ -0,0 +1,47 @@
+/* source-sans-pro-regular - latin */
+@font-face {
+ font-family: "Source Sans Pro";
+ font-style: normal;
+ font-weight: 400;
+ src: local(""),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-regular.woff2")
+ format("woff2"),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-regular.woff")
+ format("woff");
+}
+
+/* source-sans-pro-italic - latin */
+@font-face {
+ font-family: "Source Sans Pro";
+ font-style: italic;
+ font-weight: 400;
+ src: local(""),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-italic.woff2")
+ format("woff2"),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-italic.woff")
+ format("woff");
+}
+
+/* source-sans-pro-700 - latin */
+@font-face {
+ font-family: "Source Sans Pro";
+ font-style: normal;
+ font-weight: 700;
+ src: local(""),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-700.woff2")
+ format("woff2"),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-700.woff")
+ format("woff");
+}
+
+/* source-sans-pro-700italic - latin */
+@font-face {
+ font-family: "Source Sans Pro";
+ font-style: italic;
+ font-weight: 700;
+ src: local(""),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-700italic.woff2")
+ format("woff2"),
+ url("../fonts/source-sans-pro/source-sans-pro-v14-latin-700italic.woff")
+ format("woff");
+}
diff --git a/frontend/src/theme/customTheme.ts b/frontend/src/theme/customTheme.ts
new file mode 100644
index 00000000..1a1b5e29
--- /dev/null
+++ b/frontend/src/theme/customTheme.ts
@@ -0,0 +1,16 @@
+import { theme as chakraTheme, ThemeConfig } from "@chakra-ui/react";
+import { extendTheme } from "@chakra-ui/react";
+
+// declare a variable for fonts and set our fonts
+const fonts = {
+ ...chakraTheme.fonts,
+ body: `"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"`,
+ heading: `"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"`,
+};
+
+const config: ThemeConfig = {
+ initialColorMode: "system",
+};
+
+const lightTheme = extendTheme({ fonts, config });
+export default lightTheme;