diff --git a/src/collections/views/CollectionList/CollectionList.tsx b/src/collections/views/CollectionList/CollectionList.tsx index 0523c8f77..20a39a6bf 100644 --- a/src/collections/views/CollectionList/CollectionList.tsx +++ b/src/collections/views/CollectionList/CollectionList.tsx @@ -23,9 +23,8 @@ import { ListViews } from "@saleor/types"; import { getSortParams } from "@saleor/utils/sort"; import createSortHandler from "@saleor/utils/handlers/sortHandler"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { IFilter } from "@saleor/components/Filter"; -import { getFilterQueryParams } from "@saleor/utils/filters"; import useShop from "@saleor/hooks/useShop"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import CollectionListPage from "../../components/CollectionListPage/CollectionListPage"; import { TypedCollectionBulkDelete, @@ -48,7 +47,6 @@ import { getFilterTabs, getFilterVariables, saveFilterTab, - CollectionFilterKeys, getFilterQueryParam, getFilterOpts } from "./filter"; @@ -94,37 +92,17 @@ export const CollectionList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - collectionListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - collectionListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - collectionListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: collectionListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< CollectionListUrlDialog, diff --git a/src/customers/views/CustomerList/CustomerList.tsx b/src/customers/views/CustomerList/CustomerList.tsx index a2641a553..9f61f4f36 100644 --- a/src/customers/views/CustomerList/CustomerList.tsx +++ b/src/customers/views/CustomerList/CustomerList.tsx @@ -22,9 +22,8 @@ import { ListViews } from "@saleor/types"; import { getSortParams } from "@saleor/utils/sort"; import createSortHandler from "@saleor/utils/handlers/sortHandler"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { IFilter } from "@saleor/components/Filter"; -import { getFilterQueryParams } from "@saleor/utils/filters"; import useShop from "@saleor/hooks/useShop"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import CustomerListPage from "../../components/CustomerListPage"; import { TypedBulkRemoveCustomers } from "../../mutations"; import { useCustomerListQuery } from "../../queries"; @@ -43,7 +42,6 @@ import { getFilterTabs, getFilterVariables, saveFilterTab, - CustomerFilterKeys, getFilterQueryParam, getFilterOpts } from "./filter"; @@ -89,37 +87,17 @@ export const CustomerList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - customerListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - customerListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - customerListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: customerListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< CustomerListUrlDialog, diff --git a/src/discounts/views/SaleList/SaleList.tsx b/src/discounts/views/SaleList/SaleList.tsx index 16d6d33b8..e014d9124 100644 --- a/src/discounts/views/SaleList/SaleList.tsx +++ b/src/discounts/views/SaleList/SaleList.tsx @@ -24,8 +24,7 @@ import { ListViews } from "@saleor/types"; import { getSortParams } from "@saleor/utils/sort"; import createSortHandler from "@saleor/utils/handlers/sortHandler"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { IFilter } from "@saleor/components/Filter"; -import { getFilterQueryParams } from "@saleor/utils/filters"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import SaleListPage from "../../components/SaleListPage"; import { TypedSaleBulkDelete } from "../../mutations"; import { useSaleListQuery } from "../../queries"; @@ -44,7 +43,6 @@ import { getFilterTabs, getFilterVariables, saveFilterTab, - SaleFilterKeys, getFilterQueryParam, getFilterOpts } from "./filter"; @@ -90,37 +88,17 @@ export const SaleList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - saleListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - saleListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - saleListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: saleListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< SaleListUrlDialog, diff --git a/src/discounts/views/VoucherList/VoucherList.tsx b/src/discounts/views/VoucherList/VoucherList.tsx index f9931f941..bf2ad956b 100644 --- a/src/discounts/views/VoucherList/VoucherList.tsx +++ b/src/discounts/views/VoucherList/VoucherList.tsx @@ -26,6 +26,7 @@ import createSortHandler from "@saleor/utils/handlers/sortHandler"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; import { getFilterQueryParams } from "@saleor/utils/filters"; import { IFilter } from "@saleor/components/Filter"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import VoucherListPage from "../../components/VoucherListPage"; import { TypedVoucherBulkDelete } from "../../mutations"; import { useVoucherListQuery } from "../../queries"; @@ -90,37 +91,17 @@ export const VoucherList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - voucherListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - voucherListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - voucherListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: voucherListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< VoucherListUrlDialog, diff --git a/src/orders/views/OrderDraftList/OrderDraftList.tsx b/src/orders/views/OrderDraftList/OrderDraftList.tsx index 47b310998..b4965c480 100644 --- a/src/orders/views/OrderDraftList/OrderDraftList.tsx +++ b/src/orders/views/OrderDraftList/OrderDraftList.tsx @@ -21,9 +21,8 @@ import { ListViews } from "@saleor/types"; import createSortHandler from "@saleor/utils/handlers/sortHandler"; import { getSortParams } from "@saleor/utils/sort"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { getFilterQueryParams } from "@saleor/utils/filters"; -import { IFilter } from "@saleor/components/Filter"; import useShop from "@saleor/hooks/useShop"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import OrderDraftListPage from "../../components/OrderDraftListPage"; import { TypedOrderDraftBulkCancelMutation, @@ -46,7 +45,6 @@ import { getFilterVariables, saveFilterTab, getFilterQueryParam, - OrderDraftFilterKeys, getFilterOpts } from "./filter"; import { getSortQueryVariables } from "./sort"; @@ -90,37 +88,17 @@ export const OrderDraftList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - orderDraftListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - orderDraftListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - orderDraftListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: orderDraftListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< OrderDraftListUrlDialog, diff --git a/src/orders/views/OrderList/OrderList.tsx b/src/orders/views/OrderList/OrderList.tsx index 38058b842..f078616e9 100644 --- a/src/orders/views/OrderList/OrderList.tsx +++ b/src/orders/views/OrderList/OrderList.tsx @@ -19,8 +19,7 @@ import { ListViews } from "@saleor/types"; import createSortHandler from "@saleor/utils/handlers/sortHandler"; import { getSortParams } from "@saleor/utils/sort"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { IFilter } from "@saleor/components/Filter"; -import { getFilterQueryParams } from "@saleor/utils/filters"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import OrderBulkCancelDialog from "../../components/OrderBulkCancelDialog"; import OrderListPage from "../../components/OrderListPage/OrderListPage"; import { @@ -44,7 +43,6 @@ import { getFilterOpts, getFilterVariables, saveFilterTab, - OrderFilterKeys, getFilterQueryParam } from "./filters"; import { getSortQueryVariables } from "./sort"; @@ -88,37 +86,17 @@ export const OrderList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - orderListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - orderListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - orderListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: orderListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< OrderListUrlDialog, diff --git a/src/productTypes/views/ProductTypeList/ProductTypeList.tsx b/src/productTypes/views/ProductTypeList/ProductTypeList.tsx index bd901703b..0e088818b 100644 --- a/src/productTypes/views/ProductTypeList/ProductTypeList.tsx +++ b/src/productTypes/views/ProductTypeList/ProductTypeList.tsx @@ -21,9 +21,8 @@ import { ListViews } from "@saleor/types"; import { getSortParams } from "@saleor/utils/sort"; import createSortHandler from "@saleor/utils/handlers/sortHandler"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { IFilter } from "@saleor/components/Filter"; -import { getFilterQueryParams } from "@saleor/utils/filters"; import useShop from "@saleor/hooks/useShop"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import { configurationMenuUrl } from "../../../configuration"; import { maybe } from "../../../misc"; import ProductTypeListPage from "../../components/ProductTypeListPage"; @@ -44,7 +43,6 @@ import { getFilterTabs, getFilterVariables, saveFilterTab, - ProductTypeFilterKeys, getFilterQueryParam, getFilterOpts } from "./filter"; @@ -88,37 +86,17 @@ export const ProductTypeList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - productTypeListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - productTypeListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - productTypeListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: productTypeListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< ProductTypeListUrlDialog, diff --git a/src/products/views/ProductList/ProductList.tsx b/src/products/views/ProductList/ProductList.tsx index e9386c362..7eb034d10 100644 --- a/src/products/views/ProductList/ProductList.tsx +++ b/src/products/views/ProductList/ProductList.tsx @@ -25,8 +25,7 @@ import { ProductListVariables } from "@saleor/products/types/ProductList"; import { ListViews } from "@saleor/types"; import { getSortUrlVariables } from "@saleor/utils/sort"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { IFilter } from "@saleor/components/Filter"; -import { getFilterQueryParams } from "@saleor/utils/filters"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import ProductListPage from "../../components/ProductListPage"; import { TypedProductBulkDeleteMutation, @@ -53,7 +52,6 @@ import { getFilterTabs, getFilterVariables, saveFilterTab, - ProductFilterKeys, getFilterOpts, getFilterQueryParam } from "./filters"; @@ -103,37 +101,17 @@ export const ProductList: React.FC = ({ params }) => { ProductListUrlQueryParams >(navigate, productListUrl, params); - const changeFilters = (filter: IFilter) => { - reset(); - navigate( - productListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - }; - - const resetFilters = () => { - reset(); - navigate( - productListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - }; - - const handleSearchChange = (query: string) => { - reset(); - navigate( - productListUrl({ - ...params, - activeTab: undefined, - query - }) - ); - }; + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + cleanupFn: reset, + createUrl: productListUrl, + getFilterQueryParam, + navigate, + params + }); const handleTabChange = (tab: number) => { reset(); diff --git a/src/staff/views/StaffList/StaffList.tsx b/src/staff/views/StaffList/StaffList.tsx index 9dfa5be9c..8967a283c 100644 --- a/src/staff/views/StaffList/StaffList.tsx +++ b/src/staff/views/StaffList/StaffList.tsx @@ -23,8 +23,7 @@ import { ListViews } from "@saleor/types"; import { getSortParams } from "@saleor/utils/sort"; import createSortHandler from "@saleor/utils/handlers/sortHandler"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; -import { IFilter } from "@saleor/components/Filter"; -import { getFilterQueryParams } from "@saleor/utils/filters"; +import createFilterHandlers from "@saleor/utils/handlers/filterHandlers"; import StaffAddMemberDialog, { FormData as AddStaffMemberForm } from "../../components/StaffAddMemberDialog"; @@ -45,7 +44,6 @@ import { getFilterTabs, getFilterVariables, saveFilterTab, - StaffFilterKeys, getFilterQueryParam, getFilterOpts } from "./filter"; @@ -89,31 +87,16 @@ export const StaffList: React.FC = ({ params }) => { : 0 : parseInt(params.activeTab, 0); - const changeFilters = (filter: IFilter) => - navigate( - staffListUrl({ - ...params, - ...getFilterQueryParams(filter, getFilterQueryParam), - activeTab: undefined - }) - ); - - const resetFilters = () => - navigate( - staffListUrl({ - asc: params.asc, - sort: params.sort - }) - ); - - const handleSearchChange = (query: string) => - navigate( - staffListUrl({ - ...params, - activeTab: undefined, - query - }) - ); + const [ + changeFilters, + resetFilters, + handleSearchChange + ] = createFilterHandlers({ + createUrl: staffListUrl, + getFilterQueryParam, + navigate, + params + }); const [openModal, closeModal] = createDialogActionHandlers< StaffListUrlDialog, diff --git a/src/utils/handlers/filterHandlers.ts b/src/utils/handlers/filterHandlers.ts index 3b932fd8b..3c70db069 100644 --- a/src/utils/handlers/filterHandlers.ts +++ b/src/utils/handlers/filterHandlers.ts @@ -23,12 +23,15 @@ function createFilterHandlers< navigate: UseNavigatorResult; createUrl: CreateUrl; params: RequiredParams; - cleanupFn: () => void; + cleanupFn?: () => void; }): CreateFilterHandlers { const { getFilterQueryParam, navigate, createUrl, params, cleanupFn } = opts; const changeFilters = (filter: IFilter) => { - cleanupFn(); + if (!!cleanupFn) { + cleanupFn(); + } + navigate( createUrl({ ...params, @@ -39,7 +42,10 @@ function createFilterHandlers< }; const resetFilters = () => { - cleanupFn(); + if (!!cleanupFn) { + cleanupFn(); + } + navigate( createUrl({ asc: params.asc, @@ -49,7 +55,10 @@ function createFilterHandlers< }; const handleSearchChange = (query: string) => { - cleanupFn(); + if (!!cleanupFn) { + cleanupFn(); + } + navigate( createUrl({ ...params,