import { ActionCardListForm, useWatch } from '@graphcommerce/ecommerce-ui' import type { ProductAttributeFilterInput } from '@graphcommerce/graphql-mesh' import { ActionCard, ActionCardAccordion, Button, filterNonNullableKeys, iconCirle, IconSvg, } from '@graphcommerce/next-ui' import { Trans } from '@lingui/react/macro' import { Box } from '@mui/material' import { useMemo } from 'react' import { isFilterTypeEqual } from '../ProductListItems/filterTypes' import { useProductFiltersPro } from './ProductFiltersPro' import type { FilterProps } from './ProductFiltersProAggregations' export function ProductFilterEqualSection(props: FilterProps) { const { aggregation } = props const { attribute_code, label, options } = aggregation const { form, params } = useProductFiltersPro() const { control } = form const attrCode = attribute_code as keyof ProductAttributeFilterInput // We are casting the name, because filters can have other types than equal which dont have the in property const name = `filters.${attrCode}.in` as 'filters.category_id.in' const currentFilter = useWatch({ control, name }) const param = params.filters?.[attrCode] if (param && !isFilterTypeEqual(param)) throw new Error('Invalid filter type') const items = useMemo( () => filterNonNullableKeys(options, ['label']).map((option) => ({ ...option, title: ( {option.label} {option.count !== null && ( ({option.count}) )} ), image: attrCode?.toLowerCase().includes('color') && ( ), })), [attrCode, options], ) return ( } right={ currentFilter && currentFilter.length > 0 ? ( ) : undefined } /> ) }