Add customer field

This commit is contained in:
dominik-zeglen 2020-02-03 12:40:46 +01:00
parent 679c193aab
commit 535d1c780c
6 changed files with 37 additions and 6 deletions

View file

@ -112,7 +112,7 @@ export const CustomerDetailsView: React.FC<CustomerDetailsViewProps> = ({
onViewAllOrdersClick={() => onViewAllOrdersClick={() =>
navigate( navigate(
orderListUrl({ orderListUrl({
email: maybe(() => customerDetails.data.user.email) customer: maybe(() => customerDetails.data.user.email)
}) })
) )
} }

View file

@ -4,7 +4,8 @@ import { FilterOpts, MinMax } from "@saleor/types";
import { OrderStatusFilter } from "@saleor/types/globalTypes"; import { OrderStatusFilter } from "@saleor/types/globalTypes";
import { import {
createDateField, createDateField,
createOptionsField createOptionsField,
createTextField
} from "@saleor/utils/filters/fields"; } from "@saleor/utils/filters/fields";
import { IFilter } from "@saleor/components/Filter"; import { IFilter } from "@saleor/components/Filter";
import { orderStatusMessages } from "@saleor/misc"; import { orderStatusMessages } from "@saleor/misc";
@ -12,15 +13,21 @@ import { commonMessages } from "@saleor/intl";
export enum OrderFilterKeys { export enum OrderFilterKeys {
created = "created", created = "created",
customer = "customer",
status = "status" status = "status"
} }
export interface OrderListFilterOpts { export interface OrderListFilterOpts {
created: FilterOpts<MinMax>; created: FilterOpts<MinMax>;
customer: FilterOpts<string>;
status: FilterOpts<OrderStatusFilter[]>; status: FilterOpts<OrderStatusFilter[]>;
} }
const messages = defineMessages({ const messages = defineMessages({
customer: {
defaultMessage: "Customer",
description: "order"
},
placed: { placed: {
defaultMessage: "Placed", defaultMessage: "Placed",
description: "order" description: "order"
@ -32,6 +39,14 @@ export function createFilterStructure(
opts: OrderListFilterOpts opts: OrderListFilterOpts
): IFilter<OrderFilterKeys> { ): IFilter<OrderFilterKeys> {
return [ return [
{
...createTextField(
OrderFilterKeys.customer,
intl.formatMessage(messages.customer),
opts.customer.value
),
active: opts.customer.active
},
{ {
...createDateField( ...createDateField(
OrderFilterKeys.created, OrderFilterKeys.created,

View file

@ -19,7 +19,7 @@ export const orderListPath = orderSectionUrl;
export enum OrderListUrlFiltersEnum { export enum OrderListUrlFiltersEnum {
createdFrom = "createdFrom", createdFrom = "createdFrom",
createdTo = "createdTo", createdTo = "createdTo",
email = "email", customer = "customer",
payment = "payment", payment = "payment",
query = "query" query = "query"
} }

View file

@ -22,7 +22,7 @@ describe("Filtering query params", () => {
const params: OrderListUrlFilters = { const params: OrderListUrlFilters = {
createdFrom: date.from, createdFrom: date.from,
createdTo: date.to, createdTo: date.to,
email: "email@example.com", customer: "email@example.com",
status: [ status: [
OrderStatusFilter.FULFILLED, OrderStatusFilter.FULFILLED,
OrderStatusFilter.PARTIALLY_FULFILLED OrderStatusFilter.PARTIALLY_FULFILLED
@ -45,6 +45,10 @@ describe("Filtering URL params", () => {
min: date.from min: date.from
} }
}, },
customer: {
active: false,
value: "email@example.com"
},
status: { status: {
active: false, active: false,
value: [ value: [

View file

@ -15,7 +15,8 @@ import {
dedupeFilter, dedupeFilter,
getGteLteVariables, getGteLteVariables,
getMinMaxQueryParam, getMinMaxQueryParam,
getMultipleEnumValueQueryParam getMultipleEnumValueQueryParam,
getSingleValueQueryParam
} from "../../../utils/filters"; } from "../../../utils/filters";
import { import {
OrderListUrlFilters, OrderListUrlFilters,
@ -43,6 +44,10 @@ export function getFilterOpts(
min: maybe(() => params.createdFrom, "") min: maybe(() => params.createdFrom, "")
} }
}, },
customer: {
active: !!maybe(() => params.customer),
value: params.customer
},
status: { status: {
active: maybe(() => params.status !== undefined, false), active: maybe(() => params.status !== undefined, false),
value: maybe( value: maybe(
@ -66,7 +71,7 @@ export function getFilterVariables(
gte: params.createdFrom, gte: params.createdFrom,
lte: params.createdTo lte: params.createdTo
}), }),
customer: params.email, customer: params.customer,
search: params.query, search: params.query,
status: maybe(() => status: maybe(() =>
params.status.map(status => findInEnum(status, OrderStatusFilter)) params.status.map(status => findInEnum(status, OrderStatusFilter))
@ -93,6 +98,9 @@ export function getFilterQueryParam(
OrderListUrlFiltersWithMultipleValuesEnum.status, OrderListUrlFiltersWithMultipleValuesEnum.status,
OrderStatus OrderStatus
); );
case OrderFilterKeys.customer:
return getSingleValueQueryParam(filter, OrderListUrlFiltersEnum.customer);
} }
} }

View file

@ -28,6 +28,10 @@ const props: OrderListPageProps = {
min: "50" min: "50"
} }
}, },
customer: {
active: false,
value: "Jesse"
},
status: { status: {
active: false, active: false,
value: [OrderStatusFilter.CANCELED, OrderStatusFilter.FULFILLED] value: [OrderStatusFilter.CANCELED, OrderStatusFilter.FULFILLED]