import { stringify as stringifyQs } from "qs"; import urlJoin from "url-join"; import { ActiveTab, BulkAction, Dialog, Filters, FiltersWithMultipleValues, Pagination, SingleAction, Sort, TabActionDialog } from "../types"; const orderSectionUrl = "/orders"; export const orderListPath = orderSectionUrl; export enum OrderListUrlFiltersEnum { createdFrom = "createdFrom", createdTo = "createdTo", customer = "customer", payment = "payment", query = "query" } export enum OrderListUrlFiltersWithMultipleValuesEnum { status = "status" } export type OrderListUrlFilters = Filters & FiltersWithMultipleValues; export type OrderListUrlDialog = "cancel" | "settings" | TabActionDialog; export enum OrderListUrlSortField { number = "number", customer = "customer", date = "date", fulfillment = "status", payment = "payment", total = "total" } export type OrderListUrlSort = Sort; export type OrderListUrlQueryParams = BulkAction & Dialog & OrderListUrlFilters & OrderListUrlSort & Pagination & ActiveTab; export const orderListUrl = (params?: OrderListUrlQueryParams): string => { const orderList = orderListPath; if (params === undefined) { return orderList; } else { return urlJoin(orderList, "?" + stringifyQs(params)); } }; export const orderDraftListPath = urlJoin(orderSectionUrl, "drafts"); export enum OrderDraftListUrlFiltersEnum { createdFrom = "createdFrom", createdTo = "createdTo", customer = "customer", query = "query" } export type OrderDraftListUrlFilters = Filters; export type OrderDraftListUrlDialog = "remove" | "settings" | TabActionDialog; export enum OrderDraftListUrlSortField { number = "number", customer = "customer", date = "date", total = "total" } export type OrderDraftListUrlSort = Sort; export type OrderDraftListUrlQueryParams = ActiveTab & BulkAction & Dialog & OrderDraftListUrlFilters & OrderDraftListUrlSort & Pagination; export const orderDraftListUrl = ( params?: OrderDraftListUrlQueryParams ): string => { const orderDraftList = orderDraftListPath; if (params === undefined) { return orderDraftList; } else { return urlJoin(orderDraftList, "?" + stringifyQs(params)); } }; export const orderPath = (id: string) => urlJoin(orderSectionUrl, id); export type OrderUrlDialog = | "add-order-line" | "cancel" | "cancel-fulfillment" | "capture" | "edit-billing-address" | "edit-fulfillment" | "edit-shipping" | "edit-shipping-address" | "finalize" | "mark-paid" | "refund" | "void" | "invoice-send"; export type OrderUrlQueryParams = Dialog & SingleAction; export const orderUrl = (id: string, params?: OrderUrlQueryParams) => orderPath(encodeURIComponent(id)) + "?" + stringifyQs(params); export const orderFulfillPath = (id: string) => urlJoin(orderPath(id), "fulfill"); export const orderFulfillUrl = (id: string) => orderFulfillPath(encodeURIComponent(id));