import { useCreatePickerModal as useCreatePickerModalBase, UsePickerModalParamsBase, UsePickerModalParams as UsePickerModalParamsOriginal, PickerModalState, useSyncPickerModalProps, } from '../hooks'; import { wixPatternsEnvironment, FiltersMap, OptionalFiltersMap, } from '@wix/bex-core'; import { PaginationModeConfig } from '@wix/bex-core/react'; import { FlowBusinessManagerModule, useComponentInfo, useModuleInfo, useModuleParams, } from '@wix/yoshi-flow-bm'; import { useErrorMonitorCompat } from './errorMonitorCompat'; import { getModule } from '@wix/business-manager-api'; import { useCallback, useState } from 'react'; interface UsePickerModalParamsOverrides { environment?: Partial['environment']>; } type UsePickerModalParamsBM = Omit< UsePickerModalParamsBase, | 'paginationMode' | 'fetchData' | 'environment' | 'errorMonitor' | 'biLoggerFactory' >; export type UsePickerModalParams< T, F extends FiltersMap, > = UsePickerModalParamsBM & UsePickerModalParamsOverrides & PaginationModeConfig; export type PikerModalFactory = ( config: UsePickerModalParams, ) => PickerModalState; export function useCreatePickerModal(): PikerModalFactory { const moduleParams = useModuleParams(); const moduleInfo = useModuleInfo(); const componentInfo = useComponentInfo(); const errorMonitor = useErrorMonitorCompat(); const createPicker = useCreatePickerModalBase(); return useCallback( ( params: UsePickerModalParams, ) => { const { accountLanguage: language } = moduleParams; const { moduleId } = moduleInfo; const { componentId } = componentInfo; const { _essentials } = getModule( moduleId as any, ) as FlowBusinessManagerModule; return createPicker({ ...params, environment: wixPatternsEnvironment({ language, componentId, artifactId: moduleId, ...params?.environment, }), errorMonitor, biLoggerFactory: _essentials.biLoggerFactory, } as UsePickerModalParamsOriginal); }, [], ); } export function usePickerModal( params: UsePickerModalParams, ) { const createPickerModal = useCreatePickerModal(); const [state] = useState(() => createPickerModal(params)); useSyncPickerModalProps(state, params); return state; }