saleor-dashboard/src/translations/index.tsx
Krzysztof Wolski a82de30309
Add circleci config and enhance our linters (#519)
* Add circleci config

* Season linting config

* Apply code style
2020-05-14 11:30:32 +02:00

257 lines
6.9 KiB
TypeScript

import { sectionNames } from "@saleor/intl";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { WindowTitle } from "../components/WindowTitle";
import { LanguageCodeEnum } from "../types/globalTypes";
import {
languageEntitiesPath,
languageEntityPath,
languageListPath,
TranslatableEntities
} from "./urls";
import TranslationsCategoriesComponent, {
TranslationsCategoriesQueryParams
} from "./views/TranslationsCategories";
import TranslationsCollectionsComponent, {
TranslationsCollectionsQueryParams
} from "./views/TranslationsCollections";
import TranslationsEntitiesComponent from "./views/TranslationsEntities";
import TranslationsLanguageList from "./views/TranslationsLanguageList";
import TranslationsPagesComponent, {
TranslationsPagesQueryParams
} from "./views/TranslationsPages";
import TranslationsProductsComponent, {
TranslationsProductsQueryParams
} from "./views/TranslationsProducts";
import TranslationsProductTypesComponent, {
TranslationsProductTypesQueryParams
} from "./views/TranslationsProductTypes";
import TranslationsSaleComponent, {
TranslationsSalesQueryParams
} from "./views/TranslationsSales";
import TranslationsVouchersComponent, {
TranslationsVouchersQueryParams
} from "./views/TranslationsVouchers";
type TranslationsEntitiesRouteProps = RouteComponentProps<{
languageCode: string;
}>;
const TranslationsEntities: React.FC<TranslationsEntitiesRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
return (
<TranslationsEntitiesComponent
language={match.params.languageCode}
params={qs}
/>
);
};
type TranslationsEntityRouteProps = RouteComponentProps<{
id: string;
languageCode: string;
}>;
const TranslationsCategories: React.FC<TranslationsEntityRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: TranslationsCategoriesQueryParams = {
activeField: qs.activeField
};
return (
<TranslationsCategoriesComponent
id={decodeURIComponent(match.params.id)}
languageCode={LanguageCodeEnum[match.params.languageCode]}
params={params}
/>
);
};
const TranslationsCollections: React.FC<TranslationsEntityRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: TranslationsCollectionsQueryParams = {
activeField: qs.activeField
};
return (
<TranslationsCollectionsComponent
id={decodeURIComponent(match.params.id)}
languageCode={LanguageCodeEnum[match.params.languageCode]}
params={params}
/>
);
};
const TranslationsProducts: React.FC<TranslationsEntityRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: TranslationsProductsQueryParams = {
activeField: qs.activeField
};
return (
<TranslationsProductsComponent
id={decodeURIComponent(match.params.id)}
languageCode={LanguageCodeEnum[match.params.languageCode]}
params={params}
/>
);
};
const TranslationsSales: React.FC<TranslationsEntityRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: TranslationsSalesQueryParams = {
activeField: qs.activeField
};
return (
<TranslationsSaleComponent
id={decodeURIComponent(match.params.id)}
languageCode={LanguageCodeEnum[match.params.languageCode]}
params={params}
/>
);
};
const TranslationsVouchers: React.FC<TranslationsEntityRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: TranslationsVouchersQueryParams = {
activeField: qs.activeField
};
return (
<TranslationsVouchersComponent
id={decodeURIComponent(match.params.id)}
languageCode={LanguageCodeEnum[match.params.languageCode]}
params={params}
/>
);
};
const TranslationsPages: React.FC<TranslationsEntityRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: TranslationsPagesQueryParams = {
activeField: qs.activeField
};
return (
<TranslationsPagesComponent
id={decodeURIComponent(match.params.id)}
languageCode={LanguageCodeEnum[match.params.languageCode]}
params={params}
/>
);
};
const TranslationsProductTypes: React.FC<TranslationsEntityRouteProps> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: TranslationsProductTypesQueryParams = {
activeField: qs.activeField
};
return (
<TranslationsProductTypesComponent
id={decodeURIComponent(match.params.id)}
languageCode={LanguageCodeEnum[match.params.languageCode]}
params={params}
/>
);
};
const TranslationsRouter: React.FC = () => {
const intl = useIntl();
return (
<>
<WindowTitle title={intl.formatMessage(sectionNames.translations)} />
<Switch>
<Route
exact
path={languageListPath}
component={TranslationsLanguageList}
/>
<Route
exact
path={languageEntitiesPath(":languageCode")}
component={TranslationsEntities}
/>
<Route
exact
path={languageEntityPath(
":languageCode",
TranslatableEntities.products,
":id"
)}
component={TranslationsProducts}
/>
<Route
exact
path={languageEntityPath(
":languageCode",
TranslatableEntities.categories,
":id"
)}
component={TranslationsCategories}
/>
<Route
exact
path={languageEntityPath(
":languageCode",
TranslatableEntities.collections,
":id"
)}
component={TranslationsCollections}
/>
<Route
exact
path={languageEntityPath(
":languageCode",
TranslatableEntities.sales,
":id"
)}
component={TranslationsSales}
/>
<Route
exact
path={languageEntityPath(
":languageCode",
TranslatableEntities.vouchers,
":id"
)}
component={TranslationsVouchers}
/>
<Route
exact
path={languageEntityPath(
":languageCode",
TranslatableEntities.pages,
":id"
)}
component={TranslationsPages}
/>
<Route
exact
path={languageEntityPath(
":languageCode",
TranslatableEntities.productTypes,
":id"
)}
component={TranslationsProductTypes}
/>
</Switch>
</>
);
};
TranslationsRouter.displayName = "TranslationsRouter";
export default TranslationsRouter;