saleor-dashboard/src/products/index.tsx

127 lines
3.4 KiB
TypeScript
Raw Normal View History

2019-06-19 14:40:52 +00:00
import { parse as parseQs } from "qs";
2019-08-09 10:26:22 +00:00
import React from "react";
import { useIntl } from "react-intl";
2019-06-19 14:40:52 +00:00
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { sectionNames } from "@saleor/intl";
2019-09-13 14:17:12 +00:00
import { findInEnum, parseBoolean } from "@saleor/misc";
2019-06-19 14:40:52 +00:00
import { WindowTitle } from "../components/WindowTitle";
import {
productAddPath,
productImagePath,
ProductImageUrlQueryParams,
productListPath,
ProductListUrlQueryParams,
2019-09-13 14:17:12 +00:00
ProductListUrlSortField,
2019-06-19 14:40:52 +00:00
productPath,
ProductUrlQueryParams,
productVariantAddPath,
productVariantEditPath,
ProductVariantEditUrlQueryParams
} from "./urls";
import ProductCreate from "./views/ProductCreate";
import ProductImageComponent from "./views/ProductImage";
import ProductListComponent from "./views/ProductList";
import ProductUpdateComponent from "./views/ProductUpdate";
import ProductVariantComponent from "./views/ProductVariant";
import ProductVariantCreateComponent from "./views/ProductVariantCreate";
const ProductList: React.StatelessComponent<RouteComponentProps<any>> = ({
location
}) => {
const qs = parseQs(location.search.substr(1));
2019-09-13 11:33:42 +00:00
const params: ProductListUrlQueryParams = {
...qs,
2019-09-13 14:17:12 +00:00
asc: parseBoolean(qs.asc),
sort: qs.sort
? findInEnum(qs.sort, ProductListUrlSortField)
: ProductListUrlSortField.name
2019-09-13 11:33:42 +00:00
};
2019-06-19 14:40:52 +00:00
return <ProductListComponent params={params} />;
};
const ProductUpdate: React.StatelessComponent<RouteComponentProps<any>> = ({
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: ProductUrlQueryParams = qs;
return (
<ProductUpdateComponent
id={decodeURIComponent(match.params.id)}
params={params}
/>
);
};
const ProductVariant: React.StatelessComponent<RouteComponentProps<any>> = ({
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: ProductVariantEditUrlQueryParams = qs;
return (
<ProductVariantComponent
variantId={decodeURIComponent(match.params.variantId)}
productId={decodeURIComponent(match.params.productId)}
params={params}
/>
);
};
const ProductImage: React.StatelessComponent<RouteComponentProps<any>> = ({
location,
match
}) => {
const qs = parseQs(location.search.substr(1));
const params: ProductImageUrlQueryParams = qs;
return (
<ProductImageComponent
imageId={decodeURIComponent(match.params.imageId)}
productId={decodeURIComponent(match.params.productId)}
params={params}
/>
);
};
const ProductVariantCreate: React.StatelessComponent<
RouteComponentProps<any>
> = ({ match }) => {
return (
<ProductVariantCreateComponent
productId={decodeURIComponent(match.params.id)}
/>
);
};
const Component = () => {
const intl = useIntl();
return (
<>
<WindowTitle title={intl.formatMessage(sectionNames.products)} />
<Switch>
<Route exact path={productListPath} component={ProductList} />
<Route exact path={productAddPath} component={ProductCreate} />
<Route
exact
path={productVariantAddPath(":id")}
component={ProductVariantCreate}
/>
<Route
path={productVariantEditPath(":productId", ":variantId")}
component={ProductVariant}
/>
<Route
path={productImagePath(":productId", ":imageId")}
component={ProductImage}
/>
<Route path={productPath(":id")} component={ProductUpdate} />
</Switch>
</>
);
};
2019-06-19 14:40:52 +00:00
export default Component;