Merge pull request #849 from mirumee/SALEOR-1611-channel-choose-for-draft-orders
Create channel picker for draft order creation
This commit is contained in:
commit
acdec39489
8 changed files with 65 additions and 47 deletions
|
@ -1209,17 +1209,13 @@
|
||||||
"context": "channel currency",
|
"context": "channel currency",
|
||||||
"string": "Currency"
|
"string": "Currency"
|
||||||
},
|
},
|
||||||
"src_dot_channels_dot_components_dot_ChannelSettingsDialog_dot_1391686013": {
|
"src_dot_channels_dot_components_dot_ChannelPickerDialog_dot_2423186459": {
|
||||||
"context": "dialog header",
|
"context": "dialog header",
|
||||||
"string": "Settings"
|
"string": "Select a channel"
|
||||||
},
|
},
|
||||||
"src_dot_channels_dot_components_dot_ChannelSettingsDialog_dot_2721512922": {
|
"src_dot_channels_dot_components_dot_ChannelPickerDialog_dot_507892781": {
|
||||||
"context": "channel settings",
|
|
||||||
"string": "Configure the way information are presented in catalog section of Dashboard."
|
|
||||||
},
|
|
||||||
"src_dot_channels_dot_components_dot_ChannelSettingsDialog_dot_645871430": {
|
|
||||||
"context": "select label",
|
"context": "select label",
|
||||||
"string": "Show prices for"
|
"string": "Channel name"
|
||||||
},
|
},
|
||||||
"src_dot_channels_dot_components_dot_ChannelStatus_dot_1004218338": {
|
"src_dot_channels_dot_components_dot_ChannelStatus_dot_1004218338": {
|
||||||
"context": "inactive",
|
"context": "inactive",
|
||||||
|
|
|
@ -3,16 +3,16 @@ import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import { channelsList } from "../../fixtures";
|
import { channelsList } from "../../fixtures";
|
||||||
import ChannelSettingsDialog, {
|
import ChannelPickerDialog, {
|
||||||
ChannelSettingsDialogProps
|
ChannelPickerDialogProps
|
||||||
} from "./ChannelSettingsDialog";
|
} from "./ChannelPickerDialog";
|
||||||
|
|
||||||
const channelsChoices = channelsList.map(channel => ({
|
const channelsChoices = channelsList.map(channel => ({
|
||||||
label: channel.name,
|
label: channel.name,
|
||||||
value: channel.id
|
value: channel.id
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const props: ChannelSettingsDialogProps = {
|
const props: ChannelPickerDialogProps = {
|
||||||
channelsChoices,
|
channelsChoices,
|
||||||
confirmButtonState: "default",
|
confirmButtonState: "default",
|
||||||
defaultChoice: channelsChoices[0]?.value,
|
defaultChoice: channelsChoices[0]?.value,
|
||||||
|
@ -23,4 +23,4 @@ const props: ChannelSettingsDialogProps = {
|
||||||
|
|
||||||
storiesOf("Views / Channels / Settings dialog", module)
|
storiesOf("Views / Channels / Settings dialog", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
.add("default", () => <ChannelSettingsDialog {...props} />);
|
.add("default", () => <ChannelPickerDialog {...props} />);
|
|
@ -1,4 +1,3 @@
|
||||||
import Typography from "@material-ui/core/Typography";
|
|
||||||
import ActionDialog from "@saleor/components/ActionDialog";
|
import ActionDialog from "@saleor/components/ActionDialog";
|
||||||
import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton";
|
import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton";
|
||||||
import {
|
import {
|
||||||
|
@ -6,11 +5,11 @@ import {
|
||||||
SingleSelectField
|
SingleSelectField
|
||||||
} from "@saleor/components/SingleSelectField";
|
} from "@saleor/components/SingleSelectField";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { FormattedMessage, useIntl } from "react-intl";
|
import { useIntl } from "react-intl";
|
||||||
|
|
||||||
import { useStyles } from "../styles";
|
import { useStyles } from "../styles";
|
||||||
|
|
||||||
export interface ChannelSettingsDialogProps {
|
export interface ChannelPickerDialogProps {
|
||||||
channelsChoices: Choices;
|
channelsChoices: Choices;
|
||||||
confirmButtonState: ConfirmButtonTransitionState;
|
confirmButtonState: ConfirmButtonTransitionState;
|
||||||
defaultChoice: string;
|
defaultChoice: string;
|
||||||
|
@ -19,7 +18,7 @@ export interface ChannelSettingsDialogProps {
|
||||||
onConfirm: (choice: string) => void;
|
onConfirm: (choice: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ChannelSettingsDialog: React.FC<ChannelSettingsDialogProps> = ({
|
const ChannelPickerDialog: React.FC<ChannelPickerDialogProps> = ({
|
||||||
channelsChoices = [],
|
channelsChoices = [],
|
||||||
confirmButtonState,
|
confirmButtonState,
|
||||||
defaultChoice,
|
defaultChoice,
|
||||||
|
@ -40,23 +39,17 @@ const ChannelSettingsDialog: React.FC<ChannelSettingsDialogProps> = ({
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
onConfirm={() => onConfirm(choice)}
|
onConfirm={() => onConfirm(choice)}
|
||||||
title={intl.formatMessage({
|
title={intl.formatMessage({
|
||||||
defaultMessage: "Settings",
|
defaultMessage: "Select a channel",
|
||||||
description: "dialog header"
|
description: "dialog header"
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<Typography>
|
|
||||||
<FormattedMessage
|
|
||||||
defaultMessage="Configure the way information are presented in catalog section of Dashboard."
|
|
||||||
description="channel settings"
|
|
||||||
/>
|
|
||||||
</Typography>
|
|
||||||
<div className={classes.select}>
|
<div className={classes.select}>
|
||||||
<SingleSelectField
|
<SingleSelectField
|
||||||
choices={channelsChoices}
|
choices={channelsChoices}
|
||||||
name="channels"
|
name="channels"
|
||||||
label={intl.formatMessage({
|
label={intl.formatMessage({
|
||||||
defaultMessage: "Show prices for",
|
defaultMessage: "Channel name",
|
||||||
description: "select label"
|
description: "select label"
|
||||||
})}
|
})}
|
||||||
value={choice}
|
value={choice}
|
||||||
|
@ -67,5 +60,5 @@ const ChannelSettingsDialog: React.FC<ChannelSettingsDialogProps> = ({
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
ChannelSettingsDialog.displayName = "ChannelSettingsDialog";
|
ChannelPickerDialog.displayName = "ChannelPickerDialog";
|
||||||
export default ChannelSettingsDialog;
|
export default ChannelPickerDialog;
|
2
src/channels/components/ChannelPickerDialog/index.ts
Normal file
2
src/channels/components/ChannelPickerDialog/index.ts
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
export * from "./ChannelPickerDialog";
|
||||||
|
export { default } from "./ChannelPickerDialog";
|
|
@ -1,2 +0,0 @@
|
||||||
export * from "./ChannelSettingsDialog";
|
|
||||||
export { default } from "./ChannelSettingsDialog";
|
|
|
@ -15,6 +15,8 @@ import {
|
||||||
|
|
||||||
const orderSectionUrl = "/orders";
|
const orderSectionUrl = "/orders";
|
||||||
|
|
||||||
|
type CreateOrderDialog = "create-order";
|
||||||
|
|
||||||
export const orderListPath = orderSectionUrl;
|
export const orderListPath = orderSectionUrl;
|
||||||
export enum OrderListUrlFiltersEnum {
|
export enum OrderListUrlFiltersEnum {
|
||||||
createdFrom = "createdFrom",
|
createdFrom = "createdFrom",
|
||||||
|
@ -28,7 +30,7 @@ export enum OrderListUrlFiltersWithMultipleValuesEnum {
|
||||||
}
|
}
|
||||||
export type OrderListUrlFilters = Filters<OrderListUrlFiltersEnum> &
|
export type OrderListUrlFilters = Filters<OrderListUrlFiltersEnum> &
|
||||||
FiltersWithMultipleValues<OrderListUrlFiltersWithMultipleValuesEnum>;
|
FiltersWithMultipleValues<OrderListUrlFiltersWithMultipleValuesEnum>;
|
||||||
export type OrderListUrlDialog = "cancel" | TabActionDialog;
|
export type OrderListUrlDialog = "cancel" | CreateOrderDialog | TabActionDialog;
|
||||||
export enum OrderListUrlSortField {
|
export enum OrderListUrlSortField {
|
||||||
number = "number",
|
number = "number",
|
||||||
customer = "customer",
|
customer = "customer",
|
||||||
|
@ -61,7 +63,10 @@ export enum OrderDraftListUrlFiltersEnum {
|
||||||
query = "query"
|
query = "query"
|
||||||
}
|
}
|
||||||
export type OrderDraftListUrlFilters = Filters<OrderDraftListUrlFiltersEnum>;
|
export type OrderDraftListUrlFilters = Filters<OrderDraftListUrlFiltersEnum>;
|
||||||
export type OrderDraftListUrlDialog = "remove" | TabActionDialog;
|
export type OrderDraftListUrlDialog =
|
||||||
|
| "remove"
|
||||||
|
| CreateOrderDialog
|
||||||
|
| TabActionDialog;
|
||||||
export enum OrderDraftListUrlSortField {
|
export enum OrderDraftListUrlSortField {
|
||||||
number = "number",
|
number = "number",
|
||||||
customer = "customer",
|
customer = "customer",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import DialogContentText from "@material-ui/core/DialogContentText";
|
import DialogContentText from "@material-ui/core/DialogContentText";
|
||||||
import IconButton from "@material-ui/core/IconButton";
|
import IconButton from "@material-ui/core/IconButton";
|
||||||
import DeleteIcon from "@material-ui/icons/Delete";
|
import DeleteIcon from "@material-ui/icons/Delete";
|
||||||
|
import ChannelPickerDialog from "@saleor/channels/components/ChannelPickerDialog";
|
||||||
import ActionDialog from "@saleor/components/ActionDialog";
|
import ActionDialog from "@saleor/components/ActionDialog";
|
||||||
import useAppChannel from "@saleor/components/AppLayout/AppChannelContext";
|
import useAppChannel from "@saleor/components/AppLayout/AppChannelContext";
|
||||||
import DeleteFilterTabDialog from "@saleor/components/DeleteFilterTabDialog";
|
import DeleteFilterTabDialog from "@saleor/components/DeleteFilterTabDialog";
|
||||||
|
@ -79,7 +80,7 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
onCompleted: handleCreateOrderCreateSuccess
|
onCompleted: handleCreateOrderCreateSuccess
|
||||||
});
|
});
|
||||||
|
|
||||||
const { channel } = useAppChannel();
|
const { channel, availableChannels } = useAppChannel();
|
||||||
|
|
||||||
const tabs = getFilterTabs();
|
const tabs = getFilterTabs();
|
||||||
|
|
||||||
|
@ -196,13 +197,7 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
data.draftOrders.edges.map(edge => edge.node)
|
data.draftOrders.edges.map(edge => edge.node)
|
||||||
)}
|
)}
|
||||||
pageInfo={pageInfo}
|
pageInfo={pageInfo}
|
||||||
onAdd={() =>
|
onAdd={() => openModal("create-order")}
|
||||||
createOrder({
|
|
||||||
variables: {
|
|
||||||
input: { channel: channel.id }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
onNextPage={loadNextPage}
|
onNextPage={loadNextPage}
|
||||||
onPreviousPage={loadPreviousPage}
|
onPreviousPage={loadPreviousPage}
|
||||||
onRowClick={id => () => navigate(orderUrl(id))}
|
onRowClick={id => () => navigate(orderUrl(id))}
|
||||||
|
@ -263,6 +258,23 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
|
<ChannelPickerDialog
|
||||||
|
channelsChoices={availableChannels.map(channel => ({
|
||||||
|
label: channel.name,
|
||||||
|
value: channel.id
|
||||||
|
}))}
|
||||||
|
confirmButtonState="success"
|
||||||
|
defaultChoice={channel.id}
|
||||||
|
open={params.action === "create-order"}
|
||||||
|
onClose={closeModal}
|
||||||
|
onConfirm={channel =>
|
||||||
|
createOrder({
|
||||||
|
variables: {
|
||||||
|
input: { channel }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import ChannelPickerDialog from "@saleor/channels/components/ChannelPickerDialog";
|
||||||
import useAppChannel from "@saleor/components/AppLayout/AppChannelContext";
|
import useAppChannel from "@saleor/components/AppLayout/AppChannelContext";
|
||||||
import DeleteFilterTabDialog from "@saleor/components/DeleteFilterTabDialog";
|
import DeleteFilterTabDialog from "@saleor/components/DeleteFilterTabDialog";
|
||||||
import SaveFilterTabDialog, {
|
import SaveFilterTabDialog, {
|
||||||
|
@ -67,7 +68,7 @@ export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
||||||
onCompleted: handleCreateOrderCreateSuccess
|
onCompleted: handleCreateOrderCreateSuccess
|
||||||
});
|
});
|
||||||
|
|
||||||
const { channel } = useAppChannel();
|
const { channel, availableChannels } = useAppChannel();
|
||||||
|
|
||||||
const tabs = getFilterTabs();
|
const tabs = getFilterTabs();
|
||||||
|
|
||||||
|
@ -145,13 +146,7 @@ export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
||||||
orders={maybe(() => data.orders.edges.map(edge => edge.node))}
|
orders={maybe(() => data.orders.edges.map(edge => edge.node))}
|
||||||
pageInfo={pageInfo}
|
pageInfo={pageInfo}
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
onAdd={() =>
|
onAdd={() => openModal("create-order")}
|
||||||
createOrder({
|
|
||||||
variables: {
|
|
||||||
input: { channel: channel.id }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
onNextPage={loadNextPage}
|
onNextPage={loadNextPage}
|
||||||
onPreviousPage={loadPreviousPage}
|
onPreviousPage={loadPreviousPage}
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
|
@ -179,6 +174,23 @@ export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
||||||
onSubmit={handleFilterTabDelete}
|
onSubmit={handleFilterTabDelete}
|
||||||
tabName={getStringOrPlaceholder(tabs[currentTab - 1]?.name)}
|
tabName={getStringOrPlaceholder(tabs[currentTab - 1]?.name)}
|
||||||
/>
|
/>
|
||||||
|
<ChannelPickerDialog
|
||||||
|
channelsChoices={availableChannels.map(channel => ({
|
||||||
|
label: channel.name,
|
||||||
|
value: channel.id
|
||||||
|
}))}
|
||||||
|
confirmButtonState="success"
|
||||||
|
defaultChoice={channel.id}
|
||||||
|
open={params.action === "create-order"}
|
||||||
|
onClose={closeModal}
|
||||||
|
onConfirm={channel =>
|
||||||
|
createOrder({
|
||||||
|
variables: {
|
||||||
|
input: { channel }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue