// @ts-strict-ignore import { extensionMountPoints, mapToMenuItems, useExtensions, } from "@dashboard/apps/hooks/useExtensions"; import { LimitsInfo } from "@dashboard/components/AppLayout/LimitsInfo"; import { ListFilters } from "@dashboard/components/AppLayout/ListFilters"; import { TopNav } from "@dashboard/components/AppLayout/TopNav"; import { ButtonWithSelect } from "@dashboard/components/ButtonWithSelect"; import CardMenu from "@dashboard/components/CardMenu"; import { useDevModeContext } from "@dashboard/components/DevModePanel/hooks"; import { FilterPresetsSelect } from "@dashboard/components/FilterPresetsSelect"; import { ListPageLayout } from "@dashboard/components/Layouts"; import { OrderListQuery, RefreshLimitsQuery } from "@dashboard/graphql"; import { sectionNames } from "@dashboard/intl"; import { orderMessages } from "@dashboard/orders/messages"; import { DevModeQuery } from "@dashboard/orders/queries"; import { OrderListUrlQueryParams, OrderListUrlSortField, orderUrl, } from "@dashboard/orders/urls"; import { getFilterVariables } from "@dashboard/orders/views/OrderList/filters"; import { FilterPageProps, PageListProps, RelayToFlat, SortPage, } from "@dashboard/types"; import { hasLimits, isLimitReached } from "@dashboard/utils/limits"; import { Card } from "@material-ui/core"; import { makeStyles } from "@saleor/macaw-ui"; import { Box, ChevronRightIcon } from "@saleor/macaw-ui/next"; import React, { useState } from "react"; import { FormattedMessage, useIntl } from "react-intl"; import OrderLimitReached from "../OrderLimitReached"; import { OrderListDatagrid } from "../OrderListDatagrid"; import { createFilterStructure, OrderFilterKeys, OrderListFilterOpts, } from "./filters"; export interface OrderListPageProps extends PageListProps, Omit, "onTabDelete">, SortPage { limits: RefreshLimitsQuery["shop"]["limits"]; orders: RelayToFlat; hasPresetsChanged: boolean; onSettingsOpen: () => void; onAdd: () => void; params: OrderListUrlQueryParams; onTabUpdate: (tabName: string) => void; onTabDelete: (tabIndex: number) => void; } const useStyles = makeStyles( theme => ({ settings: { marginRight: theme.spacing(2), }, }), { name: "OrderListPage" }, ); const OrderListPage: React.FC = ({ initialSearch, filterOpts, limits, onAdd, onSearchChange, onSettingsOpen, onFilterChange, params, onTabChange, onTabDelete, onTabSave, onTabUpdate, tabs, onAll, currentTab, hasPresetsChanged, ...listProps }) => { const intl = useIntl(); const classes = useStyles({}); const filterStructure = createFilterStructure(intl, filterOpts); const limitsReached = isLimitReached(limits, "orders"); const [isFilterPresetOpen, setFilterPresetOpen] = useState(false); const { ORDER_OVERVIEW_CREATE, ORDER_OVERVIEW_MORE_ACTIONS } = useExtensions( extensionMountPoints.ORDER_LIST, ); const extensionMenuItems = mapToMenuItems(ORDER_OVERVIEW_MORE_ACTIONS); const extensionCreateButtonItems = mapToMenuItems(ORDER_OVERVIEW_CREATE); const context = useDevModeContext(); const openPlaygroundURL = () => { context.setDevModeContent(DevModeQuery); const variables = JSON.stringify( { filter: getFilterVariables(params), // TODO add sorting: Issue #3409 // strange error when uncommenting this line // sortBy: getSortQueryVariables(params) }, null, 2, ); context.setVariables(variables); context.setDevModeVisibility(true); }; return ( {!!onSettingsOpen && ( )} {hasLimits(limits, "orders") && ( )} {limitsReached && } ); }; OrderListPage.displayName = "OrderListPage"; export default OrderListPage;