Use customer search hook

This commit is contained in:
dominik-zeglen 2019-11-19 17:32:35 +01:00
parent 3f28673c94
commit b07b220b3c
6 changed files with 511 additions and 539 deletions

View file

@ -16,10 +16,10 @@ import SingleAutocompleteSelectField from "@saleor/components/SingleAutocomplete
import Skeleton from "@saleor/components/Skeleton"; import Skeleton from "@saleor/components/Skeleton";
import useStateFromProps from "@saleor/hooks/useStateFromProps"; import useStateFromProps from "@saleor/hooks/useStateFromProps";
import { buttonMessages } from "@saleor/intl"; import { buttonMessages } from "@saleor/intl";
import { SearchCustomers_search_edges_node } from "@saleor/searches/types/SearchCustomers";
import { FetchMoreProps, UserPermissionProps } from "@saleor/types"; import { FetchMoreProps, UserPermissionProps } from "@saleor/types";
import { PermissionEnum } from "@saleor/types/globalTypes"; import { PermissionEnum } from "@saleor/types/globalTypes";
import createSingleAutocompleteSelectHandler from "@saleor/utils/handlers/singleAutocompleteSelectChangeHandler"; import createSingleAutocompleteSelectHandler from "@saleor/utils/handlers/singleAutocompleteSelectChangeHandler";
import { SearchCustomers_search_edges_node } from "../../../containers/SearchCustomers/types/SearchCustomers";
import { customerUrl } from "../../../customers/urls"; import { customerUrl } from "../../../customers/urls";
import { createHref, maybe } from "../../../misc"; import { createHref, maybe } from "../../../misc";
import { OrderDetails_order } from "../../types/OrderDetails"; import { OrderDetails_order } from "../../types/OrderDetails";

View file

@ -13,8 +13,8 @@ import PageHeader from "@saleor/components/PageHeader";
import SaveButtonBar from "@saleor/components/SaveButtonBar"; import SaveButtonBar from "@saleor/components/SaveButtonBar";
import Skeleton from "@saleor/components/Skeleton"; import Skeleton from "@saleor/components/Skeleton";
import { sectionNames } from "@saleor/intl"; import { sectionNames } from "@saleor/intl";
import { SearchCustomers_search_edges_node } from "@saleor/searches/types/SearchCustomers";
import { FetchMoreProps, UserPermissionProps } from "@saleor/types"; import { FetchMoreProps, UserPermissionProps } from "@saleor/types";
import { SearchCustomers_search_edges_node } from "../../../containers/SearchCustomers/types/SearchCustomers";
import { maybe } from "../../../misc"; import { maybe } from "../../../misc";
import { DraftOrderInput } from "../../../types/globalTypes"; import { DraftOrderInput } from "../../../types/globalTypes";
import { OrderDetails_order } from "../../types/OrderDetails"; import { OrderDetails_order } from "../../types/OrderDetails";

View file

