import type { ActionCardItemBase } from '@graphcommerce/ecommerce-ui' import { ActionCardListForm, useWatch } from '@graphcommerce/ecommerce-ui' import { useQuery } from '@graphcommerce/graphql' import { StoreConfigDocument } from '@graphcommerce/magento-store' import type { ChipOverlayOrPopperProps } from '@graphcommerce/next-ui' import { ActionCard, ChipOverlayOrPopper } from '@graphcommerce/next-ui' import { Trans } from '@lingui/react/macro' import { useMemo } from 'react' import { useProductFiltersPro } from './ProductFiltersPro' export type ProductFiltersProLimitChipProps = Omit< ChipOverlayOrPopperProps, 'label' | 'selected' | 'selectedLabel' | 'onApply' | 'onReset' | 'onClose' | 'children' > export function ProductFiltersProLimitChip(props: ProductFiltersProLimitChipProps) { const { chipProps, ...rest } = props const { params, form, submit } = useProductFiltersPro() const { control } = form const activePageSize = useWatch({ control, name: 'pageSize' }) const { data: storeConfigQuery } = useQuery(StoreConfigDocument) const defaultPerPage = Number(storeConfigQuery?.storeConfig?.grid_per_page) const options: ActionCardItemBase[] = useMemo( () => (storeConfigQuery?.storeConfig?.grid_per_page_values?.split(',').map(Number) ?? []).map( (count) => ({ value: count === defaultPerPage ? null : count, title: {count} Per page, }), ), [defaultPerPage, storeConfigQuery?.storeConfig?.grid_per_page_values], ) if (options.length <= 1) return null return ( Per page} selected={Boolean(params.pageSize)} selectedLabel={{params.pageSize} Per page} onApply={submit} onReset={ activePageSize ? () => { form.setValue('pageSize', null) form.setValue('currentPage', 1) return submit() } : undefined } onClose={submit} > {() => ( )} ) }