Separate visual and app layer in sales

This commit is contained in:
dominik-zeglen 2020-01-10 13:56:47 +01:00
parent 4df5a99a68
commit fc9a51c92a
7 changed files with 132 additions and 127 deletions

View file

@ -15,13 +15,13 @@ import {
FilterPageProps
} from "@saleor/types";
import { SaleListUrlSortField } from "@saleor/discounts/urls";
import {
SaleFilterKeys,
createFilterStructure
} from "@saleor/discounts/views/SaleList/filter";
import { SaleListFilterOpts } from "@saleor/discounts/types";
import { SaleList_sales_edges_node } from "../../types/SaleList";
import SaleList from "../SaleList";
import {
SaleFilterKeys,
SaleListFilterOpts,
createFilterStructure
} from "./filters";
export interface SaleListPageProps
extends PageListProps,

View file

@ -0,0 +1,116 @@
import { defineMessages, IntlShape } from "react-intl";
import { FilterOpts, MinMax } from "@saleor/types";
import {
DiscountStatusEnum,
DiscountValueTypeEnum
} from "@saleor/types/globalTypes";
import {
createDateField,
createOptionsField
} from "@saleor/utils/filters/fields";
import { IFilter } from "@saleor/components/Filter";
export enum SaleFilterKeys {
saleType = "saleType",
started = "started",
status = "status"
}
export interface SaleListFilterOpts {
saleType: FilterOpts<DiscountValueTypeEnum>;
started: FilterOpts<MinMax>;
status: FilterOpts<DiscountStatusEnum[]>;
}
const messages = defineMessages({
active: {
defaultMessage: "Active",
description: "sale status"
},
expired: {
defaultMessage: "Expired",
description: "sale status"
},
fixed: {
defaultMessage: "Fixed amount",
description: "discount type"
},
percentage: {
defaultMessage: "Percentage",
description: "discount type"
},
scheduled: {
defaultMessage: "Scheduled",
description: "sale status"
},
started: {
defaultMessage: "Started",
description: "sale start date"
},
status: {
defaultMessage: "Status",
description: "sale status"
},
type: {
defaultMessage: "Discount Type"
}
});
export function createFilterStructure(
intl: IntlShape,
opts: SaleListFilterOpts
): IFilter<SaleFilterKeys> {
return [
{
...createDateField(
SaleFilterKeys.started,
intl.formatMessage(messages.started),
opts.started.value
),
active: opts.started.active
},
{
...createOptionsField(
SaleFilterKeys.status,
intl.formatMessage(messages.status),
opts.status.value,
true,
[
{
label: intl.formatMessage(messages.active),
value: DiscountStatusEnum.ACTIVE
},
{
label: intl.formatMessage(messages.expired),
value: DiscountStatusEnum.EXPIRED
},
{
label: intl.formatMessage(messages.scheduled),
value: DiscountStatusEnum.SCHEDULED
}
]
),
active: opts.status.active
},
{
...createOptionsField(
SaleFilterKeys.saleType,
intl.formatMessage(messages.type),
[opts.saleType.value],
false,
[
{
label: intl.formatMessage(messages.fixed),
value: DiscountValueTypeEnum.FIXED
},
{
label: intl.formatMessage(messages.percentage),
value: DiscountValueTypeEnum.PERCENTAGE
}
]
),
active: opts.saleType.active
}
];
}

View file

@ -1,2 +1,3 @@
export { default } from "./SaleListPage";
export * from "./SaleListPage";
export * from "./filters";

View file

