Handle order extension mount points (#2055)

* Handle order extension mount points

* Add missing onClick to ButtonWithSelect component

* Update snapshots

* Fix ButtonWithSelect styles
This commit is contained in:
Jakub Majorek 2022-05-23 11:24:20 +02:00 committed by GitHub
parent 707c6b94a7
commit 0d4fecf8cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 3574 additions and 186 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -25,6 +25,11 @@ export const extensionMountPoints = {
AppExtensionMountEnum.PRODUCT_OVERVIEW_CREATE,
AppExtensionMountEnum.PRODUCT_OVERVIEW_MORE_ACTIONS
],
ORDER_LIST: [
AppExtensionMountEnum.ORDER_OVERVIEW_CREATE,
AppExtensionMountEnum.ORDER_OVERVIEW_MORE_ACTIONS
],
ORDER_DETAILS: [AppExtensionMountEnum.ORDER_DETAILS_MORE_ACTIONS],
PRODUCT_DETAILS: [AppExtensionMountEnum.PRODUCT_DETAILS_MORE_ACTIONS],
NAVIGATION_SIDEBAR: [
AppExtensionMountEnum.NAVIGATION_CATALOG,

View file

@ -1,6 +1,7 @@
import {
ButtonGroup,
ButtonGroupProps,
ButtonProps,
ClickAwayListener,
Grow,
MenuItem,
@ -21,15 +22,17 @@ interface Option {
}
export interface ButtonWithSelectProps
extends Omit<ButtonGroupProps, "onClick"> {
extends Omit<ButtonGroupProps, "onClick">,
Pick<ButtonProps, "onClick"> {
options: Option[];
href: string;
href?: string;
}
export const ButtonWithSelect: React.FC<ButtonWithSelectProps> = ({
options,
children,
href,
onClick,
...props
}) => {
const [open, setOpen] = React.useState(false);
@ -61,20 +64,20 @@ export const ButtonWithSelect: React.FC<ButtonWithSelectProps> = ({
return (
<>
<ButtonGroup
variant="contained"
<ButtonGroup ref={anchorRef} aria-label="button with select" {...props}>
<Button
variant="primary"
color="primary"
ref={anchorRef}
aria-label="button with select"
{...props}
onClick={onClick}
href={href}
style={{ width: "100%" }}
>
<Button variant="primary" href={href} style={{ width: "100%" }}>
{children}
</Button>
{options.length > 0 && (
<Button
variant="primary"
color="primary"
size="small"
aria-controls={open ? "button-with-select-menu" : undefined}
aria-expanded={open ? "true" : undefined}
aria-label="select different option"

View file

@ -23,6 +23,12 @@
"GiftCardUpdated",
"GiftCardDeleted",
"GiftCardStatusChanged",
"MenuCreated",
"MenuUpdated",
"MenuDeleted",
"MenuItemCreated",
"MenuItemUpdated",
"MenuItemDeleted",
"OrderCreated",
"OrderUpdated",
"OrderConfirmed",
@ -64,8 +70,12 @@
"ShippingZoneCreated",
"ShippingZoneUpdated",
"ShippingZoneDeleted",
"TransactionActionRequest",
"TranslationCreated",
"TranslationUpdated"
"TranslationUpdated",
"VoucherCreated",
"VoucherUpdated",
"VoucherDeleted"
],
"Job": [
"AppInstallation",
@ -147,6 +157,8 @@
"StaffNotificationRecipient",
"Stock",
"Transaction",
"TransactionEvent",
"TransactionItem",
"User",
"Voucher",
"VoucherChannelListing",
@ -178,6 +190,7 @@
"ShippingMethod",
"ShippingMethodType",
"ShippingZone",
"TransactionItem",
"User",
"Voucher",
"Warehouse"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,9 @@
import { Typography } from "@material-ui/core";
import {
extensionMountPoints,
mapToMenuItems,
useExtensions
} from "@saleor/apps/useExtensions";
import { Backlink } from "@saleor/components/Backlink";
import CardMenu from "@saleor/components/CardMenu";
import { CardSpacer } from "@saleor/components/CardSpacer";
@ -216,6 +221,12 @@ const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
}
]);
const { ORDER_DETAILS_MORE_ACTIONS } = useExtensions(
extensionMountPoints.ORDER_DETAILS
);
const extensionMenuItems = mapToMenuItems(ORDER_DETAILS_MORE_ACTIONS);
return (
<Form confirmLeave initial={initial} onSubmit={handleSubmit}>
{({ change, data, submit }) => {
@ -230,7 +241,12 @@ const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
className={classes.header}
inline
title={<Title order={order} />}
cardMenu={<CardMenu outlined menuItems={selectCardMenuItems} />}
cardMenu={
<CardMenu
outlined
menuItems={[...selectCardMenuItems, ...extensionMenuItems]}
/>
}
/>
<div className={classes.date}>
{order && order.created ? (

View file

@ -1,5 +1,10 @@
import { Card } from "@material-ui/core";
import { Button } from "@saleor/components/Button";
import {
extensionMountPoints,
mapToMenuItems,
useExtensions
} from "@saleor/apps/useExtensions";
import { ButtonWithSelect } from "@saleor/components/ButtonWithSelect";
import CardMenu from "@saleor/components/CardMenu";
import Container from "@saleor/components/Container";
import FilterBar from "@saleor/components/FilterBar";
@ -66,6 +71,12 @@ const OrderListPage: React.FC<OrderListPageProps> = ({
const filterStructure = createFilterStructure(intl, filterOpts);
const limitsReached = isLimitReached(limits, "orders");
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);
return (
<Container>
<PageHeader
@ -96,24 +107,25 @@ const OrderListPage: React.FC<OrderListPageProps> = ({
description: "button"
}),
onSelect: onSettingsOpen
}
},
...extensionMenuItems
]}
/>
)
}
>
<Button
<ButtonWithSelect
disabled={limitsReached}
variant="primary"
onClick={onAdd}
options={extensionCreateButtonItems}
data-test-id="create-order-button"
onClick={onAdd}
>
<FormattedMessage
id="LshEVn"
defaultMessage="Create order"
description="button"
/>
</Button>
</ButtonWithSelect>
</PageHeader>
{limitsReached && <OrderLimitReached />}
<Card>

View file

@ -141228,9 +141228,15 @@ exports[`Storyshots Views / Orders / Order list default 1`] = `
>
230/500 orders
</div>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButton-containedPrimary-id"
<div
aria-label="button with select"
class="MuiButtonGroup-root-id"
data-test-id="create-order-button"
role="group"
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
style="width:100%"
tabindex="0"
type="button"
>
@ -141243,6 +141249,7 @@ exports[`Storyshots Views / Orders / Order list default 1`] = `
</div>
</div>
</div>
</div>
<div
class="MuiPaper-root-id MuiCard-root-id MuiPaper-elevation0-id MuiPaper-rounded-id"
>
@ -142909,10 +142916,16 @@ exports[`Storyshots Views / Orders / Order list limits reached 1`] = `
>
500/500 orders
</div>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButton-containedPrimary-id MuiButton-disabled-id MuiButtonBase-disabled-id"
<div
aria-label="button with select"
class="MuiButtonGroup-root-id"
data-test-id="create-order-button"
role="group"
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-disabled-id MuiButton-containedPrimary-id MuiButton-disabled-id MuiButtonBase-disabled-id"
disabled=""
style="width:100%"
tabindex="-1"
type="button"
>
@ -142925,6 +142938,7 @@ exports[`Storyshots Views / Orders / Order list limits reached 1`] = `
</div>
</div>
</div>
</div>
<div
class="MuiPaper-root-id MuiCard-root-id LimitReachedAlert-root-id Alert-root-id Alert-warning-id MuiPaper-elevation0-id MuiPaper-rounded-id"
data-test="alert"
@ -144670,9 +144684,15 @@ exports[`Storyshots Views / Orders / Order list loading 1`] = `
>
230/500 orders
</div>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButton-containedPrimary-id"
<div
aria-label="button with select"
class="MuiButtonGroup-root-id"
data-test-id="create-order-button"
role="group"
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
style="width:100%"
tabindex="0"
type="button"
>
@ -144685,6 +144705,7 @@ exports[`Storyshots Views / Orders / Order list loading 1`] = `
</div>
</div>
</div>
</div>
<div
class="MuiPaper-root-id MuiCard-root-id MuiPaper-elevation0-id MuiPaper-rounded-id"
>
@ -145103,9 +145124,15 @@ exports[`Storyshots Views / Orders / Order list no limits 1`] = `
<div
class="PageHeader-root-id"
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButton-containedPrimary-id"
<div
aria-label="button with select"
class="MuiButtonGroup-root-id"
data-test-id="create-order-button"
role="group"
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
style="width:100%"
tabindex="0"
type="button"
>
@ -145118,6 +145145,7 @@ exports[`Storyshots Views / Orders / Order list no limits 1`] = `
</div>
</div>
</div>
</div>
<div
class="MuiPaper-root-id MuiCard-root-id MuiPaper-elevation0-id MuiPaper-rounded-id"
>
@ -146784,9 +146812,15 @@ exports[`Storyshots Views / Orders / Order list when no data 1`] = `
>
230/500 orders
</div>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButton-containedPrimary-id"
<div
aria-label="button with select"
class="MuiButtonGroup-root-id"
data-test-id="create-order-button"
role="group"
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
style="width:100%"
tabindex="0"
type="button"
>
@ -146799,6 +146833,7 @@ exports[`Storyshots Views / Orders / Order list when no data 1`] = `
</div>
</div>
</div>
</div>
<div
class="MuiPaper-root-id MuiCard-root-id MuiPaper-elevation0-id MuiPaper-rounded-id"
>
@ -209853,13 +209888,13 @@ exports[`Storyshots Views / Products / Product list default 1`] = `
</div>
<div
aria-label="button with select"
class="MuiButtonGroup-root-id MuiButtonGroup-contained-id"
class="MuiButtonGroup-root-id"
data-test-id="add-product"
role="group"
>
<a
aria-disabled="false"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedContained-id MuiButtonGroup-groupedContainedHorizontal-id MuiButtonGroup-groupedContainedPrimary-id MuiButton-containedPrimary-id"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
href="/products/add"
role="button"
style="width:100%"
@ -212468,13 +212503,13 @@ exports[`Storyshots Views / Products / Product list limits reached 1`] = `
</div>
<div
aria-label="button with select"
class="MuiButtonGroup-root-id MuiButtonGroup-contained-id"
class="MuiButtonGroup-root-id"
data-test-id="add-product"
role="group"
>
<a
aria-disabled="true"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedContained-id MuiButtonGroup-groupedContainedHorizontal-id MuiButtonGroup-groupedContainedPrimary-id MuiButtonGroup-disabled-id MuiButton-containedPrimary-id MuiButton-disabled-id MuiButtonBase-disabled-id"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-disabled-id MuiButton-containedPrimary-id MuiButton-disabled-id MuiButtonBase-disabled-id"
href="/products/add"
role="button"
style="width:100%"
@ -215162,13 +215197,13 @@ exports[`Storyshots Views / Products / Product list loading 1`] = `
</div>
<div
aria-label="button with select"
class="MuiButtonGroup-root-id MuiButtonGroup-contained-id"
class="MuiButtonGroup-root-id"
data-test-id="add-product"
role="group"
>
<a
aria-disabled="false"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedContained-id MuiButtonGroup-groupedContainedHorizontal-id MuiButtonGroup-groupedContainedPrimary-id MuiButton-containedPrimary-id"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
href="/products/add"
role="button"
style="width:100%"
@ -215725,13 +215760,13 @@ exports[`Storyshots Views / Products / Product list no channels 1`] = `
</div>
<div
aria-label="button with select"
class="MuiButtonGroup-root-id MuiButtonGroup-contained-id"
class="MuiButtonGroup-root-id"
data-test-id="add-product"
role="group"
>
<a
aria-disabled="false"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedContained-id MuiButtonGroup-groupedContainedHorizontal-id MuiButtonGroup-groupedContainedPrimary-id MuiButton-containedPrimary-id"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
href="/products/add"
role="button"
style="width:100%"
@ -218340,13 +218375,13 @@ exports[`Storyshots Views / Products / Product list no data 1`] = `
</div>
<div
aria-label="button with select"
class="MuiButtonGroup-root-id MuiButtonGroup-contained-id"
class="MuiButtonGroup-root-id"
data-test-id="add-product"
role="group"
>
<a
aria-disabled="false"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedContained-id MuiButtonGroup-groupedContainedHorizontal-id MuiButtonGroup-groupedContainedPrimary-id MuiButton-containedPrimary-id"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
href="/products/add"
role="button"
style="width:100%"
@ -218741,13 +218776,13 @@ exports[`Storyshots Views / Products / Product list no limits 1`] = `
</div>
<div
aria-label="button with select"
class="MuiButtonGroup-root-id MuiButtonGroup-contained-id"
class="MuiButtonGroup-root-id"
data-test-id="add-product"
role="group"
>
<a
aria-disabled="false"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedContained-id MuiButtonGroup-groupedContainedHorizontal-id MuiButtonGroup-groupedContainedPrimary-id MuiButton-containedPrimary-id"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
href="/products/add"
role="button"
style="width:100%"
@ -221356,13 +221391,13 @@ exports[`Storyshots Views / Products / Product list with data 1`] = `
</div>
<div
aria-label="button with select"
class="MuiButtonGroup-root-id MuiButtonGroup-contained-id"
class="MuiButtonGroup-root-id"
data-test-id="add-product"
role="group"
>
<a
aria-disabled="false"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedContained-id MuiButtonGroup-groupedContainedHorizontal-id MuiButtonGroup-groupedContainedPrimary-id MuiButton-containedPrimary-id"
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-contained-id MuiButtonGroup-grouped-id MuiButtonGroup-groupedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButtonGroup-groupedOutlinedHorizontal-id MuiButtonGroup-groupedOutlined-id MuiButton-containedPrimary-id"
href="/products/add"
role="button"
style="width:100%"