@ -1,5 +1,5 @@
import { SearchCustomers_search_edges_node } from "@saleor/searches/types/SearchCustomers";
import { MessageDescriptor } from "react-intl"; import { MessageDescriptor } from "react-intl";
import { SearchCustomers_search_edges_node } from "../containers/SearchCustomers/types/SearchCustomers";
import { transformOrderStatus, transformPaymentStatus } from "../misc"; import { transformOrderStatus, transformPaymentStatus } from "../misc";
import { import {
FulfillmentStatus, FulfillmentStatus,

View file

@ -3,8 +3,8 @@ import React from "react";
import { WindowTitle } from "@saleor/components/WindowTitle"; import { WindowTitle } from "@saleor/components/WindowTitle";
import useNavigator from "@saleor/hooks/useNavigator"; import useNavigator from "@saleor/hooks/useNavigator";
import useUser from "@saleor/hooks/useUser"; import useUser from "@saleor/hooks/useUser";
import useCustomerSearch from "@saleor/searches/useCustomerSearch";
import { DEFAULT_INITIAL_SEARCH_DATA } from "../../../config"; import { DEFAULT_INITIAL_SEARCH_DATA } from "../../../config";
import SearchCustomers from "../../../containers/SearchCustomers";
import { customerUrl } from "../../../customers/urls"; import { customerUrl } from "../../../customers/urls";
import { getMutationState, maybe, transformAddressToForm } from "../../../misc"; import { getMutationState, maybe, transformAddressToForm } from "../../../misc";
import { productUrl } from "../../../products/urls"; import { productUrl } from "../../../products/urls";
@ -74,6 +74,13 @@ interface OrderDetailsProps {
export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => { export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
const navigate = useNavigator(); const navigate = useNavigator();
const { user } = useUser(); const { user } = useUser();
const {
loadMore: loadMoreCustomers,
search: searchUsers,
result: users
} = useCustomerSearch({
variables: DEFAULT_INITIAL_SEARCH_DATA
});
return ( return (
<TypedOrderDetailsQuery <TypedOrderDetailsQuery
@ -91,12 +98,6 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
}) })
); );
return ( return (
<SearchCustomers variables={DEFAULT_INITIAL_SEARCH_DATA}>
{({
loadMore: loadMoreCustomers,
search: searchUsers,
result: users
}) => (
<OrderDetailsMessages> <OrderDetailsMessages>
{orderMessages => ( {orderMessages => (
<OrderOperations <OrderOperations
@ -151,8 +152,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
orderDraftFinalize.opts.loading, orderDraftFinalize.opts.loading,
maybe( maybe(
() => () =>
orderDraftFinalize.opts.data.draftOrderComplete orderDraftFinalize.opts.data.draftOrderComplete.errors
.errors
) )
); );
return ( return (
@ -160,9 +160,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
{maybe(() => order.status !== OrderStatus.DRAFT) ? ( {maybe(() => order.status !== OrderStatus.DRAFT) ? (
<> <>
<WindowTitle <WindowTitle
title={maybe( title={maybe(() => "Order #" + data.order.number)}
() => "Order #" + data.order.number
)}
/> />
<OrderDetailsPage <OrderDetailsPage
onNoteAdd={variables => onNoteAdd={variables =>
@ -177,10 +175,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
() => data.order.availableShippingMethods, () => data.order.availableShippingMethods,
[] []
)} )}
userPermissions={maybe( userPermissions={maybe(() => user.permissions, [])}
() => user.permissions,
[]
)}
onOrderCancel={() => openModal("cancel")} onOrderCancel={() => openModal("cancel")}
onOrderFulfill={() => openModal("fulfill")} onOrderFulfill={() => openModal("fulfill")}
onFulfillmentCancel={fulfillmentId => onFulfillmentCancel={fulfillmentId =>
@ -220,8 +215,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
orderCancel.opts.called, orderCancel.opts.called,
orderCancel.opts.loading, orderCancel.opts.loading,
maybe( maybe(
() => () => orderCancel.opts.data.orderCancel.errors
orderCancel.opts.data.orderCancel.errors
) )
)} )}
number={maybe(() => order.number)} number={maybe(() => order.number)}
@ -256,9 +250,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
confirmButtonState={getMutationState( confirmButtonState={getMutationState(
orderVoid.opts.called, orderVoid.opts.called,
orderVoid.opts.loading, orderVoid.opts.loading,
maybe( maybe(() => orderVoid.opts.data.orderVoid.errors)
() => orderVoid.opts.data.orderVoid.errors
)
)} )}
open={params.action === "void"} open={params.action === "void"}
onClose={closeModal} onClose={closeModal}
@ -328,8 +320,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
lines: maybe(() => order.lines, []) lines: maybe(() => order.lines, [])
.filter( .filter(
line => line =>
line.quantityFulfilled < line.quantityFulfilled < line.quantity
line.quantity
) )
.map((line, lineIndex) => ({ .map((line, lineIndex) => ({
orderLineId: line.id, orderLineId: line.id,
@ -374,8 +365,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
trackingNumber={maybe( trackingNumber={maybe(
() => () =>
data.order.fulfillments.find( data.order.fulfillments.find(
fulfillment => fulfillment => fulfillment.id === params.id
fulfillment.id === params.id
).trackingNumber ).trackingNumber
)} )}
onConfirm={variables => onConfirm={variables =>
@ -407,9 +397,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
} }
users={maybe( users={maybe(
() => () =>
users.data.search.edges.map( users.data.search.edges.map(edge => edge.node),
edge => edge.node
),
[] []
)} )}
hasMore={maybe( hasMore={maybe(
@ -428,18 +416,15 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
} }
onDraftFinalize={() => openModal("finalize")} onDraftFinalize={() => openModal("finalize")}
onDraftRemove={() => openModal("cancel")} onDraftRemove={() => openModal("cancel")}
onOrderLineAdd={() => onOrderLineAdd={() => openModal("add-order-line")}
openModal("add-order-line")
}
onBack={() => navigate(orderListUrl())} onBack={() => navigate(orderListUrl())}
order={order} order={order}
countries={maybe( countries={maybe(() => data.shop.countries, []).map(
() => data.shop.countries, country => ({
[]
).map(country => ({
code: country.code, code: country.code,
label: country.country label: country.country
}))} })
)}
onProductClick={id => () => onProductClick={id => () =>
navigate(productUrl(encodeURIComponent(id)))} navigate(productUrl(encodeURIComponent(id)))}
onBillingAddressEdit={() => onBillingAddressEdit={() =>
@ -464,10 +449,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
onProfileView={() => onProfileView={() =>
navigate(customerUrl(order.user.id)) navigate(customerUrl(order.user.id))
} }
userPermissions={maybe( userPermissions={maybe(() => user.permissions, [])}
() => user.permissions,
[]
)}
/> />
<OrderDraftCancelDialog <OrderDraftCancelDialog
confirmButtonState={getMutationState( confirmButtonState={getMutationState(
@ -475,23 +457,19 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
orderDraftCancel.opts.loading, orderDraftCancel.opts.loading,
maybe( maybe(
() => () =>
orderDraftCancel.opts.data orderDraftCancel.opts.data.draftOrderDelete
.draftOrderDelete.errors .errors
) )
)} )}
onClose={closeModal} onClose={closeModal}
onConfirm={() => onConfirm={() => orderDraftCancel.mutate({ id })}
orderDraftCancel.mutate({ id })
}
open={params.action === "cancel"} open={params.action === "cancel"}
orderNumber={maybe(() => order.number)} orderNumber={maybe(() => order.number)}
/> />
<OrderDraftFinalizeDialog <OrderDraftFinalizeDialog
confirmButtonState={finalizeTransitionState} confirmButtonState={finalizeTransitionState}
onClose={closeModal} onClose={closeModal}
onConfirm={() => onConfirm={() => orderDraftFinalize.mutate({ id })}
orderDraftFinalize.mutate({ id })
}
open={params.action === "finalize"} open={params.action === "finalize"}
orderNumber={maybe(() => order.number)} orderNumber={maybe(() => order.number)}
warnings={orderDraftFinalizeWarnings(order)} warnings={orderDraftFinalizeWarnings(order)}
@ -575,9 +553,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
confirmButtonState={getMutationState( confirmButtonState={getMutationState(
orderUpdate.opts.called, orderUpdate.opts.called,
orderUpdate.opts.loading, orderUpdate.opts.loading,
maybe( maybe(() => orderUpdate.opts.data.orderUpdate.errors)
() => orderUpdate.opts.data.orderUpdate.errors
)
)} )}
address={transformAddressToForm( address={transformAddressToForm(
maybe(() => order.shippingAddress) maybe(() => order.shippingAddress)
@ -608,9 +584,7 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
confirmButtonState={getMutationState( confirmButtonState={getMutationState(
orderUpdate.opts.called, orderUpdate.opts.called,
orderUpdate.opts.loading, orderUpdate.opts.loading,
maybe( maybe(() => orderUpdate.opts.data.orderUpdate.errors)
() => orderUpdate.opts.data.orderUpdate.errors
)
)} )}
address={transformAddressToForm( address={transformAddressToForm(
maybe(() => order.billingAddress) maybe(() => order.billingAddress)
@ -643,8 +617,6 @@ export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
</OrderOperations> </OrderOperations>
)} )}
</OrderDetailsMessages> </OrderDetailsMessages>
)}
</SearchCustomers>
); );
}} }}
</TypedOrderDetailsQuery> </TypedOrderDetailsQuery>

View file

@ -1,7 +1,7 @@
import gql from "graphql-tag"; import gql from "graphql-tag";
import makeTopLevelSearch from "@saleor/hooks/makeTopLevelSearch";
import { pageInfoFragment } from "@saleor/queries"; import { pageInfoFragment } from "@saleor/queries";
import TopLevelSearch from "../TopLevelSearch";
import { import {
SearchCustomers, SearchCustomers,
SearchCustomersVariables SearchCustomersVariables
@ -24,6 +24,6 @@ export const searchCustomers = gql`
} }
`; `;
export default TopLevelSearch<SearchCustomers, SearchCustomersVariables>( export default makeTopLevelSearch<SearchCustomers, SearchCustomersVariables>(
searchCustomers searchCustomers
); );