UNPKG

react-native-priv-sdk

Version:

Official MyCover.ai SDK. Supercharge your product with MyCover AI Insurance offerings. Create embedded insurance offerings or full white label insurance applications that excite your customers.

132 lines (110 loc) 3.97 kB
import customLog from '../../../utils/logger'; import ProductRepository from '../../../data/repositories/product_repo'; import { useMiscStore } from '../../../store/miscStore'; import { ProductDetailsModel } from '../../../models/ProductDetailsModel'; import { ProviderModel } from '../../../models/ProviderModel'; import { ToastStatus } from '../../../utils/enums'; import globalObject from '../../../store/globalObject'; import { showToast } from '../../../components/CustomToast'; const productRepository = new ProductRepository(); export const ProductViewModel = () => { const miscGlobal = useMiscStore((state: any) => state); const getAllInsuranceProviders = async () => { try { const res = await productRepository.getAllInsuranceProviders(); if (res.responseCode === 1) { const providers = res.data.providers || []; providers.sort((a: any, b: any) => { if (!a.companyName || !b.companyName) return 0; return a.companyName.localeCompare(b.companyName); }); miscGlobal.setAllProviders(providers.filter((p: any) => p.companyName)); } else { const errorMessage = res.errors && res.errors.length > 0 ? res.errors.join(', ') : res.message; showToast(ToastStatus.failed, errorMessage); } } catch (error) { customLog.error('Request Failed', error); showToast(ToastStatus.failed, `${error}`); } }; const getInsuranceProviders = async ( categoryId: string, providerIds?: string[] ) => { try { await getProductDetails(categoryId, providerIds); const res = await productRepository.getInsuranceProviders(categoryId); if (res.responseCode === 1) { const providers = (res.data.providers || []).map((provider: any) => ProviderModel.fromJson({ ...provider, companyName: provider.companyName || 'Unnamed Provider', }) ); providers.sort((a: ProviderModel, b: ProviderModel) => { if (!a.companyName || !b.companyName) return 0; return a.companyName.localeCompare(b.companyName); }); miscGlobal.setProductProviderList(providers); } else { const errorMessage = res.errors && res.errors.length > 0 ? res.errors.join(', ') : res.message; showToast(ToastStatus.failed, errorMessage); } } catch (error) { showToast(ToastStatus.failed, `${error}`); } }; const getProductDetails = async ( categoryId: string, providerIds?: string[] ) => { try { const res = await productRepository.getProductDetails({ categoryId, providerIds, priceStaticFrom: miscGlobal.filterFromNaira, priceStaticTo: miscGlobal.filterToNaira, priceDynamicFrom: miscGlobal.filterFromPercent, priceDynamicTo: miscGlobal.filterToPercent, }); if (res.responseCode === 1) { const products = (res.data.products as any[]).map((e) => ProductDetailsModel.fromJson(e) ); const sortedProducts = products.sort(function (a, b) { if (!a.name || !b.name) return 0; return a.name.localeCompare(b.name); }); miscGlobal.setProductList(sortedProducts); } else { const errorMessage = res.errors && res.errors.length > 0 ? res.errors.join(', ') : res.message; showToast(ToastStatus.failed, errorMessage); } } catch (error) { showToast(ToastStatus.failed, `${error}`); } }; const initialize = async () => { await getAllInsuranceProviders(); const firstCategoryId = globalObject.productCategories[0]?.id; if (firstCategoryId) { await getInsuranceProviders(firstCategoryId); } }; return { getAllInsuranceProviders, getInsuranceProviders, getProductDetails, initialize, }; };