Merge pull request #688 from mirumee/metadata/orders

Add metadata to orders
This commit is contained in:
Dominik Żegleń 2020-09-04 13:12:06 +02:00 committed by GitHub
commit f2a309ea0a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 19236 additions and 15135 deletions

View file

@ -34,6 +34,7 @@ All notable, unreleased changes to this project will be documented in this file.
- Add metadata editor to creator views - #684 by @dominik-zeglen
- Update product visibility card component - #679 by @AlicjaSzu
- Update savebar design - #690 by @dominik-zeglen
- Add metadata to orders - #688 by @dominik-zeglen
## 2.10.1

View file

@ -1,6 +1,7 @@
import gql from "graphql-tag";
import { fragmentAddress } from "./address";
import { metadataFragment } from "./metadata";
export const fragmentOrderEvent = gql`
fragment OrderEventFragment on OrderEvent {
@ -87,8 +88,10 @@ export const fragmentOrderDetails = gql`
${fragmentOrderLine}
${fulfillmentFragment}
${invoiceFragment}
${metadataFragment}
fragment OrderDetailsFragment on Order {
id
...MetadataFragment
billingAddress {
...AddressFragment
}

View file

@ -8,6 +8,18 @@ import { OrderEventsEmailsEnum, OrderEventsEnum, FulfillmentStatus, PaymentCharg
// GraphQL fragment: OrderDetailsFragment
// ====================================================
export interface OrderDetailsFragment_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDetailsFragment_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDetailsFragment_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -285,6 +297,8 @@ export interface OrderDetailsFragment_invoices {
export interface OrderDetailsFragment {
__typename: "Order";
id: string;
metadata: (OrderDetailsFragment_metadata | null)[];
privateMetadata: (OrderDetailsFragment_privateMetadata | null)[];
billingAddress: OrderDetailsFragment_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -235,7 +235,7 @@ export function hasErrors(errorList: UserError[] | null): boolean {
export function getMutationState(
called: boolean,
loading: boolean,
...errorList: UserError[][]
...errorList: any[][]
): ConfirmButtonTransitionState {
if (loading) {
return "loading";

View file

@ -3,13 +3,19 @@ import Typography from "@material-ui/core/Typography";
import AppHeader from "@saleor/components/AppHeader";
import CardMenu from "@saleor/components/CardMenu";
import { CardSpacer } from "@saleor/components/CardSpacer";
import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton";
import { Container } from "@saleor/components/Container";
import { DateTime } from "@saleor/components/Date";
import Form from "@saleor/components/Form";
import Grid from "@saleor/components/Grid";
import Metadata, { MetadataFormData } from "@saleor/components/Metadata";
import PageHeader from "@saleor/components/PageHeader";
import SaveButtonBar from "@saleor/components/SaveButtonBar";
import Skeleton from "@saleor/components/Skeleton";
import { sectionNames } from "@saleor/intl";
import { UserPermissionProps } from "@saleor/types";
import { mapMetadataItemToInput } from "@saleor/utils/maps";
import useMetadataChangeTrigger from "@saleor/utils/metadata/useMetadataChangeTrigger";
import React from "react";
import { useIntl } from "react-intl";
@ -49,6 +55,8 @@ export interface OrderDetailsPageProps extends UserPermissionProps {
code: string;
label: string;
}>;
disabled: boolean;
saveButtonBarState: ConfirmButtonTransitionState;
onBack();
onBillingAddressEdit();
onFulfillmentCancel(id: string);
@ -66,11 +74,14 @@ export interface OrderDetailsPageProps extends UserPermissionProps {
onInvoiceClick(invoiceId: string);
onInvoiceGenerate();
onInvoiceSend(invoiceId: string);
onSubmit(data: MetadataFormData);
}
const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
const {
disabled,
order,
saveButtonBarState,
userPermissions,
onBack,
onBillingAddressEdit,
@ -87,11 +98,17 @@ const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
onProfileView,
onInvoiceClick,
onInvoiceGenerate,
onInvoiceSend
onInvoiceSend,
onSubmit
} = props;
const classes = useStyles(props);
const intl = useIntl();
const {
isMetadataModified,
isPrivateMetadataModified,
makeChangeHandler: makeMetadataChangeHandler
} = useMetadataChangeTrigger();
const canCancel = maybe(() => order.status) !== OrderStatus.CANCELED;
const canEditAddresses = maybe(() => order.status) !== OrderStatus.CANCELED;
@ -100,6 +117,28 @@ const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
line => line.quantityFulfilled < line.quantity
);
const handleSubmit = (data: MetadataFormData) => {
const metadata = isMetadataModified ? data.metadata : undefined;
const privateMetadata = isPrivateMetadataModified
? data.privateMetadata
: undefined;
onSubmit({
metadata,
privateMetadata
});
};
const initial: MetadataFormData = {
metadata: order?.metadata.map(mapMetadataItemToInput),
privateMetadata: order?.privateMetadata.map(mapMetadataItemToInput)
};
return (
<Form initial={initial} onSubmit={handleSubmit}>
{({ change, data, hasChanged, submit }) => {
const changeMetadata = makeMetadataChangeHandler(change);
return (
<Container>
<AppHeader onBack={onBack}>
@ -145,10 +184,12 @@ const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
{renderCollection(
maybe(() => order.fulfillments),
(fulfillment, fulfillmentIndex) => (
<React.Fragment key={maybe(() => fulfillment.id, "loading")}>
{!(unfulfilled.length === 0 && fulfillmentIndex === 0) && (
<CardSpacer />
)}
<React.Fragment
key={maybe(() => fulfillment.id, "loading")}
>
{!(
unfulfilled.length === 0 && fulfillmentIndex === 0
) && <CardSpacer />}
<OrderFulfillment
fulfillment={fulfillment}
orderNumber={maybe(() => order.number)}
@ -170,6 +211,8 @@ const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
onRefund={onPaymentRefund}
onVoid={onPaymentVoid}
/>
<CardSpacer />
<Metadata data={data} onChange={changeMetadata} />
<OrderHistory
history={maybe(() => order.events)}
onNoteAdd={onNoteAdd}
@ -196,8 +239,17 @@ const OrderDetailsPage: React.FC<OrderDetailsPageProps> = props => {
<OrderCustomerNote note={maybe(() => order.customerNote)} />
</div>
</Grid>
<SaveButtonBar
onCancel={onBack}
onSave={submit}
state={saveButtonBarState}
disabled={disabled || !hasChanged}
/>
</Container>
);
}}
</Form>
);
};
OrderDetailsPage.displayName = "OrderDetailsPage";
export default OrderDetailsPage;

View file

@ -1096,8 +1096,16 @@ export const order = (placeholder: string): OrderDetails_order => ({
}
}
],
metadata: [
{
__typename: "MetadataItem",
key: "integration.key",
value: "some-value"
}
],
number: "9",
paymentStatus: PaymentChargeStatusEnum.NOT_CHARGED,
privateMetadata: [],
shippingAddress: {
__typename: "Address",
city: "West Patriciastad",
@ -1256,8 +1264,10 @@ export const draftOrder = (placeholder: string): OrderDetails_order => ({
}
}
],
metadata: [],
number: "24",
paymentStatus: null,
privateMetadata: [],
shippingAddress: null,
shippingMethod: null,
shippingMethodName: null,

View file

@ -16,6 +16,18 @@ export interface FulfillOrder_orderFulfill_errors {
orderLine: string | null;
}
export interface FulfillOrder_orderFulfill_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface FulfillOrder_orderFulfill_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface FulfillOrder_orderFulfill_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -293,6 +305,8 @@ export interface FulfillOrder_orderFulfill_order_invoices {
export interface FulfillOrder_orderFulfill_order {
__typename: "Order";
id: string;
metadata: (FulfillOrder_orderFulfill_order_metadata | null)[];
privateMetadata: (FulfillOrder_orderFulfill_order_privateMetadata | null)[];
billingAddress: FulfillOrder_orderFulfill_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderCancel_orderCancel_errors {
field: string | null;
}
export interface OrderCancel_orderCancel_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderCancel_orderCancel_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderCancel_orderCancel_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderCancel_orderCancel_order_invoices {
export interface OrderCancel_orderCancel_order {
__typename: "Order";
id: string;
metadata: (OrderCancel_orderCancel_order_metadata | null)[];
privateMetadata: (OrderCancel_orderCancel_order_privateMetadata | null)[];
billingAddress: OrderCancel_orderCancel_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderCapture_orderCapture_errors {
field: string | null;
}
export interface OrderCapture_orderCapture_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderCapture_orderCapture_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderCapture_orderCapture_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderCapture_orderCapture_order_invoices {
export interface OrderCapture_orderCapture_order {
__typename: "Order";
id: string;
metadata: (OrderCapture_orderCapture_order_metadata | null)[];
privateMetadata: (OrderCapture_orderCapture_order_privateMetadata | null)[];
billingAddress: OrderCapture_orderCapture_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -8,6 +8,18 @@ import { OrderEventsEmailsEnum, OrderEventsEnum, FulfillmentStatus, PaymentCharg
// GraphQL query operation: OrderDetails
// ====================================================
export interface OrderDetails_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDetails_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDetails_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -285,6 +297,8 @@ export interface OrderDetails_order_invoices {
export interface OrderDetails_order {
__typename: "Order";
id: string;
metadata: (OrderDetails_order_metadata | null)[];
privateMetadata: (OrderDetails_order_privateMetadata | null)[];
billingAddress: OrderDetails_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderDraftCancel_draftOrderDelete_errors {
field: string | null;
}
export interface OrderDraftCancel_draftOrderDelete_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDraftCancel_draftOrderDelete_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDraftCancel_draftOrderDelete_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderDraftCancel_draftOrderDelete_order_invoices {
export interface OrderDraftCancel_draftOrderDelete_order {
__typename: "Order";
id: string;
metadata: (OrderDraftCancel_draftOrderDelete_order_metadata | null)[];
privateMetadata: (OrderDraftCancel_draftOrderDelete_order_privateMetadata | null)[];
billingAddress: OrderDraftCancel_draftOrderDelete_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderDraftFinalize_draftOrderComplete_errors {
field: string | null;
}
export interface OrderDraftFinalize_draftOrderComplete_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDraftFinalize_draftOrderComplete_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDraftFinalize_draftOrderComplete_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderDraftFinalize_draftOrderComplete_order_invoices {
export interface OrderDraftFinalize_draftOrderComplete_order {
__typename: "Order";
id: string;
metadata: (OrderDraftFinalize_draftOrderComplete_order_metadata | null)[];
privateMetadata: (OrderDraftFinalize_draftOrderComplete_order_privateMetadata | null)[];
billingAddress: OrderDraftFinalize_draftOrderComplete_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderDraftUpdate_draftOrderUpdate_errors {
field: string | null;
}
export interface OrderDraftUpdate_draftOrderUpdate_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDraftUpdate_draftOrderUpdate_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderDraftUpdate_draftOrderUpdate_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderDraftUpdate_draftOrderUpdate_order_invoices {
export interface OrderDraftUpdate_draftOrderUpdate_order {
__typename: "Order";
id: string;
metadata: (OrderDraftUpdate_draftOrderUpdate_order_metadata | null)[];
privateMetadata: (OrderDraftUpdate_draftOrderUpdate_order_privateMetadata | null)[];
billingAddress: OrderDraftUpdate_draftOrderUpdate_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderFulfillmentCancel_orderFulfillmentCancel_errors {
field: string | null;
}
export interface OrderFulfillmentCancel_orderFulfillmentCancel_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderFulfillmentCancel_orderFulfillmentCancel_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderFulfillmentCancel_orderFulfillmentCancel_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderFulfillmentCancel_orderFulfillmentCancel_order_invoices {
export interface OrderFulfillmentCancel_orderFulfillmentCancel_order {
__typename: "Order";
id: string;
metadata: (OrderFulfillmentCancel_orderFulfillmentCancel_order_metadata | null)[];
privateMetadata: (OrderFulfillmentCancel_orderFulfillmentCancel_order_privateMetadata | null)[];
billingAddress: OrderFulfillmentCancel_orderFulfillmentCancel_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_e
field: string | null;
}
export interface OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_o
export interface OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_order {
__typename: "Order";
id: string;
metadata: (OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_order_metadata | null)[];
privateMetadata: (OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_order_privateMetadata | null)[];
billingAddress: OrderFulfillmentUpdateTracking_orderFulfillmentUpdateTracking_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderLineDelete_draftOrderLineDelete_errors {
field: string | null;
}
export interface OrderLineDelete_draftOrderLineDelete_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderLineDelete_draftOrderLineDelete_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderLineDelete_draftOrderLineDelete_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderLineDelete_draftOrderLineDelete_order_invoices {
export interface OrderLineDelete_draftOrderLineDelete_order {
__typename: "Order";
id: string;
metadata: (OrderLineDelete_draftOrderLineDelete_order_metadata | null)[];
privateMetadata: (OrderLineDelete_draftOrderLineDelete_order_privateMetadata | null)[];
billingAddress: OrderLineDelete_draftOrderLineDelete_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderLineUpdate_draftOrderLineUpdate_errors {
field: string | null;
}
export interface OrderLineUpdate_draftOrderLineUpdate_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderLineUpdate_draftOrderLineUpdate_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderLineUpdate_draftOrderLineUpdate_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderLineUpdate_draftOrderLineUpdate_order_invoices {
export interface OrderLineUpdate_draftOrderLineUpdate_order {
__typename: "Order";
id: string;
metadata: (OrderLineUpdate_draftOrderLineUpdate_order_metadata | null)[];
privateMetadata: (OrderLineUpdate_draftOrderLineUpdate_order_privateMetadata | null)[];
billingAddress: OrderLineUpdate_draftOrderLineUpdate_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderLinesAdd_draftOrderLinesCreate_errors {
field: string | null;
}
export interface OrderLinesAdd_draftOrderLinesCreate_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderLinesAdd_draftOrderLinesCreate_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderLinesAdd_draftOrderLinesCreate_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderLinesAdd_draftOrderLinesCreate_order_invoices {
export interface OrderLinesAdd_draftOrderLinesCreate_order {
__typename: "Order";
id: string;
metadata: (OrderLinesAdd_draftOrderLinesCreate_order_metadata | null)[];
privateMetadata: (OrderLinesAdd_draftOrderLinesCreate_order_privateMetadata | null)[];
billingAddress: OrderLinesAdd_draftOrderLinesCreate_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderMarkAsPaid_orderMarkAsPaid_errors {
field: string | null;
}
export interface OrderMarkAsPaid_orderMarkAsPaid_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderMarkAsPaid_orderMarkAsPaid_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderMarkAsPaid_orderMarkAsPaid_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderMarkAsPaid_orderMarkAsPaid_order_invoices {
export interface OrderMarkAsPaid_orderMarkAsPaid_order {
__typename: "Order";
id: string;
metadata: (OrderMarkAsPaid_orderMarkAsPaid_order_metadata | null)[];
privateMetadata: (OrderMarkAsPaid_orderMarkAsPaid_order_privateMetadata | null)[];
billingAddress: OrderMarkAsPaid_orderMarkAsPaid_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderRefund_orderRefund_errors {
field: string | null;
}
export interface OrderRefund_orderRefund_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderRefund_orderRefund_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderRefund_orderRefund_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderRefund_orderRefund_order_invoices {
export interface OrderRefund_orderRefund_order {
__typename: "Order";
id: string;
metadata: (OrderRefund_orderRefund_order_metadata | null)[];
privateMetadata: (OrderRefund_orderRefund_order_privateMetadata | null)[];
billingAddress: OrderRefund_orderRefund_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -14,6 +14,18 @@ export interface OrderVoid_orderVoid_errors {
field: string | null;
}
export interface OrderVoid_orderVoid_order_metadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderVoid_orderVoid_order_privateMetadata {
__typename: "MetadataItem";
key: string;
value: string;
}
export interface OrderVoid_orderVoid_order_billingAddress_country {
__typename: "CountryDisplay";
code: string;
@ -291,6 +303,8 @@ export interface OrderVoid_orderVoid_order_invoices {
export interface OrderVoid_orderVoid_order {
__typename: "Order";
id: string;
metadata: (OrderVoid_orderVoid_order_metadata | null)[];
privateMetadata: (OrderVoid_orderVoid_order_privateMetadata | null)[];
billingAddress: OrderVoid_orderVoid_order_billingAddress | null;
canFinalize: boolean;
created: any;

View file

@ -1,21 +1,30 @@
import { MetadataFormData } from "@saleor/components/Metadata";
import NotFoundPage from "@saleor/components/NotFoundPage";
import { WindowTitle } from "@saleor/components/WindowTitle";
import { DEFAULT_INITIAL_SEARCH_DATA } from "@saleor/config";
import { Task } from "@saleor/containers/BackgroundTasks/types";
import useBackgroundTask from "@saleor/hooks/useBackgroundTask";
import useNavigator from "@saleor/hooks/useNavigator";
import useNotifier from "@saleor/hooks/useNotifier";
import useUser from "@saleor/hooks/useUser";
import { commonMessages } from "@saleor/intl";
import OrderCannotCancelOrderDialog from "@saleor/orders/components/OrderCannotCancelOrderDialog";
import OrderInvoiceEmailSendDialog from "@saleor/orders/components/OrderInvoiceEmailSendDialog";
import { InvoiceRequest } from "@saleor/orders/types/InvoiceRequest";
import useCustomerSearch from "@saleor/searches/useCustomerSearch";
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
import createMetadataUpdateHandler from "@saleor/utils/handlers/metadataUpdateHandler";
import {
useMetadataUpdate,
usePrivateMetadataUpdate
} from "@saleor/utils/metadata/updateMetadata";
import { useWarehouseList } from "@saleor/warehouses/queries";
import React from "react";
import { useIntl } from "react-intl";
import { customerUrl } from "../../../customers/urls";
import {
getMutationState,
getStringOrPlaceholder,
maybe,
transformAddressToForm
@ -113,6 +122,12 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
});
const { queue } = useBackgroundTask();
const intl = useIntl();
const [updateMetadata, updateMetadataOpts] = useMetadataUpdate({});
const [
updatePrivateMetadata,
updatePrivateMetadataOpts
] = usePrivateMetadataUpdate({});
const notify = useNotifier();
const [openModal, closeModal] = createDialogActionHandlers<
OrderUrlDialog,
@ -130,6 +145,23 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
return <NotFoundPage onBack={handleBack} />;
}
const handleSubmit = async (data: MetadataFormData) => {
const update = createMetadataUpdateHandler(
order,
() => Promise.resolve([]),
variables => updateMetadata({ variables }),
variables => updatePrivateMetadata({ variables })
);
const result = await update(data);
if (result.length === 0) {
notify({
status: "success",
text: intl.formatMessage(commonMessages.savedChanges)
});
}
};
return (
<OrderDetailsMessages id={id} params={params}>
{orderMessages => (
@ -211,6 +243,10 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
)}
/>
<OrderDetailsPage
disabled={
updateMetadataOpts.loading ||
updatePrivateMetadataOpts.loading
}
onNoteAdd={variables =>
orderAddNote.mutate({
input: variables,
@ -219,6 +255,22 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
}
onBack={handleBack}
order={order}
saveButtonBarState={getMutationState(
updateMetadataOpts.called ||
updatePrivateMetadataOpts.called,
updateMetadataOpts.loading ||
updatePrivateMetadataOpts.loading,
[
...(updateMetadataOpts.data?.deleteMetadata
.errors || []),
...(updateMetadataOpts.data?.updateMetadata
.errors || []),
...(updatePrivateMetadataOpts.data
?.deletePrivateMetadata.errors || []),
...(updatePrivateMetadataOpts.data
?.updatePrivateMetadata.errors || [])
]
)}
shippingMethods={maybe(
() => data.order.availableShippingMethods,
[]
@ -271,6 +323,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
onInvoiceSend={id =>
openModal("invoice-send", { id })
}
onSubmit={handleSubmit}
/>
<OrderCannotCancelOrderDialog
onClose={closeModal}

File diff suppressed because it is too large Load diff

View file

@ -19,6 +19,7 @@ const order = orderFixture(placeholderImage);
const props: Omit<OrderDetailsPageProps, "classes"> = {
countries,
disabled: false,
onBack: () => undefined,
onBillingAddressEdit: undefined,
onFulfillmentCancel: () => undefined,
@ -36,7 +37,9 @@ const props: Omit<OrderDetailsPageProps, "classes"> = {
onProductClick: undefined,
onProfileView: () => undefined,
onShippingAddressEdit: undefined,
onSubmit: () => undefined,
order,
saveButtonBarState: "default",
userPermissions: adminUserPermissions
};