@ -1,15 +1,8 @@
import { FilterOpts, MinMax } from "@saleor/types";
import {
DiscountStatusEnum,
DiscountValueTypeEnum,
VoucherDiscountType
VoucherDiscountType,
DiscountStatusEnum
} from "@saleor/types/globalTypes";
export interface SaleListFilterOpts {
saleType: FilterOpts<DiscountValueTypeEnum>;
started: FilterOpts<MinMax>;
status: FilterOpts<DiscountStatusEnum[]>;
}
import { MinMax, FilterOpts } from "@saleor/types";
export interface VoucherListFilterOpts {
saleType: FilterOpts<VoucherDiscountType[]>;

View file

@ -45,7 +45,7 @@ import {
saveFilterTab,
getFilterQueryParam,
getFilterOpts
} from "./filter";
} from "./filters";
import { getSortQueryVariables } from "./sort";
interface SaleListProps {

View file

@ -1,17 +1,14 @@
import { IntlShape } from "react-intl";
import {
SaleFilterInput,
DiscountStatusEnum,
DiscountValueTypeEnum
DiscountValueTypeEnum,
SaleFilterInput
} from "@saleor/types/globalTypes";
import { maybe, findValueInEnum, joinDateTime } from "@saleor/misc";
import { SaleListFilterOpts } from "@saleor/discounts/types";
import { IFilter, IFilterElement } from "@saleor/components/Filter";
import { IFilterElement } from "@saleor/components/Filter";
import {
createDateField,
createOptionsField
} from "@saleor/utils/filters/fields";
SaleListFilterOpts,
SaleFilterKeys
} from "@saleor/discounts/components/SaleListPage";
import {
createFilterTabUtils,
createFilterUtils,
@ -22,16 +19,9 @@ import {
SaleListUrlFiltersEnum,
SaleListUrlQueryParams
} from "../../urls";
import messages from "./messages";
export const SALE_FILTERS_KEY = "saleFilters";
export enum SaleFilterKeys {
saleType = "saleType",
started = "started",
status = "status"
}
export function getFilterOpts(params: SaleListUrlFilters): SaleListFilterOpts {
return {
saleType: {
@ -66,64 +56,6 @@ export function getFilterOpts(params: SaleListUrlFilters): SaleListFilterOpts {
};
}
export function createFilterStructure(
intl: IntlShape,
opts: SaleListFilterOpts
): IFilter<SaleFilterKeys> {
return [
{
...createDateField(
SaleFilterKeys.started,
intl.formatMessage(messages.started),
opts.started.value
),
active: opts.started.active
},
{
...createOptionsField(
SaleFilterKeys.status,
intl.formatMessage(messages.status),
opts.status.value,
true,
[
{
label: intl.formatMessage(messages.active),
value: DiscountStatusEnum.ACTIVE
},
{
label: intl.formatMessage(messages.expired),
value: DiscountStatusEnum.EXPIRED
},
{
label: intl.formatMessage(messages.scheduled),
value: DiscountStatusEnum.SCHEDULED
}
]
),
active: opts.status.active
},
{
...createOptionsField(
SaleFilterKeys.saleType,
intl.formatMessage(messages.type),
[opts.saleType.value],
false,
[
{
label: intl.formatMessage(messages.fixed),
value: DiscountValueTypeEnum.FIXED
},
{
label: intl.formatMessage(messages.percentage),
value: DiscountValueTypeEnum.PERCENTAGE
}
]
),
active: opts.saleType.active
}
];
}
export function getFilterVariables(
params: SaleListUrlFilters
): SaleFilterInput {

View file

@ -1,37 +0,0 @@
import { defineMessages } from "react-intl";
const messages = defineMessages({
active: {
defaultMessage: "Active",
description: "sale status"
},
expired: {
defaultMessage: "Expired",
description: "sale status"
},
fixed: {
defaultMessage: "Fixed amount",
description: "discount type"
},
percentage: {
defaultMessage: "Percentage",
description: "discount type"
},
scheduled: {
defaultMessage: "Scheduled",
description: "sale status"
},
started: {
defaultMessage: "Started",
description: "sale start date"
},
status: {
defaultMessage: "Status",
description: "sale status"
},
type: {
defaultMessage: "Discount Type"
}
});
export default messages;