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:
Jakub Majorek 2020-11-23 12:31:58 +01:00 committed by GitHub
commit acdec39489
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 65 additions and 47 deletions

View file

@ -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",

View file

@ -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} />);

View file

@ -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;

View file

@ -0,0 +1,2 @@
export * from "./ChannelPickerDialog";
export { default } from "./ChannelPickerDialog";

View file

@ -1,2 +0,0 @@
export * from "./ChannelSettingsDialog";
export { default } from "./ChannelSettingsDialog";

View file

@ -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",

View file

@ -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 }
}
})
}
/>
</> </>
); );
}} }}

View file

@ -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 }
}
})
}
/>
</> </>
); );
}; };