Skip to content

Commit 3819573

Browse files
authored
Merge pull request #470 from dzcode-io/466-fix-url-localization-always-use-english-and-prefix-with-language-code
feat: fix url localisation so it always use english URLs and prefix them with language code
2 parents fa68531 + 66cb949 commit 3819573

File tree

24 files changed

+126
-54
lines changed

24 files changed

+126
-54
lines changed

packages/ui/src/error-boundary/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ErrorBoundary as SentryErrorBoundary } from "@sentry/react";
22
import { FC, PropsWithChildren } from "react";
33

44
import { Grid } from "../grid";
5-
import { Link } from "../link";
5+
import { Link } from "../link-factory";
66
import { Typography } from "../typography";
77

88
type ErrorBoundaryProps = PropsWithChildren<{
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { FC, HTMLProps } from "react";
2+
import { Link as ReactRouterLink, LinkProps } from "react-router-dom";
3+
4+
export const linkFactory =
5+
(getLanguageCode: () => string, defaultLanguageCode: string): FC<HTMLProps<HTMLAnchorElement>> =>
6+
// eslint-disable-next-line react/display-name
7+
(props) => {
8+
const languageCode = getLanguageCode();
9+
10+
if (props.href && (props.href.startsWith("/") || props.href.startsWith(location.origin))) {
11+
return (
12+
<ReactRouterLink
13+
{...(props as LinkProps)}
14+
to={defaultLanguageCode === languageCode ? props.href : `/${languageCode}${props.href}`}
15+
/>
16+
);
17+
} else {
18+
return <a {...props} />;
19+
}
20+
};
21+
22+
export const Link = linkFactory(() => "en", "en");

packages/ui/src/link/index.tsx

Lines changed: 0 additions & 10 deletions
This file was deleted.

web/src/apps/main/components/authors/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import Typography from "@material-ui/core/Typography";
88
import Skeleton from "@material-ui/lab/Skeleton";
99
import { FC } from "react";
1010
import { useDispatch } from "react-redux";
11+
import { LinkV2 } from "src/apps/main/components/link-v2";
1112
import { Dispatch } from "src/apps/main/redux";
1213
import { fetchCurrentArticleAuthors } from "src/apps/main/redux/actions/articles-page";
1314
import { ArticlesPageState } from "src/apps/main/redux/reducers/articles-page";
14-
import { LinkV2 } from "src/components/link-v2";
1515

1616
const useStyles = makeStyles((theme) => ({
1717
avatarsContainer: {

web/src/apps/main/components/card/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import makeStyles from "@material-ui/core/styles/makeStyles";
88
import Typography from "@material-ui/core/Typography";
99
import Skeleton from "@material-ui/lab/Skeleton";
1010
import { FC } from "react";
11-
import { LinkV2 } from "src/components/link-v2";
11+
import { LinkV2 } from "src/apps/main/components/link-v2";
1212

1313
interface CardInfo {
1414
image: string;

web/src/apps/main/components/contributors/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import Typography from "@material-ui/core/Typography";
88
import Skeleton from "@material-ui/lab/Skeleton";
99
import { FC } from "react";
1010
import { useDispatch } from "react-redux";
11+
import { LinkV2 } from "src/apps/main/components/link-v2";
1112
import { Dispatch } from "src/apps/main/redux";
1213
import { fetchCurrentArticleContributors } from "src/apps/main/redux/actions/articles-page";
1314
import { ArticlesPageState } from "src/apps/main/redux/reducers/articles-page";
14-
import { LinkV2 } from "src/components/link-v2";
1515

1616
const useStyles = makeStyles((theme) => ({
1717
avatarsContainer: {

web/src/apps/main/components/footer/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import { makeStyles } from "@material-ui/core/styles";
44
import Typography from "@material-ui/core/Typography";
55
import { FC } from "react";
66
import { useSelector } from "react-redux";
7+
import { LinkV2 } from "src/apps/main/components/link-v2";
78
import { T } from "src/apps/main/components/t";
89
import { StateInterface } from "src/apps/main/redux";
910
import { FooterComponentState } from "src/apps/main/redux/reducers/footer-component";
10-
import { LinkV2 } from "src/components/link-v2";
1111

1212
const useStyles = makeStyles((theme) => ({
1313
root: {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { linkFactory } from "@dzcode.io/ui/dist/link-factory";
2+
3+
import { mainStore } from "../../redux";
4+
5+
export const LinkV2 = linkFactory(() => mainStore.getState().settings.language.code, "en");

web/src/apps/main/components/markdown/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { useSelector } from "react-redux";
66
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
77
import prism from "react-syntax-highlighter/dist/cjs/styles/prism/prism";
88
import tomorrow from "react-syntax-highlighter/dist/cjs/styles/prism/tomorrow";
9+
import { LinkV2 } from "src/apps/main/components/link-v2";
910
import { StateInterface } from "src/apps/main/redux";
10-
import { LinkV2 } from "src/components/link-v2";
1111

1212
export const Markdown: FC<ReactMarkdown> = ({ children, t, ...markdownProps }) => {
1313
const theme = useTheme();

web/src/apps/main/components/navbar/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import { useScrollPosition } from "@n8tb1t/use-scroll-position";
1010
import { FC, Fragment, useState } from "react";
1111
import { useDispatch, useSelector } from "react-redux";
1212
import { animated, useSpring } from "react-spring";
13+
import { LinkV2 } from "src/apps/main/components/link-v2";
1314
import { T } from "src/apps/main/components/t";
1415
import { Dispatch, StateInterface } from "src/apps/main/redux";
1516
import { SettingsState } from "src/apps/main/redux/reducers/settings";
1617
import logo from "src/assets/svg/logo-wide.svg";
17-
import { LinkV2 } from "src/components/link-v2";
1818

1919
import { IOSSwitch } from "./ios-switch";
2020
import { LanguageSwitch } from "./lang-switch";

0 commit comments

Comments
 (0)