UNPKG

autumn-js

Version:
199 lines (195 loc) 5.68 kB
"use client"; import { AutumnError } from "./chunk-SFOIZTAS.mjs"; // src/libraries/react/hooks/usePricingTableBase.tsx import useSWR from "swr"; var mergeProductDetails = (products, productDetails) => { if (!products) { return null; } if (!productDetails) { return products.map((product) => { if (product.base_variant_id) { let baseProduct = products.find( (p) => p.id === product.base_variant_id ); if (baseProduct) { return { ...product, name: baseProduct.name }; } } return product; }); } let fetchedProducts = structuredClone(products); let mergedProducts = []; for (const overrideDetails of productDetails) { if (!overrideDetails.id) { let properties = {}; let overrideItems2 = overrideDetails.items?.map((item) => ({ display: { primary_text: item.primaryText, secondary_text: item.secondaryText } })); let overridePrice2 = overrideDetails.price; if (overrideDetails.price) { properties.is_free = false; overrideItems2 = [ { display: { primary_text: overridePrice2?.primaryText, secondary_text: overridePrice2?.secondaryText } }, ...overrideItems2 || [] ]; } if (!overrideItems2 || overrideItems2.length === 0) { overrideItems2 = [ { display: { primary_text: "" } } ]; } mergedProducts.push({ display: { name: overrideDetails.name, description: overrideDetails.description, button_text: overrideDetails.buttonText, recommend_text: overrideDetails.recommendText, everything_from: overrideDetails.everythingFrom, button_url: overrideDetails.buttonUrl }, items: overrideItems2, properties }); continue; } let fetchedProduct = fetchedProducts.find( (p) => p.id === overrideDetails.id ); if (!fetchedProduct) { continue; } let displayName = fetchedProduct.name; let baseVariantId = fetchedProduct.base_variant_id; if (baseVariantId) { let baseProduct = fetchedProducts.find((p) => p.id === baseVariantId); if (baseProduct) { displayName = baseProduct.name; } } displayName = overrideDetails.name || displayName; const originalIsFree = fetchedProduct.properties?.is_free; let overrideProperties = fetchedProduct.properties || {}; let overrideItems = overrideDetails.items; let overridePrice = overrideDetails.price; let mergedItems = []; if (overridePrice) { overrideProperties.is_free = false; if (originalIsFree || overrideItems !== void 0) { mergedItems.push({ display: { primary_text: overridePrice.primaryText, secondary_text: overridePrice.secondaryText } }); } else { fetchedProduct.items[0].display = { primary_text: overridePrice.primaryText, secondary_text: overridePrice.secondaryText }; } } else { if (overrideItems && !originalIsFree) { mergedItems.push(fetchedProduct.items[0]); } } if (overrideItems) { for (const overrideItem of overrideItems) { if (!overrideItem.featureId) { mergedItems.push({ display: { primary_text: overrideItem.primaryText, secondary_text: overrideItem.secondaryText } }); } else { let fetchedItem = fetchedProduct.items.find( (i) => i.feature_id === overrideItem.featureId ); if (!fetchedItem) { console.error( `Feature with id ${overrideItem.featureId} not found for product ${fetchedProduct.id}` ); continue; } mergedItems.push({ ...fetchedItem, display: { primary_text: overrideItem.primaryText || fetchedItem.display?.primary_text, secondary_text: overrideItem.secondaryText || fetchedItem.display?.secondary_text } }); } } } else { mergedItems = fetchedProduct.items; } const mergedProduct = { ...fetchedProduct, items: mergedItems, properties: overrideProperties, display: { name: displayName, description: overrideDetails.description, button_text: overrideDetails.buttonText, recommend_text: overrideDetails.recommendText, everything_from: overrideDetails.everythingFrom, button_url: overrideDetails.buttonUrl } }; mergedProducts.push(mergedProduct); } return mergedProducts; }; var defaultSWRConfig = { refreshInterval: 0 }; var usePricingTableBase = ({ client, params }) => { const fetcher = async () => { try { const { data: data2, error: error2 } = await client.products.list(); if (error2) throw error2; return data2?.list || []; } catch (error2) { throw new AutumnError({ message: "Failed to fetch pricing table products", code: "failed_to_fetch_pricing_table_products" }); } }; const { data, error, mutate } = useSWR( ["pricing-table", client.backendUrl], fetcher, { ...defaultSWRConfig } ); return { products: mergeProductDetails(data || [], params?.productDetails), isLoading: !error && !data, error, refetch: mutate }; }; export { usePricingTableBase };