2021-05-14 08:15:15 +00:00
import { Button , Card } from "@material-ui/core" ;
2020-11-30 13:19:57 +00:00
import CardMenu from "@saleor/components/CardMenu" ;
2019-06-19 14:40:52 +00:00
import Container from "@saleor/components/Container" ;
2020-05-14 09:30:32 +00:00
import FilterBar from "@saleor/components/FilterBar" ;
2021-07-21 08:59:52 +00:00
import LimitReachedAlert from "@saleor/components/LimitReachedAlert" ;
2019-06-19 14:40:52 +00:00
import PageHeader from "@saleor/components/PageHeader" ;
2021-04-13 09:59:16 +00:00
import { RefreshLimits_shop_limits } from "@saleor/components/Shop/types/RefreshLimits" ;
2019-08-26 17:44:42 +00:00
import { sectionNames } from "@saleor/intl" ;
2021-07-21 08:59:52 +00:00
import { makeStyles } from "@saleor/macaw-ui" ;
2019-12-17 17:13:56 +00:00
import { OrderListUrlSortField } from "@saleor/orders/urls" ;
2020-05-14 09:30:32 +00:00
import { FilterPageProps , PageListProps , SortPage } from "@saleor/types" ;
2021-04-13 09:59:16 +00:00
import { isLimitReached } from "@saleor/utils/limits" ;
2020-05-14 09:30:32 +00:00
import React from "react" ;
import { FormattedMessage , useIntl } from "react-intl" ;
2019-06-19 14:40:52 +00:00
import { OrderList_orders_edges_node } from "../../types/OrderList" ;
import OrderList from "../OrderList" ;
2020-01-10 13:16:16 +00:00
import {
createFilterStructure ,
2020-05-14 09:30:32 +00:00
OrderFilterKeys ,
OrderListFilterOpts
2020-01-10 13:16:16 +00:00
} from "./filters" ;
2019-06-19 14:40:52 +00:00
export interface OrderListPageProps
extends PageListProps ,
2019-12-20 15:53:03 +00:00
FilterPageProps < OrderFilterKeys , OrderListFilterOpts > ,
2019-12-17 17:13:56 +00:00
SortPage < OrderListUrlSortField > {
2021-04-13 09:59:16 +00:00
limits : RefreshLimits_shop_limits ;
2019-06-19 14:40:52 +00:00
orders : OrderList_orders_edges_node [ ] ;
2020-11-30 13:19:57 +00:00
onSettingsOpen : ( ) = > void ;
2019-06-19 14:40:52 +00:00
}
2020-11-30 13:19:57 +00:00
const useStyles = makeStyles (
theme = > ( {
settings : {
marginRight : theme.spacing ( 2 )
}
} ) ,
{ name : "OrderListPage" }
) ;
2019-06-19 14:40:52 +00:00
const OrderListPage : React.FC < OrderListPageProps > = ( {
currentTab ,
initialSearch ,
2019-12-20 15:53:03 +00:00
filterOpts ,
2021-04-13 09:59:16 +00:00
limits ,
2019-09-10 15:14:11 +00:00
tabs ,
2019-06-19 14:40:52 +00:00
onAdd ,
onAll ,
onSearchChange ,
2020-11-30 13:19:57 +00:00
onSettingsOpen ,
2019-12-20 10:44:41 +00:00
onFilterChange ,
2019-06-19 14:40:52 +00:00
onTabChange ,
2019-09-10 15:39:33 +00:00
onTabDelete ,
onTabSave ,
2019-06-19 14:40:52 +00:00
. . . listProps
2019-08-26 17:44:42 +00:00
} ) = > {
const intl = useIntl ( ) ;
2020-11-30 13:19:57 +00:00
const classes = useStyles ( { } ) ;
2019-12-20 15:53:03 +00:00
const filterStructure = createFilterStructure ( intl , filterOpts ) ;
2019-12-20 10:44:41 +00:00
2019-08-26 17:44:42 +00:00
return (
< Container >
< PageHeader title = { intl . formatMessage ( sectionNames . orders ) } >
2020-11-30 13:19:57 +00:00
{ ! ! onSettingsOpen && (
< CardMenu
className = { classes . settings }
menuItems = { [
{
label : intl.formatMessage ( {
defaultMessage : "Order Settings" ,
description : "button"
} ) ,
onSelect : onSettingsOpen
}
] }
/ >
) }
2021-01-26 10:21:54 +00:00
< Button
color = "primary"
variant = "contained"
onClick = { onAdd }
data - test - id = "create-order-button"
>
2019-08-26 17:44:42 +00:00
< FormattedMessage
defaultMessage = "Create order"
description = "button"
/ >
< / Button >
< / PageHeader >
2021-07-21 08:59:52 +00:00
{ isLimitReached ( limits , "orders" ) && (
< LimitReachedAlert
title = { intl . formatMessage ( {
defaultMessage : "Order limit reached" ,
description : "alert"
} ) }
>
< FormattedMessage defaultMessage = "You have reached your order limit, you will be billed extra for orders above limit. If you would like to up your limit, contact your administration staff about raising your limits." / >
< / LimitReachedAlert >
) }
2019-08-26 17:44:42 +00:00
< Card >
2019-12-20 10:44:41 +00:00
< FilterBar
2019-08-26 17:44:42 +00:00
currentTab = { currentTab }
initialSearch = { initialSearch }
onAll = { onAll }
2019-12-20 10:44:41 +00:00
onFilterChange = { onFilterChange }
2019-08-26 17:44:42 +00:00
onSearchChange = { onSearchChange }
onTabChange = { onTabChange }
2019-09-10 15:39:33 +00:00
onTabDelete = { onTabDelete }
onTabSave = { onTabSave }
2019-12-20 10:44:41 +00:00
tabs = { tabs }
allTabLabel = { intl . formatMessage ( {
2019-12-20 16:31:26 +00:00
defaultMessage : "All Orders" ,
2019-12-20 10:44:41 +00:00
description : "tab name"
} ) }
filterStructure = { filterStructure }
searchPlaceholder = { intl . formatMessage ( {
2019-12-20 16:31:26 +00:00
defaultMessage : "Search Orders..."
2019-12-20 10:44:41 +00:00
} ) }
2019-08-26 17:44:42 +00:00
/ >
< OrderList { ...listProps } / >
< / Card >
< / Container >
) ;
} ;
2019-06-19 14:40:52 +00:00
OrderListPage . displayName = "OrderListPage" ;
export default OrderListPage ;