import { useCallback, useState } from 'react'; import { FiltersMap } from '@wix/bex-core'; import { ViewsState } from '../state'; import { useWixPatternsContainer } from '@wix/bex-core/react'; import { View } from '../model'; import { CollectionViewsDropdownProps } from '../components/CollectionViewsDropdown'; import { presetsToCategories } from '../state/presetsToCategories'; export interface ViewsConfig { namespace: string; presets?: CollectionViewsDropdownProps['presets']; allItemsViewProps?: CollectionViewsDropdownProps['allItemsViewProps']; initialSelect?: true | ((item: View, index: number) => boolean); fqdn: string; } export type ViewsFactory = ( config: ViewsConfig, ) => ViewsState; export function useCreateViews(): ViewsFactory { const container = useWixPatternsContainer(); return useCallback( (config: ViewsConfig) => { const { namespace, presets, initialSelect, fqdn, allItemsViewProps } = config; return new ViewsState({ oldNamespace: namespace, presets: presetsToCategories(presets), container, initialSelect, fqdn, allItemsViewProps, reportBI: () => {}, }); }, [], ); } export const useViews: ViewsFactory = (config) => { const createViews = useCreateViews(); const [state] = useState(() => createViews(config)); return state; };